@boxcustodia/library 2.0.0-alpha.2 → 2.0.0-alpha.20

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 (826) hide show
  1. package/dist/components/accordion/accordion.cjs.js +2 -0
  2. package/dist/components/accordion/accordion.es.js +118 -0
  3. package/dist/components/alert/alert.cjs.js +2 -0
  4. package/dist/components/alert/alert.es.js +99 -0
  5. package/dist/components/alert-dialog/alert-dialog.cjs.js +2 -0
  6. package/dist/components/alert-dialog/alert-dialog.es.js +221 -0
  7. package/dist/components/auto-complete/auto-complete.cjs.js +2 -0
  8. package/dist/components/auto-complete/auto-complete.es.js +344 -0
  9. package/dist/components/avatar/avatar.cjs.js +2 -0
  10. package/dist/components/avatar/avatar.es.js +147 -0
  11. package/dist/components/button/button.cjs.js +2 -0
  12. package/dist/components/button/button.es.js +58 -0
  13. package/dist/components/button/components/base-button.cjs.js +2 -0
  14. package/dist/components/button/components/base-button.es.js +46 -0
  15. package/dist/components/calendar/calendar.cjs.js +2 -0
  16. package/dist/components/calendar/calendar.es.js +139 -0
  17. package/dist/components/card/card.cjs.js +2 -0
  18. package/dist/components/card/card.es.js +142 -0
  19. package/dist/components/center/center.cjs.js +2 -0
  20. package/dist/components/center/center.es.js +23 -0
  21. package/dist/components/checkbox/checkbox.cjs.js +2 -0
  22. package/dist/components/checkbox/checkbox.es.js +229 -0
  23. package/dist/components/checkbox-group/checkbox-group.cjs.js +2 -0
  24. package/dist/components/checkbox-group/checkbox-group.es.js +59 -0
  25. package/dist/components/combobox/combobox.cjs.js +2 -0
  26. package/dist/components/combobox/combobox.es.js +689 -0
  27. package/dist/components/date-picker/date-input.cjs.js +2 -0
  28. package/dist/components/date-picker/date-input.es.js +169 -0
  29. package/dist/components/date-picker/date-picker.cjs.js +2 -0
  30. package/dist/components/date-picker/date-picker.es.js +271 -0
  31. package/dist/components/date-picker/date-picker.utils.cjs.js +1 -0
  32. package/dist/components/date-picker/date-picker.utils.es.js +81 -0
  33. package/dist/components/date-picker/use-date-input-popover.cjs.js +1 -0
  34. package/dist/components/date-picker/use-date-input-popover.es.js +26 -0
  35. package/dist/components/date-picker/use-date-input.cjs.js +1 -0
  36. package/dist/components/date-picker/use-date-input.es.js +64 -0
  37. package/dist/components/date-picker/use-hidden-field-value.cjs.js +1 -0
  38. package/dist/components/date-picker/use-hidden-field-value.es.js +11 -0
  39. package/dist/components/dialog/dialog.cjs.js +2 -0
  40. package/dist/components/dialog/dialog.es.js +221 -0
  41. package/dist/components/divider/divider.cjs.js +2 -0
  42. package/dist/components/divider/divider.es.js +27 -0
  43. package/dist/components/dropzone/dropzone.cjs.js +2 -0
  44. package/dist/components/dropzone/dropzone.es.js +303 -0
  45. package/dist/components/dropzone/file-types.cjs.js +1 -0
  46. package/dist/components/dropzone/file-types.es.js +57 -0
  47. package/dist/components/empty/empty.cjs.js +2 -0
  48. package/dist/components/empty/empty.es.js +128 -0
  49. package/dist/components/field/field.cjs.js +2 -0
  50. package/dist/components/field/field.es.js +179 -0
  51. package/dist/components/form/form.cjs.js +2 -0
  52. package/dist/components/form/form.es.js +11 -0
  53. package/dist/components/input/input.cjs.js +2 -0
  54. package/dist/components/input/input.es.js +60 -0
  55. package/dist/components/kbd/kbd.cjs.js +2 -0
  56. package/dist/components/kbd/kbd.es.js +36 -0
  57. package/dist/components/label/label.cjs.js +2 -0
  58. package/dist/components/label/label.es.js +49 -0
  59. package/dist/components/loader/loader.cjs.js +2 -0
  60. package/dist/components/loader/loader.es.js +55 -0
  61. package/dist/components/menu/menu-primitives.cjs.js +2 -0
  62. package/dist/components/menu/menu-primitives.es.js +240 -0
  63. package/dist/components/menu/menu.cjs.js +2 -0
  64. package/dist/components/menu/menu.es.js +81 -0
  65. package/dist/components/number-input/number-input.cjs.js +2 -0
  66. package/dist/components/number-input/number-input.es.js +212 -0
  67. package/dist/components/otp/otp.cjs.js +2 -0
  68. package/dist/components/otp/otp.es.js +93 -0
  69. package/dist/components/pagination/pagination.cjs.js +2 -0
  70. package/dist/components/pagination/pagination.es.js +393 -0
  71. package/dist/components/pagination/pagination.model.cjs.js +1 -0
  72. package/dist/components/pagination/pagination.model.es.js +4 -0
  73. package/dist/components/password/password.cjs.js +2 -0
  74. package/dist/components/password/password.es.js +73 -0
  75. package/dist/components/popover/popover.cjs.js +2 -0
  76. package/dist/components/popover/popover.es.js +158 -0
  77. package/dist/components/progress/progress.cjs.js +2 -0
  78. package/dist/components/progress/progress.es.js +114 -0
  79. package/dist/components/scroll-area/scroll-area.cjs.js +2 -0
  80. package/dist/components/scroll-area/scroll-area.es.js +67 -0
  81. package/dist/components/select/select.cjs.js +2 -0
  82. package/dist/components/select/select.es.js +331 -0
  83. package/dist/components/skeleton/skeleton.cjs.js +2 -0
  84. package/dist/components/skeleton/skeleton.es.js +19 -0
  85. package/dist/components/stack/stack.cjs.js +2 -0
  86. package/dist/components/stack/stack.es.js +42 -0
  87. package/dist/components/stepper/stepper.cjs.js +2 -0
  88. package/dist/components/stepper/stepper.es.js +368 -0
  89. package/dist/components/switch/switch.cjs.js +2 -0
  90. package/dist/components/switch/switch.es.js +85 -0
  91. package/dist/components/table/table.cjs.js +2 -0
  92. package/dist/components/table/table.es.js +168 -0
  93. package/dist/components/tabs/tabs.cjs.js +2 -0
  94. package/dist/components/tabs/tabs.es.js +96 -0
  95. package/dist/components/tag/tag.cjs.js +2 -0
  96. package/dist/components/tag/tag.es.js +50 -0
  97. package/dist/components/textarea/textarea.cjs.js +2 -0
  98. package/dist/components/textarea/textarea.es.js +31 -0
  99. package/dist/components/timeline/timeline.cjs.js +2 -0
  100. package/dist/components/timeline/timeline.es.js +263 -0
  101. package/dist/components/toast/toast.cjs.js +2 -0
  102. package/dist/components/toast/toast.es.js +224 -0
  103. package/dist/components/tooltip/tooltip.cjs.js +2 -0
  104. package/dist/components/tooltip/tooltip.es.js +122 -0
  105. package/dist/components/tree/tree.cjs.js +2 -0
  106. package/dist/components/tree/tree.es.js +150 -0
  107. package/dist/hooks/internal/is-apple-device.cjs.js +1 -0
  108. package/dist/hooks/internal/is-apple-device.es.js +9 -0
  109. package/dist/hooks/internal/is-browser.cjs.js +1 -0
  110. package/dist/hooks/internal/is-browser.es.js +4 -0
  111. package/dist/hooks/internal/use-isomorphic-layout-effect.cjs.js +1 -0
  112. package/dist/hooks/internal/use-isomorphic-layout-effect.es.js +6 -0
  113. package/dist/hooks/internal/use-latest-ref.cjs.js +1 -0
  114. package/dist/hooks/internal/use-latest-ref.es.js +11 -0
  115. package/dist/hooks/use-array/use-array.cjs.js +1 -0
  116. package/dist/hooks/use-array/use-array.es.js +58 -0
  117. package/dist/hooks/use-async/use-async.cjs.js +1 -0
  118. package/dist/hooks/use-async/use-async.es.js +57 -0
  119. package/dist/hooks/use-boolean/use-boolean.cjs.js +1 -0
  120. package/dist/hooks/use-boolean/use-boolean.es.js +25 -0
  121. package/dist/hooks/use-click-outside/use-click-outside.cjs.js +1 -0
  122. package/dist/hooks/use-click-outside/use-click-outside.es.js +29 -0
  123. package/dist/hooks/use-clipboard/use-clipboard.cjs.js +1 -0
  124. package/dist/hooks/use-clipboard/use-clipboard.es.js +29 -0
  125. package/dist/hooks/use-debounce-callback/use-debounced-callback.cjs.js +1 -0
  126. package/dist/hooks/use-debounce-callback/use-debounced-callback.es.js +32 -0
  127. package/dist/hooks/use-debounce-value/use-debounced-value.cjs.js +1 -0
  128. package/dist/hooks/use-debounce-value/use-debounced-value.es.js +11 -0
  129. package/dist/hooks/use-disclosure/use-disclosure.cjs.js +1 -0
  130. package/dist/hooks/use-disclosure/use-disclosure.es.js +24 -0
  131. package/dist/hooks/use-document-title/use-document-title.cjs.js +1 -0
  132. package/dist/hooks/use-document-title/use-document-title.es.js +19 -0
  133. package/dist/hooks/use-event-listener/use-event-listener.cjs.js +1 -0
  134. package/dist/hooks/use-event-listener/use-event-listener.es.js +21 -0
  135. package/dist/hooks/use-focus-trap/scope-tab.cjs.js +1 -0
  136. package/dist/hooks/use-focus-trap/scope-tab.es.js +21 -0
  137. package/dist/hooks/use-focus-trap/tabbable.cjs.js +1 -0
  138. package/dist/hooks/use-focus-trap/tabbable.es.js +38 -0
  139. package/dist/hooks/use-focus-trap/use-focus-trap.cjs.js +1 -0
  140. package/dist/hooks/use-focus-trap/use-focus-trap.es.js +34 -0
  141. package/dist/hooks/use-hotkey/use-hotkey.cjs.js +1 -0
  142. package/dist/hooks/use-hotkey/use-hotkey.es.js +34 -0
  143. package/dist/hooks/use-hotkey/utils/is-input-field.cjs.js +1 -0
  144. package/dist/hooks/use-hotkey/utils/is-input-field.es.js +7 -0
  145. package/dist/hooks/use-hotkey/utils/match-and-run.cjs.js +1 -0
  146. package/dist/hooks/use-hotkey/utils/match-and-run.es.js +12 -0
  147. package/dist/hooks/use-hotkey/utils/match-key-modifiers.cjs.js +1 -0
  148. package/dist/hooks/use-hotkey/utils/match-key-modifiers.es.js +18 -0
  149. package/dist/hooks/use-hover/use-hover.cjs.js +1 -0
  150. package/dist/hooks/use-hover/use-hover.es.js +35 -0
  151. package/dist/hooks/use-is-visible/use-is-visible.cjs.js +1 -0
  152. package/dist/hooks/use-is-visible/use-is-visible.es.js +35 -0
  153. package/dist/hooks/use-local-storage/use-local-storage.cjs.js +1 -0
  154. package/dist/hooks/use-local-storage/use-local-storage.es.js +61 -0
  155. package/dist/hooks/use-media-query/use-media-query.cjs.js +1 -0
  156. package/dist/hooks/use-media-query/use-media-query.es.js +23 -0
  157. package/dist/hooks/use-memoized-fn/use-memoized-fn.cjs.js +1 -0
  158. package/dist/hooks/use-memoized-fn/use-memoized-fn.es.js +15 -0
  159. package/dist/hooks/use-mutation/use-mutation.cjs.js +1 -0
  160. package/dist/hooks/use-mutation/use-mutation.es.js +41 -0
  161. package/dist/hooks/use-object/use-object.cjs.js +1 -0
  162. package/dist/hooks/use-object/use-object.es.js +30 -0
  163. package/dist/hooks/use-on-mount/use-on-mount.cjs.js +1 -0
  164. package/dist/hooks/use-on-mount/use-on-mount.es.js +11 -0
  165. package/dist/hooks/use-pagination/use-pagination.cjs.js +1 -0
  166. package/dist/hooks/use-pagination/use-pagination.es.js +38 -0
  167. package/dist/hooks/use-portal/use-portal.cjs.js +1 -0
  168. package/dist/hooks/use-portal/use-portal.es.js +31 -0
  169. package/dist/hooks/use-prevent-page-close/use-prevent-page-close.cjs.js +1 -0
  170. package/dist/hooks/use-prevent-page-close/use-prevent-page-close.es.js +14 -0
  171. package/dist/hooks/use-range-pagination/use-range-pagination.cjs.js +1 -0
  172. package/dist/hooks/use-range-pagination/use-range-pagination.es.js +36 -0
  173. package/dist/hooks/use-selection/use-selection.cjs.js +1 -0
  174. package/dist/hooks/use-selection/use-selection.es.js +38 -0
  175. package/dist/hooks/use-step/use-step.cjs.js +1 -0
  176. package/dist/hooks/use-step/use-step.es.js +28 -0
  177. package/dist/index.cjs.js +1 -141
  178. package/dist/index.css +2 -0
  179. package/dist/index.d.ts +2 -2039
  180. package/dist/index.es.js +445 -49355
  181. package/dist/lib/cn.cjs.js +1 -0
  182. package/dist/lib/cn.es.js +10 -0
  183. package/dist/providers/library-provider.cjs.js +1 -0
  184. package/dist/providers/library-provider.es.js +13 -0
  185. package/dist/providers/theme/ThemeProvider.cjs.js +1 -0
  186. package/dist/providers/theme/ThemeProvider.es.js +10 -0
  187. package/dist/providers/theme/useThemeProps.cjs.js +1 -0
  188. package/dist/providers/theme/useThemeProps.es.js +12 -0
  189. package/dist/setupTests.d.ts +0 -0
  190. package/dist/src/__doc__/Examples.d.ts +7 -0
  191. package/dist/src/components/accordion/accordion.d.ts +28 -0
  192. package/dist/src/components/accordion/accordion.test.d.ts +1 -0
  193. package/dist/src/components/accordion/index.d.ts +1 -0
  194. package/dist/src/components/alert/alert.d.ts +26 -0
  195. package/dist/src/components/alert/alert.test.d.ts +1 -0
  196. package/dist/src/components/alert/index.d.ts +1 -0
  197. package/dist/src/components/alert-dialog/alert-dialog.d.ts +104 -0
  198. package/dist/src/components/alert-dialog/alert-dialog.test.d.ts +1 -0
  199. package/dist/src/components/alert-dialog/index.d.ts +1 -0
  200. package/dist/src/components/auto-complete/auto-complete.d.ts +95 -0
  201. package/dist/src/components/auto-complete/auto-complete.test.d.ts +1 -0
  202. package/dist/src/components/auto-complete/index.d.ts +1 -0
  203. package/dist/src/components/avatar/avatar.d.ts +31 -0
  204. package/dist/src/components/avatar/avatar.test.d.ts +1 -0
  205. package/dist/src/components/avatar/index.d.ts +1 -0
  206. package/dist/src/components/button/button.d.ts +11 -0
  207. package/dist/src/components/button/button.test.d.ts +1 -0
  208. package/dist/src/components/button/components/base-button.d.ts +7 -0
  209. package/dist/src/components/button/index.d.ts +2 -0
  210. package/dist/src/components/calendar/calendar.d.ts +3 -0
  211. package/dist/src/components/calendar/calendar.test.d.ts +1 -0
  212. package/dist/src/components/calendar/index.d.ts +1 -0
  213. package/dist/src/components/card/card.d.ts +35 -0
  214. package/dist/src/components/card/card.test.d.ts +1 -0
  215. package/dist/src/components/card/index.d.ts +1 -0
  216. package/dist/src/components/center/center.d.ts +7 -0
  217. package/dist/src/components/center/center.test.d.ts +1 -0
  218. package/dist/src/components/center/index.d.ts +1 -0
  219. package/dist/src/components/checkbox/checkbox.d.ts +74 -0
  220. package/dist/src/components/checkbox/checkbox.test.d.ts +1 -0
  221. package/dist/src/components/checkbox/index.d.ts +1 -0
  222. package/dist/src/components/checkbox-group/checkbox-group.d.ts +21 -0
  223. package/dist/src/components/checkbox-group/checkbox-group.test.d.ts +1 -0
  224. package/dist/src/components/checkbox-group/index.d.ts +1 -0
  225. package/dist/src/components/combobox/combobox.d.ts +112 -0
  226. package/dist/src/components/combobox/combobox.test.d.ts +1 -0
  227. package/dist/src/components/combobox/index.d.ts +1 -0
  228. package/dist/src/components/date-picker/date-input-form.test.d.ts +1 -0
  229. package/dist/src/components/date-picker/date-input.d.ts +2 -0
  230. package/dist/src/components/date-picker/date-picker.d.ts +5 -0
  231. package/dist/src/components/date-picker/date-picker.model.d.ts +78 -0
  232. package/dist/src/components/date-picker/date-picker.test.d.ts +1 -0
  233. package/dist/src/components/date-picker/date-picker.utils.d.ts +29 -0
  234. package/dist/src/components/date-picker/date-picker.utils.test.d.ts +1 -0
  235. package/dist/src/components/date-picker/index.d.ts +3 -0
  236. package/dist/src/components/date-picker/use-date-input-popover.d.ts +12 -0
  237. package/dist/src/components/date-picker/use-date-input-popover.test.d.ts +1 -0
  238. package/dist/src/components/date-picker/use-date-input.d.ts +16 -0
  239. package/dist/src/components/date-picker/use-hidden-field-value.d.ts +12 -0
  240. package/dist/src/components/dialog/dialog.d.ts +100 -0
  241. package/dist/src/components/dialog/dialog.test.d.ts +1 -0
  242. package/dist/src/components/dialog/index.d.ts +1 -0
  243. package/dist/src/components/divider/divider.d.ts +4 -0
  244. package/dist/src/components/divider/divider.test.d.ts +1 -0
  245. package/dist/src/components/divider/index.d.ts +1 -0
  246. package/dist/src/components/dropzone/dropzone.d.ts +67 -0
  247. package/dist/src/components/dropzone/dropzone.test.d.ts +1 -0
  248. package/dist/src/components/dropzone/file-types.d.ts +27 -0
  249. package/dist/src/components/dropzone/index.d.ts +2 -0
  250. package/dist/src/components/empty/empty.d.ts +33 -0
  251. package/dist/src/components/empty/empty.test.d.ts +1 -0
  252. package/dist/src/components/empty/index.d.ts +1 -0
  253. package/dist/src/components/field/field.d.ts +57 -0
  254. package/dist/src/components/field/field.test.d.ts +1 -0
  255. package/dist/src/components/field/index.d.ts +1 -0
  256. package/dist/src/components/form/form.d.ts +5 -0
  257. package/dist/src/components/form/form.test.d.ts +1 -0
  258. package/dist/src/components/form/index.d.ts +1 -0
  259. package/dist/src/components/index.d.ts +44 -0
  260. package/dist/src/components/input/index.d.ts +1 -0
  261. package/dist/src/components/input/input.d.ts +9 -0
  262. package/dist/src/components/input/input.test.d.ts +1 -0
  263. package/dist/src/components/kbd/index.d.ts +1 -0
  264. package/dist/src/components/kbd/kbd.d.ts +3 -0
  265. package/dist/src/components/kbd/kbd.test.d.ts +1 -0
  266. package/dist/src/components/label/index.d.ts +1 -0
  267. package/dist/src/components/label/label.d.ts +15 -0
  268. package/dist/src/components/label/label.test.d.ts +1 -0
  269. package/dist/src/components/loader/index.d.ts +1 -0
  270. package/dist/src/components/loader/loader.d.ts +18 -0
  271. package/dist/src/components/loader/loader.test.d.ts +1 -0
  272. package/dist/src/components/menu/index.d.ts +2 -0
  273. package/dist/src/components/menu/menu-primitives.d.ts +29 -0
  274. package/dist/src/components/menu/menu.d.ts +57 -0
  275. package/dist/src/components/menu/menu.test.d.ts +1 -0
  276. package/dist/src/components/number-input/index.d.ts +1 -0
  277. package/dist/src/components/number-input/number-input.d.ts +31 -0
  278. package/dist/src/components/number-input/number-input.test.d.ts +1 -0
  279. package/dist/src/components/otp/index.d.ts +1 -0
  280. package/dist/src/components/otp/otp.d.ts +16 -0
  281. package/dist/src/components/otp/otp.test.d.ts +1 -0
  282. package/dist/src/components/pagination/index.d.ts +2 -0
  283. package/dist/src/components/pagination/pagination.d.ts +131 -0
  284. package/dist/src/components/pagination/pagination.model.d.ts +2 -0
  285. package/dist/src/components/pagination/pagination.test.d.ts +1 -0
  286. package/dist/src/components/password/index.d.ts +1 -0
  287. package/dist/src/components/password/password.d.ts +19 -0
  288. package/dist/src/components/password/password.test.d.ts +1 -0
  289. package/dist/src/components/popover/index.d.ts +1 -0
  290. package/dist/src/components/popover/popover.d.ts +41 -0
  291. package/dist/src/components/popover/popover.test.d.ts +1 -0
  292. package/dist/src/components/progress/index.d.ts +1 -0
  293. package/dist/src/components/progress/progress.d.ts +22 -0
  294. package/dist/src/components/progress/progress.test.d.ts +1 -0
  295. package/dist/src/components/radio-group/index.d.ts +1 -0
  296. package/dist/src/components/radio-group/radio-group.d.ts +41 -0
  297. package/dist/src/components/radio-group/radio-group.test.d.ts +1 -0
  298. package/dist/src/components/scroll-area/index.d.ts +1 -0
  299. package/dist/src/components/scroll-area/scroll-area.d.ts +8 -0
  300. package/dist/src/components/scroll-area/scroll-area.test.d.ts +1 -0
  301. package/dist/src/components/select/index.d.ts +1 -0
  302. package/dist/src/components/select/select.d.ts +71 -0
  303. package/dist/src/components/select/select.test.d.ts +1 -0
  304. package/dist/src/components/skeleton/index.d.ts +1 -0
  305. package/dist/src/components/skeleton/skeleton.d.ts +2 -0
  306. package/dist/src/components/skeleton/skeleton.test.d.ts +1 -0
  307. package/dist/src/components/stack/index.d.ts +1 -0
  308. package/dist/src/components/stack/stack.d.ts +14 -0
  309. package/dist/src/components/stack/stack.test.d.ts +1 -0
  310. package/dist/src/components/stepper/index.d.ts +1 -0
  311. package/dist/src/components/stepper/stepper.d.ts +83 -0
  312. package/dist/src/components/stepper/stepper.test.d.ts +1 -0
  313. package/dist/src/components/switch/index.d.ts +1 -0
  314. package/dist/src/components/switch/switch.d.ts +21 -0
  315. package/dist/src/components/switch/switch.test.d.ts +1 -0
  316. package/dist/src/components/table/index.d.ts +1 -0
  317. package/dist/src/components/table/table.d.ts +50 -0
  318. package/dist/src/components/table/table.test.d.ts +1 -0
  319. package/dist/src/components/tabs/index.d.ts +1 -0
  320. package/dist/src/components/tabs/tabs.d.ts +11 -0
  321. package/dist/src/components/tabs/tabs.test.d.ts +1 -0
  322. package/dist/src/components/tag/index.d.ts +1 -0
  323. package/dist/src/components/tag/tag.d.ts +7 -0
  324. package/dist/src/components/tag/tag.test.d.ts +1 -0
  325. package/dist/src/components/textarea/index.d.ts +1 -0
  326. package/dist/src/components/textarea/textarea.d.ts +5 -0
  327. package/dist/src/components/textarea/textarea.test.d.ts +1 -0
  328. package/dist/src/components/timeline/index.d.ts +1 -0
  329. package/dist/src/components/timeline/timeline.d.ts +50 -0
  330. package/dist/src/components/timeline/timeline.test.d.ts +1 -0
  331. package/dist/src/components/toast/index.d.ts +1 -0
  332. package/dist/src/components/toast/toast.d.ts +101 -0
  333. package/dist/src/components/toast/toast.test.d.ts +1 -0
  334. package/dist/src/components/tooltip/index.d.ts +1 -0
  335. package/dist/src/components/tooltip/tooltip.d.ts +52 -0
  336. package/dist/src/components/tooltip/tooltip.test.d.ts +1 -0
  337. package/dist/src/components/tree/index.d.ts +1 -0
  338. package/dist/src/components/tree/tree.d.ts +18 -0
  339. package/dist/src/components/tree/tree.test.d.ts +1 -0
  340. package/dist/src/hooks/index.d.ts +27 -0
  341. package/dist/src/hooks/internal/index.d.ts +4 -0
  342. package/dist/src/hooks/internal/is-apple-device.d.ts +12 -0
  343. package/dist/src/hooks/internal/is-apple-device.test.d.ts +1 -0
  344. package/dist/src/hooks/internal/is-browser.d.ts +1 -0
  345. package/dist/src/hooks/internal/use-isomorphic-layout-effect.d.ts +2 -0
  346. package/dist/src/hooks/internal/use-latest-ref.d.ts +12 -0
  347. package/dist/src/hooks/use-array/index.d.ts +1 -0
  348. package/dist/src/hooks/use-array/use-array.d.ts +24 -0
  349. package/dist/src/hooks/use-array/use-array.test.d.ts +1 -0
  350. package/dist/src/hooks/use-async/index.d.ts +1 -0
  351. package/dist/src/hooks/use-async/use-async.d.ts +21 -0
  352. package/dist/src/hooks/use-async/use-async.test.d.ts +1 -0
  353. package/dist/src/hooks/use-boolean/index.d.ts +1 -0
  354. package/dist/src/hooks/use-boolean/use-boolean.d.ts +15 -0
  355. package/dist/src/hooks/use-boolean/use-boolean.test.d.ts +1 -0
  356. package/dist/src/hooks/use-click-outside/index.d.ts +1 -0
  357. package/dist/src/hooks/use-click-outside/use-click-outside.d.ts +23 -0
  358. package/dist/src/hooks/use-click-outside/use-click-outside.test.d.ts +1 -0
  359. package/dist/src/hooks/use-clipboard/index.d.ts +1 -0
  360. package/dist/src/hooks/use-clipboard/use-clipboard.d.ts +15 -0
  361. package/dist/src/hooks/use-clipboard/use-clipboard.test.d.ts +1 -0
  362. package/dist/src/hooks/use-debounce-callback/index.d.ts +1 -0
  363. package/dist/src/hooks/use-debounce-callback/use-debounced-callback.d.ts +19 -0
  364. package/dist/src/hooks/use-debounce-callback/use-debounced-callback.test.d.ts +1 -0
  365. package/dist/src/hooks/use-debounce-value/index.d.ts +1 -0
  366. package/dist/src/hooks/use-debounce-value/use-debounced-value.d.ts +10 -0
  367. package/dist/src/hooks/use-debounce-value/use-debounced-value.test.d.ts +1 -0
  368. package/dist/src/hooks/use-disclosure/index.d.ts +1 -0
  369. package/dist/src/hooks/use-disclosure/use-disclosure.d.ts +17 -0
  370. package/dist/src/hooks/use-disclosure/use-disclosure.test.d.ts +1 -0
  371. package/dist/src/hooks/use-document-title/index.d.ts +1 -0
  372. package/dist/src/hooks/use-document-title/use-document-title.d.ts +16 -0
  373. package/dist/src/hooks/use-document-title/use-document-title.test.d.ts +1 -0
  374. package/dist/src/hooks/use-event-listener/index.d.ts +1 -0
  375. package/dist/src/hooks/use-event-listener/use-event-listener.d.ts +18 -0
  376. package/dist/src/hooks/use-event-listener/use-event-listener.test.d.ts +1 -0
  377. package/dist/src/hooks/use-focus-trap/index.d.ts +1 -0
  378. package/dist/src/hooks/use-focus-trap/scope-tab.d.ts +1 -0
  379. package/dist/src/hooks/use-focus-trap/tabbable.d.ts +4 -0
  380. package/dist/src/hooks/use-focus-trap/use-focus-trap.d.ts +1 -0
  381. package/dist/src/hooks/use-focus-trap/use-focus-trap.test.d.ts +1 -0
  382. package/dist/src/hooks/use-hotkey/index.d.ts +2 -0
  383. package/dist/src/hooks/use-hotkey/use-hotkey.d.ts +66 -0
  384. package/dist/src/hooks/use-hotkey/use-hotkey.test.d.ts +1 -0
  385. package/dist/src/hooks/use-hotkey/utils/index.d.ts +4 -0
  386. package/dist/src/hooks/use-hotkey/utils/is-input-field.d.ts +12 -0
  387. package/dist/src/hooks/use-hotkey/utils/is-input-field.test.d.ts +1 -0
  388. package/dist/src/hooks/use-hotkey/utils/match-and-run.d.ts +36 -0
  389. package/dist/src/hooks/use-hotkey/utils/match-and-run.test.d.ts +1 -0
  390. package/dist/src/hooks/use-hotkey/utils/match-key-modifiers.d.ts +22 -0
  391. package/dist/src/hooks/use-hotkey/utils/match-key-modifiers.test.d.ts +1 -0
  392. package/dist/src/hooks/use-hover/index.d.ts +1 -0
  393. package/dist/src/hooks/use-hover/use-hover.d.ts +16 -0
  394. package/dist/src/hooks/use-hover/use-hover.test.d.ts +1 -0
  395. package/dist/src/hooks/use-is-visible/index.d.ts +1 -0
  396. package/dist/src/hooks/use-is-visible/use-is-visible.d.ts +34 -0
  397. package/dist/src/hooks/use-is-visible/use-is-visible.test.d.ts +1 -0
  398. package/dist/src/hooks/use-local-storage/index.d.ts +1 -0
  399. package/dist/src/hooks/use-local-storage/use-local-storage.d.ts +13 -0
  400. package/dist/src/hooks/use-local-storage/use-local-storage.test.d.ts +1 -0
  401. package/dist/src/hooks/use-media-query/index.d.ts +1 -0
  402. package/dist/src/hooks/use-media-query/use-media-query.d.ts +10 -0
  403. package/dist/src/hooks/use-media-query/use-media-query.test.d.ts +1 -0
  404. package/dist/src/hooks/use-memoized-fn/index.d.ts +1 -0
  405. package/dist/src/hooks/use-memoized-fn/use-memoized-fn.d.ts +3 -0
  406. package/dist/src/hooks/use-memoized-fn/use-memoized-fn.test.d.ts +1 -0
  407. package/dist/src/hooks/use-mutation/index.d.ts +1 -0
  408. package/dist/src/hooks/use-mutation/use-mutation.d.ts +22 -0
  409. package/dist/src/hooks/use-mutation/use-mutation.test.d.ts +1 -0
  410. package/dist/src/hooks/use-object/index.d.ts +1 -0
  411. package/dist/src/hooks/use-object/use-object.d.ts +15 -0
  412. package/dist/src/hooks/use-object/use-object.test.d.ts +1 -0
  413. package/dist/src/hooks/use-on-mount/index.d.ts +1 -0
  414. package/dist/src/hooks/use-on-mount/use-on-mount.d.ts +2 -0
  415. package/dist/src/hooks/use-on-mount/use-on-mount.test.d.ts +1 -0
  416. package/dist/src/hooks/use-pagination/index.d.ts +1 -0
  417. package/dist/src/hooks/use-pagination/use-pagination.d.ts +46 -0
  418. package/dist/src/hooks/use-pagination/use-pagination.test.d.ts +1 -0
  419. package/dist/src/hooks/use-portal/index.d.ts +1 -0
  420. package/dist/src/hooks/use-portal/use-portal.d.ts +4 -0
  421. package/dist/src/hooks/use-portal/use-portal.test.d.ts +1 -0
  422. package/dist/src/hooks/use-prevent-page-close/index.d.ts +1 -0
  423. package/dist/src/hooks/use-prevent-page-close/use-prevent-page-close.d.ts +10 -0
  424. package/dist/src/hooks/use-prevent-page-close/use-prevent-page-close.test.d.ts +1 -0
  425. package/dist/src/hooks/use-range-pagination/index.d.ts +1 -0
  426. package/dist/src/hooks/use-range-pagination/use-range-pagination.d.ts +22 -0
  427. package/dist/src/hooks/use-range-pagination/use-range-pagination.test.d.ts +1 -0
  428. package/dist/src/hooks/use-selection/index.d.ts +1 -0
  429. package/dist/src/hooks/use-selection/use-selection.d.ts +54 -0
  430. package/dist/src/hooks/use-selection/use-selection.test.d.ts +1 -0
  431. package/dist/src/hooks/use-step/index.d.ts +1 -0
  432. package/dist/src/hooks/use-step/use-step.d.ts +21 -0
  433. package/dist/src/hooks/use-step/use-step.test.d.ts +1 -0
  434. package/dist/src/index.d.ts +6 -0
  435. package/dist/src/lib/cn.d.ts +3 -0
  436. package/dist/src/lib/index.d.ts +1 -0
  437. package/dist/src/models/Generic.model.d.ts +37 -0
  438. package/dist/src/models/index.d.ts +1 -0
  439. package/dist/src/providers/index.d.ts +2 -0
  440. package/dist/src/providers/library-provider.d.ts +28 -0
  441. package/dist/src/providers/theme/ThemeProvider.d.ts +11 -0
  442. package/dist/src/providers/theme/index.d.ts +3 -0
  443. package/dist/src/providers/theme/types.d.ts +10 -0
  444. package/dist/src/providers/theme/useThemeProps.d.ts +10 -0
  445. package/dist/src/stores/theme.store.d.ts +10 -0
  446. package/dist/src/utils/dates/parseDateRange.utility.d.ts +14 -0
  447. package/dist/src/utils/form.d.ts +42 -0
  448. package/dist/src/utils/form.test.d.ts +1 -0
  449. package/dist/src/utils/functions/createSafeContext.d.ts +2 -0
  450. package/dist/src/utils/functions/createSafeContext.test.d.ts +1 -0
  451. package/dist/src/utils/functions/ensureReactElement.d.ts +9 -0
  452. package/dist/src/utils/functions/ensureReactElement.test.d.ts +1 -0
  453. package/dist/src/utils/functions/getFormData.d.ts +2 -0
  454. package/dist/src/utils/functions/getFormData.test.d.ts +1 -0
  455. package/dist/src/utils/functions/index.d.ts +4 -0
  456. package/dist/src/utils/functions/mergeRefs.d.ts +2 -0
  457. package/dist/src/utils/functions/mergeRefs.test.d.ts +1 -0
  458. package/dist/src/utils/index.d.ts +3 -0
  459. package/dist/src/utils/strings/extractInitials.utility.d.ts +6 -0
  460. package/dist/src/utils/strings/index.d.ts +1 -0
  461. package/dist/src/utils/tests/click.d.ts +1 -0
  462. package/dist/src/utils/tests/index.d.ts +2 -0
  463. package/dist/src/utils/tests/keyboard.d.ts +10 -0
  464. package/dist/src/utils/tests/type.d.ts +1 -0
  465. package/dist/theme.css +232 -224
  466. package/dist/utils/form.cjs.js +1 -0
  467. package/dist/utils/form.es.js +62 -0
  468. package/dist/utils/functions/createSafeContext.cjs.js +1 -0
  469. package/dist/utils/functions/createSafeContext.es.js +13 -0
  470. package/dist/utils/functions/ensureReactElement.cjs.js +1 -0
  471. package/dist/utils/functions/ensureReactElement.es.js +13 -0
  472. package/dist/utils/functions/getFormData.cjs.js +1 -0
  473. package/dist/utils/functions/getFormData.es.js +11 -0
  474. package/dist/utils/functions/mergeRefs.cjs.js +1 -0
  475. package/dist/utils/functions/mergeRefs.es.js +10 -0
  476. package/dist/utils/strings/extractInitials.utility.cjs.js +1 -0
  477. package/dist/utils/strings/extractInitials.utility.es.js +4 -0
  478. package/package.json +134 -124
  479. package/src/components/accordion/accordion.stories.tsx +143 -0
  480. package/src/components/accordion/accordion.test.tsx +117 -0
  481. package/src/components/accordion/accordion.tsx +137 -0
  482. package/src/components/accordion/index.ts +1 -0
  483. package/src/components/alert/alert.stories.tsx +162 -0
  484. package/src/components/alert/alert.test.tsx +185 -0
  485. package/src/components/alert/alert.tsx +119 -0
  486. package/src/components/alert/index.ts +7 -0
  487. package/src/components/alert-dialog/alert-dialog.stories.tsx +197 -0
  488. package/src/components/alert-dialog/alert-dialog.test.tsx +239 -0
  489. package/src/components/alert-dialog/alert-dialog.tsx +315 -0
  490. package/src/components/alert-dialog/index.ts +1 -0
  491. package/src/components/auto-complete/auto-complete.stories.tsx +656 -0
  492. package/src/components/auto-complete/auto-complete.test.tsx +699 -0
  493. package/src/components/auto-complete/auto-complete.tsx +432 -0
  494. package/src/components/auto-complete/index.ts +1 -0
  495. package/src/components/avatar/avatar.stories.tsx +225 -0
  496. package/src/components/avatar/avatar.test.tsx +336 -0
  497. package/src/components/avatar/avatar.tsx +165 -0
  498. package/src/components/avatar/index.ts +1 -0
  499. package/src/components/button/button.stories.tsx +338 -0
  500. package/src/components/button/button.test.tsx +242 -0
  501. package/src/components/button/button.tsx +73 -0
  502. package/src/components/button/components/base-button.tsx +58 -0
  503. package/src/components/button/index.ts +2 -0
  504. package/src/components/calendar/calendar.stories.tsx +155 -0
  505. package/src/components/calendar/calendar.test.tsx +174 -0
  506. package/src/components/calendar/calendar.tsx +189 -0
  507. package/src/components/calendar/index.ts +1 -0
  508. package/src/components/card/card.stories.tsx +187 -0
  509. package/src/components/card/card.test.tsx +205 -0
  510. package/src/components/card/card.tsx +177 -0
  511. package/src/components/card/index.ts +1 -0
  512. package/src/components/center/center.stories.tsx +64 -0
  513. package/src/components/center/center.test.tsx +63 -0
  514. package/src/components/center/center.tsx +26 -0
  515. package/src/components/center/index.ts +1 -0
  516. package/src/components/checkbox/checkbox.stories.tsx +327 -0
  517. package/src/components/checkbox/checkbox.test.tsx +392 -0
  518. package/src/components/checkbox/checkbox.tsx +336 -0
  519. package/src/components/checkbox/index.ts +1 -0
  520. package/src/components/checkbox-group/checkbox-group.stories.tsx +192 -0
  521. package/src/components/checkbox-group/checkbox-group.test.tsx +155 -0
  522. package/src/components/checkbox-group/checkbox-group.tsx +99 -0
  523. package/src/components/checkbox-group/index.ts +1 -0
  524. package/src/components/combobox/combobox.stories.tsx +349 -0
  525. package/src/components/combobox/combobox.test.tsx +461 -0
  526. package/src/components/combobox/combobox.tsx +916 -0
  527. package/src/components/combobox/index.ts +1 -0
  528. package/src/components/date-picker/date-input-form.test.tsx +77 -0
  529. package/src/components/date-picker/date-input.stories.tsx +178 -0
  530. package/src/components/date-picker/date-input.tsx +198 -0
  531. package/src/components/date-picker/date-picker.model.ts +99 -0
  532. package/src/components/date-picker/date-picker.stories.tsx +256 -0
  533. package/src/components/date-picker/date-picker.test.tsx +557 -0
  534. package/src/components/date-picker/date-picker.tsx +333 -0
  535. package/src/components/date-picker/date-picker.utils.test.ts +269 -0
  536. package/src/components/date-picker/date-picker.utils.ts +293 -0
  537. package/src/components/date-picker/index.ts +3 -0
  538. package/src/components/date-picker/use-date-input-popover.test.ts +63 -0
  539. package/src/components/date-picker/use-date-input-popover.ts +48 -0
  540. package/src/components/date-picker/use-date-input.ts +125 -0
  541. package/src/components/date-picker/use-hidden-field-value.ts +23 -0
  542. package/src/components/dialog/dialog.stories.tsx +189 -0
  543. package/src/components/dialog/dialog.test.tsx +369 -0
  544. package/src/components/dialog/dialog.tsx +310 -0
  545. package/src/components/dialog/index.ts +1 -0
  546. package/src/components/divider/divider.stories.tsx +145 -0
  547. package/src/components/divider/divider.test.tsx +62 -0
  548. package/src/components/divider/divider.tsx +25 -0
  549. package/src/components/divider/index.ts +1 -0
  550. package/src/components/dropzone/dropzone.stories.tsx +190 -0
  551. package/src/components/dropzone/dropzone.test.tsx +353 -0
  552. package/src/components/dropzone/dropzone.tsx +434 -0
  553. package/src/components/dropzone/file-types.ts +64 -0
  554. package/src/components/dropzone/index.ts +2 -0
  555. package/src/components/empty/empty.stories.tsx +164 -0
  556. package/src/components/empty/empty.test.tsx +220 -0
  557. package/src/components/empty/empty.tsx +158 -0
  558. package/src/components/empty/index.ts +1 -0
  559. package/src/components/field/field.stories.tsx +446 -0
  560. package/src/components/field/field.test.tsx +323 -0
  561. package/src/components/field/field.tsx +266 -0
  562. package/src/components/field/index.ts +1 -0
  563. package/src/components/form/form.stories.tsx +732 -0
  564. package/src/components/form/form.test.tsx +44 -0
  565. package/src/components/form/form.tsx +12 -0
  566. package/src/components/form/index.ts +1 -0
  567. package/src/components/index.ts +44 -0
  568. package/src/components/input/index.ts +1 -0
  569. package/src/components/input/input.stories.tsx +103 -0
  570. package/src/components/input/input.test.tsx +109 -0
  571. package/src/components/input/input.tsx +77 -0
  572. package/src/components/kbd/index.ts +1 -0
  573. package/src/components/kbd/kbd.stories.tsx +41 -0
  574. package/src/components/kbd/kbd.test.tsx +66 -0
  575. package/src/components/kbd/kbd.tsx +33 -0
  576. package/src/components/label/index.ts +1 -0
  577. package/src/components/label/label.stories.tsx +84 -0
  578. package/src/components/label/label.test.tsx +107 -0
  579. package/src/components/label/label.tsx +75 -0
  580. package/src/components/loader/index.ts +1 -0
  581. package/src/components/loader/loader.stories.tsx +62 -0
  582. package/src/components/loader/loader.test.tsx +88 -0
  583. package/src/components/loader/loader.tsx +67 -0
  584. package/src/components/menu/index.ts +2 -0
  585. package/src/components/menu/menu-primitives.tsx +259 -0
  586. package/src/components/menu/menu.stories.tsx +332 -0
  587. package/src/components/menu/menu.test.tsx +167 -0
  588. package/src/components/menu/menu.tsx +188 -0
  589. package/src/components/number-input/index.ts +1 -0
  590. package/src/components/number-input/number-input.stories.tsx +232 -0
  591. package/src/components/number-input/number-input.test.tsx +260 -0
  592. package/src/components/number-input/number-input.tsx +228 -0
  593. package/src/components/otp/index.ts +1 -0
  594. package/src/components/otp/otp.stories.tsx +209 -0
  595. package/src/components/otp/otp.test.tsx +103 -0
  596. package/src/components/otp/otp.tsx +102 -0
  597. package/src/components/pagination/index.ts +2 -0
  598. package/src/components/pagination/pagination.model.ts +2 -0
  599. package/src/components/pagination/pagination.stories.tsx +174 -0
  600. package/src/components/pagination/pagination.test.tsx +201 -0
  601. package/src/components/pagination/pagination.tsx +602 -0
  602. package/src/components/password/index.ts +1 -0
  603. package/src/components/password/password.stories.tsx +119 -0
  604. package/src/components/password/password.test.tsx +129 -0
  605. package/src/components/password/password.tsx +93 -0
  606. package/src/components/popover/index.ts +1 -0
  607. package/src/components/popover/popover.stories.tsx +234 -0
  608. package/src/components/popover/popover.test.tsx +175 -0
  609. package/src/components/popover/popover.tsx +195 -0
  610. package/src/components/progress/index.ts +1 -0
  611. package/src/components/progress/progress.stories.tsx +125 -0
  612. package/src/components/progress/progress.test.tsx +125 -0
  613. package/src/components/progress/progress.tsx +126 -0
  614. package/src/components/radio-group/index.ts +1 -0
  615. package/src/components/radio-group/radio-group.stories.tsx +251 -0
  616. package/src/components/radio-group/radio-group.test.tsx +175 -0
  617. package/src/components/radio-group/radio-group.tsx +214 -0
  618. package/src/components/scroll-area/index.ts +1 -0
  619. package/src/components/scroll-area/scroll-area.stories.tsx +167 -0
  620. package/src/components/scroll-area/scroll-area.test.tsx +140 -0
  621. package/src/components/scroll-area/scroll-area.tsx +64 -0
  622. package/src/components/select/index.ts +1 -0
  623. package/src/components/select/select.stories.tsx +352 -0
  624. package/src/components/select/select.test.tsx +357 -0
  625. package/src/components/select/select.tsx +443 -0
  626. package/src/components/skeleton/index.ts +1 -0
  627. package/src/components/skeleton/skeleton.stories.tsx +37 -0
  628. package/src/components/skeleton/skeleton.test.tsx +51 -0
  629. package/src/components/skeleton/skeleton.tsx +17 -0
  630. package/src/components/stack/index.ts +1 -0
  631. package/src/components/stack/stack.stories.tsx +284 -0
  632. package/src/components/stack/stack.test.tsx +134 -0
  633. package/src/components/stack/stack.tsx +54 -0
  634. package/src/components/stepper/index.ts +1 -0
  635. package/src/components/stepper/stepper.stories.tsx +809 -0
  636. package/src/components/stepper/stepper.test.tsx +448 -0
  637. package/src/components/stepper/stepper.tsx +554 -0
  638. package/src/components/switch/index.ts +1 -0
  639. package/src/components/switch/switch.stories.tsx +136 -0
  640. package/src/components/switch/switch.test.tsx +96 -0
  641. package/src/components/switch/switch.tsx +101 -0
  642. package/src/components/table/index.ts +1 -0
  643. package/src/components/table/table.stories.tsx +282 -0
  644. package/src/components/table/table.test.tsx +264 -0
  645. package/src/components/table/table.tsx +217 -0
  646. package/src/components/tabs/index.ts +1 -0
  647. package/src/components/tabs/tabs.stories.tsx +399 -0
  648. package/src/components/tabs/tabs.test.tsx +202 -0
  649. package/src/components/tabs/tabs.tsx +98 -0
  650. package/src/components/tag/index.ts +1 -0
  651. package/src/components/tag/tag.stories.tsx +198 -0
  652. package/src/components/tag/tag.test.tsx +55 -0
  653. package/src/components/tag/tag.tsx +57 -0
  654. package/src/components/textarea/index.ts +1 -0
  655. package/src/components/textarea/textarea.stories.tsx +59 -0
  656. package/src/components/textarea/textarea.test.tsx +60 -0
  657. package/src/components/textarea/textarea.tsx +43 -0
  658. package/src/components/timeline/index.ts +1 -0
  659. package/src/components/timeline/timeline.stories.tsx +364 -0
  660. package/src/components/timeline/timeline.test.tsx +207 -0
  661. package/src/components/timeline/timeline.tsx +376 -0
  662. package/src/components/toast/index.ts +1 -0
  663. package/src/components/toast/toast.stories.tsx +393 -0
  664. package/src/components/toast/toast.test.tsx +331 -0
  665. package/src/components/toast/toast.tsx +413 -0
  666. package/src/components/tooltip/index.ts +1 -0
  667. package/src/components/tooltip/tooltip.stories.tsx +226 -0
  668. package/src/components/tooltip/tooltip.test.tsx +155 -0
  669. package/src/components/tooltip/tooltip.tsx +175 -0
  670. package/src/components/tree/index.ts +1 -0
  671. package/src/components/tree/tree.stories.tsx +424 -0
  672. package/src/components/tree/tree.test.tsx +306 -0
  673. package/src/components/tree/tree.tsx +218 -0
  674. package/src/hooks/index.ts +27 -0
  675. package/src/hooks/internal/index.ts +4 -0
  676. package/src/hooks/internal/is-apple-device.test.ts +41 -0
  677. package/src/hooks/internal/is-apple-device.ts +33 -0
  678. package/src/hooks/internal/is-browser.ts +1 -0
  679. package/src/hooks/internal/use-isomorphic-layout-effect.ts +6 -0
  680. package/src/hooks/internal/use-latest-ref.ts +21 -0
  681. package/src/hooks/use-array/index.ts +1 -0
  682. package/src/hooks/use-array/use-array.stories.tsx +471 -0
  683. package/src/hooks/use-array/use-array.test.tsx +495 -0
  684. package/src/hooks/use-array/use-array.ts +113 -0
  685. package/src/hooks/use-async/index.ts +1 -0
  686. package/src/hooks/use-async/use-async.stories.tsx +272 -0
  687. package/src/hooks/use-async/use-async.test.ts +397 -0
  688. package/src/hooks/use-async/use-async.ts +135 -0
  689. package/src/hooks/use-boolean/index.ts +1 -0
  690. package/src/hooks/use-boolean/use-boolean.stories.tsx +377 -0
  691. package/src/hooks/use-boolean/use-boolean.test.tsx +177 -0
  692. package/src/hooks/use-boolean/use-boolean.ts +50 -0
  693. package/src/hooks/use-click-outside/index.ts +1 -0
  694. package/src/hooks/use-click-outside/use-click-outside.stories.tsx +210 -0
  695. package/src/hooks/use-click-outside/use-click-outside.test.tsx +118 -0
  696. package/src/hooks/use-click-outside/use-click-outside.ts +71 -0
  697. package/src/hooks/use-clipboard/index.ts +1 -0
  698. package/src/hooks/use-clipboard/use-clipboard.stories.tsx +168 -0
  699. package/src/hooks/use-clipboard/use-clipboard.test.tsx +114 -0
  700. package/src/hooks/use-clipboard/use-clipboard.tsx +70 -0
  701. package/src/hooks/use-debounce-callback/index.ts +1 -0
  702. package/src/hooks/use-debounce-callback/use-debounced-callback.stories.tsx +184 -0
  703. package/src/hooks/use-debounce-callback/use-debounced-callback.test.ts +296 -0
  704. package/src/hooks/use-debounce-callback/use-debounced-callback.ts +82 -0
  705. package/src/hooks/use-debounce-value/index.ts +1 -0
  706. package/src/hooks/use-debounce-value/use-debounced-value.stories.tsx +275 -0
  707. package/src/hooks/use-debounce-value/use-debounced-value.test.ts +196 -0
  708. package/src/hooks/use-debounce-value/use-debounced-value.ts +25 -0
  709. package/src/hooks/use-disclosure/index.ts +1 -0
  710. package/src/hooks/use-disclosure/use-disclosure.stories.tsx +330 -0
  711. package/src/hooks/use-disclosure/use-disclosure.test.ts +220 -0
  712. package/src/hooks/use-disclosure/use-disclosure.ts +56 -0
  713. package/src/hooks/use-document-title/index.ts +1 -0
  714. package/src/hooks/use-document-title/use-document-title.stories.tsx +126 -0
  715. package/src/hooks/use-document-title/use-document-title.test.tsx +101 -0
  716. package/src/hooks/use-document-title/use-document-title.ts +46 -0
  717. package/src/hooks/use-event-listener/index.ts +1 -0
  718. package/src/hooks/use-event-listener/use-event-listener.stories.tsx +124 -0
  719. package/src/hooks/use-event-listener/use-event-listener.test.tsx +96 -0
  720. package/src/hooks/use-event-listener/use-event-listener.ts +84 -0
  721. package/src/hooks/use-focus-trap/index.ts +1 -0
  722. package/src/hooks/use-focus-trap/scope-tab.ts +38 -0
  723. package/src/hooks/use-focus-trap/tabbable.ts +70 -0
  724. package/src/hooks/use-focus-trap/use-focus-trap.stories.tsx +37 -0
  725. package/src/hooks/use-focus-trap/use-focus-trap.test.ts +355 -0
  726. package/src/hooks/use-focus-trap/use-focus-trap.ts +78 -0
  727. package/src/hooks/use-hotkey/index.ts +9 -0
  728. package/src/hooks/use-hotkey/use-hotkey.stories.tsx +321 -0
  729. package/src/hooks/use-hotkey/use-hotkey.test.tsx +388 -0
  730. package/src/hooks/use-hotkey/use-hotkey.ts +157 -0
  731. package/src/hooks/use-hotkey/utils/index.ts +8 -0
  732. package/src/hooks/use-hotkey/utils/is-input-field.test.ts +78 -0
  733. package/src/hooks/use-hotkey/utils/is-input-field.ts +35 -0
  734. package/src/hooks/use-hotkey/utils/match-and-run.test.ts +203 -0
  735. package/src/hooks/use-hotkey/utils/match-and-run.ts +62 -0
  736. package/src/hooks/use-hotkey/utils/match-key-modifiers.test.ts +65 -0
  737. package/src/hooks/use-hotkey/utils/match-key-modifiers.ts +52 -0
  738. package/src/hooks/use-hover/index.ts +1 -0
  739. package/src/hooks/use-hover/use-hover.stories.tsx +268 -0
  740. package/src/hooks/use-hover/use-hover.test.tsx +333 -0
  741. package/src/hooks/use-hover/use-hover.tsx +110 -0
  742. package/src/hooks/use-is-visible/index.ts +1 -0
  743. package/src/hooks/use-is-visible/use-is-visible.stories.tsx +207 -0
  744. package/src/hooks/use-is-visible/use-is-visible.test.tsx +363 -0
  745. package/src/hooks/use-is-visible/use-is-visible.ts +114 -0
  746. package/src/hooks/use-local-storage/index.ts +1 -0
  747. package/src/hooks/use-local-storage/use-local-storage.stories.tsx +186 -0
  748. package/src/hooks/use-local-storage/use-local-storage.test.ts +196 -0
  749. package/src/hooks/use-local-storage/use-local-storage.ts +125 -0
  750. package/src/hooks/use-media-query/index.ts +1 -0
  751. package/src/hooks/use-media-query/use-media-query.stories.tsx +99 -0
  752. package/src/hooks/use-media-query/use-media-query.test.ts +132 -0
  753. package/src/hooks/use-media-query/use-media-query.ts +45 -0
  754. package/src/hooks/use-memoized-fn/index.ts +1 -0
  755. package/src/hooks/use-memoized-fn/use-memoized-fn.test.ts +52 -0
  756. package/src/hooks/use-memoized-fn/use-memoized-fn.ts +29 -0
  757. package/src/hooks/use-mutation/index.ts +1 -0
  758. package/src/hooks/use-mutation/use-mutation.stories.tsx +277 -0
  759. package/src/hooks/use-mutation/use-mutation.test.ts +359 -0
  760. package/src/hooks/use-mutation/use-mutation.ts +97 -0
  761. package/src/hooks/use-object/index.ts +1 -0
  762. package/src/hooks/use-object/use-object.stories.tsx +350 -0
  763. package/src/hooks/use-object/use-object.test.tsx +281 -0
  764. package/src/hooks/use-object/use-object.ts +59 -0
  765. package/src/hooks/use-on-mount/index.ts +1 -0
  766. package/src/hooks/use-on-mount/use-on-mount.stories.tsx +85 -0
  767. package/src/hooks/use-on-mount/use-on-mount.test.tsx +51 -0
  768. package/src/hooks/use-on-mount/use-on-mount.tsx +13 -0
  769. package/src/hooks/use-pagination/index.ts +1 -0
  770. package/src/hooks/use-pagination/use-pagination.stories.tsx +72 -0
  771. package/src/hooks/use-pagination/use-pagination.test.tsx +98 -0
  772. package/src/hooks/use-pagination/use-pagination.tsx +84 -0
  773. package/src/hooks/use-portal/index.ts +1 -0
  774. package/src/hooks/use-portal/use-portal.stories.tsx +19 -0
  775. package/src/hooks/use-portal/use-portal.test.tsx +77 -0
  776. package/src/hooks/use-portal/use-portal.ts +59 -0
  777. package/src/hooks/use-prevent-page-close/index.ts +1 -0
  778. package/src/hooks/use-prevent-page-close/use-prevent-page-close.stories.tsx +39 -0
  779. package/src/hooks/use-prevent-page-close/use-prevent-page-close.test.ts +89 -0
  780. package/src/hooks/use-prevent-page-close/use-prevent-page-close.ts +27 -0
  781. package/src/hooks/use-range-pagination/index.ts +1 -0
  782. package/src/hooks/use-range-pagination/use-range-pagination.test.tsx +63 -0
  783. package/src/hooks/use-range-pagination/use-range-pagination.tsx +73 -0
  784. package/src/hooks/use-selection/index.ts +1 -0
  785. package/src/hooks/use-selection/use-selection.stories.tsx +140 -0
  786. package/src/hooks/use-selection/use-selection.test.tsx +79 -0
  787. package/src/hooks/use-selection/use-selection.ts +119 -0
  788. package/src/hooks/use-step/index.ts +1 -0
  789. package/src/hooks/use-step/use-step.stories.tsx +211 -0
  790. package/src/hooks/use-step/use-step.test.ts +198 -0
  791. package/src/hooks/use-step/use-step.ts +63 -0
  792. package/src/index.ts +6 -0
  793. package/src/lib/cn.ts +8 -0
  794. package/src/lib/index.ts +1 -0
  795. package/src/models/Generic.model.ts +67 -0
  796. package/src/models/index.ts +1 -0
  797. package/src/providers/index.ts +2 -0
  798. package/src/providers/library-provider.tsx +44 -0
  799. package/src/providers/theme/ThemeProvider.tsx +25 -0
  800. package/src/providers/theme/index.ts +3 -0
  801. package/src/providers/theme/types.ts +11 -0
  802. package/src/providers/theme/useThemeProps.ts +25 -0
  803. package/src/stores/theme.store.ts +31 -0
  804. package/src/styles/components.css +4 -0
  805. package/src/styles/index.css +2 -0
  806. package/src/styles/library.css +2 -0
  807. package/src/styles/theme.css +232 -0
  808. package/src/utils/dates/parseDateRange.utility.ts +39 -0
  809. package/src/utils/form.test.tsx +143 -0
  810. package/src/utils/form.tsx +131 -0
  811. package/src/utils/functions/createSafeContext.test.tsx +37 -0
  812. package/src/utils/functions/createSafeContext.ts +17 -0
  813. package/src/utils/functions/ensureReactElement.test.tsx +49 -0
  814. package/src/utils/functions/ensureReactElement.tsx +30 -0
  815. package/src/utils/functions/getFormData.test.ts +57 -0
  816. package/src/utils/functions/getFormData.ts +19 -0
  817. package/src/utils/functions/index.ts +4 -0
  818. package/src/utils/functions/mergeRefs.test.ts +56 -0
  819. package/src/utils/functions/mergeRefs.ts +18 -0
  820. package/src/utils/index.ts +3 -0
  821. package/src/utils/strings/extractInitials.utility.ts +10 -0
  822. package/src/utils/strings/index.ts +1 -0
  823. package/src/utils/tests/click.ts +3 -0
  824. package/src/utils/tests/index.ts +2 -0
  825. package/src/utils/tests/keyboard.ts +21 -0
  826. package/src/utils/tests/type.ts +6 -0
