@zentauri-ui/zentauri-components 1.7.3 → 1.7.5

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 (323) hide show
  1. package/README.md +10 -6
  2. package/cli/registry.json +2 -0
  3. package/dist/{chunk-CL55KGDF.js → chunk-3W224B3M.js} +22 -22
  4. package/dist/chunk-3W224B3M.js.map +1 -0
  5. package/dist/{chunk-NZDHSIIC.js → chunk-4OCTFG3W.js} +3 -3
  6. package/dist/chunk-4OCTFG3W.js.map +1 -0
  7. package/dist/{chunk-4ZKBLVQX.js → chunk-5565GZ4T.js} +19 -19
  8. package/dist/chunk-5565GZ4T.js.map +1 -0
  9. package/dist/{chunk-BTJYXKCW.js → chunk-6HPS3ZOP.js} +15 -15
  10. package/dist/chunk-6HPS3ZOP.js.map +1 -0
  11. package/dist/chunk-7XCUMSCJ.mjs +80 -0
  12. package/dist/chunk-7XCUMSCJ.mjs.map +1 -0
  13. package/dist/{chunk-QAJOE3HJ.js → chunk-BU2MPXPZ.js} +6 -6
  14. package/dist/chunk-BU2MPXPZ.js.map +1 -0
  15. package/dist/{chunk-BC6M42HQ.mjs → chunk-CL3VH223.mjs} +21 -21
  16. package/dist/chunk-CL3VH223.mjs.map +1 -0
  17. package/dist/{chunk-QXHS3HHZ.mjs → chunk-D3VZKUMH.mjs} +15 -15
  18. package/dist/chunk-D3VZKUMH.mjs.map +1 -0
  19. package/dist/{chunk-EDARAO7X.js → chunk-DFCDLVZA.js} +7 -7
  20. package/dist/chunk-DFCDLVZA.js.map +1 -0
  21. package/dist/{chunk-ACGVDY5J.mjs → chunk-EZCYSFML.mjs} +4 -4
  22. package/dist/chunk-EZCYSFML.mjs.map +1 -0
  23. package/dist/{chunk-ZYKJC5HH.js → chunk-G66SXATZ.js} +15 -15
  24. package/dist/chunk-G66SXATZ.js.map +1 -0
  25. package/dist/{chunk-QBPVJH4P.mjs → chunk-H7WDA6U6.mjs} +5 -5
  26. package/dist/chunk-H7WDA6U6.mjs.map +1 -0
  27. package/dist/{chunk-OZMSE44N.mjs → chunk-HLG2YJFZ.mjs} +19 -19
  28. package/dist/chunk-HLG2YJFZ.mjs.map +1 -0
  29. package/dist/{chunk-QYLTKBH7.js → chunk-INXWZ4DS.js} +3 -3
  30. package/dist/chunk-INXWZ4DS.js.map +1 -0
  31. package/dist/{chunk-QSPXPU72.js → chunk-KTLJEPLF.js} +21 -21
  32. package/dist/chunk-KTLJEPLF.js.map +1 -0
  33. package/dist/chunk-LMIL2R4R.js +197 -0
  34. package/dist/chunk-LMIL2R4R.js.map +1 -0
  35. package/dist/{chunk-PR4QXFJT.js → chunk-LNYCEPW5.js} +5 -5
  36. package/dist/chunk-LNYCEPW5.js.map +1 -0
  37. package/dist/chunk-MEAVYU2Y.mjs +192 -0
  38. package/dist/chunk-MEAVYU2Y.mjs.map +1 -0
  39. package/dist/{chunk-P5WLYJ2C.mjs → chunk-NNZXBL7R.mjs} +6 -6
  40. package/dist/chunk-NNZXBL7R.mjs.map +1 -0
  41. package/dist/{chunk-HMNIH3KJ.mjs → chunk-ORFI4BCJ.mjs} +3 -3
  42. package/dist/chunk-ORFI4BCJ.mjs.map +1 -0
  43. package/dist/{chunk-K7TCW5PJ.js → chunk-PMALYOPA.js} +3 -3
  44. package/dist/chunk-PMALYOPA.js.map +1 -0
  45. package/dist/{chunk-WPXQHWPV.js → chunk-PYUZOVLY.js} +4 -4
  46. package/dist/chunk-PYUZOVLY.js.map +1 -0
  47. package/dist/{chunk-ITVMSCOJ.mjs → chunk-R2JJTREQ.mjs} +22 -22
  48. package/dist/chunk-R2JJTREQ.mjs.map +1 -0
  49. package/dist/chunk-RIHJAEOL.js +107 -0
  50. package/dist/chunk-RIHJAEOL.js.map +1 -0
  51. package/dist/{chunk-FHLZH3PB.mjs → chunk-SFRS4EZ5.mjs} +3 -3
  52. package/dist/chunk-SFRS4EZ5.mjs.map +1 -0
  53. package/dist/{chunk-KTGV76M3.mjs → chunk-SSJXWD2M.mjs} +3 -3
  54. package/dist/chunk-SSJXWD2M.mjs.map +1 -0
  55. package/dist/{chunk-YAO62VH2.js → chunk-UGH23TAH.js} +15 -15
  56. package/dist/chunk-UGH23TAH.js.map +1 -0
  57. package/dist/chunk-UPZ5XGUD.mjs +100 -0
  58. package/dist/chunk-UPZ5XGUD.mjs.map +1 -0
  59. package/dist/{chunk-4XVNQ7IY.mjs → chunk-UR7TNW45.mjs} +15 -15
  60. package/dist/chunk-UR7TNW45.mjs.map +1 -0
  61. package/dist/{chunk-HCGSEPOD.mjs → chunk-UROKWFPX.mjs} +7 -7
  62. package/dist/chunk-UROKWFPX.mjs.map +1 -0
  63. package/dist/{chunk-XRDVD2EN.js → chunk-X3O45MPI.js} +3 -3
  64. package/dist/{chunk-XRDVD2EN.js.map → chunk-X3O45MPI.js.map} +1 -1
  65. package/dist/{chunk-KEKMMNL5.mjs → chunk-XXRDLZW7.mjs} +3 -3
  66. package/dist/chunk-XXRDLZW7.mjs.map +1 -0
  67. package/dist/{chunk-NHQ3S4Y6.mjs → chunk-ZIFMIS7D.mjs} +15 -15
  68. package/dist/chunk-ZIFMIS7D.mjs.map +1 -0
  69. package/dist/chunk-ZUT7ZUM7.js +84 -0
  70. package/dist/chunk-ZUT7ZUM7.js.map +1 -0
  71. package/dist/design-system/accordion.d.ts +1 -1
  72. package/dist/design-system/alert.d.ts +5 -5
  73. package/dist/design-system/badge.d.ts +3 -3
  74. package/dist/design-system/card.d.ts +2 -2
  75. package/dist/design-system/checkbox.d.ts +10 -10
  76. package/dist/design-system/checkbox.d.ts.map +1 -1
  77. package/dist/design-system/command.d.ts +1 -1
  78. package/dist/design-system/command.d.ts.map +1 -1
  79. package/dist/design-system/drawer.d.ts +1 -1
  80. package/dist/design-system/dropdown.d.ts +31 -31
  81. package/dist/design-system/dropdown.d.ts.map +1 -1
  82. package/dist/design-system/file-upload.d.ts +15 -15
  83. package/dist/design-system/file-upload.d.ts.map +1 -1
  84. package/dist/design-system/index.d.ts +2 -0
  85. package/dist/design-system/index.d.ts.map +1 -1
  86. package/dist/design-system/inputs.d.ts +13 -13
  87. package/dist/design-system/inputs.d.ts.map +1 -1
  88. package/dist/design-system/modal.d.ts +1 -1
  89. package/dist/design-system/modal.d.ts.map +1 -1
  90. package/dist/design-system/otp-input.d.ts +27 -0
  91. package/dist/design-system/otp-input.d.ts.map +1 -0
  92. package/dist/design-system/pagination.d.ts +25 -25
  93. package/dist/design-system/popover.d.ts +19 -19
  94. package/dist/design-system/popover.d.ts.map +1 -1
  95. package/dist/design-system/radio-group.d.ts +10 -10
  96. package/dist/design-system/radio-group.d.ts.map +1 -1
  97. package/dist/design-system/scroll-area.d.ts +33 -0
  98. package/dist/design-system/scroll-area.d.ts.map +1 -0
  99. package/dist/design-system/select.d.ts +35 -35
  100. package/dist/design-system/select.d.ts.map +1 -1
  101. package/dist/design-system/skeleton.d.ts +13 -13
  102. package/dist/design-system/skeleton.d.ts.map +1 -1
  103. package/dist/design-system/slider.d.ts +23 -23
  104. package/dist/design-system/slider.d.ts.map +1 -1
  105. package/dist/design-system/stepper.d.ts +22 -22
  106. package/dist/design-system/table.d.ts +13 -13
  107. package/dist/design-system/tabs.d.ts +4 -4
  108. package/dist/design-system/tabs.d.ts.map +1 -1
  109. package/dist/design-system/toast.d.ts +17 -17
  110. package/dist/design-system/toast.d.ts.map +1 -1
  111. package/dist/design-system/toggle.d.ts +54 -54
  112. package/dist/design-system/toggle.d.ts.map +1 -1
  113. package/dist/design-system/tooltip.d.ts +20 -20
  114. package/dist/design-system/typography.d.ts +15 -15
  115. package/dist/ui/accordion/animated.js +7 -7
  116. package/dist/ui/accordion/animated.mjs +2 -2
  117. package/dist/ui/accordion.js +9 -9
  118. package/dist/ui/accordion.mjs +2 -2
  119. package/dist/ui/alert/animated/alert-animated.d.ts.map +1 -1
  120. package/dist/ui/alert/animated.js +2 -2
  121. package/dist/ui/alert/animated.js.map +1 -1
  122. package/dist/ui/alert/animated.mjs +1 -1
  123. package/dist/ui/alert/animated.mjs.map +1 -1
  124. package/dist/ui/alert.js +10 -10
  125. package/dist/ui/alert.mjs +2 -2
  126. package/dist/ui/badge/animated.js +2 -2
  127. package/dist/ui/badge/animated.mjs +1 -1
  128. package/dist/ui/badge/variants.d.ts +1 -1
  129. package/dist/ui/badge.js +4 -4
  130. package/dist/ui/badge.mjs +2 -2
  131. package/dist/ui/card/animated.js +7 -7
  132. package/dist/ui/card/animated.mjs +2 -2
  133. package/dist/ui/card.js +12 -12
  134. package/dist/ui/card.mjs +2 -2
  135. package/dist/ui/checkbox/animated.js +4 -4
  136. package/dist/ui/checkbox/animated.mjs +1 -1
  137. package/dist/ui/checkbox.js +8 -8
  138. package/dist/ui/checkbox.mjs +2 -2
  139. package/dist/ui/command/animated.js +2 -2
  140. package/dist/ui/command/animated.mjs +1 -1
  141. package/dist/ui/command.js +15 -15
  142. package/dist/ui/command.mjs +2 -2
  143. package/dist/ui/drawer/animated.js +11 -11
  144. package/dist/ui/drawer/animated.mjs +2 -2
  145. package/dist/ui/drawer.js +11 -11
  146. package/dist/ui/drawer.mjs +1 -1
  147. package/dist/ui/dropdown.js +31 -31
  148. package/dist/ui/dropdown.js.map +1 -1
  149. package/dist/ui/dropdown.mjs +31 -31
  150. package/dist/ui/dropdown.mjs.map +1 -1
  151. package/dist/ui/dynamic-stepper.js +47 -47
  152. package/dist/ui/dynamic-stepper.js.map +1 -1
  153. package/dist/ui/dynamic-stepper.mjs +47 -47
  154. package/dist/ui/dynamic-stepper.mjs.map +1 -1
  155. package/dist/ui/file-upload.js +15 -15
  156. package/dist/ui/file-upload.js.map +1 -1
  157. package/dist/ui/file-upload.mjs +15 -15
  158. package/dist/ui/file-upload.mjs.map +1 -1
  159. package/dist/ui/inputs/animated.js +3 -3
  160. package/dist/ui/inputs/animated.mjs +1 -1
  161. package/dist/ui/inputs.js +4 -4
  162. package/dist/ui/inputs.mjs +2 -2
  163. package/dist/ui/modal/animated.js +4 -4
  164. package/dist/ui/modal/animated.mjs +1 -1
  165. package/dist/ui/modal.js +12 -12
  166. package/dist/ui/modal.mjs +2 -2
  167. package/dist/ui/otp-input/index.d.ts +4 -0
  168. package/dist/ui/otp-input/index.d.ts.map +1 -0
  169. package/dist/ui/otp-input/otp-input.d.ts +6 -0
  170. package/dist/ui/otp-input/otp-input.d.ts.map +1 -0
  171. package/dist/ui/otp-input/types.d.ts +23 -0
  172. package/dist/ui/otp-input/types.d.ts.map +1 -0
  173. package/dist/ui/otp-input/variants.d.ts +5 -0
  174. package/dist/ui/otp-input/variants.d.ts.map +1 -0
  175. package/dist/ui/otp-input.js +302 -0
  176. package/dist/ui/otp-input.js.map +1 -0
  177. package/dist/ui/otp-input.mjs +299 -0
  178. package/dist/ui/otp-input.mjs.map +1 -0
  179. package/dist/ui/pagination.js +25 -25
  180. package/dist/ui/pagination.js.map +1 -1
  181. package/dist/ui/pagination.mjs +25 -25
  182. package/dist/ui/pagination.mjs.map +1 -1
  183. package/dist/ui/popover/animated.js +4 -4
  184. package/dist/ui/popover/animated.mjs +1 -1
  185. package/dist/ui/popover.js +7 -7
  186. package/dist/ui/popover.mjs +1 -1
  187. package/dist/ui/radio-group/animated.js +7 -7
  188. package/dist/ui/radio-group/animated.mjs +1 -1
  189. package/dist/ui/radio-group.js +11 -11
  190. package/dist/ui/radio-group.mjs +2 -2
  191. package/dist/ui/scroll-area/index.d.ts +4 -0
  192. package/dist/ui/scroll-area/index.d.ts.map +1 -0
  193. package/dist/ui/scroll-area/scroll-area.d.ts +6 -0
  194. package/dist/ui/scroll-area/scroll-area.d.ts.map +1 -0
  195. package/dist/ui/scroll-area/types.d.ts +8 -0
  196. package/dist/ui/scroll-area/types.d.ts.map +1 -0
  197. package/dist/ui/scroll-area/variants.d.ts +8 -0
  198. package/dist/ui/scroll-area/variants.d.ts.map +1 -0
  199. package/dist/ui/scroll-area.js +123 -0
  200. package/dist/ui/scroll-area.js.map +1 -0
  201. package/dist/ui/scroll-area.mjs +120 -0
  202. package/dist/ui/scroll-area.mjs.map +1 -0
  203. package/dist/ui/search.js +2 -2
  204. package/dist/ui/search.mjs +1 -1
  205. package/dist/ui/select.js +35 -35
  206. package/dist/ui/select.js.map +1 -1
  207. package/dist/ui/select.mjs +35 -35
  208. package/dist/ui/select.mjs.map +1 -1
  209. package/dist/ui/skeleton/animated.js +8 -8
  210. package/dist/ui/skeleton/animated.mjs +1 -1
  211. package/dist/ui/skeleton.js +9 -9
  212. package/dist/ui/skeleton.mjs +1 -1
  213. package/dist/ui/slider.js +23 -23
  214. package/dist/ui/slider.js.map +1 -1
  215. package/dist/ui/slider.mjs +23 -23
  216. package/dist/ui/slider.mjs.map +1 -1
  217. package/dist/ui/stepper.js +22 -22
  218. package/dist/ui/stepper.js.map +1 -1
  219. package/dist/ui/stepper.mjs +22 -22
  220. package/dist/ui/stepper.mjs.map +1 -1
  221. package/dist/ui/table/animated.js +8 -8
  222. package/dist/ui/table/animated.mjs +2 -2
  223. package/dist/ui/table.js +14 -14
  224. package/dist/ui/table.mjs +1 -1
  225. package/dist/ui/tabs/animated.js +2 -2
  226. package/dist/ui/tabs/animated.mjs +1 -1
  227. package/dist/ui/tabs.js +9 -9
  228. package/dist/ui/tabs.mjs +1 -1
  229. package/dist/ui/toast/animated.js +7 -7
  230. package/dist/ui/toast/animated.mjs +1 -1
  231. package/dist/ui/toast.js +12 -12
  232. package/dist/ui/toast.mjs +1 -1
  233. package/dist/ui/toggle/animated.js +4 -4
  234. package/dist/ui/toggle/animated.mjs +1 -1
  235. package/dist/ui/toggle.js +4 -4
  236. package/dist/ui/toggle.mjs +2 -2
  237. package/dist/ui/tooltip/animated.js +3 -3
  238. package/dist/ui/tooltip/animated.mjs +1 -1
  239. package/dist/ui/tooltip.js +7 -7
  240. package/dist/ui/tooltip.mjs +1 -1
  241. package/dist/ui/typography.js +15 -15
  242. package/dist/ui/typography.js.map +1 -1
  243. package/dist/ui/typography.mjs +15 -15
  244. package/dist/ui/typography.mjs.map +1 -1
  245. package/package.json +1 -1
  246. package/src/design-system/accordion.ts +1 -1
  247. package/src/design-system/alert.ts +5 -5
  248. package/src/design-system/badge.ts +3 -3
  249. package/src/design-system/card.ts +2 -2
  250. package/src/design-system/checkbox.ts +10 -12
  251. package/src/design-system/command.ts +1 -1
  252. package/src/design-system/drawer.ts +1 -1
  253. package/src/design-system/dropdown.ts +31 -31
  254. package/src/design-system/dynamic-stepper.ts +47 -47
  255. package/src/design-system/file-upload.ts +15 -15
  256. package/src/design-system/index.ts +2 -0
  257. package/src/design-system/inputs.ts +13 -13
  258. package/src/design-system/modal.ts +1 -1
  259. package/src/design-system/otp-input.ts +50 -0
  260. package/src/design-system/pagination.ts +25 -25
  261. package/src/design-system/popover.ts +19 -23
  262. package/src/design-system/radio-group.ts +10 -12
  263. package/src/design-system/scroll-area.ts +47 -0
  264. package/src/design-system/select.ts +36 -35
  265. package/src/design-system/skeleton.ts +20 -13
  266. package/src/design-system/slider.ts +23 -23
  267. package/src/design-system/stepper.ts +22 -22
  268. package/src/design-system/table.ts +13 -13
  269. package/src/design-system/tabs.ts +5 -4
  270. package/src/design-system/toast.ts +17 -17
  271. package/src/design-system/toggle.ts +55 -54
  272. package/src/design-system/tooltip.ts +20 -20
  273. package/src/design-system/typography.ts +15 -15
  274. package/src/ui/alert/animated/alert-animated.tsx +1 -0
  275. package/src/ui/otp-input/index.ts +9 -0
  276. package/src/ui/otp-input/otp-input.test.tsx +99 -0
  277. package/src/ui/otp-input/otp-input.tsx +327 -0
  278. package/src/ui/otp-input/types.ts +32 -0
  279. package/src/ui/otp-input/variants.ts +18 -0
  280. package/src/ui/scroll-area/index.ts +5 -0
  281. package/src/ui/scroll-area/scroll-area.test.tsx +116 -0
  282. package/src/ui/scroll-area/scroll-area.tsx +64 -0
  283. package/src/ui/scroll-area/types.ts +11 -0
  284. package/src/ui/scroll-area/variants.ts +44 -0
  285. package/dist/chunk-4XVNQ7IY.mjs.map +0 -1
  286. package/dist/chunk-4ZKBLVQX.js.map +0 -1
  287. package/dist/chunk-6QQUQLPB.js +0 -107
  288. package/dist/chunk-6QQUQLPB.js.map +0 -1
  289. package/dist/chunk-ACGVDY5J.mjs.map +0 -1
  290. package/dist/chunk-BC6M42HQ.mjs.map +0 -1
  291. package/dist/chunk-BTJYXKCW.js.map +0 -1
  292. package/dist/chunk-CL55KGDF.js.map +0 -1
  293. package/dist/chunk-EDARAO7X.js.map +0 -1
  294. package/dist/chunk-EN4VLNBF.js +0 -197
  295. package/dist/chunk-EN4VLNBF.js.map +0 -1
  296. package/dist/chunk-FHLZH3PB.mjs.map +0 -1
  297. package/dist/chunk-HCGSEPOD.mjs.map +0 -1
  298. package/dist/chunk-HMNIH3KJ.mjs.map +0 -1
  299. package/dist/chunk-ITVMSCOJ.mjs.map +0 -1
  300. package/dist/chunk-K6IZANTI.mjs +0 -80
  301. package/dist/chunk-K6IZANTI.mjs.map +0 -1
  302. package/dist/chunk-K7TCW5PJ.js.map +0 -1
  303. package/dist/chunk-KEKMMNL5.mjs.map +0 -1
  304. package/dist/chunk-KTGV76M3.mjs.map +0 -1
  305. package/dist/chunk-MTTXLC2V.mjs +0 -100
  306. package/dist/chunk-MTTXLC2V.mjs.map +0 -1
  307. package/dist/chunk-NHQ3S4Y6.mjs.map +0 -1
  308. package/dist/chunk-NZDHSIIC.js.map +0 -1
  309. package/dist/chunk-OZMSE44N.mjs.map +0 -1
  310. package/dist/chunk-P5WLYJ2C.mjs.map +0 -1
  311. package/dist/chunk-PHEUJ4EF.js +0 -84
  312. package/dist/chunk-PHEUJ4EF.js.map +0 -1
  313. package/dist/chunk-PMWRJ2KS.mjs +0 -192
  314. package/dist/chunk-PMWRJ2KS.mjs.map +0 -1
  315. package/dist/chunk-PR4QXFJT.js.map +0 -1
  316. package/dist/chunk-QAJOE3HJ.js.map +0 -1
  317. package/dist/chunk-QBPVJH4P.mjs.map +0 -1
  318. package/dist/chunk-QSPXPU72.js.map +0 -1
  319. package/dist/chunk-QXHS3HHZ.mjs.map +0 -1
  320. package/dist/chunk-QYLTKBH7.js.map +0 -1
  321. package/dist/chunk-WPXQHWPV.js.map +0 -1
  322. package/dist/chunk-YAO62VH2.js.map +0 -1
  323. package/dist/chunk-ZYKJC5HH.js.map +0 -1
