@zentauri-ui/zentauri-components 1.4.61 → 1.4.63

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 (597) hide show
  1. package/README.md +73 -73
  2. package/dist/{chunk-JE3PD5ZA.js → chunk-2VUMVDR3.js} +8 -8
  3. package/dist/{chunk-JE3PD5ZA.js.map → chunk-2VUMVDR3.js.map} +1 -1
  4. package/dist/{chunk-DFEZH7TC.mjs → chunk-4D54YOL6.mjs} +2 -2
  5. package/dist/{chunk-DFEZH7TC.mjs.map → chunk-4D54YOL6.mjs.map} +1 -1
  6. package/dist/{chunk-UXGHUBNJ.mjs → chunk-4LT2GNJL.mjs} +13 -13
  7. package/dist/{chunk-UXGHUBNJ.mjs.map → chunk-4LT2GNJL.mjs.map} +1 -1
  8. package/dist/{chunk-BORK3BJO.mjs → chunk-5TV7EL3H.mjs} +19 -19
  9. package/dist/chunk-5TV7EL3H.mjs.map +1 -0
  10. package/dist/{chunk-BSWYZTYK.js → chunk-7DCFVPWN.js} +2 -2
  11. package/dist/chunk-7DCFVPWN.js.map +1 -0
  12. package/dist/{chunk-5QB2KNZQ.js → chunk-7TLKLMBM.js} +11 -9
  13. package/dist/chunk-7TLKLMBM.js.map +1 -0
  14. package/dist/{chunk-2P3UU2J3.mjs → chunk-A6KMZ5ZS.mjs} +12 -12
  15. package/dist/chunk-A6KMZ5ZS.mjs.map +1 -0
  16. package/dist/{chunk-OJ67PZ6N.js → chunk-BCZIYH53.js} +8 -8
  17. package/dist/{chunk-OJ67PZ6N.js.map → chunk-BCZIYH53.js.map} +1 -1
  18. package/dist/{chunk-3OR47XMY.js → chunk-E4FZY7O2.js} +52 -33
  19. package/dist/chunk-E4FZY7O2.js.map +1 -0
  20. package/dist/{chunk-XLAFQ24R.js → chunk-G3B6OHFG.js} +49 -41
  21. package/dist/chunk-G3B6OHFG.js.map +1 -0
  22. package/dist/{chunk-RDSPHBHK.mjs → chunk-G3LEYBRV.mjs} +50 -7
  23. package/dist/chunk-G3LEYBRV.mjs.map +1 -0
  24. package/dist/chunk-GBWGVNDA.js +160 -0
  25. package/dist/chunk-GBWGVNDA.js.map +1 -0
  26. package/dist/{chunk-LVUPECBT.mjs → chunk-H2I54QPJ.mjs} +12 -12
  27. package/dist/chunk-H2I54QPJ.mjs.map +1 -0
  28. package/dist/{chunk-XWM2S6VV.mjs → chunk-I6GR234Z.mjs} +22 -20
  29. package/dist/chunk-I6GR234Z.mjs.map +1 -0
  30. package/dist/{chunk-WZKGRU3U.js → chunk-JUDMPOCI.js} +103 -38
  31. package/dist/chunk-JUDMPOCI.js.map +1 -0
  32. package/dist/chunk-K6YI4FJO.mjs +158 -0
  33. package/dist/chunk-K6YI4FJO.mjs.map +1 -0
  34. package/dist/{chunk-WP7GYBRI.js → chunk-KC5LEZ6J.js} +2 -2
  35. package/dist/chunk-KC5LEZ6J.js.map +1 -0
  36. package/dist/{chunk-PCK6LX3K.js → chunk-KEKNNZD3.js} +19 -19
  37. package/dist/{chunk-PCK6LX3K.js.map → chunk-KEKNNZD3.js.map} +1 -1
  38. package/dist/{chunk-UBFKTC2P.mjs → chunk-LJ7AAIA3.mjs} +3 -3
  39. package/dist/{chunk-UBFKTC2P.mjs.map → chunk-LJ7AAIA3.mjs.map} +1 -1
  40. package/dist/{chunk-BVXTOEBI.mjs → chunk-LN77JJTY.mjs} +45 -26
  41. package/dist/chunk-LN77JJTY.mjs.map +1 -0
  42. package/dist/{chunk-E3DZNJAD.js → chunk-MCOQHXRW.js} +23 -21
  43. package/dist/chunk-MCOQHXRW.js.map +1 -0
  44. package/dist/{chunk-FLILFCQE.mjs → chunk-MTLLJFUI.mjs} +7 -8
  45. package/dist/chunk-MTLLJFUI.mjs.map +1 -0
  46. package/dist/{chunk-C2FCPQTO.js → chunk-MXKGDFQH.js} +7 -7
  47. package/dist/{chunk-C2FCPQTO.js.map → chunk-MXKGDFQH.js.map} +1 -1
  48. package/dist/{chunk-UOFTZKMM.js → chunk-MXLRXYIX.js} +18 -18
  49. package/dist/{chunk-UOFTZKMM.js.map → chunk-MXLRXYIX.js.map} +1 -1
  50. package/dist/{chunk-6I7X5BF2.js → chunk-N2OAI2HN.js} +18 -18
  51. package/dist/chunk-N2OAI2HN.js.map +1 -0
  52. package/dist/{chunk-BITDSQMR.js → chunk-OB4KJZK2.js} +19 -19
  53. package/dist/chunk-OB4KJZK2.js.map +1 -0
  54. package/dist/{chunk-2PQEXQVR.js → chunk-PWL5WD34.js} +76 -27
  55. package/dist/chunk-PWL5WD34.js.map +1 -0
  56. package/dist/{chunk-FT2LMA66.mjs → chunk-QADZK5R7.mjs} +2 -2
  57. package/dist/chunk-QADZK5R7.mjs.map +1 -0
  58. package/dist/{chunk-XIXF7UVM.mjs → chunk-QEGACUFU.mjs} +12 -12
  59. package/dist/chunk-QEGACUFU.mjs.map +1 -0
  60. package/dist/{chunk-WDCIZHXY.mjs → chunk-QZTEFGZF.mjs} +6 -4
  61. package/dist/chunk-QZTEFGZF.mjs.map +1 -0
  62. package/dist/{chunk-N4NO3SYL.js → chunk-SKPZCISM.js} +48 -40
  63. package/dist/chunk-SKPZCISM.js.map +1 -0
  64. package/dist/{chunk-7HL3A4YF.mjs → chunk-TJUNN2PT.mjs} +73 -24
  65. package/dist/chunk-TJUNN2PT.mjs.map +1 -0
  66. package/dist/{chunk-IXDJ3IPG.mjs → chunk-TTYZBO4E.mjs} +40 -32
  67. package/dist/chunk-TTYZBO4E.mjs.map +1 -0
  68. package/dist/{chunk-4B7KGBQB.js → chunk-UWA23DUC.js} +12 -13
  69. package/dist/chunk-UWA23DUC.js.map +1 -0
  70. package/dist/{chunk-CY5BQKRZ.mjs → chunk-VXDEPZKH.mjs} +2 -2
  71. package/dist/chunk-VXDEPZKH.mjs.map +1 -0
  72. package/dist/{chunk-TZ2JVWTZ.mjs → chunk-YNBJAFI2.mjs} +3 -3
  73. package/dist/{chunk-TZ2JVWTZ.mjs.map → chunk-YNBJAFI2.mjs.map} +1 -1
  74. package/dist/{chunk-P5HUBXUX.js → chunk-YTRGRHEB.js} +55 -12
  75. package/dist/chunk-YTRGRHEB.js.map +1 -0
  76. package/dist/{chunk-U4YQCAXW.js → chunk-Z7PHKV2T.js} +18 -18
  77. package/dist/chunk-Z7PHKV2T.js.map +1 -0
  78. package/dist/{chunk-YNCD6TKE.mjs → chunk-ZBBFOMSJ.mjs} +103 -38
  79. package/dist/chunk-ZBBFOMSJ.mjs.map +1 -0
  80. package/dist/{chunk-PGH27VTL.mjs → chunk-ZIDKBEQJ.mjs} +40 -32
  81. package/dist/chunk-ZIDKBEQJ.mjs.map +1 -0
  82. package/dist/{chunk-UOZYPWDZ.js → chunk-ZS5756ZC.js} +2 -2
  83. package/dist/{chunk-UOZYPWDZ.js.map → chunk-ZS5756ZC.js.map} +1 -1
  84. package/dist/{chunk-W6PRMYUC.mjs → chunk-ZYZJ74XB.mjs} +3 -3
  85. package/dist/{chunk-W6PRMYUC.mjs.map → chunk-ZYZJ74XB.mjs.map} +1 -1
  86. package/dist/hooks/index.d.ts +2 -2
  87. package/dist/hooks/index.d.ts.map +1 -1
  88. package/dist/hooks/useClickOutside/useClickOutside.d.ts.map +1 -1
  89. package/dist/hooks/useClickOutside.js +2 -2
  90. package/dist/hooks/useClickOutside.mjs +1 -1
  91. package/dist/hooks/useClipboard/useClipboard.d.ts.map +1 -1
  92. package/dist/hooks/useClipboard.js.map +1 -1
  93. package/dist/hooks/useClipboard.mjs.map +1 -1
  94. package/dist/hooks/useFocusManagement/useFocusManagement.d.ts +5 -14
  95. package/dist/hooks/useFocusManagement/useFocusManagement.d.ts.map +1 -1
  96. package/dist/hooks/useFocusManagement.js +2 -2
  97. package/dist/hooks/useFocusManagement.mjs +1 -1
  98. package/dist/hooks/useLocalStorage/index.d.ts +1 -1
  99. package/dist/hooks/useLocalStorage/index.d.ts.map +1 -1
  100. package/dist/hooks/useLocalStorage.js +1 -3
  101. package/dist/hooks/useLocalStorage.js.map +1 -1
  102. package/dist/hooks/useLocalStorage.mjs +1 -3
  103. package/dist/hooks/useLocalStorage.mjs.map +1 -1
  104. package/dist/hooks/useMediaQuery/useMediaQuery.d.ts.map +1 -1
  105. package/dist/hooks/useMediaQuery.js +2 -2
  106. package/dist/hooks/useMediaQuery.mjs +1 -1
  107. package/dist/hooks/usePagination.js +4 -4
  108. package/dist/hooks/usePagination.mjs +2 -2
  109. package/dist/hooks/usePrefersColorScheme.js +2 -2
  110. package/dist/hooks/usePrefersColorScheme.mjs +1 -1
  111. package/dist/hooks/usePrefersReducedMotion.js +2 -2
  112. package/dist/hooks/usePrefersReducedMotion.mjs +1 -1
  113. package/dist/hooks/useResizeObserver/index.d.ts +1 -1
  114. package/dist/hooks/useResizeObserver/index.d.ts.map +1 -1
  115. package/dist/hooks/useSessionStorage/useSessionStorage.d.ts.map +1 -1
  116. package/dist/hooks/useSessionStorage.js.map +1 -1
  117. package/dist/hooks/useSessionStorage.mjs.map +1 -1
  118. package/dist/hooks/useThrottledCallback/useThrottledCallback.d.ts.map +1 -1
  119. package/dist/hooks/useThrottledCallback.js.map +1 -1
  120. package/dist/hooks/useThrottledCallback.mjs.map +1 -1
  121. package/dist/hooks/useWindowSize/useWindowSize.d.ts.map +1 -1
  122. package/dist/hooks/useWindowSize.js +4 -1
  123. package/dist/hooks/useWindowSize.js.map +1 -1
  124. package/dist/hooks/useWindowSize.mjs +4 -1
  125. package/dist/hooks/useWindowSize.mjs.map +1 -1
  126. package/dist/hooks/utils.js +5 -5
  127. package/dist/hooks/utils.mjs +1 -1
  128. package/dist/lib/utils.d.ts.map +1 -1
  129. package/dist/ui/accordion/accordion.d.ts.map +1 -1
  130. package/dist/ui/accordion/animated/accordion-content-animated.d.ts.map +1 -1
  131. package/dist/ui/accordion/animated/index.d.ts +1 -1
  132. package/dist/ui/accordion/animated/index.d.ts.map +1 -1
  133. package/dist/ui/accordion/animated/types.d.ts.map +1 -1
  134. package/dist/ui/accordion/animated.js +8 -11
  135. package/dist/ui/accordion/animated.js.map +1 -1
  136. package/dist/ui/accordion/animated.mjs +4 -7
  137. package/dist/ui/accordion/animated.mjs.map +1 -1
  138. package/dist/ui/accordion.js +10 -10
  139. package/dist/ui/accordion.js.map +1 -1
  140. package/dist/ui/accordion.mjs +3 -3
  141. package/dist/ui/accordion.mjs.map +1 -1
  142. package/dist/ui/alert/alert-base.d.ts.map +1 -1
  143. package/dist/ui/alert/alert.d.ts.map +1 -1
  144. package/dist/ui/alert/animated/index.d.ts.map +1 -1
  145. package/dist/ui/alert/animated.js +3 -3
  146. package/dist/ui/alert/animated.mjs +2 -2
  147. package/dist/ui/alert/types.d.ts.map +1 -1
  148. package/dist/ui/alert.js +11 -11
  149. package/dist/ui/alert.js.map +1 -1
  150. package/dist/ui/alert.mjs +3 -3
  151. package/dist/ui/alert.mjs.map +1 -1
  152. package/dist/ui/avatar/animated/index.d.ts +1 -1
  153. package/dist/ui/avatar/animated/index.d.ts.map +1 -1
  154. package/dist/ui/avatar/animated.js +6 -6
  155. package/dist/ui/avatar/animated.mjs +3 -3
  156. package/dist/ui/avatar/avatar-base.d.ts.map +1 -1
  157. package/dist/ui/avatar/avatar.d.ts.map +1 -1
  158. package/dist/ui/avatar/variants.d.ts.map +1 -1
  159. package/dist/ui/avatar.js +10 -10
  160. package/dist/ui/avatar.js.map +1 -1
  161. package/dist/ui/avatar.mjs +3 -3
  162. package/dist/ui/avatar.mjs.map +1 -1
  163. package/dist/ui/badge/animated/index.d.ts +1 -1
  164. package/dist/ui/badge/animated/index.d.ts.map +1 -1
  165. package/dist/ui/badge/animated/types.d.ts.map +1 -1
  166. package/dist/ui/badge/animated.js +3 -3
  167. package/dist/ui/badge/animated.mjs +2 -2
  168. package/dist/ui/badge/badge-base.d.ts +1 -1
  169. package/dist/ui/badge/badge-base.d.ts.map +1 -1
  170. package/dist/ui/badge/types.d.ts +1 -0
  171. package/dist/ui/badge/types.d.ts.map +1 -1
  172. package/dist/ui/badge/variants.d.ts +16 -16
  173. package/dist/ui/badge/variants.d.ts.map +1 -1
  174. package/dist/ui/badge.js +5 -5
  175. package/dist/ui/badge.mjs +3 -3
  176. package/dist/ui/breadcrumb/breadcrumb.d.ts.map +1 -1
  177. package/dist/ui/breadcrumb/types.d.ts.map +1 -1
  178. package/dist/ui/breadcrumb/variants.d.ts.map +1 -1
  179. package/dist/ui/breadcrumb.js +47 -43
  180. package/dist/ui/breadcrumb.js.map +1 -1
  181. package/dist/ui/breadcrumb.mjs +43 -39
  182. package/dist/ui/breadcrumb.mjs.map +1 -1
  183. package/dist/ui/buttons/animated/index.d.ts +1 -1
  184. package/dist/ui/buttons/animated/index.d.ts.map +1 -1
  185. package/dist/ui/buttons/animated/types.d.ts.map +1 -1
  186. package/dist/ui/buttons/animated.js +4 -4
  187. package/dist/ui/buttons/animated.mjs +2 -2
  188. package/dist/ui/buttons/types.d.ts.map +1 -1
  189. package/dist/ui/buttons.js +5 -5
  190. package/dist/ui/buttons.mjs +3 -3
  191. package/dist/ui/card/animated.js +8 -8
  192. package/dist/ui/card/animated.mjs +3 -3
  193. package/dist/ui/card/card-base.d.ts.map +1 -1
  194. package/dist/ui/card/card.d.ts.map +1 -1
  195. package/dist/ui/card/index.d.ts +2 -2
  196. package/dist/ui/card/index.d.ts.map +1 -1
  197. package/dist/ui/card.js +13 -13
  198. package/dist/ui/card.js.map +1 -1
  199. package/dist/ui/card.mjs +3 -3
  200. package/dist/ui/card.mjs.map +1 -1
  201. package/dist/ui/divider/animated/index.d.ts +1 -1
  202. package/dist/ui/divider/animated/index.d.ts.map +1 -1
  203. package/dist/ui/divider/animated/types.d.ts.map +1 -1
  204. package/dist/ui/divider/animated.js +3 -3
  205. package/dist/ui/divider/animated.mjs +2 -2
  206. package/dist/ui/divider/divider-base.d.ts.map +1 -1
  207. package/dist/ui/divider.js +7 -7
  208. package/dist/ui/divider.mjs +3 -3
  209. package/dist/ui/drawer/animated/drawer-content-animated.d.ts.map +1 -1
  210. package/dist/ui/drawer/animated/index.d.ts +1 -1
  211. package/dist/ui/drawer/animated/index.d.ts.map +1 -1
  212. package/dist/ui/drawer/animated.js +19 -20
  213. package/dist/ui/drawer/animated.js.map +1 -1
  214. package/dist/ui/drawer/animated.mjs +9 -10
  215. package/dist/ui/drawer/animated.mjs.map +1 -1
  216. package/dist/ui/drawer/drawer-base.d.ts +1 -1
  217. package/dist/ui/drawer/drawer-base.d.ts.map +1 -1
  218. package/dist/ui/drawer/types.d.ts +1 -0
  219. package/dist/ui/drawer/types.d.ts.map +1 -1
  220. package/dist/ui/drawer.js +13 -13
  221. package/dist/ui/drawer.mjs +3 -3
  222. package/dist/ui/dropdown/dropdown.d.ts +1 -1
  223. package/dist/ui/dropdown/dropdown.d.ts.map +1 -1
  224. package/dist/ui/dropdown/types.d.ts +1 -0
  225. package/dist/ui/dropdown/types.d.ts.map +1 -1
  226. package/dist/ui/dropdown/variants.d.ts +1 -1
  227. package/dist/ui/dropdown.js +49 -31
  228. package/dist/ui/dropdown.js.map +1 -1
  229. package/dist/ui/dropdown.mjs +46 -28
  230. package/dist/ui/dropdown.mjs.map +1 -1
  231. package/dist/ui/empty-state/animated/empty-state-animated.d.ts.map +1 -1
  232. package/dist/ui/empty-state/animated/index.d.ts +2 -2
  233. package/dist/ui/empty-state/animated/index.d.ts.map +1 -1
  234. package/dist/ui/empty-state/animated.js +3 -3
  235. package/dist/ui/empty-state/animated.js.map +1 -1
  236. package/dist/ui/empty-state/animated.mjs +2 -2
  237. package/dist/ui/empty-state/animated.mjs.map +1 -1
  238. package/dist/ui/empty-state/empty-state-base.d.ts.map +1 -1
  239. package/dist/ui/empty-state/index.d.ts +1 -1
  240. package/dist/ui/empty-state/index.d.ts.map +1 -1
  241. package/dist/ui/empty-state/types.d.ts +1 -0
  242. package/dist/ui/empty-state/types.d.ts.map +1 -1
  243. package/dist/ui/empty-state.js +11 -11
  244. package/dist/ui/empty-state.mjs +3 -3
  245. package/dist/ui/file-upload/file-upload.d.ts.map +1 -1
  246. package/dist/ui/file-upload/variants.d.ts.map +1 -1
  247. package/dist/ui/file-upload.js +4 -6
  248. package/dist/ui/file-upload.js.map +1 -1
  249. package/dist/ui/file-upload.mjs +2 -4
  250. package/dist/ui/file-upload.mjs.map +1 -1
  251. package/dist/ui/inputs/animated/index.d.ts +1 -1
  252. package/dist/ui/inputs/animated/index.d.ts.map +1 -1
  253. package/dist/ui/inputs/animated.js +3 -3
  254. package/dist/ui/inputs/animated.mjs +1 -1
  255. package/dist/ui/inputs/input-base.d.ts.map +1 -1
  256. package/dist/ui/inputs/types.d.ts +3 -1
  257. package/dist/ui/inputs/types.d.ts.map +1 -1
  258. package/dist/ui/inputs.js +49 -5
  259. package/dist/ui/inputs.js.map +1 -1
  260. package/dist/ui/inputs.mjs +47 -3
  261. package/dist/ui/inputs.mjs.map +1 -1
  262. package/dist/ui/modal/animated/index.d.ts +1 -1
  263. package/dist/ui/modal/animated/index.d.ts.map +1 -1
  264. package/dist/ui/modal/animated/modal-content-animated.d.ts.map +1 -1
  265. package/dist/ui/modal/animated.js +12 -13
  266. package/dist/ui/modal/animated.js.map +1 -1
  267. package/dist/ui/modal/animated.mjs +8 -9
  268. package/dist/ui/modal/animated.mjs.map +1 -1
  269. package/dist/ui/modal/index.d.ts +1 -1
  270. package/dist/ui/modal/index.d.ts.map +1 -1
  271. package/dist/ui/modal/modal-base.d.ts +4 -2
  272. package/dist/ui/modal/modal-base.d.ts.map +1 -1
  273. package/dist/ui/modal/types.d.ts.map +1 -1
  274. package/dist/ui/modal.js +14 -14
  275. package/dist/ui/modal.js.map +1 -1
  276. package/dist/ui/modal.mjs +4 -4
  277. package/dist/ui/modal.mjs.map +1 -1
  278. package/dist/ui/pagination.js +25 -25
  279. package/dist/ui/pagination.js.map +1 -1
  280. package/dist/ui/pagination.mjs +15 -15
  281. package/dist/ui/pagination.mjs.map +1 -1
  282. package/dist/ui/progress/animated/progress-animated.d.ts.map +1 -1
  283. package/dist/ui/progress/animated.js +52 -14
  284. package/dist/ui/progress/animated.js.map +1 -1
  285. package/dist/ui/progress/animated.mjs +45 -7
  286. package/dist/ui/progress/animated.mjs.map +1 -1
  287. package/dist/ui/progress/index.d.ts +2 -2
  288. package/dist/ui/progress/index.d.ts.map +1 -1
  289. package/dist/ui/progress/progress-base.d.ts.map +1 -1
  290. package/dist/ui/progress/progress.d.ts.map +1 -1
  291. package/dist/ui/progress/types.d.ts +3 -0
  292. package/dist/ui/progress/types.d.ts.map +1 -1
  293. package/dist/ui/progress.js +10 -15
  294. package/dist/ui/progress.js.map +1 -1
  295. package/dist/ui/progress.mjs +4 -9
  296. package/dist/ui/progress.mjs.map +1 -1
  297. package/dist/ui/search/search-bar.d.ts +1 -1
  298. package/dist/ui/search/search-bar.d.ts.map +1 -1
  299. package/dist/ui/search/search-suggestion-list.d.ts.map +1 -1
  300. package/dist/ui/search/search-suggestion-utils.d.ts.map +1 -1
  301. package/dist/ui/search.js +15 -7
  302. package/dist/ui/search.js.map +1 -1
  303. package/dist/ui/search.mjs +11 -3
  304. package/dist/ui/search.mjs.map +1 -1
  305. package/dist/ui/select/select.d.ts +1 -1
  306. package/dist/ui/select/select.d.ts.map +1 -1
  307. package/dist/ui/select/types.d.ts +1 -0
  308. package/dist/ui/select/types.d.ts.map +1 -1
  309. package/dist/ui/select/variants.d.ts +1 -1
  310. package/dist/ui/select/variants.d.ts.map +1 -1
  311. package/dist/ui/select.js +145 -63
  312. package/dist/ui/select.js.map +1 -1
  313. package/dist/ui/select.mjs +141 -59
  314. package/dist/ui/select.mjs.map +1 -1
  315. package/dist/ui/skeleton/animated/skeleton-animated.d.ts.map +1 -1
  316. package/dist/ui/skeleton/animated/types.d.ts.map +1 -1
  317. package/dist/ui/skeleton/animated.js +34 -10
  318. package/dist/ui/skeleton/animated.js.map +1 -1
  319. package/dist/ui/skeleton/animated.mjs +29 -5
  320. package/dist/ui/skeleton/animated.mjs.map +1 -1
  321. package/dist/ui/skeleton/variants.d.ts +1 -1
  322. package/dist/ui/skeleton.js +10 -10
  323. package/dist/ui/skeleton.mjs +2 -2
  324. package/dist/ui/slider/slider.d.ts.map +1 -1
  325. package/dist/ui/slider/types.d.ts +8 -2
  326. package/dist/ui/slider/types.d.ts.map +1 -1
  327. package/dist/ui/slider.js +53 -17
  328. package/dist/ui/slider.js.map +1 -1
  329. package/dist/ui/slider.mjs +45 -9
  330. package/dist/ui/slider.mjs.map +1 -1
  331. package/dist/ui/spinner/animated/spinner.d.ts.map +1 -1
  332. package/dist/ui/spinner/animated.js +68 -56
  333. package/dist/ui/spinner/animated.js.map +1 -1
  334. package/dist/ui/spinner/animated.mjs +64 -52
  335. package/dist/ui/spinner/animated.mjs.map +1 -1
  336. package/dist/ui/stepper/stepper.d.ts +2 -7
  337. package/dist/ui/stepper/stepper.d.ts.map +1 -1
  338. package/dist/ui/stepper/types.d.ts +3 -3
  339. package/dist/ui/stepper/types.d.ts.map +1 -1
  340. package/dist/ui/stepper/variants.d.ts +1 -1
  341. package/dist/ui/stepper/variants.d.ts.map +1 -1
  342. package/dist/ui/stepper.js +12 -13
  343. package/dist/ui/stepper.js.map +1 -1
  344. package/dist/ui/stepper.mjs +9 -10
  345. package/dist/ui/stepper.mjs.map +1 -1
  346. package/dist/ui/table/animated/index.d.ts +2 -2
  347. package/dist/ui/table/animated/index.d.ts.map +1 -1
  348. package/dist/ui/table/animated.js +9 -9
  349. package/dist/ui/table/animated.mjs +3 -3
  350. package/dist/ui/table/table-base.d.ts +1 -1
  351. package/dist/ui/table/table-base.d.ts.map +1 -1
  352. package/dist/ui/table/types.d.ts +5 -1
  353. package/dist/ui/table/types.d.ts.map +1 -1
  354. package/dist/ui/table.js +15 -15
  355. package/dist/ui/table.mjs +2 -2
  356. package/dist/ui/tabs/animated/animations.d.ts.map +1 -1
  357. package/dist/ui/tabs/animated/index.d.ts +1 -1
  358. package/dist/ui/tabs/animated/index.d.ts.map +1 -1
  359. package/dist/ui/tabs/animated/types.d.ts.map +1 -1
  360. package/dist/ui/tabs/animated.js +4 -4
  361. package/dist/ui/tabs/animated.js.map +1 -1
  362. package/dist/ui/tabs/animated.mjs +2 -2
  363. package/dist/ui/tabs/animated.mjs.map +1 -1
  364. package/dist/ui/tabs/index.d.ts +1 -1
  365. package/dist/ui/tabs/index.d.ts.map +1 -1
  366. package/dist/ui/tabs/tabs-base.d.ts.map +1 -1
  367. package/dist/ui/tabs/tabs.d.ts +1 -1
  368. package/dist/ui/tabs/tabs.d.ts.map +1 -1
  369. package/dist/ui/tabs/types.d.ts +2 -1
  370. package/dist/ui/tabs/types.d.ts.map +1 -1
  371. package/dist/ui/tabs.js +10 -10
  372. package/dist/ui/tabs.mjs +2 -2
  373. package/dist/ui/toast/animated/toast-animated.d.ts.map +1 -1
  374. package/dist/ui/toast/animated.js +12 -10
  375. package/dist/ui/toast/animated.js.map +1 -1
  376. package/dist/ui/toast/animated.mjs +5 -3
  377. package/dist/ui/toast/animated.mjs.map +1 -1
  378. package/dist/ui/toast/types.d.ts.map +1 -1
  379. package/dist/ui/toast.js +13 -13
  380. package/dist/ui/toast.mjs +2 -2
  381. package/dist/ui/toggle/animated/index.d.ts +2 -2
  382. package/dist/ui/toggle/animated/index.d.ts.map +1 -1
  383. package/dist/ui/toggle/animated/types.d.ts.map +1 -1
  384. package/dist/ui/toggle/animated.js +3 -3
  385. package/dist/ui/toggle/animated.mjs +1 -1
  386. package/dist/ui/toggle/index.d.ts +1 -1
  387. package/dist/ui/toggle/index.d.ts.map +1 -1
  388. package/dist/ui/toggle/toggle-base.d.ts.map +1 -1
  389. package/dist/ui/toggle.js +31 -6
  390. package/dist/ui/toggle.js.map +1 -1
  391. package/dist/ui/toggle.mjs +30 -5
  392. package/dist/ui/toggle.mjs.map +1 -1
  393. package/dist/ui/tooltip/animated/animations.d.ts.map +1 -1
  394. package/dist/ui/tooltip/animated/types.d.ts.map +1 -1
  395. package/dist/ui/tooltip/animated.js +5 -5
  396. package/dist/ui/tooltip/animated.js.map +1 -1
  397. package/dist/ui/tooltip/animated.mjs +2 -2
  398. package/dist/ui/tooltip/animated.mjs.map +1 -1
  399. package/dist/ui/tooltip/tooltip-base.d.ts.map +1 -1
  400. package/dist/ui/tooltip/types.d.ts +1 -0
  401. package/dist/ui/tooltip/types.d.ts.map +1 -1
  402. package/dist/ui/tooltip/variants.d.ts.map +1 -1
  403. package/dist/ui/tooltip.js +8 -8
  404. package/dist/ui/tooltip.mjs +2 -2
  405. package/dist/ui/typography/blockquote-base.d.ts.map +1 -1
  406. package/dist/ui/typography/code-block-base.d.ts.map +1 -1
  407. package/dist/ui/typography/heading-base.d.ts.map +1 -1
  408. package/dist/ui/typography/list-base.d.ts.map +1 -1
  409. package/dist/ui/typography/types.d.ts.map +1 -1
  410. package/dist/ui/typography/variants.d.ts.map +1 -1
  411. package/dist/ui/typography.js +12 -34
  412. package/dist/ui/typography.js.map +1 -1
  413. package/dist/ui/typography.mjs +4 -26
  414. package/dist/ui/typography.mjs.map +1 -1
  415. package/package.json +1 -1
  416. package/src/hooks/index.ts +8 -2
  417. package/src/hooks/useClickOutside/useClickOutside.ts +1 -4
  418. package/src/hooks/useClipboard/useClipboard.test.ts +3 -1
  419. package/src/hooks/useClipboard/useClipboard.ts +1 -2
  420. package/src/hooks/useDisclosure/useDisclosure.test.ts +1 -2
  421. package/src/hooks/useDocumentTitle/useDocumentTitle.test.ts +1 -3
  422. package/src/hooks/useFocusManagement/useFocusManagement.test.tsx +8 -0
  423. package/src/hooks/useFocusManagement/useFocusManagement.ts +162 -34
  424. package/src/hooks/useInView/useInView.test.ts +6 -1
  425. package/src/hooks/useLocalStorage/index.ts +1 -4
  426. package/src/hooks/useLocalStorage/useLocalStorage.test.ts +8 -20
  427. package/src/hooks/useLocalStorage/useLocalStorage.ts +4 -4
  428. package/src/hooks/useMediaQuery/useMediaQuery.ts +1 -4
  429. package/src/hooks/usePrefersReducedMotion/usePrefersReducedMotion.test.ts +3 -1
  430. package/src/hooks/useResizeObserver/index.ts +1 -4
  431. package/src/hooks/useSessionStorage/useSessionStorage.test.ts +2 -6
  432. package/src/hooks/useSessionStorage/useSessionStorage.ts +4 -2
  433. package/src/hooks/useThrottledCallback/useThrottledCallback.ts +4 -3
  434. package/src/hooks/useWindowSize/useWindowSize.ts +4 -1
  435. package/src/lib/utils.ts +3 -3
  436. package/src/ui/accordion/accordion.tsx +6 -1
  437. package/src/ui/accordion/animated/accordion-content-animated.tsx +1 -4
  438. package/src/ui/accordion/animated/index.ts +4 -1
  439. package/src/ui/accordion/animated/types.ts +6 -2
  440. package/src/ui/alert/alert-base.tsx +6 -1
  441. package/src/ui/alert/alert.tsx +2 -2
  442. package/src/ui/alert/animated/index.ts +2 -2
  443. package/src/ui/alert/animated/types.ts +1 -1
  444. package/src/ui/alert/types.ts +1 -3
  445. package/src/ui/alert/variants.ts +9 -9
  446. package/src/ui/avatar/animated/index.ts +6 -2
  447. package/src/ui/avatar/avatar-base.tsx +2 -7
  448. package/src/ui/avatar/avatar.tsx +6 -1
  449. package/src/ui/avatar/variants.ts +23 -11
  450. package/src/ui/badge/animated/index.ts +6 -2
  451. package/src/ui/badge/animated/types.ts +1 -2
  452. package/src/ui/badge/badge-base.tsx +4 -1
  453. package/src/ui/badge/types.ts +1 -0
  454. package/src/ui/badge/variants.ts +16 -18
  455. package/src/ui/breadcrumb/breadcrumb.tsx +10 -2
  456. package/src/ui/breadcrumb/types.ts +20 -9
  457. package/src/ui/breadcrumb/variants.ts +34 -38
  458. package/src/ui/buttons/animated/index.ts +7 -1
  459. package/src/ui/buttons/animated/types.ts +0 -1
  460. package/src/ui/buttons/button.test.tsx +2 -2
  461. package/src/ui/buttons/types.ts +4 -5
  462. package/src/ui/buttons/variants.ts +17 -17
  463. package/src/ui/card/animated/types.ts +0 -1
  464. package/src/ui/card/card-base.tsx +1 -6
  465. package/src/ui/card/card.test.tsx +7 -3
  466. package/src/ui/card/card.tsx +1 -3
  467. package/src/ui/card/index.ts +7 -3
  468. package/src/ui/card/types.ts +1 -1
  469. package/src/ui/card/variants.ts +9 -9
  470. package/src/ui/divider/animated/index.ts +5 -1
  471. package/src/ui/divider/animated/types.ts +4 -2
  472. package/src/ui/divider/divider-base.tsx +0 -1
  473. package/src/ui/drawer/animated/drawer-content-animated.tsx +6 -11
  474. package/src/ui/drawer/animated/index.ts +6 -1
  475. package/src/ui/drawer/drawer-base.tsx +16 -8
  476. package/src/ui/drawer/types.ts +12 -3
  477. package/src/ui/drawer/variants.ts +18 -18
  478. package/src/ui/dropdown/dropdown.test.tsx +1 -3
  479. package/src/ui/dropdown/dropdown.tsx +30 -5
  480. package/src/ui/dropdown/types.ts +1 -0
  481. package/src/ui/dropdown/variants.ts +20 -20
  482. package/src/ui/empty-state/animated/empty-state-animated.tsx +2 -4
  483. package/src/ui/empty-state/animated/index.ts +8 -5
  484. package/src/ui/empty-state/empty-state-base.tsx +14 -2
  485. package/src/ui/empty-state/index.ts +7 -1
  486. package/src/ui/empty-state/types.ts +1 -0
  487. package/src/ui/file-upload/file-upload.tsx +3 -9
  488. package/src/ui/file-upload/variants.ts +18 -9
  489. package/src/ui/inputs/animated/index.ts +7 -1
  490. package/src/ui/inputs/input-base.tsx +60 -6
  491. package/src/ui/inputs/input.test.tsx +5 -1
  492. package/src/ui/inputs/types.ts +7 -2
  493. package/src/ui/modal/animated/index.ts +6 -1
  494. package/src/ui/modal/animated/modal-content-animated.tsx +4 -5
  495. package/src/ui/modal/index.ts +1 -1
  496. package/src/ui/modal/modal-base.tsx +19 -10
  497. package/src/ui/modal/modal.test.tsx +44 -4
  498. package/src/ui/modal/modal.tsx +1 -1
  499. package/src/ui/modal/types.ts +10 -2
  500. package/src/ui/modal/variants.ts +18 -18
  501. package/src/ui/pagination/pagination.tsx +2 -2
  502. package/src/ui/pagination/variants.ts +9 -9
  503. package/src/ui/progress/animated/progress-animated.tsx +43 -5
  504. package/src/ui/progress/animated/types.ts +1 -1
  505. package/src/ui/progress/index.ts +12 -2
  506. package/src/ui/progress/progress-base.tsx +61 -5
  507. package/src/ui/progress/progress.test.tsx +1 -3
  508. package/src/ui/progress/progress.tsx +2 -6
  509. package/src/ui/progress/types.ts +3 -0
  510. package/src/ui/search/filter-search-suggestions.test.ts +46 -12
  511. package/src/ui/search/filter-search-suggestions.ts +3 -3
  512. package/src/ui/search/search-bar.tsx +22 -22
  513. package/src/ui/search/search-suggestion-list.tsx +14 -5
  514. package/src/ui/search/search-suggestion-utils.ts +4 -1
  515. package/src/ui/select/select.tsx +96 -6
  516. package/src/ui/select/types.ts +1 -0
  517. package/src/ui/select/variants.ts +71 -68
  518. package/src/ui/skeleton/animated/skeleton-animated.tsx +25 -4
  519. package/src/ui/skeleton/animated/types.ts +0 -1
  520. package/src/ui/skeleton/skeleton-base.tsx +3 -3
  521. package/src/ui/skeleton/variants.ts +9 -9
  522. package/src/ui/slider/slider.test.tsx +23 -9
  523. package/src/ui/slider/slider.tsx +45 -4
  524. package/src/ui/slider/types.ts +9 -3
  525. package/src/ui/slider/variants.ts +1 -1
  526. package/src/ui/spinner/animated/spinner.tsx +6 -3
  527. package/src/ui/stepper/stepper.test.tsx +5 -6
  528. package/src/ui/stepper/stepper.tsx +12 -16
  529. package/src/ui/stepper/types.ts +11 -5
  530. package/src/ui/stepper/variants.ts +30 -15
  531. package/src/ui/table/animated/index.ts +6 -4
  532. package/src/ui/table/table-base.tsx +32 -11
  533. package/src/ui/table/types.ts +8 -1
  534. package/src/ui/tabs/animated/animations.ts +5 -1
  535. package/src/ui/tabs/animated/index.ts +7 -1
  536. package/src/ui/tabs/animated/types.ts +3 -3
  537. package/src/ui/tabs/index.ts +8 -1
  538. package/src/ui/tabs/tabs-base.tsx +71 -10
  539. package/src/ui/tabs/tabs.tsx +8 -1
  540. package/src/ui/tabs/types.ts +2 -1
  541. package/src/ui/tabs/variants.ts +10 -10
  542. package/src/ui/toast/animated/toast-animated.tsx +3 -1
  543. package/src/ui/toast/animated/types.ts +1 -1
  544. package/src/ui/toast/toast-base.tsx +1 -1
  545. package/src/ui/toast/types.ts +3 -1
  546. package/src/ui/toast/variants.ts +9 -9
  547. package/src/ui/toggle/animated/index.ts +7 -4
  548. package/src/ui/toggle/animated/types.ts +4 -2
  549. package/src/ui/toggle/index.ts +5 -1
  550. package/src/ui/toggle/toggle-base.tsx +36 -4
  551. package/src/ui/tooltip/animated/animations.ts +0 -1
  552. package/src/ui/tooltip/animated/types.ts +0 -1
  553. package/src/ui/tooltip/tooltip-base.tsx +118 -22
  554. package/src/ui/tooltip/types.ts +1 -0
  555. package/src/ui/tooltip/variants.ts +11 -13
  556. package/src/ui/typography/blockquote-base.tsx +1 -8
  557. package/src/ui/typography/code-block-base.tsx +19 -24
  558. package/src/ui/typography/heading-base.tsx +35 -38
  559. package/src/ui/typography/inline-code-base.tsx +15 -15
  560. package/src/ui/typography/list-base.tsx +1 -9
  561. package/src/ui/typography/text-base.tsx +32 -32
  562. package/src/ui/typography/types.ts +4 -17
  563. package/src/ui/typography/typography.test.tsx +3 -1
  564. package/src/ui/typography/variants.ts +16 -8
  565. package/dist/chunk-2P3UU2J3.mjs.map +0 -1
  566. package/dist/chunk-2PQEXQVR.js.map +0 -1
  567. package/dist/chunk-3OR47XMY.js.map +0 -1
  568. package/dist/chunk-4B7KGBQB.js.map +0 -1
  569. package/dist/chunk-5QB2KNZQ.js.map +0 -1
  570. package/dist/chunk-6I7X5BF2.js.map +0 -1
  571. package/dist/chunk-7HL3A4YF.mjs.map +0 -1
  572. package/dist/chunk-BITDSQMR.js.map +0 -1
  573. package/dist/chunk-BORK3BJO.mjs.map +0 -1
  574. package/dist/chunk-BSWYZTYK.js.map +0 -1
  575. package/dist/chunk-BVXTOEBI.mjs.map +0 -1
  576. package/dist/chunk-CY5BQKRZ.mjs.map +0 -1
  577. package/dist/chunk-E3DZNJAD.js.map +0 -1
  578. package/dist/chunk-FLILFCQE.mjs.map +0 -1
  579. package/dist/chunk-FT2LMA66.mjs.map +0 -1
  580. package/dist/chunk-IXDJ3IPG.mjs.map +0 -1
  581. package/dist/chunk-LVUPECBT.mjs.map +0 -1
  582. package/dist/chunk-N4NO3SYL.js.map +0 -1
  583. package/dist/chunk-P5HUBXUX.js.map +0 -1
  584. package/dist/chunk-PGH27VTL.mjs.map +0 -1
  585. package/dist/chunk-RDSPHBHK.mjs.map +0 -1
  586. package/dist/chunk-U4YQCAXW.js.map +0 -1
  587. package/dist/chunk-WDCIZHXY.mjs.map +0 -1
  588. package/dist/chunk-WL5I7RVS.mjs +0 -54
  589. package/dist/chunk-WL5I7RVS.mjs.map +0 -1
  590. package/dist/chunk-WP7GYBRI.js.map +0 -1
  591. package/dist/chunk-WZKGRU3U.js.map +0 -1
  592. package/dist/chunk-XIXF7UVM.mjs.map +0 -1
  593. package/dist/chunk-XLAFQ24R.js.map +0 -1
  594. package/dist/chunk-XWM2S6VV.mjs.map +0 -1
  595. package/dist/chunk-YNCD6TKE.mjs.map +0 -1
  596. package/dist/chunk-YPLVTUYL.js +0 -56
  597. package/dist/chunk-YPLVTUYL.js.map +0 -1
