css-in-props 3.8.8 → 3.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +6 -22
  2. package/dist/cjs/index.js +4 -4
  3. package/dist/cjs/props/animation.js +28 -23
  4. package/dist/cjs/props/block.js +46 -58
  5. package/dist/cjs/props/flex.js +4 -5
  6. package/dist/cjs/props/index.js +18 -19
  7. package/dist/cjs/props/misc.js +10 -3
  8. package/dist/cjs/props/theme.js +10 -7
  9. package/dist/cjs/set.js +13 -6
  10. package/dist/cjs/transform/executors.js +54 -47
  11. package/dist/cjs/transform/index.js +2 -2
  12. package/dist/cjs/transform/transformers.js +69 -20
  13. package/dist/esm/index.js +4 -4
  14. package/dist/esm/props/animation.js +28 -23
  15. package/dist/esm/props/block.js +46 -58
  16. package/dist/esm/props/flex.js +4 -5
  17. package/dist/esm/props/index.js +18 -19
  18. package/dist/esm/props/misc.js +10 -3
  19. package/dist/esm/props/theme.js +10 -7
  20. package/dist/esm/set.js +12 -5
  21. package/dist/esm/transform/executors.js +54 -47
  22. package/dist/esm/transform/index.js +2 -2
  23. package/dist/esm/transform/transformers.js +69 -20
  24. package/dist/iife/index.js +230 -167
  25. package/index.js +1 -0
  26. package/package.json +13 -15
  27. package/src/index.js +4 -4
  28. package/src/props/animation.js +28 -23
  29. package/src/props/block.js +49 -57
  30. package/src/props/flex.js +4 -5
  31. package/src/props/index.js +18 -19
  32. package/src/props/misc.js +10 -3
  33. package/src/props/theme.js +10 -7
  34. package/src/set.js +11 -4
  35. package/src/transform/executors.js +60 -52
  36. package/src/transform/index.js +2 -2
  37. package/src/transform/transformers.js +85 -23
  38. package/dist/cjs/_transform.js +0 -30
  39. package/dist/cjs/emotion.js +0 -29
  40. package/dist/esm/_transform.js +0 -10
  41. package/dist/esm/emotion.js +0 -9
  42. package/src/_transform.js +0 -10
  43. package/src/emotion.js +0 -9
@@ -1,56 +1,63 @@
1
- import { exec, isArray, isFunction, isObject, isProduction, merge, overwrite, overwriteDeep } from "@domql/utils";
2
- import { CSS_PROPS_REGISTRY } from "../props";
3
- import { DEFAULT_CSS_PROPERTIES_LIST } from "../props/defaults";
4
- import { applyTrueProps, transformersByPrefix } from "./transformers";
1
+ import { exec, isArray, isFunction, isObject, isProduction, merge, overwrite, overwriteDeep } from "@symbo.ls/utils";
2
+ import { pushConfig, popConfig } from "@symbo.ls/scratch";
3
+ import { CSS_PROPS_REGISTRY } from "../props/index.js";
4
+ import { DEFAULT_CSS_PROPERTIES_LIST } from "../props/defaults.js";
5
+ import { applyTrueProps, transformersByPrefix } from "./transformers.js";
5
6
  const isProd = isProduction();