@@ -7,43 +7,43 @@ export const zuiTooltipVariants = {
7
7
  outline:
8
8
  "border bg-[var(--zui-tooltip-outline-bg,#000000)] dark:bg-[var(--zui-tooltip-outline-bg-dark,#ffffff)] text-[color:var(--zui-tooltip-outline-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-outline-fg-dark,#000000)]",
9
9
  ghost:
10
- "bg-[var(--zui-tooltip-ghost-bg,oklch(27.8%_0.033_256.848))] text-[color:var(--zui-tooltip-ghost-fg,#ffffffe6)]",
10
+ "bg-[var(--zui-tooltip-ghost-bg,oklch(27.8%_0.033_256.848))] dark:bg-[var(--zui-tooltip-ghost-bg-dark,oklch(27.8%_0.033_256.848))] text-[color:var(--zui-tooltip-ghost-fg,#ffffffe6)] dark:text-[color:var(--zui-tooltip-ghost-fg-dark,#ffffffe6)]",
11
11
  glass:
12
12
  "border border-[color:var(--zui-tooltip-glass-border,#00000026)] dark:border-[color:var(--zui-tooltip-glass-border-dark,#ffffff26)] bg-[var(--zui-tooltip-glass-bg,#0000001a)] dark:bg-[var(--zui-tooltip-glass-bg-dark,#ffffff1a)] text-[color:var(--zui-tooltip-glass-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-tooltip-glass-fg-dark,#ffffff)] backdrop-blur-md",
13
13
  emerald:
14
- "bg-[var(--zui-tooltip-emerald-bg,oklch(43.2%_0.095_166.913))] text-[color:var(--zui-tooltip-emerald-fg,#ffffff)]",
14
+ "bg-[var(--zui-tooltip-emerald-bg,oklch(43.2%_0.095_166.913))] dark:bg-[var(--zui-tooltip-emerald-bg-dark,oklch(43.2%_0.095_166.913))] text-[color:var(--zui-tooltip-emerald-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-emerald-fg-dark,#ffffff)]",
15
15
  indigo:
16
- "bg-[var(--zui-tooltip-indigo-bg,oklch(39.8%_0.195_277.366))] text-[color:var(--zui-tooltip-indigo-fg,#ffffff)]",
16
+ "bg-[var(--zui-tooltip-indigo-bg,oklch(39.8%_0.195_277.366))] dark:bg-[var(--zui-tooltip-indigo-bg-dark,oklch(39.8%_0.195_277.366))] text-[color:var(--zui-tooltip-indigo-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-indigo-fg-dark,#ffffff)]",
17
17
  purple:
18
- "bg-[var(--zui-tooltip-purple-bg,oklch(43.8%_0.218_303.724))] text-[color:var(--zui-tooltip-purple-fg,#ffffff)]",
19
- pink: "bg-[var(--zui-tooltip-pink-bg,oklch(45.9%_0.187_3.815))] text-[color:var(--zui-tooltip-pink-fg,#ffffff)]",
20
- rose: "bg-[var(--zui-tooltip-rose-bg,oklch(45.5%_0.188_13.697))] text-[color:var(--zui-tooltip-rose-fg,#ffffff)]",
21
- sky: "bg-[var(--zui-tooltip-sky-bg,oklch(50%_0.134_242.749))] text-[color:var(--zui-tooltip-sky-fg,#ffffff)]",
22
- teal: "bg-[var(--zui-tooltip-teal-bg,oklch(43.7%_0.078_188.216))] text-[color:var(--zui-tooltip-teal-fg,#ffffff)]",
18
+ "bg-[var(--zui-tooltip-purple-bg,oklch(43.8%_0.218_303.724))] dark:bg-[var(--zui-tooltip-purple-bg-dark,oklch(43.8%_0.218_303.724))] text-[color:var(--zui-tooltip-purple-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-purple-fg-dark,#ffffff)]",
19
+ pink: "bg-[var(--zui-tooltip-pink-bg,oklch(45.9%_0.187_3.815))] dark:bg-[var(--zui-tooltip-pink-bg-dark,oklch(45.9%_0.187_3.815))] text-[color:var(--zui-tooltip-pink-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-pink-fg-dark,#ffffff)]",
20
+ rose: "bg-[var(--zui-tooltip-rose-bg,oklch(45.5%_0.188_13.697))] dark:bg-[var(--zui-tooltip-rose-bg-dark,oklch(45.5%_0.188_13.697))] text-[color:var(--zui-tooltip-rose-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-rose-fg-dark,#ffffff)]",
21
+ sky: "bg-[var(--zui-tooltip-sky-bg,oklch(50%_0.134_242.749))] dark:bg-[var(--zui-tooltip-sky-bg-dark,oklch(50%_0.134_242.749))] text-[color:var(--zui-tooltip-sky-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-sky-fg-dark,#ffffff)]",
22
+ teal: "bg-[var(--zui-tooltip-teal-bg,oklch(43.7%_0.078_188.216))] dark:bg-[var(--zui-tooltip-teal-bg-dark,oklch(43.7%_0.078_188.216))] text-[color:var(--zui-tooltip-teal-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-teal-fg-dark,#ffffff)]",
23
23
  yellow:
24
- "bg-[var(--zui-tooltip-yellow-bg,oklch(47.6%_0.114_61.907))] text-[color:var(--zui-tooltip-yellow-fg,#ffffff)]",
24
+ "bg-[var(--zui-tooltip-yellow-bg,oklch(47.6%_0.114_61.907))] dark:bg-[var(--zui-tooltip-yellow-bg-dark,oklch(47.6%_0.114_61.907))] text-[color:var(--zui-tooltip-yellow-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-yellow-fg-dark,#ffffff)]",
25
25
  orange:
26
- "bg-[var(--zui-tooltip-orange-bg,oklch(47%_0.157_37.304))] text-[color:var(--zui-tooltip-orange-fg,#ffffff)]",
26
+ "bg-[var(--zui-tooltip-orange-bg,oklch(47%_0.157_37.304))] dark:bg-[var(--zui-tooltip-orange-bg-dark,oklch(47%_0.157_37.304))] text-[color:var(--zui-tooltip-orange-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-orange-fg-dark,#ffffff)]",
27
27
  green:
28
- "bg-[var(--zui-tooltip-green-bg,oklch(44.8%_0.119_151.328))] text-[color:var(--zui-tooltip-green-fg,#ffffff)]",
28
+ "bg-[var(--zui-tooltip-green-bg,oklch(44.8%_0.119_151.328))] dark:bg-[var(--zui-tooltip-green-bg-dark,oklch(44.8%_0.119_151.328))] text-[color:var(--zui-tooltip-green-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-green-fg-dark,#ffffff)]",
29
29
  "gradient-blue":
30
- "bg-linear-to-r from-[var(--zui-tooltip-gradient-blue-from,oklch(42.4%_0.199_265.638))] to-[var(--zui-tooltip-gradient-blue-to,oklch(43.8%_0.218_303.724))] text-[color:var(--zui-tooltip-gradient-blue-fg,#ffffff)]",
30
+ "bg-linear-to-r from-[var(--zui-tooltip-gradient-blue-from,oklch(42.4%_0.199_265.638))] dark:from-[var(--zui-tooltip-gradient-blue-from-dark,oklch(42.4%_0.199_265.638))] to-[var(--zui-tooltip-gradient-blue-to,oklch(43.8%_0.218_303.724))] dark:to-[var(--zui-tooltip-gradient-blue-to-dark,oklch(43.8%_0.218_303.724))] text-[color:var(--zui-tooltip-gradient-blue-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-gradient-blue-fg-dark,#ffffff)]",
31
31
  "gradient-green":
32
- "bg-linear-to-r from-[var(--zui-tooltip-gradient-green-from,oklch(44.8%_0.119_151.328))] to-[var(--zui-tooltip-gradient-green-to,oklch(45.3%_0.124_130.933))] text-[color:var(--zui-tooltip-gradient-green-fg,#ffffff)]",
32
+ "bg-linear-to-r from-[var(--zui-tooltip-gradient-green-from,oklch(44.8%_0.119_151.328))] dark:from-[var(--zui-tooltip-gradient-green-from-dark,oklch(44.8%_0.119_151.328))] to-[var(--zui-tooltip-gradient-green-to,oklch(45.3%_0.124_130.933))] dark:to-[var(--zui-tooltip-gradient-green-to-dark,oklch(45.3%_0.124_130.933))] text-[color:var(--zui-tooltip-gradient-green-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-gradient-green-fg-dark,#ffffff)]",
33
33
  "gradient-red":
34
- "bg-linear-to-r from-[var(--zui-tooltip-gradient-red-from,oklch(44.4%_0.177_26.899))] to-[var(--zui-tooltip-gradient-red-to,oklch(45.9%_0.187_3.815))] text-[color:var(--zui-tooltip-gradient-red-fg,#ffffff)]",
34
+ "bg-linear-to-r from-[var(--zui-tooltip-gradient-red-from,oklch(44.4%_0.177_26.899))] dark:from-[var(--zui-tooltip-gradient-red-from-dark,oklch(44.4%_0.177_26.899))] to-[var(--zui-tooltip-gradient-red-to,oklch(45.9%_0.187_3.815))] dark:to-[var(--zui-tooltip-gradient-red-to-dark,oklch(45.9%_0.187_3.815))] text-[color:var(--zui-tooltip-gradient-red-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-gradient-red-fg-dark,#ffffff)]",
35
35
  "gradient-yellow":
36
- "bg-linear-to-r from-[var(--zui-tooltip-gradient-yellow-from,oklch(47.6%_0.114_61.907))] to-[var(--zui-tooltip-gradient-yellow-to,oklch(47%_0.157_37.304))] text-[color:var(--zui-tooltip-gradient-yellow-fg,#ffffff)]",
36
+ "bg-linear-to-r from-[var(--zui-tooltip-gradient-yellow-from,oklch(47.6%_0.114_61.907))] dark:from-[var(--zui-tooltip-gradient-yellow-from-dark,oklch(47.6%_0.114_61.907))] to-[var(--zui-tooltip-gradient-yellow-to,oklch(47%_0.157_37.304))] dark:to-[var(--zui-tooltip-gradient-yellow-to-dark,oklch(47%_0.157_37.304))] text-[color:var(--zui-tooltip-gradient-yellow-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-gradient-yellow-fg-dark,#ffffff)]",
37
37
  "gradient-purple":
38
- "bg-linear-to-r from-[var(--zui-tooltip-gradient-purple-from,oklch(43.8%_0.218_303.724))] to-[var(--zui-tooltip-gradient-purple-to,oklch(45.9%_0.187_3.815))] text-[color:var(--zui-tooltip-gradient-purple-fg,#ffffff)]",
38
+ "bg-linear-to-r from-[var(--zui-tooltip-gradient-purple-from,oklch(43.8%_0.218_303.724))] dark:from-[var(--zui-tooltip-gradient-purple-from-dark,oklch(43.8%_0.218_303.724))] to-[var(--zui-tooltip-gradient-purple-to,oklch(45.9%_0.187_3.815))] dark:to-[var(--zui-tooltip-gradient-purple-to-dark,oklch(45.9%_0.187_3.815))] text-[color:var(--zui-tooltip-gradient-purple-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-gradient-purple-fg-dark,#ffffff)]",
39
39
  "gradient-teal":
40
- "bg-linear-to-r from-[var(--zui-tooltip-gradient-teal-from,oklch(43.7%_0.078_188.216))] to-[var(--zui-tooltip-gradient-teal-to,oklch(45%_0.085_224.283))] text-[color:var(--zui-tooltip-gradient-teal-fg,#ffffff)]",
40
+ "bg-linear-to-r from-[var(--zui-tooltip-gradient-teal-from,oklch(43.7%_0.078_188.216))] dark:from-[var(--zui-tooltip-gradient-teal-from-dark,oklch(43.7%_0.078_188.216))] to-[var(--zui-tooltip-gradient-teal-to,oklch(45%_0.085_224.283))] dark:to-[var(--zui-tooltip-gradient-teal-to-dark,oklch(45%_0.085_224.283))] text-[color:var(--zui-tooltip-gradient-teal-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-gradient-teal-fg-dark,#ffffff)]",
41
41
  "gradient-indigo":
42
- "bg-linear-to-r from-[var(--zui-tooltip-gradient-indigo-from,oklch(39.8%_0.195_277.366))] to-[var(--zui-tooltip-gradient-indigo-to,oklch(43.8%_0.218_303.724))] text-[color:var(--zui-tooltip-gradient-indigo-fg,#ffffff)]",
42
+ "bg-linear-to-r from-[var(--zui-tooltip-gradient-indigo-from,oklch(39.8%_0.195_277.366))] dark:from-[var(--zui-tooltip-gradient-indigo-from-dark,oklch(39.8%_0.195_277.366))] to-[var(--zui-tooltip-gradient-indigo-to,oklch(43.8%_0.218_303.724))] dark:to-[var(--zui-tooltip-gradient-indigo-to-dark,oklch(43.8%_0.218_303.724))] text-[color:var(--zui-tooltip-gradient-indigo-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-gradient-indigo-fg-dark,#ffffff)]",
43
43
  "gradient-pink":
44
- "bg-linear-to-r from-[var(--zui-tooltip-gradient-pink-from,oklch(45.9%_0.187_3.815))] to-[var(--zui-tooltip-gradient-pink-to,oklch(45.5%_0.188_13.697))] text-[color:var(--zui-tooltip-gradient-pink-fg,#ffffff)]",
44
+ "bg-linear-to-r from-[var(--zui-tooltip-gradient-pink-from,oklch(45.9%_0.187_3.815))] dark:from-[var(--zui-tooltip-gradient-pink-from-dark,oklch(45.9%_0.187_3.815))] to-[var(--zui-tooltip-gradient-pink-to,oklch(45.5%_0.188_13.697))] dark:to-[var(--zui-tooltip-gradient-pink-to-dark,oklch(45.5%_0.188_13.697))] text-[color:var(--zui-tooltip-gradient-pink-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-gradient-pink-fg-dark,#ffffff)]",
45
45
  "gradient-orange":
46
- "bg-linear-to-r from-[var(--zui-tooltip-gradient-orange-from,oklch(47%_0.157_37.304))] to-[var(--zui-tooltip-gradient-orange-to,oklch(44.4%_0.177_26.899))] text-[color:var(--zui-tooltip-gradient-orange-fg,#ffffff)]",
46
+ "bg-linear-to-r from-[var(--zui-tooltip-gradient-orange-from,oklch(47%_0.157_37.304))] dark:from-[var(--zui-tooltip-gradient-orange-from-dark,oklch(47%_0.157_37.304))] to-[var(--zui-tooltip-gradient-orange-to,oklch(44.4%_0.177_26.899))] dark:to-[var(--zui-tooltip-gradient-orange-to-dark,oklch(44.4%_0.177_26.899))] text-[color:var(--zui-tooltip-gradient-orange-fg,#ffffff)] dark:text-[color:var(--zui-tooltip-gradient-orange-fg-dark,#ffffff)]",
47
47
  } as const;
