@tribepad/themis 1.0.0 → 1.0.1

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 (326) hide show
  1. package/dist/elements/Accordion/index.js +325 -66
  2. package/dist/elements/Accordion/index.js.map +1 -1
  3. package/dist/elements/Accordion/index.mjs +317 -3
  4. package/dist/elements/Accordion/index.mjs.map +1 -1
  5. package/dist/elements/Avatar/index.js +461 -45
  6. package/dist/elements/Avatar/index.js.map +1 -1
  7. package/dist/elements/Avatar/index.mjs +456 -3
  8. package/dist/elements/Avatar/index.mjs.map +1 -1
  9. package/dist/elements/Badge/index.js +238 -36
  10. package/dist/elements/Badge/index.js.map +1 -1
  11. package/dist/elements/Badge/index.mjs +234 -4
  12. package/dist/elements/Badge/index.mjs.map +1 -1
  13. package/dist/elements/Breadcrumbs/index.js +808 -39
  14. package/dist/elements/Breadcrumbs/index.js.map +1 -1
  15. package/dist/elements/Breadcrumbs/index.mjs +810 -7
  16. package/dist/elements/Breadcrumbs/index.mjs.map +1 -1
  17. package/dist/elements/Button/index.js +282 -19
  18. package/dist/elements/Button/index.js.map +1 -1
  19. package/dist/elements/Button/index.mjs +283 -4
  20. package/dist/elements/Button/index.mjs.map +1 -1
  21. package/dist/elements/ButtonGroup/index.js +229 -56
  22. package/dist/elements/ButtonGroup/index.js.map +1 -1
  23. package/dist/elements/ButtonGroup/index.mjs +222 -3
  24. package/dist/elements/ButtonGroup/index.mjs.map +1 -1
  25. package/dist/elements/Card/Card.d.ts.map +1 -1
  26. package/dist/elements/Card/index.js +563 -67
  27. package/dist/elements/Card/index.js.map +1 -1
  28. package/dist/elements/Card/index.mjs +560 -6
  29. package/dist/elements/Card/index.mjs.map +1 -1
  30. package/dist/elements/Carousel/index.js +782 -14
  31. package/dist/elements/Carousel/index.js.map +1 -1
  32. package/dist/elements/Carousel/index.mjs +786 -8
  33. package/dist/elements/Carousel/index.mjs.map +1 -1
  34. package/dist/elements/Chart/index.js +1833 -36
  35. package/dist/elements/Chart/index.js.map +1 -1
  36. package/dist/elements/Chart/index.mjs +1832 -4
  37. package/dist/elements/Chart/index.mjs.map +1 -1
  38. package/dist/elements/Checkbox/index.js +310 -39
  39. package/dist/elements/Checkbox/index.js.map +1 -1
  40. package/dist/elements/Checkbox/index.mjs +306 -4
  41. package/dist/elements/Checkbox/index.mjs.map +1 -1
  42. package/dist/elements/CheckboxGroup/index.js +445 -59
  43. package/dist/elements/CheckboxGroup/index.js.map +1 -1
  44. package/dist/elements/CheckboxGroup/index.mjs +439 -4
  45. package/dist/elements/CheckboxGroup/index.mjs.map +1 -1
  46. package/dist/elements/DatePicker/index.js +871 -89
  47. package/dist/elements/DatePicker/index.js.map +1 -1
  48. package/dist/elements/DatePicker/index.mjs +853 -4
  49. package/dist/elements/DatePicker/index.mjs.map +1 -1
  50. package/dist/elements/Dropdown/index.js +189 -35
  51. package/dist/elements/Dropdown/index.js.map +1 -1
  52. package/dist/elements/Dropdown/index.mjs +184 -2
  53. package/dist/elements/Dropdown/index.mjs.map +1 -1
  54. package/dist/elements/FileField/index.js +1532 -129
  55. package/dist/elements/FileField/index.js.map +1 -1
  56. package/dist/elements/FileField/index.mjs +1507 -7
  57. package/dist/elements/FileField/index.mjs.map +1 -1
  58. package/dist/elements/FormLayout/index.js +166 -11
  59. package/dist/elements/FormLayout/index.js.map +1 -1
  60. package/dist/elements/FormLayout/index.mjs +167 -2
  61. package/dist/elements/FormLayout/index.mjs.map +1 -1
  62. package/dist/elements/Modal/index.js +228 -46
  63. package/dist/elements/Modal/index.js.map +1 -1
  64. package/dist/elements/Modal/index.mjs +220 -1
  65. package/dist/elements/Modal/index.mjs.map +1 -1
  66. package/dist/elements/NumberField/index.js +659 -48
  67. package/dist/elements/NumberField/index.js.map +1 -1
  68. package/dist/elements/NumberField/index.mjs +654 -6
  69. package/dist/elements/NumberField/index.mjs.map +1 -1
  70. package/dist/elements/OTPInput/index.js +729 -6
  71. package/dist/elements/OTPInput/index.js.map +1 -1
  72. package/dist/elements/OTPInput/index.mjs +732 -2
  73. package/dist/elements/OTPInput/index.mjs.map +1 -1
  74. package/dist/elements/Panel/index.js +326 -27
  75. package/dist/elements/Panel/index.js.map +1 -1
  76. package/dist/elements/Panel/index.mjs +323 -2
  77. package/dist/elements/Panel/index.mjs.map +1 -1
  78. package/dist/elements/Progress/index.js +181 -22
  79. package/dist/elements/Progress/index.js.map +1 -1
  80. package/dist/elements/Progress/index.mjs +181 -3
  81. package/dist/elements/Progress/index.mjs.map +1 -1
  82. package/dist/elements/RadioGroup/index.js +358 -34
  83. package/dist/elements/RadioGroup/index.js.map +1 -1
  84. package/dist/elements/RadioGroup/index.mjs +359 -4
  85. package/dist/elements/RadioGroup/index.mjs.map +1 -1
  86. package/dist/elements/Resizable/components/ResizableHandle.d.ts +0 -8
  87. package/dist/elements/Resizable/components/ResizableHandle.d.ts.map +1 -1
  88. package/dist/elements/Resizable/components/ResizablePanel.d.ts +0 -8
  89. package/dist/elements/Resizable/components/ResizablePanel.d.ts.map +1 -1
  90. package/dist/elements/Resizable/components/ResizablePanelGroup.d.ts +0 -8
  91. package/dist/elements/Resizable/components/ResizablePanelGroup.d.ts.map +1 -1
  92. package/dist/elements/Resizable/components/ResizablePopover.d.ts +0 -8
  93. package/dist/elements/Resizable/components/ResizablePopover.d.ts.map +1 -1
  94. package/dist/elements/Resizable/index.js +1568 -51
  95. package/dist/elements/Resizable/index.js.map +1 -1
  96. package/dist/elements/Resizable/index.mjs +1566 -6
  97. package/dist/elements/Resizable/index.mjs.map +1 -1
  98. package/dist/elements/Select/index.js +580 -22
  99. package/dist/elements/Select/index.js.map +1 -1
  100. package/dist/elements/Select/index.mjs +582 -2
  101. package/dist/elements/Select/index.mjs.map +1 -1
  102. package/dist/elements/Skeleton/index.js +77 -15
  103. package/dist/elements/Skeleton/index.js.map +1 -1
  104. package/dist/elements/Skeleton/index.mjs +78 -3
  105. package/dist/elements/Skeleton/index.mjs.map +1 -1
  106. package/dist/elements/Switch/index.js +153 -21
  107. package/dist/elements/Switch/index.js.map +1 -1
  108. package/dist/elements/Switch/index.mjs +149 -5
  109. package/dist/elements/Switch/index.mjs.map +1 -1
  110. package/dist/elements/Table/index.js +589 -68
  111. package/dist/elements/Table/index.js.map +1 -1
  112. package/dist/elements/Table/index.mjs +578 -5
  113. package/dist/elements/Table/index.mjs.map +1 -1
  114. package/dist/elements/Tabs/index.js +328 -63
  115. package/dist/elements/Tabs/index.js.map +1 -1
  116. package/dist/elements/Tabs/index.mjs +320 -3
  117. package/dist/elements/Tabs/index.mjs.map +1 -1
  118. package/dist/elements/TextField/index.js +695 -51
  119. package/dist/elements/TextField/index.js.map +1 -1
  120. package/dist/elements/TextField/index.mjs +684 -7
  121. package/dist/elements/TextField/index.mjs.map +1 -1
  122. package/dist/elements/TimeField/index.js +244 -33
  123. package/dist/elements/TimeField/index.js.map +1 -1
  124. package/dist/elements/TimeField/index.mjs +238 -2
  125. package/dist/elements/TimeField/index.mjs.map +1 -1
  126. package/dist/elements/Toast/index.js +727 -48
  127. package/dist/elements/Toast/index.js.map +1 -1
  128. package/dist/elements/Toast/index.mjs +724 -5
  129. package/dist/elements/Toast/index.mjs.map +1 -1
  130. package/dist/elements/Tooltip/index.js +315 -49
  131. package/dist/elements/Tooltip/index.js.map +1 -1
  132. package/dist/elements/Tooltip/index.mjs +310 -4
  133. package/dist/elements/Tooltip/index.mjs.map +1 -1
  134. package/dist/elements/index.js +12417 -799
  135. package/dist/elements/index.js.map +1 -1
  136. package/dist/elements/index.mjs +12233 -40
  137. package/dist/elements/index.mjs.map +1 -1
  138. package/dist/index.js +12452 -825
  139. package/dist/index.js.map +1 -1
  140. package/dist/index.mjs +12262 -42
  141. package/dist/index.mjs.map +1 -1
  142. package/dist/schemas/index.js +47 -21
  143. package/dist/schemas/index.js.map +1 -1
  144. package/dist/schemas/index.mjs +47 -2
  145. package/dist/schemas/index.mjs.map +1 -1
  146. package/dist/styles/index.js +161 -147
  147. package/dist/styles/index.js.map +1 -1
  148. package/dist/styles/index.mjs +128 -2
  149. package/dist/styles/index.mjs.map +1 -1
  150. package/dist/utils/index.js +7 -7
  151. package/dist/utils/index.js.map +1 -1
  152. package/dist/utils/index.mjs +9 -2
  153. package/dist/utils/index.mjs.map +1 -1
  154. package/package.json +1 -1
  155. package/dist/Carousel-NTZX5TOW.js +0 -16
  156. package/dist/Carousel-NTZX5TOW.js.map +0 -1
  157. package/dist/Carousel-YH3DOQJU.mjs +0 -7
  158. package/dist/Carousel-YH3DOQJU.mjs.map +0 -1
  159. package/dist/chunk-2HIUTHMU.mjs +0 -234
  160. package/dist/chunk-2HIUTHMU.mjs.map +0 -1
  161. package/dist/chunk-34GTFTDO.js +0 -431
  162. package/dist/chunk-34GTFTDO.js.map +0 -1
  163. package/dist/chunk-3H7ASYR7.js +0 -250
  164. package/dist/chunk-3H7ASYR7.js.map +0 -1
  165. package/dist/chunk-3IEN7JOP.js +0 -316
  166. package/dist/chunk-3IEN7JOP.js.map +0 -1
  167. package/dist/chunk-3JHN4GAL.js +0 -326
  168. package/dist/chunk-3JHN4GAL.js.map +0 -1
  169. package/dist/chunk-3MJPASQU.js +0 -232
  170. package/dist/chunk-3MJPASQU.js.map +0 -1
  171. package/dist/chunk-3XD2JUL3.js +0 -572
  172. package/dist/chunk-3XD2JUL3.js.map +0 -1
  173. package/dist/chunk-3YOY2VJ6.js +0 -189
  174. package/dist/chunk-3YOY2VJ6.js.map +0 -1
  175. package/dist/chunk-4DU5JSXB.js +0 -408
  176. package/dist/chunk-4DU5JSXB.js.map +0 -1
  177. package/dist/chunk-4E4E2GSS.js +0 -352
  178. package/dist/chunk-4E4E2GSS.js.map +0 -1
  179. package/dist/chunk-4NHAP4AN.mjs +0 -3
  180. package/dist/chunk-4NHAP4AN.mjs.map +0 -1
  181. package/dist/chunk-4S33J5NY.mjs +0 -415
  182. package/dist/chunk-4S33J5NY.mjs.map +0 -1
  183. package/dist/chunk-5SMGRT3G.mjs +0 -354
  184. package/dist/chunk-5SMGRT3G.mjs.map +0 -1
  185. package/dist/chunk-5SVLJN2C.mjs +0 -22
  186. package/dist/chunk-5SVLJN2C.mjs.map +0 -1
  187. package/dist/chunk-66WTU4EB.mjs +0 -299
  188. package/dist/chunk-66WTU4EB.mjs.map +0 -1
  189. package/dist/chunk-6S25NMOT.mjs +0 -335
  190. package/dist/chunk-6S25NMOT.mjs.map +0 -1
  191. package/dist/chunk-6SP7UB3D.js +0 -4
  192. package/dist/chunk-6SP7UB3D.js.map +0 -1
  193. package/dist/chunk-6TYWWQHM.mjs +0 -565
  194. package/dist/chunk-6TYWWQHM.mjs.map +0 -1
  195. package/dist/chunk-A3YUJA6W.mjs +0 -384
  196. package/dist/chunk-A3YUJA6W.mjs.map +0 -1
  197. package/dist/chunk-A6KEDVUR.js +0 -61
  198. package/dist/chunk-A6KEDVUR.js.map +0 -1
  199. package/dist/chunk-A77RUEWL.js +0 -730
  200. package/dist/chunk-A77RUEWL.js.map +0 -1
  201. package/dist/chunk-AA4IKMPE.mjs +0 -3
  202. package/dist/chunk-AA4IKMPE.mjs.map +0 -1
  203. package/dist/chunk-AKIA6GW6.mjs +0 -163
  204. package/dist/chunk-AKIA6GW6.mjs.map +0 -1
  205. package/dist/chunk-AL6P275L.mjs +0 -435
  206. package/dist/chunk-AL6P275L.mjs.map +0 -1
  207. package/dist/chunk-AZ3RJYTB.js +0 -37
  208. package/dist/chunk-AZ3RJYTB.js.map +0 -1
  209. package/dist/chunk-B5Q4UPL6.js +0 -32
  210. package/dist/chunk-B5Q4UPL6.js.map +0 -1
  211. package/dist/chunk-B6DHPMDP.mjs +0 -335
  212. package/dist/chunk-B6DHPMDP.mjs.map +0 -1
  213. package/dist/chunk-BDXKKMBZ.mjs +0 -184
  214. package/dist/chunk-BDXKKMBZ.mjs.map +0 -1
  215. package/dist/chunk-BL6E2DLZ.mjs +0 -52
  216. package/dist/chunk-BL6E2DLZ.mjs.map +0 -1
  217. package/dist/chunk-CGFDS4XS.mjs +0 -121
  218. package/dist/chunk-CGFDS4XS.mjs.map +0 -1
  219. package/dist/chunk-CJIW5TKI.js +0 -139
  220. package/dist/chunk-CJIW5TKI.js.map +0 -1
  221. package/dist/chunk-CKNISJOQ.js +0 -314
  222. package/dist/chunk-CKNISJOQ.js.map +0 -1
  223. package/dist/chunk-D6CBOECS.mjs +0 -1757
  224. package/dist/chunk-D6CBOECS.mjs.map +0 -1
  225. package/dist/chunk-DDWEVC2S.js +0 -166
  226. package/dist/chunk-DDWEVC2S.js.map +0 -1
  227. package/dist/chunk-DZ556D2F.mjs +0 -176
  228. package/dist/chunk-DZ556D2F.mjs.map +0 -1
  229. package/dist/chunk-E2KQFV3O.mjs +0 -10
  230. package/dist/chunk-E2KQFV3O.mjs.map +0 -1
  231. package/dist/chunk-EMMLADSC.js +0 -126
  232. package/dist/chunk-EMMLADSC.js.map +0 -1
  233. package/dist/chunk-EP4WOI5D.mjs +0 -926
  234. package/dist/chunk-EP4WOI5D.mjs.map +0 -1
  235. package/dist/chunk-FJRXLJC2.mjs +0 -160
  236. package/dist/chunk-FJRXLJC2.mjs.map +0 -1
  237. package/dist/chunk-FKQI434R.js +0 -345
  238. package/dist/chunk-FKQI434R.js.map +0 -1
  239. package/dist/chunk-FPKEAJRZ.mjs +0 -100
  240. package/dist/chunk-FPKEAJRZ.mjs.map +0 -1
  241. package/dist/chunk-FWQYB22U.js +0 -183
  242. package/dist/chunk-FWQYB22U.js.map +0 -1
  243. package/dist/chunk-GD5GHTMA.js +0 -189
  244. package/dist/chunk-GD5GHTMA.js.map +0 -1
  245. package/dist/chunk-GE5XTSDZ.js +0 -447
  246. package/dist/chunk-GE5XTSDZ.js.map +0 -1
  247. package/dist/chunk-GVE47ZAX.mjs +0 -32
  248. package/dist/chunk-GVE47ZAX.mjs.map +0 -1
  249. package/dist/chunk-HK46BT5U.mjs +0 -18
  250. package/dist/chunk-HK46BT5U.mjs.map +0 -1
  251. package/dist/chunk-HQVRMR6N.js +0 -365
  252. package/dist/chunk-HQVRMR6N.js.map +0 -1
  253. package/dist/chunk-HSGBJPJO.mjs +0 -398
  254. package/dist/chunk-HSGBJPJO.mjs.map +0 -1
  255. package/dist/chunk-I3AUTOMZ.mjs +0 -125
  256. package/dist/chunk-I3AUTOMZ.mjs.map +0 -1
  257. package/dist/chunk-IEI5LD5C.mjs +0 -1161
  258. package/dist/chunk-IEI5LD5C.mjs.map +0 -1
  259. package/dist/chunk-IIPTC2X7.mjs +0 -118
  260. package/dist/chunk-IIPTC2X7.mjs.map +0 -1
  261. package/dist/chunk-J7TLHF2Q.js +0 -4
  262. package/dist/chunk-J7TLHF2Q.js.map +0 -1
  263. package/dist/chunk-JJOWXFXQ.mjs +0 -765
  264. package/dist/chunk-JJOWXFXQ.mjs.map +0 -1
  265. package/dist/chunk-JPTSS2OA.mjs +0 -3
  266. package/dist/chunk-JPTSS2OA.mjs.map +0 -1
  267. package/dist/chunk-KFXXRLTP.js +0 -396
  268. package/dist/chunk-KFXXRLTP.js.map +0 -1
  269. package/dist/chunk-KPRRBSG6.mjs +0 -272
  270. package/dist/chunk-KPRRBSG6.mjs.map +0 -1
  271. package/dist/chunk-NFSBGRDB.mjs +0 -57
  272. package/dist/chunk-NFSBGRDB.mjs.map +0 -1
  273. package/dist/chunk-NGJVCFTM.js +0 -219
  274. package/dist/chunk-NGJVCFTM.js.map +0 -1
  275. package/dist/chunk-NSQ6MZJ6.mjs +0 -728
  276. package/dist/chunk-NSQ6MZJ6.mjs.map +0 -1
  277. package/dist/chunk-NYQYHT76.mjs +0 -296
  278. package/dist/chunk-NYQYHT76.mjs.map +0 -1
  279. package/dist/chunk-OLJJGI5B.js +0 -1193
  280. package/dist/chunk-OLJJGI5B.js.map +0 -1
  281. package/dist/chunk-Q3572X2J.js +0 -292
  282. package/dist/chunk-Q3572X2J.js.map +0 -1
  283. package/dist/chunk-QH7N7D4I.mjs +0 -210
  284. package/dist/chunk-QH7N7D4I.mjs.map +0 -1
  285. package/dist/chunk-R7XUIV25.js +0 -466
  286. package/dist/chunk-R7XUIV25.js.map +0 -1
  287. package/dist/chunk-RFFO4KPM.js +0 -135
  288. package/dist/chunk-RFFO4KPM.js.map +0 -1
  289. package/dist/chunk-RFX7QKA7.mjs +0 -180
  290. package/dist/chunk-RFX7QKA7.mjs.map +0 -1
  291. package/dist/chunk-SN5LFAP3.js +0 -940
  292. package/dist/chunk-SN5LFAP3.js.map +0 -1
  293. package/dist/chunk-T4COXKQ3.js +0 -24
  294. package/dist/chunk-T4COXKQ3.js.map +0 -1
  295. package/dist/chunk-TS54QM27.js +0 -125
  296. package/dist/chunk-TS54QM27.js.map +0 -1
  297. package/dist/chunk-UE2S4PCX.mjs +0 -220
  298. package/dist/chunk-UE2S4PCX.mjs.map +0 -1
  299. package/dist/chunk-UTW3QX2A.mjs +0 -282
  300. package/dist/chunk-UTW3QX2A.mjs.map +0 -1
  301. package/dist/chunk-V74LGMAE.js +0 -1767
  302. package/dist/chunk-V74LGMAE.js.map +0 -1
  303. package/dist/chunk-VIREG536.js +0 -12
  304. package/dist/chunk-VIREG536.js.map +0 -1
  305. package/dist/chunk-VY7M7346.js +0 -4
  306. package/dist/chunk-VY7M7346.js.map +0 -1
  307. package/dist/chunk-W3TJOO7H.mjs +0 -319
  308. package/dist/chunk-W3TJOO7H.mjs.map +0 -1
  309. package/dist/chunk-WIUOB36M.js +0 -54
  310. package/dist/chunk-WIUOB36M.js.map +0 -1
  311. package/dist/chunk-WJGLM4CY.js +0 -291
  312. package/dist/chunk-WJGLM4CY.js.map +0 -1
  313. package/dist/chunk-WNURH5OO.mjs +0 -453
  314. package/dist/chunk-WNURH5OO.mjs.map +0 -1
  315. package/dist/chunk-X25TNRSD.mjs +0 -364
  316. package/dist/chunk-X25TNRSD.mjs.map +0 -1
  317. package/dist/chunk-Y3GT7ETK.js +0 -108
  318. package/dist/chunk-Y3GT7ETK.js.map +0 -1
  319. package/dist/chunk-Z4FRNOF6.mjs +0 -115
  320. package/dist/chunk-Z4FRNOF6.mjs.map +0 -1
  321. package/dist/chunk-ZMYLD3BN.js +0 -166
  322. package/dist/chunk-ZMYLD3BN.js.map +0 -1
  323. package/dist/chunk-ZP2KV6EX.js +0 -815
  324. package/dist/chunk-ZP2KV6EX.js.map +0 -1
  325. package/dist/chunk-ZVKXFELU.js +0 -366
  326. package/dist/chunk-ZVKXFELU.js.map +0 -1
