PluginProbe
Gutenberg / 22.9.0
Gutenberg v22.9.0
23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 7.4.0 All 402 releases
gutenberg / build / scripts / style-engine / index.js

index.js in Gutenberg 22.9.0, at build/scripts/style-engine/index.js

673 lines 17.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2 var wp;
3 (wp ||= {}).styleEngine = (() => {
4 var __defProp = Object.defineProperty;
5 var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6 var __getOwnPropNames = Object.getOwnPropertyNames;
7 var __hasOwnProp = Object.prototype.hasOwnProperty;
8 var __export = (target, all) => {
9 for (var name in all)
10 __defProp(target, name, { get: all[name], enumerable: true });
11 };
12 var __copyProps = (to, from, except, desc) => {
13 if (from && typeof from === "object" || typeof from === "function") {
14 for (let key of __getOwnPropNames(from))
15 if (!__hasOwnProp.call(to, key) && key !== except)
16 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17 }
18 return to;
19 };
20 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
22 // packages/style-engine/build-module/index.mjs
23 var index_exports = {};
24 __export(index_exports, {
25 compileCSS: () => compileCSS,
26 getCSSRules: () => getCSSRules,
27 getCSSValueFromRawStyle: () => getCSSValueFromRawStyle
28 });
29
30 // node_modules/tslib/tslib.es6.mjs
31 var __assign = function() {
32 __assign = Object.assign || function __assign2(t) {
33 for (var s, i = 1, n = arguments.length; i < n; i++) {
34 s = arguments[i];
35 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
36 }
37 return t;
38 };
39 return __assign.apply(this, arguments);
40 };
41
42 // node_modules/lower-case/dist.es2015/index.js
43 function lowerCase(str) {
44 return str.toLowerCase();
45 }
46
47 // node_modules/no-case/dist.es2015/index.js
48 var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];
49 var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;
50 function noCase(input, options) {
51 if (options === void 0) {
52 options = {};
53 }
54 var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? " " : _d;
55 var result = replace(replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0");
56 var start = 0;
57 var end = result.length;
58 while (result.charAt(start) === "\0")
59 start++;
60 while (result.charAt(end - 1) === "\0")
61 end--;
62 return result.slice(start, end).split("\0").map(transform).join(delimiter);
63 }
64 function replace(input, re, value) {
65 if (re instanceof RegExp)
66 return input.replace(re, value);
67 return re.reduce(function(input2, re2) {
68 return input2.replace(re2, value);
69 }, input);
70 }
71
72 // node_modules/dot-case/dist.es2015/index.js
73 function dotCase(input, options) {
74 if (options === void 0) {
75 options = {};
76 }
77 return noCase(input, __assign({ delimiter: "." }, options));
78 }
79
80 // node_modules/param-case/dist.es2015/index.js
81 function paramCase(input, options) {
82 if (options === void 0) {
83 options = {};
84 }
85 return dotCase(input, __assign({ delimiter: "-" }, options));
86 }
87
88 // packages/style-engine/build-module/styles/constants.mjs
89 var VARIABLE_REFERENCE_PREFIX = "var:";
90 var VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = "|";
91 var VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = "--";
92
93 // packages/style-engine/build-module/styles/utils.mjs
94 var getStyleValueByPath = (object, path) => {
95 let value = object;
96 path.forEach((fieldName) => {
97 value = value?.[fieldName];
98 });
99 return value;
100 };
101 function generateRule(style, options, path, ruleKey) {
102 const styleValue = getStyleValueByPath(style, path);
103 return styleValue ? [
104 {
105 selector: options?.selector,
106 key: ruleKey,
107 value: getCSSValueFromRawStyle(styleValue)
108 }
109 ] : [];
110 }
111 function generateBoxRules(style, options, path, ruleKeys, individualProperties = ["top", "right", "bottom", "left"]) {
112 const boxStyle = getStyleValueByPath(
113 style,
114 path
115 );
116 if (!boxStyle) {
117 return [];
118 }
119 const rules = [];
120 if (typeof boxStyle === "string") {
121 rules.push({
122 selector: options?.selector,
123 key: ruleKeys.default,
124 value: getCSSValueFromRawStyle(boxStyle)
125 });
126 } else {
127 const sideRules = individualProperties.reduce(
128 (acc, side) => {
129 const value = getCSSValueFromRawStyle(
130 getStyleValueByPath(boxStyle, [side])
131 );
132 if (value) {
133 acc.push({
134 selector: options?.selector,
135 key: ruleKeys?.individual.replace(
136 "%s",
137 upperFirst(side)
138 ),
139 value
140 });
141 }
142 return acc;
143 },
144 []
145 );
146 rules.push(...sideRules);
147 }
148 return rules;
149 }
150 function getCSSValueFromRawStyle(styleValue) {
151 if (typeof styleValue === "string" && styleValue.startsWith(VARIABLE_REFERENCE_PREFIX)) {
152 const variable = styleValue.slice(VARIABLE_REFERENCE_PREFIX.length).split(VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE).map(
153 (presetVariable) => paramCase(presetVariable, {
154 splitRegexp: [
155 /([a-z0-9])([A-Z])/g,
156 // fooBar => foo-bar, 3Bar => 3-bar
157 /([0-9])([a-z])/g,
158 // 3bar => 3-bar
159 /([A-Za-z])([0-9])/g,
160 // Foo3 => foo-3, foo3 => foo-3
161 /([A-Z])([A-Z][a-z])/g
162 // FOOBar => foo-bar
163 ]
164 })
165 ).join(VARIABLE_PATH_SEPARATOR_TOKEN_STYLE);
166 return `var(--wp--${variable})`;
167 }
168 return styleValue;
169 }
170 function upperFirst(string) {
171 const [firstLetter, ...rest] = string;
172 return firstLetter.toUpperCase() + rest.join("");
173 }
174 function camelCaseJoin(strings) {
175 const [firstItem, ...rest] = strings;
176 return firstItem.toLowerCase() + rest.map(upperFirst).join("");
177 }
178 function safeDecodeURI(uri) {
179 try {
180 return decodeURI(uri);
181 } catch (uriError) {
182 return uri;
183 }
184 }
185
186 // packages/style-engine/build-module/styles/border/index.mjs
187 function createBorderGenerateFunction(path) {
188 return (style, options) => generateRule(style, options, path, camelCaseJoin(path));
189 }
190 function createBorderEdgeGenerateFunction(edge) {
191 return (style, options) => {
192 return ["color", "style", "width"].flatMap((key) => {
193 const path = ["border", edge, key];
194 return createBorderGenerateFunction(path)(style, options);
195 });
196 };
197 }
198 var color = {
199 name: "color",
200 generate: createBorderGenerateFunction(["border", "color"])
201 };
202 var radius = {
203 name: "radius",
204 generate: (style, options) => {
205 return generateBoxRules(
206 style,
207 options,
208 ["border", "radius"],
209 {
210 default: "borderRadius",
211 individual: "border%sRadius"
212 },
213 ["topLeft", "topRight", "bottomLeft", "bottomRight"]
214 );
215 }
216 };
217 var borderStyle = {
218 name: "style",
219 generate: createBorderGenerateFunction(["border", "style"])
220 };
221 var width = {
222 name: "width",
223 generate: createBorderGenerateFunction(["border", "width"])
224 };
225 var borderTop = {
226 name: "borderTop",
227 generate: createBorderEdgeGenerateFunction("top")
228 };
229 var borderRight = {
230 name: "borderRight",
231 generate: createBorderEdgeGenerateFunction("right")
232 };
233 var borderBottom = {
234 name: "borderBottom",
235 generate: createBorderEdgeGenerateFunction("bottom")
236 };
237 var borderLeft = {
238 name: "borderLeft",
239 generate: createBorderEdgeGenerateFunction("left")
240 };
241 var border_default = [
242 color,
243 borderStyle,
244 width,
245 radius,
246 borderTop,
247 borderRight,
248 borderBottom,
249 borderLeft
250 ];
251
252 // packages/style-engine/build-module/styles/color/background.mjs
253 var background = {
254 name: "background",
255 generate: (style, options) => {
256 return generateRule(
257 style,
258 options,
259 ["color", "background"],
260 "backgroundColor"
261 );
262 }
263 };
264 var background_default = background;
265
266 // packages/style-engine/build-module/styles/color/gradient.mjs
267 var gradient = {
268 name: "gradient",
269 generate: (style, options) => {
270 return generateRule(
271 style,
272 options,
273 ["color", "gradient"],
274 "background"
275 );
276 }
277 };
278 var gradient_default = gradient;
279
280 // packages/style-engine/build-module/styles/color/text.mjs
281 var text = {
282 name: "text",
283 generate: (style, options) => {
284 return generateRule(style, options, ["color", "text"], "color");
285 }
286 };
287 var text_default = text;
288
289 // packages/style-engine/build-module/styles/color/index.mjs
290 var color_default = [text_default, gradient_default, background_default];
291
292 // packages/style-engine/build-module/styles/dimensions/index.mjs
293 var height = {
294 name: "height",
295 generate: (style, options) => {
296 return generateRule(
297 style,
298 options,
299 ["dimensions", "height"],
300 "height"
301 );
302 }
303 };
304 var minHeight = {
305 name: "minHeight",
306 generate: (style, options) => {
307 return generateRule(
308 style,
309 options,
310 ["dimensions", "minHeight"],
311 "minHeight"
312 );
313 }
314 };
315 var aspectRatio = {
316 name: "aspectRatio",
317 generate: (style, options) => {
318 return generateRule(
319 style,
320 options,
321 ["dimensions", "aspectRatio"],
322 "aspectRatio"
323 );
324 }
325 };
326 var width2 = {
327 name: "width",
328 generate: (style, options) => {
329 return generateRule(
330 style,
331 options,
332 ["dimensions", "width"],
333 "width"
334 );
335 }
336 };
337 var dimensions_default = [height, minHeight, aspectRatio, width2];
338
339 // packages/style-engine/build-module/styles/background/index.mjs
340 var backgroundImage = {
341 name: "backgroundImage",
342 generate: (style, options) => {
343 const _backgroundImage = style?.background?.backgroundImage;
344 const gradient2 = getCSSValueFromRawStyle(style?.background?.gradient) || "";
345 if (!_backgroundImage && !gradient2) {
346 return [];
347 }
348 const backgroundImageValue = typeof _backgroundImage === "object" && _backgroundImage?.url ? `url( '${encodeURI(
349 safeDecodeURI(_backgroundImage.url)
350 )}' )` : getCSSValueFromRawStyle(_backgroundImage);
351 const cssValue = [gradient2, backgroundImageValue].filter(Boolean).join(", ");
352 return !!cssValue ? [
353 {
354 selector: options.selector,
355 key: "backgroundImage",
356 value: cssValue
357 }
358 ] : [];
359 }
360 };
361 var backgroundPosition = {
362 name: "backgroundPosition",
363 generate: (style, options) => {
364 return generateRule(
365 style,
366 options,
367 ["background", "backgroundPosition"],
368 "backgroundPosition"
369 );
370 }
371 };
372 var backgroundRepeat = {
373 name: "backgroundRepeat",
374 generate: (style, options) => {
375 return generateRule(
376 style,
377 options,
378 ["background", "backgroundRepeat"],
379 "backgroundRepeat"
380 );
381 }
382 };
383 var backgroundSize = {
384 name: "backgroundSize",
385 generate: (style, options) => {
386 return generateRule(
387 style,
388 options,
389 ["background", "backgroundSize"],
390 "backgroundSize"
391 );
392 }
393 };
394 var backgroundAttachment = {
395 name: "backgroundAttachment",
396 generate: (style, options) => {
397 return generateRule(
398 style,
399 options,
400 ["background", "backgroundAttachment"],
401 "backgroundAttachment"
402 );
403 }
404 };
405 var background_default2 = [
406 backgroundImage,
407 backgroundPosition,
408 backgroundRepeat,
409 backgroundSize,
410 backgroundAttachment
411 ];
412
413 // packages/style-engine/build-module/styles/shadow/index.mjs
414 var shadow = {
415 name: "shadow",
416 generate: (style, options) => {
417 return generateRule(style, options, ["shadow"], "boxShadow");
418 }
419 };
420 var shadow_default = [shadow];
421
422 // packages/style-engine/build-module/styles/outline/index.mjs
423 var color2 = {
424 name: "color",
425 generate: (style, options, path = ["outline", "color"], ruleKey = "outlineColor") => {
426 return generateRule(style, options, path, ruleKey);
427 }
428 };
429 var offset = {
430 name: "offset",
431 generate: (style, options, path = ["outline", "offset"], ruleKey = "outlineOffset") => {
432 return generateRule(style, options, path, ruleKey);
433 }
434 };
435 var outlineStyle = {
436 name: "style",
437 generate: (style, options, path = ["outline", "style"], ruleKey = "outlineStyle") => {
438 return generateRule(style, options, path, ruleKey);
439 }
440 };
441 var width3 = {
442 name: "width",
443 generate: (style, options, path = ["outline", "width"], ruleKey = "outlineWidth") => {
444 return generateRule(style, options, path, ruleKey);
445 }
446 };
447 var outline_default = [color2, outlineStyle, offset, width3];
448
449 // packages/style-engine/build-module/styles/spacing/padding.mjs
450 var padding = {
451 name: "padding",
452 generate: (style, options) => {
453 return generateBoxRules(style, options, ["spacing", "padding"], {
454 default: "padding",
455 individual: "padding%s"
456 });
457 }
458 };
459 var padding_default = padding;
460
461 // packages/style-engine/build-module/styles/spacing/margin.mjs
462 var margin = {
463 name: "margin",
464 generate: (style, options) => {
465 return generateBoxRules(style, options, ["spacing", "margin"], {
466 default: "margin",
467 individual: "margin%s"
468 });
469 }
470 };
471 var margin_default = margin;
472
473 // packages/style-engine/build-module/styles/spacing/index.mjs
474 var spacing_default = [margin_default, padding_default];
475
476 // packages/style-engine/build-module/styles/typography/index.mjs
477 var fontSize = {
478 name: "fontSize",
479 generate: (style, options) => {
480 return generateRule(
481 style,
482 options,
483 ["typography", "fontSize"],
484 "fontSize"
485 );
486 }
487 };
488 var fontStyle = {
489 name: "fontStyle",
490 generate: (style, options) => {
491 return generateRule(
492 style,
493 options,
494 ["typography", "fontStyle"],
495 "fontStyle"
496 );
497 }
498 };
499 var fontWeight = {
500 name: "fontWeight",
501 generate: (style, options) => {
502 return generateRule(
503 style,
504 options,
505 ["typography", "fontWeight"],
506 "fontWeight"
507 );
508 }
509 };
510 var fontFamily = {
511 name: "fontFamily",
512 generate: (style, options) => {
513 return generateRule(
514 style,
515 options,
516 ["typography", "fontFamily"],
517 "fontFamily"
518 );
519 }
520 };
521 var letterSpacing = {
522 name: "letterSpacing",
523 generate: (style, options) => {
524 return generateRule(
525 style,
526 options,
527 ["typography", "letterSpacing"],
528 "letterSpacing"
529 );
530 }
531 };
532 var lineHeight = {
533 name: "lineHeight",
534 generate: (style, options) => {
535 return generateRule(
536 style,
537 options,
538 ["typography", "lineHeight"],
539 "lineHeight"
540 );
541 }
542 };
543 var textColumns = {
544 name: "textColumns",
545 generate: (style, options) => {
546 return generateRule(
547 style,
548 options,
549 ["typography", "textColumns"],
550 "columnCount"
551 );
552 }
553 };
554 var textDecoration = {
555 name: "textDecoration",
556 generate: (style, options) => {
557 return generateRule(
558 style,
559 options,
560 ["typography", "textDecoration"],
561 "textDecoration"
562 );
563 }
564 };
565 var textIndent = {
566 name: "textIndent",
567 generate: (style, options) => {
568 return generateRule(
569 style,
570 options,
571 ["typography", "textIndent"],
572 "textIndent"
573 );
574 }
575 };
576 var textTransform = {
577 name: "textTransform",
578 generate: (style, options) => {
579 return generateRule(
580 style,
581 options,
582 ["typography", "textTransform"],
583 "textTransform"
584 );
585 }
586 };
587 var writingMode = {
588 name: "writingMode",
589 generate: (style, options) => {
590 return generateRule(
591 style,
592 options,
593 ["typography", "writingMode"],
594 "writingMode"
595 );
596 }
597 };
598 var typography_default = [
599 fontFamily,
600 fontSize,
601 fontStyle,
602 fontWeight,
603 letterSpacing,
604 lineHeight,
605 textColumns,
606 textDecoration,
607 textIndent,
608 textTransform,
609 writingMode
610 ];
611
612 // packages/style-engine/build-module/styles/index.mjs
613 var styleDefinitions = [
614 ...border_default,
615 ...color_default,
616 ...dimensions_default,
617 ...outline_default,
618 ...spacing_default,
619 ...typography_default,
620 ...shadow_default,
621 ...background_default2
622 ];
623
624 // packages/style-engine/build-module/index.mjs
625 function compileCSS(style, options = {}) {
626 const rules = getCSSRules(style, options);
627 if (!options?.selector) {
628 const inlineRules = [];
629 rules.forEach((rule) => {
630 inlineRules.push(`${paramCase(rule.key)}: ${rule.value};`);
631 });
632 return inlineRules.join(" ");
633 }
634 const groupedRules = rules.reduce(
635 (acc, rule) => {
636 const { selector } = rule;
637 if (!selector) {
638 return acc;
639 }
640 if (!acc[selector]) {
641 acc[selector] = [];
642 }
643 acc[selector].push(rule);
644 return acc;
645 },
646 {}
647 );
648 const selectorRules = Object.keys(groupedRules).reduce(
649 (acc, subSelector) => {
650 acc.push(
651 `${subSelector} { ${groupedRules[subSelector].map(
652 (rule) => `${paramCase(rule.key)}: ${rule.value};`
653 ).join(" ")} }`
654 );
655 return acc;
656 },
657 []
658 );
659 return selectorRules.join("\n");
660 }
661 function getCSSRules(style, options = {}) {
662 const rules = [];
663 styleDefinitions.forEach((definition) => {
664 if (typeof definition.generate === "function") {
665 rules.push(...definition.generate(style, options));
666 }
667 });
668 return rules;
669 }
670 return __toCommonJS(index_exports);
671 })();
672 //# sourceMappingURL=index.js.map
673