@@ -0,0 +1,809 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import {
3
+ CheckIcon,
4
+ CreditCardIcon,
5
+ LoaderCircleIcon,
6
+ PackageCheckIcon,
7
+ TruckIcon,
8
+ UserIcon,
9
+ } from "lucide-react";
10
+ import { type ComponentType, useState } from "react";
11
+
12
+ import { useStep } from "../../hooks";
13
+ import { Button } from "../button/button";
14
+ import { Field } from "../field/field";
15
+ import { Input } from "../input/input";
16
+ import { toast } from "../toast/toast";
17
+ import {
18
+ Stepper,
19
+ StepperContent,
20
+ StepperDescription,
21
+ StepperIndicator,
22
+ StepperItem,
23
+ StepperNav,
24
+ StepperPanel,
25
+ StepperRoot,
26
+ StepperSeparator,
27
+ StepperTitle,
28
+ StepperTrigger,
29
+ } from "./stepper";
30
+
31
+ /**
32
+ * Accessible stepper that highlights progress across an ordered list of steps.
33
+ * Use the composite `Stepper` for items-driven setups, or compose the primitives
34
+ * (`StepperRoot`, `StepperNav`, `StepperItem`, `StepperTrigger`, `StepperIndicator`,
35
+ * `StepperSeparator`, `StepperTitle`, `StepperDescription`, `StepperPanel`,
36
+ * `StepperContent`) for full control over markup and layout.
37
+ *
38
+ * Key behaviors:
39
+ * - Steps are **1-indexed**. `defaultValue` / `value` is the active step number,
40
+ * matching the `step` prop of `StepperItem`. Items with `step < activeStep`
41
+ * render as `completed`; the equal one as `active`; the rest as `inactive`.
42
+ * - Pass `loading` on an item to render the active step in a `loading` state
43
+ * (sets `data-loading` on item, trigger, and indicator).
44
+ * - The composite renders `StepperPanel` automatically when any item carries
45
+ * `content`. For custom panel layouts, drop the composite and use the
46
+ * primitives directly (see the `Primitive` story).
47
+ * - `indicators` on the root acts as a global override map: any matching
48
+ * `state` (active / completed / inactive / loading) replaces the indicator's
49
+ * children. Useful to swap numbers for icons across the whole stepper.
50
+ * - `triggerMode` on the root controls which triggers respond to click and
51
+ * keyboard activation. `"both"` (default) is free navigation; `"backward-only"`
52
+ * blocks jumping ahead (typical wizard); `"forward-only"` locks out reviewing
53
+ * past steps; `"none"` makes the stepper display-only. Non-navigable triggers
54
+ * get `aria-disabled="true"`, lose pointer cursor, and are skipped by Arrow
55
+ * keys.
56
+ * - Keyboard nav (Arrow / Home / End) is wired on `StepperTrigger` and skips
57
+ * both `disabled` and `aria-disabled` triggers.
58
+ *
59
+ * Reference: [WAI-ARIA Tabs Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tabs/)
60
+ */
61
+ const meta: Meta<typeof Stepper> = {
62
+ title: "Components/Stepper",
63
+ component: Stepper,
64
+ parameters: {
65
+ layout: "centered",
66
+ },
67
+ subcomponents: {
68
+ StepperRoot: StepperRoot as ComponentType<unknown>,
69
+ StepperNav: StepperNav as ComponentType<unknown>,
70
+ StepperItem: StepperItem as ComponentType<unknown>,
71
+ StepperTrigger: StepperTrigger as ComponentType<unknown>,
72
+ StepperIndicator: StepperIndicator as ComponentType<unknown>,
73
+ StepperSeparator: StepperSeparator as ComponentType<unknown>,
74
+ StepperTitle: StepperTitle as ComponentType<unknown>,
75
+ StepperDescription: StepperDescription as ComponentType<unknown>,
76
+ StepperPanel: StepperPanel as ComponentType<unknown>,
77
+ StepperContent: StepperContent as ComponentType<unknown>,
78
+ },
79
+ args: {
80
+ defaultValue: 2,
81
+ items: [
82
+ { title: "Account", description: "Your details" },
83
+ { title: "Shipping", description: "Where to send it" },
84
+ { title: "Payment", description: "How to pay" },
85
+ { title: "Review", description: "Confirm order" },
86
+ ],
87
+ },
88
+ argTypes: {
89
+ items: { control: false },
90
+ onValueChange: { control: false },
91
+ classNames: { control: false },
92
+ },
93
+ };
94
+
95
+ export default meta;
96
+ type Story = StoryObj<typeof Stepper>;
97
+
98
+ export const Default: Story = {
99
+ render: (args) => (
100
+ <div className="w-[840px]">
101
+ <Stepper {...args} />
102
+ </div>
103
+ ),
104
+ };
105
+
106
+ /**
107
+ * `className` estila el root del Stepper. `classNames` expone los slots
108
+ * `nav`, `item`, `trigger`, `indicator`, `title`, `description`, `separator`,
109
+ * `panel` y `content` para personalizar cada parte interna.
110
+ */
111
+ export const WithClassNames: Story = {
112
+ render: (args) => (
113
+ <div className="w-[840px]">
114
+ <Stepper
115
+ {...args}
116
+ classNames={{
117
+ indicator: "size-8",
118
+ title: "text-primary",
119
+ separator: "h-1",
120
+ }}
121
+ />
122
+ </div>
123
+ ),
124
+ };
125
+
126
+ /**
127
+ * Vertical orientation places the nav as a column with the panel rendered
128
+ * side-by-side. Pass `content` on each item so the active step's panel shows
129
+ * up next to the nav.
130
+ */
131
+ export const Vertical: Story = {
132
+ args: {
133
+ orientation: "vertical",
134
+ defaultValue: 2,
135
+ indicators: { completed: <CheckIcon className="size-3.5" /> },
136
+ items: [
137
+ {
138
+ title: "Account",
139
+ description: "Your details",
140
+ content: (
141
+ <div className="rounded-lg border p-4">
142
+ <p className="font-medium text-sm">Account information</p>
143
+ <p className="mt-1 text-muted-foreground text-sm">
144
+ Name, email, and password to access your workspace.
145
+ </p>
146
+ </div>
147
+ ),
148
+ },
149
+ {
150
+ title: "Shipping",
151
+ description: "Where to send it",
152
+ content: (
153
+ <div className="rounded-lg border p-4">
154
+ <p className="font-medium text-sm">Shipping address</p>
155
+ <p className="mt-1 text-muted-foreground text-sm">
156
+ Pick an existing address or add a new one for this order.
157
+ </p>
158
+ </div>
159
+ ),
160
+ },
161
+ {
162
+ title: "Payment",
163
+ description: "How to pay",
164
+ content: (
165
+ <div className="rounded-lg border p-4">
166
+ <p className="font-medium text-sm">Payment method</p>
167
+ <p className="mt-1 text-muted-foreground text-sm">
168
+ Use a saved card or add a new one before checkout.
169
+ </p>
170
+ </div>
171
+ ),
172
+ },
173
+ {
174
+ title: "Review",
175
+ description: "Confirm order",
176
+ content: (
177
+ <div className="rounded-lg border p-4">
178
+ <p className="font-medium text-sm">Review your order</p>
179
+ <p className="mt-1 text-muted-foreground text-sm">
180
+ Double-check the details and place the order.
181
+ </p>
182
+ </div>
183
+ ),
184
+ },
185
+ ],
186
+ },
187
+ render: (args) => (
188
+ <div className="w-[720px]">
189
+ <Stepper {...args} />
190
+ </div>
191
+ ),
192
+ };
193
+
194
+ /**
195
+ * Per-item `indicator` replaces the default step number. Pair with icons to
196
+ * communicate intent at a glance.
197
+ */
198
+ export const WithIcons: Story = {
199
+ args: {
200
+ defaultValue: 3,
201
+ items: [
202
+ { title: "Account", indicator: <UserIcon className="size-3.5" /> },
203
+ { title: "Shipping", indicator: <TruckIcon className="size-3.5" /> },
204
+ { title: "Payment", indicator: <CreditCardIcon className="size-3.5" /> },
205
+ { title: "Done", indicator: <PackageCheckIcon className="size-3.5" /> },
206
+ ],
207
+ },
208
+ render: (args) => (
209
+ <div className="w-[840px]">
210
+ <Stepper {...args} />
211
+ </div>
212
+ ),
213
+ };
214
+
215
+ /**
216
+ * `indicators` on the root replaces the children of every indicator whose
217
+ * `state` matches a key in the map. Use it to apply a consistent icon set
218
+ * (✓ for completed, spinner for loading) without touching each item.
219
+ */
220
+ export const GlobalIndicators: Story = {
221
+ args: {
222
+ defaultValue: 3,
223
+ indicators: {
224
+ completed: <CheckIcon className="size-3.5" />,
225
+ loading: <LoaderCircleIcon className="size-3.5 animate-spin" />,
226
+ },
227
+ items: [
228
+ { title: "Account" },
229
+ { title: "Shipping" },
230
+ { title: "Payment" },
231
+ { title: "Review" },
232
+ ],
233
+ },
234
+ render: (args) => (
235
+ <div className="w-[840px]">
236
+ <Stepper {...args} />
237
+ </div>
238
+ ),
239
+ };
240
+
241
+ /**
242
+ * `loading: true` on an item only takes effect when that item is the active
243
+ * step — it switches the item from `active` to `loading` and sets
244
+ * `data-loading` on the trigger and indicator. Combine with the `loading`
245
+ * entry in `indicators` to render a spinner.
246
+ */
247
+ export const Loading: Story = {
248
+ args: {
249
+ defaultValue: 2,
250
+ indicators: {
251
+ loading: <LoaderCircleIcon className="size-3.5 animate-spin" />,
252
+ completed: <CheckIcon className="size-3.5" />,
253
+ },
254
+ items: [
255
+ { title: "Account", description: "Saved" },
256
+ { title: "Shipping", description: "Validating address…", loading: true },
257
+ { title: "Payment", description: "Pending" },
258
+ { title: "Review", description: "Pending" },
259
+ ],
260
+ },
261
+ render: (args) => (
262
+ <div className="w-[840px]">
263
+ <Stepper {...args} />
264
+ </div>
265
+ ),
266
+ };
267
+
268
+ /**
269
+ * `disabled: true` on an item blocks click and keyboard activation. Arrow-key
270
+ * navigation skips disabled triggers and lands on the next enabled one.
271
+ */
272
+ export const Disabled: Story = {
273
+ args: {
274
+ defaultValue: 1,
275
+ items: [
276
+ { title: "Account", description: "Available" },
277
+ { title: "Shipping", description: "Locked", disabled: true },
278
+ { title: "Payment", description: "Locked", disabled: true },
279
+ { title: "Review", description: "Locked", disabled: true },
280
+ ],
281
+ },
282
+ render: (args) => (
283
+ <div className="w-[840px]">
284
+ <Stepper {...args} />
285
+ </div>
286
+ ),
287
+ };
288
+
289
+ /**
290
+ * `triggerMode` is a shortcut for restricting which triggers respond to click
291
+ * and keyboard activation, without having to set `disabled` on individual
292
+ * items.
293
+ *
294
+ * - `"both"` (default) — every trigger is clickable.
295
+ * - `"backward-only"` — only past + current steps. The typical wizard guard:
296
+ * the user can revisit but cannot jump ahead.
297
+ * - `"forward-only"` — only current + upcoming steps. Past steps lock out,
298
+ * useful for irreversible flows.
299
+ * - `"none"` — nothing is clickable. The stepper becomes a display-only
300
+ * progress indicator (e.g. an order tracker).
301
+ *
302
+ * Composes with `disabled` per item: both layers apply independently.
303
+ */
304
+ export const TriggerMode: Story = {
305
+ render: () => {
306
+ const variants: {
307
+ label: string;
308
+ value: "both" | "backward-only" | "forward-only" | "none";
309
+ }[] = [
310
+ { label: "both (default)", value: "both" },
311
+ { label: "backward-only", value: "backward-only" },
312
+ { label: "forward-only", value: "forward-only" },
313
+ { label: "none (read-only)", value: "none" },
314
+ ];
315
+ const items = [
316
+ { title: "Account" },
317
+ { title: "Shipping" },
318
+ { title: "Payment" },
319
+ { title: "Review" },
320
+ ];
321
+
322
+ return (
323
+ <div className="w-[840px] space-y-8">
324
+ {variants.map(({ label, value }) => (
325
+ <div key={value} className="space-y-2">
326
+ <p className="font-medium text-muted-foreground text-xs uppercase tracking-wide">
327
+ {label}
328
+ </p>
329
+ <Stepper
330
+ defaultValue={2}
331
+ triggerMode={value}
332
+ indicators={{ completed: <CheckIcon className="size-3.5" /> }}
333
+ items={items}
334
+ />
335
+ </div>
336
+ ))}
337
+ </div>
338
+ );
339
+ },
340
+ };
341
+
342
+ /**
343
+ * Give every item a `content` and the composite wires the `StepperPanel`
344
+ * for you: one `StepperContent` per step, mount/unmount + ARIA on each
345
+ * change, no external state. Use this when the contents are static and
346
+ * you don't need controlled navigation.
347
+ *
348
+ * Rule of thumb: **all items have `content`, or none do**. Mixing leaves
349
+ * an empty panel on the steps that lack content.
350
+ *
351
+ * For custom panel layouts (animations, conditional rendering, async
352
+ * loading), skip `content` and use the primitives directly — see the
353
+ * `Primitive`, `Wizard`, and `Controlled` stories.
354
+ */
355
+ export const WithPanels: Story = {
356
+ args: {
357
+ defaultValue: 1,
358
+ indicators: { completed: <CheckIcon className="size-3.5" /> },
359
+ items: [
360
+ {
361
+ title: "Account",
362
+ description: "Your details",
363
+ content: (
364
+ <div className="mt-6 rounded-lg border p-4">
365
+ <p className="font-medium text-sm">Account details</p>
366
+ <p className="mt-1 text-muted-foreground text-sm">
367
+ Add your name and email to continue.
368
+ </p>
369
+ </div>
370
+ ),
371
+ },
372
+ {
373
+ title: "Shipping",
374
+ description: "Where to send it",
375
+ content: (
376
+ <div className="mt-6 rounded-lg border p-4">
377
+ <p className="font-medium text-sm">Shipping address</p>
378
+ <p className="mt-1 text-muted-foreground text-sm">
379
+ Pick a saved address or add a new one.
380
+ </p>
381
+ </div>
382
+ ),
383
+ },
384
+ {
385
+ title: "Payment",
386
+ description: "How to pay",
387
+ content: (
388
+ <div className="mt-6 rounded-lg border p-4">
389
+ <p className="font-medium text-sm">Payment method</p>
390
+ <p className="mt-1 text-muted-foreground text-sm">
391
+ Add a credit card or use a saved one.
392
+ </p>
393
+ </div>
394
+ ),
395
+ },
396
+ ],
397
+ },
398
+ render: (args) => (
399
+ <div className="w-[840px]">
400
+ <Stepper {...args} />
401
+ </div>
402
+ ),
403
+ };
404
+
405
+ const wizardSteps = [
406
+ { value: "account", title: "Account", description: "Your details" },
407
+ { value: "shipping", title: "Shipping", description: "Where to send it" },
408
+ { value: "payment", title: "Payment", description: "How to pay" },
409
+ { value: "review", title: "Review", description: "Confirm order" },
410
+ ];
411
+
412
+ /**
413
+ * Linear wizard driven by `useStep`. Note the index translation: `useStep` is
414
+ * **0-indexed**, the stepper is **1-indexed**. Feed it `index + 1` as `value`
415
+ * and bridge `onValueChange` back with `goTo(value - 1)`.
416
+ *
417
+ * ```tsx
418
+ * const [index, { goTo, next, back }] = useStep(steps.length);
419
+ * const currentStep = steps[index];
420
+ * <Stepper
421
+ * value={index + 1}
422
+ * onValueChange={(value) => goTo(value - 1)}
423
+ * items={steps}
424
+ * />
425
+ * ```
426
+ */
427
+ export const Wizard: Story = {
428
+ render: () => {
429
+ const [index, { isFirstStep, isLastStep, next, back, goTo }] = useStep(
430
+ wizardSteps.length,
431
+ );
432
+ const currentStep = wizardSteps[index];
433
+
434
+ return (
435
+ <div className="w-[840px] space-y-6">
436
+ <Stepper
437
+ value={index + 1}
438
+ onValueChange={(value) => goTo(value - 1)}
439
+ indicators={{ completed: <CheckIcon className="size-3.5" /> }}
440
+ items={wizardSteps.map((s) => ({
441
+ title: s.title,
442
+ description: s.description,
443
+ }))}
444
+ />
445
+ <div className="rounded-lg border p-6">
446
+ <p className="font-medium text-sm">{currentStep.title}</p>
447
+ <p className="mt-1 text-muted-foreground text-sm">
448
+ {currentStep.description}
449
+ </p>
450
+ </div>
451
+ <div className="flex justify-between">
452
+ <Button variant="outline" disabled={isFirstStep} onClick={back}>
453
+ Back
454
+ </Button>
455
+ <Button disabled={isLastStep} onClick={next}>
456
+ {isLastStep ? "Finish" : "Next"}
457
+ </Button>
458
+ </div>
459
+ </div>
460
+ );
461
+ },
462
+ };
463
+
464
+ /**
465
+ * Controlled mode — `value` + `onValueChange` drive the active step. Steps are
466
+ * 1-indexed.
467
+ *
468
+ * When the user reaches the last step the `Go to` buttons hide and a `Finish`
469
+ * action takes over. Clicking it sets `value` to `items.length + 1`, which
470
+ * pushes every item past the active threshold and flips the last one to the
471
+ * `completed` state.
472
+ */
473
+ export const Controlled: Story = {
474
+ render: () => {
475
+ const items = [
476
+ { title: "Account" },
477
+ { title: "Shipping" },
478
+ { title: "Payment" },
479
+ { title: "Review" },
480
+ ];
481
+ const [value, setValue] = useState(1);
482
+ const isLastStep = value === items.length;
483
+ const isFinished = value > items.length;
484
+
485
+ return (
486
+ <div className="w-[840px] space-y-4">
487
+ <Stepper
488
+ value={value}
489
+ onValueChange={setValue}
490
+ indicators={{ completed: <CheckIcon className="size-3.5" /> }}
491
+ items={items}
492
+ />
493
+ {isFinished ? (
494
+ <div className="flex items-center justify-between rounded-md border bg-accent/40 px-4 py-2 text-sm">
495
+ <span className="inline-flex items-center gap-2 font-medium">
496
+ <CheckIcon className="size-4" />
497
+ All steps completed
498
+ </span>
499
+ <button
500
+ type="button"
501
+ onClick={() => setValue(1)}
502
+ className="cursor-pointer rounded-md border px-3 py-1 text-sm hover:bg-accent"
503
+ >
504
+ Reset
505
+ </button>
506
+ </div>
507
+ ) : isLastStep ? (
508
+ <div className="flex justify-end">
509
+ <Button onClick={() => setValue(items.length + 1)}>Finish</Button>
510
+ </div>
511
+ ) : (
512
+ <div className="flex gap-2">
513
+ {items.map((_, i) => (
514
+ <button
515
+ key={i}
516
+ type="button"
517
+ onClick={() => setValue(i + 1)}
518
+ className="cursor-pointer rounded-md border px-3 py-1 text-sm hover:bg-accent"
519
+ >
520
+ Go to {i + 1}
521
+ </button>
522
+ ))}
523
+ </div>
524
+ )}
525
+ </div>
526
+ );
527
+ },
528
+ };
529
+
530
+ type CheckoutForm = {
531
+ email: string;
532
+ name: string;
533
+ address: string;
534
+ city: string;
535
+ card: string;
536
+ };
537
+
538
+ const emptyForm: CheckoutForm = {
539
+ email: "",
540
+ name: "",
541
+ address: "",
542
+ city: "",
543
+ card: "",
544
+ };
545
+
546
+ const isEmail = (value: string) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
547
+
548
+ /**
549
+ * Multi-step form with **persistent state** across steps, **per-step validation
550
+ * gating**, and a simulated async submit that ends in `toast.success`.
551
+ *
552
+ * The recipe:
553
+ * - One `formData` state holds every field — inputs read and write to the
554
+ * same object regardless of which step is active, so navigating back keeps
555
+ * the previous values.
556
+ * - `maxReached` tracks how far the user has progressed. Items with
557
+ * `step > maxReached` get `disabled: true`, which blocks both click and
558
+ * keyboard nav to future steps. Visited steps stay clickable so the user
559
+ * can review.
560
+ * - `canAdvance` derives from the current step's required fields. The Next
561
+ * button is disabled until those fields are valid; the user cannot bypass
562
+ * it via the stepper triggers because of the rule above.
563
+ * - On Finish, a fake 1.2s promise simulates the backend call. The button
564
+ * shows `loading`, and on resolve a `toast.success` fires.
565
+ */
566
+ export const WithValidation: Story = {
567
+ render: () => {
568
+ const [activeStep, setActiveStep] = useState(1);
569
+ const [maxReached, setMaxReached] = useState(1);
570
+ const [formData, setFormData] = useState<CheckoutForm>(emptyForm);
571
+ const [isFinishing, setIsFinishing] = useState(false);
572
+
573
+ const update = (field: keyof CheckoutForm) => (value: string) =>
574
+ setFormData((prev) => ({ ...prev, [field]: value }));
575
+
576
+ const validators = {
577
+ 1: isEmail(formData.email) && formData.name.trim().length > 0,
578
+ 2: formData.address.trim().length > 0 && formData.city.trim().length > 0,
579
+ 3: formData.card.replace(/\s/g, "").length >= 12,
580
+ } as const;
581
+ const canAdvance = validators[activeStep as 1 | 2 | 3];
582
+
583
+ const handleNext = () => {
584
+ if (!canAdvance) return;
585
+ const next = activeStep + 1;
586
+ setActiveStep(next);
587
+ setMaxReached((m) => Math.max(m, next));
588
+ };
589
+
590
+ const handleBack = () => setActiveStep((s) => Math.max(1, s - 1));
591
+
592
+ const handleReset = () => {
593
+ setFormData(emptyForm);
594
+ setActiveStep(1);
595
+ setMaxReached(1);
596
+ };
597
+
598
+ const handleFinish = async () => {
599
+ if (!canAdvance) return;
600
+ setIsFinishing(true);
601
+ await new Promise((resolve) => setTimeout(resolve, 1200));
602
+ setIsFinishing(false);
603
+ setActiveStep(4);
604
+ setMaxReached(4);
605
+ toast.success("Order placed successfully");
606
+ };
607
+
608
+ const items = [
609
+ { title: "Account", description: "Your details" },
610
+ { title: "Shipping", description: "Where to send it" },
611
+ { title: "Payment", description: "How to pay" },
612
+ ];
613
+
614
+ const isLastStep = activeStep === items.length;
615
+ const isFinished = activeStep > items.length;
616
+
617
+ return (
618
+ <div className="w-[840px] space-y-6">
619
+ <Stepper
620
+ value={activeStep}
621
+ onValueChange={setActiveStep}
622
+ indicators={{ completed: <CheckIcon className="size-3.5" /> }}
623
+ items={items.map((item, i) => ({
624
+ ...item,
625
+ disabled: i + 1 > maxReached,
626
+ }))}
627
+ />
628
+
629
+ <div className="rounded-lg border p-6">
630
+ {activeStep === 1 && (
631
+ <div className="space-y-4">
632
+ <Field
633
+ label="Email"
634
+ required
635
+ error={
636
+ formData.email && !isEmail(formData.email)
637
+ ? "Enter a valid email address"
638
+ : undefined
639
+ }
640
+ >
641
+ <Input
642
+ value={formData.email}
643
+ onChange={update("email")}
644
+ placeholder="you@example.com"
645
+ />
646
+ </Field>
647
+ <Field label="Full name" required>
648
+ <Input
649
+ value={formData.name}
650
+ onChange={update("name")}
651
+ placeholder="Jane Doe"
652
+ />
653
+ </Field>
654
+ </div>
655
+ )}
656
+
657
+ {activeStep === 2 && (
658
+ <div className="space-y-4">
659
+ <Field label="Address" required>
660
+ <Input
661
+ value={formData.address}
662
+ onChange={update("address")}
663
+ placeholder="221B Baker Street"
664
+ />
665
+ </Field>
666
+ <Field label="City" required>
667
+ <Input
668
+ value={formData.city}
669
+ onChange={update("city")}
670
+ placeholder="London"
671
+ />
672
+ </Field>
673
+ </div>
674
+ )}
675
+
676
+ {activeStep === 3 && (
677
+ <Field
678
+ label="Card number"
679
+ required
680
+ description="At least 12 digits."
681
+ error={
682
+ formData.card && formData.card.replace(/\s/g, "").length < 12
683
+ ? "Card number is too short"
684
+ : undefined
685
+ }
686
+ >
687
+ <Input
688
+ value={formData.card}
689
+ onChange={update("card")}
690
+ placeholder="4242 4242 4242 4242"
691
+ inputMode="numeric"
692
+ />
693
+ </Field>
694
+ )}
695
+
696
+ {isFinished && (
697
+ <div className="flex flex-col items-center gap-2 py-4 text-center">
698
+ <CheckIcon className="size-8 text-success" />
699
+ <p className="font-medium">All set</p>
700
+ <p className="text-muted-foreground text-sm">
701
+ We've sent a receipt to{" "}
702
+ <span className="font-medium text-foreground">
703
+ {formData.email}
704
+ </span>
705
+ .
706
+ </p>
707
+ </div>
708
+ )}
709
+ </div>
710
+
711
+ {isFinished ? (
712
+ <div className="flex justify-center">
713
+ <Button variant="outline" onClick={handleReset}>
714
+ Start over
715
+ </Button>
716
+ </div>
717
+ ) : (
718
+ <div className="flex justify-between">
719
+ <Button
720
+ variant="outline"
721
+ onClick={handleBack}
722
+ disabled={activeStep === 1 || isFinishing}
723
+ >
724
+ Back
725
+ </Button>
726
+ {isLastStep ? (
727
+ <Button
728
+ onClick={handleFinish}
729
+ disabled={!canAdvance || isFinishing}
730
+ loading={isFinishing}
731
+ >
732
+ {isFinishing ? "Processing…" : "Finish"}
733
+ </Button>
734
+ ) : (
735
+ <Button onClick={handleNext} disabled={!canAdvance}>
736
+ Next
737
+ </Button>
738
+ )}
739
+ </div>
740
+ )}
741
+ </div>
742
+ );
743
+ },
744
+ };
745
+
746
+ /**
747
+ * Compose the primitives directly when the items API isn't enough — custom
748
+ * markup between steps, dynamic indicator rendering, extra slots, etc.
749
+ *
750
+ * ```tsx
751
+ * <StepperRoot defaultValue={2}>
752
+ * <StepperNav>
753
+ * <StepperItem step={1}>
754
+ * <StepperTrigger>
755
+ * <StepperIndicator>1</StepperIndicator>
756
+ * <StepperTitle>Account</StepperTitle>
757
+ * </StepperTrigger>
758
+ * <StepperSeparator />
759
+ * </StepperItem>
760
+ * </StepperNav>
761
+ * <StepperPanel>
762
+ * <StepperContent value={1}>Account form…</StepperContent>
763
+ * </StepperPanel>
764
+ * </StepperRoot>
765
+ * ```
766
+ */
767
+ export const Primitive: Story = {
768
+ render: () => (
769
+ <div className="w-[840px]">
770
+ <StepperRoot defaultValue={2}>
771
+ <StepperNav>
772
+ {[
773
+ { step: 1, title: "Account" },
774
+ { step: 2, title: "Shipping" },
775
+ { step: 3, title: "Payment" },
776
+ { step: 4, title: "Review" },
777
+ ].map(({ step, title }, i, arr) => (
778
+ <StepperItem key={step} step={step}>
779
+ <StepperTrigger>
780
+ <StepperIndicator>
781
+ <CheckIcon className="hidden size-3.5 group-data-[state=completed]/step:block" />
782
+ <span className="group-data-[state=completed]/step:hidden">
783
+ {step}
784
+ </span>
785
+ </StepperIndicator>
786
+ <div className="flex flex-col gap-0.5 text-left">
787
+ <StepperTitle>{title}</StepperTitle>
788
+ </div>
789
+ </StepperTrigger>
790
+ {i < arr.length - 1 ? <StepperSeparator /> : null}
791
+ </StepperItem>
792
+ ))}
793
+ </StepperNav>
794
+ <StepperPanel className="mt-6">
795
+ {[1, 2, 3, 4].map((step) => (
796
+ <StepperContent key={step} value={step}>
797
+ <div className="rounded-lg border p-4">
798
+ <p className="font-medium text-sm">Step {step}</p>
799
+ <p className="mt-1 text-muted-foreground text-sm">
800
+ Custom panel content for step {step}.
801
+ </p>
802
+ </div>
803
+ </StepperContent>
804
+ ))}
805
+ </StepperPanel>
806
+ </StepperRoot>
807
+ </div>
808
+ ),
809
+ };