@@ -1,13 +1,736 @@
1
+ "use client";
1
2
  'use strict';
2
3
 
3
- var chunkA77RUEWL_js = require('../../chunk-A77RUEWL.js');
4
- require('../../chunk-VIREG536.js');
4
+ var react = require('react');
5
+ var clsx = require('clsx');
6
+ var tailwindMerge = require('tailwind-merge');
7
+ var classVarianceAuthority = require('class-variance-authority');
8
+ var jsxRuntime = require('react/jsx-runtime');
5
9
 
10
+ // src/elements/OTPInput/OTPInput.tsx
11
+ function cn(...inputs) {
12
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
13
+ }
14
+ function useOTPKeyboard(options) {
15
+ const {
16
+ value,
17
+ length,
18
+ focusedIndex,
19
+ onChange,
20
+ setFocusedIndex,
21
+ disabled = false,
22
+ readOnly = false
23
+ } = options;
24
+ const handleArrowLeft = react.useCallback(() => {
25
+ if (focusedIndex > 0) {
26
+ setFocusedIndex(focusedIndex - 1);
27
+ }
28
+ }, [focusedIndex, setFocusedIndex]);
29
+ const handleArrowRight = react.useCallback(() => {
30
+ if (focusedIndex < length - 1) {
31
+ setFocusedIndex(focusedIndex + 1);
32
+ }
33
+ }, [focusedIndex, length, setFocusedIndex]);
34
+ const handleBackspace = react.useCallback(() => {
35
+ if (readOnly) return;
36
+ const digits = value.split("");
37
+ const currentDigit = digits[focusedIndex];
38
+ if (currentDigit === "_") {
39
+ if (focusedIndex > 0) {
40
+ const newIndex = focusedIndex - 1;
41
+ digits[newIndex] = "_";
42
+ onChange(digits.join(""));
43
+ setFocusedIndex(newIndex);
44
+ }
45
+ } else {
46
+ digits[focusedIndex] = "_";
47
+ onChange(digits.join(""));
48
+ if (focusedIndex > 0) {
49
+ setFocusedIndex(focusedIndex - 1);
50
+ }
51
+ }
52
+ }, [value, focusedIndex, readOnly, onChange, setFocusedIndex]);
53
+ const handleDelete = react.useCallback(() => {
54
+ if (readOnly) return;
55
+ const digits = value.split("");
56
+ digits[focusedIndex] = "_";
57
+ onChange(digits.join(""));
58
+ }, [value, focusedIndex, readOnly, onChange]);
59
+ const handleHome = react.useCallback(() => {
60
+ setFocusedIndex(0);
61
+ }, [setFocusedIndex]);
62
+ const handleEnd = react.useCallback(() => {
63
+ setFocusedIndex(length - 1);
64
+ }, [length, setFocusedIndex]);
65
+ const handleKeyDown = react.useCallback(
66
+ (e) => {
67
+ if (disabled) return;
68
+ switch (e.key) {
69
+ case "ArrowLeft":
70
+ e.preventDefault();
71
+ handleArrowLeft();
72
+ break;
73
+ case "ArrowRight":
74
+ e.preventDefault();
75
+ handleArrowRight();
76
+ break;
77
+ case "Backspace":
78
+ e.preventDefault();
79
+ handleBackspace();
80
+ break;
81
+ case "Delete":
82
+ e.preventDefault();
83
+ handleDelete();
84
+ break;
85
+ case "Home":
86
+ e.preventDefault();
87
+ handleHome();
88
+ break;
89
+ case "End":
90
+ e.preventDefault();
91
+ handleEnd();
92
+ break;
93
+ // Ctrl/Cmd+A (Select All) - Allow native behavior
94
+ case "a":
95
+ case "A":
96
+ if (e.ctrlKey || e.metaKey) {
97
+ return;
98
+ }
99
+ break;
100
+ // Prevent Enter from submitting the form
101
+ // Form submission should be handled by onComplete callback when all digits are filled
102
+ case "Enter":
103
+ e.preventDefault();
104
+ break;
105
+ }
106
+ },
107
+ [
108
+ disabled,
109
+ handleArrowLeft,
110
+ handleArrowRight,
111
+ handleBackspace,
112
+ handleDelete,
113
+ handleHome,
114
+ handleEnd
115
+ ]
116
+ );
117
+ return {
118
+ handleKeyDown
119
+ };
120
+ }
6
121
 
