@zentauri-ui/zentauri-components 1.9.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1031) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +34 -5
  3. package/cli/registry.json +14 -0
  4. package/dist/animations/blur-in.js +1 -0
  5. package/dist/animations/blur-in.js.map +1 -1
  6. package/dist/animations/blur-in.mjs +1 -0
  7. package/dist/animations/blur-in.mjs.map +1 -1
  8. package/dist/animations/blur-out.js +1 -0
  9. package/dist/animations/blur-out.js.map +1 -1
  10. package/dist/animations/blur-out.mjs +1 -0
  11. package/dist/animations/blur-out.mjs.map +1 -1
  12. package/dist/animations/bounce.js +1 -0
  13. package/dist/animations/bounce.js.map +1 -1
  14. package/dist/animations/bounce.mjs +1 -0
  15. package/dist/animations/bounce.mjs.map +1 -1
  16. package/dist/animations/fade-down.js +1 -0
  17. package/dist/animations/fade-down.js.map +1 -1
  18. package/dist/animations/fade-down.mjs +1 -0
  19. package/dist/animations/fade-down.mjs.map +1 -1
  20. package/dist/animations/fade-in.js +1 -0
  21. package/dist/animations/fade-in.js.map +1 -1
  22. package/dist/animations/fade-in.mjs +1 -0
  23. package/dist/animations/fade-in.mjs.map +1 -1
  24. package/dist/animations/fade-left.js +1 -0
  25. package/dist/animations/fade-left.js.map +1 -1
  26. package/dist/animations/fade-left.mjs +1 -0
  27. package/dist/animations/fade-left.mjs.map +1 -1
  28. package/dist/animations/fade-out.js +1 -0
  29. package/dist/animations/fade-out.js.map +1 -1
  30. package/dist/animations/fade-out.mjs +1 -0
  31. package/dist/animations/fade-out.mjs.map +1 -1
  32. package/dist/animations/fade-right.js +1 -0
  33. package/dist/animations/fade-right.js.map +1 -1
  34. package/dist/animations/fade-right.mjs +1 -0
  35. package/dist/animations/fade-right.mjs.map +1 -1
  36. package/dist/animations/fade-up.js +1 -0
  37. package/dist/animations/fade-up.js.map +1 -1
  38. package/dist/animations/fade-up.mjs +1 -0
  39. package/dist/animations/fade-up.mjs.map +1 -1
  40. package/dist/animations/flip-in.js +1 -0
  41. package/dist/animations/flip-in.js.map +1 -1
  42. package/dist/animations/flip-in.mjs +1 -0
  43. package/dist/animations/flip-in.mjs.map +1 -1
  44. package/dist/animations/flip.js +1 -0
  45. package/dist/animations/flip.js.map +1 -1
  46. package/dist/animations/flip.mjs +1 -0
  47. package/dist/animations/flip.mjs.map +1 -1
  48. package/dist/animations/float.js +1 -0
  49. package/dist/animations/float.js.map +1 -1
  50. package/dist/animations/float.mjs +1 -0
  51. package/dist/animations/float.mjs.map +1 -1
  52. package/dist/animations/hover-lift.js +1 -0
  53. package/dist/animations/hover-lift.js.map +1 -1
  54. package/dist/animations/hover-lift.mjs +1 -0
  55. package/dist/animations/hover-lift.mjs.map +1 -1
  56. package/dist/animations/hover-scale.js +1 -0
  57. package/dist/animations/hover-scale.js.map +1 -1
  58. package/dist/animations/hover-scale.mjs +1 -0
  59. package/dist/animations/hover-scale.mjs.map +1 -1
  60. package/dist/animations/magnetic.js +1 -0
  61. package/dist/animations/magnetic.js.map +1 -1
  62. package/dist/animations/magnetic.mjs +1 -0
  63. package/dist/animations/magnetic.mjs.map +1 -1
  64. package/dist/animations/parallax.js +1 -0
  65. package/dist/animations/parallax.js.map +1 -1
  66. package/dist/animations/parallax.mjs +1 -0
  67. package/dist/animations/parallax.mjs.map +1 -1
  68. package/dist/animations/ping.js +1 -0
  69. package/dist/animations/ping.js.map +1 -1
  70. package/dist/animations/ping.mjs +1 -0
  71. package/dist/animations/ping.mjs.map +1 -1
  72. package/dist/animations/pop-in.js +1 -0
  73. package/dist/animations/pop-in.js.map +1 -1
  74. package/dist/animations/pop-in.mjs +1 -0
  75. package/dist/animations/pop-in.mjs.map +1 -1
  76. package/dist/animations/press.js +1 -0
  77. package/dist/animations/press.js.map +1 -1
  78. package/dist/animations/press.mjs +1 -0
  79. package/dist/animations/press.mjs.map +1 -1
  80. package/dist/animations/progress.js +1 -0
  81. package/dist/animations/progress.js.map +1 -1
  82. package/dist/animations/progress.mjs +1 -0
  83. package/dist/animations/progress.mjs.map +1 -1
  84. package/dist/animations/pulse.js +1 -0
  85. package/dist/animations/pulse.js.map +1 -1
  86. package/dist/animations/pulse.mjs +1 -0
  87. package/dist/animations/pulse.mjs.map +1 -1
  88. package/dist/animations/reorder.js +1 -0
  89. package/dist/animations/reorder.js.map +1 -1
  90. package/dist/animations/reorder.mjs +1 -0
  91. package/dist/animations/reorder.mjs.map +1 -1
  92. package/dist/animations/reveal-blur.js +1 -0
  93. package/dist/animations/reveal-blur.js.map +1 -1
  94. package/dist/animations/reveal-blur.mjs +1 -0
  95. package/dist/animations/reveal-blur.mjs.map +1 -1
  96. package/dist/animations/reveal-down.js +1 -0
  97. package/dist/animations/reveal-down.js.map +1 -1
  98. package/dist/animations/reveal-down.mjs +1 -0
  99. package/dist/animations/reveal-down.mjs.map +1 -1
  100. package/dist/animations/reveal-left.js +1 -0
  101. package/dist/animations/reveal-left.js.map +1 -1
  102. package/dist/animations/reveal-left.mjs +1 -0
  103. package/dist/animations/reveal-left.mjs.map +1 -1
  104. package/dist/animations/reveal-right.js +1 -0
  105. package/dist/animations/reveal-right.js.map +1 -1
  106. package/dist/animations/reveal-right.mjs +1 -0
  107. package/dist/animations/reveal-right.mjs.map +1 -1
  108. package/dist/animations/reveal-up.js +1 -0
  109. package/dist/animations/reveal-up.js.map +1 -1
  110. package/dist/animations/reveal-up.mjs +1 -0
  111. package/dist/animations/reveal-up.mjs.map +1 -1
  112. package/dist/animations/rotate-in.js +1 -0
  113. package/dist/animations/rotate-in.js.map +1 -1
  114. package/dist/animations/rotate-in.mjs +1 -0
  115. package/dist/animations/rotate-in.mjs.map +1 -1
  116. package/dist/animations/scale-in.js +1 -0
  117. package/dist/animations/scale-in.js.map +1 -1
  118. package/dist/animations/scale-in.mjs +1 -0
  119. package/dist/animations/scale-in.mjs.map +1 -1
  120. package/dist/animations/scale-out.js +1 -0
  121. package/dist/animations/scale-out.js.map +1 -1
  122. package/dist/animations/scale-out.mjs +1 -0
  123. package/dist/animations/scale-out.mjs.map +1 -1
  124. package/dist/animations/shake.js +1 -0
  125. package/dist/animations/shake.js.map +1 -1
  126. package/dist/animations/shake.mjs +1 -0
  127. package/dist/animations/shake.mjs.map +1 -1
  128. package/dist/animations/skeleton-shimmer.js +1 -0
  129. package/dist/animations/skeleton-shimmer.js.map +1 -1
  130. package/dist/animations/skeleton-shimmer.mjs +1 -0
  131. package/dist/animations/skeleton-shimmer.mjs.map +1 -1
  132. package/dist/animations/slide-down.js +1 -0
  133. package/dist/animations/slide-down.js.map +1 -1
  134. package/dist/animations/slide-down.mjs +1 -0
  135. package/dist/animations/slide-down.mjs.map +1 -1
  136. package/dist/animations/slide-left.js +1 -0
  137. package/dist/animations/slide-left.js.map +1 -1
  138. package/dist/animations/slide-left.mjs +1 -0
  139. package/dist/animations/slide-left.mjs.map +1 -1
  140. package/dist/animations/slide-right.js +1 -0
  141. package/dist/animations/slide-right.js.map +1 -1
  142. package/dist/animations/slide-right.mjs +1 -0
  143. package/dist/animations/slide-right.mjs.map +1 -1
  144. package/dist/animations/slide-up.js +1 -0
  145. package/dist/animations/slide-up.js.map +1 -1
  146. package/dist/animations/slide-up.mjs +1 -0
  147. package/dist/animations/slide-up.mjs.map +1 -1
  148. package/dist/animations/spin.js +1 -0
  149. package/dist/animations/spin.js.map +1 -1
  150. package/dist/animations/spin.mjs +1 -0
  151. package/dist/animations/spin.mjs.map +1 -1
  152. package/dist/animations/text-reveal.js +1 -0
  153. package/dist/animations/text-reveal.js.map +1 -1
  154. package/dist/animations/text-reveal.mjs +1 -0
  155. package/dist/animations/text-reveal.mjs.map +1 -1
  156. package/dist/animations/text-shimmer.js +1 -0
  157. package/dist/animations/text-shimmer.js.map +1 -1
  158. package/dist/animations/text-shimmer.mjs +1 -0
  159. package/dist/animations/text-shimmer.mjs.map +1 -1
  160. package/dist/animations/tilt.js +1 -0
  161. package/dist/animations/tilt.js.map +1 -1
  162. package/dist/animations/tilt.mjs +1 -0
  163. package/dist/animations/tilt.mjs.map +1 -1
  164. package/dist/animations/wiggle.js +1 -0
  165. package/dist/animations/wiggle.js.map +1 -1
  166. package/dist/animations/wiggle.mjs +1 -0
  167. package/dist/animations/wiggle.mjs.map +1 -1
  168. package/dist/charts/area.js +1 -0
  169. package/dist/charts/area.js.map +1 -1
  170. package/dist/charts/area.mjs +1 -0
  171. package/dist/charts/area.mjs.map +1 -1
  172. package/dist/charts/bar.js +1 -0
  173. package/dist/charts/bar.mjs +1 -0
  174. package/dist/charts/bubble.js +1 -0
  175. package/dist/charts/bubble.js.map +1 -1
  176. package/dist/charts/bubble.mjs +1 -0
  177. package/dist/charts/bubble.mjs.map +1 -1
  178. package/dist/charts/funnel.js +1 -0
  179. package/dist/charts/funnel.js.map +1 -1
  180. package/dist/charts/funnel.mjs +1 -0
  181. package/dist/charts/funnel.mjs.map +1 -1
  182. package/dist/charts/line.js +1 -0
  183. package/dist/charts/line.js.map +1 -1
  184. package/dist/charts/line.mjs +1 -0
  185. package/dist/charts/line.mjs.map +1 -1
  186. package/dist/charts/pie.js +1 -0
  187. package/dist/charts/pie.js.map +1 -1
  188. package/dist/charts/pie.mjs +1 -0
  189. package/dist/charts/pie.mjs.map +1 -1
  190. package/dist/charts/radar.js +1 -0
  191. package/dist/charts/radar.js.map +1 -1
  192. package/dist/charts/radar.mjs +1 -0
  193. package/dist/charts/radar.mjs.map +1 -1
  194. package/dist/charts/scatter.js +1 -0
  195. package/dist/charts/scatter.js.map +1 -1
  196. package/dist/charts/scatter.mjs +1 -0
  197. package/dist/charts/scatter.mjs.map +1 -1
  198. package/dist/charts/stacked-bar.js +1 -0
  199. package/dist/charts/stacked-bar.js.map +1 -1
  200. package/dist/charts/stacked-bar.mjs +1 -0
  201. package/dist/charts/stacked-bar.mjs.map +1 -1
  202. package/dist/{chunk-OY3YJGOX.mjs → chunk-22I54GJW.js} +7 -203
  203. package/dist/chunk-22I54GJW.js.map +1 -0
  204. package/dist/chunk-27PO2FY2.mjs +161 -0
  205. package/dist/chunk-27PO2FY2.mjs.map +1 -0
  206. package/dist/chunk-2PWT2MB5.mjs +73 -0
  207. package/dist/chunk-2PWT2MB5.mjs.map +1 -0
  208. package/dist/chunk-34OSFCSH.js +212 -0
  209. package/dist/chunk-34OSFCSH.js.map +1 -0
  210. package/dist/chunk-37YQUTKG.js +204 -0
  211. package/dist/chunk-37YQUTKG.js.map +1 -0
  212. package/dist/chunk-3HSFL4WA.mjs +191 -0
  213. package/dist/chunk-3HSFL4WA.mjs.map +1 -0
  214. package/dist/{chunk-EKLWWV3G.mjs → chunk-3I6XR7KN.js} +10 -72
  215. package/dist/chunk-3I6XR7KN.js.map +1 -0
  216. package/dist/chunk-3MK7CWEX.js +54 -0
  217. package/dist/chunk-3MK7CWEX.js.map +1 -0
  218. package/dist/{chunk-UNPKDNLA.js → chunk-3R6PQUG2.mjs} +3 -264
  219. package/dist/chunk-3R6PQUG2.mjs.map +1 -0
  220. package/dist/{chunk-AS34PVUG.mjs → chunk-3Z6L24ZK.js} +11 -221
  221. package/dist/{chunk-IW2E4MLG.js.map → chunk-3Z6L24ZK.js.map} +1 -1
  222. package/dist/{chunk-DBW25HOR.mjs → chunk-44G3U35C.js} +12 -413
  223. package/dist/chunk-44G3U35C.js.map +1 -0
  224. package/dist/chunk-44NX3DAZ.mjs +17 -0
  225. package/dist/chunk-44NX3DAZ.mjs.map +1 -0
  226. package/dist/chunk-456OEGUT.mjs +58 -0
  227. package/dist/chunk-456OEGUT.mjs.map +1 -0
  228. package/dist/{chunk-URXYF25P.mjs → chunk-45CGVW7S.js} +12 -205
  229. package/dist/chunk-45CGVW7S.js.map +1 -0
  230. package/dist/chunk-4FU6FDUT.mjs +202 -0
  231. package/dist/chunk-4FU6FDUT.mjs.map +1 -0
  232. package/dist/chunk-4LVEWKXF.mjs +258 -0
  233. package/dist/chunk-4LVEWKXF.mjs.map +1 -0
  234. package/dist/{chunk-3IBWZM52.js → chunk-4QLWSXXO.mjs} +3 -209
  235. package/dist/chunk-4QLWSXXO.mjs.map +1 -0
  236. package/dist/{chunk-DMDCXYNN.js → chunk-4U7CDEN7.mjs} +3 -51
  237. package/dist/chunk-4U7CDEN7.mjs.map +1 -0
  238. package/dist/{chunk-6GPUHFXI.mjs → chunk-56DECC6D.js} +16 -220
  239. package/dist/chunk-56DECC6D.js.map +1 -0
  240. package/dist/chunk-56KZVM5D.mjs +159 -0
  241. package/dist/chunk-56KZVM5D.mjs.map +1 -0
  242. package/dist/{chunk-VJSME7ML.js → chunk-5BSYGFN7.mjs} +3 -162
  243. package/dist/chunk-5BSYGFN7.mjs.map +1 -0
  244. package/dist/{chunk-XIG2QDVN.js → chunk-5QSYJHWL.mjs} +3 -73
  245. package/dist/chunk-5QSYJHWL.mjs.map +1 -0
  246. package/dist/{chunk-WVBFSJEB.js → chunk-5R6XJAXQ.mjs} +3 -574
  247. package/dist/chunk-5R6XJAXQ.mjs.map +1 -0
  248. package/dist/{chunk-KIAYTBS5.js → chunk-5WWD3TZ2.mjs} +3 -129
  249. package/dist/chunk-5WWD3TZ2.mjs.map +1 -0
  250. package/dist/{chunk-4GVMPQZS.js → chunk-63UE3BR4.mjs} +3 -77
  251. package/dist/chunk-63UE3BR4.mjs.map +1 -0
  252. package/dist/chunk-63YMCBGJ.js +217 -0
  253. package/dist/chunk-63YMCBGJ.js.map +1 -0
  254. package/dist/chunk-7GIL24GK.js +354 -0
  255. package/dist/chunk-7GIL24GK.js.map +1 -0
  256. package/dist/chunk-7JBQ3ZJN.mjs +250 -0
  257. package/dist/chunk-7JBQ3ZJN.mjs.map +1 -0
  258. package/dist/{chunk-4WRCXG5E.mjs → chunk-7LFRU6AW.js} +16 -704
  259. package/dist/{chunk-XYKDSHRG.js.map → chunk-7LFRU6AW.js.map} +1 -1
  260. package/dist/{chunk-6ONKAOI7.mjs → chunk-7M4TUP4I.js} +8 -190
  261. package/dist/chunk-7M4TUP4I.js.map +1 -0
  262. package/dist/{chunk-XOYCFLEZ.mjs → chunk-AADGUMYW.js} +12 -349
  263. package/dist/chunk-AADGUMYW.js.map +1 -0
  264. package/dist/chunk-ATMCT3A3.mjs +222 -0
  265. package/dist/chunk-ATMCT3A3.mjs.map +1 -0
  266. package/dist/chunk-BDBL4XXI.mjs +45 -0
  267. package/dist/chunk-BDBL4XXI.mjs.map +1 -0
  268. package/dist/{chunk-U7FZ5RMV.js → chunk-BTSCPOWZ.mjs} +3 -424
  269. package/dist/chunk-BTSCPOWZ.mjs.map +1 -0
  270. package/dist/chunk-BZZVO4GL.mjs +414 -0
  271. package/dist/chunk-BZZVO4GL.mjs.map +1 -0
  272. package/dist/chunk-C7F6OCGK.mjs +123 -0
  273. package/dist/chunk-C7F6OCGK.mjs.map +1 -0
  274. package/dist/chunk-D4B62J5C.js +128 -0
  275. package/dist/chunk-D4B62J5C.js.map +1 -0
  276. package/dist/{chunk-REDZL4DY.mjs → chunk-DWDDIG6R.js} +9 -160
  277. package/dist/chunk-DWDDIG6R.js.map +1 -0
  278. package/dist/{chunk-UMXCV5IT.mjs → chunk-E7BPOL74.js} +13 -249
  279. package/dist/chunk-E7BPOL74.js.map +1 -0
  280. package/dist/chunk-EIX26RKN.js +73 -0
  281. package/dist/chunk-EIX26RKN.js.map +1 -0
  282. package/dist/chunk-EKBSSKJQ.js +271 -0
  283. package/dist/chunk-EKBSSKJQ.js.map +1 -0
  284. package/dist/{chunk-2RBUROXJ.js → chunk-EP7WTIKH.mjs} +3 -238
  285. package/dist/chunk-EP7WTIKH.mjs.map +1 -0
  286. package/dist/chunk-F6V74YMW.js +71 -0
  287. package/dist/chunk-F6V74YMW.js.map +1 -0
  288. package/dist/chunk-FAMHSJTK.js +19 -0
  289. package/dist/chunk-FAMHSJTK.js.map +1 -0
  290. package/dist/{chunk-S4NQTWMW.mjs → chunk-FNNIH7R2.js} +10 -61
  291. package/dist/chunk-FNNIH7R2.js.map +1 -0
  292. package/dist/chunk-FXDHDQTH.js +79 -0
  293. package/dist/chunk-FXDHDQTH.js.map +1 -0
  294. package/dist/chunk-FZET7XQV.js +169 -0
  295. package/dist/chunk-FZET7XQV.js.map +1 -0
  296. package/dist/chunk-GDYSB7SB.js +78 -0
  297. package/dist/chunk-GDYSB7SB.js.map +1 -0
  298. package/dist/chunk-GPM2PRC5.js +61 -0
  299. package/dist/chunk-GPM2PRC5.js.map +1 -0
  300. package/dist/chunk-GVGKISKD.js +170 -0
  301. package/dist/chunk-GVGKISKD.js.map +1 -0
  302. package/dist/chunk-I42UYWYA.mjs +128 -0
  303. package/dist/chunk-I42UYWYA.mjs.map +1 -0
  304. package/dist/chunk-I4TGI6U3.mjs +558 -0
  305. package/dist/chunk-I4TGI6U3.mjs.map +1 -0
  306. package/dist/chunk-I55QC57T.js +47 -0
  307. package/dist/chunk-I55QC57T.js.map +1 -0
  308. package/dist/chunk-I5TREZO5.js +263 -0
  309. package/dist/chunk-I5TREZO5.js.map +1 -0
  310. package/dist/chunk-IKXO5SJ4.js +671 -0
  311. package/dist/chunk-IKXO5SJ4.js.map +1 -0
  312. package/dist/chunk-IPUQBMAB.mjs +205 -0
  313. package/dist/chunk-IPUQBMAB.mjs.map +1 -0
  314. package/dist/chunk-IQ6QVIZ3.mjs +69 -0
  315. package/dist/chunk-IQ6QVIZ3.mjs.map +1 -0
  316. package/dist/{chunk-CARQELOX.mjs → chunk-ISXAUMRW.js} +8 -46
  317. package/dist/chunk-ISXAUMRW.js.map +1 -0
  318. package/dist/{chunk-WRHUWKZS.js → chunk-IULYVARJ.mjs} +3 -130
  319. package/dist/chunk-IULYVARJ.mjs.map +1 -0
  320. package/dist/chunk-J5LGTIGS.mjs +9 -0
  321. package/dist/chunk-J5LGTIGS.mjs.map +1 -0
  322. package/dist/chunk-J6XKTPP5.js +61 -0
  323. package/dist/chunk-J6XKTPP5.js.map +1 -0
  324. package/dist/{chunk-HI54NLVM.js → chunk-JF4BRFOG.mjs} +3 -128
  325. package/dist/chunk-JF4BRFOG.mjs.map +1 -0
  326. package/dist/{chunk-JGSQZZHF.js → chunk-JI3IEKH6.mjs} +3 -212
  327. package/dist/chunk-JI3IEKH6.mjs.map +1 -0
  328. package/dist/{chunk-6VZGM4DI.mjs → chunk-JTMRSRYD.js} +11 -118
  329. package/dist/chunk-JTMRSRYD.js.map +1 -0
  330. package/dist/{chunk-NUYNJV5U.mjs → chunk-JXSM2EHC.mjs} +3 -3
  331. package/dist/{chunk-NUYNJV5U.mjs.map → chunk-JXSM2EHC.mjs.map} +1 -1
  332. package/dist/chunk-KEGOUZL5.js +209 -0
  333. package/dist/chunk-KEGOUZL5.js.map +1 -0
  334. package/dist/{chunk-B3LCKPBX.js → chunk-KXNMW4NV.mjs} +3 -170
  335. package/dist/chunk-KXNMW4NV.mjs.map +1 -0
  336. package/dist/{chunk-OEDD43IT.mjs → chunk-L67EJJFN.js} +9 -68
  337. package/dist/chunk-L67EJJFN.js.map +1 -0
  338. package/dist/{chunk-7XHWUEQR.mjs → chunk-L6AS5AVO.js} +10 -250
  339. package/dist/chunk-L6AS5AVO.js.map +1 -0
  340. package/dist/chunk-L6PSW7JE.mjs +206 -0
  341. package/dist/chunk-L6PSW7JE.mjs.map +1 -0
  342. package/dist/{chunk-IW2E4MLG.js → chunk-LL2UY6CD.mjs} +3 -231
  343. package/dist/chunk-LL2UY6CD.mjs.map +1 -0
  344. package/dist/chunk-LLNK24MM.js +67 -0
  345. package/dist/chunk-LLNK24MM.js.map +1 -0
  346. package/dist/{chunk-UOZZUWIX.js → chunk-LS4GY2ZQ.js} +6 -6
  347. package/dist/{chunk-UOZZUWIX.js.map → chunk-LS4GY2ZQ.js.map} +1 -1
  348. package/dist/{chunk-XJFDGKZO.mjs → chunk-LU6VEI4B.js} +12 -204
  349. package/dist/chunk-LU6VEI4B.js.map +1 -0
  350. package/dist/chunk-MCYFKM7T.js +62 -0
  351. package/dist/chunk-MCYFKM7T.js.map +1 -0
  352. package/dist/chunk-MUKI3OHH.js +215 -0
  353. package/dist/chunk-MUKI3OHH.js.map +1 -0
  354. package/dist/chunk-N2RUT33F.mjs +68 -0
  355. package/dist/chunk-N2RUT33F.mjs.map +1 -0
  356. package/dist/chunk-NAHHFB2M.js +77 -0
  357. package/dist/chunk-NAHHFB2M.js.map +1 -0
  358. package/dist/chunk-NMBSK44H.mjs +44 -0
  359. package/dist/chunk-NMBSK44H.mjs.map +1 -0
  360. package/dist/chunk-NVTV3EQB.js +49 -0
  361. package/dist/chunk-NVTV3EQB.js.map +1 -0
  362. package/dist/chunk-NWMSIYZP.js +574 -0
  363. package/dist/chunk-NWMSIYZP.js.map +1 -0
  364. package/dist/{chunk-AFBKMQMK.js → chunk-NXNL64Q7.mjs} +3 -354
  365. package/dist/chunk-NXNL64Q7.mjs.map +1 -0
  366. package/dist/chunk-O23PJPGM.mjs +251 -0
  367. package/dist/chunk-O23PJPGM.mjs.map +1 -0
  368. package/dist/chunk-O6R6OQXI.mjs +204 -0
  369. package/dist/chunk-O6R6OQXI.mjs.map +1 -0
  370. package/dist/chunk-ODT5TFIT.mjs +156 -0
  371. package/dist/chunk-ODT5TFIT.mjs.map +1 -0
  372. package/dist/{chunk-VX56EVPF.mjs → chunk-OGMIKRLJ.js} +8 -98
  373. package/dist/chunk-OGMIKRLJ.js.map +1 -0
  374. package/dist/chunk-OOBA2MDD.mjs +57 -0
  375. package/dist/chunk-OOBA2MDD.mjs.map +1 -0
  376. package/dist/chunk-OPACTZGV.js +231 -0
  377. package/dist/chunk-OPACTZGV.js.map +1 -0
  378. package/dist/{chunk-PZBTZGJE.js → chunk-OQCI2IVL.mjs} +3 -271
  379. package/dist/chunk-OQCI2IVL.mjs.map +1 -0
  380. package/dist/{chunk-7PIOCFV3.mjs → chunk-P25NI2HG.js} +9 -124
  381. package/dist/chunk-P25NI2HG.js.map +1 -0
  382. package/dist/chunk-P2DQP4J4.js +424 -0
  383. package/dist/chunk-P2DQP4J4.js.map +1 -0
  384. package/dist/{chunk-KC77BXBC.js → chunk-P43A2BPU.mjs} +3 -215
  385. package/dist/chunk-P43A2BPU.mjs.map +1 -0
  386. package/dist/chunk-P54PZ72L.mjs +65 -0
  387. package/dist/chunk-P54PZ72L.mjs.map +1 -0
  388. package/dist/chunk-PAJYNQR3.mjs +150 -0
  389. package/dist/chunk-PAJYNQR3.mjs.map +1 -0
  390. package/dist/chunk-PKXDRTC7.js +264 -0
  391. package/dist/chunk-PKXDRTC7.js.map +1 -0
  392. package/dist/chunk-PNAFXOZC.mjs +69 -0
  393. package/dist/chunk-PNAFXOZC.mjs.map +1 -0
  394. package/dist/chunk-PUSCPBT2.mjs +46 -0
  395. package/dist/chunk-PUSCPBT2.mjs.map +1 -0
  396. package/dist/chunk-PZ5AY32C.js +11 -0
  397. package/dist/chunk-PZ5AY32C.js.map +1 -0
  398. package/dist/chunk-Q2NE2UAO.mjs +119 -0
  399. package/dist/chunk-Q2NE2UAO.mjs.map +1 -0
  400. package/dist/chunk-QDHARZDN.js +129 -0
  401. package/dist/chunk-QDHARZDN.js.map +1 -0
  402. package/dist/chunk-QIUVXTLE.mjs +60 -0
  403. package/dist/chunk-QIUVXTLE.mjs.map +1 -0
  404. package/dist/chunk-QKZR2UTL.mjs +125 -0
  405. package/dist/chunk-QKZR2UTL.mjs.map +1 -0
  406. package/dist/{chunk-O233I5N7.mjs → chunk-QTFOUK4H.js} +15 -149
  407. package/dist/chunk-QTFOUK4H.js.map +1 -0
  408. package/dist/chunk-QW2ZHKPC.mjs +64 -0
  409. package/dist/chunk-QW2ZHKPC.mjs.map +1 -0
  410. package/dist/{chunk-RFBTMJ2Z.mjs → chunk-R2256VSD.js} +16 -557
  411. package/dist/chunk-R2256VSD.js.map +1 -0
  412. package/dist/chunk-RYJ5WEE3.js +101 -0
  413. package/dist/chunk-RYJ5WEE3.js.map +1 -0
  414. package/dist/{chunk-YFXGRV7X.mjs → chunk-S4OSJ4ZN.js} +9 -155
  415. package/dist/chunk-S4OSJ4ZN.js.map +1 -0
  416. package/dist/{chunk-SRLYXLUU.js → chunk-SWU5U5BB.mjs} +3 -217
  417. package/dist/chunk-SWU5U5BB.mjs.map +1 -0
  418. package/dist/chunk-SYFTQAZG.mjs +58 -0
  419. package/dist/chunk-SYFTQAZG.mjs.map +1 -0
  420. package/dist/{chunk-JRB22VVK.js → chunk-T5SPR27V.mjs} +3 -166
  421. package/dist/chunk-T5SPR27V.mjs.map +1 -0
  422. package/dist/{chunk-KLGB3FYE.js → chunk-TD4W3AHI.mjs} +3 -263
  423. package/dist/chunk-TD4W3AHI.mjs.map +1 -0
  424. package/dist/chunk-TMFXI5FH.mjs +52 -0
  425. package/dist/chunk-TMFXI5FH.mjs.map +1 -0
  426. package/dist/{chunk-QCHHXFJQ.js → chunk-UJBXDDHN.mjs} +4 -102
  427. package/dist/chunk-UJBXDDHN.mjs.map +1 -0
  428. package/dist/chunk-USLP5NY6.js +69 -0
  429. package/dist/chunk-USLP5NY6.js.map +1 -0
  430. package/dist/{chunk-W73CZFMA.mjs → chunk-UU34Q42Q.js} +7 -201
  431. package/dist/chunk-UU34Q42Q.js.map +1 -0
  432. package/dist/chunk-V4FFKIX3.js +166 -0
  433. package/dist/chunk-V4FFKIX3.js.map +1 -0
  434. package/dist/{chunk-VGVB5XZX.js → chunk-V4U6Q5NL.mjs} +3 -204
  435. package/dist/chunk-V4U6Q5NL.mjs.map +1 -0
  436. package/dist/chunk-VQQHVKEU.mjs +652 -0
  437. package/dist/chunk-VQQHVKEU.mjs.map +1 -0
  438. package/dist/chunk-VUIWYURS.js +162 -0
  439. package/dist/chunk-VUIWYURS.js.map +1 -0
  440. package/dist/chunk-VWHER5XN.js +65 -0
  441. package/dist/chunk-VWHER5XN.js.map +1 -0
  442. package/dist/chunk-WBRTXAKP.js +705 -0
  443. package/dist/chunk-WBRTXAKP.js.map +1 -0
  444. package/dist/chunk-WN7XWKAS.mjs +52 -0
  445. package/dist/chunk-WN7XWKAS.mjs.map +1 -0
  446. package/dist/{chunk-XYKDSHRG.js → chunk-X3N4EVF7.mjs} +3 -707
  447. package/dist/chunk-X3N4EVF7.mjs.map +1 -0
  448. package/dist/chunk-XPHD3X4L.mjs +98 -0
  449. package/dist/chunk-XPHD3X4L.mjs.map +1 -0
  450. package/dist/chunk-Y4YQSCNL.js +65 -0
  451. package/dist/chunk-Y4YQSCNL.js.map +1 -0
  452. package/dist/chunk-Y73U7C4T.js +238 -0
  453. package/dist/chunk-Y73U7C4T.js.map +1 -0
  454. package/dist/{chunk-ENV73575.mjs → chunk-Y7NRTCAT.js} +10 -122
  455. package/dist/chunk-Y7NRTCAT.js.map +1 -0
  456. package/dist/{chunk-ZZ53RJNH.js → chunk-YDKAE7RM.mjs} +3 -69
  457. package/dist/chunk-YDKAE7RM.mjs.map +1 -0
  458. package/dist/{chunk-VO7LNOC5.mjs → chunk-YN4ZS3R2.js} +10 -257
  459. package/dist/chunk-YN4ZS3R2.js.map +1 -0
  460. package/dist/chunk-ZCTSXNAE.mjs +221 -0
  461. package/dist/chunk-ZCTSXNAE.mjs.map +1 -0
  462. package/dist/chunk-ZFNVFMWG.mjs +703 -0
  463. package/dist/chunk-ZFNVFMWG.mjs.map +1 -0
  464. package/dist/chunk-ZITS2V53.js +130 -0
  465. package/dist/chunk-ZITS2V53.js.map +1 -0
  466. package/dist/chunk-ZVRGLG35.js +144 -0
  467. package/dist/chunk-ZVRGLG35.js.map +1 -0
  468. package/dist/chunk-ZY6O6Z2I.mjs +350 -0
  469. package/dist/chunk-ZY6O6Z2I.mjs.map +1 -0
  470. package/dist/design-system/button.d.ts +1 -1
  471. package/dist/design-system/combobox.d.ts +124 -0
  472. package/dist/design-system/combobox.d.ts.map +1 -0
  473. package/dist/design-system/copy-button.d.ts +1 -1
  474. package/dist/design-system/facade.js +404 -0
  475. package/dist/design-system/facade.js.map +1 -0
  476. package/dist/design-system/facade.mjs +402 -0
  477. package/dist/design-system/facade.mjs.map +1 -0
  478. package/dist/design-system/index.d.ts +1 -0
  479. package/dist/design-system/index.d.ts.map +1 -1
  480. package/dist/design-system/tokens.js +1 -0
  481. package/dist/design-system/tokens.mjs +1 -0
  482. package/dist/hooks/index.d.ts +13 -0
  483. package/dist/hooks/index.d.ts.map +1 -1
  484. package/dist/hooks/useBodyScrollLock.js +1 -0
  485. package/dist/hooks/useBodyScrollLock.mjs +1 -0
  486. package/dist/hooks/useClickOutside.js +1 -0
  487. package/dist/hooks/useClickOutside.mjs +1 -0
  488. package/dist/hooks/useClipboard.js +1 -0
  489. package/dist/hooks/useClipboard.mjs +1 -0
  490. package/dist/hooks/useControllableState.js +1 -0
  491. package/dist/hooks/useControllableState.mjs +1 -0
  492. package/dist/hooks/useCookie/index.d.ts +2 -0
  493. package/dist/hooks/useCookie/index.d.ts.map +1 -0
  494. package/dist/hooks/useCookie/useCookie.d.ts +36 -0
  495. package/dist/hooks/useCookie/useCookie.d.ts.map +1 -0
  496. package/dist/hooks/useCookie.js +82 -0
  497. package/dist/hooks/useCookie.js.map +1 -0
  498. package/dist/hooks/useCookie.mjs +80 -0
  499. package/dist/hooks/useCookie.mjs.map +1 -0
  500. package/dist/hooks/useCountdown/index.d.ts +2 -0
  501. package/dist/hooks/useCountdown/index.d.ts.map +1 -0
  502. package/dist/hooks/useCountdown/useCountdown.d.ts +40 -0
  503. package/dist/hooks/useCountdown/useCountdown.d.ts.map +1 -0
  504. package/dist/hooks/useCountdown.js +60 -0
  505. package/dist/hooks/useCountdown.js.map +1 -0
  506. package/dist/hooks/useCountdown.mjs +58 -0
  507. package/dist/hooks/useCountdown.mjs.map +1 -0
  508. package/dist/hooks/useDebouncedValue.js +1 -1
  509. package/dist/hooks/useDebouncedValue.mjs +1 -1
  510. package/dist/hooks/useDisclosure.js +1 -0
  511. package/dist/hooks/useDisclosure.js.map +1 -1
  512. package/dist/hooks/useDisclosure.mjs +1 -0
  513. package/dist/hooks/useDisclosure.mjs.map +1 -1
  514. package/dist/hooks/useDocumentTitle.js +1 -1
  515. package/dist/hooks/useDocumentTitle.mjs +1 -1
  516. package/dist/hooks/useDynamicStepper.js +1 -0
  517. package/dist/hooks/useDynamicStepper.mjs +1 -0
  518. package/dist/hooks/useEventListener/index.d.ts +2 -0
  519. package/dist/hooks/useEventListener/index.d.ts.map +1 -0
  520. package/dist/hooks/useEventListener/useEventListener.d.ts +22 -0
  521. package/dist/hooks/useEventListener/useEventListener.d.ts.map +1 -0
  522. package/dist/hooks/useEventListener.js +45 -0
  523. package/dist/hooks/useEventListener.js.map +1 -0
  524. package/dist/hooks/useEventListener.mjs +43 -0
  525. package/dist/hooks/useEventListener.mjs.map +1 -0
  526. package/dist/hooks/useFocusManagement.js +1 -0
  527. package/dist/hooks/useFocusManagement.mjs +1 -0
  528. package/dist/hooks/useGeolocation/index.d.ts +2 -0
  529. package/dist/hooks/useGeolocation/index.d.ts.map +1 -0
  530. package/dist/hooks/useGeolocation/useGeolocation.d.ts +48 -0
  531. package/dist/hooks/useGeolocation/useGeolocation.d.ts.map +1 -0
  532. package/dist/hooks/useGeolocation.js +111 -0
  533. package/dist/hooks/useGeolocation.js.map +1 -0
  534. package/dist/hooks/useGeolocation.mjs +109 -0
  535. package/dist/hooks/useGeolocation.mjs.map +1 -0
  536. package/dist/hooks/useHotkeys/index.d.ts +2 -0
  537. package/dist/hooks/useHotkeys/index.d.ts.map +1 -0
  538. package/dist/hooks/useHotkeys/useHotkeys.d.ts +24 -0
  539. package/dist/hooks/useHotkeys/useHotkeys.d.ts.map +1 -0
  540. package/dist/hooks/useHotkeys.js +86 -0
  541. package/dist/hooks/useHotkeys.js.map +1 -0
  542. package/dist/hooks/useHotkeys.mjs +84 -0
  543. package/dist/hooks/useHotkeys.mjs.map +1 -0
  544. package/dist/hooks/useHover.js +1 -1
  545. package/dist/hooks/useHover.mjs +1 -1
  546. package/dist/hooks/useIdleTimeout/index.d.ts +2 -0
  547. package/dist/hooks/useIdleTimeout/index.d.ts.map +1 -0
  548. package/dist/hooks/useIdleTimeout/useIdleTimeout.d.ts +31 -0
  549. package/dist/hooks/useIdleTimeout/useIdleTimeout.d.ts.map +1 -0
  550. package/dist/hooks/useIdleTimeout.js +77 -0
  551. package/dist/hooks/useIdleTimeout.js.map +1 -0
  552. package/dist/hooks/useIdleTimeout.mjs +75 -0
  553. package/dist/hooks/useIdleTimeout.mjs.map +1 -0
  554. package/dist/hooks/useInView.js +1 -0
  555. package/dist/hooks/useInView.js.map +1 -1
  556. package/dist/hooks/useInView.mjs +1 -0
  557. package/dist/hooks/useInView.mjs.map +1 -1
  558. package/dist/hooks/useIntersectionObserver.js +1 -0
  559. package/dist/hooks/useIntersectionObserver.mjs +1 -0
  560. package/dist/hooks/useInterval/index.d.ts +2 -0
  561. package/dist/hooks/useInterval/index.d.ts.map +1 -0
  562. package/dist/hooks/useInterval/useInterval.d.ts +12 -0
  563. package/dist/hooks/useInterval/useInterval.d.ts.map +1 -0
  564. package/dist/hooks/useInterval.js +27 -0
  565. package/dist/hooks/useInterval.js.map +1 -0
  566. package/dist/hooks/useInterval.mjs +25 -0
  567. package/dist/hooks/useInterval.mjs.map +1 -0
  568. package/dist/hooks/useIsMounted.js +1 -1
  569. package/dist/hooks/useIsMounted.mjs +1 -1
  570. package/dist/hooks/useIsomorphicLayoutEffect.js +1 -0
  571. package/dist/hooks/useIsomorphicLayoutEffect.mjs +1 -0
  572. package/dist/hooks/useKeyPress/index.d.ts +2 -0
  573. package/dist/hooks/useKeyPress/index.d.ts.map +1 -0
  574. package/dist/hooks/useKeyPress/useKeyPress.d.ts +15 -0
  575. package/dist/hooks/useKeyPress/useKeyPress.d.ts.map +1 -0
  576. package/dist/hooks/useKeyPress.js +47 -0
  577. package/dist/hooks/useKeyPress.js.map +1 -0
  578. package/dist/hooks/useKeyPress.mjs +45 -0
  579. package/dist/hooks/useKeyPress.mjs.map +1 -0
  580. package/dist/hooks/useLocalStorage.js +1 -1
  581. package/dist/hooks/useLocalStorage.mjs +1 -1
  582. package/dist/hooks/useLongPress/index.d.ts +2 -0
  583. package/dist/hooks/useLongPress/index.d.ts.map +1 -0
  584. package/dist/hooks/useLongPress/useLongPress.d.ts +46 -0
  585. package/dist/hooks/useLongPress/useLongPress.d.ts.map +1 -0
  586. package/dist/hooks/useLongPress.js +116 -0
  587. package/dist/hooks/useLongPress.js.map +1 -0
  588. package/dist/hooks/useLongPress.mjs +114 -0
  589. package/dist/hooks/useLongPress.mjs.map +1 -0
  590. package/dist/hooks/useMediaQuery.js +1 -0
  591. package/dist/hooks/useMediaQuery.mjs +1 -0
  592. package/dist/hooks/useNetworkStatus.js +1 -1
  593. package/dist/hooks/useNetworkStatus.mjs +1 -1
  594. package/dist/hooks/usePageVisibility.js +1 -1
  595. package/dist/hooks/usePageVisibility.mjs +1 -1
  596. package/dist/hooks/usePagination.js +1 -0
  597. package/dist/hooks/usePagination.mjs +1 -0
  598. package/dist/hooks/usePrefersColorScheme.js +1 -0
  599. package/dist/hooks/usePrefersColorScheme.js.map +1 -1
  600. package/dist/hooks/usePrefersColorScheme.mjs +1 -0
  601. package/dist/hooks/usePrefersColorScheme.mjs.map +1 -1
  602. package/dist/hooks/usePrefersReducedMotion.js +1 -0
  603. package/dist/hooks/usePrefersReducedMotion.js.map +1 -1
  604. package/dist/hooks/usePrefersReducedMotion.mjs +1 -0
  605. package/dist/hooks/usePrefersReducedMotion.mjs.map +1 -1
  606. package/dist/hooks/usePrevious/index.d.ts +2 -0
  607. package/dist/hooks/usePrevious/index.d.ts.map +1 -0
  608. package/dist/hooks/usePrevious/usePrevious.d.ts +13 -0
  609. package/dist/hooks/usePrevious/usePrevious.d.ts.map +1 -0
  610. package/dist/hooks/usePrevious.js +17 -0
  611. package/dist/hooks/usePrevious.js.map +1 -0
  612. package/dist/hooks/usePrevious.mjs +15 -0
  613. package/dist/hooks/usePrevious.mjs.map +1 -0
  614. package/dist/hooks/useResizeObserver.js +1 -0
  615. package/dist/hooks/useResizeObserver.mjs +1 -0
  616. package/dist/hooks/useScrollPosition/index.d.ts +2 -0
  617. package/dist/hooks/useScrollPosition/index.d.ts.map +1 -0
  618. package/dist/hooks/useScrollPosition/useScrollPosition.d.ts +37 -0
  619. package/dist/hooks/useScrollPosition/useScrollPosition.d.ts.map +1 -0
  620. package/dist/hooks/useScrollPosition.js +41 -0
  621. package/dist/hooks/useScrollPosition.js.map +1 -0
  622. package/dist/hooks/useScrollPosition.mjs +39 -0
  623. package/dist/hooks/useScrollPosition.mjs.map +1 -0
  624. package/dist/hooks/useSessionStorage.js +1 -1
  625. package/dist/hooks/useSessionStorage.mjs +1 -1
  626. package/dist/hooks/useTableFilter.js +1 -1
  627. package/dist/hooks/useTableFilter.mjs +1 -1
  628. package/dist/hooks/useTableSort.js +1 -1
  629. package/dist/hooks/useTableSort.mjs +1 -1
  630. package/dist/hooks/useThrottledCallback.js +1 -1
  631. package/dist/hooks/useThrottledCallback.mjs +1 -1
  632. package/dist/hooks/useTimeout/index.d.ts +2 -0
  633. package/dist/hooks/useTimeout/index.d.ts.map +1 -0
  634. package/dist/hooks/useTimeout/useTimeout.d.ts +19 -0
  635. package/dist/hooks/useTimeout/useTimeout.d.ts.map +1 -0
  636. package/dist/hooks/useTimeout.js +38 -0
  637. package/dist/hooks/useTimeout.js.map +1 -0
  638. package/dist/hooks/useTimeout.mjs +36 -0
  639. package/dist/hooks/useTimeout.mjs.map +1 -0
  640. package/dist/hooks/useToggle.js +1 -1
  641. package/dist/hooks/useToggle.mjs +1 -1
  642. package/dist/hooks/useVirtualList/index.d.ts +2 -0
  643. package/dist/hooks/useVirtualList/index.d.ts.map +1 -0
  644. package/dist/hooks/useVirtualList/useVirtualList.d.ts +47 -0
  645. package/dist/hooks/useVirtualList/useVirtualList.d.ts.map +1 -0
  646. package/dist/hooks/useVirtualList.js +87 -0
  647. package/dist/hooks/useVirtualList.js.map +1 -0
  648. package/dist/hooks/useVirtualList.mjs +85 -0
  649. package/dist/hooks/useVirtualList.mjs.map +1 -0
  650. package/dist/hooks/useWindowSize.js +1 -1
  651. package/dist/hooks/useWindowSize.mjs +1 -1
  652. package/dist/hooks/utils.js +1 -0
  653. package/dist/hooks/utils.mjs +1 -0
  654. package/dist/lib/facade.d.ts +53 -0
  655. package/dist/lib/facade.d.ts.map +1 -0
  656. package/dist/ui/accordion/animated.js +9 -7
  657. package/dist/ui/accordion/animated.js.map +1 -1
  658. package/dist/ui/accordion/animated.mjs +4 -2
  659. package/dist/ui/accordion/animated.mjs.map +1 -1
  660. package/dist/ui/accordion.js +11 -9
  661. package/dist/ui/accordion.js.map +1 -1
  662. package/dist/ui/accordion.mjs +4 -2
  663. package/dist/ui/accordion.mjs.map +1 -1
  664. package/dist/ui/alert/animated.js +4 -2
  665. package/dist/ui/alert/animated.js.map +1 -1
  666. package/dist/ui/alert/animated.mjs +3 -1
  667. package/dist/ui/alert/animated.mjs.map +1 -1
  668. package/dist/ui/alert.js +12 -10
  669. package/dist/ui/alert.js.map +1 -1
  670. package/dist/ui/alert.mjs +4 -2
  671. package/dist/ui/alert.mjs.map +1 -1
  672. package/dist/ui/animated-number.js +5 -58
  673. package/dist/ui/animated-number.js.map +1 -1
  674. package/dist/ui/animated-number.mjs +2 -55
  675. package/dist/ui/animated-number.mjs.map +1 -1
  676. package/dist/ui/avatar/animated.js +7 -5
  677. package/dist/ui/avatar/animated.js.map +1 -1
  678. package/dist/ui/avatar/animated.mjs +4 -2
  679. package/dist/ui/avatar/animated.mjs.map +1 -1
  680. package/dist/ui/avatar.js +11 -9
  681. package/dist/ui/avatar.js.map +1 -1
  682. package/dist/ui/avatar.mjs +4 -2
  683. package/dist/ui/avatar.mjs.map +1 -1
  684. package/dist/ui/badge/animated.js +4 -2
  685. package/dist/ui/badge/animated.js.map +1 -1
  686. package/dist/ui/badge/animated.mjs +3 -1
  687. package/dist/ui/badge/animated.mjs.map +1 -1
  688. package/dist/ui/badge.js +6 -4
  689. package/dist/ui/badge.js.map +1 -1
  690. package/dist/ui/badge.mjs +4 -2
  691. package/dist/ui/badge.mjs.map +1 -1
  692. package/dist/ui/breadcrumb.js +10 -58
  693. package/dist/ui/breadcrumb.js.map +1 -1
  694. package/dist/ui/breadcrumb.mjs +2 -50
  695. package/dist/ui/breadcrumb.mjs.map +1 -1
  696. package/dist/ui/buttons/animated.js +44 -3
  697. package/dist/ui/buttons/animated.js.map +1 -1
  698. package/dist/ui/buttons/animated.mjs +42 -1
  699. package/dist/ui/buttons/animated.mjs.map +1 -1
  700. package/dist/ui/buttons.js +45 -4
  701. package/dist/ui/buttons.mjs +43 -2
  702. package/dist/ui/card/animated.js +9 -7
  703. package/dist/ui/card/animated.js.map +1 -1
  704. package/dist/ui/card/animated.mjs +4 -2
  705. package/dist/ui/card/animated.mjs.map +1 -1
  706. package/dist/ui/card.js +14 -12
  707. package/dist/ui/card.js.map +1 -1
  708. package/dist/ui/card.mjs +4 -2
  709. package/dist/ui/card.mjs.map +1 -1
  710. package/dist/ui/checkbox/animated.js +6 -4
  711. package/dist/ui/checkbox/animated.js.map +1 -1
  712. package/dist/ui/checkbox/animated.mjs +3 -1
  713. package/dist/ui/checkbox/animated.mjs.map +1 -1
  714. package/dist/ui/checkbox.js +10 -8
  715. package/dist/ui/checkbox.js.map +1 -1
  716. package/dist/ui/checkbox.mjs +4 -2
  717. package/dist/ui/checkbox.mjs.map +1 -1
  718. package/dist/ui/combobox/combobox-base.d.ts +37 -0
  719. package/dist/ui/combobox/combobox-base.d.ts.map +1 -0
  720. package/dist/ui/combobox/combobox.d.ts +6 -0
  721. package/dist/ui/combobox/combobox.d.ts.map +1 -0
  722. package/dist/ui/combobox/index.d.ts +4 -0
  723. package/dist/ui/combobox/index.d.ts.map +1 -0
  724. package/dist/ui/combobox/types.d.ts +70 -0
  725. package/dist/ui/combobox/types.d.ts.map +1 -0
  726. package/dist/ui/combobox/variants.d.ts +17 -0
  727. package/dist/ui/combobox/variants.d.ts.map +1 -0
  728. package/dist/ui/combobox.js +510 -0
  729. package/dist/ui/combobox.js.map +1 -0
  730. package/dist/ui/combobox.mjs +495 -0
  731. package/dist/ui/combobox.mjs.map +1 -0
  732. package/dist/ui/command/animated.js +4 -2
  733. package/dist/ui/command/animated.js.map +1 -1
  734. package/dist/ui/command/animated.mjs +3 -1
  735. package/dist/ui/command/animated.mjs.map +1 -1
  736. package/dist/ui/command.js +17 -15
  737. package/dist/ui/command.js.map +1 -1
  738. package/dist/ui/command.mjs +4 -2
  739. package/dist/ui/command.mjs.map +1 -1
  740. package/dist/ui/context-menu.js +9 -59
  741. package/dist/ui/context-menu.js.map +1 -1
  742. package/dist/ui/context-menu.mjs +3 -53
  743. package/dist/ui/context-menu.mjs.map +1 -1
  744. package/dist/ui/copy-button/animated.js +4 -2
  745. package/dist/ui/copy-button/animated.js.map +1 -1
  746. package/dist/ui/copy-button/animated.mjs +3 -1
  747. package/dist/ui/copy-button/animated.mjs.map +1 -1
  748. package/dist/ui/copy-button.js +5 -3
  749. package/dist/ui/copy-button.js.map +1 -1
  750. package/dist/ui/copy-button.mjs +4 -2
  751. package/dist/ui/copy-button.mjs.map +1 -1
  752. package/dist/ui/divider/animated.js +4 -2
  753. package/dist/ui/divider/animated.js.map +1 -1
  754. package/dist/ui/divider/animated.mjs +3 -1
  755. package/dist/ui/divider/animated.mjs.map +1 -1
  756. package/dist/ui/divider.js +8 -6
  757. package/dist/ui/divider.js.map +1 -1
  758. package/dist/ui/divider.mjs +4 -2
  759. package/dist/ui/divider.mjs.map +1 -1
  760. package/dist/ui/drawer/animated.js +13 -11
  761. package/dist/ui/drawer/animated.js.map +1 -1
  762. package/dist/ui/drawer/animated.mjs +4 -2
  763. package/dist/ui/drawer/animated.mjs.map +1 -1
  764. package/dist/ui/drawer.js +13 -11
  765. package/dist/ui/drawer.mjs +3 -1
  766. package/dist/ui/dropdown.js +1 -0
  767. package/dist/ui/dropdown.js.map +1 -1
  768. package/dist/ui/dropdown.mjs +1 -0
  769. package/dist/ui/dropdown.mjs.map +1 -1
  770. package/dist/ui/dynamic-stepper.js +54 -132
  771. package/dist/ui/dynamic-stepper.js.map +1 -1
  772. package/dist/ui/dynamic-stepper.mjs +43 -121
  773. package/dist/ui/dynamic-stepper.mjs.map +1 -1
  774. package/dist/ui/empty-state/animated.js +4 -2
  775. package/dist/ui/empty-state/animated.js.map +1 -1
  776. package/dist/ui/empty-state/animated.mjs +3 -1
  777. package/dist/ui/empty-state/animated.mjs.map +1 -1
  778. package/dist/ui/empty-state.js +12 -10
  779. package/dist/ui/empty-state.js.map +1 -1
  780. package/dist/ui/empty-state.mjs +4 -2
  781. package/dist/ui/empty-state.mjs.map +1 -1
  782. package/dist/ui/file-upload.js +4 -44
  783. package/dist/ui/file-upload.js.map +1 -1
  784. package/dist/ui/file-upload.mjs +2 -42
  785. package/dist/ui/file-upload.mjs.map +1 -1
  786. package/dist/ui/inputs/animated.js +5 -3
  787. package/dist/ui/inputs/animated.js.map +1 -1
  788. package/dist/ui/inputs/animated.mjs +3 -1
  789. package/dist/ui/inputs/animated.mjs.map +1 -1
  790. package/dist/ui/inputs.js +6 -4
  791. package/dist/ui/inputs.js.map +1 -1
  792. package/dist/ui/inputs.mjs +4 -2
  793. package/dist/ui/inputs.mjs.map +1 -1
  794. package/dist/ui/kbd/animated.js +4 -2
  795. package/dist/ui/kbd/animated.js.map +1 -1
  796. package/dist/ui/kbd/animated.mjs +3 -1
  797. package/dist/ui/kbd/animated.mjs.map +1 -1
  798. package/dist/ui/kbd.js +6 -4
  799. package/dist/ui/kbd.js.map +1 -1
  800. package/dist/ui/kbd.mjs +4 -2
  801. package/dist/ui/kbd.mjs.map +1 -1
  802. package/dist/ui/marquee.js +7 -68
  803. package/dist/ui/marquee.js.map +1 -1
  804. package/dist/ui/marquee.mjs +2 -63
  805. package/dist/ui/marquee.mjs.map +1 -1
  806. package/dist/ui/modal/animated.js +6 -4
  807. package/dist/ui/modal/animated.js.map +1 -1
  808. package/dist/ui/modal/animated.mjs +3 -1
  809. package/dist/ui/modal/animated.mjs.map +1 -1
  810. package/dist/ui/modal.js +14 -12
  811. package/dist/ui/modal.js.map +1 -1
  812. package/dist/ui/modal.mjs +4 -2
  813. package/dist/ui/modal.mjs.map +1 -1
  814. package/dist/ui/otp-input.js +11 -57
  815. package/dist/ui/otp-input.js.map +1 -1
  816. package/dist/ui/otp-input.mjs +2 -48
  817. package/dist/ui/otp-input.mjs.map +1 -1
  818. package/dist/ui/pagination.js +50 -95
  819. package/dist/ui/pagination.js.map +1 -1
  820. package/dist/ui/pagination.mjs +42 -87
  821. package/dist/ui/pagination.mjs.map +1 -1
  822. package/dist/ui/popover/animated.js +6 -4
  823. package/dist/ui/popover/animated.js.map +1 -1
  824. package/dist/ui/popover/animated.mjs +3 -1
  825. package/dist/ui/popover/animated.mjs.map +1 -1
  826. package/dist/ui/popover.js +9 -7
  827. package/dist/ui/popover.mjs +3 -1
  828. package/dist/ui/progress/animated.js +10 -8
  829. package/dist/ui/progress/animated.js.map +1 -1
  830. package/dist/ui/progress/animated.mjs +4 -2
  831. package/dist/ui/progress/animated.mjs.map +1 -1
  832. package/dist/ui/progress/variants.d.ts +2 -2
  833. package/dist/ui/progress.js +11 -9
  834. package/dist/ui/progress.js.map +1 -1
  835. package/dist/ui/progress.mjs +4 -2
  836. package/dist/ui/progress.mjs.map +1 -1
  837. package/dist/ui/radio-group/animated.js +9 -7
  838. package/dist/ui/radio-group/animated.js.map +1 -1
  839. package/dist/ui/radio-group/animated.mjs +3 -1
  840. package/dist/ui/radio-group/animated.mjs.map +1 -1
  841. package/dist/ui/radio-group.js +13 -11
  842. package/dist/ui/radio-group.js.map +1 -1
  843. package/dist/ui/radio-group.mjs +4 -2
  844. package/dist/ui/radio-group.mjs.map +1 -1
  845. package/dist/ui/rating.js +12 -74
  846. package/dist/ui/rating.js.map +1 -1
  847. package/dist/ui/rating.mjs +2 -64
  848. package/dist/ui/rating.mjs.map +1 -1
  849. package/dist/ui/scroll-area.js +8 -62
  850. package/dist/ui/scroll-area.js.map +1 -1
  851. package/dist/ui/scroll-area.mjs +2 -56
  852. package/dist/ui/scroll-area.mjs.map +1 -1
  853. package/dist/ui/search.js +4 -2
  854. package/dist/ui/search.js.map +1 -1
  855. package/dist/ui/search.mjs +3 -1
  856. package/dist/ui/search.mjs.map +1 -1
  857. package/dist/ui/select.js +12 -167
  858. package/dist/ui/select.js.map +1 -1
  859. package/dist/ui/select.mjs +2 -157
  860. package/dist/ui/select.mjs.map +1 -1
  861. package/dist/ui/skeleton/animated.js +10 -8
  862. package/dist/ui/skeleton/animated.js.map +1 -1
  863. package/dist/ui/skeleton/animated.mjs +3 -1
  864. package/dist/ui/skeleton/animated.mjs.map +1 -1
  865. package/dist/ui/skeleton.js +11 -9
  866. package/dist/ui/skeleton.mjs +3 -1
  867. package/dist/ui/slider.js +10 -75
  868. package/dist/ui/slider.js.map +1 -1
  869. package/dist/ui/slider.mjs +2 -67
  870. package/dist/ui/slider.mjs.map +1 -1
  871. package/dist/ui/spinner/animated.js +6 -66
  872. package/dist/ui/spinner/animated.js.map +1 -1
  873. package/dist/ui/spinner/animated.mjs +2 -62
  874. package/dist/ui/spinner/animated.mjs.map +1 -1
  875. package/dist/ui/table/animated.js +10 -8
  876. package/dist/ui/table/animated.js.map +1 -1
  877. package/dist/ui/table/animated.mjs +4 -2
  878. package/dist/ui/table/animated.mjs.map +1 -1
  879. package/dist/ui/table.js +16 -14
  880. package/dist/ui/table.mjs +3 -1
  881. package/dist/ui/tabs/animated.js +4 -2
  882. package/dist/ui/tabs/animated.js.map +1 -1
  883. package/dist/ui/tabs/animated.mjs +3 -1
  884. package/dist/ui/tabs/animated.mjs.map +1 -1
  885. package/dist/ui/tabs.js +11 -9
  886. package/dist/ui/tabs.mjs +3 -1
  887. package/dist/ui/timeline/animated.js +13 -11
  888. package/dist/ui/timeline/animated.js.map +1 -1
  889. package/dist/ui/timeline/animated.mjs +4 -2
  890. package/dist/ui/timeline/animated.mjs.map +1 -1
  891. package/dist/ui/timeline.js +16 -14
  892. package/dist/ui/timeline.js.map +1 -1
  893. package/dist/ui/timeline.mjs +4 -2
  894. package/dist/ui/timeline.mjs.map +1 -1
  895. package/dist/ui/toast/animated.js +9 -7
  896. package/dist/ui/toast/animated.js.map +1 -1
  897. package/dist/ui/toast/animated.mjs +3 -1
  898. package/dist/ui/toast/animated.mjs.map +1 -1
  899. package/dist/ui/toast.js +14 -12
  900. package/dist/ui/toast.mjs +3 -1
  901. package/dist/ui/toggle/animated.js +6 -4
  902. package/dist/ui/toggle/animated.js.map +1 -1
  903. package/dist/ui/toggle/animated.mjs +3 -1
  904. package/dist/ui/toggle/animated.mjs.map +1 -1
  905. package/dist/ui/toggle.js +6 -4
  906. package/dist/ui/toggle.js.map +1 -1
  907. package/dist/ui/toggle.mjs +4 -2
  908. package/dist/ui/toggle.mjs.map +1 -1
  909. package/dist/ui/tooltip/animated.js +5 -3
  910. package/dist/ui/tooltip/animated.js.map +1 -1
  911. package/dist/ui/tooltip/animated.mjs +3 -1
  912. package/dist/ui/tooltip/animated.mjs.map +1 -1
  913. package/dist/ui/tooltip.js +9 -7
  914. package/dist/ui/tooltip.mjs +3 -1
  915. package/dist/ui/tree-view/animated.js +4 -2
  916. package/dist/ui/tree-view/animated.js.map +1 -1
  917. package/dist/ui/tree-view/animated.mjs +3 -1
  918. package/dist/ui/tree-view/animated.mjs.map +1 -1
  919. package/dist/ui/tree-view.js +7 -5
  920. package/dist/ui/tree-view.js.map +1 -1
  921. package/dist/ui/tree-view.mjs +4 -2
  922. package/dist/ui/tree-view.mjs.map +1 -1
  923. package/dist/ui/typography.js +9 -51
  924. package/dist/ui/typography.js.map +1 -1
  925. package/dist/ui/typography.mjs +2 -44
  926. package/dist/ui/typography.mjs.map +1 -1
  927. package/package.json +7 -2
  928. package/src/design-system/button.ts +1 -1
  929. package/src/design-system/combobox.ts +204 -0
  930. package/src/design-system/copy-button.ts +1 -1
  931. package/src/design-system/index.ts +1 -0
  932. package/src/hooks/index.ts +50 -0
  933. package/src/hooks/useCookie/index.ts +5 -0
  934. package/src/hooks/useCookie/useCookie.test.ts +57 -0
  935. package/src/hooks/useCookie/useCookie.ts +133 -0
  936. package/src/hooks/useCountdown/index.ts +5 -0
  937. package/src/hooks/useCountdown/useCountdown.test.ts +113 -0
  938. package/src/hooks/useCountdown/useCountdown.ts +106 -0
  939. package/src/hooks/useEventListener/index.ts +4 -0
  940. package/src/hooks/useEventListener/useEventListener.test.ts +60 -0
  941. package/src/hooks/useEventListener/useEventListener.ts +98 -0
  942. package/src/hooks/useGeolocation/index.ts +6 -0
  943. package/src/hooks/useGeolocation/useGeolocation.test.ts +108 -0
  944. package/src/hooks/useGeolocation/useGeolocation.ts +173 -0
  945. package/src/hooks/useHotkeys/index.ts +5 -0
  946. package/src/hooks/useHotkeys/useHotkeys.test.ts +82 -0
  947. package/src/hooks/useHotkeys/useHotkeys.ts +130 -0
  948. package/src/hooks/useIdleTimeout/index.ts +5 -0
  949. package/src/hooks/useIdleTimeout/useIdleTimeout.test.ts +97 -0
  950. package/src/hooks/useIdleTimeout/useIdleTimeout.ts +111 -0
  951. package/src/hooks/useInterval/index.ts +1 -0
  952. package/src/hooks/useInterval/useInterval.test.ts +56 -0
  953. package/src/hooks/useInterval/useInterval.ts +36 -0
  954. package/src/hooks/useKeyPress/index.ts +1 -0
  955. package/src/hooks/useKeyPress/useKeyPress.test.ts +67 -0
  956. package/src/hooks/useKeyPress/useKeyPress.ts +65 -0
  957. package/src/hooks/useLongPress/index.ts +5 -0
  958. package/src/hooks/useLongPress/useLongPress.test.ts +180 -0
  959. package/src/hooks/useLongPress/useLongPress.ts +177 -0
  960. package/src/hooks/usePrevious/index.ts +1 -0
  961. package/src/hooks/usePrevious/usePrevious.test.ts +33 -0
  962. package/src/hooks/usePrevious/usePrevious.ts +24 -0
  963. package/src/hooks/useScrollPosition/index.ts +5 -0
  964. package/src/hooks/useScrollPosition/useScrollPosition.test.ts +69 -0
  965. package/src/hooks/useScrollPosition/useScrollPosition.ts +88 -0
  966. package/src/hooks/useTimeout/index.ts +1 -0
  967. package/src/hooks/useTimeout/useTimeout.test.ts +63 -0
  968. package/src/hooks/useTimeout/useTimeout.ts +58 -0
  969. package/src/hooks/useVirtualList/index.ts +6 -0
  970. package/src/hooks/useVirtualList/useVirtualList.test.ts +102 -0
  971. package/src/hooks/useVirtualList/useVirtualList.ts +144 -0
  972. package/src/lib/facade.test.ts +182 -0
  973. package/src/lib/facade.ts +809 -0
  974. package/src/ui/combobox/combobox-base.tsx +552 -0
  975. package/src/ui/combobox/combobox.test.tsx +292 -0
  976. package/src/ui/combobox/combobox.tsx +8 -0
  977. package/src/ui/combobox/index.ts +33 -0
  978. package/src/ui/combobox/types.ts +91 -0
  979. package/src/ui/combobox/variants.ts +58 -0
  980. package/dist/chunk-2RBUROXJ.js.map +0 -1
  981. package/dist/chunk-3IBWZM52.js.map +0 -1
  982. package/dist/chunk-3RHJJZIT.js +0 -98
  983. package/dist/chunk-3RHJJZIT.js.map +0 -1
  984. package/dist/chunk-4GVMPQZS.js.map +0 -1
  985. package/dist/chunk-4WRCXG5E.mjs.map +0 -1
  986. package/dist/chunk-6GPUHFXI.mjs.map +0 -1
  987. package/dist/chunk-6ONKAOI7.mjs.map +0 -1
  988. package/dist/chunk-6VZGM4DI.mjs.map +0 -1
  989. package/dist/chunk-7PIOCFV3.mjs.map +0 -1
  990. package/dist/chunk-7XHWUEQR.mjs.map +0 -1
  991. package/dist/chunk-AFBKMQMK.js.map +0 -1
  992. package/dist/chunk-AS34PVUG.mjs.map +0 -1
  993. package/dist/chunk-B3LCKPBX.js.map +0 -1
  994. package/dist/chunk-CARQELOX.mjs.map +0 -1
  995. package/dist/chunk-CCVQ5KX6.mjs +0 -96
  996. package/dist/chunk-CCVQ5KX6.mjs.map +0 -1
  997. package/dist/chunk-DBW25HOR.mjs.map +0 -1
  998. package/dist/chunk-DMDCXYNN.js.map +0 -1
  999. package/dist/chunk-EKLWWV3G.mjs.map +0 -1
  1000. package/dist/chunk-ENV73575.mjs.map +0 -1
  1001. package/dist/chunk-HI54NLVM.js.map +0 -1
  1002. package/dist/chunk-JGSQZZHF.js.map +0 -1
  1003. package/dist/chunk-JRB22VVK.js.map +0 -1
  1004. package/dist/chunk-KC77BXBC.js.map +0 -1
  1005. package/dist/chunk-KIAYTBS5.js.map +0 -1
  1006. package/dist/chunk-KLGB3FYE.js.map +0 -1
  1007. package/dist/chunk-O233I5N7.mjs.map +0 -1
  1008. package/dist/chunk-OEDD43IT.mjs.map +0 -1
  1009. package/dist/chunk-OY3YJGOX.mjs.map +0 -1
  1010. package/dist/chunk-PZBTZGJE.js.map +0 -1
  1011. package/dist/chunk-QCHHXFJQ.js.map +0 -1
  1012. package/dist/chunk-REDZL4DY.mjs.map +0 -1
  1013. package/dist/chunk-RFBTMJ2Z.mjs.map +0 -1
  1014. package/dist/chunk-S4NQTWMW.mjs.map +0 -1
  1015. package/dist/chunk-SRLYXLUU.js.map +0 -1
  1016. package/dist/chunk-U7FZ5RMV.js.map +0 -1
  1017. package/dist/chunk-UMXCV5IT.mjs.map +0 -1
  1018. package/dist/chunk-UNPKDNLA.js.map +0 -1
  1019. package/dist/chunk-URXYF25P.mjs.map +0 -1
  1020. package/dist/chunk-VGVB5XZX.js.map +0 -1
  1021. package/dist/chunk-VJSME7ML.js.map +0 -1
  1022. package/dist/chunk-VO7LNOC5.mjs.map +0 -1
  1023. package/dist/chunk-VX56EVPF.mjs.map +0 -1
  1024. package/dist/chunk-W73CZFMA.mjs.map +0 -1
  1025. package/dist/chunk-WRHUWKZS.js.map +0 -1
  1026. package/dist/chunk-WVBFSJEB.js.map +0 -1
  1027. package/dist/chunk-XIG2QDVN.js.map +0 -1
  1028. package/dist/chunk-XJFDGKZO.mjs.map +0 -1
  1029. package/dist/chunk-XOYCFLEZ.mjs.map +0 -1
  1030. package/dist/chunk-YFXGRV7X.mjs.map +0 -1
  1031. package/dist/chunk-ZZ53RJNH.js.map +0 -1
