PluginProbe
Gutenberg / 24.0.0
Gutenberg v24.0.0
24.0.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 All 403 releases
gutenberg / build / scripts / style-engine / index.js

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

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