6
7
  const usePropsAsCSS = (sourceObj, element, opts) => {
7
- let obj = {};
8
- const rest = {};
9
- const setToObj = (key, val) => {
10
- if (opts.unpack) {
11
- obj = { ...obj, ...val };
12
- return;
13
- }
14
- obj[key] = val;
15
- };
16
- for (const key in sourceObj) {
17
- const value = sourceObj[key];
18
- if (key === "class" && element.call("isString", sourceObj.class)) {
19
- const val = value.split(" ");
20
- if (val.length) {
21
- const CLASS = element.context.designSystem.class;
22
- const result = val.reduce((acc, curr) => merge(acc, CLASS[curr]), {});
23
- obj.designSystemClass = result;
24
- }
25
- } else if (key === "true") {
26
- const val = exec(value, element);
27
- merge(obj, applyTrueProps(val, element));
28
- } else if (element.classlist[key]) {
29
- const originalFromClass = element.classlist[key];
30
- const result = isFunction(originalFromClass) ? originalFromClass(element, element.state, element.context) : originalFromClass;
31
- if (result) setToObj(key, result);
32
- if (!isProd && isObject(obj[key])) obj[key].label = key;
33
- } else if (CSS_PROPS_REGISTRY[key]) {
34
- let val = exec(value, element);
35
- if (isArray(val)) {
36
- val = val.reduce((a, c) => merge(a, c), {});
8
+ const ds = element?.context?.designSystem;
9
+ if (ds) pushConfig(ds);
10
+ try {
11
+ let obj = {};
12
+ const rest = {};
13
+ const setToObj = (key, val) => {
14
+ if (opts.unpack) {
15
+ obj = { ...obj, ...val };
16
+ return;
37
17
  }
38
- let result = CSS_PROPS_REGISTRY[key](val, element, element.state, element.context);
39
- if (isArray(result)) result = result.reduce((a, c) => merge(a, c), {});
40
- if (result) setToObj(key, result);
41
- if (!isProd && isObject(obj[key])) obj[key].label = key;
42
- } else if (DEFAULT_CSS_PROPERTIES_LIST.has(key)) {
43
- let result = exec(value, element);
44
- if (typeof result === "string" && result.charCodeAt(0) === 45 && result.charCodeAt(1) === 45) {
45
- result = `var(${result})`;
18
+ obj[key] = val;
19
+ };
20
+ for (const key in sourceObj) {
21
+ const value = sourceObj[key];
22
+ if (key === "class" && element.call("isString", sourceObj.class)) {
23
+ const val = value.split(" ");
24
+ if (val.length) {
25
+ const CLASS = element.context.designSystem.class;
26
+ const result = val.reduce((acc, curr) => merge(acc, CLASS[curr]), {});
27
+ obj.designSystemClass = result;
28
+ }
29
+ } else if (key === "true") {
30
+ const val = exec(value, element);
31
+ merge(obj, applyTrueProps(val, element));
32
+ } else if (element.classlist[key]) {
33
+ const originalFromClass = element.classlist[key];
34
+ const result = isFunction(originalFromClass) ? originalFromClass(element, element.state, element.context) : originalFromClass;
35
+ if (result) setToObj(key, result);
36
+ if (!isProd && isObject(obj[key])) obj[key].label = key;
37
+ } else if (CSS_PROPS_REGISTRY[key]) {
38
+ let val = exec(value, element);
39
+ if (isArray(val)) {
40
+ val = val.reduce((a, c) => merge(a, c), {});
41
+ }
42
+ let result = CSS_PROPS_REGISTRY[key](val, element, element.state, element.context);
43
+ if (isArray(result)) result = result.reduce((a, c) => merge(a, c), {});
44
+ if (result) setToObj(key, result);
45
+ if (!isProd && isObject(obj[key])) obj[key].label = key;
46
+ } else if (DEFAULT_CSS_PROPERTIES_LIST.has(key)) {
47
+ let result = exec(value, element);
48
+ if (typeof result === "string" && result.charCodeAt(0) === 45 && result.charCodeAt(1) === 45) {
49
+ result = `var(${result})`;
50
+ }
51
+ setToObj(key, { [key]: result });
52
+ if (!isProd && isObject(obj[key])) obj[key].label = key;
53
+ } else {
54
+ rest[key] = value;
46
55
  }
47
- setToObj(key, { [key]: result });
48
- if (!isProd && isObject(obj[key])) obj[key].label = key;
49
- } else {
50
- rest[key] = value;
51
56
  }
57
+ return [obj, rest];
58
+ } finally {
59
+ if (ds) popConfig();
52
60
  }
53
- return [obj, rest];
54
61
  };
55
62
  const useSelectorsAsCSS = (sourceObj, element) => {
56
63
  const obj = {};
@@ -1,2 +1,2 @@
1
- export * from "./executors";
2
- export * from "./transformers";
1
+ export * from "./executors.js";
2
+ export * from "./transformers.js";
@@ -1,28 +1,63 @@
1
- import { isFunction } from "@domql/utils";
2
- import { useCssInProps } from "./executors";
1
+ import { isFunction } from "@symbo.ls/utils";
2
+ import { useCssInProps } from "./executors.js";
3
+ const DATA_THEME_RE = /^\[data-theme=(?:"([^"]+)"|'([^']+)')\]$/;
3
4
  const applyMediaProps = (key, selectorProps, element) => {
4
5
  const { context } = element;
5
6
  if (!context.designSystem?.media) return;
6
- const mediaValue = context.designSystem.media[key.slice(1)];
7
+ const schemeKey = key.slice(1);
8
+ const mediaValue = context.designSystem.media[schemeKey];
7
9
  const generatedClass = useCssInProps(selectorProps, element);
8
- let mediaKey;
9
10
  if (!mediaValue) {
10
- mediaKey = key;
11
- } else if (mediaValue === "print") {
12
- mediaKey = "@media print";
13
- } else if (mediaValue[0] === "(") {
14
- mediaKey = `@media screen and ${mediaValue}`;
15
- } else {
16
- mediaKey = `${mediaValue} &`;
11
+ return { [key]: generatedClass };
17
12
  }
18
- return { [mediaKey]: generatedClass };
13
+ if (mediaValue === "print") {
14
+ return { "@media print": generatedClass };
15
+ }
16
+ if (mediaValue[0] === "(") {
17
+ return { [`@media screen and ${mediaValue}`]: generatedClass };
18
+ }
19
+ const match = mediaValue.match(DATA_THEME_RE);
20
+ const scheme = match ? match[1] || match[2] : schemeKey;
21
+ const result = { [`${mediaValue} &`]: generatedClass };
22
+ if (scheme === "dark" || scheme === "light") {
23
+ const scopeSelector = context.designSystem?.scopeSelector || ":root";
24
+ const guard = scopeSelector === ":root" ? ":root:not([data-theme])" : `${scopeSelector}:not([data-theme])`;
25
+ result[`@media (prefers-color-scheme: ${scheme})`] = {
26
+ [`${guard} &`]: generatedClass
27
+ };
28
+ }
29
+ return result;
19
30
  };
20
31
  const applyAndProps = (key, selectorProps, element) => {
21
32
  return { [key]: useCssInProps(selectorProps, element) };
22
33
  };
23
34
  const applySelectorProps = (key, selectorProps, element) => {
24
35
  const selectorKey = `&${key}`;
25
- return { [selectorKey]: useCssInProps(selectorProps, element) };
36
+ const resolved = useCssInProps(selectorProps, element);
37
+ if (key.includes(",") && resolved) {
38
+ const flat = {};
39
+ const nested = {};
40
+ for (const k in resolved) {
41
+ if (typeof resolved[k] === "object" && resolved[k] !== null) {
42
+ nested[k] = resolved[k];
43
+ } else {
44
+ flat[k] = resolved[k];
45
+ }
46
+ }
47
+ if (Object.keys(nested).length) {
48
+ const parts = selectorKey.split(",").map((p) => p.trim());
49
+ const result = {};
50
+ if (Object.keys(flat).length) {
51
+ result[selectorKey] = flat;
52
+ }
53
+ for (const nestedKey in nested) {
54
+ const distributed = parts.map((p) => `${p} ${nestedKey}`).join(", ");
55
+ result[distributed] = nested[nestedKey];
56
+ }
57
+ return result;
58
+ }
59
+ }
60
+ return { [selectorKey]: resolved };
26
61
  };
27
62
  const resolveCase = (caseKey, element) => {
28
63
  const caseFn = element.context?.cases?.[caseKey];
@@ -34,7 +69,7 @@ const applyCaseProps = (key, selectorProps, element) => {
34
69
  const caseKey = key.slice(1);
35
70
  let isCaseTrue = resolveCase(caseKey, element);
36
71
  if (isCaseTrue === void 0) {
37
- isCaseTrue = !!element.props?.[caseKey];
72
+ isCaseTrue = !!element[caseKey];
38
73
  }
39
74
  if (!isCaseTrue) return;
40
75
  return useCssInProps(selectorProps, element);
@@ -44,20 +79,34 @@ const applyVariableProps = (key, selectorVal, element) => {
44
79
  };
45
80
  const applyConditionalCaseProps = (key, selectorProps, element) => {
46
81
  const caseKey = key.slice(1);
47
- let isCaseTrue = element.props[caseKey] === true || element.state[caseKey] || element[caseKey];
82
+ let isCaseTrue = element[caseKey] === true || element.state?.[caseKey];
48
83
  if (!isCaseTrue) {
49
- const caseResult = resolveCase(caseKey, element);
50
- if (caseResult !== void 0) isCaseTrue = caseResult;
84
+ if (typeof element[caseKey] === "function") {
85
+ try {
86
+ isCaseTrue = element[caseKey](element, element.state, element.context);
87
+ } catch (e) {
88
+ }
89
+ } else {
90
+ const caseResult = resolveCase(caseKey, element);
91
+ if (caseResult !== void 0) isCaseTrue = caseResult;
92
+ }
51
93
  }
52
94
  if (!isCaseTrue) return;
53
95
  return useCssInProps(selectorProps, element);
54
96
  };
55
97
  const applyConditionalFalsyProps = (key, selectorProps, element) => {
56
98
  const caseKey = key.slice(1);
57
- let isCaseTrue = element.props[caseKey] === true || element.state[caseKey] || element[caseKey];
99
+ let isCaseTrue = element[caseKey] === true || element.state?.[caseKey];
58
100
  if (!isCaseTrue) {
59
- const caseResult = resolveCase(caseKey, element);
60
- if (caseResult !== void 0) isCaseTrue = caseResult;
101
+ if (typeof element[caseKey] === "function") {
102
+ try {
103
+ isCaseTrue = element[caseKey](element, element.state, element.context);
104
+ } catch (e) {
105
+ }
106
+ } else {
107
+ const caseResult = resolveCase(caseKey, element);
108
+ if (caseResult !== void 0) isCaseTrue = caseResult;
109
+ }
61
110
  }
62
111
  if (isCaseTrue) return;
63
112
  return useCssInProps(selectorProps, element);