@@ -3,11 +3,13 @@ import type { ToggleProps } from "../types";
3
3
 
4
4
  export type ToggleAnimation = "none" | "spring";
5
5
 
6
- export type ToggleThumbPreset = Pick<HTMLMotionProps<"span">, "transition" | "layout">;
6
+ export type ToggleThumbPreset = Pick<
7
+ HTMLMotionProps<"span">,
8
+ "transition" | "layout"
9
+ >;
7
10
 
8
11
  export type ToggleAnimationPresets = Record<ToggleAnimation, ToggleThumbPreset>;
9
12
 
10
-
11
13
  export type ToggleAnimatedProps = ToggleProps & {
12
14
  animation?: ToggleAnimation;
13
15
  };
@@ -1,5 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  export { Toggle } from "./toggle";
4
- export type { ToggleProps, ToggleTrackVariantProps, ToggleThumbVariantProps } from "./types";
4
+ export type {
5
+ ToggleProps,
6
+ ToggleTrackVariantProps,
7
+ ToggleThumbVariantProps,
8
+ } from "./types";
5
9
  export { toggleThumbVariants, toggleTrackVariants } from "./variants";
@@ -1,12 +1,31 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useState } from "react";
3
+ import { useCallback, useId, useState, type ReactNode } from "react";
4
4
 
