@codeleap/styles 6.8.0 → 7.0.1

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 (93) hide show
  1. package/dist/classes/Cacher.js +166 -0
  2. package/dist/classes/Cacher.js.map +1 -0
  3. package/dist/classes/StaleControl.js +101 -0
  4. package/dist/classes/StaleControl.js.map +1 -0
  5. package/dist/classes/StyleCache.js +91 -0
  6. package/dist/classes/StyleCache.js.map +1 -0
  7. package/dist/classes/StylePersistor.js +54 -0
  8. package/dist/classes/StylePersistor.js.map +1 -0
  9. package/dist/classes/StyleRegistry.js +470 -0
  10. package/dist/classes/StyleRegistry.js.map +1 -0
  11. package/dist/classes/index.js +3 -0
  12. package/dist/classes/index.js.map +1 -0
  13. package/dist/constants.js +24 -0
  14. package/dist/constants.js.map +1 -0
  15. package/dist/hooks/index.js +5 -0
  16. package/dist/hooks/index.js.map +1 -0
  17. package/dist/hooks/useCompositionStyles.js +27 -0
  18. package/dist/hooks/useCompositionStyles.js.map +1 -0
  19. package/dist/hooks/useNestedStylesByKey.js +17 -0
  20. package/dist/hooks/useNestedStylesByKey.js.map +1 -0
  21. package/dist/hooks/useStyleObserver.js +22 -0
  22. package/dist/hooks/useStyleObserver.js.map +1 -0
  23. package/dist/hooks/useTheme.js +24 -0
  24. package/dist/hooks/useTheme.js.map +1 -0
  25. package/dist/index.js +12 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lib/calc.js +44 -0
  28. package/dist/lib/calc.js.map +1 -0
  29. package/dist/lib/createStyles.js +58 -0
  30. package/dist/lib/createStyles.js.map +1 -0
  31. package/dist/lib/createTheme.js +143 -0
  32. package/dist/lib/createTheme.js.map +1 -0
  33. package/dist/lib/cssVariables.js +73 -0
  34. package/dist/lib/cssVariables.js.map +1 -0
  35. package/dist/lib/index.js +5 -0
  36. package/dist/lib/index.js.map +1 -0
  37. package/dist/theme/generateColorScheme.js +38 -0
  38. package/dist/theme/generateColorScheme.js.map +1 -0
  39. package/dist/theme/index.js +4 -0
  40. package/dist/theme/index.js.map +1 -0
  41. package/dist/theme/themeStore.js +139 -0
  42. package/dist/theme/themeStore.js.map +1 -0
  43. package/dist/theme/validateTheme.js +33 -0
  44. package/dist/theme/validateTheme.js.map +1 -0
  45. package/dist/tools/colors.js +138 -0
  46. package/dist/tools/colors.js.map +1 -0
  47. package/dist/tools/deepClone.js +8 -0
  48. package/dist/tools/deepClone.js.map +1 -0
  49. package/dist/tools/deepmerge.js +13 -0
  50. package/dist/tools/deepmerge.js.map +1 -0
  51. package/dist/tools/hashKey.js +16 -0
  52. package/dist/tools/hashKey.js.map +1 -0
  53. package/dist/tools/index.js +7 -0
  54. package/dist/tools/index.js.map +1 -0
  55. package/dist/tools/minifier.js +34 -0
  56. package/dist/tools/minifier.js.map +1 -0
  57. package/dist/tools/multiplierProperty.js +9 -0
  58. package/dist/tools/multiplierProperty.js.map +1 -0
  59. package/dist/types/cache.js +2 -0
  60. package/dist/types/cache.js.map +1 -0
  61. package/dist/types/component.js +2 -0
  62. package/dist/types/component.js.map +1 -0
  63. package/dist/types/core.js +3 -0
  64. package/dist/types/core.js.map +1 -0
  65. package/dist/types/icon.js +3 -0
  66. package/dist/types/icon.js.map +1 -0
  67. package/dist/types/index.js +6 -0
  68. package/dist/types/index.js.map +1 -0
  69. package/dist/types/spacing.js +28 -0
  70. package/dist/types/spacing.js.map +1 -0
  71. package/dist/types/store.js +2 -0
  72. package/dist/types/store.js.map +1 -0
  73. package/dist/types/style.js +2 -0
  74. package/dist/types/style.js.map +1 -0
  75. package/dist/types/theme.js +2 -0
  76. package/dist/types/theme.js.map +1 -0
  77. package/dist/utils.js +97 -0
  78. package/dist/utils.js.map +1 -0
  79. package/dist/variants/borderCreator.js +26 -0
  80. package/dist/variants/borderCreator.js.map +1 -0
  81. package/dist/variants/createAppVariants.js +17 -0
  82. package/dist/variants/createAppVariants.js.map +1 -0
  83. package/dist/variants/defaultVariants.js +137 -0
  84. package/dist/variants/defaultVariants.js.map +1 -0
  85. package/dist/variants/dynamicVariants.js +89 -0
  86. package/dist/variants/dynamicVariants.js.map +1 -0
  87. package/dist/variants/index.js +7 -0
  88. package/dist/variants/index.js.map +1 -0
  89. package/dist/variants/mediaQuery.js +56 -0
  90. package/dist/variants/mediaQuery.js.map +1 -0
  91. package/dist/variants/spacing.js +81 -0
  92. package/dist/variants/spacing.js.map +1 -0
  93. package/package.json +3 -3
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Expects a 7-character hex string (`#rrggbb`). Shorter forms (3-char, no hash) are
3
+ * not handled and will produce NaN channels. Returns h in [0, 360], s and l in [0, 100],
4
+ * all rounded to integers via `Math.round`.
5
+ */
6
+ export function hexToHSL(hex) {
7
+ const r = parseInt(hex.slice(1, 3), 16) / 255;
8
+ const g = parseInt(hex.slice(3, 5), 16) / 255;
9
+ const b = parseInt(hex.slice(5, 7), 16) / 255;
10
+ const max = Math.max(r, g, b), min = Math.min(r, g, b);
11
+ let h = 0, s = 0, l = (max + min) / 2;
12
+ if (max !== min) {
13
+ const d = max - min;
14
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
15
+ switch (max) {
16
+ case r:
17
+ h = (g - b) / d + (g < b ? 6 : 0);
18
+ break;
19
+ case g:
20
+ h = (b - r) / d + 2;
21
+ break;
22
+ case b:
23
+ h = (r - g) / d + 4;
24
+ break;
25
+ }
26
+ h /= 6;
27
+ }
28
+ return {
29
+ h: Math.round(h * 360),
30
+ s: Math.round(s * 100),
31
+ l: Math.round(l * 100),
32
+ };
33
+ }
34
+ /**
35
+ * Uses the HSL-to-RGB CSS Color 4 formula (single-pass, no separate hue helper).
36
+ * Inputs h in [0, 360], s and l in [0, 100]; channels are clamped implicitly by
37
+ * `Math.min`/`Math.max`. Each channel is individually rounded before hex encoding,
38
+ * so the round-trip `hexToHSL → hslToHex` may differ by ±1 in the last hex digit.
39
+ */
40
+ export function hslToHex(h, s, l) {
41
+ s /= 100;
42
+ l /= 100;
43
+ const k = (n) => (n + h / 30) % 12;
44
+ const a = s * Math.min(l, 1 - l);
45
+ const f = (n) => Math.round(255 * (l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)))));
46
+ return `#${[f(0), f(8), f(4)].map(x => x.toString(16).padStart(2, '0')).join('')}`;
47
+ }
48
+ /**
49
+ * Parses only the 6-digit `#rrggbb` form via `parseInt(..., 16)`.
50
+ * No alpha channel is extracted. Channels are returned as integers in [0, 255].
51
+ */
52
+ export function hexToRGB(hex) {
53
+ const r = parseInt(hex.slice(1, 3), 16);
54
+ const g = parseInt(hex.slice(3, 5), 16);
55
+ const b = parseInt(hex.slice(5, 7), 16);
56
+ return { r, g, b };
57
+ }
58
+ /**
59
+ * Shares the same formula as `hslToHex` but returns separate integer r/g/b channels
60
+ * instead of a hex string. Useful when you need numeric channels for `rgba(...)` output.
61
+ * Input ranges: h [0, 360], s [0, 100], l [0, 100].
62
+ */
63
+ export function hslToRGB(h, s, l) {
64
+ s /= 100;
65
+ l /= 100;
66
+ const k = (n) => (n + h / 30) % 12;
67
+ const a = s * Math.min(l, 1 - l);
68
+ const f = (n) => Math.round(255 * (l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)))));
69
+ return {
70
+ r: f(0),
71
+ g: f(8),
72
+ b: f(4),
73
+ };
74
+ }
75
+ /**
76
+ * Inverse of `hslToRGB`. Normalises each channel from [0, 255] to [0, 1] before
77
+ * computing. When max === min (achromatic), hue is fixed at 0. All output values are
78
+ * rounded, so the round-trip `hslToRGB → rgbToHSL` is not guaranteed to be lossless.
79
+ */
80
+ export function rgbToHSL(rgb) {
81
+ const r = rgb.r / 255;
82
+ const g = rgb.g / 255;
83
+ const b = rgb.b / 255;
84
+ const max = Math.max(r, g, b);
85
+ const min = Math.min(r, g, b);
86
+ let h = 0;
87
+ let s = 0;
88
+ const l = (max + min) / 2;
89
+ if (max !== min) {
90
+ const d = max - min;
91
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
92
+ switch (max) {
93
+ case r:
94
+ h = (g - b) / d + (g < b ? 6 : 0);
95
+ break;
96
+ case g:
97
+ h = (b - r) / d + 2;
98
+ break;
99
+ case b:
100
+ h = (r - g) / d + 4;
101
+ break;
102
+ }
103
+ h /= 6;
104
+ }
105
+ return {
106
+ h: Math.round(h * 360),
107
+ s: Math.round(s * 100),
108
+ l: Math.round(l * 100)
109
+ };
110
+ }
111
+ /**
112
+ * Implements WCAG 2.x relative luminance (https://www.w3.org/TR/WCAG20/#relativeluminancedef).
113
+ * Channels are linearised with the sRGB transfer function: values ≤ 0.03928 use
114
+ * the linear segment (C / 12.92); values above use the gamma curve ((C + 0.055) / 1.055)^2.4.
115
+ * The luminance coefficients are 0.2126 R + 0.7152 G + 0.0722 B, reflecting the
116
+ * eye's greater sensitivity to green. Returns a value in [0, 1].
117
+ */
118
+ export function getLuminance({ r, g, b }) {
119
+ const [R, G, B] = [r, g, b].map(c => {
120
+ const channel = c / 255;
121
+ return channel <= 0.03928
122
+ ? channel / 12.92
123
+ : Math.pow((channel + 0.055) / 1.055, 2.4);
124
+ });
125
+ return 0.2126 * R + 0.7152 * G + 0.0722 * B;
126
+ }
127
+ /**
128
+ * Uses a luminance threshold of **0.5** (not the WCAG 4.5:1 contrast ratio) to pick
129
+ * between two text colours. Backgrounds with luminance > 0.5 are treated as light and
130
+ * receive `darkColor`; all others receive `lightColor`. This is a perceptual shortcut —
131
+ * use explicit contrast-ratio checks for accessibility-critical situations.
132
+ */
133
+ export function getTextColor(backgroundHex, darkColor = 'black', lightColor = 'white') {
134
+ const rgb = hexToRGB(backgroundHex);
135
+ const luminance = getLuminance(rgb);
136
+ return luminance > 0.5 ? darkColor : lightColor;
137
+ }
138
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/tools/colors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import rfdc from 'rfdc';
2
+ /**
3
+ * rfdc clone function configured with default options (no circular-reference support,
4
+ * proto: false). Does not handle `Date`, `RegExp`, or `Buffer` fields — they are copied
5
+ * by reference. Use only on plain style/theme objects.
6
+ */
7
+ export const deepClone = rfdc();
8
+ //# sourceMappingURL=deepClone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepClone.js","sourceRoot":"","sources":["../../src/tools/deepClone.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,EAAE,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Re-exports `@fastify/deepmerge`'s factory function. Call it once with options
3
+ * (e.g., `deepmerge({ all: true })`) to obtain a variadic merge function.
4
+ * Passing `{ all: true }` merges arrays by index rather than concatenating them —
5
+ * this is the mode used throughout the style registry for variant merging.
6
+ * The returned merger is not idempotent: source properties always overwrite target.
7
+ *
8
+ * @example
9
+ * const merge = deepmerge({ all: true })
10
+ * const result = merge(base, override1, override2)
11
+ */
12
+ export { default as deepmerge } from '@fastify/deepmerge';
13
+ //# sourceMappingURL=deepmerge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepmerge.js","sourceRoot":"","sources":["../../src/tools/deepmerge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,16 @@
1
+ var _a;
2
+ import { sha256 } from 'js-sha256';
3
+ const styleKey = '@styles-version';
4
+ const version = (_a = require('../../package.json')) === null || _a === void 0 ? void 0 : _a.version;
5
+ /**
6
+ * Mutates the input array by appending `{ '@styles-version': <pkg.version> }` before
7
+ * hashing — meaning callers must not rely on the array being unchanged after the call.
8
+ * The version injection ensures any cache key computed against an older package version
9
+ * is automatically invalid after a library upgrade.
10
+ */
11
+ export const hashKey = (value) => {
12
+ value.push({ [styleKey]: version });
13
+ const str = JSON.stringify(value);
14
+ return sha256(str);
15
+ };
16
+ //# sourceMappingURL=hashKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashKey.js","sourceRoot":"","sources":["../../src/tools/hashKey.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAElC,MAAM,QAAQ,GAAG,iBAAiB,CAAA;AAClC,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,oBAAoB,CAAC,0CAAE,OAAO,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAiB,EAAU,EAAE;IACnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAEjC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;AACpB,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ export * as colorTools from './colors';
2
+ export * from './hashKey';
3
+ export * from './minifier';
4
+ export * from './multiplierProperty';
5
+ export * from './deepClone';
6
+ export * from './deepmerge';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,UAAU,CAAA;AACtC,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
@@ -0,0 +1,34 @@
1
+ import { compressToBase64, decompressFromBase64 } from 'lz-string';
2
+ /**
3
+ * Serialises `value` with `JSON.stringify` then LZ-compresses to a Base64 string.
4
+ * Returns the value unchanged (without throwing) when it is falsy, so callers
5
+ * do not need to guard against `null`/`undefined`/`''` inputs.
6
+ * Non-serialisable values (functions, `undefined` inside objects, circular refs)
7
+ * will be silently dropped by `JSON.stringify`.
8
+ */
9
+ export function compress(value) {
10
+ if (!value)
11
+ return value;
12
+ return compressToBase64(JSON.stringify(value));
13
+ }
14
+ /**
15
+ * Reverses `compress`: LZ-decompresses the Base64 string then parses the JSON.
16
+ * Returns the value unchanged when falsy. Will throw if `value` is a non-empty
17
+ * string that is not valid LZ-Base64, or if the decompressed payload is not
18
+ * valid JSON — callers should guard accordingly.
19
+ */
20
+ export function decompress(value) {
21
+ if (!value)
22
+ return value;
23
+ const decoded = decompressFromBase64(value);
24
+ return JSON.parse(decoded);
25
+ }
26
+ /**
27
+ * Convenience namespace so callsites can import a single symbol and call
28
+ * `minifier.compress` / `minifier.decompress` without named imports.
29
+ */
30
+ export const minifier = {
31
+ compress,
32
+ decompress,
33
+ };
34
+ //# sourceMappingURL=minifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minifier.js","sourceRoot":"","sources":["../../src/tools/minifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAElE;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAU;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IAExB,OAAO,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAU;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IAExB,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;IAE3C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,QAAQ;IACR,UAAU;CACX,CAAA"}
@@ -0,0 +1,9 @@
1
+ export function multiplierProperty(base, property) {
2
+ return (multiplier) => {
3
+ const value = base * Number(multiplier);
4
+ return {
5
+ [property]: value,
6
+ };
7
+ };
8
+ }
9
+ //# sourceMappingURL=multiplierProperty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiplierProperty.js","sourceRoot":"","sources":["../../src/tools/multiplierProperty.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,QAAW;IAEX,OAAO,CAAC,UAA2B,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QAEvC,OAAO;YACL,CAAC,QAAQ,CAAC,EAAE,KAAK;SAClB,CAAA;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/types/cache.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/types/component.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-interface */
2
+ export {};
3
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/types/core.ts"],"names":[],"mappings":"AAAA,0DAA0D"}
@@ -0,0 +1,3 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-interface */
2
+ export {};
3
+ //# sourceMappingURL=icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon.js","sourceRoot":"","sources":["../../src/types/icon.ts"],"names":[],"mappings":"AAAA,0DAA0D"}
@@ -0,0 +1,6 @@
1
+ export * from './core';
2
+ export * from './style';
3
+ export * from './theme';
4
+ export * from './icon';
5
+ export * from './component';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,aAAa,CAAA"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Long-form spacing direction suffixes used with `margin` and `padding`.
3
+ * The empty string `''` represents the un-suffixed property (e.g., `padding`).
4
+ */
5
+ export const spacingVariants = [
6
+ 'Vertical',
7
+ 'Horizontal',
8
+ 'Bottom',
9
+ 'Top',
10
+ 'Left',
11
+ 'Right',
12
+ '',
13
+ ];
14
+ /**
15
+ * Short-form spacing direction suffixes used with `m` and `p`.
16
+ * Maps to the long-form via `shortPositionMap` inside `spacingFactory`.
17
+ * The empty string `''` represents the un-suffixed property (e.g., `p`).
18
+ */
19
+ export const spacingShortVariants = [
20
+ 'y',
21
+ 'x',
22
+ 'b',
23
+ 't',
24
+ 'l',
25
+ 'r',
26
+ '',
27
+ ];
28
+ //# sourceMappingURL=spacing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacing.js","sourceRoot":"","sources":["../../src/types/spacing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,EAAE;CACM,CAAA;AAEV;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,EAAE;CACM,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/types/store.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/types/style.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/types/theme.ts"],"names":[],"mappings":""}
package/dist/utils.js ADDED
@@ -0,0 +1,97 @@
1
+ import { spacingShortVariants, spacingVariants } from './types/spacing';
2
+ import { deepmerge } from './tools';
3
+ /**
4
+ * Uppercases (or lowercases when `reverse = true`) the first character of a string.
5
+ * Returns the input unchanged when it is falsy or empty.
6
+ */
7
+ export function capitalize(str, reverse = false) {
8
+ if (!(str === null || str === void 0 ? void 0 : str.length))
9
+ return str;
10
+ const firstChar = reverse ? str[0].toLowerCase() : str[0].toUpperCase();
11
+ return firstChar + str.substring(1);
12
+ }
13
+ /**
14
+ * Complete list of CSS/RN spacing-related property names that the style registry treats
15
+ * specially (resolved via the spacing factory rather than passed through as raw ICSS).
16
+ * Built eagerly at module load time by iterating `spacingVariants` and `spacingShortVariants`.
17
+ */
18
+ export const spacingKeys = [
19
+ 'gap',
20
+ 'top',
21
+ 'left',
22
+ 'right',
23
+ 'bottom',
24
+ ];
25
+ for (const longProperty of ['padding', 'margin']) {
26
+ for (const variant of spacingVariants) {
27
+ spacingKeys.push(`${longProperty}${capitalize(variant)}`);
28
+ }
29
+ }
30
+ for (const shortProperty of ['p', 'm']) {
31
+ for (const shortVariant of spacingShortVariants) {
32
+ spacingKeys.push(shortProperty + shortVariant);
33
+ }
34
+ }
35
+ /** Returns `true` if `key` is one of the pre-built spacing property names. */
36
+ export function isSpacingKey(key) {
37
+ if (!key)
38
+ return false;
39
+ return spacingKeys === null || spacingKeys === void 0 ? void 0 : spacingKeys.includes(key);
40
+ }
41
+ /**
42
+ * Extracts all entries whose key starts with `match`, stripping the prefix and
43
+ * lowercasing the first character of the remainder. Used by composition hooks to
44
+ * slice a flat `{ wrapperText: ..., wrapperIcon: ... }` record into a nested
45
+ * `{ text: ..., icon: ... }` map for a single composition element.
46
+ */
47
+ export function getNestedStylesByKey(match, styles) {
48
+ const stylesByKey = {};
49
+ for (const [key, value] of Object.entries(styles)) {
50
+ if (key.startsWith(match)) {
51
+ const partName = capitalize(key.replace(match, ''), true);
52
+ stylesByKey[partName] = value;
53
+ }
54
+ }
55
+ return stylesByKey;
56
+ }
57
+ /**
58
+ * Merges an array of style objects into one using `@fastify/deepmerge` with `all: true`.
59
+ * Falsy entries are filtered out before merging. Later entries overwrite earlier ones.
60
+ */
61
+ export const mergeStyles = (styles) => {
62
+ const style = styles === null || styles === void 0 ? void 0 : styles.filter(s => !!s);
63
+ return deepmerge({ all: true })(...style);
64
+ };
65
+ /**
66
+ * Style property names that collide with CSS keywords and must not be treated as
67
+ * composition-element prefixes by the registry. Without this list, a style object
68
+ * like `{ textAlign: 'center' }` would be misidentified as a composition key starting
69
+ * with `text`.
70
+ */
71
+ export const ignoredStyleKeys = [
72
+ 'textAlign',
73
+ 'textDecoration',
74
+ 'textOverflow',
75
+ 'left',
76
+ 'top',
77
+ 'right',
78
+ 'bottom',
79
+ ];
80
+ /**
81
+ * Flattens nested arrays of `StyledProp` into a single flat array. Useful when
82
+ * assembling the final `style` prop from multiple sources (e.g., variant defaults
83
+ * plus overrides), without losing the order-dependent merge semantics of `StyleProp`.
84
+ */
85
+ export const concatStyles = (styles) => {
86
+ const results = [];
87
+ for (const style of styles) {
88
+ if (Array.isArray(style)) {
89
+ results.push(...style);
90
+ }
91
+ else {
92
+ results.push(style);
93
+ }
94
+ }
95
+ return results;
96
+ };
97
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,OAAO,GAAG,KAAK;IACrD,IAAI,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM,CAAA;QAAE,OAAO,GAAG,CAAA;IAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IACvE,OAAO,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK;IACL,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;CACT,CAAA;AAED,KAAK,MAAM,YAAY,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;IACjD,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC;AAED,KAAK,MAAM,aAAa,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACvC,KAAK,MAAM,YAAY,IAAI,oBAAoB,EAAE,CAAC;QAChD,WAAW,CAAC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,CAAA;IAChD,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IAEtB,OAAO,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAmB,KAAa,EAAE,MAAgC;IACpG,MAAM,WAAW,GAAwB,EAAE,CAAA;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;YACzD,WAAW,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAkB,EAAE,EAAE;IAChD,MAAM,KAAK,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEtC,OAAO,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAA;AAC3C,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW;IACX,gBAAgB;IAChB,cAAc;IACd,MAAM;IACN,KAAK;IACL,OAAO;IACP,QAAQ;CACT,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAmB,MAA4B,EAAiB,EAAE;IAC5F,MAAM,OAAO,GAAG,EAAE,CAAA;IAElB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAED,OAAO,OAAmC,CAAA;AAC5C,CAAC,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { themeStore } from '../theme';
2
+ import { capitalize } from '../utils';
3
+ /**
4
+ * Resolves `color` from `theme.colors` (falls back to the raw string if not found),
5
+ * then emits `border{Direction}Color`, `border{Direction}Width`, and — on web only —
6
+ * `border{Direction}Style` for each requested direction.
7
+ * Defaults: all four sides, width 1, style `'solid'`.
8
+ * `borderStyle` is omitted on React Native because RN requires it on individual sides
9
+ * and `isBrowser` guards that path.
10
+ */
11
+ export const borderCreator = (args) => {
12
+ var _a, _b;
13
+ const { color: colorKey, width = 1, style = 'solid', directions = ['left', 'top', 'bottom', 'right'], } = args;
14
+ const theme = themeStore.themeTyped;
15
+ const color = (_b = (_a = theme === null || theme === void 0 ? void 0 : theme.colors) === null || _a === void 0 ? void 0 : _a[colorKey]) !== null && _b !== void 0 ? _b : colorKey;
16
+ let borderStyles = {};
17
+ for (const direction of directions) {
18
+ const property = `border${capitalize(direction)}`;
19
+ borderStyles[`${property}Color`] = color;
20
+ borderStyles[`${property}Width`] = width;
21
+ if (theme === null || theme === void 0 ? void 0 : theme.isBrowser)
22
+ borderStyles[`${property}Style`] = style;
23
+ }
24
+ return borderStyles;
25
+ };
26
+ //# sourceMappingURL=borderCreator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderCreator.js","sourceRoot":"","sources":["../../src/variants/borderCreator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAarC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAkB,CAAC,IAAI,EAAE,EAAE;;IACnD,MAAM,EACJ,KAAK,EAAE,QAAQ,EACf,KAAK,GAAG,CAAC,EACT,KAAK,GAAG,OAAO,EACf,UAAU,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,GAChD,GAAG,IAAI,CAAA;IAER,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAA;IAEnC,MAAM,KAAK,GAAG,MAAA,MAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAA8B,0CAAG,QAAQ,CAAC,mCAAI,QAAQ,CAAA;IAE5E,IAAI,YAAY,GAAwB,EAAE,CAAA;IAE1C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,SAAS,UAAU,CAAC,SAAS,CAAC,EAAE,CAAA;QAEjD,YAAY,CAAC,GAAG,QAAQ,OAAO,CAAC,GAAG,KAAK,CAAA;QACxC,YAAY,CAAC,GAAG,QAAQ,OAAO,CAAC,GAAG,KAAK,CAAA;QACxC,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS;YAAE,YAAY,CAAC,GAAG,QAAQ,OAAO,CAAC,GAAG,KAAK,CAAA;IAChE,CAAC;IAED,OAAO,YAAoB,CAAA;AAC7B,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { themeStore } from '../theme';
2
+ /**
3
+ * Registers app-specific style variants with the global `themeStore`.
4
+ * Call this once during app initialisation (before any component mounts) with the
5
+ * variants object that extends the base variant set. The variants are merged into
6
+ * `commonVariants` when `CodeleapStyleRegistry` initialises.
7
+ *
8
+ * Each entry can be either a static `ICSS` object (applied unconditionally) or a
9
+ * function `(theme: ITheme) => ICSS` (resolved lazily using the current theme).
10
+ *
11
+ * @returns The same `variants` object — useful for typing augmentation of `IAppVariants`.
12
+ */
13
+ export function createAppVariants(variants) {
14
+ themeStore.setVariants(variants);
15
+ return variants;
16
+ }
17
+ //# sourceMappingURL=createAppVariants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAppVariants.js","sourceRoot":"","sources":["../../src/variants/createAppVariants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAMrC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAA2B,QAAW;IACrE,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IAEhC,OAAO,QAAQ,CAAA;AACjB,CAAC"}