@tenphi/tasty 2.0.3 → 2.0.4

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 (322) hide show
  1. package/dist/{ssr/async-storage.js → async-storage-B7_o6FKt.js} +2 -2
  2. package/dist/async-storage-B7_o6FKt.js.map +1 -0
  3. package/dist/{ssr/collector.d.ts → collector-CkZ517g4.d.ts} +3 -3
  4. package/dist/{ssr/collector.js → collector-DXqvGOb1.js} +5 -10
  5. package/dist/collector-DXqvGOb1.js.map +1 -0
  6. package/dist/config-5jzS6k6B.js +10005 -0
  7. package/dist/config-5jzS6k6B.js.map +1 -0
  8. package/dist/config-DknGsfMo.d.ts +857 -0
  9. package/dist/{ssr/context.js → context-CkSg-kDT.js} +11 -3
  10. package/dist/context-CkSg-kDT.js.map +1 -0
  11. package/dist/core/index.d.ts +5 -34
  12. package/dist/core/index.js +5 -26
  13. package/dist/core-CtU6-9OC.js +1507 -0
  14. package/dist/core-CtU6-9OC.js.map +1 -0
  15. package/dist/{zero/extractor.js → css-writer-DHkX0JuE.js} +74 -11
  16. package/dist/css-writer-DHkX0JuE.js.map +1 -0
  17. package/dist/{ssr/format-global-rules.js → format-global-rules-Dbc_1tc3.js} +2 -2
  18. package/dist/format-global-rules-Dbc_1tc3.js.map +1 -0
  19. package/dist/format-rules-DH13ewDu.js +143 -0
  20. package/dist/format-rules-DH13ewDu.js.map +1 -0
  21. package/dist/{ssr/hydrate.js → hydrate-C1Gv-DoS.js} +3 -3
  22. package/dist/hydrate-C1Gv-DoS.js.map +1 -0
  23. package/dist/{styles/types.d.ts → index-PzENbpAq.d.ts} +701 -5
  24. package/dist/index-o7zV2yCr.d.ts +1561 -0
  25. package/dist/index.d.ts +5 -51
  26. package/dist/index.js +728 -35
  27. package/dist/index.js.map +1 -0
  28. package/dist/keyframes-b7X3UxDV.js +587 -0
  29. package/dist/keyframes-b7X3UxDV.js.map +1 -0
  30. package/dist/{utils/merge-styles.d.ts → merge-styles-C7KTy7MY.d.ts} +3 -3
  31. package/dist/{utils/merge-styles.js → merge-styles-Tgo3BbL2.js} +3 -4
  32. package/dist/merge-styles-Tgo3BbL2.js.map +1 -0
  33. package/dist/{utils/resolve-recipes.js → resolve-recipes-Ca2-5CxM.js} +4 -6
  34. package/dist/resolve-recipes-Ca2-5CxM.js.map +1 -0
  35. package/dist/ssr/astro-client.js +1 -1
  36. package/dist/ssr/astro.js +4 -4
  37. package/dist/ssr/index.d.ts +44 -4
  38. package/dist/ssr/index.js +4 -4
  39. package/dist/ssr/next.d.ts +1 -1
  40. package/dist/ssr/next.js +6 -6
  41. package/dist/ssr/next.js.map +1 -1
  42. package/dist/static/index.d.ts +91 -5
  43. package/dist/static/index.js +49 -3
  44. package/dist/static/index.js.map +1 -0
  45. package/dist/zero/babel.d.ts +1 -1
  46. package/dist/zero/babel.js +10 -6
  47. package/dist/zero/babel.js.map +1 -1
  48. package/dist/zero/index.d.ts +67 -3
  49. package/dist/zero/index.js +1 -2
  50. package/package.json +3 -3
  51. package/dist/_virtual/_rolldown/runtime.js +0 -7
  52. package/dist/chunks/cacheKey.d.ts +0 -1
  53. package/dist/chunks/cacheKey.js +0 -77
  54. package/dist/chunks/cacheKey.js.map +0 -1
  55. package/dist/chunks/definitions.d.ts +0 -37
  56. package/dist/chunks/definitions.js +0 -258
  57. package/dist/chunks/definitions.js.map +0 -1
  58. package/dist/chunks/index.d.ts +0 -1
  59. package/dist/chunks/renderChunk.d.ts +0 -1
  60. package/dist/chunks/renderChunk.js +0 -59
  61. package/dist/chunks/renderChunk.js.map +0 -1
  62. package/dist/compute-styles.d.ts +0 -31
  63. package/dist/compute-styles.js +0 -322
  64. package/dist/compute-styles.js.map +0 -1
  65. package/dist/config.d.ts +0 -407
  66. package/dist/config.js +0 -591
  67. package/dist/config.js.map +0 -1
  68. package/dist/counter-style/index.js +0 -51
  69. package/dist/counter-style/index.js.map +0 -1
  70. package/dist/debug.d.ts +0 -89
  71. package/dist/debug.js +0 -453
  72. package/dist/debug.js.map +0 -1
  73. package/dist/font-face/index.js +0 -63
  74. package/dist/font-face/index.js.map +0 -1
  75. package/dist/hooks/index.d.ts +0 -7
  76. package/dist/hooks/useCounterStyle.d.ts +0 -36
  77. package/dist/hooks/useCounterStyle.js +0 -65
  78. package/dist/hooks/useCounterStyle.js.map +0 -1
  79. package/dist/hooks/useFontFace.d.ts +0 -45
  80. package/dist/hooks/useFontFace.js +0 -66
  81. package/dist/hooks/useFontFace.js.map +0 -1
  82. package/dist/hooks/useGlobalStyles.d.ts +0 -46
  83. package/dist/hooks/useGlobalStyles.js +0 -88
  84. package/dist/hooks/useGlobalStyles.js.map +0 -1
  85. package/dist/hooks/useKeyframes.d.ts +0 -58
  86. package/dist/hooks/useKeyframes.js +0 -55
  87. package/dist/hooks/useKeyframes.js.map +0 -1
  88. package/dist/hooks/useProperty.d.ts +0 -81
  89. package/dist/hooks/useProperty.js +0 -96
  90. package/dist/hooks/useProperty.js.map +0 -1
  91. package/dist/hooks/useRawCSS.d.ts +0 -22
  92. package/dist/hooks/useRawCSS.js +0 -103
  93. package/dist/hooks/useRawCSS.js.map +0 -1
  94. package/dist/hooks/useStyles.d.ts +0 -40
  95. package/dist/hooks/useStyles.js +0 -31
  96. package/dist/hooks/useStyles.js.map +0 -1
  97. package/dist/injector/index.d.ts +0 -182
  98. package/dist/injector/index.js +0 -185
  99. package/dist/injector/index.js.map +0 -1
  100. package/dist/injector/injector.d.ts +0 -198
  101. package/dist/injector/injector.js +0 -651
  102. package/dist/injector/injector.js.map +0 -1
  103. package/dist/injector/sheet-manager.d.ts +0 -132
  104. package/dist/injector/sheet-manager.js +0 -699
  105. package/dist/injector/sheet-manager.js.map +0 -1
  106. package/dist/injector/types.d.ts +0 -235
  107. package/dist/keyframes/index.js +0 -206
  108. package/dist/keyframes/index.js.map +0 -1
  109. package/dist/parser/classify.js +0 -319
  110. package/dist/parser/classify.js.map +0 -1
  111. package/dist/parser/const.js +0 -60
  112. package/dist/parser/const.js.map +0 -1
  113. package/dist/parser/lru.js +0 -109
  114. package/dist/parser/lru.js.map +0 -1
  115. package/dist/parser/parser.d.ts +0 -25
  116. package/dist/parser/parser.js +0 -115
  117. package/dist/parser/parser.js.map +0 -1
  118. package/dist/parser/tokenizer.js +0 -69
  119. package/dist/parser/tokenizer.js.map +0 -1
  120. package/dist/parser/types.d.ts +0 -51
  121. package/dist/parser/types.js +0 -46
  122. package/dist/parser/types.js.map +0 -1
  123. package/dist/pipeline/conditions.d.ts +0 -134
  124. package/dist/pipeline/conditions.js +0 -406
  125. package/dist/pipeline/conditions.js.map +0 -1
  126. package/dist/pipeline/exclusive.js +0 -389
  127. package/dist/pipeline/exclusive.js.map +0 -1
  128. package/dist/pipeline/index.d.ts +0 -55
  129. package/dist/pipeline/index.js +0 -749
  130. package/dist/pipeline/index.js.map +0 -1
  131. package/dist/pipeline/materialize-contradictions.js +0 -125
  132. package/dist/pipeline/materialize-contradictions.js.map +0 -1
  133. package/dist/pipeline/materialize.js +0 -1038
  134. package/dist/pipeline/materialize.js.map +0 -1
  135. package/dist/pipeline/parseStateKey.d.ts +0 -15
  136. package/dist/pipeline/parseStateKey.js +0 -446
  137. package/dist/pipeline/parseStateKey.js.map +0 -1
  138. package/dist/pipeline/simplify.js +0 -725
  139. package/dist/pipeline/simplify.js.map +0 -1
  140. package/dist/pipeline/warnings.js +0 -18
  141. package/dist/pipeline/warnings.js.map +0 -1
  142. package/dist/plugins/index.d.ts +0 -2
  143. package/dist/plugins/okhsl-plugin.d.ts +0 -35
  144. package/dist/plugins/okhsl-plugin.js +0 -97
  145. package/dist/plugins/okhsl-plugin.js.map +0 -1
  146. package/dist/plugins/types.d.ts +0 -87
  147. package/dist/properties/index.js +0 -222
  148. package/dist/properties/index.js.map +0 -1
  149. package/dist/properties/property-type-resolver.d.ts +0 -24
  150. package/dist/properties/property-type-resolver.js +0 -90
  151. package/dist/properties/property-type-resolver.js.map +0 -1
  152. package/dist/rsc-cache.js +0 -79
  153. package/dist/rsc-cache.js.map +0 -1
  154. package/dist/ssr/async-storage.d.ts +0 -17
  155. package/dist/ssr/async-storage.js.map +0 -1
  156. package/dist/ssr/collect-auto-properties.js +0 -58
  157. package/dist/ssr/collect-auto-properties.js.map +0 -1
  158. package/dist/ssr/collector.js.map +0 -1
  159. package/dist/ssr/context.js.map +0 -1
  160. package/dist/ssr/format-global-rules.js.map +0 -1
  161. package/dist/ssr/format-keyframes.js +0 -69
  162. package/dist/ssr/format-keyframes.js.map +0 -1
  163. package/dist/ssr/format-property.js +0 -49
  164. package/dist/ssr/format-property.js.map +0 -1
  165. package/dist/ssr/format-rules.js +0 -73
  166. package/dist/ssr/format-rules.js.map +0 -1
  167. package/dist/ssr/hydrate.d.ts +0 -29
  168. package/dist/ssr/hydrate.js.map +0 -1
  169. package/dist/ssr/ssr-collector-ref.js +0 -29
  170. package/dist/ssr/ssr-collector-ref.js.map +0 -1
  171. package/dist/states/index.d.ts +0 -49
  172. package/dist/states/index.js +0 -170
  173. package/dist/states/index.js.map +0 -1
  174. package/dist/static/tastyStatic.d.ts +0 -46
  175. package/dist/static/tastyStatic.js +0 -30
  176. package/dist/static/tastyStatic.js.map +0 -1
  177. package/dist/static/types.d.ts +0 -49
  178. package/dist/static/types.js +0 -24
  179. package/dist/static/types.js.map +0 -1
  180. package/dist/styles/border.d.ts +0 -25
  181. package/dist/styles/border.js +0 -120
  182. package/dist/styles/border.js.map +0 -1
  183. package/dist/styles/color.d.ts +0 -14
  184. package/dist/styles/color.js +0 -26
  185. package/dist/styles/color.js.map +0 -1
  186. package/dist/styles/const.js +0 -17
  187. package/dist/styles/const.js.map +0 -1
  188. package/dist/styles/createStyle.js +0 -79
  189. package/dist/styles/createStyle.js.map +0 -1
  190. package/dist/styles/dimension.js +0 -109
  191. package/dist/styles/dimension.js.map +0 -1
  192. package/dist/styles/directional.js +0 -133
  193. package/dist/styles/directional.js.map +0 -1
  194. package/dist/styles/display.d.ts +0 -30
  195. package/dist/styles/display.js +0 -73
  196. package/dist/styles/display.js.map +0 -1
  197. package/dist/styles/fade.d.ts +0 -15
  198. package/dist/styles/fade.js +0 -62
  199. package/dist/styles/fade.js.map +0 -1
  200. package/dist/styles/fill.d.ts +0 -42
  201. package/dist/styles/fill.js +0 -51
  202. package/dist/styles/fill.js.map +0 -1
  203. package/dist/styles/flow.d.ts +0 -16
  204. package/dist/styles/flow.js +0 -12
  205. package/dist/styles/flow.js.map +0 -1
  206. package/dist/styles/gap.d.ts +0 -31
  207. package/dist/styles/gap.js +0 -38
  208. package/dist/styles/gap.js.map +0 -1
  209. package/dist/styles/height.d.ts +0 -17
  210. package/dist/styles/height.js +0 -19
  211. package/dist/styles/height.js.map +0 -1
  212. package/dist/styles/index.d.ts +0 -1
  213. package/dist/styles/index.js +0 -8
  214. package/dist/styles/index.js.map +0 -1
  215. package/dist/styles/inset.d.ts +0 -24
  216. package/dist/styles/inset.js +0 -34
  217. package/dist/styles/inset.js.map +0 -1
  218. package/dist/styles/list.d.ts +0 -16
  219. package/dist/styles/list.js +0 -100
  220. package/dist/styles/list.js.map +0 -1
  221. package/dist/styles/margin.d.ts +0 -24
  222. package/dist/styles/margin.js +0 -32
  223. package/dist/styles/margin.js.map +0 -1
  224. package/dist/styles/outline.d.ts +0 -29
  225. package/dist/styles/outline.js +0 -55
  226. package/dist/styles/outline.js.map +0 -1
  227. package/dist/styles/padding.d.ts +0 -24
  228. package/dist/styles/padding.js +0 -32
  229. package/dist/styles/padding.js.map +0 -1
  230. package/dist/styles/placement.d.ts +0 -37
  231. package/dist/styles/placement.js +0 -74
  232. package/dist/styles/placement.js.map +0 -1
  233. package/dist/styles/predefined.d.ts +0 -71
  234. package/dist/styles/predefined.js +0 -237
  235. package/dist/styles/predefined.js.map +0 -1
  236. package/dist/styles/preset.d.ts +0 -52
  237. package/dist/styles/preset.js +0 -127
  238. package/dist/styles/preset.js.map +0 -1
  239. package/dist/styles/radius.d.ts +0 -12
  240. package/dist/styles/radius.js +0 -83
  241. package/dist/styles/radius.js.map +0 -1
  242. package/dist/styles/scrollMargin.d.ts +0 -24
  243. package/dist/styles/scrollMargin.js +0 -32
  244. package/dist/styles/scrollMargin.js.map +0 -1
  245. package/dist/styles/scrollbar.d.ts +0 -25
  246. package/dist/styles/scrollbar.js +0 -51
  247. package/dist/styles/scrollbar.js.map +0 -1
  248. package/dist/styles/shadow.d.ts +0 -14
  249. package/dist/styles/shadow.js +0 -25
  250. package/dist/styles/shadow.js.map +0 -1
  251. package/dist/styles/shared.js +0 -17
  252. package/dist/styles/shared.js.map +0 -1
  253. package/dist/styles/transition.d.ts +0 -14
  254. package/dist/styles/transition.js +0 -159
  255. package/dist/styles/transition.js.map +0 -1
  256. package/dist/styles/width.d.ts +0 -17
  257. package/dist/styles/width.js +0 -19
  258. package/dist/styles/width.js.map +0 -1
  259. package/dist/tasty.d.ts +0 -134
  260. package/dist/tasty.js +0 -248
  261. package/dist/tasty.js.map +0 -1
  262. package/dist/types.d.ts +0 -184
  263. package/dist/utils/cache-wrapper.js +0 -21
  264. package/dist/utils/cache-wrapper.js.map +0 -1
  265. package/dist/utils/case-converter.js +0 -8
  266. package/dist/utils/case-converter.js.map +0 -1
  267. package/dist/utils/color-math.d.ts +0 -46
  268. package/dist/utils/color-math.js +0 -749
  269. package/dist/utils/color-math.js.map +0 -1
  270. package/dist/utils/color-space.d.ts +0 -5
  271. package/dist/utils/color-space.js +0 -228
  272. package/dist/utils/color-space.js.map +0 -1
  273. package/dist/utils/colors.d.ts +0 -5
  274. package/dist/utils/colors.js +0 -10
  275. package/dist/utils/colors.js.map +0 -1
  276. package/dist/utils/css-types.d.ts +0 -7
  277. package/dist/utils/deps-equal.js +0 -15
  278. package/dist/utils/deps-equal.js.map +0 -1
  279. package/dist/utils/dotize.d.ts +0 -26
  280. package/dist/utils/dotize.js +0 -122
  281. package/dist/utils/dotize.js.map +0 -1
  282. package/dist/utils/filter-base-props.d.ts +0 -15
  283. package/dist/utils/filter-base-props.js +0 -45
  284. package/dist/utils/filter-base-props.js.map +0 -1
  285. package/dist/utils/get-display-name.d.ts +0 -7
  286. package/dist/utils/get-display-name.js +0 -10
  287. package/dist/utils/get-display-name.js.map +0 -1
  288. package/dist/utils/has-keys.js +0 -13
  289. package/dist/utils/has-keys.js.map +0 -1
  290. package/dist/utils/hash.js +0 -14
  291. package/dist/utils/hash.js.map +0 -1
  292. package/dist/utils/is-dev-env.js +0 -19
  293. package/dist/utils/is-dev-env.js.map +0 -1
  294. package/dist/utils/is-valid-element-type.js +0 -15
  295. package/dist/utils/is-valid-element-type.js.map +0 -1
  296. package/dist/utils/merge-styles.js.map +0 -1
  297. package/dist/utils/mod-attrs.d.ts +0 -6
  298. package/dist/utils/mod-attrs.js +0 -20
  299. package/dist/utils/mod-attrs.js.map +0 -1
  300. package/dist/utils/process-tokens.d.ts +0 -17
  301. package/dist/utils/process-tokens.js +0 -83
  302. package/dist/utils/process-tokens.js.map +0 -1
  303. package/dist/utils/resolve-recipes.d.ts +0 -17
  304. package/dist/utils/resolve-recipes.js.map +0 -1
  305. package/dist/utils/selector-transform.js +0 -32
  306. package/dist/utils/selector-transform.js.map +0 -1
  307. package/dist/utils/string.js +0 -8
  308. package/dist/utils/string.js.map +0 -1
  309. package/dist/utils/styles.d.ts +0 -99
  310. package/dist/utils/styles.js +0 -220
  311. package/dist/utils/styles.js.map +0 -1
  312. package/dist/utils/typography.d.ts +0 -58
  313. package/dist/utils/typography.js +0 -51
  314. package/dist/utils/typography.js.map +0 -1
  315. package/dist/utils/warnings.d.ts +0 -16
  316. package/dist/utils/warnings.js +0 -16
  317. package/dist/utils/warnings.js.map +0 -1
  318. package/dist/zero/css-writer.d.ts +0 -45
  319. package/dist/zero/css-writer.js +0 -73
  320. package/dist/zero/css-writer.js.map +0 -1
  321. package/dist/zero/extractor.d.ts +0 -24
  322. package/dist/zero/extractor.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"color-math.js","names":[],"sources":["../../src/utils/color-math.ts"],"sourcesContent":["/**\n * Consolidated color conversion math.\n *\n * Single source of truth for all color space conversions used across the\n * library: sRGB gamma, HSL, OKLab, OKLCH, OKHSL, hex parsing, named\n * colors, and CSS string converters.\n *\n * This module has zero internal imports — it is a leaf dependency.\n *\n * Reference: https://bottosson.github.io/posts/oklab/\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type Vec3 = [number, number, number];\n\n// ============================================================================\n// Conversion Matrices\n// ============================================================================\n\nconst OKLab_to_LMS_M: Vec3[] = [\n [1.0, 0.3963377773761749, 0.2158037573099136],\n [1.0, -0.1055613458156586, -0.0638541728258133],\n [1.0, -0.0894841775298119, -1.2914855480194092],\n];\n\nconst LMS_to_linear_sRGB_M: Vec3[] = [\n [4.076741636075959, -3.307711539258062, 0.2309699031821041],\n [-1.2684379732850313, 2.6097573492876878, -0.3413193760026569],\n [-0.004196076138675526, -0.703418617935936, 1.7076146940746113],\n];\n\nconst OKLab_to_linear_sRGB_coefficients: [\n [[number, number], number[]],\n [[number, number], number[]],\n [[number, number], number[]],\n] = [\n [\n [-1.8817030993265873, -0.8093650129914302],\n [1.19086277, 1.76576728, 0.59662641, 0.75515197, 0.56771245],\n ],\n [\n [1.8144407988010998, -1.194452667805235],\n [0.73956515, -0.45954404, 0.08285427, 0.1254107, 0.14503204],\n ],\n [\n [0.13110757611180954, 1.813339709266608],\n [1.35733652, -0.00915799, -1.1513021, -0.50559606, 0.00692167],\n ],\n];\n\n// ============================================================================\n// Linear Algebra Helpers\n// ============================================================================\n\nconst dotXY = (a: [number, number], b: [number, number]): number =>\n a[0] * b[0] + a[1] * b[1];\n\n// ============================================================================\n// sRGB Gamma <-> Linear\n// ============================================================================\n\nexport function srgbToLinear(c: number): number {\n return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\n}\n\nconst INV_GAMMA = 1 / 2.4;\n\nexport function srgbLinearToGamma(val: number): number {\n const sign = val < 0 ? -1 : 1;\n const abs = Math.abs(val);\n return abs > 0.0031308\n ? sign * (1.055 * abs ** INV_GAMMA - 0.055)\n : 12.92 * val;\n}\n\n// ============================================================================\n// OKHSL Constants & Helpers\n// ============================================================================\n\nconst TAU = 2 * Math.PI;\nconst K1 = 0.206;\nconst K2 = 0.03;\nconst K3 = (1.0 + K1) / (1.0 + K2);\nconst EPSILON = 1e-10;\n\nconst clamp = (value: number, min: number, max: number): number =>\n Math.max(Math.min(value, max), min);\n\nconst constrainAngle = (angle: number): number => ((angle % 360) + 360) % 360;\n\nconst toe = (x: number): number =>\n 0.5 *\n (K3 * x - K1 + Math.sqrt((K3 * x - K1) * (K3 * x - K1) + 4 * K2 * K3 * x));\n\nconst toeInv = (x: number): number => (x ** 2 + K1 * x) / (K3 * (x + K2));\n\n// ============================================================================\n// OKLab <-> Linear sRGB\n// ============================================================================\n\nconst oklabToLinearSrgb = (lab: Vec3): Vec3 => {\n const L = lab[0];\n const a = lab[1];\n const b = lab[2];\n\n // OKLab -> LMS (inlined OKLab_to_LMS_M multiply)\n const l_ = L + 0.3963377773761749 * a + 0.2158037573099136 * b;\n const m_ = L - 0.1055613458156586 * a - 0.0638541728258133 * b;\n const s_ = L - 0.0894841775298119 * a - 1.2914855480194092 * b;\n\n // Cube\n const l = l_ * l_ * l_;\n const m = m_ * m_ * m_;\n const s = s_ * s_ * s_;\n\n // LMS -> linear sRGB (inlined LMS_to_linear_sRGB_M multiply)\n return [\n 4.076741636075959 * l - 3.307711539258062 * m + 0.2309699031821041 * s,\n -1.2684379732850313 * l + 2.6097573492876878 * m - 0.3413193760026569 * s,\n -0.004196076138675526 * l - 0.703418617935936 * m + 1.7076146940746113 * s,\n ];\n};\n\nconst linearSrgbToOklab = (rgb: Vec3): Vec3 => {\n const r = rgb[0];\n const g = rgb[1];\n const b = rgb[2];\n\n // linear sRGB -> LMS (inlined linear_sRGB_to_LMS_M multiply)\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\n\n // Cube root\n const l_ = Math.cbrt(l);\n const m_ = Math.cbrt(m);\n const s_ = Math.cbrt(s);\n\n // LMS -> OKLab (inlined LMS_to_OKLab_M multiply)\n return [\n 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,\n 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,\n 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,\n ];\n};\n\n// ============================================================================\n// OKHSL Gamut-Mapping Internals\n// ============================================================================\n\nconst computeMaxSaturationOKLC = (a: number, b: number): number => {\n const okCoeff = OKLab_to_linear_sRGB_coefficients;\n const lmsToRgb = LMS_to_linear_sRGB_M;\n const tmp2: [number, number] = [a, b];\n const tmp3: Vec3 = [0, a, b];\n\n let chnlCoeff: number[];\n let chnlLMS: Vec3;\n\n if (dotXY(okCoeff[0][0], tmp2) > 1) {\n chnlCoeff = okCoeff[0][1];\n chnlLMS = lmsToRgb[0];\n } else if (dotXY(okCoeff[1][0], tmp2) > 1) {\n chnlCoeff = okCoeff[1][1];\n chnlLMS = lmsToRgb[1];\n } else {\n chnlCoeff = okCoeff[2][1];\n chnlLMS = lmsToRgb[2];\n }\n\n const [k0, k1, k2, k3, k4] = chnlCoeff;\n const [wl, wm, ws] = chnlLMS;\n\n let sat = k0 + k1 * a + k2 * b + k3 * (a * a) + k4 * a * b;\n\n const dotYZ = (mat: Vec3, vec: Vec3): number =>\n mat[1] * vec[1] + mat[2] * vec[2];\n\n const kl = dotYZ(OKLab_to_LMS_M[0], tmp3);\n const km = dotYZ(OKLab_to_LMS_M[1], tmp3);\n const ks = dotYZ(OKLab_to_LMS_M[2], tmp3);\n\n const l_ = 1.0 + sat * kl;\n const m_ = 1.0 + sat * km;\n const s_ = 1.0 + sat * ks;\n\n const l = l_ ** 3;\n const m = m_ ** 3;\n const s = s_ ** 3;\n\n const lds = 3.0 * kl * (l_ * l_);\n const mds = 3.0 * km * (m_ * m_);\n const sds = 3.0 * ks * (s_ * s_);\n\n const lds2 = 6.0 * (kl * kl) * l_;\n const mds2 = 6.0 * (km * km) * m_;\n const sds2 = 6.0 * (ks * ks) * s_;\n\n const f = wl * l + wm * m + ws * s;\n const f1 = wl * lds + wm * mds + ws * sds;\n const f2 = wl * lds2 + wm * mds2 + ws * sds2;\n\n sat = sat - (f * f1) / (f1 * f1 - 0.5 * f * f2);\n\n return sat;\n};\n\nconst findCuspOKLCH = (a: number, b: number): [number, number] => {\n const S_cusp = computeMaxSaturationOKLC(a, b);\n const lab: Vec3 = [1, S_cusp * a, S_cusp * b];\n const rgb_at_max = oklabToLinearSrgb(lab);\n const L_cusp = Math.cbrt(\n 1 /\n Math.max(\n Math.max(rgb_at_max[0], rgb_at_max[1]),\n Math.max(rgb_at_max[2], 0.0),\n ),\n );\n return [L_cusp, L_cusp * S_cusp];\n};\n\nconst findGamutIntersectionOKLCH = (\n a: number,\n b: number,\n l1: number,\n c1: number,\n l0: number,\n cusp: [number, number],\n): number => {\n const lmsToRgb = LMS_to_linear_sRGB_M;\n const tmp3: Vec3 = [0, a, b];\n const floatMax = Number.MAX_VALUE;\n\n let t: number;\n\n const dotYZ = (mat: Vec3, vec: Vec3): number =>\n mat[1] * vec[1] + mat[2] * vec[2];\n const dotXYZ = (vec: Vec3, x: number, y: number, z: number): number =>\n vec[0] * x + vec[1] * y + vec[2] * z;\n\n if ((l1 - l0) * cusp[1] - (cusp[0] - l0) * c1 <= 0.0) {\n const denom = c1 * cusp[0] + cusp[1] * (l0 - l1);\n t = denom === 0 ? 0 : (cusp[1] * l0) / denom;\n } else {\n const denom = c1 * (cusp[0] - 1.0) + cusp[1] * (l0 - l1);\n t = denom === 0 ? 0 : (cusp[1] * (l0 - 1.0)) / denom;\n\n const dl = l1 - l0;\n const dc = c1;\n\n const kl = dotYZ(OKLab_to_LMS_M[0], tmp3);\n const km = dotYZ(OKLab_to_LMS_M[1], tmp3);\n const ks = dotYZ(OKLab_to_LMS_M[2], tmp3);\n\n const ldt_ = dl + dc * kl;\n const mdt_ = dl + dc * km;\n const sdt_ = dl + dc * ks;\n\n const L = l0 * (1.0 - t) + t * l1;\n const C = t * c1;\n\n const l_ = L + C * kl;\n const m_ = L + C * km;\n const s_ = L + C * ks;\n\n const l = l_ ** 3;\n const m = m_ ** 3;\n const s = s_ ** 3;\n\n const ldt = 3 * ldt_ * l_ * l_;\n const mdt = 3 * mdt_ * m_ * m_;\n const sdt = 3 * sdt_ * s_ * s_;\n\n const ldt2 = 6 * ldt_ * ldt_ * l_;\n const mdt2 = 6 * mdt_ * mdt_ * m_;\n const sdt2 = 6 * sdt_ * sdt_ * s_;\n\n const r_ = dotXYZ(lmsToRgb[0], l, m, s) - 1;\n const r1 = dotXYZ(lmsToRgb[0], ldt, mdt, sdt);\n const r2 = dotXYZ(lmsToRgb[0], ldt2, mdt2, sdt2);\n\n const ur = r1 / (r1 * r1 - 0.5 * r_ * r2);\n let tr = -r_ * ur;\n\n const g_ = dotXYZ(lmsToRgb[1], l, m, s) - 1;\n const g1 = dotXYZ(lmsToRgb[1], ldt, mdt, sdt);\n const g2 = dotXYZ(lmsToRgb[1], ldt2, mdt2, sdt2);\n\n const ug = g1 / (g1 * g1 - 0.5 * g_ * g2);\n let tg = -g_ * ug;\n\n const b_ = dotXYZ(lmsToRgb[2], l, m, s) - 1;\n const b1 = dotXYZ(lmsToRgb[2], ldt, mdt, sdt);\n const b2 = dotXYZ(lmsToRgb[2], ldt2, mdt2, sdt2);\n\n const ub = b1 / (b1 * b1 - 0.5 * b_ * b2);\n let tb = -b_ * ub;\n\n tr = ur >= 0.0 ? tr : floatMax;\n tg = ug >= 0.0 ? tg : floatMax;\n tb = ub >= 0.0 ? tb : floatMax;\n\n t += Math.min(tr, Math.min(tg, tb));\n }\n\n return t;\n};\n\nconst computeSt = (cusp: [number, number]): [number, number] => [\n cusp[1] / cusp[0],\n cusp[1] / (1 - cusp[0]),\n];\n\nconst computeStMid = (a: number, b: number): [number, number] => [\n 0.11516993 +\n 1.0 /\n (7.4477897 +\n 4.1590124 * b +\n a *\n (-2.19557347 +\n 1.75198401 * b +\n a *\n (-2.13704948 -\n 10.02301043 * b +\n a * (-4.24894561 + 5.38770819 * b + 4.69891013 * a)))),\n 0.11239642 +\n 1.0 /\n (1.6132032 -\n 0.68124379 * b +\n a *\n (0.40370612 +\n 0.90148123 * b +\n a *\n (-0.27087943 +\n 0.6122399 * b +\n a * (0.00299215 - 0.45399568 * b - 0.14661872 * a)))),\n];\n\nconst getCs = (\n L: number,\n a: number,\n b: number,\n cusp: [number, number],\n): [number, number, number] => {\n const cMax = findGamutIntersectionOKLCH(a, b, L, 1, L, cusp);\n const stMax = computeSt(cusp);\n const k = cMax / Math.min(L * stMax[0], (1 - L) * stMax[1]);\n const stMid = computeStMid(a, b);\n let ca = L * stMid[0];\n let cb = (1.0 - L) * stMid[1];\n const cMid =\n 0.9 * k * Math.sqrt(Math.sqrt(1.0 / (1.0 / ca ** 4 + 1.0 / cb ** 4)));\n ca = L * 0.4;\n cb = (1.0 - L) * 0.8;\n const c0 = Math.sqrt(1.0 / (1.0 / ca ** 2 + 1.0 / cb ** 2));\n return [c0, cMid, cMax];\n};\n\nconst okhslToOklab = (hsl: Vec3): Vec3 => {\n let h = hsl[0];\n const s = hsl[1];\n const l = hsl[2];\n\n const L = toeInv(l);\n let a = 0;\n let b = 0;\n\n h = constrainAngle(h) / 360.0;\n\n if (L !== 0.0 && L !== 1.0 && s !== 0) {\n const a_ = Math.cos(TAU * h);\n const b_ = Math.sin(TAU * h);\n\n const cusp = findCuspOKLCH(a_, b_);\n const Cs = getCs(L, a_, b_, cusp);\n const [c0, cMid, cMax] = Cs;\n\n const mid = 0.8;\n const midInv = 1.25;\n let t: number, k0: number, k1: number, k2: number;\n\n if (s < mid) {\n t = midInv * s;\n k0 = 0.0;\n k1 = mid * c0;\n k2 = 1.0 - k1 / cMid;\n } else {\n t = 5 * (s - 0.8);\n k0 = cMid;\n k1 = (0.2 * cMid ** 2 * 1.25 ** 2) / c0;\n k2 = 1.0 - k1 / (cMax - cMid);\n }\n\n const c = k0 + (t * k1) / (1.0 - k2 * t);\n a = c * a_;\n b = c * b_;\n }\n\n return [L, a, b];\n};\n\nconst oklabToOkhsl = (lab: Vec3): Vec3 => {\n const L = lab[0];\n const a = lab[1];\n const b = lab[2];\n\n const C = Math.sqrt(a * a + b * b);\n\n if (C < EPSILON) {\n return [0, 0, toe(L)];\n }\n\n const a_ = a / C;\n const b_ = b / C;\n\n let h = Math.atan2(b, a) * (180 / Math.PI);\n h = constrainAngle(h);\n\n const cusp = findCuspOKLCH(a_, b_);\n const Cs = getCs(L, a_, b_, cusp);\n const [c0, cMid, cMax] = Cs;\n\n const mid = 0.8;\n const midInv = 1.25;\n\n let s: number;\n\n if (C < cMid) {\n const k1 = mid * c0;\n const k2 = 1.0 - k1 / cMid;\n const t = C / (k1 + C * k2);\n s = t / midInv;\n } else {\n const k0 = cMid;\n const k1 = (0.2 * cMid ** 2 * 1.25 ** 2) / c0;\n const k2 = 1.0 - k1 / (cMax - cMid);\n const cDiff = C - k0;\n const t = cDiff / (k1 + cDiff * k2);\n s = mid + t / 5;\n }\n\n const l = toe(L);\n\n return [h, clamp(s, 0, 1), clamp(l, 0, 1)];\n};\n\n// ============================================================================\n// Public Conversions — Pure Math (Vec3 in / Vec3 out)\n// ============================================================================\n\n/**\n * HSL to RGB.\n * Algorithm from CSS Color 4 spec.\n *\n * @param h - Hue in degrees (0-360)\n * @param s - Saturation (0-1)\n * @param l - Lightness (0-1)\n * @returns RGB values in 0-255 range (may have fractional values)\n */\nexport function hslToRgbValues(h: number, s: number, l: number): Vec3 {\n const a = s * Math.min(l, 1 - l);\n\n const f = (n: number): number => {\n const k = (n + h / 30) % 12;\n return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));\n };\n\n return [f(0) * 255, f(8) * 255, f(4) * 255];\n}\n\n/**\n * RGB (0-255) to HSL.\n * @returns [h (0-360), s (0-1), l (0-1)]\n */\nexport function rgbToHsl(r: number, g: number, b: number): Vec3 {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n\n if (max === min) {\n return [0, 0, l];\n }\n\n const d = max - min;\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n let h: number;\n if (max === r) {\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n } else if (max === g) {\n h = ((b - r) / d + 2) / 6;\n } else {\n h = ((r - g) / d + 4) / 6;\n }\n\n return [h * 360, s, l];\n}\n\n/**\n * RGB (0-255) to OKLCH via sRGB -> linear sRGB -> OKLab -> OKLCH.\n * @returns [L, C, H] where H is in degrees (0-360)\n */\nexport function rgbToOklch(r: number, g: number, b: number): Vec3 {\n const lr = srgbToLinear(r / 255);\n const lg = srgbToLinear(g / 255);\n const lb = srgbToLinear(b / 255);\n\n const linear: Vec3 = [lr, lg, lb];\n const lab = linearSrgbToOklab(linear);\n\n const [L, a, bLab] = lab;\n const C = Math.sqrt(a * a + bLab * bLab);\n let H = (Math.atan2(bLab, a) * 180) / Math.PI;\n if (H < 0) H += 360;\n\n return [L, C, H];\n}\n\n/**\n * OKHSL to sRGB (0-1 range).\n * @param h - Hue in degrees (0-360)\n * @param s - Saturation (0-1)\n * @param l - Lightness (0-1)\n * @returns sRGB values in 0-1 range, clamped to gamut\n */\nexport function okhslToSrgb(h: number, s: number, l: number): Vec3 {\n const oklab = okhslToOklab([h, s, l]);\n const linearRGB = oklabToLinearSrgb(oklab);\n\n return [\n clamp(srgbLinearToGamma(linearRGB[0]), 0, 1),\n clamp(srgbLinearToGamma(linearRGB[1]), 0, 1),\n clamp(srgbLinearToGamma(linearRGB[2]), 0, 1),\n ];\n}\n\n/**\n * OKLCH to sRGB (0-255 range).\n * @param L - Lightness (0-1)\n * @param C - Chroma (typically 0-0.4)\n * @param H - Hue in degrees (0-360)\n * @returns RGB values in 0-255 range, clamped to gamut\n */\nexport function oklchToRgbValues(L: number, C: number, H: number): Vec3 {\n const hRad = (H * Math.PI) / 180;\n const a = C * Math.cos(hRad);\n const b = C * Math.sin(hRad);\n const linear = oklabToLinearSrgb([L, a, b]);\n\n return [\n clamp(srgbLinearToGamma(linear[0]), 0, 1) * 255,\n clamp(srgbLinearToGamma(linear[1]), 0, 1) * 255,\n clamp(srgbLinearToGamma(linear[2]), 0, 1) * 255,\n ];\n}\n\n/**\n * sRGB (0-1 range) to OKHSL.\n * @returns [H (0-360), S (0-1), L (0-1)]\n */\nexport function srgbToOkhsl(rgb: Vec3): Vec3 {\n const linear: Vec3 = [\n srgbToLinear(rgb[0]),\n srgbToLinear(rgb[1]),\n srgbToLinear(rgb[2]),\n ];\n const oklab = linearSrgbToOklab(linear);\n return oklabToOkhsl(oklab);\n}\n\n// ============================================================================\n// Named CSS Colors\n// ============================================================================\n\nlet _namedColorHex: Map<string, string> | null = null;\n\nexport function getNamedColorHex(): Map<string, string> {\n if (_namedColorHex) return _namedColorHex;\n _namedColorHex = new Map([\n ['aliceblue', '#f0f8ff'],\n ['antiquewhite', '#faebd7'],\n ['aqua', '#00ffff'],\n ['aquamarine', '#7fffd4'],\n ['azure', '#f0ffff'],\n ['beige', '#f5f5dc'],\n ['bisque', '#ffe4c4'],\n ['black', '#000000'],\n ['blanchedalmond', '#ffebcd'],\n ['blue', '#0000ff'],\n ['blueviolet', '#8a2be2'],\n ['brown', '#a52a2a'],\n ['burlywood', '#deb887'],\n ['cadetblue', '#5f9ea0'],\n ['chartreuse', '#7fff00'],\n ['chocolate', '#d2691e'],\n ['coral', '#ff7f50'],\n ['cornflowerblue', '#6495ed'],\n ['cornsilk', '#fff8dc'],\n ['crimson', '#dc143c'],\n ['cyan', '#00ffff'],\n ['darkblue', '#00008b'],\n ['darkcyan', '#008b8b'],\n ['darkgoldenrod', '#b8860b'],\n ['darkgray', '#a9a9a9'],\n ['darkgreen', '#006400'],\n ['darkgrey', '#a9a9a9'],\n ['darkkhaki', '#bdb76b'],\n ['darkmagenta', '#8b008b'],\n ['darkolivegreen', '#556b2f'],\n ['darkorange', '#ff8c00'],\n ['darkorchid', '#9932cc'],\n ['darkred', '#8b0000'],\n ['darksalmon', '#e9967a'],\n ['darkseagreen', '#8fbc8f'],\n ['darkslateblue', '#483d8b'],\n ['darkslategray', '#2f4f4f'],\n ['darkslategrey', '#2f4f4f'],\n ['darkturquoise', '#00ced1'],\n ['darkviolet', '#9400d3'],\n ['deeppink', '#ff1493'],\n ['deepskyblue', '#00bfff'],\n ['dimgray', '#696969'],\n ['dimgrey', '#696969'],\n ['dodgerblue', '#1e90ff'],\n ['firebrick', '#b22222'],\n ['floralwhite', '#fffaf0'],\n ['forestgreen', '#228b22'],\n ['fuchsia', '#ff00ff'],\n ['gainsboro', '#dcdcdc'],\n ['ghostwhite', '#f8f8ff'],\n ['gold', '#ffd700'],\n ['goldenrod', '#daa520'],\n ['gray', '#808080'],\n ['green', '#008000'],\n ['greenyellow', '#adff2f'],\n ['grey', '#808080'],\n ['honeydew', '#f0fff0'],\n ['hotpink', '#ff69b4'],\n ['indianred', '#cd5c5c'],\n ['indigo', '#4b0082'],\n ['ivory', '#fffff0'],\n ['khaki', '#f0e68c'],\n ['lavender', '#e6e6fa'],\n ['lavenderblush', '#fff0f5'],\n ['lawngreen', '#7cfc00'],\n ['lemonchiffon', '#fffacd'],\n ['lightblue', '#add8e6'],\n ['lightcoral', '#f08080'],\n ['lightcyan', '#e0ffff'],\n ['lightgoldenrodyellow', '#fafad2'],\n ['lightgray', '#d3d3d3'],\n ['lightgreen', '#90ee90'],\n ['lightgrey', '#d3d3d3'],\n ['lightpink', '#ffb6c1'],\n ['lightsalmon', '#ffa07a'],\n ['lightseagreen', '#20b2aa'],\n ['lightskyblue', '#87cefa'],\n ['lightslategray', '#778899'],\n ['lightslategrey', '#778899'],\n ['lightsteelblue', '#b0c4de'],\n ['lightyellow', '#ffffe0'],\n ['lime', '#00ff00'],\n ['limegreen', '#32cd32'],\n ['linen', '#faf0e6'],\n ['magenta', '#ff00ff'],\n ['maroon', '#800000'],\n ['mediumaquamarine', '#66cdaa'],\n ['mediumblue', '#0000cd'],\n ['mediumorchid', '#ba55d3'],\n ['mediumpurple', '#9370db'],\n ['mediumseagreen', '#3cb371'],\n ['mediumslateblue', '#7b68ee'],\n ['mediumspringgreen', '#00fa9a'],\n ['mediumturquoise', '#48d1cc'],\n ['mediumvioletred', '#c71585'],\n ['midnightblue', '#191970'],\n ['mintcream', '#f5fffa'],\n ['mistyrose', '#ffe4e1'],\n ['moccasin', '#ffe4b5'],\n ['navajowhite', '#ffdead'],\n ['navy', '#000080'],\n ['oldlace', '#fdf5e6'],\n ['olive', '#808000'],\n ['olivedrab', '#6b8e23'],\n ['orange', '#ffa500'],\n ['orangered', '#ff4500'],\n ['orchid', '#da70d6'],\n ['palegoldenrod', '#eee8aa'],\n ['palegreen', '#98fb98'],\n ['paleturquoise', '#afeeee'],\n ['palevioletred', '#db7093'],\n ['papayawhip', '#ffefd5'],\n ['peachpuff', '#ffdab9'],\n ['peru', '#cd853f'],\n ['pink', '#ffc0cb'],\n ['plum', '#dda0dd'],\n ['powderblue', '#b0e0e6'],\n ['purple', '#800080'],\n ['rebeccapurple', '#663399'],\n ['red', '#ff0000'],\n ['rosybrown', '#bc8f8f'],\n ['royalblue', '#4169e1'],\n ['saddlebrown', '#8b4513'],\n ['salmon', '#fa8072'],\n ['sandybrown', '#f4a460'],\n ['seagreen', '#2e8b57'],\n ['seashell', '#fff5ee'],\n ['sienna', '#a0522d'],\n ['silver', '#c0c0c0'],\n ['skyblue', '#87ceeb'],\n ['slateblue', '#6a5acd'],\n ['slategray', '#708090'],\n ['slategrey', '#708090'],\n ['snow', '#fffafa'],\n ['springgreen', '#00ff7f'],\n ['steelblue', '#4682b4'],\n ['tan', '#d2b48c'],\n ['teal', '#008080'],\n ['thistle', '#d8bfd8'],\n ['tomato', '#ff6347'],\n ['turquoise', '#40e0d0'],\n ['violet', '#ee82ee'],\n ['wheat', '#f5deb3'],\n ['white', '#ffffff'],\n ['whitesmoke', '#f5f5f5'],\n ['yellow', '#ffff00'],\n ['yellowgreen', '#9acd32'],\n ]);\n return _namedColorHex;\n}\n\n// ============================================================================\n// String Converters\n// ============================================================================\n\nconst hexCharToNum = (c: number): number => {\n if (c >= 48 && c <= 57) return c - 48; // 0-9\n if (c >= 65 && c <= 70) return c - 55; // A-F\n if (c >= 97 && c <= 102) return c - 87; // a-f\n return -1;\n};\n\n/**\n * Parse a hex color string directly to RGB 0-255 values.\n * Supports 3, 4, 6, and 8 character hex values (with or without `#`).\n * Returns null for invalid input.\n */\nexport function hexToRgbValues(hex: string): Vec3 | null {\n let start = 0;\n if (hex.charCodeAt(0) === 35) start = 1; // '#'\n const len = hex.length - start;\n\n if (len === 3 || len === 4) {\n const r = hexCharToNum(hex.charCodeAt(start));\n const g = hexCharToNum(hex.charCodeAt(start + 1));\n const b = hexCharToNum(hex.charCodeAt(start + 2));\n if (r < 0 || g < 0 || b < 0) return null;\n return [r * 17, g * 17, b * 17];\n }\n\n if (len === 6 || len === 8) {\n const r1 = hexCharToNum(hex.charCodeAt(start));\n const r2 = hexCharToNum(hex.charCodeAt(start + 1));\n const g1 = hexCharToNum(hex.charCodeAt(start + 2));\n const g2 = hexCharToNum(hex.charCodeAt(start + 3));\n const b1 = hexCharToNum(hex.charCodeAt(start + 4));\n const b2 = hexCharToNum(hex.charCodeAt(start + 5));\n if (r1 < 0 || r2 < 0 || g1 < 0 || g2 < 0 || b1 < 0 || b2 < 0) return null;\n return [r1 * 16 + r2, g1 * 16 + g2, b1 * 16 + b2];\n }\n\n return null;\n}\n\n/**\n * Parse a hex color string to RGBA values (RGB 0-255, alpha 0-1).\n * Supports 3, 4, 6, and 8 character hex values (with or without `#`).\n * For 3/6-char hex (no alpha channel), alpha defaults to 1.\n */\nexport function hexToRgbaValues(\n hex: string,\n): [number, number, number, number] | null {\n let start = 0;\n if (hex.charCodeAt(0) === 35) start = 1; // '#'\n const len = hex.length - start;\n\n if (len === 3) {\n const r = hexCharToNum(hex.charCodeAt(start));\n const g = hexCharToNum(hex.charCodeAt(start + 1));\n const b = hexCharToNum(hex.charCodeAt(start + 2));\n if (r < 0 || g < 0 || b < 0) return null;\n return [r * 17, g * 17, b * 17, 1];\n }\n\n if (len === 4) {\n const r = hexCharToNum(hex.charCodeAt(start));\n const g = hexCharToNum(hex.charCodeAt(start + 1));\n const b = hexCharToNum(hex.charCodeAt(start + 2));\n const a = hexCharToNum(hex.charCodeAt(start + 3));\n if (r < 0 || g < 0 || b < 0 || a < 0) return null;\n return [r * 17, g * 17, b * 17, (a * 17) / 255];\n }\n\n if (len === 6) {\n const r1 = hexCharToNum(hex.charCodeAt(start));\n const r2 = hexCharToNum(hex.charCodeAt(start + 1));\n const g1 = hexCharToNum(hex.charCodeAt(start + 2));\n const g2 = hexCharToNum(hex.charCodeAt(start + 3));\n const b1 = hexCharToNum(hex.charCodeAt(start + 4));\n const b2 = hexCharToNum(hex.charCodeAt(start + 5));\n if (r1 < 0 || r2 < 0 || g1 < 0 || g2 < 0 || b1 < 0 || b2 < 0) return null;\n return [r1 * 16 + r2, g1 * 16 + g2, b1 * 16 + b2, 1];\n }\n\n if (len === 8) {\n const r1 = hexCharToNum(hex.charCodeAt(start));\n const r2 = hexCharToNum(hex.charCodeAt(start + 1));\n const g1 = hexCharToNum(hex.charCodeAt(start + 2));\n const g2 = hexCharToNum(hex.charCodeAt(start + 3));\n const b1 = hexCharToNum(hex.charCodeAt(start + 4));\n const b2 = hexCharToNum(hex.charCodeAt(start + 5));\n const a1 = hexCharToNum(hex.charCodeAt(start + 6));\n const a2 = hexCharToNum(hex.charCodeAt(start + 7));\n if (\n r1 < 0 ||\n r2 < 0 ||\n g1 < 0 ||\n g2 < 0 ||\n b1 < 0 ||\n b2 < 0 ||\n a1 < 0 ||\n a2 < 0\n )\n return null;\n return [r1 * 16 + r2, g1 * 16 + g2, b1 * 16 + b2, (a1 * 16 + a2) / 255];\n }\n\n return null;\n}\n\n/**\n * Convert hex color string to `rgb()` CSS string.\n * Supports 3, 4, 6, and 8 character hex values (with or without `#`).\n */\nexport function hexToRgb(hex: string): string | null {\n const matched = hex\n .replace(\n /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,\n (_m: string, r: string, g: string, b: string) =>\n '#' + r + r + g + g + b + b,\n )\n .substring(1)\n .match(/.{2}/g);\n\n if (!matched) return null;\n\n const rgba = matched.map(\n (x: string, i: number) => parseInt(x, 16) * (i === 3 ? 1 / 255 : 1),\n );\n\n if (rgba.some((v) => Number.isNaN(v))) {\n return null;\n }\n\n if (rgba.length >= 3) {\n return `rgb(${rgba.slice(0, 3).join(' ')}${rgba.length > 3 ? ` / ${rgba[3]}` : ''})`;\n }\n\n return null;\n}\n\n/**\n * Extract RGB values from an `rgb()`/`rgba()` string.\n * Supports comma-separated, space-separated, fractional, percentage,\n * and slash alpha notation.\n *\n * @returns Array of RGB values (0-255 range), converting percentages as needed.\n */\nexport function getRgbValuesFromRgbaString(str: string): number[] {\n const match = str.match(/rgba?\\(([^)]+)\\)/i);\n if (!match) return [];\n\n const inner = match[1].trim();\n const [colorPart] = inner.split('/');\n const parts = colorPart\n .trim()\n .split(/[,\\s]+/)\n .filter(Boolean);\n\n return parts.slice(0, 3).map((part) => {\n part = part.trim();\n if (part.endsWith('%')) {\n return (parseFloat(part) / 100) * 255;\n }\n return parseFloat(part);\n });\n}\n\n/**\n * Convert any recognized color string to an `rgb()` CSS string.\n * Handles hex, `okhsl()`, `hsl()`/`hsla()`, named CSS colors,\n * and `rgb()`/`rgba()` pass-through.\n */\nexport function strToRgb(\n color: string,\n _ignoreAlpha = false,\n): string | null | undefined {\n if (!color) return undefined;\n\n if (color.startsWith('rgb')) return color;\n if (color.startsWith('#')) return hexToRgb(color);\n if (color.startsWith('oklch(')) return oklchStringToRgb(color);\n if (color.startsWith('okhsl(')) return okhslStringToRgb(color);\n if (color.startsWith('hsl')) return hslStringToRgb(color);\n\n const namedHex = getNamedColorHex().get(color.toLowerCase());\n if (namedHex) return hexToRgb(namedHex);\n\n return null;\n}\n\n/**\n * Convert an HSL/HSLA color string to an `rgb()`/`rgba()` CSS string.\n * Supports modern space-separated and legacy comma-separated syntax,\n * deg/turn/rad hue units, and slash alpha notation.\n */\nexport function hslStringToRgb(hslStr: string): string | null {\n const match = hslStr.match(/hsla?\\(([^)]+)\\)/i);\n if (!match) return null;\n\n const inner = match[1].trim();\n const [colorPart, slashAlpha] = inner.split('/');\n const parts = colorPart\n .trim()\n .split(/[,\\s]+/)\n .filter(Boolean);\n\n if (parts.length < 3) return null;\n\n const alphaPart = slashAlpha?.trim() || (parts.length >= 4 ? parts[3] : null);\n\n let h = parseFloat(parts[0]);\n const hueStr = parts[0].toLowerCase();\n if (hueStr.endsWith('turn')) h = parseFloat(hueStr) * 360;\n else if (hueStr.endsWith('rad')) h = (parseFloat(hueStr) * 180) / Math.PI;\n h = ((h % 360) + 360) % 360;\n\n const parsePercent = (val: string): number => {\n const num = parseFloat(val);\n return val.includes('%') ? num / 100 : num;\n };\n const s = Math.max(0, Math.min(1, parsePercent(parts[1])));\n const l = Math.max(0, Math.min(1, parsePercent(parts[2])));\n\n const [r, g, b] = hslToRgbValues(h, s, l);\n\n if (alphaPart) {\n const alpha = parseFloat(alphaPart.trim());\n return `rgba(${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)}, ${alpha})`;\n }\n\n return `rgb(${Math.round(r)} ${Math.round(g)} ${Math.round(b)})`;\n}\n\n/**\n * Convert an `okhsl()` color string to an `rgb()`/`rgba()` CSS string.\n * Supports deg/turn/rad hue units and percentage saturation/lightness.\n */\nexport function okhslStringToRgb(okhslStr: string): string | null {\n const match = okhslStr.match(/okhsl\\(([^)]+)\\)/i);\n if (!match) return null;\n\n const inner = match[1].trim();\n const [colorPart, alphaPart] = inner.split('/');\n const parts = colorPart\n .trim()\n .split(/[,\\s]+/)\n .filter(Boolean);\n\n if (parts.length < 3) return null;\n\n let h = parseFloat(parts[0]);\n const hueStr = parts[0].toLowerCase();\n if (hueStr.endsWith('turn')) h = parseFloat(hueStr) * 360;\n else if (hueStr.endsWith('rad')) h = (parseFloat(hueStr) * 180) / Math.PI;\n else if (hueStr.endsWith('deg')) h = parseFloat(hueStr);\n\n const parsePercent = (val: string): number => {\n const num = parseFloat(val);\n return val.includes('%') ? num / 100 : num;\n };\n const s = Math.max(0, Math.min(1, parsePercent(parts[1])));\n const l = Math.max(0, Math.min(1, parsePercent(parts[2])));\n\n const [r, g, b] = okhslToSrgb(h, s, l);\n\n const r255 = Math.round(Math.max(0, Math.min(1, r)) * 255);\n const g255 = Math.round(Math.max(0, Math.min(1, g)) * 255);\n const b255 = Math.round(Math.max(0, Math.min(1, b)) * 255);\n\n if (alphaPart) {\n const alpha = parseFloat(alphaPart.trim());\n return `rgba(${r255}, ${g255}, ${b255}, ${alpha})`;\n }\n\n return `rgb(${r255} ${g255} ${b255})`;\n}\n\n/**\n * Convert an `oklch()` color string to an `rgb()`/`rgba()` CSS string.\n * Supports deg/turn/rad hue units and percentage lightness.\n */\nexport function oklchStringToRgb(oklchStr: string): string | null {\n const match = oklchStr.match(/oklch\\(([^)]+)\\)/i);\n if (!match) return null;\n\n const inner = match[1].trim();\n const [colorPart, alphaPart] = inner.split('/');\n const parts = colorPart\n .trim()\n .split(/[,\\s]+/)\n .filter(Boolean);\n\n if (parts.length < 3) return null;\n\n const parsePercent = (val: string): number => {\n const num = parseFloat(val);\n return val.includes('%') ? num / 100 : num;\n };\n const L = Math.max(0, Math.min(1, parsePercent(parts[0])));\n const C = Math.max(0, parseFloat(parts[1]));\n\n let H = parseFloat(parts[2]);\n const hueStr = parts[2].toLowerCase();\n if (hueStr.endsWith('turn')) H = parseFloat(hueStr) * 360;\n else if (hueStr.endsWith('rad')) H = (parseFloat(hueStr) * 180) / Math.PI;\n else if (hueStr.endsWith('deg')) H = parseFloat(hueStr);\n\n const [r, g, b] = oklchToRgbValues(L, C, H);\n\n if (alphaPart) {\n const alpha = parseFloat(alphaPart.trim());\n return `rgba(${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)}, ${alpha})`;\n }\n\n return `rgb(${Math.round(r)} ${Math.round(g)} ${Math.round(b)})`;\n}\n"],"mappings":";AAsBA,MAAM,iBAAyB;CAC7B;EAAC;EAAK;EAAoB;EAAmB;CAC7C;EAAC;EAAK;EAAqB;EAAoB;CAC/C;EAAC;EAAK;EAAqB;EAAoB;CAChD;AAED,MAAM,uBAA+B;CACnC;EAAC;EAAmB;EAAoB;EAAmB;CAC3D;EAAC;EAAqB;EAAoB;EAAoB;CAC9D;EAAC;EAAuB;EAAoB;EAAmB;CAChE;AAED,MAAM,oCAIF;CACF,CACE,CAAC,qBAAqB,mBAAoB,EAC1C;EAAC;EAAY;EAAY;EAAY;EAAY;EAAW,CAC7D;CACD,CACE,CAAC,oBAAoB,mBAAmB,EACxC;EAAC;EAAY;EAAa;EAAY;EAAW;EAAW,CAC7D;CACD,CACE,CAAC,oBAAqB,kBAAkB,EACxC;EAAC;EAAY;EAAa;EAAY;EAAa;EAAW,CAC/D;CACF;AAMD,MAAM,SAAS,GAAqB,MAClC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAMzB,SAAgB,aAAa,GAAmB;AAC9C,QAAO,KAAK,SAAU,IAAI,UAAU,IAAI,QAAS,UAAU;;AAG7D,MAAM,YAAY,IAAI;AAEtB,SAAgB,kBAAkB,KAAqB;CACrD,MAAM,OAAO,MAAM,IAAI,KAAK;CAC5B,MAAM,MAAM,KAAK,IAAI,IAAI;AACzB,QAAO,MAAM,WACT,QAAQ,QAAQ,OAAO,YAAY,QACnC,QAAQ;;AAOd,MAAM,MAAM,IAAI,KAAK;AACrB,MAAM,KAAK;AACX,MAAM,KAAK;AACX,MAAM,MAAM,IAAM,OAAO,IAAM;AAG/B,MAAM,SAAS,OAAe,KAAa,QACzC,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,EAAE,IAAI;AAErC,MAAM,kBAAkB,WAA4B,QAAQ,MAAO,OAAO;AAM1E,MAAM,UAAU,OAAuB,KAAK,IAAI,KAAK,MAAM,MAAM,IAAI;AAMrE,MAAM,qBAAqB,QAAoB;CAC7C,MAAM,IAAI,IAAI;CACd,MAAM,IAAI,IAAI;CACd,MAAM,IAAI,IAAI;CAGd,MAAM,KAAK,IAAI,oBAAqB,IAAI,oBAAqB;CAC7D,MAAM,KAAK,IAAI,oBAAqB,IAAI,oBAAqB;CAC7D,MAAM,KAAK,IAAI,oBAAqB,IAAI,qBAAqB;CAG7D,MAAM,IAAI,KAAK,KAAK;CACpB,MAAM,IAAI,KAAK,KAAK;CACpB,MAAM,IAAI,KAAK,KAAK;AAGpB,QAAO;EACL,oBAAoB,IAAI,oBAAoB,IAAI,oBAAqB;EACrE,sBAAsB,IAAI,qBAAqB,IAAI,oBAAqB;EACxE,uBAAwB,IAAI,mBAAoB,IAAI,qBAAqB;EAC1E;;AAGH,MAAM,qBAAqB,QAAoB;CAC7C,MAAM,IAAI,IAAI;CACd,MAAM,IAAI,IAAI;CACd,MAAM,IAAI,IAAI;CAGd,MAAM,IAAI,cAAe,IAAI,cAAe,IAAI,cAAe;CAC/D,MAAM,IAAI,cAAe,IAAI,cAAe,IAAI,cAAe;CAC/D,MAAM,IAAI,cAAe,IAAI,cAAe,IAAI,cAAe;CAG/D,MAAM,KAAK,KAAK,KAAK,EAAE;CACvB,MAAM,KAAK,KAAK,KAAK,EAAE;CACvB,MAAM,KAAK,KAAK,KAAK,EAAE;AAGvB,QAAO;EACL,cAAe,KAAK,aAAc,KAAK,cAAe;EACtD,eAAe,KAAK,cAAc,KAAK,cAAe;EACtD,cAAe,KAAK,cAAe,KAAK,aAAc;EACvD;;AAOH,MAAM,4BAA4B,GAAW,MAAsB;CACjE,MAAM,UAAU;CAChB,MAAM,WAAW;CACjB,MAAM,OAAyB,CAAC,GAAG,EAAE;CACrC,MAAM,OAAa;EAAC;EAAG;EAAG;EAAE;CAE5B,IAAI;CACJ,IAAI;AAEJ,KAAI,MAAM,QAAQ,GAAG,IAAI,KAAK,GAAG,GAAG;AAClC,cAAY,QAAQ,GAAG;AACvB,YAAU,SAAS;YACV,MAAM,QAAQ,GAAG,IAAI,KAAK,GAAG,GAAG;AACzC,cAAY,QAAQ,GAAG;AACvB,YAAU,SAAS;QACd;AACL,cAAY,QAAQ,GAAG;AACvB,YAAU,SAAS;;CAGrB,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,MAAM;CAC7B,MAAM,CAAC,IAAI,IAAI,MAAM;CAErB,IAAI,MAAM,KAAK,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,KAAK,IAAI;CAEzD,MAAM,SAAS,KAAW,QACxB,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI;CAEjC,MAAM,KAAK,MAAM,eAAe,IAAI,KAAK;CACzC,MAAM,KAAK,MAAM,eAAe,IAAI,KAAK;CACzC,MAAM,KAAK,MAAM,eAAe,IAAI,KAAK;CAEzC,MAAM,KAAK,IAAM,MAAM;CACvB,MAAM,KAAK,IAAM,MAAM;CACvB,MAAM,KAAK,IAAM,MAAM;CAEvB,MAAM,IAAI,MAAM;CAChB,MAAM,IAAI,MAAM;CAChB,MAAM,IAAI,MAAM;CAEhB,MAAM,MAAM,IAAM,MAAM,KAAK;CAC7B,MAAM,MAAM,IAAM,MAAM,KAAK;CAC7B,MAAM,MAAM,IAAM,MAAM,KAAK;CAE7B,MAAM,OAAO,KAAO,KAAK,MAAM;CAC/B,MAAM,OAAO,KAAO,KAAK,MAAM;CAC/B,MAAM,OAAO,KAAO,KAAK,MAAM;CAE/B,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;CACjC,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK;CACtC,MAAM,KAAK,KAAK,OAAO,KAAK,OAAO,KAAK;AAExC,OAAM,MAAO,IAAI,MAAO,KAAK,KAAK,KAAM,IAAI;AAE5C,QAAO;;AAGT,MAAM,iBAAiB,GAAW,MAAgC;CAChE,MAAM,SAAS,yBAAyB,GAAG,EAAE;CAE7C,MAAM,aAAa,kBADD;EAAC;EAAG,SAAS;EAAG,SAAS;EAAE,CACJ;CACzC,MAAM,SAAS,KAAK,KAClB,IACE,KAAK,IACH,KAAK,IAAI,WAAW,IAAI,WAAW,GAAG,EACtC,KAAK,IAAI,WAAW,IAAI,EAAI,CAC7B,CACJ;AACD,QAAO,CAAC,QAAQ,SAAS,OAAO;;AAGlC,MAAM,8BACJ,GACA,GACA,IACA,IACA,IACA,SACW;CACX,MAAM,WAAW;CACjB,MAAM,OAAa;EAAC;EAAG;EAAG;EAAE;CAC5B,MAAM,WAAW,OAAO;CAExB,IAAI;CAEJ,MAAM,SAAS,KAAW,QACxB,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI;CACjC,MAAM,UAAU,KAAW,GAAW,GAAW,MAC/C,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK;AAErC,MAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,MAAM,GAAK;EACpD,MAAM,QAAQ,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK;AAC7C,MAAI,UAAU,IAAI,IAAK,KAAK,KAAK,KAAM;QAClC;EACL,MAAM,QAAQ,MAAM,KAAK,KAAK,KAAO,KAAK,MAAM,KAAK;AACrD,MAAI,UAAU,IAAI,IAAK,KAAK,MAAM,KAAK,KAAQ;EAE/C,MAAM,KAAK,KAAK;EAChB,MAAM,KAAK;EAEX,MAAM,KAAK,MAAM,eAAe,IAAI,KAAK;EACzC,MAAM,KAAK,MAAM,eAAe,IAAI,KAAK;EACzC,MAAM,KAAK,MAAM,eAAe,IAAI,KAAK;EAEzC,MAAM,OAAO,KAAK,KAAK;EACvB,MAAM,OAAO,KAAK,KAAK;EACvB,MAAM,OAAO,KAAK,KAAK;EAEvB,MAAM,IAAI,MAAM,IAAM,KAAK,IAAI;EAC/B,MAAM,IAAI,IAAI;EAEd,MAAM,KAAK,IAAI,IAAI;EACnB,MAAM,KAAK,IAAI,IAAI;EACnB,MAAM,KAAK,IAAI,IAAI;EAEnB,MAAM,IAAI,MAAM;EAChB,MAAM,IAAI,MAAM;EAChB,MAAM,IAAI,MAAM;EAEhB,MAAM,MAAM,IAAI,OAAO,KAAK;EAC5B,MAAM,MAAM,IAAI,OAAO,KAAK;EAC5B,MAAM,MAAM,IAAI,OAAO,KAAK;EAE5B,MAAM,OAAO,IAAI,OAAO,OAAO;EAC/B,MAAM,OAAO,IAAI,OAAO,OAAO;EAC/B,MAAM,OAAO,IAAI,OAAO,OAAO;EAE/B,MAAM,KAAK,OAAO,SAAS,IAAI,GAAG,GAAG,EAAE,GAAG;EAC1C,MAAM,KAAK,OAAO,SAAS,IAAI,KAAK,KAAK,IAAI;EAC7C,MAAM,KAAK,OAAO,SAAS,IAAI,MAAM,MAAM,KAAK;EAEhD,MAAM,KAAK,MAAM,KAAK,KAAK,KAAM,KAAK;EACtC,IAAI,KAAK,CAAC,KAAK;EAEf,MAAM,KAAK,OAAO,SAAS,IAAI,GAAG,GAAG,EAAE,GAAG;EAC1C,MAAM,KAAK,OAAO,SAAS,IAAI,KAAK,KAAK,IAAI;EAC7C,MAAM,KAAK,OAAO,SAAS,IAAI,MAAM,MAAM,KAAK;EAEhD,MAAM,KAAK,MAAM,KAAK,KAAK,KAAM,KAAK;EACtC,IAAI,KAAK,CAAC,KAAK;EAEf,MAAM,KAAK,OAAO,SAAS,IAAI,GAAG,GAAG,EAAE,GAAG;EAC1C,MAAM,KAAK,OAAO,SAAS,IAAI,KAAK,KAAK,IAAI;EAC7C,MAAM,KAAK,OAAO,SAAS,IAAI,MAAM,MAAM,KAAK;EAEhD,MAAM,KAAK,MAAM,KAAK,KAAK,KAAM,KAAK;EACtC,IAAI,KAAK,CAAC,KAAK;AAEf,OAAK,MAAM,IAAM,KAAK;AACtB,OAAK,MAAM,IAAM,KAAK;AACtB,OAAK,MAAM,IAAM,KAAK;AAEtB,OAAK,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC;;AAGrC,QAAO;;AAGT,MAAM,aAAa,SAA6C,CAC9D,KAAK,KAAK,KAAK,IACf,KAAK,MAAM,IAAI,KAAK,IACrB;AAED,MAAM,gBAAgB,GAAW,MAAgC,CAC/D,YACE,KACG,YACC,YAAY,IACZ,KACG,cACC,aAAa,IACb,KACG,cACC,cAAc,IACd,KAAK,cAAc,aAAa,IAAI,aAAa,OAC/D,YACE,KACG,YACC,YAAa,IACb,KACG,YACC,YAAa,IACb,KACG,aACC,WAAY,IACZ,KAAK,YAAa,YAAa,IAAI,YAAa,MAC/D;AAED,MAAM,SACJ,GACA,GACA,GACA,SAC6B;CAC7B,MAAM,OAAO,2BAA2B,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK;CAC5D,MAAM,QAAQ,UAAU,KAAK;CAC7B,MAAM,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,KAAK,MAAM,GAAG;CAC3D,MAAM,QAAQ,aAAa,GAAG,EAAE;CAChC,IAAI,KAAK,IAAI,MAAM;CACnB,IAAI,MAAM,IAAM,KAAK,MAAM;CAC3B,MAAM,OACJ,KAAM,IAAI,KAAK,KAAK,KAAK,KAAK,KAAO,IAAM,MAAM,IAAI,IAAM,MAAM,GAAG,CAAC;AACvE,MAAK,IAAI;AACT,OAAM,IAAM,KAAK;AAEjB,QAAO;EADI,KAAK,KAAK,KAAO,IAAM,MAAM,IAAI,IAAM,MAAM,GAAG;EAC/C;EAAM;EAAK;;AAGzB,MAAM,gBAAgB,QAAoB;CACxC,IAAI,IAAI,IAAI;CACZ,MAAM,IAAI,IAAI;CACd,MAAM,IAAI,IAAI;CAEd,MAAM,IAAI,OAAO,EAAE;CACnB,IAAI,IAAI;CACR,IAAI,IAAI;AAER,KAAI,eAAe,EAAE,GAAG;AAExB,KAAI,MAAM,KAAO,MAAM,KAAO,MAAM,GAAG;EACrC,MAAM,KAAK,KAAK,IAAI,MAAM,EAAE;EAC5B,MAAM,KAAK,KAAK,IAAI,MAAM,EAAE;EAI5B,MAAM,CAAC,IAAI,MAAM,QADN,MAAM,GAAG,IAAI,IADX,cAAc,IAAI,GAAG,CACD;EAGjC,MAAM,MAAM;EACZ,MAAM,SAAS;EACf,IAAI,GAAW,IAAY,IAAY;AAEvC,MAAI,IAAI,KAAK;AACX,OAAI,SAAS;AACb,QAAK;AACL,QAAK,MAAM;AACX,QAAK,IAAM,KAAK;SACX;AACL,OAAI,KAAK,IAAI;AACb,QAAK;AACL,QAAM,KAAM,QAAQ,IAAI,QAAQ,IAAK;AACrC,QAAK,IAAM,MAAM,OAAO;;EAG1B,MAAM,IAAI,KAAM,IAAI,MAAO,IAAM,KAAK;AACtC,MAAI,IAAI;AACR,MAAI,IAAI;;AAGV,QAAO;EAAC;EAAG;EAAG;EAAE;;;;;;;;;;;AA6DlB,SAAgB,eAAe,GAAW,GAAW,GAAiB;CACpE,MAAM,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,EAAE;CAEhC,MAAM,KAAK,MAAsB;EAC/B,MAAM,KAAK,IAAI,IAAI,MAAM;AACzB,SAAO,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;;AAGxD,QAAO;EAAC,EAAE,EAAE,GAAG;EAAK,EAAE,EAAE,GAAG;EAAK,EAAE,EAAE,GAAG;EAAI;;;;;;AAO7C,SAAgB,SAAS,GAAW,GAAW,GAAiB;AAC9D,MAAK;AACL,MAAK;AACL,MAAK;CAEL,MAAM,MAAM,KAAK,IAAI,GAAG,GAAG,EAAE;CAC7B,MAAM,MAAM,KAAK,IAAI,GAAG,GAAG,EAAE;CAC7B,MAAM,KAAK,MAAM,OAAO;AAExB,KAAI,QAAQ,IACV,QAAO;EAAC;EAAG;EAAG;EAAE;CAGlB,MAAM,IAAI,MAAM;CAChB,MAAM,IAAI,IAAI,KAAM,KAAK,IAAI,MAAM,OAAO,KAAK,MAAM;CAErD,IAAI;AACJ,KAAI,QAAQ,EACV,OAAM,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,MAAM;UAC7B,QAAQ,EACjB,OAAM,IAAI,KAAK,IAAI,KAAK;KAExB,OAAM,IAAI,KAAK,IAAI,KAAK;AAG1B,QAAO;EAAC,IAAI;EAAK;EAAG;EAAE;;;;;;AAOxB,SAAgB,WAAW,GAAW,GAAW,GAAiB;CAQhE,MAAM,CAAC,GAAG,GAAG,QAFD,kBADS;EAJV,aAAa,IAAI,IAAI;EACrB,aAAa,IAAI,IAAI;EACrB,aAAa,IAAI,IAAI;EAEC,CACI;CAGrC,MAAM,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK;CACxC,IAAI,IAAK,KAAK,MAAM,MAAM,EAAE,GAAG,MAAO,KAAK;AAC3C,KAAI,IAAI,EAAG,MAAK;AAEhB,QAAO;EAAC;EAAG;EAAG;EAAE;;;;;;;;;AAUlB,SAAgB,YAAY,GAAW,GAAW,GAAiB;CAEjE,MAAM,YAAY,kBADJ,aAAa;EAAC;EAAG;EAAG;EAAE,CAAC,CACK;AAE1C,QAAO;EACL,MAAM,kBAAkB,UAAU,GAAG,EAAE,GAAG,EAAE;EAC5C,MAAM,kBAAkB,UAAU,GAAG,EAAE,GAAG,EAAE;EAC5C,MAAM,kBAAkB,UAAU,GAAG,EAAE,GAAG,EAAE;EAC7C;;;;;;;;;AAUH,SAAgB,iBAAiB,GAAW,GAAW,GAAiB;CACtE,MAAM,OAAQ,IAAI,KAAK,KAAM;CAG7B,MAAM,SAAS,kBAAkB;EAAC;EAFxB,IAAI,KAAK,IAAI,KAAK;EAClB,IAAI,KAAK,IAAI,KAAK;EACc,CAAC;AAE3C,QAAO;EACL,MAAM,kBAAkB,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG;EAC5C,MAAM,kBAAkB,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG;EAC5C,MAAM,kBAAkB,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG;EAC7C;;AAqBH,IAAI,iBAA6C;AAEjD,SAAgB,mBAAwC;AACtD,KAAI,eAAgB,QAAO;AAC3B,kBAAiB,IAAI,IAAI;EACvB,CAAC,aAAa,UAAU;EACxB,CAAC,gBAAgB,UAAU;EAC3B,CAAC,QAAQ,UAAU;EACnB,CAAC,cAAc,UAAU;EACzB,CAAC,SAAS,UAAU;EACpB,CAAC,SAAS,UAAU;EACpB,CAAC,UAAU,UAAU;EACrB,CAAC,SAAS,UAAU;EACpB,CAAC,kBAAkB,UAAU;EAC7B,CAAC,QAAQ,UAAU;EACnB,CAAC,cAAc,UAAU;EACzB,CAAC,SAAS,UAAU;EACpB,CAAC,aAAa,UAAU;EACxB,CAAC,aAAa,UAAU;EACxB,CAAC,cAAc,UAAU;EACzB,CAAC,aAAa,UAAU;EACxB,CAAC,SAAS,UAAU;EACpB,CAAC,kBAAkB,UAAU;EAC7B,CAAC,YAAY,UAAU;EACvB,CAAC,WAAW,UAAU;EACtB,CAAC,QAAQ,UAAU;EACnB,CAAC,YAAY,UAAU;EACvB,CAAC,YAAY,UAAU;EACvB,CAAC,iBAAiB,UAAU;EAC5B,CAAC,YAAY,UAAU;EACvB,CAAC,aAAa,UAAU;EACxB,CAAC,YAAY,UAAU;EACvB,CAAC,aAAa,UAAU;EACxB,CAAC,eAAe,UAAU;EAC1B,CAAC,kBAAkB,UAAU;EAC7B,CAAC,cAAc,UAAU;EACzB,CAAC,cAAc,UAAU;EACzB,CAAC,WAAW,UAAU;EACtB,CAAC,cAAc,UAAU;EACzB,CAAC,gBAAgB,UAAU;EAC3B,CAAC,iBAAiB,UAAU;EAC5B,CAAC,iBAAiB,UAAU;EAC5B,CAAC,iBAAiB,UAAU;EAC5B,CAAC,iBAAiB,UAAU;EAC5B,CAAC,cAAc,UAAU;EACzB,CAAC,YAAY,UAAU;EACvB,CAAC,eAAe,UAAU;EAC1B,CAAC,WAAW,UAAU;EACtB,CAAC,WAAW,UAAU;EACtB,CAAC,cAAc,UAAU;EACzB,CAAC,aAAa,UAAU;EACxB,CAAC,eAAe,UAAU;EAC1B,CAAC,eAAe,UAAU;EAC1B,CAAC,WAAW,UAAU;EACtB,CAAC,aAAa,UAAU;EACxB,CAAC,cAAc,UAAU;EACzB,CAAC,QAAQ,UAAU;EACnB,CAAC,aAAa,UAAU;EACxB,CAAC,QAAQ,UAAU;EACnB,CAAC,SAAS,UAAU;EACpB,CAAC,eAAe,UAAU;EAC1B,CAAC,QAAQ,UAAU;EACnB,CAAC,YAAY,UAAU;EACvB,CAAC,WAAW,UAAU;EACtB,CAAC,aAAa,UAAU;EACxB,CAAC,UAAU,UAAU;EACrB,CAAC,SAAS,UAAU;EACpB,CAAC,SAAS,UAAU;EACpB,CAAC,YAAY,UAAU;EACvB,CAAC,iBAAiB,UAAU;EAC5B,CAAC,aAAa,UAAU;EACxB,CAAC,gBAAgB,UAAU;EAC3B,CAAC,aAAa,UAAU;EACxB,CAAC,cAAc,UAAU;EACzB,CAAC,aAAa,UAAU;EACxB,CAAC,wBAAwB,UAAU;EACnC,CAAC,aAAa,UAAU;EACxB,CAAC,cAAc,UAAU;EACzB,CAAC,aAAa,UAAU;EACxB,CAAC,aAAa,UAAU;EACxB,CAAC,eAAe,UAAU;EAC1B,CAAC,iBAAiB,UAAU;EAC5B,CAAC,gBAAgB,UAAU;EAC3B,CAAC,kBAAkB,UAAU;EAC7B,CAAC,kBAAkB,UAAU;EAC7B,CAAC,kBAAkB,UAAU;EAC7B,CAAC,eAAe,UAAU;EAC1B,CAAC,QAAQ,UAAU;EACnB,CAAC,aAAa,UAAU;EACxB,CAAC,SAAS,UAAU;EACpB,CAAC,WAAW,UAAU;EACtB,CAAC,UAAU,UAAU;EACrB,CAAC,oBAAoB,UAAU;EAC/B,CAAC,cAAc,UAAU;EACzB,CAAC,gBAAgB,UAAU;EAC3B,CAAC,gBAAgB,UAAU;EAC3B,CAAC,kBAAkB,UAAU;EAC7B,CAAC,mBAAmB,UAAU;EAC9B,CAAC,qBAAqB,UAAU;EAChC,CAAC,mBAAmB,UAAU;EAC9B,CAAC,mBAAmB,UAAU;EAC9B,CAAC,gBAAgB,UAAU;EAC3B,CAAC,aAAa,UAAU;EACxB,CAAC,aAAa,UAAU;EACxB,CAAC,YAAY,UAAU;EACvB,CAAC,eAAe,UAAU;EAC1B,CAAC,QAAQ,UAAU;EACnB,CAAC,WAAW,UAAU;EACtB,CAAC,SAAS,UAAU;EACpB,CAAC,aAAa,UAAU;EACxB,CAAC,UAAU,UAAU;EACrB,CAAC,aAAa,UAAU;EACxB,CAAC,UAAU,UAAU;EACrB,CAAC,iBAAiB,UAAU;EAC5B,CAAC,aAAa,UAAU;EACxB,CAAC,iBAAiB,UAAU;EAC5B,CAAC,iBAAiB,UAAU;EAC5B,CAAC,cAAc,UAAU;EACzB,CAAC,aAAa,UAAU;EACxB,CAAC,QAAQ,UAAU;EACnB,CAAC,QAAQ,UAAU;EACnB,CAAC,QAAQ,UAAU;EACnB,CAAC,cAAc,UAAU;EACzB,CAAC,UAAU,UAAU;EACrB,CAAC,iBAAiB,UAAU;EAC5B,CAAC,OAAO,UAAU;EAClB,CAAC,aAAa,UAAU;EACxB,CAAC,aAAa,UAAU;EACxB,CAAC,eAAe,UAAU;EAC1B,CAAC,UAAU,UAAU;EACrB,CAAC,cAAc,UAAU;EACzB,CAAC,YAAY,UAAU;EACvB,CAAC,YAAY,UAAU;EACvB,CAAC,UAAU,UAAU;EACrB,CAAC,UAAU,UAAU;EACrB,CAAC,WAAW,UAAU;EACtB,CAAC,aAAa,UAAU;EACxB,CAAC,aAAa,UAAU;EACxB,CAAC,aAAa,UAAU;EACxB,CAAC,QAAQ,UAAU;EACnB,CAAC,eAAe,UAAU;EAC1B,CAAC,aAAa,UAAU;EACxB,CAAC,OAAO,UAAU;EAClB,CAAC,QAAQ,UAAU;EACnB,CAAC,WAAW,UAAU;EACtB,CAAC,UAAU,UAAU;EACrB,CAAC,aAAa,UAAU;EACxB,CAAC,UAAU,UAAU;EACrB,CAAC,SAAS,UAAU;EACpB,CAAC,SAAS,UAAU;EACpB,CAAC,cAAc,UAAU;EACzB,CAAC,UAAU,UAAU;EACrB,CAAC,eAAe,UAAU;EAC3B,CAAC;AACF,QAAO;;AAOT,MAAM,gBAAgB,MAAsB;AAC1C,KAAI,KAAK,MAAM,KAAK,GAAI,QAAO,IAAI;AACnC,KAAI,KAAK,MAAM,KAAK,GAAI,QAAO,IAAI;AACnC,KAAI,KAAK,MAAM,KAAK,IAAK,QAAO,IAAI;AACpC,QAAO;;;;;;;AAwCT,SAAgB,gBACd,KACyC;CACzC,IAAI,QAAQ;AACZ,KAAI,IAAI,WAAW,EAAE,KAAK,GAAI,SAAQ;CACtC,MAAM,MAAM,IAAI,SAAS;AAEzB,KAAI,QAAQ,GAAG;EACb,MAAM,IAAI,aAAa,IAAI,WAAW,MAAM,CAAC;EAC7C,MAAM,IAAI,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EACjD,MAAM,IAAI,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;AACjD,MAAI,IAAI,KAAK,IAAI,KAAK,IAAI,EAAG,QAAO;AACpC,SAAO;GAAC,IAAI;GAAI,IAAI;GAAI,IAAI;GAAI;GAAE;;AAGpC,KAAI,QAAQ,GAAG;EACb,MAAM,IAAI,aAAa,IAAI,WAAW,MAAM,CAAC;EAC7C,MAAM,IAAI,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EACjD,MAAM,IAAI,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EACjD,MAAM,IAAI,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;AACjD,MAAI,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,EAAG,QAAO;AAC7C,SAAO;GAAC,IAAI;GAAI,IAAI;GAAI,IAAI;GAAK,IAAI,KAAM;GAAI;;AAGjD,KAAI,QAAQ,GAAG;EACb,MAAM,KAAK,aAAa,IAAI,WAAW,MAAM,CAAC;EAC9C,MAAM,KAAK,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EAClD,MAAM,KAAK,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EAClD,MAAM,KAAK,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EAClD,MAAM,KAAK,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EAClD,MAAM,KAAK,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;AAClD,MAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAG,QAAO;AACrE,SAAO;GAAC,KAAK,KAAK;GAAI,KAAK,KAAK;GAAI,KAAK,KAAK;GAAI;GAAE;;AAGtD,KAAI,QAAQ,GAAG;EACb,MAAM,KAAK,aAAa,IAAI,WAAW,MAAM,CAAC;EAC9C,MAAM,KAAK,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EAClD,MAAM,KAAK,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EAClD,MAAM,KAAK,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EAClD,MAAM,KAAK,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EAClD,MAAM,KAAK,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EAClD,MAAM,KAAK,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;EAClD,MAAM,KAAK,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC;AAClD,MACE,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,EAEL,QAAO;AACT,SAAO;GAAC,KAAK,KAAK;GAAI,KAAK,KAAK;GAAI,KAAK,KAAK;IAAK,KAAK,KAAK,MAAM;GAAI;;AAGzE,QAAO;;;;;;AAOT,SAAgB,SAAS,KAA4B;CACnD,MAAM,UAAU,IACb,QACC,qCACC,IAAY,GAAW,GAAW,MACjC,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,EAC7B,CACA,UAAU,EAAE,CACZ,MAAM,QAAQ;AAEjB,KAAI,CAAC,QAAS,QAAO;CAErB,MAAM,OAAO,QAAQ,KAClB,GAAW,MAAc,SAAS,GAAG,GAAG,IAAI,MAAM,IAAI,IAAI,MAAM,GAClE;AAED,KAAI,KAAK,MAAM,MAAM,OAAO,MAAM,EAAE,CAAC,CACnC,QAAO;AAGT,KAAI,KAAK,UAAU,EACjB,QAAO,OAAO,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,KAAK,OAAO,GAAG;AAGpF,QAAO;;;;;;;;;AAUT,SAAgB,2BAA2B,KAAuB;CAChE,MAAM,QAAQ,IAAI,MAAM,oBAAoB;AAC5C,KAAI,CAAC,MAAO,QAAO,EAAE;CAGrB,MAAM,CAAC,aADO,MAAM,GAAG,MAAM,CACH,MAAM,IAAI;AAMpC,QALc,UACX,MAAM,CACN,MAAM,SAAS,CACf,OAAO,QAAQ,CAEL,MAAM,GAAG,EAAE,CAAC,KAAK,SAAS;AACrC,SAAO,KAAK,MAAM;AAClB,MAAI,KAAK,SAAS,IAAI,CACpB,QAAQ,WAAW,KAAK,GAAG,MAAO;AAEpC,SAAO,WAAW,KAAK;GACvB;;;;;;;AAQJ,SAAgB,SACd,OACA,eAAe,OACY;AAC3B,KAAI,CAAC,MAAO,QAAO,KAAA;AAEnB,KAAI,MAAM,WAAW,MAAM,CAAE,QAAO;AACpC,KAAI,MAAM,WAAW,IAAI,CAAE,QAAO,SAAS,MAAM;AACjD,KAAI,MAAM,WAAW,SAAS,CAAE,QAAO,iBAAiB,MAAM;AAC9D,KAAI,MAAM,WAAW,SAAS,CAAE,QAAO,iBAAiB,MAAM;AAC9D,KAAI,MAAM,WAAW,MAAM,CAAE,QAAO,eAAe,MAAM;CAEzD,MAAM,WAAW,kBAAkB,CAAC,IAAI,MAAM,aAAa,CAAC;AAC5D,KAAI,SAAU,QAAO,SAAS,SAAS;AAEvC,QAAO;;;;;;;AAQT,SAAgB,eAAe,QAA+B;CAC5D,MAAM,QAAQ,OAAO,MAAM,oBAAoB;AAC/C,KAAI,CAAC,MAAO,QAAO;CAGnB,MAAM,CAAC,WAAW,cADJ,MAAM,GAAG,MAAM,CACS,MAAM,IAAI;CAChD,MAAM,QAAQ,UACX,MAAM,CACN,MAAM,SAAS,CACf,OAAO,QAAQ;AAElB,KAAI,MAAM,SAAS,EAAG,QAAO;CAE7B,MAAM,YAAY,YAAY,MAAM,KAAK,MAAM,UAAU,IAAI,MAAM,KAAK;CAExE,IAAI,IAAI,WAAW,MAAM,GAAG;CAC5B,MAAM,SAAS,MAAM,GAAG,aAAa;AACrC,KAAI,OAAO,SAAS,OAAO,CAAE,KAAI,WAAW,OAAO,GAAG;UAC7C,OAAO,SAAS,MAAM,CAAE,KAAK,WAAW,OAAO,GAAG,MAAO,KAAK;AACvE,MAAM,IAAI,MAAO,OAAO;CAExB,MAAM,gBAAgB,QAAwB;EAC5C,MAAM,MAAM,WAAW,IAAI;AAC3B,SAAO,IAAI,SAAS,IAAI,GAAG,MAAM,MAAM;;CAEzC,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,aAAa,MAAM,GAAG,CAAC,CAAC;CAC1D,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,aAAa,MAAM,GAAG,CAAC,CAAC;CAE1D,MAAM,CAAC,GAAG,GAAG,KAAK,eAAe,GAAG,GAAG,EAAE;AAEzC,KAAI,WAAW;EACb,MAAM,QAAQ,WAAW,UAAU,MAAM,CAAC;AAC1C,SAAO,QAAQ,KAAK,MAAM,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC,IAAI,MAAM;;AAG7E,QAAO,OAAO,KAAK,MAAM,EAAE,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;;;;;;AAOhE,SAAgB,iBAAiB,UAAiC;CAChE,MAAM,QAAQ,SAAS,MAAM,oBAAoB;AACjD,KAAI,CAAC,MAAO,QAAO;CAGnB,MAAM,CAAC,WAAW,aADJ,MAAM,GAAG,MAAM,CACQ,MAAM,IAAI;CAC/C,MAAM,QAAQ,UACX,MAAM,CACN,MAAM,SAAS,CACf,OAAO,QAAQ;AAElB,KAAI,MAAM,SAAS,EAAG,QAAO;CAE7B,IAAI,IAAI,WAAW,MAAM,GAAG;CAC5B,MAAM,SAAS,MAAM,GAAG,aAAa;AACrC,KAAI,OAAO,SAAS,OAAO,CAAE,KAAI,WAAW,OAAO,GAAG;UAC7C,OAAO,SAAS,MAAM,CAAE,KAAK,WAAW,OAAO,GAAG,MAAO,KAAK;UAC9D,OAAO,SAAS,MAAM,CAAE,KAAI,WAAW,OAAO;CAEvD,MAAM,gBAAgB,QAAwB;EAC5C,MAAM,MAAM,WAAW,IAAI;AAC3B,SAAO,IAAI,SAAS,IAAI,GAAG,MAAM,MAAM;;CAEzC,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,aAAa,MAAM,GAAG,CAAC,CAAC;CAC1D,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,aAAa,MAAM,GAAG,CAAC,CAAC;CAE1D,MAAM,CAAC,GAAG,GAAG,KAAK,YAAY,GAAG,GAAG,EAAE;CAEtC,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,GAAG,IAAI;CAC1D,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,GAAG,IAAI;CAC1D,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,GAAG,IAAI;AAE1D,KAAI,UAEF,QAAO,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,IADxB,WAAW,UAAU,MAAM,CAAC,CACM;AAGlD,QAAO,OAAO,KAAK,GAAG,KAAK,GAAG,KAAK;;;;;;AAOrC,SAAgB,iBAAiB,UAAiC;CAChE,MAAM,QAAQ,SAAS,MAAM,oBAAoB;AACjD,KAAI,CAAC,MAAO,QAAO;CAGnB,MAAM,CAAC,WAAW,aADJ,MAAM,GAAG,MAAM,CACQ,MAAM,IAAI;CAC/C,MAAM,QAAQ,UACX,MAAM,CACN,MAAM,SAAS,CACf,OAAO,QAAQ;AAElB,KAAI,MAAM,SAAS,EAAG,QAAO;CAE7B,MAAM,gBAAgB,QAAwB;EAC5C,MAAM,MAAM,WAAW,IAAI;AAC3B,SAAO,IAAI,SAAS,IAAI,GAAG,MAAM,MAAM;;CAEzC,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,aAAa,MAAM,GAAG,CAAC,CAAC;CAC1D,MAAM,IAAI,KAAK,IAAI,GAAG,WAAW,MAAM,GAAG,CAAC;CAE3C,IAAI,IAAI,WAAW,MAAM,GAAG;CAC5B,MAAM,SAAS,MAAM,GAAG,aAAa;AACrC,KAAI,OAAO,SAAS,OAAO,CAAE,KAAI,WAAW,OAAO,GAAG;UAC7C,OAAO,SAAS,MAAM,CAAE,KAAK,WAAW,OAAO,GAAG,MAAO,KAAK;UAC9D,OAAO,SAAS,MAAM,CAAE,KAAI,WAAW,OAAO;CAEvD,MAAM,CAAC,GAAG,GAAG,KAAK,iBAAiB,GAAG,GAAG,EAAE;AAE3C,KAAI,WAAW;EACb,MAAM,QAAQ,WAAW,UAAU,MAAM,CAAC;AAC1C,SAAO,QAAQ,KAAK,MAAM,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC,IAAI,MAAM;;AAG7E,QAAO,OAAO,KAAK,MAAM,EAAE,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC"}
