@tenphi/tasty 0.0.0-snapshot.09c74e2

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 (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +539 -0
  3. package/dist/_virtual/_rolldown/runtime.js +8 -0
  4. package/dist/chunks/cacheKey.js +70 -0
  5. package/dist/chunks/cacheKey.js.map +1 -0
  6. package/dist/chunks/definitions.d.ts +37 -0
  7. package/dist/chunks/definitions.js +260 -0
  8. package/dist/chunks/definitions.js.map +1 -0
  9. package/dist/chunks/renderChunk.js +61 -0
  10. package/dist/chunks/renderChunk.js.map +1 -0
  11. package/dist/config.d.ts +280 -0
  12. package/dist/config.js +403 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/core/index.d.ts +33 -0
  15. package/dist/core/index.js +26 -0
  16. package/dist/debug.d.ts +204 -0
  17. package/dist/debug.js +733 -0
  18. package/dist/debug.js.map +1 -0
  19. package/dist/hooks/useGlobalStyles.d.ts +27 -0
  20. package/dist/hooks/useGlobalStyles.js +56 -0
  21. package/dist/hooks/useGlobalStyles.js.map +1 -0
  22. package/dist/hooks/useKeyframes.d.ts +56 -0
  23. package/dist/hooks/useKeyframes.js +54 -0
  24. package/dist/hooks/useKeyframes.js.map +1 -0
  25. package/dist/hooks/useProperty.d.ts +79 -0
  26. package/dist/hooks/useProperty.js +91 -0
  27. package/dist/hooks/useProperty.js.map +1 -0
  28. package/dist/hooks/useRawCSS.d.ts +53 -0
  29. package/dist/hooks/useRawCSS.js +28 -0
  30. package/dist/hooks/useRawCSS.js.map +1 -0
  31. package/dist/hooks/useStyles.d.ts +40 -0
  32. package/dist/hooks/useStyles.js +169 -0
  33. package/dist/hooks/useStyles.js.map +1 -0
  34. package/dist/index.d.ts +48 -0
  35. package/dist/index.js +33 -0
  36. package/dist/injector/index.d.ts +157 -0
  37. package/dist/injector/index.js +154 -0
  38. package/dist/injector/index.js.map +1 -0
  39. package/dist/injector/injector.d.ts +139 -0
  40. package/dist/injector/injector.js +404 -0
  41. package/dist/injector/injector.js.map +1 -0
  42. package/dist/injector/sheet-manager.d.ts +127 -0
  43. package/dist/injector/sheet-manager.js +714 -0
  44. package/dist/injector/sheet-manager.js.map +1 -0
  45. package/dist/injector/types.d.ts +135 -0
  46. package/dist/keyframes/index.js +206 -0
  47. package/dist/keyframes/index.js.map +1 -0
  48. package/dist/parser/classify.js +319 -0
  49. package/dist/parser/classify.js.map +1 -0
  50. package/dist/parser/const.js +33 -0
  51. package/dist/parser/const.js.map +1 -0
  52. package/dist/parser/lru.js +109 -0
  53. package/dist/parser/lru.js.map +1 -0
  54. package/dist/parser/parser.d.ts +25 -0
  55. package/dist/parser/parser.js +116 -0
  56. package/dist/parser/parser.js.map +1 -0
  57. package/dist/parser/tokenizer.js +69 -0
  58. package/dist/parser/tokenizer.js.map +1 -0
  59. package/dist/parser/types.d.ts +51 -0
  60. package/dist/parser/types.js +46 -0
  61. package/dist/parser/types.js.map +1 -0
  62. package/dist/pipeline/conditions.d.ts +134 -0
  63. package/dist/pipeline/conditions.js +406 -0
  64. package/dist/pipeline/conditions.js.map +1 -0
  65. package/dist/pipeline/exclusive.js +231 -0
  66. package/dist/pipeline/exclusive.js.map +1 -0
  67. package/dist/pipeline/index.d.ts +53 -0
  68. package/dist/pipeline/index.js +660 -0
  69. package/dist/pipeline/index.js.map +1 -0
  70. package/dist/pipeline/materialize.js +844 -0
  71. package/dist/pipeline/materialize.js.map +1 -0
  72. package/dist/pipeline/parseStateKey.d.ts +15 -0
  73. package/dist/pipeline/parseStateKey.js +438 -0
  74. package/dist/pipeline/parseStateKey.js.map +1 -0
  75. package/dist/pipeline/simplify.js +516 -0
  76. package/dist/pipeline/simplify.js.map +1 -0
  77. package/dist/pipeline/warnings.js +18 -0
  78. package/dist/pipeline/warnings.js.map +1 -0
  79. package/dist/plugins/okhsl-plugin.d.ts +35 -0
  80. package/dist/plugins/okhsl-plugin.js +371 -0
  81. package/dist/plugins/okhsl-plugin.js.map +1 -0
  82. package/dist/plugins/types.d.ts +69 -0
  83. package/dist/properties/index.js +158 -0
  84. package/dist/properties/index.js.map +1 -0
  85. package/dist/states/index.d.ts +49 -0
  86. package/dist/states/index.js +416 -0
  87. package/dist/states/index.js.map +1 -0
  88. package/dist/static/index.d.ts +5 -0
  89. package/dist/static/index.js +5 -0
  90. package/dist/static/tastyStatic.d.ts +46 -0
  91. package/dist/static/tastyStatic.js +31 -0
  92. package/dist/static/tastyStatic.js.map +1 -0
  93. package/dist/static/types.d.ts +49 -0
  94. package/dist/static/types.js +24 -0
  95. package/dist/static/types.js.map +1 -0
  96. package/dist/styles/align.d.ts +15 -0
  97. package/dist/styles/align.js +14 -0
  98. package/dist/styles/align.js.map +1 -0
  99. package/dist/styles/border.d.ts +25 -0
  100. package/dist/styles/border.js +114 -0
  101. package/dist/styles/border.js.map +1 -0
  102. package/dist/styles/color.d.ts +14 -0
  103. package/dist/styles/color.js +23 -0
  104. package/dist/styles/color.js.map +1 -0
  105. package/dist/styles/createStyle.js +77 -0
  106. package/dist/styles/createStyle.js.map +1 -0
  107. package/dist/styles/dimension.js +97 -0
  108. package/dist/styles/dimension.js.map +1 -0
  109. package/dist/styles/display.d.ts +37 -0
  110. package/dist/styles/display.js +67 -0
  111. package/dist/styles/display.js.map +1 -0
  112. package/dist/styles/fade.d.ts +15 -0
  113. package/dist/styles/fade.js +58 -0
  114. package/dist/styles/fade.js.map +1 -0
  115. package/dist/styles/fill.d.ts +42 -0
  116. package/dist/styles/fill.js +52 -0
  117. package/dist/styles/fill.js.map +1 -0
  118. package/dist/styles/flow.d.ts +16 -0
  119. package/dist/styles/flow.js +12 -0
  120. package/dist/styles/flow.js.map +1 -0
  121. package/dist/styles/gap.d.ts +31 -0
  122. package/dist/styles/gap.js +37 -0
  123. package/dist/styles/gap.js.map +1 -0
  124. package/dist/styles/height.d.ts +17 -0
  125. package/dist/styles/height.js +20 -0
  126. package/dist/styles/height.js.map +1 -0
  127. package/dist/styles/index.d.ts +2 -0
  128. package/dist/styles/index.js +9 -0
  129. package/dist/styles/index.js.map +1 -0
  130. package/dist/styles/inset.d.ts +52 -0
  131. package/dist/styles/inset.js +150 -0
  132. package/dist/styles/inset.js.map +1 -0
  133. package/dist/styles/justify.d.ts +15 -0
  134. package/dist/styles/justify.js +14 -0
  135. package/dist/styles/justify.js.map +1 -0
  136. package/dist/styles/list.d.ts +16 -0
  137. package/dist/styles/list.js +98 -0
  138. package/dist/styles/list.js.map +1 -0
  139. package/dist/styles/margin.d.ts +24 -0
  140. package/dist/styles/margin.js +104 -0
  141. package/dist/styles/margin.js.map +1 -0
  142. package/dist/styles/outline.d.ts +29 -0
  143. package/dist/styles/outline.js +65 -0
  144. package/dist/styles/outline.js.map +1 -0
  145. package/dist/styles/padding.d.ts +24 -0
  146. package/dist/styles/padding.js +104 -0
  147. package/dist/styles/padding.js.map +1 -0
  148. package/dist/styles/predefined.d.ts +73 -0
  149. package/dist/styles/predefined.js +241 -0
  150. package/dist/styles/predefined.js.map +1 -0
  151. package/dist/styles/preset.d.ts +47 -0
  152. package/dist/styles/preset.js +126 -0
  153. package/dist/styles/preset.js.map +1 -0
  154. package/dist/styles/radius.d.ts +14 -0
  155. package/dist/styles/radius.js +51 -0
  156. package/dist/styles/radius.js.map +1 -0
  157. package/dist/styles/scrollbar.d.ts +21 -0
  158. package/dist/styles/scrollbar.js +112 -0
  159. package/dist/styles/scrollbar.js.map +1 -0
  160. package/dist/styles/shadow.d.ts +14 -0
  161. package/dist/styles/shadow.js +24 -0
  162. package/dist/styles/shadow.js.map +1 -0
  163. package/dist/styles/styledScrollbar.d.ts +47 -0
  164. package/dist/styles/styledScrollbar.js +38 -0
  165. package/dist/styles/styledScrollbar.js.map +1 -0
  166. package/dist/styles/transition.d.ts +14 -0
  167. package/dist/styles/transition.js +158 -0
  168. package/dist/styles/transition.js.map +1 -0
  169. package/dist/styles/types.d.ts +498 -0
  170. package/dist/styles/width.d.ts +17 -0
  171. package/dist/styles/width.js +20 -0
  172. package/dist/styles/width.js.map +1 -0
  173. package/dist/tasty.d.ts +982 -0
  174. package/dist/tasty.js +206 -0
  175. package/dist/tasty.js.map +1 -0
  176. package/dist/tokens/typography.d.ts +19 -0
  177. package/dist/tokens/typography.js +237 -0
  178. package/dist/tokens/typography.js.map +1 -0
  179. package/dist/types.d.ts +184 -0
  180. package/dist/utils/cache-wrapper.js +26 -0
  181. package/dist/utils/cache-wrapper.js.map +1 -0
  182. package/dist/utils/case-converter.js +8 -0
  183. package/dist/utils/case-converter.js.map +1 -0
  184. package/dist/utils/colors.d.ts +5 -0
  185. package/dist/utils/colors.js +9 -0
  186. package/dist/utils/colors.js.map +1 -0
  187. package/dist/utils/css-types.d.ts +7 -0
  188. package/dist/utils/dotize.d.ts +26 -0
  189. package/dist/utils/dotize.js +122 -0
  190. package/dist/utils/dotize.js.map +1 -0
  191. package/dist/utils/filter-base-props.d.ts +15 -0
  192. package/dist/utils/filter-base-props.js +45 -0
  193. package/dist/utils/filter-base-props.js.map +1 -0
  194. package/dist/utils/get-display-name.d.ts +7 -0
  195. package/dist/utils/get-display-name.js +10 -0
  196. package/dist/utils/get-display-name.js.map +1 -0
  197. package/dist/utils/hsl-to-rgb.js +38 -0
  198. package/dist/utils/hsl-to-rgb.js.map +1 -0
  199. package/dist/utils/is-dev-env.js +19 -0
  200. package/dist/utils/is-dev-env.js.map +1 -0
  201. package/dist/utils/is-valid-element-type.js +15 -0
  202. package/dist/utils/is-valid-element-type.js.map +1 -0
  203. package/dist/utils/merge-styles.d.ts +7 -0
  204. package/dist/utils/merge-styles.js +146 -0
  205. package/dist/utils/merge-styles.js.map +1 -0
  206. package/dist/utils/mod-attrs.d.ts +8 -0
  207. package/dist/utils/mod-attrs.js +21 -0
  208. package/dist/utils/mod-attrs.js.map +1 -0
  209. package/dist/utils/okhsl-to-rgb.js +296 -0
  210. package/dist/utils/okhsl-to-rgb.js.map +1 -0
  211. package/dist/utils/process-tokens.d.ts +31 -0
  212. package/dist/utils/process-tokens.js +171 -0
  213. package/dist/utils/process-tokens.js.map +1 -0
  214. package/dist/utils/resolve-recipes.d.ts +17 -0
  215. package/dist/utils/resolve-recipes.js +147 -0
  216. package/dist/utils/resolve-recipes.js.map +1 -0
  217. package/dist/utils/string.js +8 -0
  218. package/dist/utils/string.js.map +1 -0
  219. package/dist/utils/styles.d.ts +178 -0
  220. package/dist/utils/styles.js +590 -0
  221. package/dist/utils/styles.js.map +1 -0
  222. package/dist/utils/typography.d.ts +36 -0
  223. package/dist/utils/typography.js +53 -0
  224. package/dist/utils/typography.js.map +1 -0
  225. package/dist/utils/warnings.d.ts +16 -0
  226. package/dist/utils/warnings.js +16 -0
  227. package/dist/utils/warnings.js.map +1 -0
  228. package/dist/zero/babel.d.ts +108 -0
  229. package/dist/zero/babel.js +282 -0
  230. package/dist/zero/babel.js.map +1 -0
  231. package/dist/zero/css-writer.d.ts +45 -0
  232. package/dist/zero/css-writer.js +74 -0
  233. package/dist/zero/css-writer.js.map +1 -0
  234. package/dist/zero/extractor.d.ts +24 -0
  235. package/dist/zero/extractor.js +150 -0
  236. package/dist/zero/extractor.js.map +1 -0
  237. package/dist/zero/index.d.ts +3 -0
  238. package/dist/zero/index.js +4 -0
  239. package/dist/zero/next.d.ts +60 -0
  240. package/dist/zero/next.js +78 -0
  241. package/dist/zero/next.js.map +1 -0
  242. package/package.json +189 -0
  243. package/tasty.config.ts +14 -0
@@ -0,0 +1,97 @@
1
+ import { makeEmptyDetails } from "../parser/types.js";
2
+ import { parseStyle } from "../utils/styles.js";
3
+
4
+ //#region src/styles/dimension.ts
5
+ const DEFAULT_MIN_SIZE = "var(--gap)";
6
+ const DEFAULT_MAX_SIZE = "100%";
7
+ /**
8
+ * Parse a dimension value (string, number, or boolean) into a CSS value
9
+ */
10
+ function parseDimensionValue(val) {
11
+ if (val == null) return null;
12
+ if (typeof val === "number") return `${val}px`;
13
+ if (val === true) return "initial";
14
+ return parseStyle(String(val)).groups[0]?.values[0] || null;
15
+ }
16
+ /**
17
+ * Creates a dimension style handler for width or height.
18
+ *
19
+ * Supports:
20
+ * - Main dimension prop (width/height) with syntax for min/max
21
+ * - Separate min/max props (minWidth/maxWidth or minHeight/maxHeight)
22
+ *
23
+ * Priority: Individual min/max props override values from main prop syntax
24
+ */
25
+ function dimensionStyle(name) {
26
+ const minStyle = `min-${name}`;
27
+ const maxStyle = `max-${name}`;
28
+ return ({ value, min, max }) => {
29
+ if (value == null && min == null && max == null) return;
30
+ if (value === true) {
31
+ const styles = {
32
+ [name]: "auto",
33
+ [minStyle]: "initial",
34
+ [maxStyle]: "initial"
35
+ };
36
+ const minVal = parseDimensionValue(min);
37
+ const maxVal = parseDimensionValue(max);
38
+ if (minVal) styles[minStyle] = minVal;
39
+ if (maxVal) styles[maxStyle] = maxVal;
40
+ return styles;
41
+ }
42
+ const styles = {
43
+ [name]: "auto",
44
+ [minStyle]: "initial",
45
+ [maxStyle]: "initial"
46
+ };
47
+ if (value != null) {
48
+ let val = value;
49
+ if (typeof val === "number") val = `${val}px`;
50
+ val = String(val);
51
+ const { mods, values } = parseStyle(val).groups[0] ?? makeEmptyDetails();
52
+ let flag = false;
53
+ for (const mod of mods) switch (mod) {
54
+ case "min":
55
+ styles[minStyle] = values[0] || DEFAULT_MIN_SIZE;
56
+ flag = true;
57
+ break;
58
+ case "max":
59
+ styles[maxStyle] = values[0] || DEFAULT_MAX_SIZE;
60
+ flag = true;
61
+ break;
62
+ case "fixed": {
63
+ const fixedValue = values[0] || "max-content";
64
+ styles[minStyle] = fixedValue;
65
+ styles[name] = fixedValue;
66
+ styles[maxStyle] = fixedValue;
67
+ flag = true;
68
+ break;
69
+ }
70
+ default: break;
71
+ }
72
+ if (!flag || !mods.length) if (values.length === 2) {
73
+ styles[minStyle] = values[0];
74
+ styles[maxStyle] = values[1];
75
+ } else if (values.length === 3) {
76
+ styles[minStyle] = values[0];
77
+ styles[name] = values[1];
78
+ styles[maxStyle] = values[2];
79
+ } else styles[name] = values[0] || "auto";
80
+ if (styles[name] === "stretch") if (name === "width") styles[name] = [
81
+ "stretch",
82
+ "-webkit-fill-available",
83
+ "-moz-available"
84
+ ];
85
+ else styles[name] = "auto";
86
+ }
87
+ const minVal = parseDimensionValue(min);
88
+ const maxVal = parseDimensionValue(max);
89
+ if (minVal) styles[minStyle] = minVal;
90
+ if (maxVal) styles[maxStyle] = maxVal;
91
+ return styles;
92
+ };
93
+ }
94
+
95
+ //#endregion
96
+ export { dimensionStyle };
97
+ //# sourceMappingURL=dimension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dimension.js","names":[],"sources":["../../src/styles/dimension.ts"],"sourcesContent":["import { makeEmptyDetails } from '../parser/types';\nimport { parseStyle } from '../utils/styles';\n\nconst DEFAULT_MIN_SIZE = 'var(--gap)';\nconst DEFAULT_MAX_SIZE = '100%';\n\n/**\n * Parse a dimension value (string, number, or boolean) into a CSS value\n */\nfunction parseDimensionValue(\n val: string | number | boolean | undefined,\n): string | null {\n if (val == null) return null;\n if (typeof val === 'number') return `${val}px`;\n if (val === true) return 'initial';\n\n const processed = parseStyle(String(val));\n return processed.groups[0]?.values[0] || null;\n}\n\ninterface DimensionProps {\n value?: string | number | boolean;\n min?: string | number | boolean;\n max?: string | number | boolean;\n}\n\n/**\n * Creates a dimension style handler for width or height.\n *\n * Supports:\n * - Main dimension prop (width/height) with syntax for min/max\n * - Separate min/max props (minWidth/maxWidth or minHeight/maxHeight)\n *\n * Priority: Individual min/max props override values from main prop syntax\n */\nexport function dimensionStyle(name: 'width' | 'height') {\n const minStyle = `min-${name}`;\n const maxStyle = `max-${name}`;\n\n return ({ value, min, max }: DimensionProps) => {\n // If nothing is defined, return undefined\n if (value == null && min == null && max == null) return;\n\n // Handle boolean true on main value - reset all to initial\n if (value === true) {\n const styles: Record<string, string | string[]> = {\n [name]: 'auto',\n [minStyle]: 'initial',\n [maxStyle]: 'initial',\n };\n\n // Apply individual min/max overrides\n const minVal = parseDimensionValue(min);\n const maxVal = parseDimensionValue(max);\n if (minVal) styles[minStyle] = minVal;\n if (maxVal) styles[maxStyle] = maxVal;\n\n return styles;\n }\n\n const styles: Record<string, string | string[]> = {\n [name]: 'auto',\n [minStyle]: 'initial',\n [maxStyle]: 'initial',\n };\n\n // Process main dimension value\n if (value != null) {\n let val = value;\n if (typeof val === 'number') {\n val = `${val}px`;\n }\n\n val = String(val);\n\n const processed = parseStyle(val);\n const { mods, values } = processed.groups[0] ?? makeEmptyDetails();\n\n let flag = false;\n\n for (const mod of mods) {\n switch (mod) {\n case 'min':\n styles[minStyle] = values[0] || DEFAULT_MIN_SIZE;\n flag = true;\n break;\n case 'max':\n styles[maxStyle] = values[0] || DEFAULT_MAX_SIZE;\n flag = true;\n break;\n case 'fixed': {\n // Fixed modifier: set all three dimensions to the same value\n const fixedValue = values[0] || 'max-content';\n styles[minStyle] = fixedValue;\n styles[name] = fixedValue;\n styles[maxStyle] = fixedValue;\n flag = true;\n break;\n }\n default:\n break;\n }\n }\n\n if (!flag || !mods.length) {\n if (values.length === 2) {\n styles[minStyle] = values[0];\n styles[maxStyle] = values[1];\n } else if (values.length === 3) {\n styles[minStyle] = values[0];\n styles[name] = values[1];\n styles[maxStyle] = values[2];\n } else {\n styles[name] = values[0] || 'auto';\n }\n }\n\n if (styles[name] === 'stretch') {\n if (name === 'width') {\n styles[name] = [\n 'stretch',\n '-webkit-fill-available',\n '-moz-available',\n ];\n } else {\n styles[name] = 'auto';\n }\n }\n }\n\n // Apply individual min/max props (higher priority, override main prop syntax)\n const minVal = parseDimensionValue(min);\n const maxVal = parseDimensionValue(max);\n if (minVal) styles[minStyle] = minVal;\n if (maxVal) styles[maxStyle] = maxVal;\n\n return styles;\n };\n}\n"],"mappings":";;;;AAGA,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;;;;AAKzB,SAAS,oBACP,KACe;AACf,KAAI,OAAO,KAAM,QAAO;AACxB,KAAI,OAAO,QAAQ,SAAU,QAAO,GAAG,IAAI;AAC3C,KAAI,QAAQ,KAAM,QAAO;AAGzB,QADkB,WAAW,OAAO,IAAI,CAAC,CACxB,OAAO,IAAI,OAAO,MAAM;;;;;;;;;;;AAkB3C,SAAgB,eAAe,MAA0B;CACvD,MAAM,WAAW,OAAO;CACxB,MAAM,WAAW,OAAO;AAExB,SAAQ,EAAE,OAAO,KAAK,UAA0B;AAE9C,MAAI,SAAS,QAAQ,OAAO,QAAQ,OAAO,KAAM;AAGjD,MAAI,UAAU,MAAM;GAClB,MAAM,SAA4C;KAC/C,OAAO;KACP,WAAW;KACX,WAAW;IACb;GAGD,MAAM,SAAS,oBAAoB,IAAI;GACvC,MAAM,SAAS,oBAAoB,IAAI;AACvC,OAAI,OAAQ,QAAO,YAAY;AAC/B,OAAI,OAAQ,QAAO,YAAY;AAE/B,UAAO;;EAGT,MAAM,SAA4C;IAC/C,OAAO;IACP,WAAW;IACX,WAAW;GACb;AAGD,MAAI,SAAS,MAAM;GACjB,IAAI,MAAM;AACV,OAAI,OAAO,QAAQ,SACjB,OAAM,GAAG,IAAI;AAGf,SAAM,OAAO,IAAI;GAGjB,MAAM,EAAE,MAAM,WADI,WAAW,IAAI,CACE,OAAO,MAAM,kBAAkB;GAElE,IAAI,OAAO;AAEX,QAAK,MAAM,OAAO,KAChB,SAAQ,KAAR;IACE,KAAK;AACH,YAAO,YAAY,OAAO,MAAM;AAChC,YAAO;AACP;IACF,KAAK;AACH,YAAO,YAAY,OAAO,MAAM;AAChC,YAAO;AACP;IACF,KAAK,SAAS;KAEZ,MAAM,aAAa,OAAO,MAAM;AAChC,YAAO,YAAY;AACnB,YAAO,QAAQ;AACf,YAAO,YAAY;AACnB,YAAO;AACP;;IAEF,QACE;;AAIN,OAAI,CAAC,QAAQ,CAAC,KAAK,OACjB,KAAI,OAAO,WAAW,GAAG;AACvB,WAAO,YAAY,OAAO;AAC1B,WAAO,YAAY,OAAO;cACjB,OAAO,WAAW,GAAG;AAC9B,WAAO,YAAY,OAAO;AAC1B,WAAO,QAAQ,OAAO;AACtB,WAAO,YAAY,OAAO;SAE1B,QAAO,QAAQ,OAAO,MAAM;AAIhC,OAAI,OAAO,UAAU,UACnB,KAAI,SAAS,QACX,QAAO,QAAQ;IACb;IACA;IACA;IACD;OAED,QAAO,QAAQ;;EAMrB,MAAM,SAAS,oBAAoB,IAAI;EACvC,MAAM,SAAS,oBAAoB,IAAI;AACvC,MAAI,OAAQ,QAAO,YAAY;AAC/B,MAAI,OAAQ,QAAO,YAAY;AAE/B,SAAO"}
@@ -0,0 +1,37 @@
1
+ //#region src/styles/display.d.ts
2
+ interface DisplayStyleProps {
3
+ display?: string;
4
+ hide?: boolean;
5
+ textOverflow?: string | boolean;
6
+ overflow?: string;
7
+ whiteSpace?: string;
8
+ }
9
+ /**
10
+ * Handles display, hide, textOverflow, overflow, and whiteSpace styles.
11
+ *
12
+ * textOverflow syntax:
13
+ * - `textOverflow="ellipsis"` - single-line truncation with ellipsis
14
+ * - `textOverflow="ellipsis / 3"` - multi-line clamping (3 lines) with ellipsis
15
+ * - `textOverflow="clip"` - single-line truncation with clip (no ellipsis)
16
+ * - `textOverflow="clip / 2"` - multi-line clip (2 lines)
17
+ * - `textOverflow={true}` or `textOverflow="initial"` - reset to initial
18
+ *
19
+ * Priority:
20
+ * 1. `hide` takes precedence (display: none)
21
+ * 2. Multi-line `textOverflow` forces display: -webkit-box
22
+ * 3. Single-line `textOverflow` defaults white-space to nowrap, multi-line defaults to initial
23
+ * 4. Explicit `whiteSpace` overrides the default white-space from `textOverflow`
24
+ */
25
+ declare function displayStyle({
26
+ display,
27
+ hide,
28
+ textOverflow,
29
+ overflow,
30
+ whiteSpace
31
+ }: DisplayStyleProps): Record<string, string | number> | undefined;
32
+ declare namespace displayStyle {
33
+ var __lookupStyles: string[];
34
+ }
35
+ //#endregion
36
+ export { displayStyle };
37
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1,67 @@
1
+ import { parseStyle } from "../utils/styles.js";
2
+
3
+ //#region src/styles/display.ts
4
+ /**
5
+ * Handles display, hide, textOverflow, overflow, and whiteSpace styles.
6
+ *
7
+ * textOverflow syntax:
8
+ * - `textOverflow="ellipsis"` - single-line truncation with ellipsis
9
+ * - `textOverflow="ellipsis / 3"` - multi-line clamping (3 lines) with ellipsis
10
+ * - `textOverflow="clip"` - single-line truncation with clip (no ellipsis)
11
+ * - `textOverflow="clip / 2"` - multi-line clip (2 lines)
12
+ * - `textOverflow={true}` or `textOverflow="initial"` - reset to initial
13
+ *
14
+ * Priority:
15
+ * 1. `hide` takes precedence (display: none)
16
+ * 2. Multi-line `textOverflow` forces display: -webkit-box
17
+ * 3. Single-line `textOverflow` defaults white-space to nowrap, multi-line defaults to initial
18
+ * 4. Explicit `whiteSpace` overrides the default white-space from `textOverflow`
19
+ */
20
+ function displayStyle({ display, hide, textOverflow, overflow, whiteSpace }) {
21
+ const result = {};
22
+ if (textOverflow != null && textOverflow !== false) if (textOverflow === true || textOverflow === "initial") result["text-overflow"] = "initial";
23
+ else {
24
+ const group = parseStyle(String(textOverflow)).groups[0];
25
+ if (group) {
26
+ const { parts } = group;
27
+ const modePart = parts[0];
28
+ const clampPart = parts[1];
29
+ const hasEllipsis = modePart?.mods.includes("ellipsis");
30
+ const hasClip = modePart?.mods.includes("clip");
31
+ let clamp = 1;
32
+ if (clampPart?.values[0]) {
33
+ const parsed = parseInt(clampPart.values[0], 10);
34
+ if (!isNaN(parsed) && parsed > 0) clamp = parsed;
35
+ }
36
+ if (hasEllipsis || hasClip) {
37
+ result["overflow"] = "hidden";
38
+ result["text-overflow"] = hasEllipsis ? "ellipsis" : "clip";
39
+ if (clamp === 1) result["white-space"] = whiteSpace || "nowrap";
40
+ else {
41
+ result["display"] = "-webkit-box";
42
+ result["-webkit-box-orient"] = "vertical";
43
+ result["-webkit-line-clamp"] = clamp;
44
+ result["line-clamp"] = clamp;
45
+ result["white-space"] = whiteSpace || "initial";
46
+ }
47
+ }
48
+ }
49
+ }
50
+ if (overflow && !result["overflow"]) result["overflow"] = overflow;
51
+ if (whiteSpace && !result["white-space"]) result["white-space"] = whiteSpace;
52
+ if (hide) result["display"] = "none";
53
+ else if (!result["display"] && display) result["display"] = display;
54
+ if (Object.keys(result).length === 0) return;
55
+ return result;
56
+ }
57
+ displayStyle.__lookupStyles = [
58
+ "display",
59
+ "hide",
60
+ "textOverflow",
61
+ "overflow",
62
+ "whiteSpace"
63
+ ];
64
+
65
+ //#endregion
66
+ export { displayStyle };
67
+ //# sourceMappingURL=display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.js","names":[],"sources":["../../src/styles/display.ts"],"sourcesContent":["import { parseStyle } from '../utils/styles';\n\ninterface DisplayStyleProps {\n display?: string;\n hide?: boolean;\n textOverflow?: string | boolean;\n overflow?: string;\n whiteSpace?: string;\n}\n\n/**\n * Handles display, hide, textOverflow, overflow, and whiteSpace styles.\n *\n * textOverflow syntax:\n * - `textOverflow=\"ellipsis\"` - single-line truncation with ellipsis\n * - `textOverflow=\"ellipsis / 3\"` - multi-line clamping (3 lines) with ellipsis\n * - `textOverflow=\"clip\"` - single-line truncation with clip (no ellipsis)\n * - `textOverflow=\"clip / 2\"` - multi-line clip (2 lines)\n * - `textOverflow={true}` or `textOverflow=\"initial\"` - reset to initial\n *\n * Priority:\n * 1. `hide` takes precedence (display: none)\n * 2. Multi-line `textOverflow` forces display: -webkit-box\n * 3. Single-line `textOverflow` defaults white-space to nowrap, multi-line defaults to initial\n * 4. Explicit `whiteSpace` overrides the default white-space from `textOverflow`\n */\nexport function displayStyle({\n display,\n hide,\n textOverflow,\n overflow,\n whiteSpace,\n}: DisplayStyleProps) {\n const result: Record<string, string | number> = {};\n\n // Handle textOverflow first to determine required overrides\n if (textOverflow != null && textOverflow !== false) {\n // Boolean true or 'initial' → reset to initial\n if (textOverflow === true || textOverflow === 'initial') {\n result['text-overflow'] = 'initial';\n } else {\n const processed = parseStyle(String(textOverflow));\n const group = processed.groups[0];\n\n if (group) {\n const { parts } = group;\n const modePart = parts[0];\n const clampPart = parts[1];\n\n const hasEllipsis = modePart?.mods.includes('ellipsis');\n const hasClip = modePart?.mods.includes('clip');\n\n // Get clamp value from second part (after /)\n let clamp = 1;\n if (clampPart?.values[0]) {\n const parsed = parseInt(clampPart.values[0], 10);\n if (!isNaN(parsed) && parsed > 0) {\n clamp = parsed;\n }\n }\n\n if (hasEllipsis || hasClip) {\n result['overflow'] = 'hidden';\n result['text-overflow'] = hasEllipsis ? 'ellipsis' : 'clip';\n\n if (clamp === 1) {\n result['white-space'] = whiteSpace || 'nowrap';\n } else {\n result['display'] = '-webkit-box';\n result['-webkit-box-orient'] = 'vertical';\n result['-webkit-line-clamp'] = clamp;\n result['line-clamp'] = clamp;\n result['white-space'] = whiteSpace || 'initial';\n }\n }\n }\n }\n }\n\n // Apply user-specified values (only if not overridden by textOverflow)\n if (overflow && !result['overflow']) {\n result['overflow'] = overflow;\n }\n if (whiteSpace && !result['white-space']) {\n result['white-space'] = whiteSpace;\n }\n\n // Handle display (hide > textOverflow > user value)\n if (hide) {\n result['display'] = 'none';\n } else if (!result['display'] && display) {\n result['display'] = display;\n }\n\n // Return undefined if no styles to apply\n if (Object.keys(result).length === 0) {\n return;\n }\n\n return result;\n}\n\ndisplayStyle.__lookupStyles = [\n 'display',\n 'hide',\n 'textOverflow',\n 'overflow',\n 'whiteSpace',\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,aAAa,EAC3B,SACA,MACA,cACA,UACA,cACoB;CACpB,MAAM,SAA0C,EAAE;AAGlD,KAAI,gBAAgB,QAAQ,iBAAiB,MAE3C,KAAI,iBAAiB,QAAQ,iBAAiB,UAC5C,QAAO,mBAAmB;MACrB;EAEL,MAAM,QADY,WAAW,OAAO,aAAa,CAAC,CAC1B,OAAO;AAE/B,MAAI,OAAO;GACT,MAAM,EAAE,UAAU;GAClB,MAAM,WAAW,MAAM;GACvB,MAAM,YAAY,MAAM;GAExB,MAAM,cAAc,UAAU,KAAK,SAAS,WAAW;GACvD,MAAM,UAAU,UAAU,KAAK,SAAS,OAAO;GAG/C,IAAI,QAAQ;AACZ,OAAI,WAAW,OAAO,IAAI;IACxB,MAAM,SAAS,SAAS,UAAU,OAAO,IAAI,GAAG;AAChD,QAAI,CAAC,MAAM,OAAO,IAAI,SAAS,EAC7B,SAAQ;;AAIZ,OAAI,eAAe,SAAS;AAC1B,WAAO,cAAc;AACrB,WAAO,mBAAmB,cAAc,aAAa;AAErD,QAAI,UAAU,EACZ,QAAO,iBAAiB,cAAc;SACjC;AACL,YAAO,aAAa;AACpB,YAAO,wBAAwB;AAC/B,YAAO,wBAAwB;AAC/B,YAAO,gBAAgB;AACvB,YAAO,iBAAiB,cAAc;;;;;AAQhD,KAAI,YAAY,CAAC,OAAO,YACtB,QAAO,cAAc;AAEvB,KAAI,cAAc,CAAC,OAAO,eACxB,QAAO,iBAAiB;AAI1B,KAAI,KACF,QAAO,aAAa;UACX,CAAC,OAAO,cAAc,QAC/B,QAAO,aAAa;AAItB,KAAI,OAAO,KAAK,OAAO,CAAC,WAAW,EACjC;AAGF,QAAO;;AAGT,aAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACD"}
@@ -0,0 +1,15 @@
1
+ //#region src/styles/fade.d.ts
2
+ declare function fadeStyle({
3
+ fade
4
+ }: {
5
+ fade?: string;
6
+ }): {
7
+ mask: string;
8
+ 'mask-composite': string;
9
+ } | undefined;
10
+ declare namespace fadeStyle {
11
+ var __lookupStyles: string[];
12
+ }
13
+ //#endregion
14
+ export { fadeStyle };
15
+ //# sourceMappingURL=fade.d.ts.map
@@ -0,0 +1,58 @@
1
+ import { DIRECTIONS, filterMods, parseStyle } from "../utils/styles.js";
2
+
3
+ //#region src/styles/fade.ts
4
+ const DIRECTION_MAP = {
5
+ right: "to left",
6
+ left: "to right",
7
+ top: "to bottom",
8
+ bottom: "to top"
9
+ };
10
+ const DEFAULT_TRANSPARENT_COLOR = "rgb(0 0 0 / 0)";
11
+ const DEFAULT_OPAQUE_COLOR = "rgb(0 0 0 / 1)";
12
+ /**
13
+ * Process a single group and return gradient strings for its directions.
14
+ */
15
+ function processGroup(group, isOnlyGroup) {
16
+ let { values } = group;
17
+ const { mods, colors } = group;
18
+ let directions = filterMods(mods, DIRECTIONS);
19
+ if (!values.length) values = ["calc(2 * var(--gap))"];
20
+ if (!directions.length) if (isOnlyGroup) directions = [
21
+ "top",
22
+ "right",
23
+ "bottom",
24
+ "left"
25
+ ];
26
+ else return [];
27
+ const transparentColor = colors?.[0] || DEFAULT_TRANSPARENT_COLOR;
28
+ const opaqueColor = colors?.[1] || DEFAULT_OPAQUE_COLOR;
29
+ return directions.map((direction, index) => {
30
+ const size = values[index] || values[index % 2] || values[0];
31
+ return `linear-gradient(${DIRECTION_MAP[direction]}, ${transparentColor} 0%, ${opaqueColor} ${size})`;
32
+ });
33
+ }
34
+ function fadeStyle({ fade }) {
35
+ if (!fade) return;
36
+ const groups = parseStyle(fade).groups ?? [];
37
+ if (!groups.length) return;
38
+ const isOnlyGroup = groups.length === 1;
39
+ const gradients = [];
40
+ for (const group of groups) {
41
+ const groupGradients = processGroup({
42
+ values: group.values ?? [],
43
+ mods: group.mods ?? [],
44
+ colors: group.colors ?? []
45
+ }, isOnlyGroup);
46
+ gradients.push(...groupGradients);
47
+ }
48
+ if (!gradients.length) return;
49
+ return {
50
+ mask: gradients.join(", "),
51
+ "mask-composite": "intersect"
52
+ };
53
+ }
54
+ fadeStyle.__lookupStyles = ["fade"];
55
+
56
+ //#endregion
57
+ export { fadeStyle };
58
+ //# sourceMappingURL=fade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fade.js","names":[],"sources":["../../src/styles/fade.ts"],"sourcesContent":["import { DIRECTIONS, filterMods, parseStyle } from '../utils/styles';\n\nconst DIRECTION_MAP: Record<(typeof DIRECTIONS)[number], string> = {\n right: 'to left',\n left: 'to right',\n top: 'to bottom',\n bottom: 'to top',\n};\n\n// Default mask colors (standard black with alpha for gradient masks)\nconst DEFAULT_TRANSPARENT_COLOR = 'rgb(0 0 0 / 0)';\nconst DEFAULT_OPAQUE_COLOR = 'rgb(0 0 0 / 1)';\n\ninterface GroupData {\n values: string[];\n mods: string[];\n colors: string[];\n}\n\n/**\n * Process a single group and return gradient strings for its directions.\n */\nfunction processGroup(group: GroupData, isOnlyGroup: boolean): string[] {\n let { values } = group;\n const { mods, colors } = group;\n\n let directions = filterMods(\n mods,\n DIRECTIONS,\n ) as (typeof DIRECTIONS)[number][];\n\n if (!values.length) {\n values = ['calc(2 * var(--gap))'];\n }\n\n // If this is the only group and no directions specified, apply to all edges\n if (!directions.length) {\n if (isOnlyGroup) {\n directions = ['top', 'right', 'bottom', 'left'];\n } else {\n // For multi-group without explicit direction, skip this group\n return [];\n }\n }\n\n // Extract colors: first = transparent mask color, second = opaque mask color\n const transparentColor = colors?.[0] || DEFAULT_TRANSPARENT_COLOR;\n const opaqueColor = colors?.[1] || DEFAULT_OPAQUE_COLOR;\n\n return directions.map(\n (direction: (typeof DIRECTIONS)[number], index: number) => {\n const size = values[index] || values[index % 2] || values[0];\n\n return `linear-gradient(${DIRECTION_MAP[direction]}, ${transparentColor} 0%, ${opaqueColor} ${size})`;\n },\n );\n}\n\nexport function fadeStyle({ fade }: { fade?: string }) {\n if (!fade) return;\n\n const processed = parseStyle(fade);\n const groups: GroupData[] = processed.groups ?? [];\n\n if (!groups.length) return;\n\n const isOnlyGroup = groups.length === 1;\n\n // Process all groups and collect gradients\n const gradients: string[] = [];\n\n for (const group of groups) {\n const groupGradients = processGroup(\n {\n values: group.values ?? [],\n mods: group.mods ?? [],\n colors: group.colors ?? [],\n },\n isOnlyGroup,\n );\n gradients.push(...groupGradients);\n }\n\n if (!gradients.length) return;\n\n return {\n mask: gradients.join(', '),\n 'mask-composite': 'intersect',\n };\n}\n\nfadeStyle.__lookupStyles = ['fade'];\n"],"mappings":";;;AAEA,MAAM,gBAA6D;CACjE,OAAO;CACP,MAAM;CACN,KAAK;CACL,QAAQ;CACT;AAGD,MAAM,4BAA4B;AAClC,MAAM,uBAAuB;;;;AAW7B,SAAS,aAAa,OAAkB,aAAgC;CACtE,IAAI,EAAE,WAAW;CACjB,MAAM,EAAE,MAAM,WAAW;CAEzB,IAAI,aAAa,WACf,MACA,WACD;AAED,KAAI,CAAC,OAAO,OACV,UAAS,CAAC,uBAAuB;AAInC,KAAI,CAAC,WAAW,OACd,KAAI,YACF,cAAa;EAAC;EAAO;EAAS;EAAU;EAAO;KAG/C,QAAO,EAAE;CAKb,MAAM,mBAAmB,SAAS,MAAM;CACxC,MAAM,cAAc,SAAS,MAAM;AAEnC,QAAO,WAAW,KACf,WAAwC,UAAkB;EACzD,MAAM,OAAO,OAAO,UAAU,OAAO,QAAQ,MAAM,OAAO;AAE1D,SAAO,mBAAmB,cAAc,WAAW,IAAI,iBAAiB,OAAO,YAAY,GAAG,KAAK;GAEtG;;AAGH,SAAgB,UAAU,EAAE,QAA2B;AACrD,KAAI,CAAC,KAAM;CAGX,MAAM,SADY,WAAW,KAAK,CACI,UAAU,EAAE;AAElD,KAAI,CAAC,OAAO,OAAQ;CAEpB,MAAM,cAAc,OAAO,WAAW;CAGtC,MAAM,YAAsB,EAAE;AAE9B,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,iBAAiB,aACrB;GACE,QAAQ,MAAM,UAAU,EAAE;GAC1B,MAAM,MAAM,QAAQ,EAAE;GACtB,QAAQ,MAAM,UAAU,EAAE;GAC3B,EACD,YACD;AACD,YAAU,KAAK,GAAG,eAAe;;AAGnC,KAAI,CAAC,UAAU,OAAQ;AAEvB,QAAO;EACL,MAAM,UAAU,KAAK,KAAK;EAC1B,kBAAkB;EACnB;;AAGH,UAAU,iBAAiB,CAAC,OAAO"}
@@ -0,0 +1,42 @@
1
+ //#region src/styles/fill.d.ts
2
+ declare function fillStyle({
3
+ fill,
4
+ backgroundColor,
5
+ image,
6
+ backgroundImage,
7
+ backgroundPosition,
8
+ backgroundSize,
9
+ backgroundRepeat,
10
+ backgroundAttachment,
11
+ backgroundOrigin,
12
+ backgroundClip,
13
+ background
14
+ }: {
15
+ fill?: string;
16
+ backgroundColor?: string;
17
+ image?: string;
18
+ backgroundImage?: string;
19
+ backgroundPosition?: string;
20
+ backgroundSize?: string;
21
+ backgroundRepeat?: string;
22
+ backgroundAttachment?: string;
23
+ backgroundOrigin?: string;
24
+ backgroundClip?: string;
25
+ background?: string;
26
+ }): Record<string, string> | undefined;
27
+ declare namespace fillStyle {
28
+ var __lookupStyles: string[];
29
+ }
30
+ declare function svgFillStyle({
31
+ svgFill
32
+ }: {
33
+ svgFill?: string;
34
+ }): {
35
+ fill: string;
36
+ } | undefined;
37
+ declare namespace svgFillStyle {
38
+ var __lookupStyles: string[];
39
+ }
40
+ //#endregion
41
+ export { fillStyle, svgFillStyle };
42
+ //# sourceMappingURL=fill.d.ts.map
@@ -0,0 +1,52 @@
1
+ import { parseStyle } from "../utils/styles.js";
2
+
3
+ //#region src/styles/fill.ts
4
+ function fillStyle({ fill, backgroundColor, image, backgroundImage, backgroundPosition, backgroundSize, backgroundRepeat, backgroundAttachment, backgroundOrigin, backgroundClip, background }) {
5
+ if (background) return { background: parseStyle(background).output || background };
6
+ const result = {};
7
+ const colorValue = backgroundColor ?? fill;
8
+ if (colorValue) {
9
+ const parsed = parseStyle(colorValue);
10
+ const firstColor = parsed.groups[0]?.colors[0];
11
+ const secondColor = parsed.groups[0]?.colors[1];
12
+ result["background-color"] = firstColor || colorValue;
13
+ if (secondColor) result["--tasty-second-fill-color"] = secondColor;
14
+ }
15
+ const gradientLayer = result["--tasty-second-fill-color"] ? "linear-gradient(var(--tasty-second-fill-color), var(--tasty-second-fill-color))" : null;
16
+ const imageValue = backgroundImage ?? image;
17
+ if (imageValue) {
18
+ const imgCss = parseStyle(imageValue).output || imageValue;
19
+ result["background-image"] = gradientLayer ? `${imgCss}, ${gradientLayer}` : imgCss;
20
+ } else if (gradientLayer) result["background-image"] = gradientLayer;
21
+ if (backgroundPosition) result["background-position"] = parseStyle(backgroundPosition).output || backgroundPosition;
22
+ if (backgroundSize) result["background-size"] = parseStyle(backgroundSize).output || backgroundSize;
23
+ if (backgroundRepeat) result["background-repeat"] = backgroundRepeat;
24
+ if (backgroundAttachment) result["background-attachment"] = backgroundAttachment;
25
+ if (backgroundOrigin) result["background-origin"] = backgroundOrigin;
26
+ if (backgroundClip) result["background-clip"] = backgroundClip;
27
+ if (Object.keys(result).length === 0) return;
28
+ return result;
29
+ }
30
+ fillStyle.__lookupStyles = [
31
+ "fill",
32
+ "backgroundColor",
33
+ "image",
34
+ "backgroundImage",
35
+ "backgroundPosition",
36
+ "backgroundSize",
37
+ "backgroundRepeat",
38
+ "backgroundAttachment",
39
+ "backgroundOrigin",
40
+ "backgroundClip",
41
+ "background"
42
+ ];
43
+ function svgFillStyle({ svgFill }) {
44
+ if (!svgFill) return;
45
+ svgFill = parseStyle(svgFill).groups[0]?.colors[0] || svgFill;
46
+ return { fill: svgFill };
47
+ }
48
+ svgFillStyle.__lookupStyles = ["svgFill"];
49
+
50
+ //#endregion
51
+ export { fillStyle, svgFillStyle };
52
+ //# sourceMappingURL=fill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fill.js","names":[],"sources":["../../src/styles/fill.ts"],"sourcesContent":["import { parseStyle } from '../utils/styles';\n\nexport function fillStyle({\n fill,\n backgroundColor,\n image,\n backgroundImage,\n backgroundPosition,\n backgroundSize,\n backgroundRepeat,\n backgroundAttachment,\n backgroundOrigin,\n backgroundClip,\n background,\n}: {\n fill?: string;\n backgroundColor?: string;\n image?: string;\n backgroundImage?: string;\n backgroundPosition?: string;\n backgroundSize?: string;\n backgroundRepeat?: string;\n backgroundAttachment?: string;\n backgroundOrigin?: string;\n backgroundClip?: string;\n background?: string;\n}) {\n // If background is set, it overrides everything\n if (background) {\n const processed = parseStyle(background);\n return { background: processed.output || background };\n }\n\n const result: Record<string, string> = {};\n\n // Priority: backgroundColor > fill\n const colorValue = backgroundColor ?? fill;\n if (colorValue) {\n const parsed = parseStyle(colorValue);\n const firstColor = parsed.groups[0]?.colors[0];\n const secondColor = parsed.groups[0]?.colors[1];\n\n result['background-color'] = firstColor || colorValue;\n\n if (secondColor) {\n result['--tasty-second-fill-color'] = secondColor;\n }\n }\n\n const gradientLayer = result['--tasty-second-fill-color']\n ? 'linear-gradient(var(--tasty-second-fill-color), var(--tasty-second-fill-color))'\n : null;\n\n // Priority: backgroundImage > image\n const imageValue = backgroundImage ?? image;\n if (imageValue) {\n const parsed = parseStyle(imageValue);\n const imgCss = parsed.output || imageValue;\n\n result['background-image'] = gradientLayer\n ? `${imgCss}, ${gradientLayer}`\n : imgCss;\n } else if (gradientLayer) {\n result['background-image'] = gradientLayer;\n }\n\n // Other background properties (pass through with parseStyle for token support)\n if (backgroundPosition) {\n result['background-position'] =\n parseStyle(backgroundPosition).output || backgroundPosition;\n }\n if (backgroundSize) {\n result['background-size'] =\n parseStyle(backgroundSize).output || backgroundSize;\n }\n if (backgroundRepeat) {\n result['background-repeat'] = backgroundRepeat;\n }\n if (backgroundAttachment) {\n result['background-attachment'] = backgroundAttachment;\n }\n if (backgroundOrigin) {\n result['background-origin'] = backgroundOrigin;\n }\n if (backgroundClip) {\n result['background-clip'] = backgroundClip;\n }\n\n if (Object.keys(result).length === 0) return;\n return result;\n}\n\nfillStyle.__lookupStyles = [\n 'fill',\n 'backgroundColor',\n 'image',\n 'backgroundImage',\n 'backgroundPosition',\n 'backgroundSize',\n 'backgroundRepeat',\n 'backgroundAttachment',\n 'backgroundOrigin',\n 'backgroundClip',\n 'background',\n];\n\nexport function svgFillStyle({ svgFill }: { svgFill?: string }) {\n if (!svgFill) return;\n\n const processed = parseStyle(svgFill);\n svgFill = processed.groups[0]?.colors[0] || svgFill;\n\n return { fill: svgFill };\n}\n\nsvgFillStyle.__lookupStyles = ['svgFill'];\n"],"mappings":";;;AAEA,SAAgB,UAAU,EACxB,MACA,iBACA,OACA,iBACA,oBACA,gBACA,kBACA,sBACA,kBACA,gBACA,cAaC;AAED,KAAI,WAEF,QAAO,EAAE,YADS,WAAW,WAAW,CACT,UAAU,YAAY;CAGvD,MAAM,SAAiC,EAAE;CAGzC,MAAM,aAAa,mBAAmB;AACtC,KAAI,YAAY;EACd,MAAM,SAAS,WAAW,WAAW;EACrC,MAAM,aAAa,OAAO,OAAO,IAAI,OAAO;EAC5C,MAAM,cAAc,OAAO,OAAO,IAAI,OAAO;AAE7C,SAAO,sBAAsB,cAAc;AAE3C,MAAI,YACF,QAAO,+BAA+B;;CAI1C,MAAM,gBAAgB,OAAO,+BACzB,oFACA;CAGJ,MAAM,aAAa,mBAAmB;AACtC,KAAI,YAAY;EAEd,MAAM,SADS,WAAW,WAAW,CACf,UAAU;AAEhC,SAAO,sBAAsB,gBACzB,GAAG,OAAO,IAAI,kBACd;YACK,cACT,QAAO,sBAAsB;AAI/B,KAAI,mBACF,QAAO,yBACL,WAAW,mBAAmB,CAAC,UAAU;AAE7C,KAAI,eACF,QAAO,qBACL,WAAW,eAAe,CAAC,UAAU;AAEzC,KAAI,iBACF,QAAO,uBAAuB;AAEhC,KAAI,qBACF,QAAO,2BAA2B;AAEpC,KAAI,iBACF,QAAO,uBAAuB;AAEhC,KAAI,eACF,QAAO,qBAAqB;AAG9B,KAAI,OAAO,KAAK,OAAO,CAAC,WAAW,EAAG;AACtC,QAAO;;AAGT,UAAU,iBAAiB;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAgB,aAAa,EAAE,WAAiC;AAC9D,KAAI,CAAC,QAAS;AAGd,WADkB,WAAW,QAAQ,CACjB,OAAO,IAAI,OAAO,MAAM;AAE5C,QAAO,EAAE,MAAM,SAAS;;AAG1B,aAAa,iBAAiB,CAAC,UAAU"}
@@ -0,0 +1,16 @@
1
+ //#region src/styles/flow.d.ts
2
+ declare function flowStyle({
3
+ display,
4
+ flow
5
+ }: {
6
+ display?: string;
7
+ flow?: string;
8
+ }): {
9
+ [x: string]: string | undefined;
10
+ } | null;
11
+ declare namespace flowStyle {
12
+ var __lookupStyles: string[];
13
+ }
14
+ //#endregion
15
+ export { flowStyle };
16
+ //# sourceMappingURL=flow.d.ts.map
@@ -0,0 +1,12 @@
1
+ //#region src/styles/flow.ts
2
+ function flowStyle({ display = "block", flow }) {
3
+ let style;
4
+ if (display.includes("grid")) style = "grid-auto-flow";
5
+ else if (display.includes("flex")) style = "flex-flow";
6
+ return style ? { [style]: flow } : null;
7
+ }
8
+ flowStyle.__lookupStyles = ["display", "flow"];
9
+
10
+ //#endregion
11
+ export { flowStyle };
12
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","names":[],"sources":["../../src/styles/flow.ts"],"sourcesContent":["export function flowStyle({\n display = 'block',\n flow,\n}: {\n display?: string;\n flow?: string;\n}) {\n let style;\n\n if (display.includes('grid')) {\n style = 'grid-auto-flow';\n } else if (display.includes('flex')) {\n style = 'flex-flow';\n }\n\n return style ? { [style]: flow } : null;\n}\n\nflowStyle.__lookupStyles = ['display', 'flow'];\n"],"mappings":";AAAA,SAAgB,UAAU,EACxB,UAAU,SACV,QAIC;CACD,IAAI;AAEJ,KAAI,QAAQ,SAAS,OAAO,CAC1B,SAAQ;UACC,QAAQ,SAAS,OAAO,CACjC,SAAQ;AAGV,QAAO,QAAQ,GAAG,QAAQ,MAAM,GAAG;;AAGrC,UAAU,iBAAiB,CAAC,WAAW,OAAO"}
@@ -0,0 +1,31 @@
1
+ //#region src/styles/gap.d.ts
2
+ declare function gapStyle({
3
+ display,
4
+ flow,
5
+ gap
6
+ }: {
7
+ display?: string;
8
+ flow?: string;
9
+ gap?: string | number | boolean;
10
+ }): {
11
+ gap: string;
12
+ $?: undefined;
13
+ } | ({
14
+ 'margin-right': string;
15
+ 'margin-bottom': string;
16
+ $?: undefined;
17
+ } | {
18
+ $: string;
19
+ 'margin-right': string;
20
+ 'margin-bottom': string;
21
+ })[] | {
22
+ [x: string]: string;
23
+ $: string;
24
+ gap?: undefined;
25
+ } | undefined;
26
+ declare namespace gapStyle {
27
+ var __lookupStyles: string[];
28
+ }
29
+ //#endregion
30
+ export { gapStyle };
31
+ //# sourceMappingURL=gap.d.ts.map
@@ -0,0 +1,37 @@
1
+ import { makeEmptyDetails } from "../parser/types.js";
2
+ import { parseStyle } from "../utils/styles.js";
3
+
4
+ //#region src/styles/gap.ts
5
+ function gapStyle({ display = "block", flow, gap }) {
6
+ if (typeof gap === "number") gap = `${gap}px`;
7
+ if (!gap) return;
8
+ if (gap === true) gap = "1x";
9
+ const isGrid = display.includes("grid");
10
+ const isFlex = display.includes("flex");
11
+ const isWrap = flow ? flow.includes("wrap") && !flow.includes("nowrap") : false;
12
+ if (!isGrid && flow == null) flow = isFlex ? "row" : "column";
13
+ const { values } = parseStyle(gap).groups[0] ?? makeEmptyDetails();
14
+ gap = values.join(" ");
15
+ if (isGrid || isFlex) return { gap };
16
+ const gapDir = flow?.includes("row") ? "right" : "bottom";
17
+ return isWrap ? [{
18
+ "margin-right": `calc(-1 * ${values[1] || values[0]})`,
19
+ "margin-bottom": `calc(-1 * ${values[0]})`
20
+ }, {
21
+ $: "& > *",
22
+ "margin-right": values[1] || values[0],
23
+ "margin-bottom": values[0]
24
+ }] : {
25
+ $: "& > *:not(:last-child)",
26
+ [`margin-${gapDir}`]: gap
27
+ };
28
+ }
29
+ gapStyle.__lookupStyles = [
30
+ "display",
31
+ "flow",
32
+ "gap"
33
+ ];
34
+
35
+ //#endregion
36
+ export { gapStyle };
37
+ //# sourceMappingURL=gap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gap.js","names":[],"sources":["../../src/styles/gap.ts"],"sourcesContent":["import { makeEmptyDetails } from '../parser/types';\nimport { parseStyle } from '../utils/styles';\n\nexport function gapStyle({\n display = 'block',\n flow,\n gap,\n}: {\n display?: string;\n flow?: string;\n gap?: string | number | boolean;\n}) {\n if (typeof gap === 'number') {\n gap = `${gap}px`;\n }\n\n if (!gap) {\n return;\n }\n\n if (gap === true) {\n gap = '1x';\n }\n\n const isGrid = display.includes('grid');\n const isFlex = display.includes('flex');\n const isWrap = flow\n ? flow.includes('wrap') && !flow.includes('nowrap')\n : false;\n\n if (!isGrid && flow == null) {\n flow = isFlex ? 'row' : 'column';\n }\n\n const processed = parseStyle(gap);\n const { values } = processed.groups[0] ?? makeEmptyDetails();\n\n gap = values.join(' ');\n\n if (isGrid || isFlex) {\n return { gap };\n }\n\n const gapDir = flow?.includes('row') ? 'right' : 'bottom';\n\n return isWrap\n ? [\n {\n 'margin-right': `calc(-1 * ${values[1] || values[0]})`,\n 'margin-bottom': `calc(-1 * ${values[0]})`,\n },\n {\n $: '& > *',\n 'margin-right': values[1] || values[0],\n 'margin-bottom': values[0],\n },\n ]\n : {\n $: '& > *:not(:last-child)',\n [`margin-${gapDir}`]: gap,\n };\n}\n\ngapStyle.__lookupStyles = ['display', 'flow', 'gap'];\n"],"mappings":";;;;AAGA,SAAgB,SAAS,EACvB,UAAU,SACV,MACA,OAKC;AACD,KAAI,OAAO,QAAQ,SACjB,OAAM,GAAG,IAAI;AAGf,KAAI,CAAC,IACH;AAGF,KAAI,QAAQ,KACV,OAAM;CAGR,MAAM,SAAS,QAAQ,SAAS,OAAO;CACvC,MAAM,SAAS,QAAQ,SAAS,OAAO;CACvC,MAAM,SAAS,OACX,KAAK,SAAS,OAAO,IAAI,CAAC,KAAK,SAAS,SAAS,GACjD;AAEJ,KAAI,CAAC,UAAU,QAAQ,KACrB,QAAO,SAAS,QAAQ;CAI1B,MAAM,EAAE,WADU,WAAW,IAAI,CACJ,OAAO,MAAM,kBAAkB;AAE5D,OAAM,OAAO,KAAK,IAAI;AAEtB,KAAI,UAAU,OACZ,QAAO,EAAE,KAAK;CAGhB,MAAM,SAAS,MAAM,SAAS,MAAM,GAAG,UAAU;AAEjD,QAAO,SACH,CACE;EACE,gBAAgB,aAAa,OAAO,MAAM,OAAO,GAAG;EACpD,iBAAiB,aAAa,OAAO,GAAG;EACzC,EACD;EACE,GAAG;EACH,gBAAgB,OAAO,MAAM,OAAO;EACpC,iBAAiB,OAAO;EACzB,CACF,GACD;EACE,GAAG;GACF,UAAU,WAAW;EACvB;;AAGP,SAAS,iBAAiB;CAAC;CAAW;CAAQ;CAAM"}
@@ -0,0 +1,17 @@
1
+ //#region src/styles/height.d.ts
2
+ interface HeightStyleProps {
3
+ height?: string | number | boolean;
4
+ minHeight?: string | number | boolean;
5
+ maxHeight?: string | number | boolean;
6
+ }
7
+ declare function heightStyle({
8
+ height,
9
+ minHeight,
10
+ maxHeight
11
+ }: HeightStyleProps): Record<string, string | string[]> | undefined;
12
+ declare namespace heightStyle {
13
+ var __lookupStyles: string[];
14
+ }
15
+ //#endregion
16
+ export { heightStyle };
17
+ //# sourceMappingURL=height.d.ts.map
@@ -0,0 +1,20 @@
1
+ import { dimensionStyle } from "./dimension.js";
2
+
3
+ //#region src/styles/height.ts
4
+ const dimension = dimensionStyle("height");
5
+ function heightStyle({ height, minHeight, maxHeight }) {
6
+ return dimension({
7
+ value: height,
8
+ min: minHeight,
9
+ max: maxHeight
10
+ });
11
+ }
12
+ heightStyle.__lookupStyles = [
13
+ "height",
14
+ "minHeight",
15
+ "maxHeight"
16
+ ];
17
+
18
+ //#endregion
19
+ export { heightStyle };
20
+ //# sourceMappingURL=height.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"height.js","names":[],"sources":["../../src/styles/height.ts"],"sourcesContent":["import { dimensionStyle } from './dimension';\n\nconst dimension = dimensionStyle('height');\n\ninterface HeightStyleProps {\n height?: string | number | boolean;\n minHeight?: string | number | boolean;\n maxHeight?: string | number | boolean;\n}\n\nexport function heightStyle({\n height,\n minHeight,\n maxHeight,\n}: HeightStyleProps) {\n return dimension({ value: height, min: minHeight, max: maxHeight });\n}\n\nheightStyle.__lookupStyles = ['height', 'minHeight', 'maxHeight'];\n"],"mappings":";;;AAEA,MAAM,YAAY,eAAe,SAAS;AAQ1C,SAAgB,YAAY,EAC1B,QACA,WACA,aACmB;AACnB,QAAO,UAAU;EAAE,OAAO;EAAQ,KAAK;EAAW,KAAK;EAAW,CAAC;;AAGrE,YAAY,iBAAiB;CAAC;CAAU;CAAa;CAAY"}
@@ -0,0 +1,2 @@
1
+ import "../index.js";
2
+ import { styleHandlers } from "./predefined.js";
@@ -0,0 +1,9 @@
1
+ import { convertColorChainToRgbChain, createStyle } from "./createStyle.js";
2
+ import { normalizeHandlerDefinition, predefine, registerHandler, resetHandlers, styleHandlers } from "./predefined.js";
3
+
4
+ //#region src/styles/index.ts
5
+ const { STYLE_HANDLER_MAP, defineCustomStyle, defineStyleAlias } = predefine();
6
+
7
+ //#endregion
8
+ export { STYLE_HANDLER_MAP };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/styles/index.ts"],"sourcesContent":["import { predefine, styleHandlers } from './predefined';\n\nconst { STYLE_HANDLER_MAP, defineCustomStyle, defineStyleAlias } = predefine();\n\nexport {\n STYLE_HANDLER_MAP,\n defineCustomStyle,\n defineStyleAlias,\n styleHandlers,\n};\nexport * from './createStyle';\nexport {\n normalizeHandlerDefinition,\n registerHandler,\n resetHandlers,\n validateHandlerResult,\n} from './predefined';\n"],"mappings":";;;;AAEA,MAAM,EAAE,mBAAmB,mBAAmB,qBAAqB,WAAW"}
@@ -0,0 +1,52 @@
1
+ //#region src/styles/inset.d.ts
2
+ /**
3
+ * Inset style handler.
4
+ *
5
+ * IMPORTANT: This handler uses individual CSS properties (top, right, bottom, left)
6
+ * when only individual direction props are specified. This allows CSS cascade to work
7
+ * correctly when modifiers override only some directions.
8
+ *
9
+ * Example problem with using `inset` shorthand everywhere:
10
+ * styles: {
11
+ * top: { '': 0, 'side=bottom': 'initial' },
12
+ * right: { '': 0, 'side=left': 'initial' },
13
+ * bottom: { '': 0, 'side=top': 'initial' },
14
+ * left: { '': 0, 'side=right': 'initial' },
15
+ * }
16
+ *
17
+ * If we output `inset` for both cases:
18
+ * - Default: inset: 0 0 0 0
19
+ * - side=bottom: inset: initial auto auto auto ← WRONG! Overrides all 4 directions
20
+ *
21
+ * With individual properties:
22
+ * - Default: top: 0; right: 0; bottom: 0; left: 0
23
+ * - side=bottom: top: initial ← CORRECT! Only overrides top
24
+ *
25
+ * The `inset` shorthand is only used when the base `inset` prop is specified
26
+ * OR when `insetBlock`/`insetInline` are used (which imply setting pairs).
27
+ */
28
+ declare function insetStyle({
29
+ inset,
30
+ insetBlock,
31
+ insetInline,
32
+ top,
33
+ right,
34
+ bottom,
35
+ left
36
+ }: {
37
+ inset?: string | number | boolean;
38
+ insetBlock?: string | number | boolean;
39
+ insetInline?: string | number | boolean;
40
+ top?: string | number | boolean;
41
+ right?: string | number | boolean;
42
+ bottom?: string | number | boolean;
43
+ left?: string | number | boolean;
44
+ }): Record<string, string> | {
45
+ inset: string;
46
+ };
47
+ declare namespace insetStyle {
48
+ var __lookupStyles: string[];
49
+ }
50
+ //#endregion
51
+ export { insetStyle };
52
+ //# sourceMappingURL=inset.d.ts.map