48
48
 
49
49
  export const zuiTooltipSizes = {
@@ -4,36 +4,36 @@ export const zuiTypographyTones = {
4
4
  muted:
5
5
  "text-[color:var(--zui-typography-muted-fg,oklch(55.4%_0.046_257.417))] dark:text-[color:var(--zui-typography-muted-fg-dark,oklch(70.4%_0.04_256.788))] border-[color:var(--zui-typography-muted-border,#00000026)] dark:border-[color:var(--zui-typography-muted-border-dark,#ffffff26)]",
6
6
  primary:
7
- "text-[color:var(--zui-typography-primary-fg,oklch(52%_0.105_223.128))] dark:text-[color:var(--zui-typography-primary-fg-dark,oklch(86.5%_0.127_207.078))] border-[color:var(--zui-typography-primary-border,oklch(86.5%_0.127_207.078_/_0.4))]",
7
+ "text-[color:var(--zui-typography-primary-fg,oklch(52%_0.105_223.128))] dark:text-[color:var(--zui-typography-primary-fg-dark,oklch(86.5%_0.127_207.078))] border-[color:var(--zui-typography-primary-border,oklch(86.5%_0.127_207.078_/_0.4))] dark:border-[color:var(--zui-typography-primary-border-dark,oklch(86.5%_0.127_207.078_/_0.4))]",
8
8
  secondary:
9
9
  "text-[color:var(--zui-typography-secondary-fg,oklch(44.6%_0.043_257.281))] dark:text-[color:var(--zui-typography-secondary-fg-dark,oklch(86.9%_0.022_252.894))] border-[color:var(--zui-typography-secondary-border,#00000026)] dark:border-[color:var(--zui-typography-secondary-border-dark,#ffffff26)]",
10
10
  accent:
11
- "text-[color:var(--zui-typography-accent-fg,oklch(49.1%_0.27_292.581))] dark:text-[color:var(--zui-typography-accent-fg-dark,oklch(81.1%_0.111_293.571))] border-[color:var(--zui-typography-accent-border,oklch(81.1%_0.111_293.571_/_0.4))]",
11
+ "text-[color:var(--zui-typography-accent-fg,oklch(49.1%_0.27_292.581))] dark:text-[color:var(--zui-typography-accent-fg-dark,oklch(81.1%_0.111_293.571))] border-[color:var(--zui-typography-accent-border,oklch(81.1%_0.111_293.571_/_0.4))] dark:border-[color:var(--zui-typography-accent-border-dark,oklch(81.1%_0.111_293.571_/_0.4))]",
12
12
  destructive:
13
- "text-[color:var(--zui-typography-destructive-fg,oklch(58.6%_0.253_17.585))] dark:text-[color:var(--zui-typography-destructive-fg-dark,oklch(71.2%_0.194_13.428))] border-[color:var(--zui-typography-destructive-border,oklch(81%_0.117_11.638_/_0.4))]",
14
- info: "text-[color:var(--zui-typography-info-fg,oklch(50%_0.134_242.749))] dark:text-[color:var(--zui-typography-info-fg-dark,oklch(82.8%_0.111_230.318))] border-[color:var(--zui-typography-info-border,oklch(82.8%_0.111_230.318_/_0.4))]",
13
+ "text-[color:var(--zui-typography-destructive-fg,oklch(58.6%_0.253_17.585))] dark:text-[color:var(--zui-typography-destructive-fg-dark,oklch(71.2%_0.194_13.428))] border-[color:var(--zui-typography-destructive-border,oklch(81%_0.117_11.638_/_0.4))] dark:border-[color:var(--zui-typography-destructive-border-dark,oklch(81%_0.117_11.638_/_0.4))]",
14
+ info: "text-[color:var(--zui-typography-info-fg,oklch(50%_0.134_242.749))] dark:text-[color:var(--zui-typography-info-fg-dark,oklch(82.8%_0.111_230.318))] border-[color:var(--zui-typography-info-border,oklch(82.8%_0.111_230.318_/_0.4))] dark:border-[color:var(--zui-typography-info-border-dark,oklch(82.8%_0.111_230.318_/_0.4))]",
15
15
  success:
16
- "text-[color:var(--zui-typography-success-fg,oklch(50.8%_0.118_165.612))] dark:text-[color:var(--zui-typography-success-fg-dark,oklch(84.5%_0.143_164.978))] border-[color:var(--zui-typography-success-border,oklch(84.5%_0.143_164.978_/_0.4))]",
16
+ "text-[color:var(--zui-typography-success-fg,oklch(50.8%_0.118_165.612))] dark:text-[color:var(--zui-typography-success-fg-dark,oklch(84.5%_0.143_164.978))] border-[color:var(--zui-typography-success-border,oklch(84.5%_0.143_164.978_/_0.4))] dark:border-[color:var(--zui-typography-success-border-dark,oklch(84.5%_0.143_164.978_/_0.4))]",
17
17
  warning:
18
- "text-[color:var(--zui-typography-warning-fg,oklch(55.5%_0.163_48.998))] dark:text-[color:var(--zui-typography-warning-fg-dark,oklch(87.9%_0.169_91.605))] border-[color:var(--zui-typography-warning-border,oklch(87.9%_0.169_91.605_/_0.4))]",
18
+ "text-[color:var(--zui-typography-warning-fg,oklch(55.5%_0.163_48.998))] dark:text-[color:var(--zui-typography-warning-fg-dark,oklch(87.9%_0.169_91.605))] border-[color:var(--zui-typography-warning-border,oklch(87.9%_0.169_91.605_/_0.4))] dark:border-[color:var(--zui-typography-warning-border-dark,oklch(87.9%_0.169_91.605_/_0.4))]",
19
19
  error:
20
- "text-[color:var(--zui-typography-error-fg,oklch(50.5%_0.213_27.518))] dark:text-[color:var(--zui-typography-error-fg-dark,oklch(80.8%_0.114_19.571))] border-[color:var(--zui-typography-error-border,oklch(80.8%_0.114_19.571_/_0.4))]",
20
+ "text-[color:var(--zui-typography-error-fg,oklch(50.5%_0.213_27.518))] dark:text-[color:var(--zui-typography-error-fg-dark,oklch(80.8%_0.114_19.571))] border-[color:var(--zui-typography-error-border,oklch(80.8%_0.114_19.571_/_0.4))] dark:border-[color:var(--zui-typography-error-border-dark,oklch(80.8%_0.114_19.571_/_0.4))]",
21
21
  "gradient-pink-violet":
22
- "bg-linear-to-r from-[var(--zui-typography-gradient-pink-violet-from,oklch(59.2%_0.249_0.584))] dark:from-[var(--zui-typography-gradient-pink-violet-from-dark,oklch(71.8%_0.202_349.761))] to-[var(--zui-typography-gradient-pink-violet-to,oklch(54.1%_0.281_293.009))] dark:to-[var(--zui-typography-gradient-pink-violet-to-dark,oklch(70.2%_0.183_293.541))] bg-clip-text text-[color:var(--zui-typography-gradient-pink-violet-fg,transparent)] border-[color:var(--zui-typography-gradient-pink-violet-border,oklch(81.1%_0.111_293.571_/_0.4))]",
22
+ "bg-linear-to-r from-[var(--zui-typography-gradient-pink-violet-from,oklch(59.2%_0.249_0.584))] dark:from-[var(--zui-typography-gradient-pink-violet-from-dark,oklch(71.8%_0.202_349.761))] to-[var(--zui-typography-gradient-pink-violet-to,oklch(54.1%_0.281_293.009))] dark:to-[var(--zui-typography-gradient-pink-violet-to-dark,oklch(70.2%_0.183_293.541))] bg-clip-text text-[color:var(--zui-typography-gradient-pink-violet-fg,transparent)] dark:text-[color:var(--zui-typography-gradient-pink-violet-fg-dark,transparent)] border-[color:var(--zui-typography-gradient-pink-violet-border,oklch(81.1%_0.111_293.571_/_0.4))] dark:border-[color:var(--zui-typography-gradient-pink-violet-border-dark,oklch(81.1%_0.111_293.571_/_0.4))]",
23
23
  "gradient-cyan-violet":
24
- "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-violet-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-violet-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-violet-to,oklch(54.1%_0.281_293.009))] dark:to-[var(--zui-typography-gradient-cyan-violet-to-dark,oklch(70.2%_0.183_293.541))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-violet-fg,transparent)] border-[color:var(--zui-typography-gradient-cyan-violet-border,oklch(81.1%_0.111_293.571_/_0.4))]",
24
+ "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-violet-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-violet-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-violet-to,oklch(54.1%_0.281_293.009))] dark:to-[var(--zui-typography-gradient-cyan-violet-to-dark,oklch(70.2%_0.183_293.541))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-violet-fg,transparent)] dark:text-[color:var(--zui-typography-gradient-cyan-violet-fg-dark,transparent)] border-[color:var(--zui-typography-gradient-cyan-violet-border,oklch(81.1%_0.111_293.571_/_0.4))] dark:border-[color:var(--zui-typography-gradient-cyan-violet-border-dark,oklch(81.1%_0.111_293.571_/_0.4))]",
25
25
  "gradient-cyan-blue":
26
- "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-blue-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-blue-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-blue-to,oklch(54.6%_0.245_262.881))] dark:to-[var(--zui-typography-gradient-cyan-blue-to-dark,oklch(70.7%_0.165_254.624))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-blue-fg,transparent)] border-[color:var(--zui-typography-gradient-cyan-blue-border,oklch(80.9%_0.105_251.813_/_0.4))]",
26
+ "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-blue-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-blue-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-blue-to,oklch(54.6%_0.245_262.881))] dark:to-[var(--zui-typography-gradient-cyan-blue-to-dark,oklch(70.7%_0.165_254.624))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-blue-fg,transparent)] dark:text-[color:var(--zui-typography-gradient-cyan-blue-fg-dark,transparent)] border-[color:var(--zui-typography-gradient-cyan-blue-border,oklch(80.9%_0.105_251.813_/_0.4))] dark:border-[color:var(--zui-typography-gradient-cyan-blue-border-dark,oklch(80.9%_0.105_251.813_/_0.4))]",
27
27
  "gradient-cyan-green":
28
- "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-green-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-green-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-green-to,oklch(62.7%_0.194_149.214))] dark:to-[var(--zui-typography-gradient-cyan-green-to-dark,oklch(79.2%_0.209_151.711))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-green-fg,transparent)] border-[color:var(--zui-typography-gradient-cyan-green-border,oklch(87.1%_0.15_154.449_/_0.4))]",
28
+ "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-green-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-green-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-green-to,oklch(62.7%_0.194_149.214))] dark:to-[var(--zui-typography-gradient-cyan-green-to-dark,oklch(79.2%_0.209_151.711))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-green-fg,transparent)] dark:text-[color:var(--zui-typography-gradient-cyan-green-fg-dark,transparent)] border-[color:var(--zui-typography-gradient-cyan-green-border,oklch(87.1%_0.15_154.449_/_0.4))] dark:border-[color:var(--zui-typography-gradient-cyan-green-border-dark,oklch(87.1%_0.15_154.449_/_0.4))]",
29
29
  "gradient-cyan-orange":
30
- "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-orange-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-orange-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-orange-to,oklch(64.6%_0.222_41.116))] dark:to-[var(--zui-typography-gradient-cyan-orange-to-dark,oklch(75%_0.183_55.934))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-orange-fg,transparent)] border-[color:var(--zui-typography-gradient-cyan-orange-border,oklch(83.7%_0.128_66.29_/_0.4))]",
30
+ "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-orange-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-orange-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-orange-to,oklch(64.6%_0.222_41.116))] dark:to-[var(--zui-typography-gradient-cyan-orange-to-dark,oklch(75%_0.183_55.934))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-orange-fg,transparent)] dark:text-[color:var(--zui-typography-gradient-cyan-orange-fg-dark,transparent)] border-[color:var(--zui-typography-gradient-cyan-orange-border,oklch(83.7%_0.128_66.29_/_0.4))] dark:border-[color:var(--zui-typography-gradient-cyan-orange-border-dark,oklch(83.7%_0.128_66.29_/_0.4))]",
31
31
  "gradient-cyan-red":
32
- "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-red-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-red-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-red-to,oklch(57.7%_0.245_27.325))] dark:to-[var(--zui-typography-gradient-cyan-red-to-dark,oklch(70.4%_0.191_22.216))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-red-fg,transparent)] border-[color:var(--zui-typography-gradient-cyan-red-border,oklch(80.8%_0.114_19.571_/_0.4))]",
32
+ "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-red-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-red-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-red-to,oklch(57.7%_0.245_27.325))] dark:to-[var(--zui-typography-gradient-cyan-red-to-dark,oklch(70.4%_0.191_22.216))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-red-fg,transparent)] dark:text-[color:var(--zui-typography-gradient-cyan-red-fg-dark,transparent)] border-[color:var(--zui-typography-gradient-cyan-red-border,oklch(80.8%_0.114_19.571_/_0.4))] dark:border-[color:var(--zui-typography-gradient-cyan-red-border-dark,oklch(80.8%_0.114_19.571_/_0.4))]",
33
33
  "gradient-cyan-purple":
34
- "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-purple-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-purple-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-purple-to,oklch(55.8%_0.288_302.321))] dark:to-[var(--zui-typography-gradient-cyan-purple-to-dark,oklch(71.4%_0.203_305.504))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-purple-fg,transparent)] border-[color:var(--zui-typography-gradient-cyan-purple-border,oklch(82.7%_0.119_306.383_/_0.4))]",
34
+ "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-purple-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-purple-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-purple-to,oklch(55.8%_0.288_302.321))] dark:to-[var(--zui-typography-gradient-cyan-purple-to-dark,oklch(71.4%_0.203_305.504))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-purple-fg,transparent)] dark:text-[color:var(--zui-typography-gradient-cyan-purple-fg-dark,transparent)] border-[color:var(--zui-typography-gradient-cyan-purple-border,oklch(82.7%_0.119_306.383_/_0.4))] dark:border-[color:var(--zui-typography-gradient-cyan-purple-border-dark,oklch(82.7%_0.119_306.383_/_0.4))]",
35
35
  "gradient-cyan-pink":
36
- "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-pink-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-pink-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-pink-to,oklch(59.2%_0.249_0.584))] dark:to-[var(--zui-typography-gradient-cyan-pink-to-dark,oklch(71.8%_0.202_349.761))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-pink-fg,transparent)] border-[color:var(--zui-typography-gradient-cyan-pink-border,oklch(82.3%_0.12_346.018_/_0.4))]",
36
+ "bg-linear-to-r from-[var(--zui-typography-gradient-cyan-pink-from,oklch(60.9%_0.126_221.723))] dark:from-[var(--zui-typography-gradient-cyan-pink-from-dark,oklch(78.9%_0.154_211.53))] to-[var(--zui-typography-gradient-cyan-pink-to,oklch(59.2%_0.249_0.584))] dark:to-[var(--zui-typography-gradient-cyan-pink-to-dark,oklch(71.8%_0.202_349.761))] bg-clip-text text-[color:var(--zui-typography-gradient-cyan-pink-fg,transparent)] dark:text-[color:var(--zui-typography-gradient-cyan-pink-fg-dark,transparent)] border-[color:var(--zui-typography-gradient-cyan-pink-border,oklch(82.3%_0.12_346.018_/_0.4))] dark:border-[color:var(--zui-typography-gradient-cyan-pink-border-dark,oklch(82.3%_0.12_346.018_/_0.4))]",
37
37
  } as const;
38
38
 
39
39
  export const zuiHeadingBase = "scroll-m-20";
@@ -1,3 +1,4 @@
1
+ "use client"
1
2
  import { motion } from "framer-motion";
2
3
  import { AlertBase } from "../alert-base";
3
4
  import { alertAnimationPresets } from "./animations";
@@ -0,0 +1,9 @@
1
+ "use client";
2
+
3
+ export { OTPInput } from "./otp-input";
4
+ export type {
5
+ OTPInputAllowedCharacters,
6
+ OTPInputCellVariantProps,
7
+ OTPInputProps,
8
+ } from "./types";
9
+ export { otpInputCellVariants } from "./variants";
@@ -0,0 +1,99 @@
1
+ import { createRef } from "react";
2
+ import { render, screen } from "@testing-library/react";
3
+ import userEvent from "@testing-library/user-event";
4
+ import { describe, expect, it, vi } from "vitest";
5
+
6
+ import { OTPInput } from "./otp-input";
7
+
8
+ describe("OTPInput", () => {
9
+ it("should expose displayName", () => {
10
+ expect(OTPInput.displayName).toBe("OTPInput");
11
+ });
12
+
13
+ it("should stamp data-slot", () => {
14
+ render(<OTPInput label="Verification code" />);
15
+ expect(document.querySelector('[data-slot="otp-input"]')).toBeTruthy();
16
+ expect(
17
+ document.querySelectorAll('[data-slot="otp-input-cell"]'),
18
+ ).toHaveLength(6);
19
+ });
20
+
21
+ it("should type numeric values across cells", async () => {
22
+ const user = userEvent.setup();
23
+ const onValueChange = vi.fn();
24
+ render(<OTPInput label="Code" onValueChange={onValueChange} />);
25
+
26
+ await user.type(screen.getByLabelText("Digit 1 of 6"), "123");
27
+
28
+ expect(screen.getByLabelText("Digit 1 of 6")).toHaveValue("1");
29
+ expect(screen.getByLabelText("Digit 2 of 6")).toHaveValue("2");
30
+ expect(screen.getByLabelText("Digit 3 of 6")).toHaveValue("3");
31
+ expect(onValueChange).toHaveBeenLastCalledWith("123");
32
+ });
33
+
34
+ it("should ignore non-numeric characters by default", async () => {
35
+ const user = userEvent.setup();
36
+ render(<OTPInput label="Code" />);
37
+
38
+ await user.type(screen.getByLabelText("Digit 1 of 6"), "a1b2");
39
+
40
+ expect(screen.getByLabelText("Digit 1 of 6")).toHaveValue("1");
41
+ expect(screen.getByLabelText("Digit 2 of 6")).toHaveValue("2");
42
+ });
43
+
44
+ it("should support alphanumeric values", async () => {
45
+ const user = userEvent.setup();
46
+ render(<OTPInput allowedCharacters="alphanumeric" label="Invite code" />);
47
+
48
+ await user.type(screen.getByLabelText("Digit 1 of 6"), "A7Z");
49
+
50
+ expect(screen.getByLabelText("Digit 1 of 6")).toHaveValue("A");
51
+ expect(screen.getByLabelText("Digit 2 of 6")).toHaveValue("7");
52
+ expect(screen.getByLabelText("Digit 3 of 6")).toHaveValue("Z");
53
+ });
54
+
55
+ it("should fill cells from paste and call onComplete", async () => {
56
+ const user = userEvent.setup();
57
+ const onComplete = vi.fn();
58
+ render(<OTPInput label="Code" onComplete={onComplete} />);
59
+
60
+ await user.click(screen.getByLabelText("Digit 1 of 6"));
61
+ await user.paste("12-34 56");
62
+
63
+ expect(screen.getByLabelText("Digit 6 of 6")).toHaveValue("6");
64
+ expect(onComplete).toHaveBeenLastCalledWith("123456");
65
+ });
66
+
67
+ it("should clear the previous cell when backspacing from an empty cell", async () => {
68
+ const user = userEvent.setup();
69
+ render(<OTPInput defaultValue="12" label="Code" />);
70
+
71
+ await user.click(screen.getByLabelText("Digit 3 of 6"));
72
+ await user.keyboard("{Backspace}");
73
+
74
+ expect(screen.getByLabelText("Digit 2 of 6")).toHaveValue("");
75
+ });
76
+
77
+ it("should support controlled state", async () => {
78
+ const user = userEvent.setup();
79
+ const onValueChange = vi.fn();
80
+ render(<OTPInput label="Code" value="98" onValueChange={onValueChange} />);
81
+
82
+ await user.type(screen.getByLabelText("Digit 3 of 6"), "7");
83
+
84
+ expect(screen.getByLabelText("Digit 1 of 6")).toHaveValue("9");
85
+ expect(screen.getByLabelText("Digit 2 of 6")).toHaveValue("8");
86
+ expect(onValueChange).toHaveBeenLastCalledWith("987");
87
+ });
88
+
89
+ it("should forward ref to the root", () => {
90
+ const ref = createRef<HTMLDivElement>();
91
+ render(<OTPInput ref={ref} label="Code" />);
92
+ expect(ref.current?.getAttribute("data-slot")).toBe("otp-input");
93
+ });
94
+
95
+ it("should render a hidden input when name is provided", () => {
96
+ render(<OTPInput defaultValue="123456" label="Code" name="otp" />);
97
+ expect(document.querySelector('input[name="otp"]')).toHaveValue("123456");
98
+ });
99
+ });
@@ -0,0 +1,327 @@
1
+ "use client";
2
+
3
+ import {
4
+ type ClipboardEvent,
5
+ type KeyboardEvent,
6
+ useCallback,
7
+ useId,
8
+ useMemo,
9
+ useRef,
10
+ useState,
11
+ } from "react";
12
+
13
+ import {
14
+ zuiOtpCellsBase,
15
+ zuiOtpErrorBase,
16
+ zuiOtpHintBase,
17
+ zuiOtpLabelBase,
18
+ zuiOtpRootBase,
19
+ zuiOtpSeparatorBase,
20
+ } from "../../design-system/otp-input";
21
+ import { cn } from "../../lib/utils";
22
+
23
+ import type { OTPInputAllowedCharacters, OTPInputProps } from "./types";
24
+ import { otpInputCellVariants } from "./variants";
25
+
26
+ function clampLength(length: number): number {
27
+ return Number.isFinite(length) ? Math.max(1, Math.min(12, length)) : 6;
28
+ }
29
+
30
+ function sanitizeValue(
31
+ value: string,
32
+ allowedCharacters: OTPInputAllowedCharacters,
33
+ maxLength: number,
34
+ ): string {
35
+ const pattern = allowedCharacters === "numeric" ? /[0-9]/g : /[a-zA-Z0-9]/g;
36
+ return (value.match(pattern) ?? []).join("").slice(0, maxLength);
37
+ }
38
+
39
+ function valueToCells(value: string, length: number): string[] {
40
+ return Array.from({ length }, (_, index) => {
41
+ const c = value[index] ?? "\x00";
42
+ return c === "\x00" ? "" : c;
43
+ });
44
+ }
45
+
46
+ function cellsToInternal(cells: string[], length: number): string {
47
+ return Array.from({ length }, (_, i) => cells[i] || "\x00").join("");
48
+ }
49
+
50
+ export function OTPInput(props: OTPInputProps) {
51
+ const {
52
+ allowedCharacters = "numeric",
53
+ appearance,
54
+ autoFocus,
55
+ cellClassName,
56
+ className,
57
+ defaultValue = "",
58
+ disabled,
59
+ errorMessage,
60
+ hint,
61
+ id,
62
+ label,
63
+ length = 6,
64
+ mask,
65
+ name,
66
+ onComplete,
67
+ onValueChange,
68
+ ref,
69
+ separatorEvery,
70
+ size,
71
+ value,
72
+ ...rest
73
+ } = props;
74
+ const generatedId = useId();
75
+ const rootId = id ?? generatedId;
76
+ const resolvedLength = clampLength(length);
77
+ const isControlled = value !== undefined;
78
+ const [uncontrolledValue, setUncontrolledValue] = useState(() => {
79
+ const clean = sanitizeValue(
80
+ defaultValue,
81
+ allowedCharacters,
82
+ resolvedLength,
83
+ );
84
+ return clean.padEnd(resolvedLength, "\x00");
85
+ });
86
+ const inputRefs = useRef<Array<HTMLInputElement | null>>([]);
87
+ const cells = useMemo(
88
+ () =>
89
+ isControlled
90
+ ? valueToCells(
91
+ sanitizeValue(
92
+ value ?? "",
93
+ allowedCharacters,
94
+ resolvedLength,
95
+ ).padEnd(resolvedLength, "\x00"),
96
+ resolvedLength,
97
+ )
98
+ : Array.from({ length: resolvedLength }, (_, index) => {
99
+ const c = uncontrolledValue[index] ?? "\x00";
100
+ return c === "\x00" ? "" : sanitizeValue(c, allowedCharacters, 1);
101
+ }),
102
+ [allowedCharacters, isControlled, resolvedLength, uncontrolledValue, value],
103
+ );
104
+ const sanitizedValue = cells.filter(Boolean).join("");
105
+ const labelId = `${rootId}-label`;
106
+ const hintId = `${rootId}-hint`;
107
+ const errorId = `${rootId}-error`;
108
+ const describedBy = [
109
+ hint !== undefined ? hintId : undefined,
110
+ errorMessage !== undefined ? errorId : undefined,
111
+ ]
112
+ .filter(Boolean)
113
+ .join(" ");
114
+
115
+ const commitValue = useCallback(
116
+ (nextCells: string[]) => {
117
+ if (!isControlled) {
118
+ setUncontrolledValue(cellsToInternal(nextCells, resolvedLength));
119
+ }
120
+ const next = nextCells.filter(Boolean).join("").slice(0, resolvedLength);
121
+ onValueChange?.(next);
122
+ if (next.length === resolvedLength) {
123
+ onComplete?.(next);
124
+ }
125
+ },
126
+ [isControlled, onComplete, onValueChange, resolvedLength],
127
+ );
128
+
129
+ const focusCell = useCallback(
130
+ (index: number) => {
131
+ const target =
132
+ inputRefs.current[Math.max(0, Math.min(index, resolvedLength - 1))];
133
+ target?.focus();
134
+ target?.select();
135
+ },
136
+ [resolvedLength],
137
+ );
138
+
139
+ const updateAtIndex = useCallback(
140
+ (index: number, nextChars: string, isPaste = false) => {
141
+ let chars: string | undefined = sanitizeValue(
142
+ nextChars,
143
+ allowedCharacters,
144
+ resolvedLength,
145
+ );
146
+
147
+ // Detect single-char overwrite: browser gives "existingChar + typedChar"
148
+ if (
149
+ !isPaste &&
150
+ chars &&
151
+ chars.length === 2 &&
152
+ chars[0] === (cells[index] ?? "")
153
+ ) {
154
+ chars = chars[1];
155
+ }
156
+
157
+ if (!chars?.length || (!isPaste && chars === cells[index])) {
158
+ return;
159
+ }
160
+
161
+ const nextCells = [...cells];
162
+
163
+ chars.split("").forEach((char, offset) => {
164
+ const targetIndex = index + offset;
165
+ if (targetIndex < resolvedLength) {
166
+ nextCells[targetIndex] = char;
167
+ }
168
+ });
169
+
170
+ commitValue(nextCells);
171
+ focusCell(
172
+ Math.min(index + Math.max(chars.length, 1), resolvedLength - 1),
173
+ );
174
+ },
175
+ [allowedCharacters, cells, commitValue, focusCell, resolvedLength],
176
+ );
177
+
178
+ const clearAtIndex = useCallback(
179
+ (index: number) => {
180
+ const nextCells = [...cells];
181
+ nextCells[index] = "";
182
+ commitValue(nextCells);
183
+ },
184
+ [cells, commitValue],
185
+ );
186
+
187
+ const handlePaste = useCallback(
188
+ (event: ClipboardEvent<HTMLInputElement>, index: number) => {
189
+ event.preventDefault();
190
+ updateAtIndex(index, event.clipboardData.getData("text"), true);
191
+ },
192
+ [updateAtIndex],
193
+ );
194
+
195
+ const handleKeyDown = useCallback(
196
+ (event: KeyboardEvent<HTMLInputElement>, index: number) => {
197
+ if (event.key === "Backspace") {
198
+ event.preventDefault();
199
+ if (cells[index]) {
200
+ clearAtIndex(index);
201
+ return;
202
+ }
203
+ clearAtIndex(Math.max(index - 1, 0));
204
+ focusCell(index - 1);
205
+ return;
206
+ }
207
+
208
+ if (event.key === "Delete") {
209
+ event.preventDefault();
210
+ clearAtIndex(index);
211
+ return;
212
+ }
213
+
214
+ if (event.key === "ArrowLeft") {
215
+ event.preventDefault();
216
+ focusCell(index - 1);
217
+ return;
218
+ }
219
+
220
+ if (event.key === "ArrowRight") {
221
+ event.preventDefault();
222
+ focusCell(index + 1);
223
+ return;
224
+ }
225
+
226
+ if (event.key === "Home") {
227
+ event.preventDefault();
228
+ focusCell(0);
229
+ return;
230
+ }
231
+
232
+ if (event.key === "End") {
233
+ event.preventDefault();
234
+ focusCell(resolvedLength - 1);
235
+ }
236
+ },
237
+ [cells, clearAtIndex, focusCell, resolvedLength],
238
+ );
239
+
240
+ return (
241
+ <div
242
+ ref={ref}
243
+ id={rootId}
244
+ role="group"
245
+ aria-labelledby={label !== undefined ? labelId : undefined}
246
+ aria-describedby={describedBy || undefined}
247
+ aria-invalid={errorMessage !== undefined ? true : undefined}
248
+ className={cn(zuiOtpRootBase, className)}
249
+ data-disabled={disabled ? "true" : undefined}
250
+ data-slot="otp-input"
251
+ {...rest}
252
+ >
253
+ {label !== undefined && (
254
+ <p id={labelId} className={zuiOtpLabelBase}>
255
+ {label}
256
+ </p>
257
+ )}
258
+ {hint !== undefined && (
259
+ <p id={hintId} className={zuiOtpHintBase}>
260
+ {hint}
261
+ </p>
262
+ )}
263
+ <div className={zuiOtpCellsBase} data-slot="otp-input-cells">
264
+ {cells.map((char, index) => (
265
+ <span
266
+ key={`${rootId}-${index}`}
267
+ className="contents"
268
+ data-slot="otp-input-cell-wrapper"
269
+ >
270
+ <input
271
+ ref={(node) => {
272
+ inputRefs.current[index] = node;
273
+ }}
274
+ aria-label={`Digit ${index + 1} of ${resolvedLength}`}
275
+ autoComplete={index === 0 ? "one-time-code" : "off"}
276
+ autoFocus={autoFocus && index === 0}
277
+ className={cn(
278
+ otpInputCellVariants({ appearance, size }),
279
+ cellClassName,
280
+ )}
281
+ data-slot="otp-input-cell"
282
+ disabled={disabled}
283
+ inputMode={allowedCharacters === "numeric" ? "numeric" : "text"}
284
+ maxLength={resolvedLength}
285
+ onChange={(event) =>
286
+ updateAtIndex(index, event.currentTarget.value, false)
287
+ }
288
+ onFocus={(event) => event.currentTarget.select()}
289
+ onKeyDown={(event) => handleKeyDown(event, index)}
290
+ onPaste={(event) => handlePaste(event, index)}
291
+ pattern={
292
+ allowedCharacters === "numeric" ? "[0-9]*" : "[A-Za-z0-9]*"
293
+ }
294
+ type={mask ? "password" : "text"}
295
+ value={char}
296
+ />
297
+ {separatorEvery &&
298
+ separatorEvery > 0 &&
299
+ index < resolvedLength - 1 &&
300
+ (index + 1) % separatorEvery === 0 && (
301
+ <span
302
+ aria-hidden="true"
303
+ className={zuiOtpSeparatorBase}
304
+ data-slot="otp-input-separator"
305
+ />
306
+ )}
307
+ </span>
308
+ ))}
309
+ </div>
310
+ {name !== undefined && (
311
+ <input
312
+ type="hidden"
313
+ name={name}
314
+ value={sanitizedValue}
315
+ disabled={disabled}
316
+ />
317
+ )}
318
+ {errorMessage !== undefined && (
319
+ <p id={errorId} className={zuiOtpErrorBase}>
320
+ {errorMessage}
321
+ </p>
322
+ )}
323
+ </div>
324
+ );
325
+ }
326
+
327
+ OTPInput.displayName = "OTPInput";
@@ -0,0 +1,32 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ import type { ComponentPropsWithRef, ReactNode } from "react";
3
+
4
+ import type { otpInputCellVariants } from "./variants";
5
+
6
+ export type OTPInputAllowedCharacters = "numeric" | "alphanumeric";
7
+
8
+ export type OTPInputCellVariantProps = VariantProps<
9
+ typeof otpInputCellVariants
10
+ >;
11
+
12
+ export type OTPInputProps = OTPInputCellVariantProps &
13
+ Omit<
14
+ ComponentPropsWithRef<"div">,
15
+ "defaultValue" | "dir" | "onChange" | "children"
16
+ > & {
17
+ allowedCharacters?: OTPInputAllowedCharacters;
18
+ autoFocus?: boolean;
19
+ cellClassName?: string;
20
+ defaultValue?: string;
21
+ disabled?: boolean;
22
+ errorMessage?: ReactNode;
23
+ hint?: ReactNode;
24
+ label?: ReactNode;
25
+ length?: number;
26
+ mask?: boolean;
27
+ name?: string;
28
+ onComplete?: (value: string) => void;
29
+ onValueChange?: (value: string) => void;
30
+ separatorEvery?: number;
31
+ value?: string;
32
+ };
@@ -0,0 +1,18 @@
1
+ import { cva } from "class-variance-authority";
2
+
3
+ import {
4
+ zuiOtpAppearances,
5
+ zuiOtpCellBase,
6
+ zuiOtpSizes,
7
+ } from "../../design-system/otp-input";
8
+
9
+ export const otpInputCellVariants = cva(zuiOtpCellBase, {
10
+ variants: {
11
+ appearance: zuiOtpAppearances,
12
+ size: zuiOtpSizes,
13
+ },
14
+ defaultVariants: {
15
+ appearance: "default",
16
+ size: "md",
17
+ },
18
+ });
@@ -0,0 +1,5 @@
1
+ "use client";
2
+
3
+ export { ScrollArea } from "./scroll-area";
4
+ export type { ScrollAreaProps, ScrollAreaVariantProps } from "./types";
5
+ export { scrollAreaVariants } from "./variants";