@@ -1,5 +0,0 @@
1
- //#region src/utils/color-space.d.ts
2
- type ColorSpace = 'rgb' | 'hsl' | 'oklch';
3
- //#endregion
4
- export { ColorSpace };
5
- //# sourceMappingURL=color-space.d.ts.map
@@ -1,228 +0,0 @@
1
- import { Lru } from "../parser/lru.js";
2
- import { getRgbValuesFromRgbaString, hexToRgbaValues, hslToRgbValues, okhslToSrgb, oklchToRgbValues, rgbToHsl, rgbToOklch, strToRgb } from "./color-math.js";
3
- //#region src/utils/color-space.ts
4
- let currentColorSpace = "oklch";
5
- const colorSpaceCache = new Lru(500);
6
- const componentsCache = new Lru(500);
7
- function clearColorCaches() {
8
- colorSpaceCache.clear();
9
- componentsCache.clear();
10
- }
11
- function setColorSpace(space) {
12
- currentColorSpace = space;
13
- clearColorCaches();
14
- }
15
- function resetColorSpace() {
16
- currentColorSpace = "oklch";
17
- clearColorCaches();
18
- }
19
- function getColorSpaceSuffix() {
20
- return currentColorSpace;
21
- }
22
- function getColorSpaceFunc() {
23
- return currentColorSpace;
24
- }
25
- function formatNum(n, precision) {
26
- return parseFloat(n.toFixed(precision)).toString();
27
- }
28
- function formatRgbComponent(n) {
29
- return parseFloat(n.toFixed(1)).toString();
30
- }
31
- function formatAlpha(a) {
32
- if (a === 0) return "0";
33
- return parseFloat(a.toFixed(4)).toString();
34
- }
35
- function rgbValuesToColorString(r, g, b, space, alpha) {
36
- const alphaSuffix = alpha != null && alpha < 1 ? ` / ${formatAlpha(alpha)}` : "";
37
- switch (space) {
38
- case "rgb": return `rgb(${Math.round(r)} ${Math.round(g)} ${Math.round(b)}${alphaSuffix})`;
39
- case "hsl": {
40
- const [h, s, l] = rgbToHsl(r, g, b);
41
- return `hsl(${formatNum(h, 2)} ${formatNum(s * 100, 2)}% ${formatNum(l * 100, 2)}%${alphaSuffix})`;
42
- }
43
- case "oklch": {
44
- const [L, C, H] = rgbToOklch(r, g, b);
45
- return `oklch(${formatNum(L, 5)} ${formatNum(C, 5)} ${formatNum(H, 2)}${alphaSuffix})`;
46
- }
47
- }
48
- }
49
- function rgbValuesToComponents(r, g, b, space) {
50
- switch (space) {
51
- case "rgb": return `${formatRgbComponent(r)} ${formatRgbComponent(g)} ${formatRgbComponent(b)}`;
52
- case "hsl": {
53
- const [h, s, l] = rgbToHsl(r, g, b);
54
- return `${formatNum(h, 2)} ${formatNum(s * 100, 2)}% ${formatNum(l * 100, 2)}%`;
55
- }
56
- case "oklch": {
57
- const [L, C, H] = rgbToOklch(r, g, b);
58
- return `${formatNum(L, 5)} ${formatNum(C, 5)} ${formatNum(H, 2)}`;
59
- }
60
- }
61
- }
62
- const parseColorFuncArgs = (str, prefix) => {
63
- const start = str.indexOf("(", prefix.length - 1);
64
- const end = str.lastIndexOf(")");
65
- if (start < 0 || end < 0) return null;
66
- const inner = str.slice(start + 1, end).trim();
67
- const slashIdx = inner.indexOf("/");
68
- let colorPart;
69
- let alpha = 1;
70
- if (slashIdx >= 0) {
71
- colorPart = inner.slice(0, slashIdx);
72
- const alphaStr = inner.slice(slashIdx + 1).trim();
73
- if (alphaStr) {
74
- alpha = alphaStr.endsWith("%") ? parseFloat(alphaStr) / 100 : parseFloat(alphaStr);
75
- if (Number.isNaN(alpha)) alpha = 1;
76
- }
77
- } else colorPart = inner;
78
- const parts = colorPart.trim().split(/[,\s]+/).filter(Boolean);
79
- if (parts.length < 3) return null;
80
- if (parts.length >= 4 && slashIdx < 0) {
81
- const legacyAlpha = parseFloat(parts[3]);
82
- if (!Number.isNaN(legacyAlpha)) alpha = legacyAlpha;
83
- }
84
- return {
85
- parts,
86
- alpha
87
- };
88
- };
89
- const parseHue = (hueStr) => {
90
- let h = parseFloat(hueStr);
91
- const lower = hueStr.toLowerCase();
92
- if (lower.endsWith("turn")) h = parseFloat(lower) * 360;
93
- else if (lower.endsWith("rad")) h = parseFloat(lower) * 180 / Math.PI;
94
- return (h % 360 + 360) % 360;
95
- };
96
- const parsePercent = (val) => {
97
- const num = parseFloat(val);
98
- return val.includes("%") ? num / 100 : num;
99
- };
100
- const clamp01 = (n) => Math.max(0, Math.min(1, n));
101
- function resolveToRgbaValues(color) {
102
- const trimmed = color.trim().toLowerCase();
103
- if (trimmed.startsWith("rgb")) {
104
- const parsed = parseColorFuncArgs(trimmed, "rgb");
105
- if (!parsed || parsed.parts.length < 3) return null;
106
- return [
107
- parsed.parts[0].endsWith("%") ? parseFloat(parsed.parts[0]) / 100 * 255 : parseFloat(parsed.parts[0]),
108
- parsed.parts[1].endsWith("%") ? parseFloat(parsed.parts[1]) / 100 * 255 : parseFloat(parsed.parts[1]),
109
- parsed.parts[2].endsWith("%") ? parseFloat(parsed.parts[2]) / 100 * 255 : parseFloat(parsed.parts[2]),
110
- parsed.alpha
111
- ];
112
- }
113
- if (trimmed.startsWith("#")) return hexToRgbaValues(trimmed);
114
- if (trimmed.startsWith("hsl")) {
115
- const parsed = parseColorFuncArgs(trimmed, "hsl");
116
- if (!parsed) return null;
117
- const [r, g, b] = hslToRgbValues(parseHue(parsed.parts[0]), clamp01(parsePercent(parsed.parts[1])), clamp01(parsePercent(parsed.parts[2])));
118
- return [
119
- r,
120
- g,
121
- b,
122
- parsed.alpha
123
- ];
124
- }
125
- if (trimmed.startsWith("oklch(")) {
126
- const parsed = parseColorFuncArgs(trimmed, "oklch");
127
- if (!parsed) return null;
128
- const [r, g, b] = oklchToRgbValues(clamp01(parsePercent(parsed.parts[0])), Math.max(0, parseFloat(parsed.parts[1])), parseHue(parsed.parts[2]));
129
- return [
130
- r,
131
- g,
132
- b,
133
- parsed.alpha
134
- ];
135
- }
136
- if (trimmed.startsWith("okhsl(")) {
137
- const parsed = parseColorFuncArgs(trimmed, "okhsl");
138
- if (!parsed) return null;
139
- const [r, g, b] = okhslToSrgb(parseHue(parsed.parts[0]), clamp01(parsePercent(parsed.parts[1])), clamp01(parsePercent(parsed.parts[2])));
140
- return [
141
- clamp01(r) * 255,
142
- clamp01(g) * 255,
143
- clamp01(b) * 255,
144
- parsed.alpha
145
- ];
146
- }
147
- const fallback = strToRgb(trimmed);
148
- if (fallback) {
149
- if (fallback !== trimmed) return resolveToRgbaValues(fallback);
150
- const vals = getRgbValuesFromRgbaString(fallback);
151
- if (vals.length >= 3) return [
152
- vals[0],
153
- vals[1],
154
- vals[2],
155
- 1
156
- ];
157
- }
158
- return null;
159
- }
160
- /**
161
- * Convert any supported color string to the configured color space CSS format.
162
- * Preserves alpha channel when present in the input.
163
- * Returns null if the input cannot be parsed.
164
- */
165
- function strToColorSpace(color) {
166
- if (!color) return void 0;
167
- const cached = colorSpaceCache.get(color);
168
- if (cached !== void 0) return cached;
169
- const rgba = resolveToRgbaValues(color);
170
- if (!rgba) {
171
- colorSpaceCache.set(color, null);
172
- return null;
173
- }
174
- const result = rgbValuesToColorString(rgba[0], rgba[1], rgba[2], currentColorSpace, rgba[3]);
175
- colorSpaceCache.set(color, result);
176
- return result;
177
- }
178
- /**
179
- * Extract the decomposed components of a color in the configured color space.
180
- * Returns a space-separated string of components without the wrapping function.
181
- * Alpha is NOT included — components are used for alpha composition via `/ alpha`.
182
- */
183
- function getColorSpaceComponents(color) {
184
- const cached = componentsCache.get(color);
185
- if (cached !== void 0) return cached;
186
- const rgba = resolveToRgbaValues(color);
187
- if (!rgba) return color;
188
- const result = rgbValuesToComponents(rgba[0], rgba[1], rgba[2], currentColorSpace);
189
- componentsCache.set(color, result);
190
- return result;
191
- }
192
- /**
193
- * Convert a color initial value (from @property definitions) to components
194
- * in the configured color space.
195
- */
196
- function colorInitialValueToComponents(initialValue) {
197
- if (initialValue == null) return getDefaultComponents();
198
- const val = String(initialValue).trim().toLowerCase();
199
- if (val === "transparent" || val === "rgba(0,0,0,0)" || val === "") return getDefaultComponents();
200
- if (val === "white") return rgbValuesToComponents(255, 255, 255, currentColorSpace);
201
- if (val === "black") return rgbValuesToComponents(0, 0, 0, currentColorSpace);
202
- const rgbMatch = val.match(/^rgba?\(\s*(\d+)[,\s]+(\d+)[,\s]+(\d+)/);
203
- if (rgbMatch) return rgbValuesToComponents(parseInt(rgbMatch[1]), parseInt(rgbMatch[2]), parseInt(rgbMatch[3]), currentColorSpace);
204
- return getDefaultComponents();
205
- }
206
- function getDefaultComponents() {
207
- switch (currentColorSpace) {
208
- case "rgb": return "0 0 0";
209
- case "hsl": return "0 0% 0%";
210
- case "oklch": return "0 0 0";
211
- }
212
- }
213
- /**
214
- * Get the CSS @property syntax for the companion components variable.
215
- * RGB and OKLCH components are all plain numbers, so `<number>+` works.
216
- * HSL includes percentages (`h s% l%`), so `*` is the only safe choice.
217
- */
218
- function getComponentPropertySyntax() {
219
- switch (currentColorSpace) {
220
- case "rgb":
221
- case "oklch": return "<number>+";
222
- default: return "*";
223
- }
224
- }
225
- //#endregion
226
- export { colorInitialValueToComponents, getColorSpaceComponents, getColorSpaceFunc, getColorSpaceSuffix, getComponentPropertySyntax, resetColorSpace, setColorSpace, strToColorSpace };
227
-
228
- //# sourceMappingURL=color-space.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"color-space.js","names":[],"sources":["../../src/utils/color-space.ts"],"sourcesContent":["import { Lru } from '../parser/lru';\n\nimport {\n getRgbValuesFromRgbaString,\n hexToRgbaValues,\n hslToRgbValues,\n okhslToSrgb,\n oklchToRgbValues,\n rgbToHsl,\n rgbToOklch,\n strToRgb,\n} from './color-math';\n\nexport type ColorSpace = 'rgb' | 'hsl' | 'oklch';\n\nlet currentColorSpace: ColorSpace = 'oklch';\n\nconst colorSpaceCache = new Lru<string, string | null>(500);\nconst componentsCache = new Lru<string, string>(500);\n\nfunction clearColorCaches(): void {\n colorSpaceCache.clear();\n componentsCache.clear();\n}\n\nexport function getColorSpace(): ColorSpace {\n return currentColorSpace;\n}\n\nexport function setColorSpace(space: ColorSpace): void {\n currentColorSpace = space;\n clearColorCaches();\n}\n\nexport function resetColorSpace(): void {\n currentColorSpace = 'oklch';\n clearColorCaches();\n}\n\nexport function getColorSpaceSuffix(): string {\n return currentColorSpace;\n}\n\nexport function getColorSpaceFunc(): string {\n return currentColorSpace;\n}\n\n// ---------------------------------------------------------------------------\n// Formatting helpers\n// ---------------------------------------------------------------------------\n\nfunction formatNum(n: number, precision: number): string {\n return parseFloat(n.toFixed(precision)).toString();\n}\n\nfunction formatRgbComponent(n: number): string {\n return parseFloat(n.toFixed(1)).toString();\n}\n\n// ---------------------------------------------------------------------------\n// Convert RGB 0-255 values to the configured color space CSS string\n// ---------------------------------------------------------------------------\n\nfunction formatAlpha(a: number): string {\n if (a === 0) return '0';\n const s = parseFloat(a.toFixed(4)).toString();\n return s;\n}\n\nfunction rgbValuesToColorString(\n r: number,\n g: number,\n b: number,\n space: ColorSpace,\n alpha?: number,\n): string {\n const alphaSuffix =\n alpha != null && alpha < 1 ? ` / ${formatAlpha(alpha)}` : '';\n\n switch (space) {\n case 'rgb':\n return `rgb(${Math.round(r)} ${Math.round(g)} ${Math.round(b)}${alphaSuffix})`;\n case 'hsl': {\n const [h, s, l] = rgbToHsl(r, g, b);\n return `hsl(${formatNum(h, 2)} ${formatNum(s * 100, 2)}% ${formatNum(l * 100, 2)}%${alphaSuffix})`;\n }\n case 'oklch': {\n const [L, C, H] = rgbToOklch(r, g, b);\n return `oklch(${formatNum(L, 5)} ${formatNum(C, 5)} ${formatNum(H, 2)}${alphaSuffix})`;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Extract decomposed components string (no wrapping function)\n// ---------------------------------------------------------------------------\n\nfunction rgbValuesToComponents(\n r: number,\n g: number,\n b: number,\n space: ColorSpace,\n): string {\n switch (space) {\n case 'rgb':\n return `${formatRgbComponent(r)} ${formatRgbComponent(g)} ${formatRgbComponent(b)}`;\n case 'hsl': {\n const [h, s, l] = rgbToHsl(r, g, b);\n return `${formatNum(h, 2)} ${formatNum(s * 100, 2)}% ${formatNum(l * 100, 2)}%`;\n }\n case 'oklch': {\n const [L, C, H] = rgbToOklch(r, g, b);\n return `${formatNum(L, 5)} ${formatNum(C, 5)} ${formatNum(H, 2)}`;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Resolve any color input to 0-255 RGB values + optional alpha\n// ---------------------------------------------------------------------------\n\ntype RgbaResult = [number, number, number, number];\n\nconst parseColorFuncArgs = (\n str: string,\n prefix: string,\n): { parts: string[]; alpha: number } | null => {\n const start = str.indexOf('(', prefix.length - 1);\n const end = str.lastIndexOf(')');\n if (start < 0 || end < 0) return null;\n const inner = str.slice(start + 1, end).trim();\n const slashIdx = inner.indexOf('/');\n\n let colorPart: string;\n let alpha = 1;\n\n if (slashIdx >= 0) {\n colorPart = inner.slice(0, slashIdx);\n const alphaStr = inner.slice(slashIdx + 1).trim();\n if (alphaStr) {\n alpha = alphaStr.endsWith('%')\n ? parseFloat(alphaStr) / 100\n : parseFloat(alphaStr);\n if (Number.isNaN(alpha)) alpha = 1;\n }\n } else {\n colorPart = inner;\n }\n\n const parts = colorPart\n .trim()\n .split(/[,\\s]+/)\n .filter(Boolean);\n\n if (parts.length < 3) return null;\n\n // Legacy comma-separated rgba(r, g, b, a) — 4th value is alpha\n if (parts.length >= 4 && slashIdx < 0) {\n const legacyAlpha = parseFloat(parts[3]);\n if (!Number.isNaN(legacyAlpha)) {\n alpha = legacyAlpha;\n }\n }\n\n return { parts, alpha };\n};\n\nconst parseHue = (hueStr: string): number => {\n let h = parseFloat(hueStr);\n const lower = hueStr.toLowerCase();\n if (lower.endsWith('turn')) h = parseFloat(lower) * 360;\n else if (lower.endsWith('rad')) h = (parseFloat(lower) * 180) / Math.PI;\n return ((h % 360) + 360) % 360;\n};\n\nconst parsePercent = (val: string): number => {\n const num = parseFloat(val);\n return val.includes('%') ? num / 100 : num;\n};\n\nconst clamp01 = (n: number): number => Math.max(0, Math.min(1, n));\n\nfunction resolveToRgbaValues(color: string): RgbaResult | null {\n const trimmed = color.trim().toLowerCase();\n\n if (trimmed.startsWith('rgb')) {\n const parsed = parseColorFuncArgs(trimmed, 'rgb');\n if (!parsed || parsed.parts.length < 3) return null;\n const r = parsed.parts[0].endsWith('%')\n ? (parseFloat(parsed.parts[0]) / 100) * 255\n : parseFloat(parsed.parts[0]);\n const g = parsed.parts[1].endsWith('%')\n ? (parseFloat(parsed.parts[1]) / 100) * 255\n : parseFloat(parsed.parts[1]);\n const b = parsed.parts[2].endsWith('%')\n ? (parseFloat(parsed.parts[2]) / 100) * 255\n : parseFloat(parsed.parts[2]);\n return [r, g, b, parsed.alpha];\n }\n\n if (trimmed.startsWith('#')) {\n return hexToRgbaValues(trimmed);\n }\n\n if (trimmed.startsWith('hsl')) {\n const parsed = parseColorFuncArgs(trimmed, 'hsl');\n if (!parsed) return null;\n const h = parseHue(parsed.parts[0]);\n const s = clamp01(parsePercent(parsed.parts[1]));\n const l = clamp01(parsePercent(parsed.parts[2]));\n const [r, g, b] = hslToRgbValues(h, s, l);\n return [r, g, b, parsed.alpha];\n }\n\n if (trimmed.startsWith('oklch(')) {\n const parsed = parseColorFuncArgs(trimmed, 'oklch');\n if (!parsed) return null;\n const L = clamp01(parsePercent(parsed.parts[0]));\n const C = Math.max(0, parseFloat(parsed.parts[1]));\n const H = parseHue(parsed.parts[2]);\n const [r, g, b] = oklchToRgbValues(L, C, H);\n return [r, g, b, parsed.alpha];\n }\n\n if (trimmed.startsWith('okhsl(')) {\n const parsed = parseColorFuncArgs(trimmed, 'okhsl');\n if (!parsed) return null;\n const h = parseHue(parsed.parts[0]);\n const s = clamp01(parsePercent(parsed.parts[1]));\n const l = clamp01(parsePercent(parsed.parts[2]));\n const [r, g, b] = okhslToSrgb(h, s, l);\n return [clamp01(r) * 255, clamp01(g) * 255, clamp01(b) * 255, parsed.alpha];\n }\n\n // Fallback: named colors and other formats go through string conversion\n const fallback = strToRgb(trimmed);\n if (fallback) {\n // Recurse so the rgb(...) string is parsed with alpha extraction\n if (fallback !== trimmed) return resolveToRgbaValues(fallback);\n const vals = getRgbValuesFromRgbaString(fallback);\n if (vals.length >= 3) return [vals[0], vals[1], vals[2], 1];\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Convert any supported color string to the configured color space CSS format.\n * Preserves alpha channel when present in the input.\n * Returns null if the input cannot be parsed.\n */\nexport function strToColorSpace(color: string): string | null | undefined {\n if (!color) return undefined;\n\n const cached = colorSpaceCache.get(color);\n if (cached !== undefined) return cached;\n\n const rgba = resolveToRgbaValues(color);\n if (!rgba) {\n colorSpaceCache.set(color, null);\n return null;\n }\n\n const result = rgbValuesToColorString(\n rgba[0],\n rgba[1],\n rgba[2],\n currentColorSpace,\n rgba[3],\n );\n colorSpaceCache.set(color, result);\n return result;\n}\n\n/**\n * Extract the decomposed components of a color in the configured color space.\n * Returns a space-separated string of components without the wrapping function.\n * Alpha is NOT included — components are used for alpha composition via `/ alpha`.\n */\nexport function getColorSpaceComponents(color: string): string {\n const cached = componentsCache.get(color);\n if (cached !== undefined) return cached;\n\n const rgba = resolveToRgbaValues(color);\n if (!rgba) return color;\n\n const result = rgbValuesToComponents(\n rgba[0],\n rgba[1],\n rgba[2],\n currentColorSpace,\n );\n componentsCache.set(color, result);\n return result;\n}\n\n/**\n * Convert a color initial value (from @property definitions) to components\n * in the configured color space.\n */\nexport function colorInitialValueToComponents(\n initialValue: string | number | undefined,\n): string {\n if (initialValue == null) return getDefaultComponents();\n\n const val = String(initialValue).trim().toLowerCase();\n\n if (val === 'transparent' || val === 'rgba(0,0,0,0)' || val === '') {\n return getDefaultComponents();\n }\n\n if (val === 'white') {\n return rgbValuesToComponents(255, 255, 255, currentColorSpace);\n }\n if (val === 'black') {\n return rgbValuesToComponents(0, 0, 0, currentColorSpace);\n }\n\n const rgbMatch = val.match(/^rgba?\\(\\s*(\\d+)[,\\s]+(\\d+)[,\\s]+(\\d+)/);\n if (rgbMatch) {\n return rgbValuesToComponents(\n parseInt(rgbMatch[1]),\n parseInt(rgbMatch[2]),\n parseInt(rgbMatch[3]),\n currentColorSpace,\n );\n }\n\n return getDefaultComponents();\n}\n\nfunction getDefaultComponents(): string {\n switch (currentColorSpace) {\n case 'rgb':\n return '0 0 0';\n case 'hsl':\n return '0 0% 0%';\n case 'oklch':\n return '0 0 0';\n }\n}\n\n/**\n * Get the CSS @property syntax for the companion components variable.\n * RGB and OKLCH components are all plain numbers, so `<number>+` works.\n * HSL includes percentages (`h s% l%`), so `*` is the only safe choice.\n */\nexport function getComponentPropertySyntax(): string {\n switch (currentColorSpace) {\n case 'rgb':\n case 'oklch':\n return '<number>+';\n default:\n return '*';\n }\n}\n"],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- //#region src/utils/colors.d.ts
2
- declare function color(name: string, opacity?: number): string;
3
- //#endregion
4
- export { color };
5
- //# sourceMappingURL=colors.d.ts.map
@@ -1,10 +0,0 @@
1
- import { getColorSpaceFunc, getColorSpaceSuffix } from "./color-space.js";
2
- //#region src/utils/colors.ts
3
- function color(name, opacity = 1) {
4
- if (opacity !== 1) return `${getColorSpaceFunc()}(var(--${name}-color-${getColorSpaceSuffix()}) / ${opacity})`;
5
- return `var(--${name}-color)`;
6
- }
7
- //#endregion
8
- export { color };
9
-
10
- //# sourceMappingURL=colors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"colors.js","names":[],"sources":["../../src/utils/colors.ts"],"sourcesContent":["import { getColorSpaceFunc, getColorSpaceSuffix } from './color-space';\n\nexport function color(name: string, opacity = 1) {\n if (opacity !== 1) {\n return `${getColorSpaceFunc()}(var(--${name}-color-${getColorSpaceSuffix()}) / ${opacity})`;\n }\n\n return `var(--${name}-color)`;\n}\n"],"mappings":";;AAEA,SAAgB,MAAM,MAAc,UAAU,GAAG;AAC/C,KAAI,YAAY,EACd,QAAO,GAAG,mBAAmB,CAAC,SAAS,KAAK,SAAS,qBAAqB,CAAC,MAAM,QAAQ;AAG3F,QAAO,SAAS,KAAK"}
@@ -1,7 +0,0 @@
1
- import { Properties } from "csstype";
2
-
3
- //#region src/utils/css-types.d.ts
4
- interface CSSProperties extends Properties<string | number> {}
5
- //#endregion
6
- export { CSSProperties };
7
- //# sourceMappingURL=css-types.d.ts.map
@@ -1,15 +0,0 @@
1
- //#region src/utils/deps-equal.ts
2
- /**
3
- * Shallow comparison of two dependency arrays using Object.is semantics.
4
- * Returns true when both arrays have the same length and every element
5
- * at the same index is identical.
6
- */
7
- function depsEqual(a, b) {
8
- if (a.length !== b.length) return false;
9
- for (let i = 0; i < a.length; i++) if (!Object.is(a[i], b[i])) return false;
10
- return true;
11
- }
12
- //#endregion
13
- export { depsEqual };
14
-
15
- //# sourceMappingURL=deps-equal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deps-equal.js","names":[],"sources":["../../src/utils/deps-equal.ts"],"sourcesContent":["/**\n * Shallow comparison of two dependency arrays using Object.is semantics.\n * Returns true when both arrays have the same length and every element\n * at the same index is identical.\n */\nexport function depsEqual(\n a: readonly unknown[],\n b: readonly unknown[],\n): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!Object.is(a[i], b[i])) return false;\n }\n return true;\n}\n"],"mappings":";;;;;;AAKA,SAAgB,UACd,GACA,GACS;AACT,KAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;AAClC,MAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,IAC5B,KAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,GAAG,CAAE,QAAO;AAErC,QAAO"}
@@ -1,26 +0,0 @@
1
- //#region src/utils/dotize.d.ts
2
- declare const dotize: {
3
- valTypes: {
4
- none: string;
5
- primitive: string;
6
- object: string;
7
- array: string;
8
- };
9
- getValType: (val: any) => string | undefined;
10
- getPathType: (arrPath: any) => string[];
11
- isUndefined: (obj: any) => obj is undefined;
12
- isNumber: (f: any) => boolean;
13
- isEmptyObj: (obj: any) => boolean;
14
- isPlainObject: (obj: any) => boolean;
15
- isNotObject: (obj: any) => boolean;
16
- isEmptyArray: (arr: any) => boolean;
17
- isNotArray: (arr: any) => boolean;
18
- removeEmptyArrayItem: (arr: any) => any;
19
- getFieldName: (field: any, prefix: any, isRoot: any, isArrayItem: any, isArray: any) => string;
20
- startsWith: (val: any, valToSearch: any) => boolean;
21
- convert: (obj: any, prefix?: string) => any;
22
- backward: (obj: any, prefix: any) => any;
23
- };
24
- //#endregion
25
- export { dotize };
26
- //# sourceMappingURL=dotize.d.ts.map
@@ -1,122 +0,0 @@
1
- //#region src/utils/dotize.ts
2
- const dotize = {
3
- valTypes: {
4
- none: "NONE",
5
- primitive: "PRIM",
6
- object: "OBJECT",
7
- array: "ARRAY"
8
- },
9
- getValType: function(val) {
10
- if (!val || typeof val != "object" || Array.isArray(val)) return dotize.valTypes.primitive;
11
- if (typeof val == "object") return dotize.valTypes.object;
12
- },
13
- getPathType: function(arrPath) {
14
- const arrPathTypes = [];
15
- for (const path in arrPath) {
16
- const pathVal = arrPath[path];
17
- if (!pathVal) arrPathTypes.push(dotize.valTypes.none);
18
- else if (dotize.isNumber(pathVal)) arrPathTypes.push(dotize.valTypes.array);
19
- else arrPathTypes.push(dotize.valTypes.object);
20
- }
21
- return arrPathTypes;
22
- },
23
- isUndefined: function(obj) {
24
- return typeof obj == "undefined";
25
- },
26
- isNumber: function(f) {
27
- return !isNaN(parseInt(f));
28
- },
29
- isEmptyObj: function(obj) {
30
- for (const prop in obj) if (Object.hasOwnProperty.call(obj, prop)) return false;
31
- return JSON.stringify(obj) === JSON.stringify({});
32
- },
33
- isPlainObject: function(obj) {
34
- if (typeof obj !== "object" || obj === null) return false;
35
- return Object.getPrototypeOf(obj) === Object.prototype;
36
- },
37
- isNotObject: function(obj) {
38
- return !obj || !this.isPlainObject(obj);
39
- },
40
- isEmptyArray: function(arr) {
41
- return Array.isArray(arr) && arr.length == 0;
42
- },
43
- isNotArray: function(arr) {
44
- return Array.isArray(arr) == false;
45
- },
46
- removeEmptyArrayItem: function(arr) {
47
- return arr.filter(function(el) {
48
- return el != null && el != "";
49
- });
50
- },
51
- getFieldName: function(field, prefix, isRoot, isArrayItem, isArray) {
52
- if (isArray) return (prefix ? prefix : "") + (dotize.isNumber(field) ? "[" + field + "]" : (isRoot && !prefix ? "" : ".") + field);
53
- else if (isArrayItem) return (prefix ? prefix : "") + "[" + field + "]";
54
- else return (prefix ? prefix + "." : "") + field;
55
- },
56
- startsWith: function(val, valToSearch) {
57
- return val.indexOf(valToSearch) == 0;
58
- },
59
- convert: function(obj, prefix = "") {
60
- let newObj = {};
61
- if (dotize.isNotObject(obj)) if (prefix) {
62
- newObj[prefix] = obj;
63
- return newObj;
64
- } else return obj;
65
- return (function recurse(o, p, isRoot) {
66
- const isArrayItem = Array.isArray(o);
67
- for (const f in o) {
68
- const currentProp = o[f];
69
- if (currentProp && typeof currentProp === "object" && !Array.isArray(currentProp) && dotize.isPlainObject(currentProp)) {
70
- if (isArrayItem && dotize.isEmptyObj(currentProp) == false) newObj = recurse(currentProp, dotize.getFieldName(f, p, isRoot, true));
71
- else if (dotize.isEmptyObj(currentProp) == false) newObj = recurse(currentProp, dotize.getFieldName(f, p, isRoot));
72
- else if (dotize.isEmptyObj(currentProp)) newObj[dotize.getFieldName(f, p, isRoot, isArrayItem)] = currentProp;
73
- } else if (isArrayItem || dotize.isNumber(f)) newObj[dotize.getFieldName(f, p, isRoot, true)] = currentProp;
74
- else newObj[dotize.getFieldName(f, p, isRoot)] = currentProp;
75
- }
76
- return newObj;
77
- })(obj, prefix, true);
78
- },
79
- backward: function(obj, prefix) {
80
- let newObj = {};
81
- const arStartRegex = /\[(\d+)\]/g;
82
- if (dotize.isNotObject(obj) && dotize.isNotArray(obj)) if (prefix) return obj[prefix];
83
- else return obj;
84
- for (let tProp in obj) {
85
- const tPropVal = obj[tProp];
86
- if (prefix) {
87
- const prefixRegex = new RegExp("^" + prefix);
88
- tProp = tProp.replace(prefixRegex, "");
89
- }
90
- tProp = tProp.replace(arStartRegex, ".$1");
91
- if (dotize.startsWith(tProp, ".")) tProp = tProp.replace(/^\./, "");
92
- const arrPath = tProp.split(".");
93
- const arrPathTypes = dotize.getPathType(arrPath);
94
- if (!dotize.isUndefined(arrPathTypes) && arrPathTypes[0] == dotize.valTypes.array && Array.isArray(newObj) == false) newObj = [];
95
- (function recurse(rPropVal, rObj, rPropValPrev, rObjPrev) {
96
- let currentPath = arrPath.shift();
97
- const currentPathType = arrPathTypes.shift();
98
- if (typeof currentPath == "undefined" || currentPath == "") {
99
- newObj = rPropVal;
100
- return;
101
- }
102
- const isArray = currentPathType == dotize.valTypes.array;
103
- if (dotize.isNumber(currentPath)) currentPath = parseInt(currentPath);
104
- if (arrPath.length > 0) {
105
- if (typeof rObj[currentPath] == "undefined") if (isArray) rObj[currentPath] = [];
106
- else rObj[currentPath] = {};
107
- recurse(rPropVal, rObj[currentPath], currentPath, rObj);
108
- return;
109
- }
110
- if (currentPathType == dotize.valTypes.array && rPropValPrev && rObjPrev) {
111
- if (Array.isArray(rObjPrev[rPropValPrev]) == false) rObjPrev[rPropValPrev] = [];
112
- rObjPrev[rPropValPrev].push(rPropVal);
113
- } else rObj[currentPath] = rPropVal;
114
- })(tPropVal, newObj);
115
- }
116
- return newObj;
117
- }
118
- };
119
- //#endregion
120
- export { dotize };
121
-
122
- //# sourceMappingURL=dotize.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dotize.js","names":[],"sources":["../../src/utils/dotize.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n// Convert complex js object to dot notation js object\n// url: https://github.com/vardars/dotize\n// author: vardars\n\nexport const dotize = {\n valTypes: {\n none: 'NONE',\n primitive: 'PRIM',\n object: 'OBJECT',\n array: 'ARRAY',\n },\n\n getValType: function (val) {\n if (!val || typeof val != 'object' || Array.isArray(val))\n return dotize.valTypes.primitive;\n if (typeof val == 'object') return dotize.valTypes.object;\n },\n\n getPathType: function (arrPath) {\n const arrPathTypes = [];\n for (const path in arrPath) {\n const pathVal = arrPath[path];\n if (!pathVal) arrPathTypes.push(dotize.valTypes.none);\n else if (dotize.isNumber(pathVal))\n arrPathTypes.push(dotize.valTypes.array);\n else arrPathTypes.push(dotize.valTypes.object);\n }\n return arrPathTypes;\n },\n\n isUndefined: function (obj) {\n return typeof obj == 'undefined';\n },\n\n isNumber: function (f) {\n return !isNaN(parseInt(f));\n },\n\n isEmptyObj: function (obj) {\n for (const prop in obj) {\n if (Object.hasOwnProperty.call(obj, prop)) return false;\n }\n\n return JSON.stringify(obj) === JSON.stringify({});\n },\n\n isPlainObject: function (obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n\n return Object.getPrototypeOf(obj) === Object.prototype;\n },\n\n isNotObject: function (obj) {\n return !obj || !this.isPlainObject(obj);\n },\n\n isEmptyArray: function (arr) {\n return Array.isArray(arr) && arr.length == 0;\n },\n\n isNotArray: function (arr) {\n return Array.isArray(arr) == false;\n },\n\n removeEmptyArrayItem: function (arr) {\n return arr.filter(function (el) {\n return el != null && el != '';\n });\n },\n\n getFieldName: function (field, prefix, isRoot, isArrayItem, isArray) {\n if (isArray)\n return (\n (prefix ? prefix : '') +\n (dotize.isNumber(field)\n ? '[' + field + ']'\n : (isRoot && !prefix ? '' : '.') + field)\n );\n else if (isArrayItem) return (prefix ? prefix : '') + '[' + field + ']';\n else return (prefix ? prefix + '.' : '') + field;\n },\n\n startsWith: function (val, valToSearch) {\n return val.indexOf(valToSearch) == 0;\n },\n\n convert: function (obj, prefix = '') {\n let newObj = {};\n\n // primitives\n if (dotize.isNotObject(obj)) {\n if (prefix) {\n newObj[prefix] = obj;\n return newObj;\n } else {\n return obj;\n }\n }\n\n return (function recurse(o, p, isRoot) {\n const isArrayItem = Array.isArray(o);\n for (const f in o) {\n const currentProp = o[f];\n if (\n currentProp &&\n typeof currentProp === 'object' &&\n !Array.isArray(currentProp) &&\n dotize.isPlainObject(currentProp)\n ) {\n if (isArrayItem && dotize.isEmptyObj(currentProp) == false) {\n newObj = recurse(\n currentProp,\n dotize.getFieldName(f, p, isRoot, true),\n ); // array item object\n } else if (dotize.isEmptyObj(currentProp) == false) {\n newObj = recurse(currentProp, dotize.getFieldName(f, p, isRoot)); // object\n } else if (dotize.isEmptyObj(currentProp)) {\n newObj[dotize.getFieldName(f, p, isRoot, isArrayItem)] =\n currentProp;\n }\n } else {\n if (isArrayItem || dotize.isNumber(f)) {\n newObj[dotize.getFieldName(f, p, isRoot, true)] = currentProp; // array item primitive\n } else {\n newObj[dotize.getFieldName(f, p, isRoot)] = currentProp; // primitive\n }\n }\n }\n\n return newObj;\n })(obj, prefix, true);\n },\n\n backward: function (obj, prefix) {\n let newObj = {};\n const arStartRegex = /\\[(\\d+)\\]/g;\n\n // primitives\n if (dotize.isNotObject(obj) && dotize.isNotArray(obj)) {\n if (prefix) {\n return obj[prefix];\n } else {\n return obj;\n }\n }\n\n for (let tProp in obj) {\n const tPropVal = obj[tProp];\n\n if (prefix) {\n const prefixRegex = new RegExp('^' + prefix);\n tProp = tProp.replace(prefixRegex, '');\n }\n\n tProp = tProp.replace(arStartRegex, '.$1');\n\n if (dotize.startsWith(tProp, '.')) tProp = tProp.replace(/^\\./, '');\n\n const arrPath = tProp.split('.');\n const arrPathTypes = dotize.getPathType(arrPath);\n\n // has array on root\n if (\n !dotize.isUndefined(arrPathTypes) &&\n arrPathTypes[0] == dotize.valTypes.array &&\n Array.isArray(newObj) == false\n ) {\n newObj = [];\n }\n\n (function recurse(rPropVal, rObj, rPropValPrev, rObjPrev) {\n let currentPath = arrPath.shift();\n const currentPathType = arrPathTypes.shift();\n\n if (typeof currentPath == 'undefined' || currentPath == '') {\n newObj = rPropVal;\n return;\n }\n\n const isArray = currentPathType == dotize.valTypes.array;\n\n if (dotize.isNumber(currentPath)) currentPath = parseInt(currentPath);\n\n // has multiple levels\n if (arrPath.length > 0) {\n // is not assigned before\n if (typeof rObj[currentPath] == 'undefined') {\n if (isArray) {\n rObj[currentPath] = [];\n } else {\n rObj[currentPath] = {};\n }\n }\n\n recurse(rPropVal, rObj[currentPath], currentPath, rObj);\n return;\n }\n\n if (\n currentPathType == dotize.valTypes.array &&\n rPropValPrev &&\n rObjPrev\n ) {\n if (Array.isArray(rObjPrev[rPropValPrev]) == false)\n rObjPrev[rPropValPrev] = [];\n rObjPrev[rPropValPrev].push(rPropVal);\n } else {\n rObj[currentPath] = rPropVal;\n }\n })(tPropVal, newObj);\n }\n\n return newObj;\n },\n};\n"],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- //#region src/utils/filter-base-props.d.ts
2
- interface PropsFilterOptions {
3
- labelable?: boolean;
4
- propNames?: Set<string>;
5
- eventProps?: boolean;
6
- }
7
- /**
8
- * Filters out all props that aren't valid DOM props or defined via override prop obj.
9
- * @param props - The component props to be filtered.
10
- * @param opts - Props to override.
11
- */
12
- declare function filterBaseProps<T extends object>(props: T, opts?: PropsFilterOptions): Partial<T>;
13
- //#endregion
14
- export { filterBaseProps };
15
- //# sourceMappingURL=filter-base-props.d.ts.map