7
-
8
- Object.defineProperty(exports, "OTPInput", {
9
- enumerable: true,
10
- get: function () { return chunkA77RUEWL_js.OTPInput; }
122
+ // src/elements/OTPInput/hooks/useOTPInput.ts
123
+ function useOTPInput(props) {
124
+ const {
125
+ value: controlledValue,
126
+ defaultValue = "",
127
+ length = 6,
128
+ type = "numeric",
129
+ pattern,
130
+ onChange,
131
+ onComplete,
132
+ validate,
133
+ error: controlledError,
134
+ disabled = false,
135
+ readOnly = false
136
+ } = props;
137
+ const isControlled = controlledValue !== void 0;
138
+ const [internalValue, setInternalValue] = react.useState(() => {
139
+ return (defaultValue || "").padEnd(length, "_");
140
+ });
141
+ const [internalError, setInternalError] = react.useState(null);
142
+ const [focusedIndex, setFocusedIndex] = react.useState(0);
143
+ const completedRef = react.useRef(null);
144
+ const debounceTimerRef = react.useRef(null);
145
+ const currentValue = isControlled ? controlledValue || "".padEnd(length, "_") : internalValue;
146
+ const currentError = controlledError !== void 0 ? controlledError : internalError;
147
+ const runValidation = react.useCallback(
148
+ (value) => {
149
+ const filledLength = value.replace(/_/g, "").length;
150
+ if (filledLength < length) {
151
+ return null;
152
+ }
153
+ if (validate) {
154
+ return validate(value);
155
+ }
156
+ if (type === "numeric") {
157
+ const numericPattern = /^\d+$/;
158
+ const cleanValue = value.replace(/_/g, "");
159
+ if (!numericPattern.test(cleanValue)) {
160
+ return "Code must contain only digits";
161
+ }
162
+ } else if (type === "alphanumeric") {
163
+ const alphanumericPattern = /^[A-Za-z0-9]+$/;
164
+ const cleanValue = value.replace(/_/g, "");
165
+ if (!alphanumericPattern.test(cleanValue)) {
166
+ return "Code must contain only letters and numbers";
167
+ }
168
+ } else if (type === "custom" && pattern) {
169
+ const cleanValue = value.replace(/_/g, "");
170
+ for (const char of cleanValue) {
171
+ if (!pattern.test(char)) {
172
+ return "Invalid character in code";
173
+ }
174
+ }
175
+ }
176
+ return null;
177
+ },
178
+ [length, type, pattern, validate]
179
+ );
180
+ const updateValue = react.useCallback(
181
+ (newValue) => {
182
+ if (!isControlled) {
183
+ setInternalValue(newValue);
184
+ }
185
+ onChange?.(newValue);
186
+ const validationError = runValidation(newValue);
187
+ if (!isControlled) {
188
+ setInternalError(validationError);
189
+ }
190
+ const filledLength = newValue.replace(/_/g, "").length;
191
+ const isComplete2 = filledLength === length;
192
+ if (isComplete2 && !validationError && completedRef.current !== newValue) {
193
+ completedRef.current = newValue;
194
+ if (debounceTimerRef.current) {
195
+ clearTimeout(debounceTimerRef.current);
196
+ }
197
+ debounceTimerRef.current = setTimeout(() => {
198
+ onComplete?.(newValue.replace(/_/g, ""));
199
+ }, 200);
200
+ }
201
+ if (!isComplete2 && completedRef.current) {
202
+ completedRef.current = null;
203
+ }
204
+ },
205
+ [isControlled, length, onChange, onComplete, runValidation]
206
+ );
207
+ const handleChange = react.useCallback(
208
+ (e) => {
209
+ if (disabled) return;
210
+ const inputValue = e.target.value;
211
+ const newChar = inputValue[inputValue.length - 1] || "";
212
+ let isValid = false;
213
+ if (type === "numeric") {
214
+ isValid = /^\d$/.test(newChar);
215
+ } else if (type === "alphanumeric") {
216
+ isValid = /^[A-Za-z0-9]$/.test(newChar);
217
+ } else if (type === "custom" && pattern) {
218
+ isValid = pattern.test(newChar);
219
+ } else {
220
+ isValid = true;
221
+ }
222
+ if (!isValid) {
223
+ return;
224
+ }
225
+ const valueArray = currentValue.split("");
226
+ valueArray[focusedIndex] = newChar;
227
+ const newValue = valueArray.join("");
228
+ updateValue(newValue);
229
+ if (focusedIndex < length - 1) {
230
+ setFocusedIndex(focusedIndex + 1);
231
+ }
232
+ },
233
+ [disabled, type, pattern, currentValue, focusedIndex, length, updateValue]
234
+ );
235
+ const handlePaste = react.useCallback(
236
+ async (e) => {
237
+ if (disabled || readOnly) return;
238
+ e.preventDefault();
239
+ const pastedText = e.clipboardData.getData("text/plain").trim();
240
+ if (!pastedText) return;
241
+ if (props.onPaste) {
242
+ const shouldProceed = await props.onPaste(pastedText);
243
+ if (shouldProceed === false) return;
244
+ }
245
+ let validChars = "";
246
+ for (const char of pastedText) {
247
+ if (validChars.length >= length) break;
248
+ let isValid = false;
249
+ if (type === "numeric") {
250
+ isValid = /^\d$/.test(char);
251
+ } else if (type === "alphanumeric") {
252
+ isValid = /^[A-Za-z0-9]$/.test(char);
253
+ } else if (type === "custom" && pattern) {
254
+ isValid = pattern.test(char);
255
+ } else {
256
+ isValid = true;
257
+ }
258
+ if (isValid) {
259
+ validChars += char;
260
+ }
261
+ }
262
+ const newValue = validChars.padEnd(length, "_");
263
+ updateValue(newValue);
264
+ const firstEmptyIndex = newValue.indexOf("_");
265
+ setFocusedIndex(firstEmptyIndex === -1 ? length - 1 : firstEmptyIndex);
266
+ },
267
+ [disabled, readOnly, props, length, type, pattern, updateValue]
268
+ );
269
+ const clear = react.useCallback(() => {
270
+ const emptyValue = "".padEnd(length, "_");
271
+ updateValue(emptyValue);
272
+ setFocusedIndex(0);
273
+ if (!isControlled) {
274
+ setInternalError(null);
275
+ }
276
+ completedRef.current = null;
277
+ }, [length, updateValue, isControlled]);
278
+ const setValue = react.useCallback(
279
+ (newValue) => {
280
+ const paddedValue = newValue.padEnd(length, "_").slice(0, length);
281
+ updateValue(paddedValue);
282
+ const firstEmptyIndex = paddedValue.indexOf("_");
283
+ setFocusedIndex(firstEmptyIndex === -1 ? length - 1 : firstEmptyIndex);
284
+ },
285
+ [length, updateValue]
286
+ );
287
+ const validateCurrent = react.useCallback(() => {
288
+ return runValidation(currentValue);
289
+ }, [currentValue, runValidation]);
290
+ const isComplete = currentValue.replace(/_/g, "").length === length;
291
+ const { handleKeyDown } = useOTPKeyboard({
292
+ value: currentValue,
293
+ length,
294
+ focusedIndex,
295
+ onChange: updateValue,
296
+ setFocusedIndex,
297
+ disabled,
298
+ readOnly
299
+ });
300
+ react.useEffect(() => {
301
+ if (isControlled && controlledValue !== void 0) {
302
+ const firstEmptyIndex = controlledValue.indexOf("_");
303
+ if (firstEmptyIndex !== -1) {
304
+ setFocusedIndex(firstEmptyIndex);
305
+ }
306
+ }
307
+ }, [isControlled, controlledValue]);
308
+ react.useEffect(() => {
309
+ return () => {
310
+ if (debounceTimerRef.current) {
311
+ clearTimeout(debounceTimerRef.current);
312
+ }
313
+ };
314
+ }, []);
315
+ return {
316
+ value: currentValue,
317
+ focusedIndex,
318
+ error: currentError,
319
+ isComplete,
320
+ handleChange,
321
+ handleKeyDown,
322
+ handlePaste,
323
+ setFocusedIndex,
324
+ clear,
325
+ setValue,
326
+ validate: validateCurrent
327
+ };
328
+ }
329
+ var otpDigitVariants = classVarianceAuthority.cva(
330
+ // Base styles - Applied to all variants
331
+ [
332
+ "inline-flex",
333
+ "items-center",
334
+ "justify-center",
335
+ "rounded-md",
336
+ "border-2",
337
+ "font-semibold",
338
+ "transition-all",
339
+ "duration-200",
340
+ "ease-in-out",
341
+ "select-none",
342
+ "tabindex-[-1]"
343
+ // Not tabbable (hidden input handles focus)
344
+ ],
345
+ {
346
+ variants: {
347
+ /**
348
+ * Size Variants
349
+ * All sizes meet WCAG AAA touch target minimum (44x44px)
350
+ */
351
+ size: {
352
+ /**
353
+ * Small: 40×40px base + 4px padding = 44×44px touch target
354
+ * Font: 16px (base size)
355
+ * Use case: Compact layouts, mobile optimization
356
+ */
357
+ sm: [
358
+ "h-10",
359
+ // 40px
360
+ "w-10",
361
+ // 40px
362
+ "text-base",
363
+ // 16px
364
+ "p-1"
365
+ // 4px padding for touch target
366
+ ],
367
+ /**
368
+ * Medium (default): 48×56px
369
+ * Font: 20px (comfortable reading size)
370
+ * Use case: Standard desktop/mobile layouts
371
+ */
372
+ md: [
373
+ "h-14",
374
+ // 56px
375
+ "w-10 sm:w-12 md:w-14",
376
+ // 48px
377
+ "text-xl"
378
+ // 20px
379
+ ],
380
+ /**
381
+ * Large: 56×64px
382
+ * Font: 24px (large reading size)
383
+ * Use case: Accessibility focus, high-visibility needs
384
+ */
385
+ lg: [
386
+ "h-16",
387
+ // 64px
388
+ "w-10 sm:w-12 md:w-16",
389
+ // 56px
390
+ "text-2xl"
391
+ // 24px
392
+ ]
393
+ },
394
+ /**
395
+ * State Variants
396
+ * All states meet WCAG AAA contrast (7:1 minimum)
397
+ */
398
+ state: {
399
+ /**
400
+ * Default: Standard input appearance
401
+ * Border: --border
402
+ * Background: --background
403
+ * Text: --foreground
404
+ */
405
+ default: [
406
+ "border-[var(--input)]",
407
+ "bg-[var(--content-background)]",
408
+ "text-[var(--content-foreground)]",
409
+ "hover:border-[var(--input-hover)]"
410
+ ],
411
+ /**
412
+ * Focus: Active digit being edited
413
+ * Border: --primary
414
+ * Ring: --ring (2px, 2px offset)
415
+ * Contrast: 7:1 minimum
416
+ */
417
+ focus: [
418
+ "border-[var(--input)]",
419
+ "ring-2",
420
+ "ring-[var(--primary)]",
421
+ "ring-offset-2",
422
+ "ring-offset-background",
423
+ "outline-none"
424
+ ],
425
+ /**
426
+ * Filled: Digit has been entered
427
+ * Border: --primary with 50% opacity
428
+ * Text: Bold weight for emphasis
429
+ */
430
+ filled: [
431
+ "border-[var(--primary)]",
432
+ "bg-[var(--content-background)]",
433
+ "text-[var(--content-foreground)]",
434
+ "font-bold"
435
+ ],
436
+ /**
437
+ * Error: Validation failed
438
+ * Border: --destructive
439
+ * Background: --destructive with 10% opacity
440
+ * Text: --destructive-foreground
441
+ * Animation: Shake on error
442
+ */
443
+ error: [
444
+ "border-[var(--destructive)]",
445
+ "bg-[var(--content-background)]",
446
+ "text-[var(--destructive-foreground)]",
447
+ "animate-shake"
448
+ ],
449
+ /**
450
+ * Success: Validation passed (optional)
451
+ * Border: Green (or --success if available)
452
+ * Background: Green with 10% opacity
453
+ * May include checkmark icon
454
+ */
455
+ success: [
456
+ "border-green-600",
457
+ "bg-green-50",
458
+ "text-green-900",
459
+ "dark:border-green-500",
460
+ "dark:bg-green-900/20",
461
+ "dark:text-green-100"
462
+ ],
463
+ /**
464
+ * Disabled: Input not interactive
465
+ * Border: --border with 50% opacity
466
+ * Background: --muted with 50% opacity
467
+ * Text: --muted-foreground
468
+ * Cursor: not-allowed
469
+ * Opacity: 60%
470
+ * Contrast: 4.5:1 minimum (AA standard for disabled)
471
+ */
472
+ disabled: [
473
+ "border-[var(--accent-background)]",
474
+ "bg-[var(--accent-background)]",
475
+ "text-[var(--menu-muted)]",
476
+ "cursor-not-allowed",
477
+ "opacity-60",
478
+ "hover:border-[var(--accent-background)]"
479
+ // Prevent hover effect
480
+ ]
481
+ }
482
+ },
483
+ defaultVariants: {
484
+ size: "md",
485
+ state: "default"
486
+ }
487
+ }
488
+ );
489
+ var otpContainerVariants = classVarianceAuthority.cva(
490
+ [
491
+ "inline-flex",
492
+ "flex-col",
493
+ "gap-2"
494
+ ],
495
+ {
496
+ variants: {
497
+ /**
498
+ * Container size variants
499
+ * Affects spacing and layout
500
+ */
501
+ size: {
502
+ sm: ["gap-1.5"],
503
+ md: ["gap-2"],
504
+ lg: ["gap-3"]
505
+ }
506
+ },
507
+ defaultVariants: {
508
+ size: "md"
509
+ }
510
+ }
511
+ );
512
+ var otpDigitGroupVariants = classVarianceAuthority.cva(
513
+ [
514
+ "flex",
515
+ "items-center"
516
+ ],
517
+ {
518
+ variants: {
519
+ /**
520
+ * Gap between digits
521
+ */
522
+ size: {
523
+ sm: ["gap-1.5"],
524
+ // 6px
525
+ md: ["gap-2"],
526
+ // 8px
527
+ lg: ["gap-3"]
528
+ // 12px
529
+ }
530
+ },
531
+ defaultVariants: {
532
+ size: "md"
533
+ }
534
+ }
535
+ );
536
+ var otpErrorVariants = classVarianceAuthority.cva([
537
+ "text-sm",
538
+ "font-medium",
539
+ "text-[var(--destructive)]",
540
+ "mt-1.5",
541
+ "text-center"
542
+ ]);
543
+ var otpDescriptionVariants = classVarianceAuthority.cva([
544
+ "text-sm",
545
+ "text-[var(--menu-muted)]",
546
+ "mt-1"
547
+ ]);
548
+ var OTPDigitComponent = ({
549
+ value,
550
+ focused,
551
+ size = "md",
552
+ state = "default",
553
+ masked = false,
554
+ className,
555
+ index
556
+ }) => {
557
+ const isFilled = value !== "_" && value !== "";
558
+ const computedState = focused && !state ? "focus" : isFilled && state === "default" ? "filled" : state;
559
+ const displayValue = masked && isFilled ? "\u2022" : value === "_" ? "" : value;
560
+ return /* @__PURE__ */ jsxRuntime.jsx(
561
+ "div",
562
+ {
563
+ className: cn(
564
+ otpDigitVariants({ size, state: computedState }),
565
+ className
566
+ ),
567
+ role: "presentation",
568
+ "aria-hidden": "true",
569
+ "data-focused": focused,
570
+ "data-filled": isFilled,
571
+ "data-index": index,
572
+ children: displayValue || /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--menu-muted)] opacity-40", children: "\u2022" })
573
+ }
574
+ );
575
+ };
576
+ var OTPDigit = react.memo(OTPDigitComponent);
577
+ OTPDigit.displayName = "OTPDigit";
578
+ var OTPInput = react.forwardRef((props, ref) => {
579
+ const {
580
+ label,
581
+ description,
582
+ size = "md",
583
+ disabled = false,
584
+ readOnly = false,
585
+ mask = false,
586
+ showSuccess = false,
587
+ className,
588
+ digitClassName,
589
+ onFocus,
590
+ onBlur,
591
+ inputMode = "numeric",
592
+ length = 6
593
+ } = props;
594
+ const {
595
+ value,
596
+ focusedIndex,
597
+ error,
598
+ isComplete,
599
+ handleChange,
600
+ handleKeyDown,
601
+ handlePaste,
602
+ setFocusedIndex,
603
+ clear,
604
+ setValue,
605
+ validate
606
+ } = useOTPInput(props);
607
+ const inputRef = react.useRef(null);
608
+ react.useImperativeHandle(ref, () => ({
609
+ focus: () => inputRef.current?.focus(),
610
+ blur: () => inputRef.current?.blur(),
611
+ clear,
612
+ setValue,
613
+ getValue: () => value.replace(/_/g, ""),
614
+ isComplete: () => isComplete,
615
+ validate,
616
+ getElement: () => inputRef.current
617
+ }));
618
+ const digits = value.split("");
619
+ const getDigitState = (index) => {
620
+ if (disabled) return "disabled";
621
+ if (error) return "error";
622
+ if (showSuccess && isComplete && !error) return "success";
623
+ if (index === focusedIndex) return "focus";
624
+ if (digits[index] !== "_") return "filled";
625
+ return "default";
626
+ };
627
+ const handleFocusEvent = (e) => {
628
+ onFocus?.(e);
629
+ };
630
+ const handleBlurEvent = (e) => {
631
+ onBlur?.(e);
632
+ };
633
+ const handleDigitClick = (index) => {
634
+ if (disabled || readOnly) return;
635
+ setFocusedIndex(index);
636
+ inputRef.current?.focus();
637
+ };
638
+ const handleDigitKeyDown = (e, index) => {
639
+ if (e.key === "Enter" || e.key === " ") {
640
+ e.preventDefault();
641
+ handleDigitClick(index);
642
+ }
643
+ };
644
+ const descriptionId = description ? `otp-description-${Math.random().toString(36).slice(2, 9)}` : void 0;
645
+ const errorId = error ? `otp-error-${Math.random().toString(36).slice(2, 9)}` : void 0;
646
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(otpContainerVariants({ size }), className), children: [
647
+ /* @__PURE__ */ jsxRuntime.jsx(
648
+ "input",
649
+ {
650
+ ref: inputRef,
651
+ type: "text",
652
+ inputMode,
653
+ value: value.replace(/_/g, ""),
654
+ onChange: handleChange,
655
+ onKeyDown: handleKeyDown,
656
+ onPaste: handlePaste,
657
+ onFocus: handleFocusEvent,
658
+ onBlur: handleBlurEvent,
659
+ disabled,
660
+ readOnly,
661
+ "aria-label": label,
662
+ "aria-describedby": [descriptionId, errorId].filter(Boolean).join(" "),
663
+ "aria-invalid": !!error,
664
+ "aria-errormessage": errorId,
665
+ className: "sr-only",
666
+ autoComplete: "one-time-code",
667
+ maxLength: length
668
+ }
669
+ ),
670
+ /* @__PURE__ */ jsxRuntime.jsx(
671
+ "div",
672
+ {
673
+ className: cn(otpDigitGroupVariants({ size })),
674
+ role: "presentation",
675
+ "aria-hidden": "true",
676
+ children: digits.map((digit, index) => /* @__PURE__ */ jsxRuntime.jsx(
677
+ "div",
678
+ {
679
+ onClick: () => handleDigitClick(index),
680
+ onKeyDown: (e) => handleDigitKeyDown(e, index),
681
+ role: "button",
682
+ tabIndex: -1,
683
+ className: "cursor-text",
684
+ children: /* @__PURE__ */ jsxRuntime.jsx(
685
+ OTPDigit,
686
+ {
687
+ value: digit,
688
+ focused: index === focusedIndex,
689
+ size,
690
+ state: getDigitState(index),
691
+ masked: mask,
692
+ className: digitClassName,
693
+ index
694
+ }
695
+ )
696
+ },
697
+ index
698
+ ))
699
+ }
700
+ ),
701
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { id: descriptionId, className: otpDescriptionVariants(), children: description }),
702
+ error && /* @__PURE__ */ jsxRuntime.jsx(
703
+ "p",
704
+ {
705
+ id: errorId,
706
+ className: otpErrorVariants(),
707
+ role: "alert",
708
+ "aria-live": "assertive",
709
+ children: error
710
+ }
711
+ ),
712
+ /* @__PURE__ */ jsxRuntime.jsxs(
713
+ "div",
714
+ {
715
+ role: "status",
716
+ "aria-live": "polite",
717
+ "aria-atomic": "true",
718
+ className: "sr-only",
719
+ children: [
720
+ !isComplete && !error && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
721
+ value.replace(/_/g, "").length,
722
+ " of ",
723
+ length,
724
+ " digits entered"
725
+ ] }),
726
+ isComplete && !error && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: "Verification code complete" })
727
+ ]
728
+ }
729
+ )
730
+ ] });
11
731
  });
732
+ OTPInput.displayName = "OTPInput";
733
+
734
+ exports.OTPInput = OTPInput;
12
735
  //# sourceMappingURL=index.js.map
13
736
  //# sourceMappingURL=index.js.map