@boxcustodia/library 2.0.0-alpha.18 → 2.0.0-alpha.19

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 (699) 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 +57 -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 +138 -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 +152 -0
  29. package/dist/components/date-picker/date-picker.cjs.js +2 -0
  30. package/dist/components/date-picker/date-picker.es.js +262 -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 +73 -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/dialog/dialog.cjs.js +2 -0
  38. package/dist/components/dialog/dialog.es.js +221 -0
  39. package/dist/components/divider/divider.cjs.js +2 -0
  40. package/dist/components/divider/divider.es.js +27 -0
  41. package/dist/components/dropzone/dropzone.cjs.js +2 -0
  42. package/dist/components/dropzone/dropzone.es.js +303 -0
  43. package/dist/components/dropzone/file-types.cjs.js +1 -0
  44. package/dist/components/dropzone/file-types.es.js +57 -0
  45. package/dist/components/empty/empty.cjs.js +2 -0
  46. package/dist/components/empty/empty.es.js +128 -0
  47. package/dist/components/field/field.cjs.js +2 -0
  48. package/dist/components/field/field.es.js +179 -0
  49. package/dist/components/form/form.cjs.js +2 -0
  50. package/dist/components/form/form.es.js +11 -0
  51. package/dist/components/input/input.cjs.js +2 -0
  52. package/dist/components/input/input.es.js +60 -0
  53. package/dist/components/kbd/kbd.cjs.js +2 -0
  54. package/dist/components/kbd/kbd.es.js +36 -0
  55. package/dist/components/label/label.cjs.js +2 -0
  56. package/dist/components/label/label.es.js +49 -0
  57. package/dist/components/loader/loader.cjs.js +2 -0
  58. package/dist/components/loader/loader.es.js +55 -0
  59. package/dist/components/menu/menu-primitives.cjs.js +2 -0
  60. package/dist/components/menu/menu-primitives.es.js +240 -0
  61. package/dist/components/menu/menu.cjs.js +2 -0
  62. package/dist/components/menu/menu.es.js +89 -0
  63. package/dist/components/number-input/number-input.cjs.js +2 -0
  64. package/dist/components/number-input/number-input.es.js +212 -0
  65. package/dist/components/pagination/pagination.cjs.js +2 -0
  66. package/dist/components/pagination/pagination.es.js +393 -0
  67. package/dist/components/pagination/pagination.model.cjs.js +1 -0
  68. package/dist/components/pagination/pagination.model.es.js +4 -0
  69. package/dist/components/password/password.cjs.js +2 -0
  70. package/dist/components/password/password.es.js +73 -0
  71. package/dist/components/popover/popover.cjs.js +2 -0
  72. package/dist/components/popover/popover.es.js +158 -0
  73. package/dist/components/progress/progress.cjs.js +2 -0
  74. package/dist/components/progress/progress.es.js +114 -0
  75. package/dist/components/scroll-area/scroll-area.cjs.js +2 -0
  76. package/dist/components/scroll-area/scroll-area.es.js +67 -0
  77. package/dist/components/select/select.cjs.js +2 -0
  78. package/dist/components/select/select.es.js +323 -0
  79. package/dist/components/skeleton/skeleton.cjs.js +2 -0
  80. package/dist/components/skeleton/skeleton.es.js +19 -0
  81. package/dist/components/stack/stack.cjs.js +2 -0
  82. package/dist/components/stack/stack.es.js +42 -0
  83. package/dist/components/stepper/stepper.cjs.js +2 -0
  84. package/dist/components/stepper/stepper.es.js +368 -0
  85. package/dist/components/switch/switch.cjs.js +2 -0
  86. package/dist/components/switch/switch.es.js +85 -0
  87. package/dist/components/table/table.cjs.js +2 -0
  88. package/dist/components/table/table.es.js +168 -0
  89. package/dist/components/tabs/tabs.cjs.js +2 -0
  90. package/dist/components/tabs/tabs.es.js +96 -0
  91. package/dist/components/tag/tag.cjs.js +2 -0
  92. package/dist/components/tag/tag.es.js +50 -0
  93. package/dist/components/textarea/textarea.cjs.js +2 -0
  94. package/dist/components/textarea/textarea.es.js +31 -0
  95. package/dist/components/timeline/timeline.cjs.js +2 -0
  96. package/dist/components/timeline/timeline.es.js +263 -0
  97. package/dist/components/toast/toast.cjs.js +2 -0
  98. package/dist/components/toast/toast.es.js +224 -0
  99. package/dist/components/tooltip/tooltip.cjs.js +2 -0
  100. package/dist/components/tooltip/tooltip.es.js +122 -0
  101. package/dist/components/tree/tree.cjs.js +2 -0
  102. package/dist/components/tree/tree.es.js +150 -0
  103. package/dist/hooks/internal/is-browser.cjs.js +1 -0
  104. package/dist/hooks/internal/is-browser.es.js +4 -0
  105. package/dist/hooks/internal/use-isomorphic-layout-effect.cjs.js +1 -0
  106. package/dist/hooks/internal/use-isomorphic-layout-effect.es.js +6 -0
  107. package/dist/hooks/use-array/use-array.cjs.js +1 -0
  108. package/dist/hooks/use-array/use-array.es.js +46 -0
  109. package/dist/hooks/use-async/use-async.cjs.js +1 -0
  110. package/dist/hooks/use-async/use-async.es.js +24 -0
  111. package/dist/hooks/use-click-outside/use-click-outside.cjs.js +1 -0
  112. package/dist/hooks/use-click-outside/use-click-outside.es.js +15 -0
  113. package/dist/hooks/use-clipboard/use-clipboard.cjs.js +1 -0
  114. package/dist/hooks/use-clipboard/use-clipboard.es.js +29 -0
  115. package/dist/hooks/use-debounce-callback/use-debounced-callback.cjs.js +1 -0
  116. package/dist/hooks/use-debounce-callback/use-debounced-callback.es.js +15 -0
  117. package/dist/hooks/use-debounce-value/use-debounced-value.cjs.js +1 -0
  118. package/dist/hooks/use-debounce-value/use-debounced-value.es.js +13 -0
  119. package/dist/hooks/use-disclosure/use-disclosure.cjs.js +1 -0
  120. package/dist/hooks/use-disclosure/use-disclosure.es.js +14 -0
  121. package/dist/hooks/use-document-title/use-document-title.cjs.js +1 -0
  122. package/dist/hooks/use-document-title/use-document-title.es.js +17 -0
  123. package/dist/hooks/use-event-listener/use-event-listener.cjs.js +1 -0
  124. package/dist/hooks/use-event-listener/use-event-listener.es.js +13 -0
  125. package/dist/hooks/use-focus-trap/scope-tab.cjs.js +1 -0
  126. package/dist/hooks/use-focus-trap/scope-tab.es.js +21 -0
  127. package/dist/hooks/use-focus-trap/tabbable.cjs.js +1 -0
  128. package/dist/hooks/use-focus-trap/tabbable.es.js +38 -0
  129. package/dist/hooks/use-focus-trap/use-focus-trap.cjs.js +1 -0
  130. package/dist/hooks/use-focus-trap/use-focus-trap.es.js +34 -0
  131. package/dist/hooks/use-hotkey/use-hotkey.cjs.js +1 -0
  132. package/dist/hooks/use-hotkey/use-hotkey.es.js +18 -0
  133. package/dist/hooks/use-hotkey/utils/create-hotkey-listener.cjs.js +1 -0
  134. package/dist/hooks/use-hotkey/utils/create-hotkey-listener.es.js +10 -0
  135. package/dist/hooks/use-hotkey/utils/is-input-field.cjs.js +1 -0
  136. package/dist/hooks/use-hotkey/utils/is-input-field.es.js +5 -0
  137. package/dist/hooks/use-hotkey/utils/match-key-modifiers.cjs.js +1 -0
  138. package/dist/hooks/use-hotkey/utils/match-key-modifiers.es.js +17 -0
  139. package/dist/hooks/use-hover/use-hover.cjs.js +1 -0
  140. package/dist/hooks/use-hover/use-hover.es.js +20 -0
  141. package/dist/hooks/use-is-visible/use-is-visible.cjs.js +1 -0
  142. package/dist/hooks/use-is-visible/use-is-visible.es.js +31 -0
  143. package/dist/hooks/use-local-storage/use-local-storage.cjs.js +1 -0
  144. package/dist/hooks/use-local-storage/use-local-storage.es.js +29 -0
  145. package/dist/hooks/use-media-query/use-media-query.cjs.js +1 -0
  146. package/dist/hooks/use-media-query/use-media-query.es.js +13 -0
  147. package/dist/hooks/use-memoized-fn/use-memoized-fn.cjs.js +1 -0
  148. package/dist/hooks/use-memoized-fn/use-memoized-fn.es.js +15 -0
  149. package/dist/hooks/use-mutation/use-mutation.cjs.js +1 -0
  150. package/dist/hooks/use-mutation/use-mutation.es.js +27 -0
  151. package/dist/hooks/use-object/use-object.cjs.js +1 -0
  152. package/dist/hooks/use-object/use-object.es.js +26 -0
  153. package/dist/hooks/use-on-mount/use-on-mount.cjs.js +1 -0
  154. package/dist/hooks/use-on-mount/use-on-mount.es.js +11 -0
  155. package/dist/hooks/use-pagination/use-pagination.cjs.js +1 -0
  156. package/dist/hooks/use-pagination/use-pagination.es.js +38 -0
  157. package/dist/hooks/use-portal/use-portal.cjs.js +1 -0
  158. package/dist/hooks/use-portal/use-portal.es.js +31 -0
  159. package/dist/hooks/use-prevent-close-window/use-prevent-close-window.cjs.js +1 -0
  160. package/dist/hooks/use-prevent-close-window/use-prevent-close-window.es.js +15 -0
  161. package/dist/hooks/use-range-pagination/use-range-pagination.cjs.js +1 -0
  162. package/dist/hooks/use-range-pagination/use-range-pagination.es.js +36 -0
  163. package/dist/hooks/use-selection/use-selection.cjs.js +1 -0
  164. package/dist/hooks/use-selection/use-selection.es.js +38 -0
  165. package/dist/hooks/use-step/use-step.cjs.js +1 -0
  166. package/dist/hooks/use-step/use-step.es.js +27 -0
  167. package/dist/hooks/use-toggle/use-toggle.cjs.js +1 -0
  168. package/dist/hooks/use-toggle/use-toggle.es.js +10 -0
  169. package/dist/index.cjs.js +1 -1
  170. package/dist/index.d.ts +2 -2653
  171. package/dist/index.es.js +437 -7572
  172. package/dist/lib/cn.cjs.js +1 -0
  173. package/dist/lib/cn.es.js +10 -0
  174. package/dist/providers/library-provider.cjs.js +1 -0
  175. package/dist/providers/library-provider.es.js +13 -0
  176. package/dist/providers/theme/ThemeProvider.cjs.js +1 -0
  177. package/dist/providers/theme/ThemeProvider.es.js +10 -0
  178. package/dist/providers/theme/useThemeProps.cjs.js +1 -0
  179. package/dist/providers/theme/useThemeProps.es.js +12 -0
  180. package/dist/setupTests.d.ts +0 -0
  181. package/dist/src/__doc__/Examples.d.ts +7 -0
  182. package/dist/src/components/accordion/accordion.d.ts +28 -0
  183. package/dist/src/components/accordion/accordion.test.d.ts +1 -0
  184. package/dist/src/components/accordion/index.d.ts +1 -0
  185. package/dist/src/components/alert/alert.d.ts +26 -0
  186. package/dist/src/components/alert/alert.test.d.ts +1 -0
  187. package/dist/src/components/alert/index.d.ts +1 -0
  188. package/dist/src/components/alert-dialog/alert-dialog.d.ts +104 -0
  189. package/dist/src/components/alert-dialog/alert-dialog.test.d.ts +1 -0
  190. package/dist/src/components/alert-dialog/index.d.ts +1 -0
  191. package/dist/src/components/auto-complete/auto-complete.d.ts +95 -0
  192. package/dist/src/components/auto-complete/auto-complete.test.d.ts +1 -0
  193. package/dist/src/components/auto-complete/index.d.ts +1 -0
  194. package/dist/src/components/avatar/avatar.d.ts +31 -0
  195. package/dist/src/components/avatar/avatar.test.d.ts +1 -0
  196. package/dist/src/components/avatar/index.d.ts +1 -0
  197. package/dist/src/components/button/button.d.ts +11 -0
  198. package/dist/src/components/button/button.test.d.ts +1 -0
  199. package/dist/src/components/button/components/base-button.d.ts +7 -0
  200. package/dist/src/components/button/index.d.ts +2 -0
  201. package/dist/src/components/calendar/calendar.d.ts +3 -0
  202. package/dist/src/components/calendar/calendar.test.d.ts +1 -0
  203. package/dist/src/components/calendar/index.d.ts +1 -0
  204. package/dist/src/components/card/card.d.ts +35 -0
  205. package/dist/src/components/card/card.test.d.ts +1 -0
  206. package/dist/src/components/card/index.d.ts +1 -0
  207. package/dist/src/components/center/center.d.ts +7 -0
  208. package/dist/src/components/center/center.test.d.ts +1 -0
  209. package/dist/src/components/center/index.d.ts +1 -0
  210. package/dist/src/components/checkbox/checkbox.d.ts +74 -0
  211. package/dist/src/components/checkbox/checkbox.test.d.ts +1 -0
  212. package/dist/src/components/checkbox/index.d.ts +1 -0
  213. package/dist/src/components/checkbox-group/checkbox-group.d.ts +21 -0
  214. package/dist/src/components/checkbox-group/checkbox-group.test.d.ts +1 -0
  215. package/dist/src/components/checkbox-group/index.d.ts +1 -0
  216. package/dist/src/components/combobox/combobox.d.ts +112 -0
  217. package/dist/src/components/combobox/combobox.test.d.ts +1 -0
  218. package/dist/src/components/combobox/index.d.ts +1 -0
  219. package/dist/src/components/date-picker/date-input.d.ts +2 -0
  220. package/dist/src/components/date-picker/date-picker.d.ts +5 -0
  221. package/dist/src/components/date-picker/date-picker.model.d.ts +78 -0
  222. package/dist/src/components/date-picker/date-picker.test.d.ts +1 -0
  223. package/dist/src/components/date-picker/date-picker.utils.d.ts +12 -0
  224. package/dist/src/components/date-picker/date-picker.utils.test.d.ts +1 -0
  225. package/dist/src/components/date-picker/index.d.ts +3 -0
  226. package/dist/src/components/date-picker/use-date-input-popover.d.ts +12 -0
  227. package/dist/src/components/date-picker/use-date-input-popover.test.d.ts +1 -0
  228. package/dist/src/components/date-picker/use-date-input.d.ts +16 -0
  229. package/dist/src/components/dialog/dialog.d.ts +100 -0
  230. package/dist/src/components/dialog/dialog.test.d.ts +1 -0
  231. package/dist/src/components/dialog/index.d.ts +1 -0
  232. package/dist/src/components/divider/divider.d.ts +4 -0
  233. package/dist/src/components/divider/divider.test.d.ts +1 -0
  234. package/dist/src/components/divider/index.d.ts +1 -0
  235. package/dist/src/components/dropzone/dropzone.d.ts +67 -0
  236. package/dist/src/components/dropzone/dropzone.test.d.ts +1 -0
  237. package/dist/src/components/dropzone/file-types.d.ts +27 -0
  238. package/dist/src/components/dropzone/index.d.ts +2 -0
  239. package/dist/src/components/empty/empty.d.ts +33 -0
  240. package/dist/src/components/empty/empty.test.d.ts +1 -0
  241. package/dist/src/components/empty/index.d.ts +1 -0
  242. package/dist/src/components/field/field.d.ts +57 -0
  243. package/dist/src/components/field/field.test.d.ts +1 -0
  244. package/dist/src/components/field/index.d.ts +1 -0
  245. package/dist/src/components/form/form.d.ts +5 -0
  246. package/dist/src/components/form/form.test.d.ts +1 -0
  247. package/dist/src/components/form/index.d.ts +1 -0
  248. package/dist/src/components/index.d.ts +43 -0
  249. package/dist/src/components/input/index.d.ts +1 -0
  250. package/dist/src/components/input/input.d.ts +9 -0
  251. package/dist/src/components/input/input.test.d.ts +1 -0
  252. package/dist/src/components/kbd/index.d.ts +1 -0
  253. package/dist/src/components/kbd/kbd.d.ts +3 -0
  254. package/dist/src/components/kbd/kbd.test.d.ts +1 -0
  255. package/dist/src/components/label/index.d.ts +1 -0
  256. package/dist/src/components/label/label.d.ts +15 -0
  257. package/dist/src/components/label/label.test.d.ts +1 -0
  258. package/dist/src/components/loader/index.d.ts +1 -0
  259. package/dist/src/components/loader/loader.d.ts +18 -0
  260. package/dist/src/components/loader/loader.test.d.ts +1 -0
  261. package/dist/src/components/menu/index.d.ts +2 -0
  262. package/dist/src/components/menu/menu-primitives.d.ts +29 -0
  263. package/dist/src/components/menu/menu.d.ts +57 -0
  264. package/dist/src/components/menu/menu.test.d.ts +1 -0
  265. package/dist/src/components/number-input/index.d.ts +1 -0
  266. package/dist/src/components/number-input/number-input.d.ts +31 -0
  267. package/dist/src/components/number-input/number-input.test.d.ts +1 -0
  268. package/dist/src/components/otp/index.d.ts +1 -0
  269. package/dist/src/components/otp/otp.d.ts +16 -0
  270. package/dist/src/components/otp/otp.test.d.ts +1 -0
  271. package/dist/src/components/pagination/index.d.ts +2 -0
  272. package/dist/src/components/pagination/pagination.d.ts +131 -0
  273. package/dist/src/components/pagination/pagination.model.d.ts +2 -0
  274. package/dist/src/components/pagination/pagination.test.d.ts +1 -0
  275. package/dist/src/components/password/index.d.ts +1 -0
  276. package/dist/src/components/password/password.d.ts +19 -0
  277. package/dist/src/components/password/password.test.d.ts +1 -0
  278. package/dist/src/components/popover/index.d.ts +1 -0
  279. package/dist/src/components/popover/popover.d.ts +41 -0
  280. package/dist/src/components/popover/popover.test.d.ts +1 -0
  281. package/dist/src/components/progress/index.d.ts +1 -0
  282. package/dist/src/components/progress/progress.d.ts +22 -0
  283. package/dist/src/components/progress/progress.test.d.ts +1 -0
  284. package/dist/src/components/radio-group/index.d.ts +1 -0
  285. package/dist/src/components/radio-group/radio-group.d.ts +41 -0
  286. package/dist/src/components/radio-group/radio-group.test.d.ts +1 -0
  287. package/dist/src/components/scroll-area/index.d.ts +1 -0
  288. package/dist/src/components/scroll-area/scroll-area.d.ts +8 -0
  289. package/dist/src/components/scroll-area/scroll-area.test.d.ts +1 -0
  290. package/dist/src/components/select/index.d.ts +1 -0
  291. package/dist/src/components/select/select.d.ts +71 -0
  292. package/dist/src/components/select/select.test.d.ts +1 -0
  293. package/dist/src/components/skeleton/index.d.ts +1 -0
  294. package/dist/src/components/skeleton/skeleton.d.ts +2 -0
  295. package/dist/src/components/skeleton/skeleton.test.d.ts +1 -0
  296. package/dist/src/components/stack/index.d.ts +1 -0
  297. package/dist/src/components/stack/stack.d.ts +14 -0
  298. package/dist/src/components/stack/stack.test.d.ts +1 -0
  299. package/dist/src/components/stepper/index.d.ts +1 -0
  300. package/dist/src/components/stepper/stepper.d.ts +83 -0
  301. package/dist/src/components/stepper/stepper.test.d.ts +1 -0
  302. package/dist/src/components/switch/index.d.ts +1 -0
  303. package/dist/src/components/switch/switch.d.ts +21 -0
  304. package/dist/src/components/switch/switch.test.d.ts +1 -0
  305. package/dist/src/components/table/index.d.ts +1 -0
  306. package/dist/src/components/table/table.d.ts +50 -0
  307. package/dist/src/components/table/table.test.d.ts +1 -0
  308. package/dist/src/components/tabs/index.d.ts +1 -0
  309. package/dist/src/components/tabs/tabs.d.ts +11 -0
  310. package/dist/src/components/tabs/tabs.test.d.ts +1 -0
  311. package/dist/src/components/tag/index.d.ts +1 -0
  312. package/dist/src/components/tag/tag.d.ts +7 -0
  313. package/dist/src/components/tag/tag.test.d.ts +1 -0
  314. package/dist/src/components/textarea/index.d.ts +1 -0
  315. package/dist/src/components/textarea/textarea.d.ts +5 -0
  316. package/dist/src/components/textarea/textarea.test.d.ts +1 -0
  317. package/dist/src/components/timeline/index.d.ts +1 -0
  318. package/dist/src/components/timeline/timeline.d.ts +50 -0
  319. package/dist/src/components/timeline/timeline.test.d.ts +1 -0
  320. package/dist/src/components/toast/index.d.ts +1 -0
  321. package/dist/src/components/toast/toast.d.ts +101 -0
  322. package/dist/src/components/toast/toast.test.d.ts +1 -0
  323. package/dist/src/components/tooltip/index.d.ts +1 -0
  324. package/dist/src/components/tooltip/tooltip.d.ts +52 -0
  325. package/dist/src/components/tooltip/tooltip.test.d.ts +1 -0
  326. package/dist/src/components/tree/index.d.ts +1 -0
  327. package/dist/src/components/tree/tree.d.ts +18 -0
  328. package/dist/src/components/tree/tree.test.d.ts +1 -0
  329. package/dist/src/hooks/index.d.ts +27 -0
  330. package/dist/src/hooks/internal/index.d.ts +2 -0
  331. package/dist/src/hooks/internal/is-browser.d.ts +1 -0
  332. package/dist/src/hooks/internal/use-isomorphic-layout-effect.d.ts +2 -0
  333. package/dist/src/hooks/use-array/index.d.ts +1 -0
  334. package/dist/src/hooks/use-array/use-array.d.ts +11 -0
  335. package/dist/src/hooks/use-array/use-array.test.d.ts +1 -0
  336. package/dist/src/hooks/use-async/index.d.ts +1 -0
  337. package/dist/src/hooks/use-async/use-async.d.ts +18 -0
  338. package/dist/src/hooks/use-async/use-async.test.d.ts +1 -0
  339. package/dist/src/hooks/use-click-outside/index.d.ts +1 -0
  340. package/dist/src/hooks/use-click-outside/use-click-outside.d.ts +1 -0
  341. package/dist/src/hooks/use-click-outside/use-click-outside.test.d.ts +1 -0
  342. package/dist/src/hooks/use-clipboard/index.d.ts +1 -0
  343. package/dist/src/hooks/use-clipboard/use-clipboard.d.ts +15 -0
  344. package/dist/src/hooks/use-clipboard/use-clipboard.test.d.ts +1 -0
  345. package/dist/src/hooks/use-debounce-callback/index.d.ts +1 -0
  346. package/dist/src/hooks/use-debounce-callback/use-debounced-callback.d.ts +1 -0
  347. package/dist/src/hooks/use-debounce-callback/use-debounced-callback.test.d.ts +1 -0
  348. package/dist/src/hooks/use-debounce-value/index.d.ts +1 -0
  349. package/dist/src/hooks/use-debounce-value/use-debounced-value.d.ts +1 -0
  350. package/dist/src/hooks/use-debounce-value/use-debounced-value.test.d.ts +1 -0
  351. package/dist/src/hooks/use-disclosure/index.d.ts +1 -0
  352. package/dist/src/hooks/use-disclosure/use-disclosure.d.ts +8 -0
  353. package/dist/src/hooks/use-disclosure/use-disclosure.test.d.ts +1 -0
  354. package/dist/src/hooks/use-document-title/index.d.ts +1 -0
  355. package/dist/src/hooks/use-document-title/use-document-title.d.ts +5 -0
  356. package/dist/src/hooks/use-document-title/use-document-title.test.d.ts +1 -0
  357. package/dist/src/hooks/use-event-listener/index.d.ts +1 -0
  358. package/dist/src/hooks/use-event-listener/use-event-listener.d.ts +1 -0
  359. package/dist/src/hooks/use-event-listener/use-event-listener.test.d.ts +1 -0
  360. package/dist/src/hooks/use-focus-trap/index.d.ts +1 -0
  361. package/dist/src/hooks/use-focus-trap/scope-tab.d.ts +1 -0
  362. package/dist/src/hooks/use-focus-trap/tabbable.d.ts +4 -0
  363. package/dist/src/hooks/use-focus-trap/use-focus-trap.d.ts +1 -0
  364. package/dist/src/hooks/use-focus-trap/use-focus-trap.test.d.ts +1 -0
  365. package/dist/src/hooks/use-hotkey/index.d.ts +1 -0
  366. package/dist/src/hooks/use-hotkey/use-hotkey.d.ts +9 -0
  367. package/dist/src/hooks/use-hotkey/use-hotkey.test.d.ts +1 -0
  368. package/dist/src/hooks/use-hotkey/utils/create-hotkey-listener.d.ts +1 -0
  369. package/dist/src/hooks/use-hotkey/utils/index.d.ts +3 -0
  370. package/dist/src/hooks/use-hotkey/utils/is-input-field.d.ts +2 -0
  371. package/dist/src/hooks/use-hotkey/utils/match-key-modifiers.d.ts +8 -0
  372. package/dist/src/hooks/use-hover/index.d.ts +1 -0
  373. package/dist/src/hooks/use-hover/use-hover.d.ts +12 -0
  374. package/dist/src/hooks/use-hover/use-hover.test.d.ts +1 -0
  375. package/dist/src/hooks/use-is-visible/index.d.ts +1 -0
  376. package/dist/src/hooks/use-is-visible/use-is-visible.d.ts +10 -0
  377. package/dist/src/hooks/use-is-visible/use-is-visible.test.d.ts +1 -0
  378. package/dist/src/hooks/use-local-storage/index.d.ts +1 -0
  379. package/dist/src/hooks/use-local-storage/use-local-storage.d.ts +2 -0
  380. package/dist/src/hooks/use-local-storage/use-local-storage.test.d.ts +1 -0
  381. package/dist/src/hooks/use-media-query/index.d.ts +1 -0
  382. package/dist/src/hooks/use-media-query/use-media-query.d.ts +1 -0
  383. package/dist/src/hooks/use-memoized-fn/index.d.ts +1 -0
  384. package/dist/src/hooks/use-memoized-fn/use-memoized-fn.d.ts +3 -0
  385. package/dist/src/hooks/use-memoized-fn/use-memoized-fn.test.d.ts +1 -0
  386. package/dist/src/hooks/use-mutation/index.d.ts +1 -0
  387. package/dist/src/hooks/use-mutation/use-mutation.d.ts +15 -0
  388. package/dist/src/hooks/use-mutation/use-mutation.test.d.ts +1 -0
  389. package/dist/src/hooks/use-object/index.d.ts +1 -0
  390. package/dist/src/hooks/use-object/use-object.d.ts +6 -0
  391. package/dist/src/hooks/use-object/use-object.test.d.ts +1 -0
  392. package/dist/src/hooks/use-on-mount/index.d.ts +1 -0
  393. package/dist/src/hooks/use-on-mount/use-on-mount.d.ts +2 -0
  394. package/dist/src/hooks/use-on-mount/use-on-mount.test.d.ts +1 -0
  395. package/dist/src/hooks/use-pagination/index.d.ts +1 -0
  396. package/dist/src/hooks/use-pagination/use-pagination.d.ts +46 -0
  397. package/dist/src/hooks/use-pagination/use-pagination.test.d.ts +1 -0
  398. package/dist/src/hooks/use-portal/index.d.ts +1 -0
  399. package/dist/src/hooks/use-portal/use-portal.d.ts +4 -0
  400. package/dist/src/hooks/use-portal/use-portal.test.d.ts +1 -0
  401. package/dist/src/hooks/use-prevent-close-window/index.d.ts +1 -0
  402. package/dist/src/hooks/use-prevent-close-window/use-prevent-close-window.d.ts +13 -0
  403. package/dist/src/hooks/use-prevent-close-window/use-prevent-close-window.test.d.ts +1 -0
  404. package/dist/src/hooks/use-range-pagination/index.d.ts +1 -0
  405. package/dist/src/hooks/use-range-pagination/use-range-pagination.d.ts +22 -0
  406. package/dist/src/hooks/use-range-pagination/use-range-pagination.test.d.ts +1 -0
  407. package/dist/src/hooks/use-selection/index.d.ts +1 -0
  408. package/dist/src/hooks/use-selection/use-selection.d.ts +54 -0
  409. package/dist/src/hooks/use-selection/use-selection.test.d.ts +1 -0
  410. package/dist/src/hooks/use-step/index.d.ts +1 -0
  411. package/dist/src/hooks/use-step/use-step.d.ts +14 -0
  412. package/dist/src/hooks/use-step/use-step.test.d.ts +1 -0
  413. package/dist/src/hooks/use-toggle/index.d.ts +1 -0
  414. package/dist/src/hooks/use-toggle/use-toggle.d.ts +3 -0
  415. package/dist/src/hooks/use-toggle/use-toggle.test.d.ts +1 -0
  416. package/dist/src/index.d.ts +6 -0
  417. package/dist/src/lib/cn.d.ts +3 -0
  418. package/dist/src/lib/index.d.ts +1 -0
  419. package/dist/src/models/Generic.model.d.ts +37 -0
  420. package/dist/src/models/index.d.ts +1 -0
  421. package/dist/src/providers/index.d.ts +2 -0
  422. package/dist/src/providers/library-provider.d.ts +28 -0
  423. package/dist/src/providers/theme/ThemeProvider.d.ts +11 -0
  424. package/dist/src/providers/theme/index.d.ts +3 -0
  425. package/dist/src/providers/theme/types.d.ts +10 -0
  426. package/dist/src/providers/theme/useThemeProps.d.ts +10 -0
  427. package/dist/src/stores/theme.store.d.ts +10 -0
  428. package/dist/src/utils/dates/parseDateRange.utility.d.ts +14 -0
  429. package/dist/src/utils/form.d.ts +32 -0
  430. package/dist/src/utils/form.test.d.ts +1 -0
  431. package/dist/src/utils/functions/createSafeContext.d.ts +2 -0
  432. package/dist/src/utils/functions/createSafeContext.test.d.ts +1 -0
  433. package/dist/src/utils/functions/ensureReactElement.d.ts +9 -0
  434. package/dist/src/utils/functions/ensureReactElement.test.d.ts +1 -0
  435. package/dist/src/utils/functions/getFormData.d.ts +2 -0
  436. package/dist/src/utils/functions/getFormData.test.d.ts +1 -0
  437. package/dist/src/utils/functions/index.d.ts +4 -0
  438. package/dist/src/utils/functions/mergeRefs.d.ts +2 -0
  439. package/dist/src/utils/functions/mergeRefs.test.d.ts +1 -0
  440. package/dist/src/utils/index.d.ts +3 -0
  441. package/dist/src/utils/strings/extractInitials.utility.d.ts +6 -0
  442. package/dist/src/utils/strings/index.d.ts +1 -0
  443. package/dist/src/utils/tests/click.d.ts +1 -0
  444. package/dist/src/utils/tests/index.d.ts +2 -0
  445. package/dist/src/utils/tests/keyboard.d.ts +10 -0
  446. package/dist/src/utils/tests/type.d.ts +1 -0
  447. package/dist/utils/form.cjs.js +1 -0
  448. package/dist/utils/form.es.js +62 -0
  449. package/dist/utils/functions/createSafeContext.cjs.js +1 -0
  450. package/dist/utils/functions/createSafeContext.es.js +13 -0
  451. package/dist/utils/functions/ensureReactElement.cjs.js +1 -0
  452. package/dist/utils/functions/ensureReactElement.es.js +13 -0
  453. package/dist/utils/functions/getFormData.cjs.js +1 -0
  454. package/dist/utils/functions/getFormData.es.js +11 -0
  455. package/dist/utils/functions/mergeRefs.cjs.js +1 -0
  456. package/dist/utils/functions/mergeRefs.es.js +10 -0
  457. package/dist/utils/strings/extractInitials.utility.cjs.js +1 -0
  458. package/dist/utils/strings/extractInitials.utility.es.js +4 -0
  459. package/package.json +6 -10
  460. package/src/components/accordion/accordion.test.tsx +1 -1
  461. package/src/components/accordion/accordion.tsx +2 -0
  462. package/src/components/alert/alert.test.tsx +185 -0
  463. package/src/components/alert/alert.tsx +2 -0
  464. package/src/components/alert-dialog/alert-dialog.tsx +2 -0
  465. package/src/components/auto-complete/auto-complete.test.tsx +709 -0
  466. package/src/components/auto-complete/auto-complete.tsx +8 -10
  467. package/src/components/avatar/avatar.test.tsx +162 -19
  468. package/src/components/avatar/avatar.tsx +2 -0
  469. package/src/components/button/button.test.tsx +206 -10
  470. package/src/components/button/button.tsx +2 -0
  471. package/src/components/button/components/base-button.tsx +2 -0
  472. package/src/components/calendar/calendar.test.tsx +174 -5
  473. package/src/components/card/card.test.tsx +207 -0
  474. package/src/components/card/card.tsx +2 -0
  475. package/src/components/center/center.test.tsx +63 -0
  476. package/src/components/center/center.tsx +2 -0
  477. package/src/components/checkbox/checkbox.test.tsx +388 -0
  478. package/src/components/checkbox/checkbox.tsx +2 -0
  479. package/src/components/checkbox-group/checkbox-group.test.tsx +156 -0
  480. package/src/components/checkbox-group/checkbox-group.tsx +2 -0
  481. package/src/components/combobox/combobox.test.tsx +458 -0
  482. package/src/components/combobox/combobox.tsx +13 -11
  483. package/src/components/date-picker/date-input.tsx +2 -0
  484. package/src/components/date-picker/date-picker.test.tsx +546 -2
  485. package/src/components/date-picker/date-picker.tsx +2 -0
  486. package/src/components/date-picker/date-picker.utils.test.ts +251 -0
  487. package/src/components/date-picker/use-date-input-popover.test.ts +61 -0
  488. package/src/components/dialog/dialog.test.tsx +302 -3
  489. package/src/components/dialog/dialog.tsx +2 -0
  490. package/src/components/divider/divider.test.tsx +41 -1
  491. package/src/components/divider/divider.tsx +3 -1
  492. package/src/components/dropzone/dropzone.test.tsx +355 -0
  493. package/src/components/dropzone/dropzone.tsx +2 -0
  494. package/src/components/empty/empty.test.tsx +219 -0
  495. package/src/components/empty/empty.tsx +2 -0
  496. package/src/components/field/field.test.tsx +324 -0
  497. package/src/components/field/field.tsx +2 -0
  498. package/src/components/form/form.test.tsx +44 -0
  499. package/src/components/form/form.tsx +2 -0
  500. package/src/components/index.ts +1 -0
  501. package/src/components/input/input.tsx +2 -0
  502. package/src/components/kbd/kbd.test.tsx +66 -0
  503. package/src/components/kbd/kbd.tsx +2 -0
  504. package/src/components/label/label.test.tsx +46 -0
  505. package/src/components/label/label.tsx +2 -0
  506. package/src/components/loader/loader.test.tsx +63 -1
  507. package/src/components/loader/loader.tsx +2 -0
  508. package/src/components/menu/menu.test.tsx +167 -0
  509. package/src/components/number-input/number-input.test.tsx +62 -0
  510. package/src/components/otp/otp.test.tsx +103 -0
  511. package/src/components/otp/otp.tsx +2 -0
  512. package/src/components/pagination/pagination.test.tsx +61 -1
  513. package/src/components/pagination/pagination.tsx +2 -0
  514. package/src/components/password/password.test.tsx +115 -0
  515. package/src/components/password/password.tsx +2 -0
  516. package/src/components/popover/popover.test.tsx +175 -0
  517. package/src/components/progress/progress.test.tsx +102 -1
  518. package/src/components/progress/progress.tsx +2 -0
  519. package/src/components/radio-group/radio-group.test.tsx +169 -0
  520. package/src/components/radio-group/radio-group.tsx +2 -0
  521. package/src/components/scroll-area/scroll-area.test.tsx +140 -0
  522. package/src/components/select/select.test.tsx +357 -0
  523. package/src/components/select/select.tsx +1 -1
  524. package/src/components/skeleton/skeleton.test.tsx +37 -0
  525. package/src/components/skeleton/skeleton.tsx +2 -0
  526. package/src/components/stack/stack.test.tsx +134 -0
  527. package/src/components/stack/stack.tsx +2 -0
  528. package/src/components/stepper/stepper.test.tsx +378 -23
  529. package/src/components/switch/switch.test.tsx +68 -2
  530. package/src/components/switch/switch.tsx +2 -0
  531. package/src/components/table/table.test.tsx +168 -1
  532. package/src/components/table/table.tsx +2 -0
  533. package/src/components/tabs/tabs.test.tsx +138 -1
  534. package/src/components/tag/tag.test.tsx +40 -1
  535. package/src/components/tag/tag.tsx +2 -0
  536. package/src/components/textarea/textarea.test.tsx +57 -0
  537. package/src/components/timeline/timeline.test.tsx +202 -0
  538. package/src/components/timeline/timeline.tsx +2 -0
  539. package/src/components/toast/toast.test.tsx +287 -3
  540. package/src/components/toast/toast.tsx +2 -0
  541. package/src/components/tooltip/tooltip.test.tsx +120 -7
  542. package/src/components/tooltip/tooltip.tsx +2 -0
  543. package/src/components/tree/tree.test.tsx +146 -5
  544. package/src/hooks/index.ts +22 -22
  545. package/src/hooks/internal/index.ts +2 -0
  546. package/src/hooks/internal/is-browser.ts +1 -0
  547. package/src/hooks/internal/use-isomorphic-layout-effect.ts +4 -0
  548. package/src/hooks/use-array/index.ts +1 -0
  549. package/src/hooks/{useArray/__doc__/useArray.stories.tsx → use-array/use-array.stories.tsx} +2 -2
  550. package/src/hooks/{useArray/__test__/useArray.test.tsx → use-array/use-array.test.tsx} +25 -1
  551. package/src/hooks/{useArray/useArray.ts → use-array/use-array.ts} +4 -6
  552. package/src/hooks/use-async/index.ts +1 -0
  553. package/src/hooks/{useAsync/__doc__/useAsync.stories.tsx → use-async/use-async.stories.tsx} +5 -6
  554. package/src/hooks/{useAsync/__test__/useAsync.test.tsx → use-async/use-async.test.tsx} +1 -1
  555. package/src/hooks/{useAsync/useAsync.ts → use-async/use-async.ts} +1 -2
  556. package/src/hooks/use-click-outside/index.ts +1 -0
  557. package/src/hooks/{useClickOutside/__doc__/useClickOutside.stories.tsx → use-click-outside/use-click-outside.stories.tsx} +2 -2
  558. package/src/hooks/use-click-outside/use-click-outside.test.tsx +39 -0
  559. package/src/hooks/{useClickOutside/useClickOutside.ts → use-click-outside/use-click-outside.ts} +1 -2
  560. package/src/hooks/use-clipboard/use-clipboard.test.tsx +31 -0
  561. package/src/hooks/use-clipboard/use-clipboard.tsx +7 -1
  562. package/src/hooks/use-debounce-callback/index.ts +1 -0
  563. package/src/hooks/{useDebounceCallback/__doc__/useDebouncedCallback.stories.tsx → use-debounce-callback/use-debounced-callback.stories.tsx} +3 -3
  564. package/src/hooks/use-debounce-callback/use-debounced-callback.test.ts +88 -0
  565. package/src/hooks/{useDebounceCallback/useDebouncedCallback.ts → use-debounce-callback/use-debounced-callback.ts} +1 -2
  566. package/src/hooks/use-debounce-value/index.ts +1 -0
  567. package/src/hooks/{useDebounceValue/__doc__/useDebouncedValue.stories.tsx → use-debounce-value/use-debounced-value.stories.tsx} +2 -2
  568. package/src/hooks/use-debounce-value/use-debounced-value.test.ts +101 -0
  569. package/src/hooks/{useDebounceValue/useDebouncedValue.ts → use-debounce-value/use-debounced-value.ts} +1 -2
  570. package/src/hooks/use-disclosure/index.ts +1 -0
  571. package/src/hooks/{useDisclosure/__doc__/useDisclosure.stories.tsx → use-disclosure/use-disclosure.stories.tsx} +3 -3
  572. package/src/hooks/use-disclosure/use-disclosure.test.ts +72 -0
  573. package/src/hooks/{useDisclosure/useDisclosure.ts → use-disclosure/use-disclosure.ts} +1 -2
  574. package/src/hooks/use-event-listener/index.ts +1 -0
  575. package/src/hooks/{useEventListener/__doc__/useEventListener.stories.tsx → use-event-listener/use-event-listener.stories.tsx} +2 -2
  576. package/src/hooks/{useEventListener/__test__/useEventListener.test.tsx → use-event-listener/use-event-listener.test.tsx} +6 -3
  577. package/src/hooks/{useEventListener/useEventListener.ts → use-event-listener/use-event-listener.ts} +3 -4
  578. package/src/hooks/use-focus-trap/index.ts +1 -0
  579. package/src/hooks/{useFocusTrap/__doc__/useFocusTrap.stories.tsx → use-focus-trap/use-focus-trap.stories.tsx} +2 -2
  580. package/src/hooks/use-focus-trap/use-focus-trap.test.ts +330 -0
  581. package/src/hooks/{useFocusTrap/useFocusTrap.ts → use-focus-trap/use-focus-trap.ts} +2 -3
  582. package/src/hooks/use-hotkey/index.ts +1 -0
  583. package/src/hooks/{useHotkey/__docs__/useHotkey.stories.tsx → use-hotkey/use-hotkey.stories.tsx} +2 -2
  584. package/src/hooks/{useHotkey/__test__/useHotkey.test.tsx → use-hotkey/use-hotkey.test.tsx} +34 -3
  585. package/src/hooks/{useHotkey/useHotkey.ts → use-hotkey/use-hotkey.ts} +3 -4
  586. package/src/hooks/use-is-visible/index.ts +1 -0
  587. package/src/hooks/{useIsVisible/__doc__/useIsVisible.stories.tsx → use-is-visible/use-is-visible.stories.tsx} +2 -2
  588. package/src/hooks/use-is-visible/use-is-visible.test.tsx +135 -0
  589. package/src/hooks/{useIsVisible/useIsVisible.tsx → use-is-visible/use-is-visible.tsx} +1 -2
  590. package/src/hooks/use-local-storage/index.ts +1 -0
  591. package/src/hooks/{useLocalStorage/__doc__/useLocalStorage.stories.tsx → use-local-storage/use-local-storage.stories.tsx} +2 -2
  592. package/src/hooks/{useLocalStorage/__test__/useLocalStorage.test.ts → use-local-storage/use-local-storage.test.ts} +47 -1
  593. package/src/hooks/{useLocalStorage/useLocalStorage.ts → use-local-storage/use-local-storage.ts} +3 -4
  594. package/src/hooks/use-media-query/index.ts +1 -0
  595. package/src/hooks/{useMediaQuery/__doc__/useMediaQuery.stories.tsx → use-media-query/use-media-query.stories.tsx} +1 -1
  596. package/src/hooks/{useMediaQuery/useMediaQuery.ts → use-media-query/use-media-query.ts} +1 -3
  597. package/src/hooks/use-memoized-fn/index.ts +1 -0
  598. package/src/hooks/use-memoized-fn/use-memoized-fn.test.ts +52 -0
  599. package/src/hooks/{useMemoizedFn/useMemoizedFn.ts → use-memoized-fn/use-memoized-fn.ts} +2 -4
  600. package/src/hooks/use-mutation/index.ts +1 -0
  601. package/src/hooks/{useMutation/__doc__/useMutation.stories.tsx → use-mutation/use-mutation.stories.tsx} +4 -4
  602. package/src/hooks/{useMutation/__test__/useMutation.test.tsx → use-mutation/use-mutation.test.tsx} +1 -1
  603. package/src/hooks/{useMutation/useMutation.tsx → use-mutation/use-mutation.tsx} +3 -4
  604. package/src/hooks/use-object/index.ts +1 -0
  605. package/src/hooks/{useObject/__doc__/useObject.stories.tsx → use-object/use-object.stories.tsx} +2 -2
  606. package/src/hooks/{useObject/__test__/useObject.test.tsx → use-object/use-object.test.tsx} +18 -3
  607. package/src/hooks/{useObject/useObject.tsx → use-object/use-object.tsx} +6 -8
  608. package/src/hooks/use-on-mount/use-on-mount.test.tsx +7 -0
  609. package/src/hooks/use-pagination/index.ts +1 -0
  610. package/src/hooks/{usePagination/__doc__/usePagination.stories.tsx → use-pagination/use-pagination.stories.tsx} +2 -2
  611. package/src/hooks/{usePagination/__test__/usePagination.test.tsx → use-pagination/use-pagination.test.tsx} +1 -1
  612. package/src/hooks/{usePagination/usePagination.tsx → use-pagination/use-pagination.tsx} +1 -2
  613. package/src/hooks/use-portal/index.ts +1 -0
  614. package/src/hooks/{usePortal/__doc__/usePortal.stories.tsx → use-portal/use-portal.stories.tsx} +1 -1
  615. package/src/hooks/use-portal/use-portal.test.tsx +77 -0
  616. package/src/hooks/use-portal/use-portal.ts +59 -0
  617. package/src/hooks/use-prevent-close-window/index.ts +1 -0
  618. package/src/hooks/{usePreventCloseWindow/__doc__/usePreventCloseWindow.stories.tsx → use-prevent-close-window/use-prevent-close-window.stories.tsx} +1 -1
  619. package/src/hooks/use-prevent-close-window/use-prevent-close-window.test.ts +79 -0
  620. package/src/hooks/{usePreventCloseWindow/usePreventCloseWindow.ts → use-prevent-close-window/use-prevent-close-window.ts} +4 -4
  621. package/src/hooks/use-range-pagination/index.ts +1 -0
  622. package/src/hooks/{useRangePagination/__test__/useRangePagination.test.tsx → use-range-pagination/use-range-pagination.test.tsx} +1 -1
  623. package/src/hooks/{useRangePagination/useRangePagination.tsx → use-range-pagination/use-range-pagination.tsx} +4 -3
  624. package/src/hooks/use-selection/index.ts +1 -0
  625. package/src/hooks/{useSelection/__doc__/useSelection.stories.tsx → use-selection/use-selection.stories.tsx} +3 -3
  626. package/src/hooks/use-selection/use-selection.test.tsx +79 -0
  627. package/src/hooks/{useSelection/useSelection.ts → use-selection/use-selection.ts} +1 -2
  628. package/src/hooks/use-step/index.ts +1 -0
  629. package/src/hooks/{useStep/__doc__/useStep.stories.tsx → use-step/use-step.stories.tsx} +3 -3
  630. package/src/hooks/use-step/use-step.test.ts +73 -0
  631. package/src/hooks/{useStep/useStep.ts → use-step/use-step.ts} +4 -6
  632. package/src/hooks/use-toggle/index.ts +1 -0
  633. package/src/hooks/{useToggle/__doc__/useToggle.stories.tsx → use-toggle/use-toggle.stories.tsx} +2 -2
  634. package/src/hooks/{useToggle/__test__/useToggle.test.tsx → use-toggle/use-toggle.test.tsx} +22 -1
  635. package/src/hooks/{useToggle/useToggle.ts → use-toggle/use-toggle.ts} +2 -4
  636. package/src/utils/form.test.tsx +138 -0
  637. package/src/utils/functions/createSafeContext.test.tsx +37 -0
  638. package/src/utils/functions/ensureReactElement.test.tsx +49 -0
  639. package/src/utils/functions/getFormData.test.ts +57 -0
  640. package/src/utils/functions/mergeRefs.test.ts +56 -0
  641. package/src/__doc__/Changelog.mdx +0 -6
  642. package/src/__doc__/Components.mdx +0 -73
  643. package/src/__doc__/Examples.tsx +0 -69
  644. package/src/__doc__/Icons.mdx +0 -41
  645. package/src/__doc__/Intro.mdx +0 -138
  646. package/src/__doc__/MCP.mdx +0 -71
  647. package/src/__doc__/Tabs.mdx +0 -112
  648. package/src/__doc__/Theme.mdx +0 -132
  649. package/src/__doc__/Types.mdx +0 -252
  650. package/src/__doc__/V2.mdx +0 -1281
  651. package/src/components/calendar/calendar.model.ts +0 -86
  652. package/src/components/calendar/components/calendar-navigation.tsx +0 -141
  653. package/src/components/calendar/components/day.tsx +0 -61
  654. package/src/components/calendar/components/decade-view.tsx +0 -45
  655. package/src/components/calendar/components/index.ts +0 -6
  656. package/src/components/calendar/components/month-view.tsx +0 -58
  657. package/src/components/calendar/components/week-days.tsx +0 -27
  658. package/src/components/calendar/components/year-view.tsx +0 -29
  659. package/src/components/calendar/hooks/index.ts +0 -4
  660. package/src/components/calendar/hooks/use-calendar-navigation.ts +0 -79
  661. package/src/components/calendar/hooks/use-calendar.ts +0 -90
  662. package/src/components/calendar/hooks/use-multiple-calendar.ts +0 -34
  663. package/src/components/calendar/hooks/use-range-calendar.ts +0 -91
  664. package/src/components/calendar/hooks/use-single-calendar.ts +0 -18
  665. package/src/components/calendar/utils/typeguards.ts +0 -7
  666. package/src/hooks/useArray/index.ts +0 -1
  667. package/src/hooks/useAsync/index.ts +0 -1
  668. package/src/hooks/useClickOutside/__test__/useClickOutside.test.tsx +0 -33
  669. package/src/hooks/useClickOutside/index.ts +0 -1
  670. package/src/hooks/useDebounceCallback/index.ts +0 -1
  671. package/src/hooks/useDebounceValue/index.ts +0 -1
  672. package/src/hooks/useDisclosure/__test__/useDisclosure.test.ts +0 -43
  673. package/src/hooks/useDisclosure/index.ts +0 -1
  674. package/src/hooks/useEventListener/index.ts +0 -1
  675. package/src/hooks/useFocusTrap/index.ts +0 -1
  676. package/src/hooks/useHotkey/index.ts +0 -1
  677. package/src/hooks/useIsVisible/index.ts +0 -1
  678. package/src/hooks/useLocalStorage/index.ts +0 -1
  679. package/src/hooks/useMediaQuery/index.ts +0 -1
  680. package/src/hooks/useMemoizedFn/index.ts +0 -1
  681. package/src/hooks/useMutation/index.ts +0 -1
  682. package/src/hooks/useObject/index.ts +0 -1
  683. package/src/hooks/usePagination/index.ts +0 -2
  684. package/src/hooks/usePortal/__test__/usePortal.test.tsx +0 -20
  685. package/src/hooks/usePortal/index.ts +0 -1
  686. package/src/hooks/usePortal/usePortal.ts +0 -40
  687. package/src/hooks/usePreventCloseWindow/index.ts +0 -1
  688. package/src/hooks/useRangePagination/index.ts +0 -2
  689. package/src/hooks/useSelection/__test__/useSelection.test.tsx +0 -57
  690. package/src/hooks/useSelection/index.ts +0 -1
  691. package/src/hooks/useStep/__test__/useStep.test.ts +0 -51
  692. package/src/hooks/useStep/index.ts +0 -1
  693. package/src/hooks/useToggle/index.ts +0 -1
  694. /package/src/hooks/{useFocusTrap/scopeTab.ts → use-focus-trap/scope-tab.ts} +0 -0
  695. /package/src/hooks/{useFocusTrap → use-focus-trap}/tabbable.ts +0 -0
  696. /package/src/hooks/{useHotkey/__utils__ → use-hotkey/utils}/create-hotkey-listener.ts +0 -0
  697. /package/src/hooks/{useHotkey/__utils__ → use-hotkey/utils}/index.ts +0 -0
  698. /package/src/hooks/{useHotkey/__utils__ → use-hotkey/utils}/is-input-field.ts +0 -0
  699. /package/src/hooks/{useHotkey/__utils__ → use-hotkey/utils}/match-key-modifiers.ts +0 -0
