PluginProbe
Gutenberg / 22.7.0
Gutenberg v22.7.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 22.7.0, at build/scripts/style-engine/index.js

676 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 if (typeof _backgroundImage === "object" && _backgroundImage?.url) {
345 return [
346 {
347 selector: options.selector,
348 key: "backgroundImage",
349 // Passed `url` may already be encoded. To prevent double encoding, decodeURI is executed to revert to the original string.
350 value: `url( '${encodeURI(
351 safeDecodeURI(_backgroundImage.url)
352 )}' )`
353 }
354 ];
355 }
356 return generateRule(
357 style,
358 options,
359 ["background", "backgroundImage"],
360 "backgroundImage"
361 );
362 }
363 };
364 var backgroundPosition = {
365 name: "backgroundPosition",
366 generate: (style, options) => {
367 return generateRule(
368 style,
369 options,
370 ["background", "backgroundPosition"],
371 "backgroundPosition"
372 );
373 }
374 };
375 var backgroundRepeat = {
376 name: "backgroundRepeat",
377 generate: (style, options) => {
378 return generateRule(
379 style,
380 options,
381 ["background", "backgroundRepeat"],
382 "backgroundRepeat"
383 );
384 }
385 };
386 var backgroundSize = {
387 name: "backgroundSize",
388 generate: (style, options) => {
389 return generateRule(
390 style,
391 options,
392 ["background", "backgroundSize"],
393 "backgroundSize"
394 );
395 }
396 };
397 var backgroundAttachment = {
398 name: "backgroundAttachment",
399 generate: (style, options) => {
400 return generateRule(
401 style,
402 options,
403 ["background", "backgroundAttachment"],
404 "backgroundAttachment"
405 );
406 }
407 };
408 var background_default2 = [
409 backgroundImage,
410 backgroundPosition,
411 backgroundRepeat,
412 backgroundSize,
413 backgroundAttachment
414 ];
415
416 // packages/style-engine/build-module/styles/shadow/index.mjs
417 var shadow = {
418 name: "shadow",
419 generate: (style, options) => {
420 return generateRule(style, options, ["shadow"], "boxShadow");
421 }
422 };
423 var shadow_default = [shadow];
424
425 // packages/style-engine/build-module/styles/outline/index.mjs
426 var color2 = {
427 name: "color",
428 generate: (style, options, path = ["outline", "color"], ruleKey = "outlineColor") => {
429 return generateRule(style, options, path, ruleKey);
430 }
431 };
432 var offset = {
433 name: "offset",
434 generate: (style, options, path = ["outline", "offset"], ruleKey = "outlineOffset") => {
435 return generateRule(style, options, path, ruleKey);
436 }
437 };
438 var outlineStyle = {
439 name: "style",
440 generate: (style, options, path = ["outline", "style"], ruleKey = "outlineStyle") => {
441 return generateRule(style, options, path, ruleKey);
442 }
443 };
444 var width3 = {
445 name: "width",
446 generate: (style, options, path = ["outline", "width"], ruleKey = "outlineWidth") => {
447 return generateRule(style, options, path, ruleKey);
448 }
449 };
450 var outline_default = [color2, outlineStyle, offset, width3];
451
452 // packages/style-engine/build-module/styles/spacing/padding.mjs
453 var padding = {
454 name: "padding",
455 generate: (style, options) => {
456 return generateBoxRules(style, options, ["spacing", "padding"], {
457 default: "padding",
458 individual: "padding%s"
459 });
460 }
461 };
462 var padding_default = padding;
463
464 // packages/style-engine/build-module/styles/spacing/margin.mjs
465 var margin = {
466 name: "margin",
467 generate: (style, options) => {
468 return generateBoxRules(style, options, ["spacing", "margin"], {
469 default: "margin",
470 individual: "margin%s"
471 });
472 }
473 };
474 var margin_default = margin;
475
476 // packages/style-engine/build-module/styles/spacing/index.mjs
477 var spacing_default = [margin_default, padding_default];
478
479 // packages/style-engine/build-module/styles/typography/index.mjs
480 var fontSize = {
481 name: "fontSize",
482 generate: (style, options) => {
483 return generateRule(
484 style,
485 options,
486 ["typography", "fontSize"],
487 "fontSize"
488 );
489 }
490 };
491 var fontStyle = {
492 name: "fontStyle",
493 generate: (style, options) => {
494 return generateRule(
495 style,
496 options,
497 ["typography", "fontStyle"],
498 "fontStyle"
499 );
500 }
501 };
502 var fontWeight = {
503 name: "fontWeight",
504 generate: (style, options) => {
505 return generateRule(
506 style,
507 options,
508 ["typography", "fontWeight"],
509 "fontWeight"
510 );
511 }
512 };
513 var fontFamily = {
514 name: "fontFamily",
515 generate: (style, options) => {
516 return generateRule(
517 style,
518 options,
519 ["typography", "fontFamily"],
520 "fontFamily"
521 );
522 }
523 };
524 var letterSpacing = {
525 name: "letterSpacing",
526 generate: (style, options) => {
527 return generateRule(
528 style,
529 options,
530 ["typography", "letterSpacing"],
531 "letterSpacing"
532 );
533 }
534 };
535 var lineHeight = {
536 name: "lineHeight",
537 generate: (style, options) => {
538 return generateRule(
539 style,
540 options,
541 ["typography", "lineHeight"],
542 "lineHeight"
543 );
544 }
545 };
546 var textColumns = {
547 name: "textColumns",
548 generate: (style, options) => {
549 return generateRule(
550 style,
551 options,
552 ["typography", "textColumns"],
553 "columnCount"
554 );
555 }
556 };
557 var textDecoration = {
558 name: "textDecoration",
559 generate: (style, options) => {
560 return generateRule(
561 style,
562 options,
563 ["typography", "textDecoration"],
564 "textDecoration"
565 );
566 }
567 };
568 var textIndent = {
569 name: "textIndent",
570 generate: (style, options) => {
571 return generateRule(
572 style,
573 options,
574 ["typography", "textIndent"],
575 "textIndent"
576 );
577 }
578 };
579 var textTransform = {
580 name: "textTransform",
581 generate: (style, options) => {
582 return generateRule(
583 style,
584 options,
585 ["typography", "textTransform"],
586 "textTransform"
587 );
588 }
589 };
590 var writingMode = {
591 name: "writingMode",
592 generate: (style, options) => {
593 return generateRule(
594 style,
595 options,
596 ["typography", "writingMode"],
597 "writingMode"
598 );
599 }
600 };
601 var typography_default = [
602 fontFamily,
603 fontSize,
604 fontStyle,
605 fontWeight,
606 letterSpacing,
607 lineHeight,
608 textColumns,
609 textDecoration,
610 textIndent,
611 textTransform,
612 writingMode
613 ];
614
615 // packages/style-engine/build-module/styles/index.mjs
616 var styleDefinitions = [
617 ...border_default,
618 ...color_default,
619 ...dimensions_default,
620 ...outline_default,
621 ...spacing_default,
622 ...typography_default,
623 ...shadow_default,
624 ...background_default2
625 ];
626
627 // packages/style-engine/build-module/index.mjs
628 function compileCSS(style, options = {}) {
629 const rules = getCSSRules(style, options);
630 if (!options?.selector) {
631 const inlineRules = [];
632 rules.forEach((rule) => {
633 inlineRules.push(`${paramCase(rule.key)}: ${rule.value};`);
634 });
635 return inlineRules.join(" ");
636 }
637 const groupedRules = rules.reduce(
638 (acc, rule) => {
639 const { selector } = rule;
640 if (!selector) {
641 return acc;
642 }
643 if (!acc[selector]) {
644 acc[selector] = [];
645 }
646 acc[selector].push(rule);
647 return acc;
648 },
649 {}
650 );
651 const selectorRules = Object.keys(groupedRules).reduce(
652 (acc, subSelector) => {
653 acc.push(
654 `${subSelector} { ${groupedRules[subSelector].map(
655 (rule) => `${paramCase(rule.key)}: ${rule.value};`
656 ).join(" ")} }`
657 );
658 return acc;
659 },
660 []
661 );
662 return selectorRules.join("\n");
663 }
664 function getCSSRules(style, options = {}) {
665 const rules = [];
666 styleDefinitions.forEach((definition) => {
667 if (typeof definition.generate === "function") {
668 rules.push(...definition.generate(style, options));
669 }
670 });
671 return rules;
672 }
673 return __toCommonJS(index_exports);
674 })();
675 //# sourceMappingURL=index.js.map
676