5
5
  import { cn } from "../../lib/utils";
6
6
 
7
7
  import type { ToggleProps } from "./types";
8
8
  import { toggleThumbVariants, toggleTrackVariants } from "./variants";
9
9
 
10
+ function hasToggleLabelChildren(node: ReactNode): boolean {
11
+ if (node === undefined || node === null) {
12
+ return false;
13
+ }
14
+ if (typeof node === "boolean") {
15
+ return false;
16
+ }
17
+ if (typeof node === "string") {
18
+ return node.trim().length > 0;
19
+ }
20
+ if (typeof node === "number") {
21
+ return true;
22
+ }
23
+ if (Array.isArray(node)) {
24
+ return node.some(hasToggleLabelChildren);
25
+ }
26
+ return true;
27
+ }
28
+
10
29
  export function ToggleBase(props: ToggleProps) {
11
30
  const {
12
31
  className,
@@ -17,10 +36,11 @@ export function ToggleBase(props: ToggleProps) {
17
36
  onCheckedChange,
18
37
  disabled,
19
38
  ref,
20
- "aria-label": ariaLabel = "Toggle",
39
+ "aria-label": ariaLabelProp,
21
40
  children,
22
41
  ...rest
23
42
  } = props;
43
+ const toggleLabelId = useId();
24
44
  const isControlled = checked !== undefined;
25
45
  const [uncontrolled, setUncontrolled] = useState(defaultChecked);
26
46
  const resolved = isControlled ? Boolean(checked) : uncontrolled;
@@ -36,6 +56,14 @@ export function ToggleBase(props: ToggleProps) {
36
56
  );
37
57
 
38
58
  const thumbShiftPx = size === "sm" ? 14 : size === "lg" ? 26 : 20;
59
+ const labeledByChildren = hasToggleLabelChildren(children);
60
+ const labeling = labeledByChildren
61
+ ? {
62
+ "aria-labelledby": toggleLabelId,
63
+ }
64
+ : {
65
+ "aria-label": ariaLabelProp ?? "Toggle",
66
+ };
39
67
 
40
68
  return (
41
69
  <button
@@ -44,10 +72,10 @@ export function ToggleBase(props: ToggleProps) {
44
72
  role="switch"
45
73
  data-slot="toggle"
46
74
  aria-checked={resolved}
47
- aria-label={ariaLabel}
48
75
  data-state={resolved ? "checked" : "unchecked"}
49
76
  disabled={disabled}
50
77
  className={cn(toggleTrackVariants({ size, appearance }), className)}
78
+ {...labeling}
51
79
  onClick={() => {
52
80
  if (!disabled) {
53
81
  setChecked(!resolved);
@@ -55,7 +83,11 @@ export function ToggleBase(props: ToggleProps) {
55
83
  }}
56
84
  {...rest}
57
85
  >
58
- <span className="sr-only">{children}</span>
86
+ {labeledByChildren ? (
87
+ <span id={toggleLabelId} className="sr-only">
88
+ {children}
89
+ </span>
90
+ ) : null}
59
91
  <span
60
92
  className={cn(
61
93
  toggleThumbVariants({ size }),
@@ -1,6 +1,5 @@
1
1
  import type { TooltipAnimationPresets } from "./types";
2
2
 
3
-
4
3
  export const tooltipAnimationPresets: TooltipAnimationPresets = {
5
4
  none: {},
6
5
  fade: {
@@ -13,7 +13,6 @@ export type TooltipAnimationPresets = Record<
13
13
  TooltipPresetMotionProps
14
14
  >;
15
15
 
16
-
17
16
  export type TooltipContentAnimatedProps = TooltipContentProps & {
18
17
  animation?: TooltipAnimation;
19
18
  };
@@ -1,12 +1,20 @@
1
1
  "use client";
2
2
 
3
3
  import {
4
+ Children,
5
+ cloneElement,
4
6
  createContext,
7
+ isValidElement,
5
8
  useCallback,
6
9
  useContext,
7
10
  useEffect,
11
+ useId,
8
12
  useRef,
9
13
  useState,
14
+ type KeyboardEventHandler,
15
+ type MouseEventHandler,
16
+ type FocusEventHandler,
17
+ type ReactElement,
10
18
  } from "react";
11
19
 
12
20
  import { cn } from "../../lib/utils";
@@ -29,6 +37,22 @@ export const useTooltip = () => {
29
37
  return context;
30
38
  };
31
39
 
40
+ function mergeDescribedBy(
41
+ tooltipId: string,
42
+ existing: unknown,
43
+ open: boolean,
44
+ ): string | undefined {
45
+ if (!open) {
46
+ return typeof existing === "string" ? existing : undefined;
47
+ }
48
+ const baseIds =
49
+ typeof existing === "string" && existing.trim().length > 0
50
+ ? existing.split(/\s+/).filter(Boolean)
51
+ : [];
52
+ const merged = [...new Set([...baseIds, tooltipId])];
53
+ return merged.join(" ");
54
+ }
55
+
32
56
  export const Tooltip = ({
33
57
  children,
34
58
  defaultOpen = false,
@@ -38,6 +62,7 @@ export const Tooltip = ({
38
62
  delay = 100,
39
63
  }: TooltipProps) => {
40
64
  const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
65
+ const tooltipId = `${useId()}-tooltip`;
41
66
 
42
67
  const isControlled = controlledOpen !== undefined;
43
68
  const open = isControlled ? controlledOpen : uncontrolledOpen;
@@ -78,6 +103,7 @@ export const Tooltip = ({
78
103
  delay,
79
104
  scheduleDelayedOpen,
80
105
  cancelDelayedOpen,
106
+ tooltipId,
81
107
  }}
82
108
  >
83
109
  <div className="relative inline-block">{children}</div>
@@ -89,33 +115,102 @@ export const TooltipTrigger = ({
89
115
  children,
90
116
  className,
91
117
  }: TooltipTriggerProps) => {
92
- const { setOpen, scheduleDelayedOpen, cancelDelayedOpen } = useTooltip();
118
+ const { setOpen, scheduleDelayedOpen, cancelDelayedOpen, open, tooltipId } =
119
+ useTooltip();
93
120
 
94
- const triggerProps = {
95
- onMouseEnter: () => scheduleDelayedOpen(),
96
- onMouseLeave: () => {
97
- cancelDelayedOpen();
98
- setOpen(false);
99
- },
100
- onFocus: () => {
101
- cancelDelayedOpen();
102
- setOpen(true);
103
- },
104
- onBlur: () => {
121
+ const onMouseEnter: MouseEventHandler = () => scheduleDelayedOpen();
122
+ const onMouseLeave: MouseEventHandler = () => {
123
+ cancelDelayedOpen();
124
+ setOpen(false);
125
+ };
126
+ const onFocus: FocusEventHandler = () => {
127
+ cancelDelayedOpen();
128
+ setOpen(true);
129
+ };
130
+ const onBlur: FocusEventHandler = () => {
131
+ cancelDelayedOpen();
132
+ setOpen(false);
133
+ };
134
+ const onKeyDown: KeyboardEventHandler = (event) => {
135
+ if (event.key === "Escape") {
105
136
  cancelDelayedOpen();
106
137
  setOpen(false);
107
- },
108
- onKeyDown: (e: React.KeyboardEvent) => {
109
- if (e.key === "Escape") {
138
+ }
139
+ };
140
+
141
+ const childList = Children.toArray(children).filter(
142
+ (node) => node !== null && node !== undefined && typeof node !== "boolean",
143
+ );
144
+
145
+ const soleCandidate =
146
+ childList.length === 1 && isValidElement(childList[0])
147
+ ? (childList[0] as ReactElement<{
148
+ className?: string;
149
+ "aria-describedby"?: string;
150
+ onMouseEnter?: MouseEventHandler;
151
+ onMouseLeave?: MouseEventHandler;
152
+ onFocus?: FocusEventHandler;
153
+ onBlur?: FocusEventHandler;
154
+ onKeyDown?: KeyboardEventHandler;
155
+ }>)
156
+ : undefined;
157
+
158
+ if (soleCandidate) {
159
+ const describedBy = mergeDescribedBy(
160
+ tooltipId,
161
+ soleCandidate.props["aria-describedby"],
162
+ open,
163
+ );
164
+ return cloneElement(soleCandidate, {
165
+ onMouseEnter: (event: React.MouseEvent) => {
166
+ soleCandidate.props.onMouseEnter?.(event);
167
+ if (!event.defaultPrevented) {
168
+ scheduleDelayedOpen();
169
+ }
170
+ },
171
+ onMouseLeave: (event: React.MouseEvent) => {
172
+ soleCandidate.props.onMouseLeave?.(event);
110
173
  cancelDelayedOpen();
111
174
  setOpen(false);
112
- }
113
- },
114
- className,
115
- tabIndex: 0,
116
- };
175
+ },
176
+ onFocus: (event: React.FocusEvent) => {
177
+ soleCandidate.props.onFocus?.(event);
178
+ if (!event.defaultPrevented) {
179
+ cancelDelayedOpen();
180
+ setOpen(true);
181
+ }
182
+ },
183
+ onBlur: (event: React.FocusEvent) => {
184
+ soleCandidate.props.onBlur?.(event);
185
+ cancelDelayedOpen();
186
+ setOpen(false);
187
+ },
188
+ onKeyDown: (event: React.KeyboardEvent) => {
189
+ soleCandidate.props.onKeyDown?.(event);
190
+ if (event.key === "Escape") {
191
+ cancelDelayedOpen();
192
+ setOpen(false);
193
+ }
194
+ },
195
+ className: cn(className, soleCandidate.props.className),
196
+ "aria-describedby": describedBy,
197
+ });
198
+ }
117
199
 
118
- return <span {...triggerProps}>{children}</span>;
200
+ return (
201
+ <span
202
+ className={className}
203
+ tabIndex={0}
204
+ aria-describedby={mergeDescribedBy(tooltipId, undefined, open)}
205
+ onMouseEnter={onMouseEnter}
206
+ onMouseLeave={onMouseLeave}
207
+ onFocus={onFocus}
208
+ onBlur={onBlur}
209
+ onKeyDown={onKeyDown}
210
+ >
211
+ {children}
212
+ </span>
213
+ );
119
214
  };
120
215
 
121
216
  export const TooltipContent = ({
@@ -125,7 +220,7 @@ export const TooltipContent = ({
125
220
  size,
126
221
  width,
127
222
  }: TooltipContentProps) => {
128
- const { open, position } = useTooltip();
223
+ const { open, position, tooltipId } = useTooltip();
129
224
 
130
225
  if (!open) return null;
131
226
 
@@ -138,6 +233,7 @@ export const TooltipContent = ({
138
233
 
139
234
  return (
140
235
  <div
236
+ id={tooltipId}
141
237
  data-open={open}
142
238
  role="tooltip"
143
239
  className={cn(
@@ -9,6 +9,7 @@ export type TooltipContextType = {
9
9
  delay: number;
10
10
  scheduleDelayedOpen: () => void;
11
11
  cancelDelayedOpen: () => void;
12
+ tooltipId: string;
12
13
  };
13
14
 
14
15
  export type TooltipProps = {
@@ -9,33 +9,31 @@ export const tooltipVariants = cva(
9
9
  outline: "border bg-white text-black",
10
10
  ghost: "bg-gray-800 text-white/90",
11
11
  glass: "border border-white/15 bg-white/10 text-white backdrop-blur-md",
12
- emerald: "bg-emerald-600 text-white",
12
+ emerald: "bg-emerald-800 text-white",
13
13
  indigo: "bg-indigo-600 text-white",
14
14
  purple: "bg-purple-600 text-white",
15
15
  pink: "bg-pink-600 text-white",
16
16
  rose: "bg-rose-600 text-white",
17
- sky: "bg-sky-600 text-white",
17
+ sky: "bg-sky-700 text-white",
18
18
  teal: "bg-teal-600 text-white",
19
19
  yellow: "bg-yellow-600 text-white",
20
20
  orange: "bg-orange-600 text-white",
21
21
  green: "bg-green-600 text-white",
22
22
  "gradient-blue":
23
- "bg-gradient-to-r from-blue-600 to-purple-600 text-white",
23
+ "bg-linear-to-r from-blue-600 to-purple-600 text-white",
24
24
  "gradient-green":
25
- "bg-gradient-to-r from-green-600 to-lime-600 text-white",
26
- "gradient-red": "bg-gradient-to-r from-red-600 to-pink-600 text-white",
25
+ "bg-linear-to-r from-green-600 to-lime-600 text-white",
26
+ "gradient-red": "bg-linear-to-r from-red-600 to-pink-600 text-white",
27
27
  "gradient-yellow":
28
- "bg-gradient-to-r from-yellow-600 to-orange-600 text-white",
28
+ "bg-linear-to-r from-yellow-600 to-orange-600 text-white",
29
29
  "gradient-purple":
30
- "bg-gradient-to-r from-purple-600 to-pink-600 text-white",
31
- "gradient-teal":
32
- "bg-gradient-to-r from-teal-600 to-cyan-600 text-white",
30
+ "bg-linear-to-r from-purple-600 to-pink-600 text-white",
31
+ "gradient-teal": "bg-linear-to-r from-teal-600 to-cyan-600 text-white",
33
32
  "gradient-indigo":
34
- "bg-gradient-to-r from-indigo-600 to-purple-600 text-white",
35
- "gradient-pink":
36
- "bg-gradient-to-r from-pink-600 to-rose-600 text-white",
33
+ "bg-linear-to-r from-indigo-600 to-purple-600 text-white",
34
+ "gradient-pink": "bg-linear-to-r from-pink-600 to-rose-600 text-white",
37
35
  "gradient-orange":
38
- "bg-gradient-to-r from-orange-600 to-red-600 text-white",
36
+ "bg-linear-to-r from-orange-600 to-red-600 text-white",
39
37
  },
40
38
  size: {
41
39
  sm: "text-xs px-2 py-1",
@@ -6,14 +6,7 @@ import type { BlockquoteProps } from "./types";
6
6
  import { typographyToneVariants } from "./variants";
7
7
 
8
8
  export const BlockquoteBase = (props: BlockquoteProps) => {
9
- const {
10
- tone,
11
- attribution,
12
- className,
13
- children,
14
- ref,
15
- ...rest
16
- } = props;
9
+ const { tone, attribution, className, children, ref, ...rest } = props;
17
10
 
18
11
  return (
19
12
  <blockquote
@@ -6,32 +6,27 @@ import type { CodeBlockProps } from "./types";
6
6
  import { typographyToneVariants } from "./variants";
7
7
 
8
8
  export const CodeBlockBase = (props: CodeBlockProps) => {
9
- const {
10
- tone,
11
- language,
12
- className,
13
- children,
14
- ref,
15
- ...rest
16
- } = props;
9
+ const { tone, language, className, children, ref, ...rest } = props;
17
10
 
18
- const ariaLabel = language ? `Code sample (${language})` : "Code sample";
11
+ const ariaLabel = language ? `Code sample (${language})` : "Code sample";
19
12
 
20
- return (
21
- <pre
22
- ref={ref}
23
- data-slot="typography-code-block"
24
- aria-label={ariaLabel}
25
- className={cn(
26
- typographyToneVariants({ tone }),
27
- "overflow-x-auto rounded-xl border border-white/10 bg-slate-950/80 p-4 text-sm leading-relaxed shadow-inner shadow-slate-950/40",
28
- className,
29
- )}
30
- {...rest}
31
- >
32
- <code className="font-mono text-[0.95em] whitespace-pre-wrap wrap-break-word">{children}</code>
33
- </pre>
34
- );
13
+ return (
14
+ <pre
15
+ ref={ref}
16
+ data-slot="typography-code-block"
17
+ aria-label={ariaLabel}
18
+ className={cn(
19
+ typographyToneVariants({ tone }),
20
+ "overflow-x-auto rounded-xl border border-white/10 bg-slate-950/80 p-4 text-sm leading-relaxed shadow-inner shadow-slate-950/40",
21
+ className,
22
+ )}
23
+ {...rest}
24
+ >
25
+ <code className="font-mono text-[0.95em] whitespace-pre-wrap wrap-break-word">
26
+ {children}
27
+ </code>
28
+ </pre>
29
+ );
35
30
  };
36
31
 
37
32
  CodeBlockBase.displayName = "CodeBlock";
@@ -3,10 +3,7 @@ import { forwardRef } from "react";
3
3
  import { cn } from "../../lib/utils";
4
4
 
5
5
  import type { HeadingProps } from "./types";
6
- import {
7
- headingLevelVariants,
8
- typographyToneVariants,
9
- } from "./variants";
6
+ import { headingLevelVariants, typographyToneVariants } from "./variants";
10
7
 
11
8
  const HEADING_TAGS = {
12
9
  1: "h1",
@@ -18,42 +15,42 @@ const HEADING_TAGS = {
18
15
  } as const;
19
16
 
20
17
  export const HeadingBase = (props: HeadingProps) => {
21
- const {
22
- level,
23
- displayLevel,
24
- tone,
25
- bold,
26
- italic,
27
- underline,
28
- strikethrough,
29
- ref,
30
- className,
31
- children,
32
- ...rest
33
- } = props;
18
+ const {
19
+ level,
20
+ displayLevel,
21
+ tone,
22
+ bold,
23
+ italic,
24
+ underline,
25
+ strikethrough,
26
+ ref,
27
+ className,
28
+ children,
29
+ ...rest
30
+ } = props;
34
31
 
35
- const Tag = HEADING_TAGS[level];
36
- const scale = displayLevel ?? level;
32
+ const Tag = HEADING_TAGS[level];
33
+ const scale = displayLevel ?? level;
37
34
 
38
- return (
39
- <Tag
40
- ref={ref}
41
- data-slot="typography-heading"
42
- data-level={level}
43
- className={cn(
44
- typographyToneVariants({ tone }),
45
- headingLevelVariants({ level: scale }),
46
- bold && "font-bold",
47
- italic && "italic",
48
- underline && "underline underline-offset-4",
49
- strikethrough && "line-through",
50
- className,
51
- )}
52
- {...rest}
53
- >
54
- {children}
55
- </Tag>
56
- );
35
+ return (
36
+ <Tag
37
+ ref={ref}
38
+ data-slot="typography-heading"
39
+ data-level={level}
40
+ className={cn(
41
+ typographyToneVariants({ tone }),
42
+ headingLevelVariants({ level: scale }),
43
+ bold && "font-bold",
44
+ italic && "italic",
45
+ underline && "underline underline-offset-4",
46
+ strikethrough && "line-through",
47
+ className,
48
+ )}
49
+ {...rest}
50
+ >
51
+ {children}
52
+ </Tag>
53
+ );
57
54
  };
58
55
 
59
56
  HeadingBase.displayName = "Heading";
@@ -6,22 +6,22 @@ import type { InlineCodeProps } from "./types";
6
6
  import { typographyToneVariants } from "./variants";
7
7
 
8
8
  export const InlineCodeBase = (props: InlineCodeProps) => {
9
- const { tone, className, children, ref, ...rest } = props;
9
+ const { tone, className, children, ref, ...rest } = props;
10
10
 
11
- return (
12
- <code
13
- ref={ref}
14
- data-slot="typography-inline-code"
15
- className={cn(
16
- typographyToneVariants({ tone }),
17
- "rounded-md border border-white/10 bg-white/6 px-1.5 py-0.5 font-mono text-[0.925em] font-normal",
18
- className,
19
- )}
20
- {...rest}
21
- >
22
- {children}
23
- </code>
24
- );
11
+ return (
12
+ <code
13
+ ref={ref}
14
+ data-slot="typography-inline-code"
15
+ className={cn(
16
+ typographyToneVariants({ tone }),
17
+ "rounded-md border border-white/10 bg-white/6 px-1.5 py-0.5 font-mono text-[0.925em] font-normal",
18
+ className,
19
+ )}
20
+ {...rest}
21
+ >
22
+ {children}
23
+ </code>
24
+ );
25
25
  };
26
26
 
27
27
  InlineCodeBase.displayName = "InlineCode";
@@ -9,15 +9,7 @@ import {
9
9
 
10
10
  export function ListBase(props: ListProps) {
11
11
  if ("ordered" in props && props.ordered === true) {
12
- const {
13
- tone,
14
- className,
15
- children,
16
- ref,
17
- ordered,
18
- marker,
19
- ...rest
20
- } = props;
12
+ const { tone, className, children, ref, ordered, marker, ...rest } = props;
21
13
 
22
14
  void ordered;
23
15
  void marker;
@@ -4,40 +4,40 @@ import type { TextProps } from "./types";
4
4
  import { textSizeVariants, typographyToneVariants } from "./variants";
5
5
 
6
6
  export const TextBase = (props: TextProps) => {
7
- const {
8
- as = "p",
9
- size = "base",
10
- tone,
11
- bold,
12
- italic,
13
- underline,
14
- strikethrough,
15
- highlight,
16
- className,
17
- children,
18
- ...rest
19
- } = props;
7
+ const {
8
+ as = "p",
9
+ size = "base",
10
+ tone,
11
+ bold,
12
+ italic,
13
+ underline,
14
+ strikethrough,
15
+ highlight,
16
+ className,
17
+ children,
18
+ ...rest
19
+ } = props;
20
20
 
21
- const Component = as;
21
+ const Component = as;
22
22
 
23
- return (
24
- <Component
25
- data-slot="typography-text"
26
- className={cn(
27
- typographyToneVariants({ tone }),
28
- textSizeVariants({ size }),
29
- bold && "font-semibold",
30
- italic && "italic",
31
- underline && "underline underline-offset-2",
32
- strikethrough && "line-through",
33
- highlight && "rounded bg-amber-400/15 px-0.5",
34
- className,
35
- )}
36
- {...rest}
37
- >
38
- {children}
39
- </Component>
40
- );
23
+ return (
24
+ <Component
25
+ data-slot="typography-text"
26
+ className={cn(
27
+ typographyToneVariants({ tone }),
28
+ textSizeVariants({ size }),
29
+ bold && "font-semibold",
30
+ italic && "italic",
31
+ underline && "underline underline-offset-2",
32
+ strikethrough && "line-through",
33
+ highlight && "rounded bg-amber-400/15 px-0.5",
34
+ className,
35
+ )}
36
+ {...rest}
37
+ >
38
+ {children}
39
+ </Component>
40
+ );
41
41
  };
42
42
 
43
43
  TextBase.displayName = "Text";