@@ -1,1281 +0,0 @@
1
- import { Meta } from "@storybook/addon-docs/blocks";
2
-
3
- <Meta title="Documentation/Guía de Migración v1 → v2" />
4
-
5
- # Migración v1 → v2
6
-
7
- Si venís usando `@boxcustodia/library@1.x`, esta guía te lleva paso a paso a `2.x`. Aplicá los cambios en orden y deberías quedar funcional.
8
-
9
- ---
10
-
11
- ## Instalación
12
-
13
- v2 todavía está en alpha. Instalá con el tag `@next`:
14
-
15
- ```bash
16
- npm i @boxcustodia/library@next
17
- ```
18
-
19
- La librería trae todo lo que necesita para funcionar. No tenés que instalar peers manualmente.
20
-
21
- ### Instalá el MCP de v2
22
-
23
- El MCP (Model Context Protocol) le da a Claude acceso directo a la documentación de los componentes de v2: props, variantes, ejemplos y patrones. Sin él, Claude inventa props y genera código que no funciona contra esta librería. Ver la página **Documentation/MCP** para detalles (incluye la instrucción opcional para `CLAUDE.md`).
24
-
25
- ```bash
26
- npx mcp-add --type http \
27
- --url "https://v2--69de51f0642746d263d5c46f.chromatic.com/mcp" \
28
- --client-id "cdf3737dff9d485485968e50b63fd8b4" \
29
- --scope global \
30
- --clients "claude code"
31
- ```
32
-
33
- Se instala una vez por máquina (global). El instalador pregunta el server name — respondé `boxcustodia-library`; los otros prompts quedan vacíos. La primera consulta abre el browser para autenticar contra Chromatic (pedile acceso a Franco si no lo tenés).
34
-
35
- ### Actualizá el import del CSS
36
-
37
- v2 expone un subpath estable para el CSS. Cambiá el `@import` en tu `index.css`:
38
-
39
- ```diff filename="index.css"
40
- @import "tailwindcss";
41
- - @import "@boxcustodia/library/dist/index.css";
42
- + @import "@boxcustodia/library/styles";
43
- ```
44
-
45
- ---
46
-
47
- ## Migración de Radix UI a Base UI
48
-
49
- v2 reemplaza **Radix UI** por **[Base UI](https://base-ui.com)** como capa de primitivos. Este cambio trae dos breaking changes globales que aplican a todos los componentes.
50
-
51
- ### 1. `asChild` → prop `render`
52
-
53
- Base UI no usa el patrón `asChild`. Para renderizar un componente propio en lugar del elemento por defecto, usá la prop `render`:
54
-
55
- ```diff
56
- - <DialogTrigger asChild>
57
- - <Button>Abrir</Button>
58
- - </DialogTrigger>
59
- + <DialogTrigger render={<Button>Abrir</Button>} />
60
- ```
61
-
62
- ### 2. `onChange` → `onValueChange`
63
-
64
- Base UI renombra los callbacks de control. El prop `onChange` desaparece — reemplazalo por `onValueChange`. Los demás siguen igual pero ahora reciben `eventDetails` como segundo argumento:
65
-
66
- ```diff
67
- - <Select value={value} onChange={(v) => setValue(v)} />
68
- + <Select value={value} onValueChange={(v) => setValue(v)} />
69
- ```
70
-
71
- Firmas completas de Base UI:
72
-
73
- ```ts
74
- onValueChange: (value, eventDetails) => void
75
- onOpenChange: (open, eventDetails) => void
76
- onPressedChange: (pressed, eventDetails) => void
77
- ```
78
-
79
- ---
80
-
81
- ## Componentes eliminados
82
-
83
- Los siguientes componentes fueron removidos en v2:
84
-
85
- - `BackgroundImage`
86
- - `Heading`
87
- - `MultiSelect`
88
- - `Show`
89
- - `TablePagination`
90
-
91
- ---
92
-
93
- ## Componentes nuevos
94
-
95
- - `Accordion`
96
- - `Alert`
97
- - `CheckboxGroup`
98
- - `DateInput`
99
- - `OTP`
100
- - `Progress`
101
- - `RadioGroup`
102
- - `ScrollArea`
103
-
104
- ---
105
-
106
- ## Subpaths públicos disponibles
107
-
108
- - `@boxcustodia/library` — componentes, hooks, utilidades.
109
- - `@boxcustodia/library/styles` — CSS principal (theme + variantes + estilos de componentes).
110
-
111
- ---
112
-
113
- ## Nuevo patrón de composición y estilado
114
-
115
- v2 cambia la forma de extender componentes. Estos dos cambios aplican a **todos los composites** de la librería (Autocomplete, Combobox, Select, Dialog, AlertDialog, etc.), no a un componente puntual.
116
-
117
- ### 1. Se eliminan los `xProps` pass-through
118
-
119
- En v1, los composites exponían props pass-through tipo `triggerProps`, `contentProps`, `inputProps`, `popupProps`, `itemProps`, etc. para reenviar atributos al primitivo correspondiente.
120
-
121
- ```diff
122
- - <Dialog
123
- - triggerProps={{ className: "..." }}
124
- - contentProps={{ onEscapeKeyDown: handler, className: "..." }}
125
- - titleProps={{ className: "..." }}
126
- - >
127
- - Hola
128
- - </Dialog>
129
- ```
130
-
131
- **Por qué se elimina:**
132
-
133
- - **Abstracción que filtra.** Para usar `contentProps` el consumer tiene que conocer el primitivo subyacente, qué props acepta y qué se le omitió. Es decir, ya pagó el costo cognitivo del primitivo — el composite dejó de aportar valor.
134
- - **Falso intermedio.** Si necesitás tocar 3+ pass-through props, ya estás reescribiendo la composición a mano — solo que con peor ergonomía que usando los primitivos directamente.
135
- - **Mantenimiento.** Cada cambio en un primitivo se propagaba al tipo del composite y multiplicaba la matriz de casos a probar.
136
- - **Duplicación de API.** Cada composite terminaba clonando la API de N primitivos prop por prop.
137
-
138
- **Qué hacer en su lugar:**
139
-
140
- - Para **cambios de estilo** → usá la nueva prop `classNames` (ver abajo).
141
- - Para **cambios de comportamiento, estructura o props no triviales** → usá los primitivos directamente. Cada componente exporta sus primitivos (`DialogTrigger`, `DialogContent`, `AutocompletePopup`, etc.) y la composición es la API extendida real.
142
-
143
- ```diff
144
- + // Estructura custom: usá primitivos directamente
145
- + <DialogRoot>
146
- + <DialogTrigger render={<Button variant="outline" />}>Abrir</DialogTrigger>
147
- + <DialogPortal>
148
- + <DialogBackdrop />
149
- + <DialogPopup onEscapeKeyDown={handler}>
150
- + <DialogTitle>Hola</DialogTitle>
151
- + </DialogPopup>
152
- + </DialogPortal>
153
- + </DialogRoot>
154
- ```
155
-
156
- ### 2. Nuevo escape hatch de estilado: `classNames`
157
-
158
- Para el 80% de los casos de customización (solo CSS) v2 introduce una prop `classNames` namespaceada por slot. Reemplaza a las props sueltas `containerClassName`, `inputClassName`, `listClassName`, `itemClassName`, etc. que existían en v1.
159
-
160
- ```diff
161
- - <Autocomplete
162
- - containerClassName="w-72"
163
- - inputClassName="h-12"
164
- - listClassName="max-h-60"
165
- - itemClassName="py-2"
166
- - emptyClassName="italic"
167
- - />
168
- + <Autocomplete
169
- + className="w-72 h-12"
170
- + classNames={{
171
- + popup: "max-h-60",
172
- + item: "py-2",
173
- + empty: "italic",
174
- + }}
175
- + />
176
- ```
177
-
178
- **Convención:**
179
-
180
- - `className` → estilá el elemento principal del composite (el campo visible, el trigger, etc.).
181
- - `classNames` → objeto con un slot por cada parte interna estilable.
182
-
183
- **Por qué este patrón y no props sueltas:**
184
-
185
- - **API plana y predecible.** Un solo prop adicional (`classNames`) en lugar de N props con el sufijo `ClassName`.
186
- - **Consistencia entre componentes.** Mismo shape en `Autocomplete`, `Combobox`, `Select`, `Dialog`, etc. — aprendés una vez.
187
- - **Autocompletado.** TypeScript expone los slots disponibles al destructurar el objeto.
188
- - **Extensible.** Agregar un slot nuevo no rompe nada.
189
- - **No es escape hatch de comportamiento.** `classNames` solo toca estilo — para comportamiento, primitivos.
190
-
191
- Los slots disponibles están documentados en la página de cada componente.
192
-
193
- ---
194
-
195
- ## Componentes
196
-
197
- Breaking changes específicos por componente.
198
-
199
- ### 1. Dialog
200
-
201
- `xProps` eliminadas — usá `className` y `classNames` (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)).
202
-
203
- Slots de `classNames` disponibles: `backdrop`, `viewport`, `header`, `title`, `description`, `footer`, `closeButton`.
204
-
205
- **`DialogContent` → `DialogPopup`** (rename del primitive — Base UI usa `Popup` como naming). Si componés con primitivos, actualizá:
206
-
207
- ```diff
208
- - import { DialogRoot, DialogTrigger, DialogContent } from "@boxcustodia/library";
209
- + import { DialogRoot, DialogTrigger, DialogPopup } from "@boxcustodia/library";
210
- ```
211
-
212
- **`trigger: ReactNode → ReactElement`.** v1 aceptaba cualquier `ReactNode`; v2 exige un `ReactElement` porque Base UI usa `render={trigger}` y necesita un componente para clonar props:
213
-
214
- ```diff
215
- - <Dialog trigger="Open">…</Dialog>
216
- + <Dialog trigger={<Button>Open</Button>}>…</Dialog>
217
- ```
218
-
219
- ### 2. AlertDialog
220
-
221
- Migrado al nuevo patrón — se eliminaron los `xProps` pass-through (ver sección [Nuevo patrón de composición y estilado](#nuevo-patrón-de-composición-y-estilado)). Para estilo, usá `className` y `classNames`. Para cambios estructurales (layout custom, slots extra), usá los primitivos.
222
-
223
- Slots de `classNames` disponibles: `backdrop`, `header`, `title`, `description`, `footer`, `closeButton`, `actionButton`.
224
-
225
- ### 3. Autocomplete
226
-
227
- **Renombrado.** `AutoComplete` → `Autocomplete` (la `C` mayúscula del medio queda en minúscula). Actualizá los imports:
228
-
229
- ```diff
230
- - import { AutoComplete } from "@boxcustodia/library";
231
- + import { Autocomplete } from "@boxcustodia/library";
232
- ```
233
-
234
- Migrado al nuevo patrón — se eliminaron los `xProps` pass-through (ver sección [Nuevo patrón de composición y estilado](#nuevo-patrón-de-composición-y-estilado)). Para estilo, usá `className` y `classNames`. Para cambios estructurales (layout custom, slots extra, búsqueda async, grupos), usá los primitivos.
235
-
236
- Slots de `classNames` disponibles: `popup`, `list`, `item`, `empty`, `status`.
237
-
238
- **`onSelect` eliminado.** La prop `onSelect: (value: string, item: AutoCompleteItem) => any` ya no existe. Usá `onValueChange` para controlar la selección:
239
-
240
- ```diff
241
- - <Autocomplete onSelect={(value, item) => handleSelect(value, item)} />
242
- + <Autocomplete onValueChange={(item) => handleSelect(item)} />
243
- ```
244
-
245
- `onValueChange` recibe el item completo (o `null` cuando se limpia el campo).
246
-
247
- ### 4. Avatar
248
-
249
- Migrado al nuevo patrón — se eliminaron los `xProps` pass-through (ver sección [Nuevo patrón de composición y estilado](#nuevo-patrón-de-composición-y-estilado)). Para estilo, usá `className` y `classNames`. Para cambios estructurales (layout custom, slots extra), usá los primitivos.
250
-
251
- Slots de `classNames` disponibles: `image`, `fallback`, `badge`.
252
-
253
- **`variant` eliminada.** v1 controlaba la forma con `variant: "circle" | "square"`. v2 no acepta variante — todos los avatares son circulares por defecto. Para esquinas cuadradas, override con `className`:
254
-
255
- ```diff
256
- - <Avatar variant="square" src={src} alt={alt} />
257
- + <Avatar className="rounded-xl" src={src} alt={alt} />
258
- ```
259
-
260
- ### 5. Button
261
-
262
- **`asChild` eliminado.** Base UI no usa `asChild` (ver sección [Migración de Radix UI a Base UI](#migración-de-radix-ui-a-base-ui)). Para renderizar un elemento custom, usá la prop `render`:
263
-
264
- ```diff
265
- - <Button asChild><a href="/foo">Ir</a></Button>
266
- + <Button render={<a href="/foo">Ir</a>} />
267
- ```
268
-
269
- Si lo que querés es aplicar los estilos del botón a otro componente, importá `buttonVariants` y componé las clases:
270
-
271
- ```tsx
272
- import { buttonVariants } from "@boxcustodia/library";
273
-
274
- <a href="/foo" className={buttonVariants({ variant: "outline" })}>
275
- Ir
276
- </a>;
277
- ```
278
-
279
- **`showLoader` eliminado.** El loader se activa automáticamente cuando `onClick` devuelve una `Promise`. Para deshabilitarlo, pasá un `onClick` sincrónico:
280
-
281
- ```diff
282
- - <Button showLoader={false} onClick={async () => await save()}>Guardar</Button>
283
- + <Button onClick={() => { void save(); }}>Guardar</Button>
284
- ```
285
-
286
- **Props `icon` y `iconPosition` eliminadas.** Los íconos se componen directamente como `children` y la posición la define el orden en el JSX. Sin atributos extra ni configuración:
287
-
288
- ```diff
289
- - <Button icon={<TrashIcon />}>Borrar</Button>
290
- + <Button><TrashIcon />Borrar</Button>
291
-
292
- - <Button icon={<TrashIcon />} iconPosition="inline-end">Borrar</Button>
293
- + <Button>Borrar<TrashIcon /></Button>
294
- ```
295
-
296
- **`shape` eliminado.** Para esquinas custom, override con `className="rounded-..."`.
297
-
298
- **`loaderReplace` y `append` eliminados.** El loader siempre **reemplaza** el contenido (efecto antes conocido como `loaderReplace`). El efecto `append` (loader al lado del contenido) ya no se soporta.
299
-
300
- ### 6. Checkbox
301
-
302
- `xProps` eliminadas — usá `className` y `classNames` (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)).
303
-
304
- **`onChange` → `onCheckedChange`** (convención Base UI para binario):
305
-
306
- ```diff
307
- - <Checkbox checked={value} onChange={setValue} />
308
- + <Checkbox checked={value} onCheckedChange={setValue} />
309
- ```
310
-
311
- **`size` eliminada.** Customizá el tamaño con `className` o estilos:
312
-
313
- ```diff
314
- - <Checkbox size="lg" />
315
- + <Checkbox className="size-5" />
316
- ```
317
-
318
- ### 7. Calendar
319
-
320
- `Calendar` en v2 es un wrapper fino sobre [`react-day-picker`](https://daypicker.dev) (`DayPicker`). El componente adopta su API nativa, lo que implica varios breaking changes respecto a v1.
321
-
322
- **Props de selección renombradas.** El par `value` / `onChange` se reemplaza por `selected` / `onSelect`:
323
-
324
- ```diff
325
- - <Calendar mode="single" value={date} onChange={setDate} />
326
- + <Calendar mode="single" selected={date} onSelect={setDate} />
327
-
328
- - <Calendar mode="range" value={range} onChange={setRange} />
329
- + <Calendar mode="range" selected={range} onSelect={setRange} />
330
-
331
- - <Calendar mode="multiple" value={dates} onChange={setDates} />
332
- + <Calendar mode="multiple" selected={dates} onSelect={setDates} />
333
- ```
334
-
335
- **Shape de `DateRange` cambió.** v1 usaba `{ start, end }`; DayPicker usa `{ from, to }`. Actualizá los datos al construir y leer:
336
-
337
- ```diff
338
- - interface DateRange {
339
- - start: Date | null;
340
- - end: Date | null;
341
- - }
342
- + interface DateRange {
343
- + from?: Date;
344
- + to?: Date;
345
- + }
346
-
347
- - <Calendar mode="range" selected={{ start, end }} />
348
- + <Calendar mode="range" selected={{ from: start, to: end }} />
349
- ```
350
-
351
- Tipos de `selected` por modo (vienen de `react-day-picker`):
352
-
353
- - `single` → `Date | undefined`
354
- - `range` → `{ from?: Date; to?: Date } | undefined`
355
- - `multiple` → `Date[] | undefined`
356
-
357
- **Props `view`, `initialView` y `onChangeView` eliminadas.** v1 navegaba entre la grilla de días, la selección de mes y la selección de año con un patrón propio (`view: "month" | "year" | "decade"`). v2 usa el `captionLayout` de `DayPicker` (default `"dropdown"`) — los meses y años se navegan con un dropdown en la cabecera, no con cambios de vista.
358
-
359
- ```diff
360
- - <Calendar view="month" onChangeView={setView} initialView="day" />
361
- + <Calendar captionLayout="dropdown" />
362
- ```
363
-
364
- Valores aceptados: `"label" | "dropdown" | "dropdown-months" | "dropdown-years"`.
365
-
366
- **Prop `initialDate` eliminada.** Reemplazada por `defaultMonth` (prop nativa de DayPicker) — controla el mes que se muestra al montar el calendario.
367
-
368
- ```diff
369
- - <Calendar initialDate={new Date(2025, 0, 1)} />
370
- + <Calendar defaultMonth={new Date(2025, 0, 1)} />
371
- ```
372
-
373
- **Prop `disabled` con semántica más amplia.** v1 solo aceptaba una función `(date: Date) => boolean`. v2 acepta el `Matcher` de DayPicker: función, `Date`, array de `Date`, rangos `{ from, to }`, días de semana `{ dayOfWeek: [0, 6] }`, etc. La forma de función sigue funcionando, pero ahora hay más opciones declarativas (ver [matchers de DayPicker](https://daypicker.dev/docs/selection-modes#disabled-dates)).
374
-
375
- **xProps eliminadas.** Las props pass-through del composite (`goBackProps`, `goNextProps`, `changeViewProps`, `monthViewProps`) ya no existen (ver sección [Nuevo patrón de composición y estilado](#nuevo-patrón-de-composición-y-estilado)). Para estilar, usá `className` (al root del calendario) y `classNames` (objeto namespaceado con los slots de `DayPicker`: `day`, `weekday`, `month`, `nav`, etc. — ver [docs de DayPicker](https://daypicker.dev/docs/styling#class-names)).
376
-
377
- **Sub-exports eliminados.** v1 exponía `MonthView`, `YearView`, `DecadeView`, `CalendarNavigation`, `useCalendar`, `useCalendarNavigation` y `CalendarContext` para composición custom. v2 los elimina — toda la composición interna queda en `DayPicker`. Si necesitabas algo de eso, usá los slots de `components` de DayPicker (`Day`, `MonthCaption`, etc.).
378
-
379
- ### 8. Combobox
380
-
381
- `xProps` eliminadas — usá `className` y `classNames` (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)).
382
-
383
- Slots de `classNames` disponibles: `input`, `chips`, `chipsInput`, `popup`, `list`, `item`, `empty`.
384
-
385
- **Props renombradas:**
386
-
387
- - `valueKey: string` → `getId: (item) => string`
388
- - `labelKey: string` → `getLabel: (item) => string`
389
- - `renderOption` → `renderItem`
390
- - `emptyMessage` → `emptyText`
391
- - `searchPlaceholder` → `placeholder`
392
-
393
- **Props eliminadas:**
394
-
395
- - `searchProps` — en modo `multiple` el input de búsqueda vive en el popup, no en el trigger.
396
- - `commandProps` — no tiene equivalente; el composite ya no envuelve `cmdk`. Para layouts custom, usá los primitives (`ComboboxRoot`, `ComboboxInput`, `ComboboxPopup`, etc.).
397
-
398
- Los string keys pasan a ser funciones tipadas contra el genérico `TItem`. Sirven para campos anidados o valores derivados. Para shapes comunes (`{ id, name }`, `{ label, value }`, primitivos) los defaults los resuelven sin pasar nada.
399
-
400
- `getId` reemplaza al `getValue` que existió en alphas previas — el nombre se eligió para reflejar el uso real (id para form value + React key) y evitar la colisión visual con la prop `value` del Combobox.
401
-
402
- **`onChange` → `onValueChange` (cambio semántico).** Antes `value` / `onChange` trabajaban con el **key** (`string`). Ahora `value` / `onValueChange` trabajan con el **item completo** (o `null` al limpiar). Actualizá el estado del consumer:
403
-
404
- ```diff
405
- - const [selectedId, setSelectedId] = useState<string>("");
406
- + const [selected, setSelected] = useState<Fruit | null>(null);
407
-
408
- - <Combobox
409
- - items={fruits}
410
- - valueKey="id"
411
- - labelKey="name"
412
- - renderOption={(item) => item.name}
413
- - emptyMessage="Sin resultados"
414
- - value={selectedId}
415
- - onChange={setSelectedId}
416
- - />
417
- + <Combobox
418
- + items={fruits}
419
- + // getId / getLabel se pueden omitir si fruits es { id, name } — defaults los resuelven
420
- + renderItem={(item) => item.name}
421
- + emptyText="Sin resultados"
422
- + value={selected}
423
- + onValueChange={setSelected}
424
- + />
425
- ```
426
-
427
- ### 9. Select
428
-
429
- `xProps` eliminadas — usá `className` (estiliza el trigger) y `classNames` (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)).
430
-
431
- Slots de `classNames` disponibles: `popup`, `item`.
432
-
433
- **Props renombradas:**
434
-
435
- - `valueKey: string` → `getId: (item) => string`
436
- - `labelKey: string` → `getLabel: (item) => string`
437
- - `renderOption` → `renderItem`
438
- - `disabledItem` → `getDisabled` (alineado con la familia `get*`)
439
-
440
- Para shapes comunes (`{ id, name }`, `{ label, value }`, primitivos) los defaults resuelven todo — `getLabel`/`getId` solo hacen falta para shapes custom.
441
-
442
- **`onChange` → `onValueChange` (cambio semántico).** Mismo cambio que en Combobox: `value` / `onValueChange` ahora trabajan con el **item completo** (o `null`) en lugar del key. Si guardabas el id como string, ahora guardás el item:
443
-
444
- ```diff
445
- - const [animalId, setAnimalId] = useState<string>("");
446
- + const [animal, setAnimal] = useState<Animal | null>(null);
447
-
448
- - <Select
449
- - items={animals}
450
- - valueKey="id"
451
- - labelKey="name"
452
- - value={animalId}
453
- - onChange={setAnimalId}
454
- - />
455
- + <Select
456
- + items={animals}
457
- + value={animal}
458
- + onValueChange={setAnimal}
459
- + />
460
- ```
461
-
462
- ### 10. Dropzone
463
-
464
- Se agrega `classNames` para estilar los slots internos del composite (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)).
465
-
466
- Slots de `classNames` disponibles: `trigger`, `icon`, `label`, `content`.
467
-
468
- **`asChild` eliminado de `DropzoneTrigger`.** Estaba marcado deprecated en v1. v2 usa solo la prop `render` (Base UI):
469
-
470
- ```diff
471
- - <DropzoneTrigger asChild>
472
- - <Button>Upload</Button>
473
- - </DropzoneTrigger>
474
- + <DropzoneTrigger render={<Button>Upload</Button>} />
475
- ```
476
-
477
- **`onChangeFiles` → `onFilesChange`.** Renombrada para alinearse con la convención Base UI (`onValueChange`, `onOpenChange`, etc.):
478
-
479
- ```diff
480
- - <Dropzone onChangeFiles={(files) => setFiles(files)} />
481
- + <Dropzone onFilesChange={(files) => setFiles(files)} />
482
- ```
483
-
484
- ### 11. DatePicker
485
-
486
- En v1, `DatePicker` era un input tipeable con popover de calendario. En v2 se divide en dos componentes con responsabilidades separadas:
487
-
488
- - **`DatePicker`** — trigger tipo botón que abre un popover con el calendario. Soporta tres modos vía discriminated union: `single`, `range`, `multiple`.
489
- - **`DateInput`** — nuevo componente para el caso "input tipeable con auto-máscara `DD/MM/YYYY`" que cubría el `DatePicker` de v1. Solo modo `single`.
490
-
491
- Si en v1 usabas `DatePicker` para escribir la fecha a mano, migrá a `DateInput`:
492
-
493
- ```diff
494
- - <DatePicker value={date} onChange={setDate} />
495
- + <DateInput value={date} onValueChange={setDate} />
496
- ```
497
-
498
- **`onChange` → `onValueChange`** (ver [Migración de Radix UI a Base UI](#migración-de-radix-ui-a-base-ui)).
499
-
500
- **Shape de `DateRange` cambió** — el modo `range` ahora trabaja con el shape de DayPicker `{ from, to }` (ver [Calendar](#6-calendar)). En el `DatePicker` el shape sigue siendo `{ start, end }` para no romper consumers, pero internamente se mapea a `{ from, to }` al pasar al `Calendar`.
501
-
502
- **Footer por defecto eliminado.** v1 renderizaba siempre un footer con botones `Borrar` / `Hoy` (controlable con `hideFooter`). v2 no renderiza ningún footer salvo que pases `renderFooter` explícito. Si querés el comportamiento anterior, implementalo via `renderFooter`:
503
-
504
- ```diff
505
- - <DatePicker value={date} onChange={setDate} hideFooter />
506
- + <DatePicker mode="single" value={date} onValueChange={setDate} />
507
-
508
- - <DatePicker value={date} onChange={setDate} />
509
- + <DatePicker
510
- + mode="single"
511
- + value={date}
512
- + onValueChange={setDate}
513
- + renderFooter={({ clear, selectToday }) => (
514
- + <div className="flex justify-between">
515
- + <Button variant="ghost" onClick={clear}>Borrar</Button>
516
- + <Button variant="ghost" onClick={selectToday}>Hoy</Button>
517
- + </div>
518
- + )}
519
- + />
520
- ```
521
-
522
- **`renderFooter` ahora recibe un discriminated union por `mode`.** `selectToday` solo existe en modo `single` — narrow `mode` antes de usarlo:
523
-
524
- ```tsx
525
- renderFooter={(props) => {
526
- if (props.mode !== "single") return null;
527
- return <Button onClick={props.selectToday}>Hoy</Button>;
528
- }}
529
- ```
530
-
531
- **Navegación del calendario interno cambió.** Las props `view`, `initialView`, `onChangeView` e `initialDate` del Calendar de v1 ya no existen — el popover navega meses y años con un dropdown en la cabecera (ver [Calendar](#6-calendar) para detalles).
532
-
533
- `xProps` eliminadas — usá `className` (estiliza el trigger) y `classNames` (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)).
534
-
535
- Slots de `classNames` disponibles: `popup`, `calendar`, `footer`.
536
-
537
- ### 12. Form
538
-
539
- **Cambio grande.** v1 era un wrapper sobre Radix Slot + `react-hook-form` + `zod`. v2 usa directamente la API nativa del navegador (Base UI Form): el form es un `<form>` real con validación nativa (`required`, `pattern`, `minLength`, etc.) y `FormData` parseada al submit. No hay schema, no hay context de RHF, no hay re-renders por keystroke.
540
-
541
- **`form` eliminado.** v1 esperaba el `UseFormReturn` de `react-hook-form` (que a su vez recibía un schema de zod). v2 no necesita ningún objeto externo: el estado vive en el DOM.
542
-
543
- ```diff
544
- - const form = useForm(MySchema, { defaultValues });
545
- - <Form form={form} onSubmit={(data) => save(data)}>
546
- + <Form onFormSubmit={(data) => save(data)}>
547
- ```
548
-
549
- **`onSubmit` → `onFormSubmit`** (convención Base UI). La firma cambia: ya no recibe el shape tipado del schema sino un `Record<string, unknown>` parseado desde `FormData`.
550
-
551
- ```diff
552
- - <Form onSubmit={(data: MySchema) => save(data)} />
553
- + <Form onFormSubmit={(data, eventDetails) => save(data)} />
554
- ```
555
-
556
- `preventDefault()` lo llama Base UI automáticamente cuando definís `onFormSubmit`.
557
-
558
- **Validación.** En v2 cada campo vive dentro de un `Field` con `name`, `error` (matchers `valueMissing`, `typeMismatch`, `patternMismatch`, etc.) y opcionalmente `validate`. Los errores de servidor entran por `Form.errors` (objeto `{ [name]: string }`) y se limpian automáticamente al editar el campo.
559
-
560
- ```tsx
561
- <Form errors={serverErrors} onFormSubmit={save}>
562
- <Field
563
- name="email"
564
- label="Email"
565
- error={[
566
- { message: "Email is required.", match: "valueMissing" },
567
- { message: "Enter a valid email.", match: "typeMismatch" },
568
- ]}
569
- >
570
- <Input type="email" required />
571
- </Field>
572
- </Form>
573
- ```
574
-
575
- **Validación con schema (zod) sin RHF.** Si querés mantener un schema como source of truth pero no necesitás reactividad entre campos, parseá los `formValues` con el helper `parseFormValues(schema, values)`. Devuelve `{ data, errors }` listos para alimentar el prop `errors` del Form:
576
-
577
- ```tsx
578
- import {
579
- Form,
580
- Field,
581
- Input,
582
- Button,
583
- parseFormValues,
584
- } from "@boxcustodia/library";
585
- import { useState } from "react";
586
- import { z } from "zod";
587
-
588
- const schema = z.object({
589
- name: z.string().min(1, "Name is required."),
590
- age: z.coerce.number().positive("Age must be positive."),
591
- });
592
-
593
- function Page() {
594
- const [errors, setErrors] = useState({});
595
-
596
- return (
597
- <Form
598
- errors={errors}
599
- onFormSubmit={(values) => {
600
- const { data, errors } = parseFormValues(schema, values);
601
- setErrors(errors);
602
- if (data) save(data);
603
- }}
604
- >
605
- <Field name="name" label="Name">
606
- <Input />
607
- </Field>
608
- <Field name="age" label="Age">
609
- <Input />
610
- </Field>
611
- <Button type="submit">Submit</Button>
612
- </Form>
613
- );
614
- }
615
- ```
616
-
617
- `data` es `null` cuando alguna validación falla — los mensajes ya viajaron a `errors` y se limpian automáticamente al editar cada campo.
618
-
619
- **Escape hatch: `HookForm` + `HookField`.** Para formularios con reactividad real (watchers, dependent fields, wizards multi-step), la librería sigue exponiendo wrappers sobre `react-hook-form`:
620
-
621
- ```tsx
622
- import { HookForm, HookField, useHookForm } from "@boxcustodia/library";
623
-
624
- const form = useHookForm(MySchema, { defaultValues });
625
-
626
- <HookForm form={form} onFormSubmit={(data) => save(data)}>
627
- <HookField
628
- name="email"
629
- label="Email"
630
- render={(field) => <Input {...field} type="email" />}
631
- />
632
- </HookForm>;
633
- ```
634
-
635
- `HookField` envuelve `Controller` + `Field` — invalid y error se manejan solos.
636
-
637
- **Cuándo usar cada API:**
638
-
639
- - **Validación HTML simple** → `Form` + `Field` con matchers (`valueMissing`, `typeMismatch`, etc.).
640
- - **Schema (zod) sin reactividad** → `Form` + `parseFormValues(schema, values)` dentro de `onFormSubmit`.
641
- - **Watch / dependent fields / multi-step** → `HookForm` + `HookField` + `useHookForm`.
642
-
643
- ### 13. Field
644
-
645
- **Reemplaza a `FormField`.** En v1 había un componente `FormField` que envolvía `Controller` de `react-hook-form` y renderizaba label + control + error automáticamente. Ese componente se eliminó. `Field` es el sucesor conceptual pero con una API distinta: no asume RHF, se integra opcionalmente con el `Form` nativo (Base UI), y usa el pattern de `children` en vez de un `render` callback.
646
-
647
- ```diff
648
- - import { FormField } from "@boxcustodia/library";
649
- - <FormField
650
- - name="email"
651
- - label="Email"
652
- - render={(field) => <Input {...field} type="email" />}
653
- - />
654
- + import { Field, Input } from "@boxcustodia/library";
655
- + <Field name="email" label="Email">
656
- + <Input type="email" required />
657
- + </Field>
658
- ```
659
-
660
- Para mantener el flujo con `react-hook-form` + `zod`, usá `HookField` (ver [Form](#12-form)).
661
-
662
- **Integración con `Form`.** Cuando un `Field` con `name` vive dentro de un `Form`, los errores que llegan por el prop `errors` del Form se rutean automáticamente al Field por su `name` y se limpian solos cuando el usuario edita el campo. Ningún cableado manual:
663
-
664
- ```tsx
665
- <Form errors={{ email: "Already taken." }}>
666
- <Field name="email" label="Email">
667
- <Input />
668
- </Field>
669
- </Form>
670
- ```
671
-
672
- **`error` cambia de tipo.** En v1, el error de `FormField` venía del `fieldState` de `react-hook-form` y se renderizaba en un `FormMessage` interno (no era una prop). En v2, `Field.error` es una prop tipada `FieldErrorProp` con tres formas:
673
-
674
- - `string` → siempre renderiza una vez que el field es inválido.
675
- - `{ message, match }` → renderiza sólo cuando la clave del `ValidityState` coincide (`valueMissing`, `typeMismatch`, `tooShort`, etc.).
676
- - `FieldErrorItem[]` → múltiples mensajes, cada uno con su propio `match`.
677
-
678
- ```tsx
679
- <Field
680
- name="email"
681
- error={[
682
- { message: "Email is required.", match: "valueMissing" },
683
- { message: "Enter a valid email.", match: "typeMismatch" },
684
- ]}
685
- >
686
- <Input type="email" required />
687
- </Field>
688
- ```
689
-
690
- `xProps` eliminadas — usá `className` (root) y `classNames` (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)).
691
-
692
- Slots de `classNames` disponibles: `label`, `description`, `error`.
693
-
694
- ### 14. Input
695
-
696
- **`onChange` → `onValueChange`** (convención Base UI para controles con `value: string`). El signature se mantiene `(value, event)` — primer argumento el string parseado, segundo el `ChangeEvent` nativo:
697
-
698
- ```diff
699
- - <Input value={value} onChange={(v) => setValue(v)} />
700
- + <Input value={value} onValueChange={(v) => setValue(v)} />
701
- ```
702
-
703
- Sin otros breaking changes.
704
-
705
- ### 15. Empty
706
-
707
- **Renombrado.** `EmptyState` → `Empty`. Actualizá los imports:
708
-
709
- ```diff
710
- - import { EmptyState } from "@boxcustodia/library";
711
- + import { Empty } from "@boxcustodia/library";
712
- ```
713
-
714
- **Ícono por defecto cambió.** `FolderSearch` → `Inbox`. Si necesitás el anterior, pasalo explícito:
715
-
716
- ```diff
717
- - <Empty />
718
- + <Empty icon={<FolderSearch />} />
719
- ```
720
-
721
- Para estilar partes internas, usá `classNames` (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)).
722
-
723
- Slots de `classNames` disponibles: `header`, `media`, `title`, `description`, `content`.
724
-
725
- ### 16. Kbd
726
-
727
- **Variantes eliminadas.** Las props `size` (`default | sm | lg`) y `variant` (`default | error | outline | secondary`) ya no existen. v2 expone un único estilo. Para tamaños o colores custom, override con `className`:
728
-
729
- ```diff
730
- - <Kbd variant="error" size="lg">⌘</Kbd>
731
- + <Kbd className="bg-error text-error-foreground text-lg px-4">⌘</Kbd>
732
- ```
733
-
734
- También se eliminó el archivo `kbd.variants.ts` (`KbdVariants`) — no formaba parte del API público, pero si lo importabas directo del subpath ya no existe.
735
-
736
- ### 17. Loader
737
-
738
- **`containerClassName` eliminada.** Se reemplaza por `classNames.container` (slot del wrapper externo). `className` sigue estilando el ícono — sin cambio de semántica:
739
-
740
- ```diff
741
- - <Loader containerClassName="rounded-full bg-card p-2" />
742
- + <Loader classNames={{ container: "rounded-full bg-card p-2" }} />
743
- ```
744
-
745
- La prop `center` se mantiene igual.
746
-
747
- ### 18. Menu
748
-
749
- `contentProps` eliminada — usá `className` y `classNames` (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)). Para customizaciones de comportamiento sobre el popup (`onEscapeKeyDown`, `onPointerDownOutside`, etc.), componé con los primitives exportados: `MenuRoot`, `MenuTrigger`, `MenuPopup`.
750
-
751
- Slot de `classNames` disponible: `popup`.
752
-
753
- **`shortcut` ahora es display-only.** En v1, cada item podía declarar `shortcut`, `onShortcut` y `shortcutOptions` — `MenuShortcut` registraba un keyboard handler real y disparaba el `onShortcut` cuando se presionaba la combinación. En v2, `shortcut` es un string que **solo se renderiza** dentro del item; no se captura ningún teclado. Si dependías del handler, reemplazalo con un listener propio (`useEffect` + `keydown`, o un hook de shortcuts):
754
-
755
- ```diff
756
- - items={[
757
- - {
758
- - type: "item",
759
- - label: "Save",
760
- - shortcut: "Ctrl+S",
761
- - onShortcut: handleSave,
762
- - },
763
- - ]}
764
- + items={[
765
- + {
766
- + type: "item",
767
- + label: "Save",
768
- + shortcut: "Ctrl+S",
769
- + onSelect: handleSave,
770
- + },
771
- + ]}
772
- + // y registrá el atajo de teclado vos mismo en un useEffect
773
- ```
774
-
775
- **`trigger` ahora exige un `ReactElement`.** v1 aceptaba cualquier `ReactNode` (strings, fragments, `null`); v2 requiere un elemento React real porque Base UI usa `render={trigger}` para clonar props sobre el componente:
776
-
777
- ```diff
778
- - <Menu trigger="Open" items={...} />
779
- + <Menu trigger={<Button>Open</Button>} items={...} />
780
- ```
781
-
782
- ### 19. NumberInput
783
-
784
- **`onChange` → `onValueChange`** (convención Base UI). El callback recibe `number | null` — `null` cuando el campo está vacío o contiene un valor no parseable:
785
-
786
- ```diff
787
- - <NumberInput value={value} onChange={(v) => setValue(v)} />
788
- + <NumberInput value={value} onValueChange={(v) => v !== null && setValue(v)} />
789
- ```
790
-
791
- ### 20. Password
792
-
793
- **`containerClassName` eliminada.** v1 dejaba estilar el wrapper externo via `containerClassName`. v2 lo absorbe en `className` y suma el slot `classNames.toggle` para el botón del ojo. La arquitectura interna cambió — el wrapper ahora carga todo el styling visual (borde, alto, focus ring) y el input pasa a ser transparente adentro — pero la API desde afuera se simplifica: `className` estila el field visible como hacía v1.
794
-
795
- ```diff
796
- - <Password containerClassName="my-2" className="border-primary" />
797
- + <Password className="my-2 border-primary" />
798
- ```
799
-
800
- **`onChange` → `onValueChange`** (convención Base UI, alineado con Input):
801
-
802
- ```diff
803
- - <Password value={pwd} onChange={(v) => setPwd(v)} />
804
- + <Password value={pwd} onValueChange={(v) => setPwd(v)} />
805
- ```
806
-
807
- Slots de `classNames`: `input` (texto interno, font / color del texto tipeado), `toggle` (botón del ojo).
808
-
809
- ### 21. Popover
810
-
811
- `xProps` eliminadas — usá `className` y `classNames` (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)). `triggerClassName` también se eliminó: pasá `className` al elemento dentro del `trigger`.
812
-
813
- Slot de `classNames` disponible: `viewport`.
814
-
815
- **`offset` → `sideOffset`.** v1 tenía una sola prop `offset` para el gap eje-side. v2 la separa: `sideOffset` (gap perpendicular al trigger en el eje del side) y `alignOffset` (desplazamiento paralelo en el eje del align). Si sólo usabas `offset`, mové el valor a `sideOffset`:
816
-
817
- ```diff
818
- - <Popover offset={8}>…</Popover>
819
- + <Popover sideOffset={8}>…</Popover>
820
- ```
821
-
822
- **`trigger: ReactNode → ReactElement`.** v1 aceptaba cualquier `ReactNode` (strings, fragments, `null`); v2 requiere un `ReactElement` porque Base UI usa `render={trigger}` y necesita un componente para clonar props.
823
-
824
- ```diff
825
- - <Popover trigger="Open">…</Popover>
826
- + <Popover trigger={<Button>Open</Button>}>…</Popover>
827
- ```
828
-
829
- **`triggerAsChild` eliminada.** Base UI no usa el patrón `asChild` (ver [Migración de Radix UI a Base UI](#migración-de-radix-ui-a-base-ui)). Si necesitás un render custom sobre el trigger, componé con el primitive y la prop `render`:
830
-
831
- ```diff
832
- - <Popover trigger={<Button>Open</Button>} triggerAsChild={false} />
833
- + <PopoverRoot>
834
- + <PopoverTrigger render={<Button>Open</Button>} />
835
- + <PopoverPopup>…</PopoverPopup>
836
- + </PopoverRoot>
837
- ```
838
-
839
- ### 22. Skeleton
840
-
841
- **Drop de toda la API custom.** v1 exponía `width`, `height`, `isCircle` y `isLoading`. v2 sólo recibe `className` (más cualquier prop nativa de `div`).
842
-
843
- ```diff
844
- - <Skeleton width="15ch" height="1rem" isCircle isLoading={loading} />
845
- + {loading && <Skeleton className="h-4 w-[15ch] rounded-full" />}
846
- ```
847
-
848
- ### 23. Stepper
849
-
850
- `xProps` eliminadas — usá `className` y `classNames` (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)).
851
-
852
- Slots de `classNames` disponibles: `nav`, `item`, `trigger`, `indicator`, `title`, `description`, `separator`, `panel`, `content`.
853
-
854
- **`current` → `value`** y **`onChange` → `onValueChange`** (convención Base UI):
855
-
856
- ```diff
857
- - <Stepper items={steps} current={step} onChange={(i) => setStep(i)} />
858
- + <Stepper items={steps} value={step} onValueChange={(i) => setStep(i)} />
859
- ```
860
-
861
- **Pasaron a ser 1-indexed.** v1 numeraba los pasos desde `0` (`current={0}` = primer paso). v2 numera desde `1` (`value={1}` = primer paso). Actualizá los valores de estado:
862
-
863
- ```diff
864
- - const [step, setStep] = useState(0); // primer paso en v1
865
- + const [step, setStep] = useState(1); // primer paso en v2
866
- ```
867
-
868
- `defaultValue` también es 1-indexed.
869
-
870
- ### 24. Switch
871
-
872
- `xProps` eliminadas — usá `className` y `classNames` (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)).
873
-
874
- Slots de `classNames` disponibles: `wrapper`, `thumb`, `label`.
875
-
876
- **`onChange` → `onCheckedChange`** (convención Base UI para controles binarios). El callback ahora recibe `eventDetails` como segundo argumento:
877
-
878
- ```diff
879
- - <Switch checked={on} onChange={(v) => setOn(v)} />
880
- + <Switch checked={on} onCheckedChange={(v) => setOn(v)} />
881
- ```
882
-
883
- **`containerClassName` y `containerProps` eliminadas.** El wrapper externo ahora se estila vía `classNames.wrapper`:
884
-
885
- ```diff
886
- - <Switch containerClassName="gap-4" />
887
- + <Switch classNames={{ wrapper: "gap-4" }} />
888
- ```
889
-
890
- ### 25. Table
891
-
892
- **xProps eliminadas.** v1 exponía pass-through completo (`theadProps`, `tbodyProps`, `trProps`, `thProps`, `tdProps`, `containerProps`) y un set paralelo de `*ClassName` (`theadClassName`, `tbodyClassName`, `trClassName`, `thClassName`, `tdClassName`, `containerClassName`). v2 los reemplaza por un único `classNames` namespaceado (ver [patrón global](#nuevo-patrón-de-composición-y-estilado)).
893
-
894
- ```diff
895
- - <Table
896
- - theadClassName="bg-muted/50"
897
- - thClassName="uppercase"
898
- - trClassName="odd:bg-muted/20"
899
- - containerClassName="max-h-[500px]"
900
- - />
901
- + <Table
902
- + classNames={{
903
- + thead: "bg-muted/50",
904
- + th: "uppercase",
905
- + tr: "odd:bg-muted/20",
906
- + container: "max-h-[500px]",
907
- + }}
908
- + />
909
- ```
910
-
911
- Slots de `classNames` disponibles: `container`, `thead`, `tbody`, `headerRow`, `tr`, `th`, `td`. **`tr` aplica sólo a filas del body**; para la fila del header usá `headerRow`. v1 aplicaba `trClassName` a las dos por bug — si dependías de eso, dividí en `headerRow` + `tr` con la misma clase.
912
-
913
- Para comportamientos que `classNames` no cubre (handlers en `<tr>`, refs, custom `tfoot`, layout no estándar), usá los primitives exportados: `TableRoot`, `TableHeader`, `TableBody`, `TableRow`, `TableHead`, `TableCell`, `TableFooter`, `TableCaption`.
914
-
915
- **`onDoubleClick` → `onRowDoubleClick`.** v1 usaba `onDoubleClick` (colisionaba con el handler nativo de React sobre `<table>`). v2 lo renombra para alinear con `onRowClick`:
916
-
917
- ```diff
918
- - <Table onDoubleClick={(row) => openDetail(row)} />
919
- + <Table onRowDoubleClick={(row) => openDetail(row)} />
920
- ```
921
-
922
- ### 26. Tabs
923
-
924
- **Componentes renombrados.** Los hijos de `<Tabs>` adoptan el prefijo `Tabs*` (consistente con el root):
925
-
926
- ```diff
927
- - import { Tabs, TabList, TabTrigger, TabContent } from "@boxcustodia/library";
928
- + import { Tabs, TabsList, TabsTab, TabsPanel } from "@boxcustodia/library";
929
- ```
930
-
931
- - `TabList` → `TabsList`
932
- - `TabTrigger` → `TabsTab` (también exportado como `TabsTrigger`)
933
- - `TabContent` → `TabsPanel` (también exportado como `TabsContent`)
934
-
935
- **`variant` se mudó de `<Tabs>` a `<TabsList>`.** El indicator vive dentro del list — la prop pasa donde corresponde:
936
-
937
- ```diff
938
- - <Tabs variant="background">
939
- - <TabList>…</TabList>
940
- - </Tabs>
941
- + <Tabs>
942
- + <TabsList variant="background">…</TabsList>
943
- + </Tabs>
944
- ```
945
-
946
- **Valores de `variant`:** `"default"` → `"underline"` (default actual). `"background"` se mantiene.
947
-
948
- **`onChange` → `onValueChange`** (convención Base UI):
949
-
950
- ```diff
951
- - <Tabs value={tab} onChange={(v) => setTab(v)} />
952
- + <Tabs value={tab} onValueChange={(v) => setTab(v)} />
953
- ```
954
-
955
- ### 27. Tag
956
-
957
- **Variantes renombradas:**
958
-
959
- - `primary` → `default`
960
- - `borderless` → `ghost`
961
-
962
- ```diff
963
- - <Tag variant="primary">…</Tag>
964
- + <Tag variant="default">…</Tag>
965
-
966
- - <Tag variant="borderless">…</Tag>
967
- + <Tag variant="ghost">…</Tag>
968
- ```
969
-
970
- **Variante `success` eliminada.** Si la usabas, override con `className`:
971
-
972
- ```diff
973
- - <Tag variant="success">Done</Tag>
974
- + <Tag className="bg-success/10 text-success">Done</Tag>
975
- ```
976
-
977
- **`icon` eliminado.** v1 tenía slot dedicado para ícono. v2 acepta el ícono como children — la posición la define el orden en el JSX:
978
-
979
- ```diff
980
- - <Tag icon={<Check />}>Approved</Tag>
981
- + <Tag><Check /> Approved</Tag>
982
- ```
983
-
984
- **`rounded` eliminado.** v2 siempre renderea pill (rounded total). Para otros radios usá `className`:
985
-
986
- ```diff
987
- - <Tag rounded="square">…</Tag>
988
- + <Tag className="rounded-md">…</Tag>
989
- ```
990
-
991
- **`color` eliminado.** v2 no acepta color libre — usá una variant o override con `className`:
992
-
993
- ```diff
994
- - <Tag color="purple">…</Tag>
995
- + <Tag className="bg-purple-500 text-white">…</Tag>
996
- ```
997
-
998
- **`closable` y `onClose` eliminados.** v2 no incluye botón de cerrar. Componé el patrón vos:
999
-
1000
- ```diff
1001
- - <Tag closable onClose={handleRemove}>Item</Tag>
1002
- + <Tag>
1003
- + Item
1004
- + <button onClick={handleRemove}>
1005
- + <XIcon />
1006
- + </button>
1007
- + </Tag>
1008
- ```
1009
-
1010
- ### 28. Textarea
1011
-
1012
- **`onChange` → `onValueChange`** (convención Base UI, alineado con Input). El callback ahora recibe `(value: string, event)` en lugar del event nativo. Si dependías del signature nativo, usá `onValueChange` con el segundo arg:
1013
-
1014
- ```diff
1015
- - <Textarea value={text} onChange={(e) => setText(e.target.value)} />
1016
- + <Textarea value={text} onValueChange={(value) => setText(value)} />
1017
- ```
1018
-
1019
- ### 29. Timeline
1020
-
1021
- **xProps eliminadas.** v1 exponía `itemsProps` (HTMLProps por item) y `containerProps` (HTMLProps del root). Ambas removidas — para comportamiento custom usá los primitives (`TimelineRoot`, `TimelineItem`, `TimelineHeader`, `TimelineIndicator`, `TimelineSeparator`, `TimelineTitle`, `TimelineDate`, `TimelineContent`).
1022
-
1023
- **Props `className*` consolidadas en `classNames`.** El root se estila con `className`; el resto con el objeto namespaceado:
1024
-
1025
- ```diff
1026
- - <Timeline
1027
- - classNameContainer="max-w-md"
1028
- - classNameItem="ms-10"
1029
- - classNameItemDot="bg-primary"
1030
- - classNameItemContent="text-xs"
1031
- - />
1032
- + <Timeline
1033
- + className="max-w-md"
1034
- + classNames={{
1035
- + item: "ms-10",
1036
- + indicator: "bg-primary",
1037
- + content: "text-xs",
1038
- + }}
1039
- + />
1040
- ```
1041
-
1042
- Slots de `classNames` disponibles: `item`, `header`, `title`, `date`, `content`, `indicator`, `separator`.
1043
-
1044
- **Shape de `items` cambió.** v1: `{ content?, icon?, status?, color? }`. v2: `{ title?, content?, date?, indicator? }`.
1045
-
1046
- - `icon` → `indicator`
1047
- - `status` (`done | pending | error`) eliminado. Usá `defaultValue` / `value` en el root para marcar el step activo; los pasos previos quedan completados automáticamente.
1048
- - `color` eliminado. Override visual con `classNames.indicator`.
1049
-
1050
- ```diff
1051
- - <Timeline
1052
- - items={[
1053
- - { content: "Step 1", icon: <Check />, status: "done" },
1054
- - { content: "Step 2", icon: <Clock />, status: "pending", color: "amber" },
1055
- - ]}
1056
- - />
1057
- + <Timeline
1058
- + value={1}
1059
- + items={[
1060
- + { title: "Step 1", content: "...", indicator: <Check /> },
1061
- + { title: "Step 2", content: "...", indicator: <Clock /> },
1062
- + ]}
1063
- + />
1064
- ```
1065
-
1066
- ### 30. Toast
1067
-
1068
- **`<Toaster />` eliminado.** El render layer ahora vive dentro de `<LibraryProvider>` (un único provider que configura toda la infraestructura de la lib — toasts, tooltips, etc.). Reemplazá el wrapper en la raíz de tu app:
1069
-
1070
- ```diff
1071
- - import { Toaster } from "@boxcustodia/library";
1072
- -
1073
- - export function App() {
1074
- - return (
1075
- - <>
1076
- - <Toaster />
1077
- - <Router />
1078
- - </>
1079
- - );
1080
- - }
1081
- + import { LibraryProvider } from "@boxcustodia/library";
1082
- +
1083
- + export function App() {
1084
- + return (
1085
- + <LibraryProvider>
1086
- + <Router />
1087
- + </LibraryProvider>
1088
- + );
1089
- + }
1090
- ```
1091
-
1092
- Si necesitás un provider de Toast aislado (tests, microfrontends), el `<ToastProvider>` sigue exportado.
1093
-
1094
- **`type` → `variant`** (convención del resto de la lib):
1095
-
1096
- ```diff
1097
- - toast({ type: "info", title: "Saved" });
1098
- + toast({ variant: "info", title: "Saved" });
1099
- ```
1100
-
1101
- **`type: "loading"` eliminado.** Para estados async usá `toast.promise()`:
1102
-
1103
- ```diff
1104
- - toast({ type: "loading", description: "Guardando..." });
1105
- + toast.promise(saveData(), {
1106
- + loading: { description: "Guardando..." },
1107
- + success: () => ({ variant: "success", description: "Guardado!" }),
1108
- + error: (e) => ({ variant: "error", description: e.message }),
1109
- + });
1110
- ```
1111
-
1112
- **`duration` → `timeout`** (Base UI naming):
1113
-
1114
- ```diff
1115
- - toast({ description: "Saved", duration: 5000 });
1116
- + toast({ description: "Saved", timeout: 5000 });
1117
- ```
1118
-
1119
- **`useToastStore` eliminado.** El store Zustand interno se reemplaza por la API imperativa `toast()` (funciona desde cualquier lado) o por `useToastManager()` (cuando necesitás acceder al manager como hook):
1120
-
1121
- ```diff
1122
- - import { useToastStore } from "@boxcustodia/library";
1123
- - const addToast = useToastStore((s) => s.addToast);
1124
- - addToast({ description: "Saved" });
1125
- + import { toast } from "@boxcustodia/library";
1126
- + toast({ description: "Saved" });
1127
- ```
1128
-
1129
- ### 31. Tooltip
1130
-
1131
- **`label` → `content`** (rename — alinea con el resto de los composites: la prop que recibe el contenido del popup se llama `content`):
1132
-
1133
- ```diff
1134
- - <Tooltip label="Save changes"><Button>Save</Button></Tooltip>
1135
- + <Tooltip content="Save changes"><Button>Save</Button></Tooltip>
1136
- ```
1137
-
1138
- **`asChild` eliminada.** Base UI no usa el patrón `asChild` (ver [Migración de Radix UI a Base UI](#migración-de-radix-ui-a-base-ui)). Pasá el trigger directo como children — el composite lo monta sobre `<TooltipTrigger render={...}>` automáticamente:
1139
-
1140
- ```diff
1141
- - <Tooltip label="Hint" asChild>
1142
- - <Button>Hover me</Button>
1143
- - </Tooltip>
1144
- + <Tooltip content="Hint">
1145
- + <Button>Hover me</Button>
1146
- + </Tooltip>
1147
- ```
1148
-
1149
- **`children` tightened.** v1 aceptaba cualquier `object`. v2 exige un `ReactElement` único porque Base UI clona el elemento via `render={children}`. Strings, fragments, arrays o `null` no funcionan más:
1150
-
1151
- ```diff
1152
- - <Tooltip label="Hint">Save</Tooltip>
1153
- + <Tooltip content="Hint"><span>Save</span></Tooltip>
1154
- ```
1155
-
1156
- **`arrowClassName` → `classNames.arrow`** (consolidación al patrón global de slots):
1157
-
1158
- ```diff
1159
- - <Tooltip label="Hint" arrowClassName="text-primary">…</Tooltip>
1160
- + <Tooltip content="Hint" classNames={{ arrow: "text-primary" }}>…</Tooltip>
1161
- ```
1162
-
1163
- ### 32. Tree
1164
-
1165
- **Reescrito de raíz.** v1 estaba construido sobre `react-aria-components` y aceptaba un array recursivo `items: TreeNode[]` con `{ id, title, children }` que el componente paseaba solo. v2 está construido sobre [`@headless-tree/core`](https://headless-tree.lukasbach.com) — el consumer crea una **instancia** de tree (vía `useTree`) y se la pasa al componente. No hay equivalencia 1-a-1 entre las dos APIs: cambia el modelo mental, el shape de los datos, los hooks, el patrón de drag-and-drop y la composición.
1166
-
1167
- ```diff
1168
- - import { Tree } from "@boxcustodia/library";
1169
- -
1170
- - <Tree
1171
- - items={[
1172
- - { id: 1, title: "Folder", children: [
1173
- - { id: 2, title: "File", children: [] },
1174
- - ] },
1175
- - ]}
1176
- - />
1177
-
1178
- + import { useTree } from "@headless-tree/core";
1179
- + import { TreeRoot, TreeItem } from "@boxcustodia/library";
1180
- +
1181
- + const tree = useTree<MyData>({ /* dataLoader, features, ... */ });
1182
- +
1183
- + <TreeRoot tree={tree}>
1184
- + {tree.getItems().map((item) => (
1185
- + <TreeItem key={item.getId()} item={item} />
1186
- + ))}
1187
- + </TreeRoot>
1188
- ```
1189
-
1190
- ### 33. Pagination
1191
-
1192
- **Reescrito como composite + primitivos.** La API es mayormente nueva; el layout por defecto del composite ahora coincide con el viejo `TablePagination` (size selector + "X – Y de Z" + prev / next), no con el layout numerado de v1. El layout numerado se reconstruye componiendo primitivos.
1193
-
1194
- **`TablePagination` eliminado.** Era un componente aparte en v1; en v2 quedó absorbido en el composite `Pagination`. Cambiá el import — el shape de props también cambia (ver más abajo):
1195
-
1196
- ```diff
1197
- - import { TablePagination } from "@boxcustodia/library";
1198
- + import { Pagination } from "@boxcustodia/library";
1199
- ```
1200
-
1201
- **Props renombradas / cambiadas en `Pagination`:**
1202
-
1203
- - `initialCurrentPage` → `defaultCurrentPage`
1204
- - `onChange` → `onCurrentPageChange` + `onPageSizeChange` (separadas)
1205
- - `optionProps` y `containerProps` eliminadas — para customizar items, usá los primitives (`PaginationLink`, `PaginationPrevious`, `PaginationNext`, etc.)
1206
- - `TABLE_PAGE_SIZES` eliminada — usá `PAGINATION_SIZES`
1207
-
1208
- ```diff
1209
- - <Pagination
1210
- - totalItems={100}
1211
- - pageSize={10}
1212
- - initialCurrentPage={1}
1213
- - onChange={(page) => setPage(page)}
1214
- - />
1215
- + <Pagination
1216
- + totalItems={100}
1217
- + defaultPageSize={10}
1218
- + defaultCurrentPage={1}
1219
- + onCurrentPageChange={(page) => setPage(page)}
1220
- + onPageSizeChange={(size) => setSize(size)}
1221
- + />
1222
- ```
1223
-
1224
- **Layout numerado** — reconstruí con primitivos:
1225
-
1226
- ```tsx
1227
- import {
1228
- PaginationRoot,
1229
- PaginationFirst,
1230
- PaginationPrevious,
1231
- PaginationPages,
1232
- PaginationNext,
1233
- PaginationLast,
1234
- } from "@boxcustodia/library";
1235
-
1236
- <PaginationRoot totalItems={100} defaultPageSize={10}>
1237
- <PaginationFirst />
1238
- <PaginationPrevious />
1239
- <PaginationPages />
1240
- <PaginationNext />
1241
- <PaginationLast />
1242
- </PaginationRoot>;
1243
- ```
1244
-
1245
- ---
1246
-
1247
- ## Hooks
1248
-
1249
- ### 1. useClipboard
1250
-
1251
- **API rediseñada de tupla a objeto.** En v1 el hook devolvía `[copiedText, copy]` — un string con el último valor copiado y la función de copia. En v2 devuelve un objeto con estado completo: `copied` (booleano que se resetea solo), `error` (Error si falla), `copy` y `reset`.
1252
-
1253
- **Cambios:**
1254
-
1255
- - Retorno: `[string | null, (text) => Promise<boolean>]` → `{ copy, reset, copied, error }`.
1256
- - `copy` ya no es `async` ni devuelve `Promise<boolean>` — es fire-and-forget; inspeccioná `error` para detectar fallos.
1257
- - `copied` se resetea automáticamente después de `timeout` ms (default `2000`). Configurable vía `useClipboard({ timeout })`.
1258
- - Se agrega `reset()` para limpiar `copied` y `error` manualmente.
1259
-
1260
- ```diff
1261
- - const [copiedText, copy] = useClipboard();
1262
- + const { copy, copied, error, reset } = useClipboard({ timeout: 2000 });
1263
-
1264
- - <Button onClick={() => copy("hello")}>
1265
- - {copiedText === "hello" ? "Copied!" : "Copy"}
1266
- - </Button>
1267
- + <Button onClick={() => copy("hello")}>
1268
- + {copied ? "Copied!" : "Copy"}
1269
- + </Button>
1270
- ```
1271
-
1272
- ---
1273
-
1274
- ### 2. useHover
1275
-
1276
- **`isHovering` → `hovered`.** Find-and-replace. Los callbacks `onHoverStart` / `onHoverEnd` siguen funcionando igual.
1277
-
1278
- ```diff
1279
- - const { ref, isHovering } = useHover<HTMLDivElement>();
1280
- + const { ref, hovered } = useHover<HTMLDivElement>();
1281
- ```