@@ -0,0 +1,809 @@
1
+ // Introspection API over the design-system token strings.
2
+ //
3
+ // This is metadata-only: it reads the exported `zui*` style constants and
4
+ // surfaces the `--zui-*` CSS variable contract behind each component, variant,
5
+ // and slot. It is NOT the runtime styling path — components keep wiring tokens
6
+ // through `cva()` directly. Use this for token discovery, docs tables, theme
7
+ // editors, CLI validation, and (later) design-tool export.
8
+ //
9
+ // DesignSystem.getComponent("accordion")
10
+ // .getVariant("appearance", "blue")
11
+ // .variables();
12
+
13
+ import * as tokens from "../design-system/index";
14
+
15
+ export type TokenTheme = "light" | "dark" | "shared";
16
+
17
+ export type ZuiVariable = {
18
+ name: `--zui-${string}`;
19
+ fallback: string;
20
+ theme: TokenTheme;
21
+ pairName?: `--zui-${string}`;
22
+ };
23
+
24
+ export type VariantHandle = {
25
+ /** Normalized group, e.g. "appearance", "size", or "base". */
26
+ group: string;
27
+ /** Variant key within the group, e.g. "blue", "md". For base groups: "base". */
28
+ key: string;
29
+ /** Slot the variant belongs to, e.g. "root", "item", "trigger". */
30
+ slot: string;
31
+ /** Raw Tailwind class string for the variant. */
32
+ className: string;
33
+ /** `--zui-*` variables referenced by the variant, with light/dark pairing. */
34
+ variables: () => ZuiVariable[];
35
+ };
36
+
37
+ export type ComponentHandle = {
38
+ slug: string;
39
+ title: string;
40
+ /** All slots that expose tokens, e.g. ["root", "item", "trigger"]. */
41
+ slots: () => string[];
42
+ /** Variant group names available on the root slot, e.g. ["appearance", "size"]. */
43
+ groups: () => string[];
44
+ /** Appearance keys for a slot (defaults to the root slot). */
45
+ appearances: (slot?: string) => string[];
46
+ /** Size keys for a slot (defaults to the root slot). */
47
+ sizes: (slot?: string) => string[];
48
+ /** Resolve a single variant. `group` accepts "appearance", "size", "base", … */
49
+ getVariant: (
50
+ group: string,
51
+ key: string,
52
+ options?: { slot?: string },
53
+ ) => VariantHandle | undefined;
54
+ /** All variants for a group (defaults to the root slot). */
55
+ variants: (group: string, options?: { slot?: string }) => VariantHandle[];
56
+ /** Every `--zui-*` variable the component references, deduped and paired. */
57
+ variables: () => ZuiVariable[];
58
+ };
59
+
60
+ type ComponentSpec = {
61
+ slug: string;
62
+ title: string;
63
+ /** Identifier stem of the `zui<Stem>…` exports backing this component. */
64
+ exportPrefix: string;
65
+ /**
66
+ * Identifier stems whose exports contribute this component's variables.
67
+ * Defaults to `[exportPrefix]`. Components that reuse another component's
68
+ * recipe (e.g. SearchBar → Input) or spread their tokens across several
69
+ * stems (e.g. Typography → Heading/Text/lists) widen this list.
70
+ */
71
+ variableStems: string[];
72
+ };
73
+
74
+ const componentSlugs = [
75
+ "accordion",
76
+ "alert",
77
+ "animated-number",
78
+ "avatar",
79
+ "badge",
80
+ "breadcrumb",
81
+ "buttons",
82
+ "card",
83
+ "checkbox",
84
+ "command",
85
+ "context-menu",
86
+ "copy-button",
87
+ "divider",
88
+ "drawer",
89
+ "dropdown",
90
+ "dynamic-stepper",
91
+ "empty-state",
92
+ "file-upload",
93
+ "inputs",
94
+ "kbd",
95
+ "marquee",
96
+ "modal",
97
+ "otp-input",
98
+ "pagination",
99
+ "popover",
100
+ "progress",
101
+ "radio-group",
102
+ "rating",
103
+ "scroll-area",
104
+ "search",
105
+ "select",
106
+ "skeleton",
107
+ "slider",
108
+ "spinner",
109
+ "table",
110
+ "tabs",
111
+ "timeline",
112
+ "toast",
113
+ "toggle",
114
+ "tooltip",
115
+ "tree-view",
116
+ "typography",
117
+ ] as const;
118
+
119
+ // Shared "recipe" exports that no single component owns. They are spread into a
120
+ // component's own token export (e.g. `zuiButtonLikeSolidAppearances` →
121
+ // `zuiBadgeAppearances`), so the owning component already gets their classes
122
+ // through that spread. The standalone export must be ignored, otherwise its
123
+ // identifier prefix mis-attributes it: `zuiButtonLikeSolidAppearances` starts
124
+ // with the `Button` stem yet references only `--zui-badge-*` variables, which
125
+ // would leak badge tokens into the Buttons model (and add a phantom variant).
126
+ const sharedRecipeExports = new Set(["zuiButtonLikeSolidAppearances"]);
127
+
128
+ // Slugs whose export stem(s) or title diverge from the slug itself.
129
+ const overrides: Record<
130
+ string,
131
+ { exportPrefix?: string; title?: string; variableStems?: string[] }
132
+ > = {
133
+ buttons: { exportPrefix: "Button" },
134
+ inputs: { exportPrefix: "Input" },
135
+ "otp-input": { exportPrefix: "Otp" },
136
+ // SearchBar has no tokens of its own — it renders the Input recipe.
137
+ search: { exportPrefix: "Input", title: "Search" },
138
+ // Typography spreads its tokens across heading/text/list stems.
139
+ typography: {
140
+ variableStems: ["Typography", "Heading", "Text", "Ordered", "Unordered"],
141
+ },
142
+ };
143
+
144
+ // Identifier suffix → normalized variant group name. Plural forms precede the
145
+ // singular so the longer suffix wins when both could match.
146
+ const groupSuffixes: Array<[suffix: string, group: string]> = [
147
+ ["Appearances", "appearance"],
148
+ ["Appearance", "appearance"],
149
+ ["Sizes", "size"],
150
+ ["Size", "size"],
151
+ ["Orientations", "orientation"],
152
+ ["Orientation", "orientation"],
153
+ ["Alignments", "alignment"],
154
+ ["Alignment", "alignment"],
155
+ ["Levels", "level"],
156
+ ["Level", "level"],
157
+ ["Tones", "tone"],
158
+ ["Tone", "tone"],
159
+ ["Variants", "variant"],
160
+ ["Variant", "variant"],
161
+ ["Speeds", "speed"],
162
+ ["Speed", "speed"],
163
+ ["Placements", "placement"],
164
+ ["Placement", "placement"],
165
+ ["Positions", "position"],
166
+ ["Position", "position"],
167
+ ["Animations", "animation"],
168
+ ["Animation", "animation"],
169
+ ["Shapes", "shape"],
170
+ ["Shape", "shape"],
171
+ ["Shadows", "shadow"],
172
+ ["Sides", "side"],
173
+ ["Side", "side"],
174
+ ["Widths", "width"],
175
+ ["Width", "width"],
176
+ ["Colors", "color"],
177
+ ["Color", "color"],
178
+ ["Rounded", "rounded"],
179
+ ["Spacing", "spacing"],
180
+ ["Visibility", "visibility"],
181
+ ["Markers", "marker"],
182
+ ];
183
+
184
+ function pascalCase(slug: string) {
185
+ return slug
186
+ .split("-")
187
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
188
+ .join("");
189
+ }
190
+
191
+ function titleCase(slug: string) {
192
+ return slug
193
+ .split("-")
194
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
195
+ .join(" ");
196
+ }
197
+
198
+ function kebabCase(value: string) {
199
+ return value
200
+ .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
201
+ .replace(/_/g, "-")
202
+ .toLowerCase();
203
+ }
204
+
205
+ const specs: ComponentSpec[] = componentSlugs.map((slug) => {
206
+ const override = overrides[slug] ?? {};
207
+ const exportPrefix = override.exportPrefix ?? pascalCase(slug);
208
+
209
+ return {
210
+ slug,
211
+ title: override.title ?? titleCase(slug),
212
+ exportPrefix,
213
+ variableStems: override.variableStems ?? [exportPrefix],
214
+ };
215
+ });
216
+
217
+ /**
218
+ * Does `name` belong to the `zui<stem>` export family? Uses the same uppercase
219
+ * boundary guard as {@link classifyExportName} so stem "Tab" doesn't claim
220
+ * "zuiTabsBase" (remainder "sBase" starts lowercase).
221
+ */
222
+ function nameMatchesStem(name: string, stem: string): boolean {
223
+ const full = `zui${stem}`;
224
+
225
+ if (!name.startsWith(full)) {
226
+ return false;
227
+ }
228
+
229
+ const remainder = name.slice(full.length);
230
+ return remainder.length === 0 || /^[A-Z]/.test(remainder);
231
+ }
232
+
233
+ // --- CSS variable parsing -------------------------------------------------
234
+
235
+ function readBalancedExpression(input: string, startIndex: number) {
236
+ let depth = 0;
237
+
238
+ for (let index = startIndex; index < input.length; index += 1) {
239
+ const char = input[index];
240
+
241
+ if (char === "(") {
242
+ depth += 1;
243
+ continue;
244
+ }
245
+
246
+ if (char === ")") {
247
+ depth -= 1;
248
+
249
+ if (depth === 0) {
250
+ return input.slice(startIndex + 1, index);
251
+ }
252
+ }
253
+ }
254
+
255
+ return "";
256
+ }
257
+
258
+ function findTopLevelComma(input: string) {
259
+ let depth = 0;
260
+
261
+ for (let index = 0; index < input.length; index += 1) {
262
+ const char = input[index];
263
+
264
+ if (char === "(") {
265
+ depth += 1;
266
+ continue;
267
+ }
268
+
269
+ if (char === ")") {
270
+ depth -= 1;
271
+ continue;
272
+ }
273
+
274
+ if (char === "," && depth === 0) {
275
+ return index;
276
+ }
277
+ }
278
+
279
+ return -1;
280
+ }
281
+
282
+ type RawVariable = { name: `--zui-${string}`; fallback: string };
283
+
284
+ /**
285
+ * Pull every `--zui-*` CSS variable (name + fallback) out of a Tailwind class
286
+ * string. A class string typically contains many `var(--name, fallback)`
287
+ * references mixed in with normal utility classes.
288
+ *
289
+ * It scans left-to-right for `var(` openings and, for each, reads the balanced
290
+ * parenthesised body so that nested `var()`/`oklch()` fallbacks don't confuse
291
+ * the parser. The body is split at the first *top-level* comma into name and
292
+ * fallback. Underscores in the fallback are converted to spaces because
293
+ * Tailwind's arbitrary-value syntax encodes spaces as `_`
294
+ * (e.g. `oklch(44.6%_0.043_257.281)`).
295
+ *
296
+ * Step by step:
297
+ * 1. Find the next `var(` from the current `searchIndex`; stop when none remain.
298
+ * 2. Read the balanced expression after `var` → the text inside the outermost
299
+ * parens (handles nested parens like `oklch(...)`).
300
+ * 3. Locate the first comma that sits at paren-depth 0 — the name/fallback split.
301
+ * 4. Slice out `name` (before the comma) and `fallback` (after it, `_`→space).
302
+ * No comma ⇒ the whole body is the name and the fallback is `""`.
303
+ * 5. Keep it only if `name` starts with `--zui-` (ignore non-design-system vars).
304
+ * 6. Advance `searchIndex` past this `var(` and loop.
305
+ *
306
+ * @param className - A Tailwind class string, e.g. a single variant's classes.
307
+ * @returns One entry per `--zui-*` reference, in source order. Duplicates are
308
+ * preserved here; deduping/pairing happens later in {@link classifyVariables}.
309
+ *
310
+ * @example
311
+ * parseRawVariables(
312
+ * "divide-[var(--zui-accordion-blue-divider,#2563eb)] " +
313
+ * "dark:divide-[var(--zui-accordion-blue-divider-dark,#3b82f6)]",
314
+ * );
315
+ * → [
316
+ * { name: "--zui-accordion-blue-divider", fallback: "#2563eb" },
317
+ * { name: "--zui-accordion-blue-divider-dark", fallback: "#3b82f6" },
318
+ * ]
319
+ *
320
+ * @example
321
+ * parseRawVariables("text-[color:var(--zui-x-fg,oklch(20.8%_0.04_265))]");
322
+ * → [{ name: "--zui-x-fg", fallback: "oklch(20.8% 0.04 265)" }]
323
+ * (note the underscores became spaces)
324
+ */
325
+ function parseRawVariables(className: string): RawVariable[] {
326
+ const variables: RawVariable[] = [];
327
+ let searchIndex = 0;
328
+
329
+ while (searchIndex < className.length) {
330
+ // 1. Find the next `var(` opening; bail out when there are none left.
331
+ const varIndex = className.indexOf("var(", searchIndex);
332
+
333
+ if (varIndex === -1) {
334
+ break;
335
+ }
336
+
337
+ // 2. Read the balanced body of this `var(...)`, tolerating nested parens.
338
+ const content = readBalancedExpression(className, varIndex + "var".length);
339
+ // 3. Split name vs. fallback at the first depth-0 comma.
340
+ const commaIndex = findTopLevelComma(content);
341
+ // 4. Extract the name and the (underscore-normalised) fallback.
342
+ const name =
343
+ commaIndex > -1 ? content.slice(0, commaIndex).trim() : content.trim();
344
+ const fallback =
345
+ commaIndex > -1
346
+ ? content
347
+ .slice(commaIndex + 1)
348
+ .trim()
349
+ .replace(/_/g, " ")
350
+ : "";
351
+
352
+ // 5. Keep only design-system variables.
353
+ if (name.startsWith("--zui-")) {
354
+ variables.push({ name: name as `--zui-${string}`, fallback });
355
+ }
356
+
357
+ // 6. Move past this `var(` and continue scanning.
358
+ searchIndex = varIndex + "var(".length;
359
+ }
360
+
361
+ return variables;
362
+ }
363
+
364
+ /**
365
+ * Turn a flat (possibly duplicated) list of raw variables into deduped
366
+ * {@link ZuiVariable}s annotated with theme + light/dark pairing.
367
+ *
368
+ * The library's token contract pairs a light variable with a `-dark` sibling
369
+ * inside the *same* class string (e.g. `--zui-x-bg` and `--zui-x-bg-dark`).
370
+ * This function detects those pairs so the docs/theme-editor can show "Light /
371
+ * Dark / Shared" badges and point each row at its counterpart.
372
+ *
373
+ * Step by step:
374
+ * 1. Dedupe by name into a Map, keeping the first sighting — but *upgrade* an
375
+ * empty fallback to a later non-empty one (different exports sometimes
376
+ * reference the same var with/without a fallback).
377
+ * 2. Build a Set of all surviving names so pair lookups are O(1).
378
+ * 3. For each variable, decide its base name: strip a trailing `-dark` if it is
379
+ * a dark token, otherwise the name is already the base.
380
+ * 4. Check whether the corresponding `${base}-dark` name exists in the set.
381
+ * 5. Assign a theme:
382
+ * - `dark` → the name ends in `-dark`.
383
+ * - `light` → not dark, but a `-dark` partner exists.
384
+ * - `shared` → not dark and no partner (a single theme-agnostic value).
385
+ * 6. Assign `pairName`: dark→its light base, light→its `-dark` partner,
386
+ * shared→`undefined`.
387
+ *
388
+ * @param raw - Output of {@link parseRawVariables} (order preserved, dupes ok).
389
+ * @returns Deduped variables with `theme` and optional `pairName`.
390
+ *
391
+ * @example
392
+ * classifyVariables([
393
+ * { name: "--zui-x-bg", fallback: "#fff" },
394
+ * { name: "--zui-x-bg-dark", fallback: "#000" },
395
+ * { name: "--zui-x-radius", fallback: "8px" },
396
+ * ]);
397
+ * → [
398
+ * { name: "--zui-x-bg", fallback: "#fff", theme: "light",
399
+ * pairName: "--zui-x-bg-dark" },
400
+ * { name: "--zui-x-bg-dark", fallback: "#000", theme: "dark",
401
+ * pairName: "--zui-x-bg" },
402
+ * { name: "--zui-x-radius", fallback: "8px", theme: "shared",
403
+ * pairName: undefined },
404
+ * ]
405
+ */
406
+ function classifyVariables(raw: RawVariable[]): ZuiVariable[] {
407
+ // 1. Dedupe by name; prefer a populated fallback over an empty one.
408
+ const byName = new Map<string, RawVariable>();
409
+
410
+ for (const variable of raw) {
411
+ const existing = byName.get(variable.name);
412
+
413
+ // Keep the first occurrence, but upgrade to a non-empty fallback.
414
+ if (!existing || (!existing.fallback && variable.fallback)) {
415
+ byName.set(variable.name, variable);
416
+ }
417
+ }
418
+
419
+ // 2. Index the names for fast pair lookups.
420
+ const names = new Set(byName.keys());
421
+
422
+ return [...byName.values()].map(({ name, fallback }) => {
423
+ // 3. Derive the light "base" name for this entry.
424
+ const isDark = name.endsWith("-dark");
425
+ const baseName = isDark
426
+ ? (name.replace(/-dark$/, "") as `--zui-${string}`)
427
+ : name;
428
+ // 4. Does the dark counterpart exist?
429
+ const darkName = `${baseName}-dark` as `--zui-${string}`;
430
+ const hasDarkPair = names.has(darkName);
431
+
432
+ // 5 + 6. Resolve theme and the paired variable name. A dark var only pairs
433
+ // back when its light base was actually parsed (dark-only refs stay
434
+ // unpaired rather than pointing at a non-existent variable).
435
+ const hasLightBase = names.has(baseName);
436
+
437
+ return {
438
+ name,
439
+ fallback,
440
+ theme: isDark ? "dark" : hasDarkPair ? "light" : "shared",
441
+ pairName: isDark
442
+ ? names.has(baseName)
443
+ ? baseName
444
+ : undefined
445
+ : hasDarkPair
446
+ ? darkName
447
+ : undefined,
448
+ } satisfies ZuiVariable;
449
+ });
450
+ }
451
+
452
+ // --- token-string collection ---------------------------------------------
453
+
454
+ const tokenEntries = Object.entries(tokens as Record<string, unknown>) as Array<
455
+ [string, unknown]
456
+ >;
457
+
458
+ function flattenClassStrings(value: unknown): string[] {
459
+ if (typeof value === "string") {
460
+ return [value];
461
+ }
462
+
463
+ if (Array.isArray(value)) {
464
+ return value.flatMap(flattenClassStrings);
465
+ }
466
+
467
+ if (value && typeof value === "object") {
468
+ return Object.values(value).flatMap(flattenClassStrings);
469
+ }
470
+
471
+ return [];
472
+ }
473
+
474
+ /** Variant-map exports: `{ key: className }` objects of plain strings. */
475
+ function isVariantMap(value: unknown): value is Record<string, string> {
476
+ return (
477
+ !!value &&
478
+ typeof value === "object" &&
479
+ !Array.isArray(value) &&
480
+ Object.values(value).every((entry) => typeof entry === "string")
481
+ );
482
+ }
483
+
484
+ /**
485
+ * Decode a design-system export identifier into the `{ group, slot }` it
486
+ * describes, or `undefined` if the name does not belong to this component.
487
+ *
488
+ * Token files name their exports by convention:
489
+ * `zui<ExportPrefix><Slot?><Group>` — e.g. `zuiAccordionBase`,
490
+ * `zuiAccordionAppearances`, `zuiAccordionItemAppearances`. This function
491
+ * reverses that convention: it strips the `zui<ExportPrefix>` stem, then reads
492
+ * the trailing group word (`Base`/`Appearances`/`Sizes`/…) and treats whatever
493
+ * is left in the middle as the slot ("root" when empty).
494
+ *
495
+ * Step by step:
496
+ * 1. Build the stem `zui<ExportPrefix>` and bail unless `name` starts with it.
497
+ * 2. Slice off the stem to get the `remainder` (the slot + group part).
498
+ * 3. Boundary guard: if the remainder is non-empty it must start with an
499
+ * uppercase letter, so prefix "Tab" cannot claim "zuiTabsBase"
500
+ * (remainder "sBase" starts lowercase → rejected).
501
+ * 4. Exact `"Base"` (or empty remainder) ⇒ the component's base group at the
502
+ * root slot.
503
+ * 5. A remainder *ending* in `Base` (e.g. "ItemBase") ⇒ base group, with the
504
+ * leading text ("Item") kebab-cased into the slot.
505
+ * 6. Otherwise match the remainder's trailing word against {@link groupSuffixes}
506
+ * (Appearances→appearance, Sizes→size, …); the leading text becomes the slot.
507
+ * 7. No recognised suffix ⇒ `undefined` (not a classifiable export).
508
+ *
509
+ * @param exportPrefix - The component's PascalCase export prefix, e.g. "Accordion".
510
+ * @param name - A token export identifier, e.g. "zuiAccordionItemAppearances".
511
+ * @returns `{ group, slot }` describing the export, or `undefined`.
512
+ *
513
+ * @example
514
+ * classifyExportName("Accordion", "zuiAccordionBase");
515
+ * → { group: "base", slot: "root" }
516
+ *
517
+ * @example
518
+ * classifyExportName("Accordion", "zuiAccordionItemAppearances");
519
+ * → { group: "appearance", slot: "item" }
520
+ *
521
+ * @example
522
+ * classifyExportName("Tab", "zuiTabsBase");
523
+ * → undefined (remainder "sBase" fails the uppercase boundary guard)
524
+ */
525
+ function classifyExportName(exportPrefix: string, name: string) {
526
+ // 1. Only consider exports under this component's `zui<ExportPrefix>` stem.
527
+ const stem = `zui${exportPrefix}`;
528
+
529
+ if (!name.startsWith(stem)) {
530
+ return undefined;
531
+ }
532
+
533
+ // 2. The slot + group portion that follows the stem.
534
+ const remainder = name.slice(stem.length);
535
+
536
+ // 3. Boundary guard: avoid e.g. exportPrefix "Tab" claiming "zuiTabsBase".
537
+ if (remainder.length > 0 && !/^[A-Z]/.test(remainder)) {
538
+ return undefined;
539
+ }
540
+
541
+ // 4. Bare base export (`zui<Prefix>Base`, or the prefix alone) → root slot.
542
+ if (remainder === "Base" || remainder === "") {
543
+ const slotPart = remainder === "Base" ? "" : remainder;
544
+ return { group: "base", slot: slotPart ? kebabCase(slotPart) : "root" };
545
+ }
546
+
547
+ // 5. Slot-scoped base export (`zui<Prefix><Slot>Base`) → that slot's base.
548
+ if (remainder.endsWith("Base")) {
549
+ const slotPart = remainder.slice(0, -"Base".length);
550
+ return { group: "base", slot: slotPart ? kebabCase(slotPart) : "root" };
551
+ }
552
+
553
+ // 6. Variant export: match the trailing group word; leading text = slot.
554
+ for (const [suffix, group] of groupSuffixes) {
555
+ if (remainder.endsWith(suffix)) {
556
+ const slotPart = remainder.slice(0, -suffix.length);
557
+ return { group, slot: slotPart ? kebabCase(slotPart) : "root" };
558
+ }
559
+ }
560
+
561
+ // 7. Recognised stem but no recognised group word — not classifiable.
562
+ return undefined;
563
+ }
564
+
565
+ type GroupRecord = {
566
+ group: string;
567
+ slot: string;
568
+ /** key → className. Base groups use a single "base" key. */
569
+ entries: Record<string, string>;
570
+ };
571
+
572
+ // --- per-component models (built once, lazily) ----------------------------
573
+
574
+ type ComponentModel = {
575
+ spec: ComponentSpec;
576
+ groups: GroupRecord[];
577
+ variables: ZuiVariable[];
578
+ };
579
+
580
+ const models = new Map<string, ComponentModel>();
581
+ let initialized = false;
582
+
583
+ /**
584
+ * Build every component model in a single pass over the design-system exports.
585
+ *
586
+ * The earlier design rebuilt one component at a time, and each rebuild walked
587
+ * *all* token exports running the (relatively heavy) {@link parseRawVariables}
588
+ * over them — so listing 40+ components re-parsed the same strings 40+ times
589
+ * (`O(components × exports)`). This pass parses each export's class strings
590
+ * exactly once and fans the result out to whichever components claim it, which
591
+ * is `O(exports)` for the expensive parsing.
592
+ *
593
+ * Two things are derived per export, keyed differently:
594
+ * - **Variables** — collected from the exports whose identifier matches one of
595
+ * the component's {@link ComponentSpec.variableStems}. Scoping to the
596
+ * component's *own* exports (rather than a shared `--zui-*` value prefix)
597
+ * keeps ContextMenu from absorbing Dropdown's trigger tokens, and lets
598
+ * SearchBar borrow the Input recipe.
599
+ * - **Groups** — classified from the export *identifier* via
600
+ * {@link classifyExportName}, keyed off the primary `exportPrefix`.
601
+ *
602
+ * Step by step:
603
+ * 1. Seed an accumulator (groups + raw variables) for every spec.
604
+ * 2. For each export, flatten its class strings and parse their `--zui-*`
605
+ * variables a single time.
606
+ * 3. For each spec: if the export sits under one of its variable stems, add the
607
+ * parsed variables; independently, classify the identifier into a group.
608
+ * 4. A `base` classification ⇒ a single-entry group of the merged class string;
609
+ * a variant-map classification ⇒ a group keyed by variant name.
610
+ * 5. Freeze each accumulator into a model (variables deduped + light/dark
611
+ * paired via {@link classifyVariables}) and cache it.
612
+ */
613
+ function initializeModels(): void {
614
+ if (initialized) {
615
+ return;
616
+ }
617
+ initialized = true;
618
+
619
+ const accumulators = new Map<
620
+ string,
621
+ { groups: GroupRecord[]; rawVariables: RawVariable[] }
622
+ >();
623
+
624
+ // 1. One accumulator per component.
625
+ for (const spec of specs) {
626
+ accumulators.set(spec.slug, { groups: [], rawVariables: [] });
627
+ }
628
+
629
+ // 2. Parse each export's class strings exactly once.
630
+ for (const [name, value] of tokenEntries) {
631
+ // Shared recipes are already folded into their owner's export — skip the
632
+ // standalone copy so its prefix doesn't mis-attribute it (see above).
633
+ if (sharedRecipeExports.has(name)) {
634
+ continue;
635
+ }
636
+
637
+ const classNames = flattenClassStrings(value);
638
+ const parsedVariables = classNames.flatMap(parseRawVariables);
639
+
640
+ // 3. Distribute the parsed result to whichever components claim it.
641
+ for (const spec of specs) {
642
+ const accumulator = accumulators.get(spec.slug)!;
643
+
644
+ // Variables: any export under one of the component's stems contributes.
645
+ if (spec.variableStems.some((stem) => nameMatchesStem(name, stem))) {
646
+ accumulator.rawVariables.push(...parsedVariables);
647
+ }
648
+
649
+ // Groups: classify the identifier against the primary export prefix.
650
+ const classification = classifyExportName(spec.exportPrefix, name);
651
+
652
+ if (!classification) {
653
+ continue;
654
+ }
655
+
656
+ // 4. Base export → one merged-string group; variant map → keyed group.
657
+ if (classification.group === "base") {
658
+ accumulator.groups.push({
659
+ group: "base",
660
+ slot: classification.slot,
661
+ entries: { base: classNames.join(" ") },
662
+ });
663
+ } else if (isVariantMap(value)) {
664
+ accumulator.groups.push({
665
+ group: classification.group,
666
+ slot: classification.slot,
667
+ entries: { ...value },
668
+ });
669
+ }
670
+ }
671
+ }
672
+
673
+ // 5. Freeze each accumulator into a cached model.
674
+ for (const spec of specs) {
675
+ const accumulator = accumulators.get(spec.slug)!;
676
+ models.set(spec.slug, {
677
+ spec,
678
+ groups: accumulator.groups,
679
+ variables: classifyVariables(accumulator.rawVariables),
680
+ });
681
+ }
682
+ }
683
+
684
+ function getModel(slug: string): ComponentModel | undefined {
685
+ initializeModels();
686
+ return models.get(slug);
687
+ }
688
+
689
+ // --- public handles -------------------------------------------------------
690
+
691
+ function createVariantHandle(group: GroupRecord, key: string): VariantHandle {
692
+ const className = group.entries[key] ?? "";
693
+
694
+ return {
695
+ group: group.group,
696
+ key,
697
+ slot: group.slot,
698
+ className,
699
+ variables: () => classifyVariables(parseRawVariables(className)),
700
+ };
701
+ }
702
+
703
+ /**
704
+ * Wrap a built {@link ComponentModel} in the public {@link ComponentHandle} — the
705
+ * ergonomic, lazy query surface returned by `DesignSystem.getComponent(...)`.
706
+ * The handle holds no data of its own; every method is a thin lookup over the
707
+ * model's `groups`/`variables`, so handles are cheap to recreate.
708
+ *
709
+ * Step by step:
710
+ * 1. Destructure the model into `spec`, `groups`, and `variables`.
711
+ * 2. Define `findGroup(group, slot)` — locate the one group record matching both
712
+ * a group name ("appearance"/"size"/"base") and a slot ("root"/"item"/…).
713
+ * 3. Define `keysFor(group, slot)` — the variant keys of that record, or `[]`.
714
+ * 4. Return the handle:
715
+ * - `slug`/`title` come straight from the spec.
716
+ * - `slots()` → the unique slot names across all groups.
717
+ * - `groups()` → the group names available on the root slot.
718
+ * - `appearances(slot)`/`sizes(slot)` → variant keys (default slot "root").
719
+ * - `getVariant(group, key, opts)` → a {@link VariantHandle}, or `undefined`
720
+ * when the group/slot/key triple doesn't exist.
721
+ * - `variants(group, opts)` → handles for every key in that group ([] if none).
722
+ * - `variables()` → the component's deduped, theme-paired variables.
723
+ *
724
+ * @param model - The component's built model (see {@link initializeModels}).
725
+ * @returns A {@link ComponentHandle} exposing the lazy query methods.
726
+ *
727
+ * @example
728
+ * const accordion = DesignSystem.getComponent("accordion")!;
729
+ * accordion.slug; // → "accordion"
730
+ * accordion.slots(); // → ["root", "item", "trigger", "content"]
731
+ * accordion.appearances(); // → ["default", "blue", "outline"]
732
+ * accordion.appearances("item"); // → ["blue", …]
733
+ * accordion.getVariant("appearance", "blue");
734
+ * → VariantHandle { group: "appearance", key: "blue", slot: "root", className, variables() }
735
+ * accordion.getVariant("appearance", "nope"); // → undefined
736
+ */
737
+ function createComponentHandle(model: ComponentModel): ComponentHandle {
738
+ // 1. Pull the model apart; the methods below close over these.
739
+ const { spec, groups, variables } = model;
740
+
741
+ // 2. Find the single group record for a (group, slot) pair.
742
+ const findGroup = (group: string, slot: string) =>
743
+ groups.find((entry) => entry.group === group && entry.slot === slot);
744
+
745
+ // 3. The variant keys of that record (empty when the record is missing).
746
+ const keysFor = (group: string, slot: string) => {
747
+ const record = findGroup(group, slot);
748
+ return record ? Object.keys(record.entries) : [];
749
+ };
750
+
751
+ // 4. Assemble the lazy query surface.
752
+ return {
753
+ slug: spec.slug,
754
+ title: spec.title,
755
+ slots: () => [...new Set(groups.map((entry) => entry.slot))],
756
+ groups: () =>
757
+ groups
758
+ .filter((entry) => entry.slot === "root")
759
+ .map((entry) => entry.group),
760
+ appearances: (slot = "root") => keysFor("appearance", slot),
761
+ sizes: (slot = "root") => keysFor("size", slot),
762
+ getVariant: (group, key, options) => {
763
+ const record = findGroup(group, options?.slot ?? "root");
764
+
765
+ if (!record || !(key in record.entries)) {
766
+ return undefined;
767
+ }
768
+
769
+ return createVariantHandle(record, key);
770
+ },
771
+ variants: (group, options) => {
772
+ const record = findGroup(group, options?.slot ?? "root");
773
+
774
+ if (!record) {
775
+ return [];
776
+ }
777
+
778
+ return Object.keys(record.entries).map((key) =>
779
+ createVariantHandle(record, key),
780
+ );
781
+ },
782
+ variables: () => variables,
783
+ };
784
+ }
785
+
786
+ export const DesignSystem = {
787
+ /** All component slugs known to the design system. */
788
+ components(): string[] {
789
+ return specs.map((spec) => spec.slug);
790
+ },
791
+ /** Resolve a single component, or `undefined` if the slug is unknown. */
792
+ getComponent(slug: string): ComponentHandle | undefined {
793
+ const model = getModel(slug);
794
+ return model ? createComponentHandle(model) : undefined;
795
+ },
796
+ /** Every component handle, in registry order. */
797
+ listComponents(): ComponentHandle[] {
798
+ return specs
799
+ .map((spec) => getModel(spec.slug))
800
+ .filter((model): model is ComponentModel => Boolean(model))
801
+ .map(createComponentHandle);
802
+ },
803
+ /** Parse `--zui-*` variables out of an arbitrary class string. */
804
+ parse(className: string): ZuiVariable[] {
805
+ return classifyVariables(parseRawVariables(className));
806
+ },
807
+ };
808
+
809
+ export type DesignSystemFacade = typeof DesignSystem;