@zentauri-ui/zentauri-components 1.4.6 → 1.4.7

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 (682) hide show
  1. package/README.md +136 -90
  2. package/cli/index.mjs +45 -26
  3. package/cli/registry.json +9 -1
  4. package/cli/rewrite-imports.mjs +8 -3
  5. package/dist/charts/area/Area.d.ts +6 -0
  6. package/dist/charts/area/Area.d.ts.map +1 -0
  7. package/dist/charts/area/index.d.ts +4 -0
  8. package/dist/charts/area/index.d.ts.map +1 -0
  9. package/dist/charts/area.js +119 -0
  10. package/dist/charts/area.js.map +1 -0
  11. package/dist/charts/area.mjs +106 -0
  12. package/dist/charts/area.mjs.map +1 -0
  13. package/dist/charts/bar/Bar.d.ts +6 -0
  14. package/dist/charts/bar/Bar.d.ts.map +1 -0
  15. package/dist/charts/bar/index.d.ts +4 -0
  16. package/dist/charts/bar/index.d.ts.map +1 -0
  17. package/dist/charts/bar.js +110 -0
  18. package/dist/charts/bar.js.map +1 -0
  19. package/dist/charts/bar.mjs +97 -0
  20. package/dist/charts/bar.mjs.map +1 -0
  21. package/dist/charts/bubble/Bubble.d.ts +6 -0
  22. package/dist/charts/bubble/Bubble.d.ts.map +1 -0
  23. package/dist/charts/bubble/index.d.ts +4 -0
  24. package/dist/charts/bubble/index.d.ts.map +1 -0
  25. package/dist/charts/bubble.js +122 -0
  26. package/dist/charts/bubble.js.map +1 -0
  27. package/dist/charts/bubble.mjs +109 -0
  28. package/dist/charts/bubble.mjs.map +1 -0
  29. package/dist/charts/line/Line.d.ts +6 -0
  30. package/dist/charts/line/Line.d.ts.map +1 -0
  31. package/dist/charts/line/index.d.ts +4 -0
  32. package/dist/charts/line/index.d.ts.map +1 -0
  33. package/dist/charts/line.js +113 -0
  34. package/dist/charts/line.js.map +1 -0
  35. package/dist/charts/line.mjs +100 -0
  36. package/dist/charts/line.mjs.map +1 -0
  37. package/dist/charts/shared/chart-frame.d.ts +32 -0
  38. package/dist/charts/shared/chart-frame.d.ts.map +1 -0
  39. package/dist/charts/shared/colors.d.ts +43 -0
  40. package/dist/charts/shared/colors.d.ts.map +1 -0
  41. package/dist/charts/shared/types.d.ts +43 -0
  42. package/dist/charts/shared/types.d.ts.map +1 -0
  43. package/dist/charts/shared/variants.d.ts +93 -0
  44. package/dist/charts/shared/variants.d.ts.map +1 -0
  45. package/dist/{chunk-IXDJ3IPG.mjs → chunk-2BAMNRAL.mjs} +40 -32
  46. package/dist/chunk-2BAMNRAL.mjs.map +1 -0
  47. package/dist/{chunk-JE3PD5ZA.js → chunk-2VUMVDR3.js} +8 -8
  48. package/dist/{chunk-JE3PD5ZA.js.map → chunk-2VUMVDR3.js.map} +1 -1
  49. package/dist/{chunk-DFEZH7TC.mjs → chunk-4D54YOL6.mjs} +2 -2
  50. package/dist/{chunk-DFEZH7TC.mjs.map → chunk-4D54YOL6.mjs.map} +1 -1
  51. package/dist/{chunk-BORK3BJO.mjs → chunk-5TV7EL3H.mjs} +19 -19
  52. package/dist/chunk-5TV7EL3H.mjs.map +1 -0
  53. package/dist/{chunk-BSWYZTYK.js → chunk-7DCFVPWN.js} +2 -2
  54. package/dist/chunk-7DCFVPWN.js.map +1 -0
  55. package/dist/{chunk-5QB2KNZQ.js → chunk-7TLKLMBM.js} +11 -9
  56. package/dist/chunk-7TLKLMBM.js.map +1 -0
  57. package/dist/{chunk-2P3UU2J3.mjs → chunk-A6KMZ5ZS.mjs} +12 -12
  58. package/dist/chunk-A6KMZ5ZS.mjs.map +1 -0
  59. package/dist/{chunk-U4YQCAXW.js → chunk-AD2LA3XN.js} +18 -18
  60. package/dist/chunk-AD2LA3XN.js.map +1 -0
  61. package/dist/{chunk-XLAFQ24R.js → chunk-AUGLZ3AN.js} +49 -41
  62. package/dist/chunk-AUGLZ3AN.js.map +1 -0
  63. package/dist/{chunk-OJ67PZ6N.js → chunk-BCZIYH53.js} +8 -8
  64. package/dist/{chunk-OJ67PZ6N.js.map → chunk-BCZIYH53.js.map} +1 -1
  65. package/dist/{chunk-UBFKTC2P.mjs → chunk-C5L465FW.mjs} +12 -12
  66. package/dist/chunk-C5L465FW.mjs.map +1 -0
  67. package/dist/chunk-CIN5JDN4.js +174 -0
  68. package/dist/chunk-CIN5JDN4.js.map +1 -0
  69. package/dist/{chunk-3OR47XMY.js → chunk-E4FZY7O2.js} +52 -33
  70. package/dist/chunk-E4FZY7O2.js.map +1 -0
  71. package/dist/{chunk-LVUPECBT.mjs → chunk-FQBMIZH2.mjs} +12 -12
  72. package/dist/chunk-FQBMIZH2.mjs.map +1 -0
  73. package/dist/{chunk-RDSPHBHK.mjs → chunk-G3LEYBRV.mjs} +50 -7
  74. package/dist/chunk-G3LEYBRV.mjs.map +1 -0
  75. package/dist/chunk-GBWGVNDA.js +160 -0
  76. package/dist/chunk-GBWGVNDA.js.map +1 -0
  77. package/dist/{chunk-XWM2S6VV.mjs → chunk-I6GR234Z.mjs} +22 -20
  78. package/dist/chunk-I6GR234Z.mjs.map +1 -0
  79. package/dist/{chunk-UXGHUBNJ.mjs → chunk-INMNX3HQ.mjs} +13 -13
  80. package/dist/{chunk-UXGHUBNJ.mjs.map → chunk-INMNX3HQ.mjs.map} +1 -1
  81. package/dist/chunk-IQZROQNJ.mjs +165 -0
  82. package/dist/chunk-IQZROQNJ.mjs.map +1 -0
  83. package/dist/{chunk-PGH27VTL.mjs → chunk-JBAUEGYD.mjs} +40 -32
  84. package/dist/chunk-JBAUEGYD.mjs.map +1 -0
  85. package/dist/{chunk-WZKGRU3U.js → chunk-JUDMPOCI.js} +103 -38
  86. package/dist/chunk-JUDMPOCI.js.map +1 -0
  87. package/dist/chunk-K6YI4FJO.mjs +158 -0
  88. package/dist/chunk-K6YI4FJO.mjs.map +1 -0
  89. package/dist/{chunk-WP7GYBRI.js → chunk-KC5LEZ6J.js} +2 -2
  90. package/dist/chunk-KC5LEZ6J.js.map +1 -0
  91. package/dist/{chunk-BVXTOEBI.mjs → chunk-LN77JJTY.mjs} +45 -26
  92. package/dist/chunk-LN77JJTY.mjs.map +1 -0
  93. package/dist/{chunk-E3DZNJAD.js → chunk-MCOQHXRW.js} +23 -21
  94. package/dist/chunk-MCOQHXRW.js.map +1 -0
  95. package/dist/{chunk-FLILFCQE.mjs → chunk-MTLLJFUI.mjs} +7 -8
  96. package/dist/chunk-MTLLJFUI.mjs.map +1 -0
  97. package/dist/{chunk-6I7X5BF2.js → chunk-N2OAI2HN.js} +18 -18
  98. package/dist/chunk-N2OAI2HN.js.map +1 -0
  99. package/dist/{chunk-BITDSQMR.js → chunk-OB4KJZK2.js} +19 -19
  100. package/dist/chunk-OB4KJZK2.js.map +1 -0
  101. package/dist/{chunk-PCK6LX3K.js → chunk-OLEMP2HL.js} +19 -19
  102. package/dist/{chunk-PCK6LX3K.js.map → chunk-OLEMP2HL.js.map} +1 -1
  103. package/dist/{chunk-2PQEXQVR.js → chunk-PWL5WD34.js} +76 -27
  104. package/dist/chunk-PWL5WD34.js.map +1 -0
  105. package/dist/{chunk-N4NO3SYL.js → chunk-Q5B44QW7.js} +48 -40
  106. package/dist/chunk-Q5B44QW7.js.map +1 -0
  107. package/dist/{chunk-FT2LMA66.mjs → chunk-QADZK5R7.mjs} +2 -2
  108. package/dist/chunk-QADZK5R7.mjs.map +1 -0
  109. package/dist/{chunk-WDCIZHXY.mjs → chunk-QZTEFGZF.mjs} +6 -4
  110. package/dist/chunk-QZTEFGZF.mjs.map +1 -0
  111. package/dist/{chunk-UOFTZKMM.js → chunk-S7WKFNPT.js} +18 -18
  112. package/dist/chunk-S7WKFNPT.js.map +1 -0
  113. package/dist/{chunk-XIXF7UVM.mjs → chunk-TINHLHCN.mjs} +12 -12
  114. package/dist/chunk-TINHLHCN.mjs.map +1 -0
  115. package/dist/{chunk-7HL3A4YF.mjs → chunk-TJUNN2PT.mjs} +73 -24
  116. package/dist/chunk-TJUNN2PT.mjs.map +1 -0
  117. package/dist/{chunk-4B7KGBQB.js → chunk-UWA23DUC.js} +12 -13
  118. package/dist/chunk-UWA23DUC.js.map +1 -0
  119. package/dist/{chunk-CY5BQKRZ.mjs → chunk-VXDEPZKH.mjs} +2 -2
  120. package/dist/chunk-VXDEPZKH.mjs.map +1 -0
  121. package/dist/{chunk-C2FCPQTO.js → chunk-Y745GQR2.js} +16 -16
  122. package/dist/chunk-Y745GQR2.js.map +1 -0
  123. package/dist/{chunk-TZ2JVWTZ.mjs → chunk-YNBJAFI2.mjs} +3 -3
  124. package/dist/{chunk-TZ2JVWTZ.mjs.map → chunk-YNBJAFI2.mjs.map} +1 -1
  125. package/dist/{chunk-P5HUBXUX.js → chunk-YTRGRHEB.js} +55 -12
  126. package/dist/chunk-YTRGRHEB.js.map +1 -0
  127. package/dist/{chunk-YNCD6TKE.mjs → chunk-ZBBFOMSJ.mjs} +103 -38
  128. package/dist/chunk-ZBBFOMSJ.mjs.map +1 -0
  129. package/dist/{chunk-UOZYPWDZ.js → chunk-ZS5756ZC.js} +2 -2
  130. package/dist/{chunk-UOZYPWDZ.js.map → chunk-ZS5756ZC.js.map} +1 -1
  131. package/dist/{chunk-W6PRMYUC.mjs → chunk-ZYZJ74XB.mjs} +3 -3
  132. package/dist/{chunk-W6PRMYUC.mjs.map → chunk-ZYZJ74XB.mjs.map} +1 -1
  133. package/dist/hooks/index.d.ts +2 -2
  134. package/dist/hooks/index.d.ts.map +1 -1
  135. package/dist/hooks/useClickOutside/useClickOutside.d.ts.map +1 -1
  136. package/dist/hooks/useClickOutside.js +2 -2
  137. package/dist/hooks/useClickOutside.mjs +1 -1
  138. package/dist/hooks/useClipboard/useClipboard.d.ts.map +1 -1
  139. package/dist/hooks/useClipboard.js.map +1 -1
  140. package/dist/hooks/useClipboard.mjs.map +1 -1
  141. package/dist/hooks/useFocusManagement/useFocusManagement.d.ts +5 -14
  142. package/dist/hooks/useFocusManagement/useFocusManagement.d.ts.map +1 -1
  143. package/dist/hooks/useFocusManagement.js +2 -2
  144. package/dist/hooks/useFocusManagement.mjs +1 -1
  145. package/dist/hooks/useLocalStorage/index.d.ts +1 -1
  146. package/dist/hooks/useLocalStorage/index.d.ts.map +1 -1
  147. package/dist/hooks/useLocalStorage.js +1 -3
  148. package/dist/hooks/useLocalStorage.js.map +1 -1
  149. package/dist/hooks/useLocalStorage.mjs +1 -3
  150. package/dist/hooks/useLocalStorage.mjs.map +1 -1
  151. package/dist/hooks/useMediaQuery/useMediaQuery.d.ts.map +1 -1
  152. package/dist/hooks/useMediaQuery.js +2 -2
  153. package/dist/hooks/useMediaQuery.mjs +1 -1
  154. package/dist/hooks/usePagination.js +4 -4
  155. package/dist/hooks/usePagination.mjs +2 -2
  156. package/dist/hooks/usePrefersColorScheme.js +2 -2
  157. package/dist/hooks/usePrefersColorScheme.mjs +1 -1
  158. package/dist/hooks/usePrefersReducedMotion.js +2 -2
  159. package/dist/hooks/usePrefersReducedMotion.mjs +1 -1
  160. package/dist/hooks/useResizeObserver/index.d.ts +1 -1
  161. package/dist/hooks/useResizeObserver/index.d.ts.map +1 -1
  162. package/dist/hooks/useSessionStorage/useSessionStorage.d.ts.map +1 -1
  163. package/dist/hooks/useSessionStorage.js.map +1 -1
  164. package/dist/hooks/useSessionStorage.mjs.map +1 -1
  165. package/dist/hooks/useThrottledCallback/useThrottledCallback.d.ts.map +1 -1
  166. package/dist/hooks/useThrottledCallback.js.map +1 -1
  167. package/dist/hooks/useThrottledCallback.mjs.map +1 -1
  168. package/dist/hooks/useWindowSize/useWindowSize.d.ts.map +1 -1
  169. package/dist/hooks/useWindowSize.js +4 -1
  170. package/dist/hooks/useWindowSize.js.map +1 -1
  171. package/dist/hooks/useWindowSize.mjs +4 -1
  172. package/dist/hooks/useWindowSize.mjs.map +1 -1
  173. package/dist/hooks/utils.js +5 -5
  174. package/dist/hooks/utils.mjs +1 -1
  175. package/dist/lib/utils.d.ts.map +1 -1
  176. package/dist/ui/accordion/accordion.d.ts.map +1 -1
  177. package/dist/ui/accordion/animated/accordion-content-animated.d.ts.map +1 -1
  178. package/dist/ui/accordion/animated/index.d.ts +1 -1
  179. package/dist/ui/accordion/animated/index.d.ts.map +1 -1
  180. package/dist/ui/accordion/animated/types.d.ts.map +1 -1
  181. package/dist/ui/accordion/animated.js +8 -11
  182. package/dist/ui/accordion/animated.js.map +1 -1
  183. package/dist/ui/accordion/animated.mjs +4 -7
  184. package/dist/ui/accordion/animated.mjs.map +1 -1
  185. package/dist/ui/accordion/variants.d.ts +2 -2
  186. package/dist/ui/accordion.js +10 -10
  187. package/dist/ui/accordion.js.map +1 -1
  188. package/dist/ui/accordion.mjs +3 -3
  189. package/dist/ui/accordion.mjs.map +1 -1
  190. package/dist/ui/alert/alert-base.d.ts.map +1 -1
  191. package/dist/ui/alert/alert.d.ts.map +1 -1
  192. package/dist/ui/alert/animated/index.d.ts.map +1 -1
  193. package/dist/ui/alert/animated.js +3 -3
  194. package/dist/ui/alert/animated.mjs +2 -2
  195. package/dist/ui/alert/types.d.ts.map +1 -1
  196. package/dist/ui/alert/variants.d.ts +1 -1
  197. package/dist/ui/alert.js +11 -11
  198. package/dist/ui/alert.js.map +1 -1
  199. package/dist/ui/alert.mjs +3 -3
  200. package/dist/ui/alert.mjs.map +1 -1
  201. package/dist/ui/avatar/animated/index.d.ts +1 -1
  202. package/dist/ui/avatar/animated/index.d.ts.map +1 -1
  203. package/dist/ui/avatar/animated.js +6 -6
  204. package/dist/ui/avatar/animated.mjs +3 -3
  205. package/dist/ui/avatar/avatar-base.d.ts.map +1 -1
  206. package/dist/ui/avatar/avatar.d.ts.map +1 -1
  207. package/dist/ui/avatar/variants.d.ts +1 -1
  208. package/dist/ui/avatar/variants.d.ts.map +1 -1
  209. package/dist/ui/avatar.js +10 -10
  210. package/dist/ui/avatar.js.map +1 -1
  211. package/dist/ui/avatar.mjs +3 -3
  212. package/dist/ui/avatar.mjs.map +1 -1
  213. package/dist/ui/badge/animated/index.d.ts +1 -1
  214. package/dist/ui/badge/animated/index.d.ts.map +1 -1
  215. package/dist/ui/badge/animated/types.d.ts.map +1 -1
  216. package/dist/ui/badge/animated.js +3 -3
  217. package/dist/ui/badge/animated.mjs +2 -2
  218. package/dist/ui/badge/badge-base.d.ts +1 -1
  219. package/dist/ui/badge/badge-base.d.ts.map +1 -1
  220. package/dist/ui/badge/types.d.ts +1 -0
  221. package/dist/ui/badge/types.d.ts.map +1 -1
  222. package/dist/ui/badge/variants.d.ts +18 -18
  223. package/dist/ui/badge/variants.d.ts.map +1 -1
  224. package/dist/ui/badge.js +5 -5
  225. package/dist/ui/badge.mjs +3 -3
  226. package/dist/ui/breadcrumb/breadcrumb.d.ts.map +1 -1
  227. package/dist/ui/breadcrumb/types.d.ts.map +1 -1
  228. package/dist/ui/breadcrumb/variants.d.ts +1 -1
  229. package/dist/ui/breadcrumb/variants.d.ts.map +1 -1
  230. package/dist/ui/breadcrumb.js +47 -43
  231. package/dist/ui/breadcrumb.js.map +1 -1
  232. package/dist/ui/breadcrumb.mjs +43 -39
  233. package/dist/ui/breadcrumb.mjs.map +1 -1
  234. package/dist/ui/buttons/animated/index.d.ts +1 -1
  235. package/dist/ui/buttons/animated/index.d.ts.map +1 -1
  236. package/dist/ui/buttons/animated/types.d.ts.map +1 -1
  237. package/dist/ui/buttons/animated.js +4 -4
  238. package/dist/ui/buttons/animated.mjs +2 -2
  239. package/dist/ui/buttons/types.d.ts.map +1 -1
  240. package/dist/ui/buttons/variants.d.ts +2 -2
  241. package/dist/ui/buttons.js +5 -5
  242. package/dist/ui/buttons.mjs +3 -3
  243. package/dist/ui/card/animated.js +8 -8
  244. package/dist/ui/card/animated.mjs +3 -3
  245. package/dist/ui/card/card-base.d.ts.map +1 -1
  246. package/dist/ui/card/card.d.ts.map +1 -1
  247. package/dist/ui/card/index.d.ts +2 -2
  248. package/dist/ui/card/index.d.ts.map +1 -1
  249. package/dist/ui/card/variants.d.ts +1 -1
  250. package/dist/ui/card.js +13 -13
  251. package/dist/ui/card.js.map +1 -1
  252. package/dist/ui/card.mjs +3 -3
  253. package/dist/ui/card.mjs.map +1 -1
  254. package/dist/ui/divider/animated/index.d.ts +1 -1
  255. package/dist/ui/divider/animated/index.d.ts.map +1 -1
  256. package/dist/ui/divider/animated/types.d.ts.map +1 -1
  257. package/dist/ui/divider/animated.js +3 -3
  258. package/dist/ui/divider/animated.mjs +2 -2
  259. package/dist/ui/divider/divider-base.d.ts.map +1 -1
  260. package/dist/ui/divider/variants.d.ts +2 -2
  261. package/dist/ui/divider.js +7 -7
  262. package/dist/ui/divider.mjs +3 -3
  263. package/dist/ui/drawer/animated/drawer-content-animated.d.ts.map +1 -1
  264. package/dist/ui/drawer/animated/index.d.ts +1 -1
  265. package/dist/ui/drawer/animated/index.d.ts.map +1 -1
  266. package/dist/ui/drawer/animated.js +19 -20
  267. package/dist/ui/drawer/animated.js.map +1 -1
  268. package/dist/ui/drawer/animated.mjs +9 -10
  269. package/dist/ui/drawer/animated.mjs.map +1 -1
  270. package/dist/ui/drawer/drawer-base.d.ts +1 -1
  271. package/dist/ui/drawer/drawer-base.d.ts.map +1 -1
  272. package/dist/ui/drawer/types.d.ts +1 -0
  273. package/dist/ui/drawer/types.d.ts.map +1 -1
  274. package/dist/ui/drawer/variants.d.ts +3 -3
  275. package/dist/ui/drawer.js +13 -13
  276. package/dist/ui/drawer.mjs +3 -3
  277. package/dist/ui/dropdown/dropdown.d.ts +1 -1
  278. package/dist/ui/dropdown/dropdown.d.ts.map +1 -1
  279. package/dist/ui/dropdown/types.d.ts +1 -0
  280. package/dist/ui/dropdown/types.d.ts.map +1 -1
  281. package/dist/ui/dropdown/variants.d.ts +4 -4
  282. package/dist/ui/dropdown.js +49 -31
  283. package/dist/ui/dropdown.js.map +1 -1
  284. package/dist/ui/dropdown.mjs +46 -28
  285. package/dist/ui/dropdown.mjs.map +1 -1
  286. package/dist/ui/empty-state/animated/empty-state-animated.d.ts.map +1 -1
  287. package/dist/ui/empty-state/animated/index.d.ts +2 -2
  288. package/dist/ui/empty-state/animated/index.d.ts.map +1 -1
  289. package/dist/ui/empty-state/animated.js +3 -3
  290. package/dist/ui/empty-state/animated.js.map +1 -1
  291. package/dist/ui/empty-state/animated.mjs +2 -2
  292. package/dist/ui/empty-state/animated.mjs.map +1 -1
  293. package/dist/ui/empty-state/empty-state-base.d.ts.map +1 -1
  294. package/dist/ui/empty-state/index.d.ts +1 -1
  295. package/dist/ui/empty-state/index.d.ts.map +1 -1
  296. package/dist/ui/empty-state/types.d.ts +1 -0
  297. package/dist/ui/empty-state/types.d.ts.map +1 -1
  298. package/dist/ui/empty-state.js +11 -11
  299. package/dist/ui/empty-state.mjs +3 -3
  300. package/dist/ui/file-upload/file-upload.d.ts.map +1 -1
  301. package/dist/ui/file-upload/variants.d.ts +1 -1
  302. package/dist/ui/file-upload/variants.d.ts.map +1 -1
  303. package/dist/ui/file-upload.js +4 -6
  304. package/dist/ui/file-upload.js.map +1 -1
  305. package/dist/ui/file-upload.mjs +2 -4
  306. package/dist/ui/file-upload.mjs.map +1 -1
  307. package/dist/ui/inputs/animated/index.d.ts +1 -1
  308. package/dist/ui/inputs/animated/index.d.ts.map +1 -1
  309. package/dist/ui/inputs/animated.js +3 -3
  310. package/dist/ui/inputs/animated.mjs +1 -1
  311. package/dist/ui/inputs/input-base.d.ts.map +1 -1
  312. package/dist/ui/inputs/types.d.ts +3 -1
  313. package/dist/ui/inputs/types.d.ts.map +1 -1
  314. package/dist/ui/inputs/variants.d.ts +2 -2
  315. package/dist/ui/inputs.js +49 -5
  316. package/dist/ui/inputs.js.map +1 -1
  317. package/dist/ui/inputs.mjs +47 -3
  318. package/dist/ui/inputs.mjs.map +1 -1
  319. package/dist/ui/modal/animated/index.d.ts +1 -1
  320. package/dist/ui/modal/animated/index.d.ts.map +1 -1
  321. package/dist/ui/modal/animated/modal-content-animated.d.ts.map +1 -1
  322. package/dist/ui/modal/animated.js +12 -13
  323. package/dist/ui/modal/animated.js.map +1 -1
  324. package/dist/ui/modal/animated.mjs +8 -9
  325. package/dist/ui/modal/animated.mjs.map +1 -1
  326. package/dist/ui/modal/index.d.ts +1 -1
  327. package/dist/ui/modal/index.d.ts.map +1 -1
  328. package/dist/ui/modal/modal-base.d.ts +4 -2
  329. package/dist/ui/modal/modal-base.d.ts.map +1 -1
  330. package/dist/ui/modal/types.d.ts.map +1 -1
  331. package/dist/ui/modal/variants.d.ts +2 -2
  332. package/dist/ui/modal.js +14 -14
  333. package/dist/ui/modal.js.map +1 -1
  334. package/dist/ui/modal.mjs +4 -4
  335. package/dist/ui/modal.mjs.map +1 -1
  336. package/dist/ui/pagination/pagination.d.ts +2 -2
  337. package/dist/ui/pagination/variants.d.ts +3 -3
  338. package/dist/ui/pagination.js +25 -25
  339. package/dist/ui/pagination.js.map +1 -1
  340. package/dist/ui/pagination.mjs +15 -15
  341. package/dist/ui/pagination.mjs.map +1 -1
  342. package/dist/ui/progress/animated/progress-animated.d.ts.map +1 -1
  343. package/dist/ui/progress/animated.js +52 -14
  344. package/dist/ui/progress/animated.js.map +1 -1
  345. package/dist/ui/progress/animated.mjs +45 -7
  346. package/dist/ui/progress/animated.mjs.map +1 -1
  347. package/dist/ui/progress/index.d.ts +2 -2
  348. package/dist/ui/progress/index.d.ts.map +1 -1
  349. package/dist/ui/progress/progress-base.d.ts.map +1 -1
  350. package/dist/ui/progress/progress.d.ts.map +1 -1
  351. package/dist/ui/progress/types.d.ts +3 -0
  352. package/dist/ui/progress/types.d.ts.map +1 -1
  353. package/dist/ui/progress/variants.d.ts +1 -1
  354. package/dist/ui/progress.js +10 -15
  355. package/dist/ui/progress.js.map +1 -1
  356. package/dist/ui/progress.mjs +4 -9
  357. package/dist/ui/progress.mjs.map +1 -1
  358. package/dist/ui/search/search-bar.d.ts +1 -1
  359. package/dist/ui/search/search-bar.d.ts.map +1 -1
  360. package/dist/ui/search/search-suggestion-list.d.ts.map +1 -1
  361. package/dist/ui/search/search-suggestion-utils.d.ts.map +1 -1
  362. package/dist/ui/search.js +15 -7
  363. package/dist/ui/search.js.map +1 -1
  364. package/dist/ui/search.mjs +11 -3
  365. package/dist/ui/search.mjs.map +1 -1
  366. package/dist/ui/select/select.d.ts +1 -1
  367. package/dist/ui/select/select.d.ts.map +1 -1
  368. package/dist/ui/select/types.d.ts +1 -0
  369. package/dist/ui/select/types.d.ts.map +1 -1
  370. package/dist/ui/select/variants.d.ts +4 -4
  371. package/dist/ui/select/variants.d.ts.map +1 -1
  372. package/dist/ui/select.js +145 -63
  373. package/dist/ui/select.js.map +1 -1
  374. package/dist/ui/select.mjs +141 -59
  375. package/dist/ui/select.mjs.map +1 -1
  376. package/dist/ui/skeleton/animated/skeleton-animated.d.ts.map +1 -1
  377. package/dist/ui/skeleton/animated/types.d.ts.map +1 -1
  378. package/dist/ui/skeleton/animated.js +34 -10
  379. package/dist/ui/skeleton/animated.js.map +1 -1
  380. package/dist/ui/skeleton/animated.mjs +29 -5
  381. package/dist/ui/skeleton/animated.mjs.map +1 -1
  382. package/dist/ui/skeleton/variants.d.ts +3 -3
  383. package/dist/ui/skeleton.js +10 -10
  384. package/dist/ui/skeleton.mjs +2 -2
  385. package/dist/ui/slider/slider.d.ts.map +1 -1
  386. package/dist/ui/slider/types.d.ts +8 -2
  387. package/dist/ui/slider/types.d.ts.map +1 -1
  388. package/dist/ui/slider/variants.d.ts +1 -1
  389. package/dist/ui/slider.js +53 -17
  390. package/dist/ui/slider.js.map +1 -1
  391. package/dist/ui/slider.mjs +45 -9
  392. package/dist/ui/slider.mjs.map +1 -1
  393. package/dist/ui/spinner/animated/spinner.d.ts.map +1 -1
  394. package/dist/ui/spinner/animated/variants.d.ts +1 -1
  395. package/dist/ui/spinner/animated.js +68 -56
  396. package/dist/ui/spinner/animated.js.map +1 -1
  397. package/dist/ui/spinner/animated.mjs +64 -52
  398. package/dist/ui/spinner/animated.mjs.map +1 -1
  399. package/dist/ui/stepper/stepper.d.ts +2 -7
  400. package/dist/ui/stepper/stepper.d.ts.map +1 -1
  401. package/dist/ui/stepper/types.d.ts +3 -3
  402. package/dist/ui/stepper/types.d.ts.map +1 -1
  403. package/dist/ui/stepper/variants.d.ts +1 -1
  404. package/dist/ui/stepper/variants.d.ts.map +1 -1
  405. package/dist/ui/stepper.js +12 -13
  406. package/dist/ui/stepper.js.map +1 -1
  407. package/dist/ui/stepper.mjs +9 -10
  408. package/dist/ui/stepper.mjs.map +1 -1
  409. package/dist/ui/table/animated/index.d.ts +2 -2
  410. package/dist/ui/table/animated/index.d.ts.map +1 -1
  411. package/dist/ui/table/animated.js +9 -9
  412. package/dist/ui/table/animated.mjs +3 -3
  413. package/dist/ui/table/table-base.d.ts +1 -1
  414. package/dist/ui/table/table-base.d.ts.map +1 -1
  415. package/dist/ui/table/types.d.ts +5 -1
  416. package/dist/ui/table/types.d.ts.map +1 -1
  417. package/dist/ui/table/variants.d.ts +3 -3
  418. package/dist/ui/table.js +15 -15
  419. package/dist/ui/table.mjs +2 -2
  420. package/dist/ui/tabs/animated/animations.d.ts.map +1 -1
  421. package/dist/ui/tabs/animated/index.d.ts +1 -1
  422. package/dist/ui/tabs/animated/index.d.ts.map +1 -1
  423. package/dist/ui/tabs/animated/types.d.ts.map +1 -1
  424. package/dist/ui/tabs/animated.js +4 -4
  425. package/dist/ui/tabs/animated.js.map +1 -1
  426. package/dist/ui/tabs/animated.mjs +2 -2
  427. package/dist/ui/tabs/animated.mjs.map +1 -1
  428. package/dist/ui/tabs/index.d.ts +1 -1
  429. package/dist/ui/tabs/index.d.ts.map +1 -1
  430. package/dist/ui/tabs/tabs-base.d.ts.map +1 -1
  431. package/dist/ui/tabs/tabs.d.ts +1 -1
  432. package/dist/ui/tabs/tabs.d.ts.map +1 -1
  433. package/dist/ui/tabs/types.d.ts +2 -1
  434. package/dist/ui/tabs/types.d.ts.map +1 -1
  435. package/dist/ui/tabs/variants.d.ts +1 -1
  436. package/dist/ui/tabs.js +10 -10
  437. package/dist/ui/tabs.mjs +2 -2
  438. package/dist/ui/toast/animated/toast-animated.d.ts.map +1 -1
  439. package/dist/ui/toast/animated.js +12 -10
  440. package/dist/ui/toast/animated.js.map +1 -1
  441. package/dist/ui/toast/animated.mjs +5 -3
  442. package/dist/ui/toast/animated.mjs.map +1 -1
  443. package/dist/ui/toast/types.d.ts.map +1 -1
  444. package/dist/ui/toast/variants.d.ts +1 -1
  445. package/dist/ui/toast.js +13 -13
  446. package/dist/ui/toast.mjs +2 -2
  447. package/dist/ui/toggle/animated/index.d.ts +2 -2
  448. package/dist/ui/toggle/animated/index.d.ts.map +1 -1
  449. package/dist/ui/toggle/animated/types.d.ts.map +1 -1
  450. package/dist/ui/toggle/animated.js +3 -3
  451. package/dist/ui/toggle/animated.mjs +1 -1
  452. package/dist/ui/toggle/index.d.ts +1 -1
  453. package/dist/ui/toggle/index.d.ts.map +1 -1
  454. package/dist/ui/toggle/toggle-base.d.ts.map +1 -1
  455. package/dist/ui/toggle/variants.d.ts +1 -1
  456. package/dist/ui/toggle.js +31 -6
  457. package/dist/ui/toggle.js.map +1 -1
  458. package/dist/ui/toggle.mjs +30 -5
  459. package/dist/ui/toggle.mjs.map +1 -1
  460. package/dist/ui/tooltip/animated/animations.d.ts.map +1 -1
  461. package/dist/ui/tooltip/animated/types.d.ts.map +1 -1
  462. package/dist/ui/tooltip/animated.js +5 -5
  463. package/dist/ui/tooltip/animated.js.map +1 -1
  464. package/dist/ui/tooltip/animated.mjs +2 -2
  465. package/dist/ui/tooltip/animated.mjs.map +1 -1
  466. package/dist/ui/tooltip/tooltip-base.d.ts.map +1 -1
  467. package/dist/ui/tooltip/types.d.ts +1 -0
  468. package/dist/ui/tooltip/types.d.ts.map +1 -1
  469. package/dist/ui/tooltip/variants.d.ts +1 -1
  470. package/dist/ui/tooltip/variants.d.ts.map +1 -1
  471. package/dist/ui/tooltip.js +8 -8
  472. package/dist/ui/tooltip.mjs +2 -2
  473. package/dist/ui/typography/blockquote-base.d.ts.map +1 -1
  474. package/dist/ui/typography/code-block-base.d.ts.map +1 -1
  475. package/dist/ui/typography/heading-base.d.ts.map +1 -1
  476. package/dist/ui/typography/list-base.d.ts.map +1 -1
  477. package/dist/ui/typography/types.d.ts.map +1 -1
  478. package/dist/ui/typography/variants.d.ts +3 -3
  479. package/dist/ui/typography/variants.d.ts.map +1 -1
  480. package/dist/ui/typography.js +21 -43
  481. package/dist/ui/typography.js.map +1 -1
  482. package/dist/ui/typography.mjs +13 -35
  483. package/dist/ui/typography.mjs.map +1 -1
  484. package/package.json +32 -12
  485. package/src/charts/area/Area.tsx +103 -0
  486. package/src/charts/area/index.ts +9 -0
  487. package/src/charts/bar/Bar.tsx +94 -0
  488. package/src/charts/bar/index.ts +9 -0
  489. package/src/charts/bubble/Bubble.tsx +113 -0
  490. package/src/charts/bubble/index.ts +9 -0
  491. package/src/charts/line/Line.tsx +97 -0
  492. package/src/charts/line/index.ts +9 -0
  493. package/src/charts/shared/chart-frame.tsx +107 -0
  494. package/src/charts/shared/colors.ts +31 -0
  495. package/src/charts/shared/types.ts +60 -0
  496. package/src/charts/shared/variants.ts +87 -0
  497. package/src/hooks/index.ts +8 -2
  498. package/src/hooks/useClickOutside/useClickOutside.ts +1 -4
  499. package/src/hooks/useClipboard/useClipboard.test.ts +3 -1
  500. package/src/hooks/useClipboard/useClipboard.ts +1 -2
  501. package/src/hooks/useDisclosure/useDisclosure.test.ts +1 -2
  502. package/src/hooks/useDocumentTitle/useDocumentTitle.test.ts +1 -3
  503. package/src/hooks/useFocusManagement/useFocusManagement.test.tsx +8 -0
  504. package/src/hooks/useFocusManagement/useFocusManagement.ts +162 -34
  505. package/src/hooks/useInView/useInView.test.ts +6 -1
  506. package/src/hooks/useLocalStorage/index.ts +1 -4
  507. package/src/hooks/useLocalStorage/useLocalStorage.test.ts +8 -20
  508. package/src/hooks/useLocalStorage/useLocalStorage.ts +4 -4
  509. package/src/hooks/useMediaQuery/useMediaQuery.ts +1 -4
  510. package/src/hooks/usePrefersReducedMotion/usePrefersReducedMotion.test.ts +3 -1
  511. package/src/hooks/useResizeObserver/index.ts +1 -4
  512. package/src/hooks/useSessionStorage/useSessionStorage.test.ts +2 -6
  513. package/src/hooks/useSessionStorage/useSessionStorage.ts +4 -2
  514. package/src/hooks/useThrottledCallback/useThrottledCallback.ts +4 -3
  515. package/src/hooks/useWindowSize/useWindowSize.ts +4 -1
  516. package/src/lib/utils.ts +3 -3
  517. package/src/ui/accordion/accordion.tsx +6 -1
  518. package/src/ui/accordion/animated/accordion-content-animated.tsx +1 -4
  519. package/src/ui/accordion/animated/index.ts +4 -1
  520. package/src/ui/accordion/animated/types.ts +6 -2
  521. package/src/ui/accordion/variants.ts +9 -9
  522. package/src/ui/alert/alert-base.tsx +6 -1
  523. package/src/ui/alert/alert.tsx +2 -2
  524. package/src/ui/alert/animated/index.ts +2 -2
  525. package/src/ui/alert/animated/types.ts +1 -1
  526. package/src/ui/alert/types.ts +1 -3
  527. package/src/ui/alert/variants.ts +9 -9
  528. package/src/ui/avatar/animated/index.ts +6 -2
  529. package/src/ui/avatar/avatar-base.tsx +2 -7
  530. package/src/ui/avatar/avatar.tsx +6 -1
  531. package/src/ui/avatar/variants.ts +23 -11
  532. package/src/ui/badge/animated/index.ts +6 -2
  533. package/src/ui/badge/animated/types.ts +1 -2
  534. package/src/ui/badge/badge-base.tsx +4 -1
  535. package/src/ui/badge/types.ts +1 -0
  536. package/src/ui/badge/variants.ts +16 -18
  537. package/src/ui/breadcrumb/breadcrumb.tsx +10 -2
  538. package/src/ui/breadcrumb/types.ts +20 -9
  539. package/src/ui/breadcrumb/variants.ts +34 -38
  540. package/src/ui/buttons/animated/index.ts +7 -1
  541. package/src/ui/buttons/animated/types.ts +0 -1
  542. package/src/ui/buttons/button.test.tsx +2 -2
  543. package/src/ui/buttons/types.ts +4 -5
  544. package/src/ui/buttons/variants.ts +17 -17
  545. package/src/ui/card/animated/types.ts +0 -1
  546. package/src/ui/card/card-base.tsx +1 -6
  547. package/src/ui/card/card.test.tsx +7 -3
  548. package/src/ui/card/card.tsx +1 -3
  549. package/src/ui/card/index.ts +7 -3
  550. package/src/ui/card/types.ts +1 -1
  551. package/src/ui/card/variants.ts +9 -9
  552. package/src/ui/divider/animated/index.ts +5 -1
  553. package/src/ui/divider/animated/types.ts +4 -2
  554. package/src/ui/divider/divider-base.tsx +0 -1
  555. package/src/ui/drawer/animated/drawer-content-animated.tsx +6 -11
  556. package/src/ui/drawer/animated/index.ts +6 -1
  557. package/src/ui/drawer/drawer-base.tsx +16 -8
  558. package/src/ui/drawer/types.ts +12 -3
  559. package/src/ui/drawer/variants.ts +18 -18
  560. package/src/ui/dropdown/dropdown.test.tsx +1 -3
  561. package/src/ui/dropdown/dropdown.tsx +30 -5
  562. package/src/ui/dropdown/types.ts +1 -0
  563. package/src/ui/dropdown/variants.ts +20 -20
  564. package/src/ui/empty-state/animated/empty-state-animated.tsx +2 -4
  565. package/src/ui/empty-state/animated/index.ts +8 -5
  566. package/src/ui/empty-state/empty-state-base.tsx +14 -2
  567. package/src/ui/empty-state/index.ts +7 -1
  568. package/src/ui/empty-state/types.ts +1 -0
  569. package/src/ui/file-upload/file-upload.tsx +3 -9
  570. package/src/ui/file-upload/variants.ts +18 -9
  571. package/src/ui/inputs/animated/index.ts +7 -1
  572. package/src/ui/inputs/input-base.tsx +60 -6
  573. package/src/ui/inputs/input.test.tsx +5 -1
  574. package/src/ui/inputs/types.ts +7 -2
  575. package/src/ui/modal/animated/index.ts +6 -1
  576. package/src/ui/modal/animated/modal-content-animated.tsx +4 -5
  577. package/src/ui/modal/index.ts +1 -1
  578. package/src/ui/modal/modal-base.tsx +19 -10
  579. package/src/ui/modal/modal.test.tsx +44 -4
  580. package/src/ui/modal/modal.tsx +1 -1
  581. package/src/ui/modal/types.ts +10 -2
  582. package/src/ui/modal/variants.ts +18 -18
  583. package/src/ui/pagination/pagination.tsx +2 -2
  584. package/src/ui/pagination/variants.ts +9 -9
  585. package/src/ui/progress/animated/progress-animated.tsx +43 -5
  586. package/src/ui/progress/animated/types.ts +1 -1
  587. package/src/ui/progress/index.ts +12 -2
  588. package/src/ui/progress/progress-base.tsx +61 -5
  589. package/src/ui/progress/progress.test.tsx +1 -3
  590. package/src/ui/progress/progress.tsx +2 -6
  591. package/src/ui/progress/types.ts +3 -0
  592. package/src/ui/search/filter-search-suggestions.test.ts +46 -12
  593. package/src/ui/search/filter-search-suggestions.ts +3 -3
  594. package/src/ui/search/search-bar.tsx +22 -22
  595. package/src/ui/search/search-suggestion-list.tsx +14 -5
  596. package/src/ui/search/search-suggestion-utils.ts +4 -1
  597. package/src/ui/select/select.tsx +96 -6
  598. package/src/ui/select/types.ts +1 -0
  599. package/src/ui/select/variants.ts +71 -68
  600. package/src/ui/skeleton/animated/skeleton-animated.tsx +25 -4
  601. package/src/ui/skeleton/animated/types.ts +0 -1
  602. package/src/ui/skeleton/skeleton-base.tsx +3 -3
  603. package/src/ui/skeleton/variants.ts +9 -9
  604. package/src/ui/slider/slider.test.tsx +23 -9
  605. package/src/ui/slider/slider.tsx +45 -4
  606. package/src/ui/slider/types.ts +9 -3
  607. package/src/ui/slider/variants.ts +1 -1
  608. package/src/ui/spinner/animated/spinner.tsx +6 -3
  609. package/src/ui/stepper/stepper.test.tsx +5 -6
  610. package/src/ui/stepper/stepper.tsx +12 -16
  611. package/src/ui/stepper/types.ts +11 -5
  612. package/src/ui/stepper/variants.ts +30 -15
  613. package/src/ui/table/animated/index.ts +6 -4
  614. package/src/ui/table/table-base.tsx +32 -11
  615. package/src/ui/table/types.ts +8 -1
  616. package/src/ui/tabs/animated/animations.ts +5 -1
  617. package/src/ui/tabs/animated/index.ts +7 -1
  618. package/src/ui/tabs/animated/types.ts +3 -3
  619. package/src/ui/tabs/index.ts +8 -1
  620. package/src/ui/tabs/tabs-base.tsx +71 -10
  621. package/src/ui/tabs/tabs.tsx +8 -1
  622. package/src/ui/tabs/types.ts +2 -1
  623. package/src/ui/tabs/variants.ts +10 -10
  624. package/src/ui/toast/animated/toast-animated.tsx +3 -1
  625. package/src/ui/toast/animated/types.ts +1 -1
  626. package/src/ui/toast/toast-base.tsx +1 -1
  627. package/src/ui/toast/types.ts +3 -1
  628. package/src/ui/toast/variants.ts +9 -9
  629. package/src/ui/toggle/animated/index.ts +7 -4
  630. package/src/ui/toggle/animated/types.ts +4 -2
  631. package/src/ui/toggle/index.ts +5 -1
  632. package/src/ui/toggle/toggle-base.tsx +36 -4
  633. package/src/ui/tooltip/animated/animations.ts +0 -1
  634. package/src/ui/tooltip/animated/types.ts +0 -1
  635. package/src/ui/tooltip/tooltip-base.tsx +118 -22
  636. package/src/ui/tooltip/types.ts +1 -0
  637. package/src/ui/tooltip/variants.ts +11 -13
  638. package/src/ui/typography/blockquote-base.tsx +1 -8
  639. package/src/ui/typography/code-block-base.tsx +19 -24
  640. package/src/ui/typography/heading-base.tsx +35 -38
  641. package/src/ui/typography/inline-code-base.tsx +15 -15
  642. package/src/ui/typography/list-base.tsx +1 -9
  643. package/src/ui/typography/text-base.tsx +32 -32
  644. package/src/ui/typography/types.ts +4 -17
  645. package/src/ui/typography/typography.test.tsx +3 -1
  646. package/src/ui/typography/variants.ts +16 -8
  647. package/dist/chunk-2P3UU2J3.mjs.map +0 -1
  648. package/dist/chunk-2PQEXQVR.js.map +0 -1
  649. package/dist/chunk-3OR47XMY.js.map +0 -1
  650. package/dist/chunk-4B7KGBQB.js.map +0 -1
  651. package/dist/chunk-5QB2KNZQ.js.map +0 -1
  652. package/dist/chunk-6I7X5BF2.js.map +0 -1
  653. package/dist/chunk-7HL3A4YF.mjs.map +0 -1
  654. package/dist/chunk-BITDSQMR.js.map +0 -1
  655. package/dist/chunk-BORK3BJO.mjs.map +0 -1
  656. package/dist/chunk-BSWYZTYK.js.map +0 -1
  657. package/dist/chunk-BVXTOEBI.mjs.map +0 -1
  658. package/dist/chunk-C2FCPQTO.js.map +0 -1
  659. package/dist/chunk-CY5BQKRZ.mjs.map +0 -1
  660. package/dist/chunk-E3DZNJAD.js.map +0 -1
  661. package/dist/chunk-FLILFCQE.mjs.map +0 -1
  662. package/dist/chunk-FT2LMA66.mjs.map +0 -1
  663. package/dist/chunk-IXDJ3IPG.mjs.map +0 -1
  664. package/dist/chunk-LVUPECBT.mjs.map +0 -1
  665. package/dist/chunk-N4NO3SYL.js.map +0 -1
  666. package/dist/chunk-P5HUBXUX.js.map +0 -1
  667. package/dist/chunk-PGH27VTL.mjs.map +0 -1
  668. package/dist/chunk-RDSPHBHK.mjs.map +0 -1
  669. package/dist/chunk-U4YQCAXW.js.map +0 -1
  670. package/dist/chunk-UBFKTC2P.mjs.map +0 -1
  671. package/dist/chunk-UOFTZKMM.js.map +0 -1
  672. package/dist/chunk-WDCIZHXY.mjs.map +0 -1
  673. package/dist/chunk-WL5I7RVS.mjs +0 -54
  674. package/dist/chunk-WL5I7RVS.mjs.map +0 -1
  675. package/dist/chunk-WP7GYBRI.js.map +0 -1
  676. package/dist/chunk-WZKGRU3U.js.map +0 -1
  677. package/dist/chunk-XIXF7UVM.mjs.map +0 -1
  678. package/dist/chunk-XLAFQ24R.js.map +0 -1
  679. package/dist/chunk-XWM2S6VV.mjs.map +0 -1
  680. package/dist/chunk-YNCD6TKE.mjs.map +0 -1
  681. package/dist/chunk-YPLVTUYL.js +0 -56
  682. package/dist/chunk-YPLVTUYL.js.map +0 -1
@@ -29,23 +29,23 @@ export const paginationListVariants = cva(
29
29
  amber: "border-amber-500/25 bg-amber-950/20",
30
30
  violet: "border-violet-500/25 bg-violet-950/20",
31
31
  "gradient-blue":
32
- "border-blue-500/30 bg-gradient-to-r from-blue-950/30 to-purple-950/30",
32
+ "border-blue-500/30 bg-linear-to-r from-blue-950/30 to-purple-950/30",
33
33
  "gradient-green":
34
- "border-lime-500/30 bg-gradient-to-r from-green-950/30 to-lime-950/30",
34
+ "border-lime-500/30 bg-linear-to-r from-green-950/30 to-lime-950/30",
35
35
  "gradient-red":
36
- "border-pink-500/30 bg-gradient-to-r from-red-950/30 to-pink-950/30",
36
+ "border-pink-500/30 bg-linear-to-r from-red-950/30 to-pink-950/30",
37
37
  "gradient-yellow":
38
- "border-orange-500/30 bg-gradient-to-r from-yellow-950/30 to-orange-950/30",
38
+ "border-orange-500/30 bg-linear-to-r from-yellow-950/30 to-orange-950/30",
39
39
  "gradient-purple":
40
- "border-pink-500/30 bg-gradient-to-r from-purple-950/30 to-pink-950/30",
40
+ "border-pink-500/30 bg-linear-to-r from-purple-950/30 to-pink-950/30",
41
41
  "gradient-teal":
42
- "border-cyan-500/30 bg-gradient-to-r from-teal-950/30 to-cyan-950/30",
42
+ "border-cyan-500/30 bg-linear-to-r from-teal-950/30 to-cyan-950/30",
43
43
  "gradient-indigo":
44
- "border-purple-500/30 bg-gradient-to-r from-indigo-950/30 to-purple-950/30",
44
+ "border-purple-500/30 bg-linear-to-r from-indigo-950/30 to-purple-950/30",
45
45
  "gradient-pink":
46
- "border-rose-500/30 bg-gradient-to-r from-pink-950/30 to-rose-950/30",
46
+ "border-rose-500/30 bg-linear-to-r from-pink-950/30 to-rose-950/30",
47
47
  "gradient-orange":
48
- "border-orange-500/30 bg-gradient-to-r from-orange-950/30 to-red-950/30",
48
+ "border-orange-500/30 bg-linear-to-r from-orange-950/30 to-red-950/30",
49
49
  },
50
50
  size: {
51
51
  sm: "gap-0.5",
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useMemo } from "react";
3
+ import { useCallback, useId, useMemo, useRef, useState } from "react";
4
4
  import { motion } from "framer-motion";
5
5
 
6
6
  import { cn, clamp } from "../../../lib/utils";
@@ -39,6 +39,32 @@ export function ProgressAnimated({
39
39
  }: ProgressAnimatedProps) {
40
40
  const clamped = clamp(value, min, max);
41
41
  const percent = max === min ? 0 : ((clamped - min) / (max - min)) * 100;
42
+ const labelSlotId = `${useId()}-progress-label`;
43
+ const labelSlotCountRef = useRef(0);
44
+ const [labelSlotMounted, setLabelSlotMounted] = useState(false);
45
+ const registerProgressLabel = useCallback(() => {
46
+ labelSlotCountRef.current += 1;
47
+ if (labelSlotCountRef.current === 1) {
48
+ setLabelSlotMounted(true);
49
+ }
50
+ return () => {
51
+ labelSlotCountRef.current -= 1;
52
+ if (labelSlotCountRef.current === 0) {
53
+ setLabelSlotMounted(false);
54
+ }
55
+ };
56
+ }, []);
57
+ const hasInlineLabelProp = Boolean(label?.trim().length);
58
+
59
+ const labelingProps = useMemo(() => {
60
+ if (hasInlineLabelProp) {
61
+ return { "aria-label": label?.trim() ?? "Progress" };
62
+ }
63
+ if (labelSlotMounted) {
64
+ return { "aria-labelledby": labelSlotId };
65
+ }
66
+ return { "aria-label": "Progress" };
67
+ }, [hasInlineLabelProp, label, labelSlotId, labelSlotMounted]);
42
68
 
43
69
  const ctx = useMemo<ProgressCtx>(
44
70
  () => ({
@@ -50,8 +76,21 @@ export function ProgressAnimated({
50
76
  striped: Boolean(striped),
51
77
  animated: Boolean(animated),
52
78
  appearance: appearance ?? "default",
79
+ labelSlotId,
80
+ registerProgressLabel,
53
81
  }),
54
- [animated, appearance, clamped, max, min, shape, size, striped],
82
+ [
83
+ animated,
84
+ appearance,
85
+ clamped,
86
+ labelSlotId,
87
+ max,
88
+ min,
89
+ registerProgressLabel,
90
+ shape,
91
+ size,
92
+ striped,
93
+ ],
55
94
  );
56
95
 
57
96
  const motionProps = progressAnimationPresets[animation];
@@ -65,8 +104,8 @@ export function ProgressAnimated({
65
104
  aria-valuemin={min}
66
105
  aria-valuemax={max}
67
106
  aria-valuenow={clamped}
68
- aria-label={label}
69
107
  aria-busy={busy ? true : undefined}
108
+ {...labelingProps}
70
109
  className={cn(
71
110
  progressVariants({ appearance, size, shape, striped, animated }),
72
111
  className,
@@ -98,8 +137,7 @@ export function ProgressBarAnimated({
98
137
  style?: React.CSSProperties;
99
138
  ref?: React.Ref<HTMLDivElement>;
100
139
  }) {
101
- const { size, shape, striped, animated } =
102
- useProgressContext("ProgressBar");
140
+ const { size, shape, striped, animated } = useProgressContext("ProgressBar");
103
141
 
104
142
  return (
105
143
  <div
@@ -32,4 +32,4 @@ export type ProgressAnimatedProps = ProgressVariantProps &
32
32
  export type ProgressBarAnimatedProps = ProgressSectionProps & {
33
33
  style?: React.CSSProperties;
34
34
  ref?: React.Ref<HTMLDivElement>;
35
- };
35
+ };
@@ -1,8 +1,18 @@
1
1
  "use client";
2
2
 
3
3
  export { Progress } from "./progress";
4
- export { ProgressBar, ProgressLabel, ProgressValue, ProgressBase } from "./progress-base";
5
- export type { ProgressProps, ProgressSectionProps, ProgressCtx, ProgressVariantProps } from "./types";
4
+ export {
5
+ ProgressBar,
6
+ ProgressLabel,
7
+ ProgressValue,
8
+ ProgressBase,
9
+ } from "./progress-base";
10
+ export type {
11
+ ProgressProps,
12
+ ProgressSectionProps,
13
+ ProgressCtx,
14
+ ProgressVariantProps,
15
+ } from "./types";
6
16
  export {
7
17
  progressVariants,
8
18
  progressTrackVariants,
@@ -1,6 +1,15 @@
1
1
  "use client";
2
2
 
3
- import { createContext, useContext, useMemo } from "react";
3
+ import {
4
+ createContext,
5
+ useCallback,
6
+ useContext,
7
+ useEffect,
8
+ useMemo,
9
+ useId,
10
+ useRef,
11
+ useState,
12
+ } from "react";
4
13
 
5
14
  import { cn, clamp } from "../../lib/utils";
6
15
 
@@ -35,11 +44,37 @@ export function ProgressBase(props: ProgressProps) {
35
44
  label,
36
45
  children,
37
46
  ref,
38
- as:Wrapper = "div",
47
+ as: Wrapper = "div",
39
48
  ...rest
40
49
  } = props;
41
50
  const clamped = clamp(value, min, max);
42
51
  const percent = max === min ? 0 : ((clamped - min) / (max - min)) * 100;
52
+ const labelSlotId = `${useId()}-progress-label`;
53
+ const labelSlotCountRef = useRef(0);
54
+ const [labelSlotMounted, setLabelSlotMounted] = useState(false);
55
+ const registerProgressLabel = useCallback(() => {
56
+ labelSlotCountRef.current += 1;
57
+ if (labelSlotCountRef.current === 1) {
58
+ setLabelSlotMounted(true);
59
+ }
60
+ return () => {
61
+ labelSlotCountRef.current -= 1;
62
+ if (labelSlotCountRef.current === 0) {
63
+ setLabelSlotMounted(false);
64
+ }
65
+ };
66
+ }, []);
67
+ const hasInlineLabelProp = Boolean(label?.trim().length);
68
+
69
+ const labelingProps = useMemo(() => {
70
+ if (hasInlineLabelProp) {
71
+ return { "aria-label": label?.trim() ?? "Progress" };
72
+ }
73
+ if (labelSlotMounted) {
74
+ return { "aria-labelledby": labelSlotId };
75
+ }
76
+ return { "aria-label": "Progress" };
77
+ }, [hasInlineLabelProp, label, labelSlotId, labelSlotMounted]);
43
78
 
44
79
  const ctx = useMemo(
45
80
  () => ({
@@ -51,8 +86,21 @@ export function ProgressBase(props: ProgressProps) {
51
86
  striped: Boolean(striped),
52
87
  animated: Boolean(animated),
53
88
  appearance: appearance ?? "default",
89
+ labelSlotId,
90
+ registerProgressLabel,
54
91
  }),
55
- [animated, appearance, clamped, max, min, shape, size, striped],
92
+ [
93
+ animated,
94
+ appearance,
95
+ clamped,
96
+ labelSlotId,
97
+ max,
98
+ min,
99
+ registerProgressLabel,
100
+ shape,
101
+ size,
102
+ striped,
103
+ ],
56
104
  );
57
105
 
58
106
  return (
@@ -64,7 +112,7 @@ export function ProgressBase(props: ProgressProps) {
64
112
  aria-valuemin={min}
65
113
  aria-valuemax={max}
66
114
  aria-valuenow={clamped}
67
- aria-label={label}
115
+ {...labelingProps}
68
116
  className={cn(
69
117
  progressVariants({ appearance, size, shape, striped, animated }),
70
118
  className,
@@ -87,7 +135,7 @@ export function ProgressBar({
87
135
  className,
88
136
  style,
89
137
  ref,
90
- as:Wrapper = "div",
138
+ as: Wrapper = "div",
91
139
  ...rest
92
140
  }: ProgressSectionProps & {
93
141
  style?: React.CSSProperties;
@@ -121,8 +169,16 @@ export function ProgressBar({
121
169
  ProgressBar.displayName = "ProgressBar";
122
170
 
123
171
  export function ProgressLabel({ className, children }: ProgressSectionProps) {
172
+ const { labelSlotId, registerProgressLabel } =
173
+ useProgressContext("ProgressLabel");
174
+
175
+ useEffect(() => {
176
+ return registerProgressLabel();
177
+ }, [registerProgressLabel]);
178
+
124
179
  return (
125
180
  <div
181
+ id={labelSlotId}
126
182
  data-slot="progress-label"
127
183
  className={cn("mb-2 font-medium text-slate-200", className)}
128
184
  >
@@ -2,9 +2,7 @@ import { createRef } from "react";
2
2
  import { render, screen } from "@testing-library/react";
3
3
  import { describe, expect, it } from "vitest";
4
4
 
5
- import {
6
- Progress,
7
- } from "./progress";
5
+ import { Progress } from "./progress";
8
6
  import { ProgressBar, ProgressLabel, ProgressValue } from "./progress-base";
9
7
 
10
8
  describe("Progress", () => {
@@ -2,11 +2,7 @@ import { ProgressBase } from "./progress-base";
2
2
  import type { ProgressProps } from "./types";
3
3
 
4
4
  export const Progress = (props: ProgressProps) => {
5
- return (
6
- <ProgressBase
7
- {...props}
8
- />
9
- );
5
+ return <ProgressBase {...props} />;
10
6
  };
11
7
 
12
- Progress.displayName = "Progress";
8
+ Progress.displayName = "Progress";
@@ -30,4 +30,7 @@ export type ProgressCtx = {
30
30
  striped: boolean;
31
31
  animated: boolean;
32
32
  appearance: NonNullable<ProgressProps["appearance"]>;
33
+ labelSlotId: string;
34
+ /** Increments the label mount count; returned cleanup decrements. Multiple labels are supported. */
35
+ registerProgressLabel: () => () => void;
33
36
  };
@@ -4,35 +4,63 @@ import { filterSearchSuggestions } from "./filter-search-suggestions";
4
4
  import type { SearchFilterable } from "./types";
5
5
 
6
6
  const sampleItems: SearchFilterable[] = [
7
- { id: "1", label: "Installation", href: "/preview/installation", keywords: ["npm", "setup"] },
7
+ {
8
+ id: "1",
9
+ label: "Installation",
10
+ href: "/preview/installation",
11
+ keywords: ["npm", "setup"],
12
+ },
8
13
  { id: "2", label: "Modal", href: "/preview/components/modal" },
9
- { id: "3", label: "GitHub", href: "https://example.com/repo", keywords: ["github", "source"] },
14
+ {
15
+ id: "3",
16
+ label: "GitHub",
17
+ href: "https://example.com/repo",
18
+ keywords: ["github", "source"],
19
+ },
10
20
  ];
11
21
 
12
22
  describe("filterSearchSuggestions", () => {
13
23
  it("returns empty list for whitespace-only query", () => {
14
- expect(filterSearchSuggestions({ query: " ", items: sampleItems })).toEqual([]);
24
+ expect(
25
+ filterSearchSuggestions({ query: " ", items: sampleItems }),
26
+ ).toEqual([]);
15
27
  });
16
28
 
17
29
  it("returns empty list for empty query", () => {
18
- expect(filterSearchSuggestions({ query: "", items: sampleItems })).toEqual([]);
30
+ expect(filterSearchSuggestions({ query: "", items: sampleItems })).toEqual(
31
+ [],
32
+ );
19
33
  });
20
34
 
21
35
  it("matches label case-insensitively", () => {
22
- expect(filterSearchSuggestions({ query: "modal", items: sampleItems })).toEqual([
23
- { id: "2", label: "Modal", href: "/preview/components/modal" },
24
- ]);
36
+ expect(
37
+ filterSearchSuggestions({ query: "modal", items: sampleItems }),
38
+ ).toEqual([{ id: "2", label: "Modal", href: "/preview/components/modal" }]);
25
39
  });
26
40
 
27
41
  it("matches href substring", () => {
28
- expect(filterSearchSuggestions({ query: "installation", items: sampleItems })).toEqual([
29
- { id: "1", label: "Installation", href: "/preview/installation", keywords: ["npm", "setup"] },
42
+ expect(
43
+ filterSearchSuggestions({ query: "installation", items: sampleItems }),
44
+ ).toEqual([
45
+ {
46
+ id: "1",
47
+ label: "Installation",
48
+ href: "/preview/installation",
49
+ keywords: ["npm", "setup"],
50
+ },
30
51
  ]);
31
52
  });
32
53
 
33
54
  it("matches keywords", () => {
34
- expect(filterSearchSuggestions({ query: "github", items: sampleItems })).toEqual([
35
- { id: "3", label: "GitHub", href: "https://example.com/repo", keywords: ["github", "source"] },
55
+ expect(
56
+ filterSearchSuggestions({ query: "github", items: sampleItems }),
57
+ ).toEqual([
58
+ {
59
+ id: "3",
60
+ label: "GitHub",
61
+ href: "https://example.com/repo",
62
+ keywords: ["github", "source"],
63
+ },
36
64
  ]);
37
65
  });
38
66
 
@@ -43,6 +71,12 @@ describe("filterSearchSuggestions", () => {
43
71
  href: `/x/${index}`,
44
72
  keywords: ["alpha"],
45
73
  }));
46
- expect(filterSearchSuggestions({ query: "alpha", items: many, options: { maxResults: 5 } })).toHaveLength(5);
74
+ expect(
75
+ filterSearchSuggestions({
76
+ query: "alpha",
77
+ items: many,
78
+ options: { maxResults: 5 },
79
+ }),
80
+ ).toHaveLength(5);
47
81
  });
48
82
  });
@@ -28,9 +28,9 @@ export function filterSearchSuggestions<T extends SearchFilterable>({
28
28
  for (const item of items) {
29
29
  const isMatch =
30
30
  item.label.toLowerCase().includes(normalized) ||
31
- (item.description?.toLowerCase().includes(normalized)) ||
32
- (item.href?.toLowerCase().includes(normalized)) ||
33
- (item.keywords?.some((k) => k.toLowerCase().includes(normalized)));
31
+ item.description?.toLowerCase().includes(normalized) ||
32
+ item.href?.toLowerCase().includes(normalized) ||
33
+ item.keywords?.some((k) => k.toLowerCase().includes(normalized));
34
34
 
35
35
  if (isMatch) {
36
36
  matches.push(item);
@@ -7,27 +7,26 @@ import { inputVariants } from "../inputs/variants";
7
7
 
8
8
  import type { SearchBarProps } from "./types";
9
9
 
10
- export const SearchBar = function SearchBar(
11
- {
12
- value,
13
- onValueChange,
14
- leadingSlot,
15
- className,
16
- inputClassName,
17
- appearance = "default",
18
- inputSize = "md",
19
- ring = true,
20
- id,
21
- onChange,
22
- disabled,
23
- type,
24
- comboboxListboxId,
25
- comboboxActiveOptionId,
26
- comboboxExpanded,
27
- ref,
28
- ...rest
29
- }: SearchBarProps,
30
- ) {
10
+ export const SearchBar = function SearchBar({
11
+ value,
12
+ onValueChange,
13
+ leadingSlot,
14
+ className,
15
+ inputClassName,
16
+ appearance = "default",
17
+ inputSize = "md",
18
+ ring = true,
19
+ id,
20
+ onChange,
21
+ disabled,
22
+ type,
23
+ comboboxListboxId,
24
+ comboboxActiveOptionId,
25
+ comboboxExpanded,
26
+ "aria-label": ariaLabel,
27
+ ref,
28
+ ...rest
29
+ }: SearchBarProps) {
31
30
  const generatedId = useId();
32
31
  const controlId = id ?? generatedId;
33
32
  const combobox = Boolean(comboboxListboxId);
@@ -53,6 +52,7 @@ export const SearchBar = function SearchBar(
53
52
  spellCheck={false}
54
53
  disabled={disabled}
55
54
  value={value}
55
+ aria-label={ariaLabel ?? (combobox ? undefined : "Search")}
56
56
  data-slot="search-bar-input"
57
57
  className={cn(
58
58
  inputVariants({ appearance, size: inputSize, ring, as: "input" }),
@@ -78,6 +78,6 @@ export const SearchBar = function SearchBar(
78
78
  />
79
79
  </div>
80
80
  );
81
- }
81
+ };
82
82
 
83
83
  SearchBar.displayName = "SearchBar";
@@ -24,7 +24,10 @@ export function SearchSuggestionList({
24
24
  return (
25
25
  <div
26
26
  data-slot="search-suggestion-list-empty"
27
- className={cn("px-1 py-6 text-center text-sm text-slate-500", className)}
27
+ className={cn(
28
+ "px-1 py-6 text-center text-sm text-slate-500",
29
+ className,
30
+ )}
28
31
  >
29
32
  {emptyLabel ?? "No matches."}
30
33
  </div>
@@ -50,7 +53,10 @@ export function SearchSuggestionList({
50
53
  <nav
51
54
  data-slot="search-suggestion-list"
52
55
  aria-label="Search results"
53
- className={cn("flex max-h-[min(50vh,360px)] flex-col gap-1 overflow-y-auto pr-1", className)}
56
+ className={cn(
57
+ "flex max-h-[min(50vh,360px)] flex-col gap-1 overflow-y-auto pr-1",
58
+ className,
59
+ )}
54
60
  >
55
61
  <div
56
62
  {...(useListbox
@@ -64,7 +70,9 @@ export function SearchSuggestionList({
64
70
  {rows.map(({ item, showGroup }) => {
65
71
  const isActive = activeId === item.id;
66
72
  const optionDomId =
67
- useListbox && listboxId ? searchSuggestionOptionDomId(listboxId, item.id) : undefined;
73
+ useListbox && listboxId
74
+ ? searchSuggestionOptionDomId(listboxId, item.id)
75
+ : undefined;
68
76
  return (
69
77
  <Fragment key={item.id}>
70
78
  {showGroup ? (
@@ -88,7 +96,9 @@ export function SearchSuggestionList({
88
96
  >
89
97
  <span className="font-medium text-slate-100">{item.label}</span>
90
98
  {item.description ? (
91
- <span className="truncate text-xs text-slate-500">{item.description}</span>
99
+ <span className="truncate text-xs text-slate-500">
100
+ {item.description}
101
+ </span>
92
102
  ) : null}
93
103
  </button>
94
104
  </Fragment>
@@ -100,4 +110,3 @@ export function SearchSuggestionList({
100
110
  }
101
111
 
102
112
  SearchSuggestionList.displayName = "SearchSuggestionList";
103
-
@@ -2,7 +2,10 @@
2
2
  * Builds a stable DOM id for a listbox option so `aria-activedescendant` on the combobox
3
3
  * input can reference it. Safe for href-like `itemId` strings.
4
4
  */
5
- export function searchSuggestionOptionDomId(listboxId: string, itemId: string): string {
5
+ export function searchSuggestionOptionDomId(
6
+ listboxId: string,
7
+ itemId: string,
8
+ ): string {
6
9
  const safe = itemId.replace(/[^a-zA-Z0-9_-]/g, "_");
7
10
  return `${listboxId}_opt_${safe}`;
8
11
  }
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { useState, useEffect, useCallback, useRef } from "react";
2
+ import { useState, useEffect, useCallback, useRef, useId } from "react";
3
3
  import {
4
4
  SelectProps,
5
5
  SelectOption,
@@ -32,6 +32,7 @@ export const Select = ({
32
32
  onChange,
33
33
  multiple = true,
34
34
  }: SelectProps) => {
35
+ const listboxId = `${useId()}-listbox`;
35
36
  const [internal, setInternal] = useState<string[]>(defaultValue);
36
37
  const [open, setOpen] = useState(false);
37
38
  const [options, setOptions] = useState<SelectOption[]>([]);
@@ -97,6 +98,7 @@ export const Select = ({
97
98
  registerOption,
98
99
  options,
99
100
  multiple,
101
+ listboxId,
100
102
  }}
101
103
  >
102
104
  <div ref={rootRef} className="relative w-full">
@@ -110,16 +112,25 @@ export const SelectTrigger = ({
110
112
  className,
111
113
  variant,
112
114
  size,
115
+ onClick,
113
116
  ...props
114
117
  }: SelectTriggerProps) => {
115
- const { open, setOpen } = useSelect();
118
+ const { open, setOpen, listboxId } = useSelect();
116
119
 
117
120
  return (
118
121
  <button
119
122
  type="button"
120
- onClick={() => setOpen(!open)}
123
+ aria-expanded={open}
124
+ aria-haspopup="listbox"
125
+ aria-controls={listboxId}
121
126
  className={cn(selectTriggerVariants({ variant, size }), className)}
122
127
  {...props}
128
+ onClick={(event) => {
129
+ onClick?.(event);
130
+ if (!event.defaultPrevented) {
131
+ setOpen(!open);
132
+ }
133
+ }}
123
134
  />
124
135
  );
125
136
  };
@@ -161,12 +172,84 @@ export const SelectContent = ({
161
172
  spacing = "default",
162
173
  ...props
163
174
  }: SelectContentProps) => {
164
- const { open } = useSelect();
175
+ const { open, listboxId, multiple } = useSelect();
176
+ const panelRef = useRef<HTMLDivElement>(null);
177
+
178
+ useEffect(() => {
179
+ if (!open) {
180
+ return;
181
+ }
182
+ const panel = panelRef.current;
183
+ if (!panel) {
184
+ return;
185
+ }
186
+ const opts = Array.from(
187
+ panel.querySelectorAll<HTMLElement>('[role="option"]'),
188
+ ).filter((el) => el.getAttribute("aria-disabled") !== "true");
189
+ requestAnimationFrame(() => opts[0]?.focus());
190
+ }, [open]);
191
+
192
+ useEffect(() => {
193
+ if (!open) {
194
+ return;
195
+ }
196
+ const panel = panelRef.current;
197
+ if (!panel) {
198
+ return;
199
+ }
200
+
201
+ const enabledOptions = () =>
202
+ Array.from(panel.querySelectorAll<HTMLElement>('[role="option"]')).filter(
203
+ (el) => el.getAttribute("aria-disabled") !== "true",
204
+ );
205
+
206
+ const handleKeyDown = (event: KeyboardEvent) => {
207
+ const options = enabledOptions();
208
+ if (options.length === 0) {
209
+ return;
210
+ }
211
+
212
+ const idx = options.findIndex((el) => el === document.activeElement);
213
+
214
+ if (event.key === "ArrowDown") {
215
+ event.preventDefault();
216
+ const next = idx < 0 ? 0 : Math.min(idx + 1, options.length - 1);
217
+ options[next]?.focus();
218
+ return;
219
+ }
220
+
221
+ if (event.key === "ArrowUp") {
222
+ event.preventDefault();
223
+ const prev = idx <= 0 ? options.length - 1 : Math.max(idx - 1, 0);
224
+ options[prev]?.focus();
225
+ return;
226
+ }
227
+
228
+ if (event.key === "Home") {
229
+ event.preventDefault();
230
+ options[0]?.focus();
231
+ return;
232
+ }
233
+
234
+ if (event.key === "End") {
235
+ event.preventDefault();
236
+ options[options.length - 1]?.focus();
237
+ }
238
+ };
239
+
240
+ panel.addEventListener("keydown", handleKeyDown);
241
+ return () => panel.removeEventListener("keydown", handleKeyDown);
242
+ }, [open]);
165
243
 
166
244
  if (!open) return null;
167
245
 
168
246
  return (
169
247
  <div
248
+ ref={panelRef}
249
+ id={listboxId}
250
+ role="listbox"
251
+ aria-multiselectable={multiple}
252
+ tabIndex={-1}
170
253
  className={cn(
171
254
  selectContentVariants({ appearance, size, spacing }),
172
255
  className,
@@ -198,10 +281,17 @@ export const SelectItem = ({
198
281
  <div
199
282
  role="option"
200
283
  aria-selected={isActive}
201
- tabIndex={0}
284
+ aria-disabled={disabled ? true : undefined}
285
+ tabIndex={-1}
202
286
  onClick={() => !disabled && toggleValue(value)}
203
287
  onKeyDown={(e) => {
204
- if (e.key === "Enter") toggleValue(value);
288
+ if (disabled) {
289
+ return;
290
+ }
291
+ if (e.key === "Enter" || e.key === " ") {
292
+ e.preventDefault();
293
+ toggleValue(value);
294
+ }
205
295
  }}
206
296
  data-selected={isActive ? "true" : "false"}
207
297
  className={cn(