@boxcustodia/library 2.0.0-alpha.10 → 2.0.0-alpha.12

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 (352) hide show
  1. package/dist/index.cjs.js +70 -70
  2. package/dist/index.css +2 -0
  3. package/dist/index.d.ts +420 -272
  4. package/dist/index.es.js +34448 -27816
  5. package/dist/theme.css +1 -1
  6. package/package.json +11 -6
  7. package/src/__doc__/Changelog.mdx +6 -0
  8. package/src/__doc__/Components.mdx +73 -0
  9. package/src/__doc__/Examples.tsx +69 -0
  10. package/src/__doc__/Icons.mdx +41 -0
  11. package/src/__doc__/Intro.mdx +138 -0
  12. package/src/__doc__/MCP.mdx +71 -0
  13. package/src/__doc__/Migration.mdx +475 -0
  14. package/src/__doc__/Theme.mdx +132 -0
  15. package/src/__doc__/Types.mdx +252 -0
  16. package/src/components/alert/alert.stories.tsx +142 -0
  17. package/src/components/alert/alert.tsx +109 -0
  18. package/src/components/alert/index.ts +7 -0
  19. package/src/components/alert-dialog/alert-dialog.stories.tsx +173 -0
  20. package/src/components/alert-dialog/alert-dialog.test.tsx +49 -0
  21. package/src/components/alert-dialog/alert-dialog.tsx +265 -0
  22. package/src/components/alert-dialog/index.ts +1 -0
  23. package/src/components/auto-complete/auto-complete-primitives.tsx +155 -0
  24. package/src/components/auto-complete/auto-complete.stories.tsx +241 -0
  25. package/src/components/auto-complete/auto-complete.tsx +82 -0
  26. package/src/components/auto-complete/index.ts +2 -0
  27. package/src/components/avatar/avatar.stories.tsx +84 -0
  28. package/src/components/avatar/avatar.test.tsx +61 -0
  29. package/src/components/avatar/avatar.tsx +104 -0
  30. package/src/components/avatar/index.ts +1 -0
  31. package/src/components/background-image/background-image.stories.tsx +21 -0
  32. package/src/components/background-image/background-image.test.tsx +29 -0
  33. package/src/components/background-image/background-image.tsx +23 -0
  34. package/src/components/background-image/index.ts +1 -0
  35. package/src/components/button/button.stories.tsx +396 -0
  36. package/src/components/button/button.test.tsx +58 -0
  37. package/src/components/button/button.tsx +31 -0
  38. package/src/components/button/button.variants.ts +44 -0
  39. package/src/components/button/components/base-button.tsx +86 -0
  40. package/src/components/button/components/loader-overlay.tsx +21 -0
  41. package/src/components/button/components/loading-icon.tsx +47 -0
  42. package/src/components/button/index.ts +3 -0
  43. package/src/components/calendar/calendar.model.ts +86 -0
  44. package/src/components/calendar/calendar.stories.tsx +155 -0
  45. package/src/components/calendar/calendar.test.tsx +12 -0
  46. package/src/components/calendar/calendar.tsx +185 -0
  47. package/src/components/calendar/components/calendar-navigation.tsx +141 -0
  48. package/src/components/calendar/components/day.tsx +61 -0
  49. package/src/components/calendar/components/decade-view.tsx +45 -0
  50. package/src/components/calendar/components/index.ts +6 -0
  51. package/src/components/calendar/components/month-view.tsx +58 -0
  52. package/src/components/calendar/components/week-days.tsx +27 -0
  53. package/src/components/calendar/components/year-view.tsx +29 -0
  54. package/src/components/calendar/hooks/index.ts +4 -0
  55. package/src/components/calendar/hooks/use-calendar-navigation.ts +79 -0
  56. package/src/components/calendar/hooks/use-calendar.ts +90 -0
  57. package/src/components/calendar/hooks/use-multiple-calendar.ts +34 -0
  58. package/src/components/calendar/hooks/use-range-calendar.ts +91 -0
  59. package/src/components/calendar/hooks/use-single-calendar.ts +18 -0
  60. package/src/components/calendar/index.ts +1 -0
  61. package/src/components/calendar/utils/typeguards.ts +7 -0
  62. package/src/components/card/card.stories.tsx +116 -0
  63. package/src/components/card/card.tsx +74 -0
  64. package/src/components/card/index.ts +1 -0
  65. package/src/components/center/center.stories.tsx +81 -0
  66. package/src/components/center/center.tsx +24 -0
  67. package/src/components/center/index.ts +1 -0
  68. package/src/components/checkbox/checkbox.stories.tsx +307 -0
  69. package/src/components/checkbox/checkbox.tsx +273 -0
  70. package/src/components/checkbox/index.ts +1 -0
  71. package/src/components/checkbox-group/checkbox-group.stories.tsx +104 -0
  72. package/src/components/checkbox-group/checkbox-group.tsx +16 -0
  73. package/src/components/checkbox-group/index.ts +1 -0
  74. package/src/components/combobox/combobox.stories.tsx +339 -0
  75. package/src/components/combobox/combobox.tsx +892 -0
  76. package/src/components/combobox/index.ts +1 -0
  77. package/src/components/date-picker/date-input.stories.tsx +158 -0
  78. package/src/components/date-picker/date-input.tsx +163 -0
  79. package/src/components/date-picker/date-picker.model.ts +90 -0
  80. package/src/components/date-picker/date-picker.stories.tsx +200 -0
  81. package/src/components/date-picker/date-picker.test.tsx +23 -0
  82. package/src/components/date-picker/date-picker.tsx +298 -0
  83. package/src/components/date-picker/date-picker.utils.ts +260 -0
  84. package/src/components/date-picker/index.ts +3 -0
  85. package/src/components/date-picker/use-date-input-popover.ts +48 -0
  86. package/src/components/date-picker/use-date-input.ts +125 -0
  87. package/src/components/dialog/dialog.stories.tsx +171 -0
  88. package/src/components/dialog/dialog.test.tsx +68 -0
  89. package/src/components/dialog/dialog.tsx +277 -0
  90. package/src/components/dialog/index.ts +1 -0
  91. package/src/components/divider/divider.stories.tsx +70 -0
  92. package/src/components/divider/divider.test.tsx +22 -0
  93. package/src/components/divider/divider.tsx +23 -0
  94. package/src/components/divider/index.ts +1 -0
  95. package/src/components/dropzone/dropzone.stories.tsx +210 -0
  96. package/src/components/dropzone/dropzone.tsx +154 -0
  97. package/src/components/dropzone/file-types.ts +64 -0
  98. package/src/components/dropzone/index.ts +3 -0
  99. package/src/components/dropzone/upload-primitives.tsx +310 -0
  100. package/src/components/dropzone/use-dropzone.ts +122 -0
  101. package/src/components/empty-state/empty-state.stories.tsx +56 -0
  102. package/src/components/empty-state/empty-state.tsx +39 -0
  103. package/src/components/empty-state/index.ts +1 -0
  104. package/src/components/field/field.stories.tsx +223 -0
  105. package/src/components/field/field.tsx +229 -0
  106. package/src/components/field/index.ts +1 -0
  107. package/src/components/form/form.stories.tsx +594 -0
  108. package/src/components/form/form.tsx +30 -0
  109. package/src/components/form/index.ts +1 -0
  110. package/src/components/heading/heading.stories.tsx +74 -0
  111. package/src/components/heading/heading.tsx +28 -0
  112. package/src/components/heading/heading.variants.ts +27 -0
  113. package/src/components/heading/index.ts +1 -0
  114. package/src/components/index.ts +46 -0
  115. package/src/components/input/index.ts +1 -0
  116. package/src/components/input/input.stories.tsx +104 -0
  117. package/src/components/input/input.tsx +75 -0
  118. package/src/components/kbd/index.ts +1 -0
  119. package/src/components/kbd/kbd.stories.tsx +40 -0
  120. package/src/components/kbd/kbd.tsx +31 -0
  121. package/src/components/kbd/kbd.variants.ts +26 -0
  122. package/src/components/label/index.ts +1 -0
  123. package/src/components/label/label.stories.tsx +68 -0
  124. package/src/components/label/label.test.tsx +61 -0
  125. package/src/components/label/label.tsx +62 -0
  126. package/src/components/loader/index.ts +1 -0
  127. package/src/components/loader/loader.stories.tsx +60 -0
  128. package/src/components/loader/loader.test.tsx +26 -0
  129. package/src/components/loader/loader.tsx +60 -0
  130. package/src/components/menu/index.ts +2 -0
  131. package/src/components/menu/menu-primitives.tsx +248 -0
  132. package/src/components/menu/menu.stories.tsx +203 -0
  133. package/src/components/menu/menu.tsx +100 -0
  134. package/src/components/menu/util/render-menu-item.tsx +54 -0
  135. package/src/components/multi-select/hooks/use-multi-select.ts +66 -0
  136. package/src/components/multi-select/index.ts +1 -0
  137. package/src/components/multi-select/multi-select.stories.tsx +294 -0
  138. package/src/components/multi-select/multi-select.tsx +300 -0
  139. package/src/components/multi-select/multi-select.variants.ts +22 -0
  140. package/src/components/number-input/index.ts +1 -0
  141. package/src/components/number-input/number-input.stories.tsx +209 -0
  142. package/src/components/number-input/number-input.test.tsx +87 -0
  143. package/src/components/number-input/number-input.tsx +230 -0
  144. package/src/components/pagination/components/pagination-option.tsx +27 -0
  145. package/src/components/pagination/index.ts +1 -0
  146. package/src/components/pagination/pagination.stories.tsx +80 -0
  147. package/src/components/pagination/pagination.test.tsx +76 -0
  148. package/src/components/pagination/pagination.tsx +102 -0
  149. package/src/components/password/index.ts +1 -0
  150. package/src/components/password/password.stories.tsx +104 -0
  151. package/src/components/password/password.tsx +71 -0
  152. package/src/components/popover/index.ts +1 -0
  153. package/src/components/popover/popover.stories.tsx +213 -0
  154. package/src/components/popover/popover.tsx +203 -0
  155. package/src/components/progress/index.ts +1 -0
  156. package/src/components/progress/progress.stories.tsx +124 -0
  157. package/src/components/progress/progress.test.tsx +25 -0
  158. package/src/components/progress/progress.tsx +124 -0
  159. package/src/components/scroll-area/index.ts +1 -0
  160. package/src/components/scroll-area/scroll-area.stories.tsx +166 -0
  161. package/src/components/scroll-area/scroll-area.tsx +64 -0
  162. package/src/components/select/index.ts +1 -0
  163. package/src/components/select/select.stories.tsx +253 -0
  164. package/src/components/select/select.tsx +430 -0
  165. package/src/components/show/index.ts +1 -0
  166. package/src/components/show/show.stories.tsx +197 -0
  167. package/src/components/show/show.test.tsx +41 -0
  168. package/src/components/show/show.tsx +16 -0
  169. package/src/components/skeleton/index.ts +1 -0
  170. package/src/components/skeleton/skeleton.stories.tsx +36 -0
  171. package/src/components/skeleton/skeleton.test.tsx +14 -0
  172. package/src/components/skeleton/skeleton.tsx +15 -0
  173. package/src/components/stack/index.ts +1 -0
  174. package/src/components/stack/stack.stories.tsx +194 -0
  175. package/src/components/stack/stack.tsx +52 -0
  176. package/src/components/stepper/Stepper.tsx +190 -0
  177. package/src/components/stepper/context/stepper-context.tsx +11 -0
  178. package/src/components/stepper/index.ts +1 -0
  179. package/src/components/stepper/stepper.stories.tsx +130 -0
  180. package/src/components/stepper/stepper.test.tsx +91 -0
  181. package/src/components/switch/index.ts +1 -0
  182. package/src/components/switch/switch.stories.tsx +122 -0
  183. package/src/components/switch/switch.test.tsx +30 -0
  184. package/src/components/switch/switch.tsx +86 -0
  185. package/src/components/table/index.ts +3 -0
  186. package/src/components/table/table-primitives.tsx +122 -0
  187. package/src/components/table/table.model.ts +20 -0
  188. package/src/components/table/table.stories.tsx +169 -0
  189. package/src/components/table/table.test.tsx +91 -0
  190. package/src/components/table/table.tsx +109 -0
  191. package/src/components/table-pagination/index.ts +2 -0
  192. package/src/components/table-pagination/table-pagination.model.ts +2 -0
  193. package/src/components/table-pagination/table-pagination.stories.tsx +23 -0
  194. package/src/components/table-pagination/table-pagination.test.tsx +32 -0
  195. package/src/components/table-pagination/table-pagination.tsx +108 -0
  196. package/src/components/tabs/context/tabs-context.tsx +14 -0
  197. package/src/components/tabs/index.ts +1 -0
  198. package/src/components/tabs/tabs.stories.tsx +182 -0
  199. package/src/components/tabs/tabs.test.tsx +61 -0
  200. package/src/components/tabs/tabs.tsx +175 -0
  201. package/src/components/tag/index.ts +2 -0
  202. package/src/components/tag/tag.stories.tsx +170 -0
  203. package/src/components/tag/tag.test.tsx +18 -0
  204. package/src/components/tag/tag.tsx +99 -0
  205. package/src/components/tag/tag.variants.ts +31 -0
  206. package/src/components/textarea/index.ts +1 -0
  207. package/src/components/textarea/textarea.stories.tsx +73 -0
  208. package/src/components/textarea/textarea.tsx +105 -0
  209. package/src/components/timeline/index.ts +1 -0
  210. package/src/components/timeline/timeline-status.ts +5 -0
  211. package/src/components/timeline/timeline.stories.tsx +84 -0
  212. package/src/components/timeline/timeline.tsx +147 -0
  213. package/src/components/toast/index.ts +1 -0
  214. package/src/components/toast/toast.stories.tsx +392 -0
  215. package/src/components/toast/toast.test.tsx +50 -0
  216. package/src/components/toast/toast.tsx +411 -0
  217. package/src/components/tooltip/index.ts +1 -0
  218. package/src/components/tooltip/tooltip.stories.tsx +226 -0
  219. package/src/components/tooltip/tooltip.test.tsx +46 -0
  220. package/src/components/tooltip/tooltip.tsx +171 -0
  221. package/src/components/tree/hooks/use-controllable-tree-state.ts +80 -0
  222. package/src/components/tree/index.ts +2 -0
  223. package/src/components/tree/tree-primitives.tsx +126 -0
  224. package/src/components/tree/tree.stories.tsx +468 -0
  225. package/src/components/tree/tree.tsx +42 -0
  226. package/src/hooks/index.ts +26 -0
  227. package/src/hooks/useArray/__doc__/useArray.stories.tsx +100 -0
  228. package/src/hooks/useArray/__test__/useArray.test.tsx +88 -0
  229. package/src/hooks/useArray/index.ts +1 -0
  230. package/src/hooks/useArray/useArray.ts +76 -0
  231. package/src/hooks/useAsync/__doc__/useAsync.stories.tsx +149 -0
  232. package/src/hooks/useAsync/__test__/useAsync.test.tsx +68 -0
  233. package/src/hooks/useAsync/index.ts +1 -0
  234. package/src/hooks/useAsync/useAsync.ts +58 -0
  235. package/src/hooks/useClickOutside/__doc__/useClickOutside.stories.tsx +40 -0
  236. package/src/hooks/useClickOutside/__test__/useClickOutside.test.tsx +33 -0
  237. package/src/hooks/useClickOutside/index.ts +1 -0
  238. package/src/hooks/useClickOutside/useClickOutside.ts +26 -0
  239. package/src/hooks/useClipboard/__doc__/useClipboard.stories.tsx +45 -0
  240. package/src/hooks/useClipboard/__test__/useClipboard.test.tsx +19 -0
  241. package/src/hooks/useClipboard/index.ts +1 -0
  242. package/src/hooks/useClipboard/useClipboard.tsx +28 -0
  243. package/src/hooks/useDebounceCallback/__doc__/useDebouncedCallback.stories.tsx +84 -0
  244. package/src/hooks/useDebounceCallback/index.ts +1 -0
  245. package/src/hooks/useDebounceCallback/useDebouncedCallback.ts +23 -0
  246. package/src/hooks/useDebounceValue/__doc__/useDebouncedValue.stories.tsx +75 -0
  247. package/src/hooks/useDebounceValue/index.ts +1 -0
  248. package/src/hooks/useDebounceValue/useDebouncedValue.ts +17 -0
  249. package/src/hooks/useDisclosure/__doc__/useDisclosure.stories.tsx +39 -0
  250. package/src/hooks/useDisclosure/__test__/useDisclosure.test.ts +43 -0
  251. package/src/hooks/useDisclosure/index.ts +1 -0
  252. package/src/hooks/useDisclosure/useDisclosure.ts +37 -0
  253. package/src/hooks/useDocumentTitle/__doc__/useDocumentTitle.stories.tsx +26 -0
  254. package/src/hooks/useDocumentTitle/index.ts +1 -0
  255. package/src/hooks/useDocumentTitle/useDocumentTitle.tsx +11 -0
  256. package/src/hooks/useEventListener/__doc__/useEventListener.stories.tsx +28 -0
  257. package/src/hooks/useEventListener/__test__/useEventListener.test.tsx +26 -0
  258. package/src/hooks/useEventListener/index.ts +1 -0
  259. package/src/hooks/useEventListener/useEventListener.ts +25 -0
  260. package/src/hooks/useFocusTrap/__doc__/useFocusTrap.stories.tsx +37 -0
  261. package/src/hooks/useFocusTrap/index.ts +1 -0
  262. package/src/hooks/useFocusTrap/scopeTab.ts +38 -0
  263. package/src/hooks/useFocusTrap/tabbable.ts +70 -0
  264. package/src/hooks/useFocusTrap/useFocusTrap.ts +78 -0
  265. package/src/hooks/useHotkey/__docs__/useHotkey.stories.tsx +116 -0
  266. package/src/hooks/useHotkey/__test__/useHotkey.test.tsx +105 -0
  267. package/src/hooks/useHotkey/__utils__/create-hotkey-listener.ts +25 -0
  268. package/src/hooks/useHotkey/__utils__/index.ts +3 -0
  269. package/src/hooks/useHotkey/__utils__/is-input-field.ts +14 -0
  270. package/src/hooks/useHotkey/__utils__/match-key-modifiers.ts +25 -0
  271. package/src/hooks/useHotkey/index.ts +1 -0
  272. package/src/hooks/useHotkey/useHotkey.ts +34 -0
  273. package/src/hooks/useHover/__doc__/useHover.stories.tsx +41 -0
  274. package/src/hooks/useHover/__test__/useHover.test.tsx +45 -0
  275. package/src/hooks/useHover/index.ts +1 -0
  276. package/src/hooks/useHover/useHover.tsx +40 -0
  277. package/src/hooks/useIsVisible/__doc__/useIsVisible.stories.tsx +60 -0
  278. package/src/hooks/useIsVisible/index.ts +1 -0
  279. package/src/hooks/useIsVisible/useIsVisible.tsx +50 -0
  280. package/src/hooks/useLocalStorage/__doc__/useLocalStorage.stories.tsx +86 -0
  281. package/src/hooks/useLocalStorage/__test__/useLocalStorage.test.ts +85 -0
  282. package/src/hooks/useLocalStorage/index.ts +1 -0
  283. package/src/hooks/useLocalStorage/useLocalStorage.ts +57 -0
  284. package/src/hooks/useMediaQuery/__doc__/useMediaQuery.stories.tsx +39 -0
  285. package/src/hooks/useMediaQuery/index.ts +1 -0
  286. package/src/hooks/useMediaQuery/useMediaQuery.ts +22 -0
  287. package/src/hooks/useMemoizedFn/index.ts +1 -0
  288. package/src/hooks/useMemoizedFn/useMemoizedFn.ts +32 -0
  289. package/src/hooks/useMutation/__doc__/useMutation.stories.tsx +111 -0
  290. package/src/hooks/useMutation/__test__/useMutation.test.tsx +83 -0
  291. package/src/hooks/useMutation/index.ts +1 -0
  292. package/src/hooks/useMutation/useMutation.tsx +60 -0
  293. package/src/hooks/useObject/__doc__/useObject.stories.tsx +119 -0
  294. package/src/hooks/useObject/__test__/useObject.test.tsx +87 -0
  295. package/src/hooks/useObject/index.ts +1 -0
  296. package/src/hooks/useObject/useObject.tsx +48 -0
  297. package/src/hooks/usePagination/__doc__/usePagination.stories.tsx +72 -0
  298. package/src/hooks/usePagination/__test__/usePagination.test.tsx +98 -0
  299. package/src/hooks/usePagination/index.ts +2 -0
  300. package/src/hooks/usePagination/usePagination.tsx +74 -0
  301. package/src/hooks/usePortal/__doc__/usePortal.stories.tsx +19 -0
  302. package/src/hooks/usePortal/__test__/usePortal.test.tsx +20 -0
  303. package/src/hooks/usePortal/index.ts +1 -0
  304. package/src/hooks/usePortal/usePortal.ts +40 -0
  305. package/src/hooks/usePreventCloseWindow/__doc__/usePreventCloseWindow.stories.tsx +32 -0
  306. package/src/hooks/usePreventCloseWindow/index.ts +1 -0
  307. package/src/hooks/usePreventCloseWindow/usePreventCloseWindow.ts +33 -0
  308. package/src/hooks/useRangePagination/__test__/useRangePagination.test.tsx +63 -0
  309. package/src/hooks/useRangePagination/index.ts +2 -0
  310. package/src/hooks/useRangePagination/useRangePagination.tsx +72 -0
  311. package/src/hooks/useSelection/__doc__/useSelection.stories.tsx +140 -0
  312. package/src/hooks/useSelection/__test__/useSelection.test.tsx +57 -0
  313. package/src/hooks/useSelection/index.ts +1 -0
  314. package/src/hooks/useSelection/useSelection.ts +121 -0
  315. package/src/hooks/useStep/__doc__/useStep.stories.tsx +98 -0
  316. package/src/hooks/useStep/__test__/useStep.test.ts +51 -0
  317. package/src/hooks/useStep/index.ts +1 -0
  318. package/src/hooks/useStep/useStep.ts +57 -0
  319. package/src/hooks/useToggle/__doc__/useToggle.stories.tsx +25 -0
  320. package/src/hooks/useToggle/__test__/useToggle.test.tsx +43 -0
  321. package/src/hooks/useToggle/index.ts +1 -0
  322. package/src/hooks/useToggle/useToggle.ts +16 -0
  323. package/src/index.ts +6 -0
  324. package/src/lib/cn.ts +8 -0
  325. package/src/lib/index.ts +1 -0
  326. package/src/models/Generic.model.ts +67 -0
  327. package/src/models/index.ts +1 -0
  328. package/src/providers/index.ts +2 -0
  329. package/src/providers/library-provider.tsx +44 -0
  330. package/src/providers/theme/ThemeProvider.tsx +25 -0
  331. package/src/providers/theme/index.ts +3 -0
  332. package/src/providers/theme/types.ts +11 -0
  333. package/src/providers/theme/useThemeProps.ts +25 -0
  334. package/src/stores/theme.store.ts +31 -0
  335. package/src/styles/components.css +4 -0
  336. package/src/styles/index.css +2 -0
  337. package/src/styles/library.css +2 -0
  338. package/src/styles/theme.css +232 -0
  339. package/src/utils/dates/parseDateRange.utility.ts +39 -0
  340. package/src/utils/form.tsx +91 -0
  341. package/src/utils/functions/createSafeContext.ts +17 -0
  342. package/src/utils/functions/ensureReactElement.tsx +30 -0
  343. package/src/utils/functions/getFormData.ts +19 -0
  344. package/src/utils/functions/index.ts +4 -0
  345. package/src/utils/functions/mergeRefs.ts +18 -0
  346. package/src/utils/index.ts +3 -0
  347. package/src/utils/strings/extractInitials.utility.ts +10 -0
  348. package/src/utils/strings/index.ts +1 -0
  349. package/src/utils/tests/click.ts +3 -0
  350. package/src/utils/tests/index.ts +2 -0
  351. package/src/utils/tests/keyboard.ts +21 -0
  352. package/src/utils/tests/type.ts +6 -0
@@ -0,0 +1,475 @@
1
+ import { Meta, Source } from "@storybook/addon-docs/blocks";
2
+
3
+ <Meta title="Documentation/Migration v1 → v2" />
4
+
5
+ # Migración v1 → v2
6
+
7
+ Esta guía te lleva paso a paso desde `@boxcustodia/library@1.x` hasta la versión estable de v2.
8
+
9
+ ---
10
+
11
+ ## 1. Version 2.0.0-alpha.6
12
+
13
+ ### Instalación
14
+
15
+ ```bash
16
+ npm install @boxcustodia/library@2.0.0-alpha.6
17
+ ```
18
+
19
+ ### Cambios necesarios
20
+
21
+ #### Provider
22
+
23
+ El wrapper `Toaster` fue deprecado. Reemplazalo por `LibraryProvider`.
24
+
25
+ ```tsx
26
+ // Antes
27
+ import { Toaster } from "@boxcustodia/library";
28
+
29
+ <Toaster />;
30
+ ```
31
+
32
+ ```tsx
33
+ // Ahora
34
+ import { LibraryProvider } from "@boxcustodia/library";
35
+
36
+ <LibraryProvider>
37
+ <App />
38
+ </LibraryProvider>;
39
+ ```
40
+
41
+ ---
42
+
43
+ #### Avatar
44
+
45
+ La prop `variant` fue renombrada a `shape`. Los valores no cambian.
46
+
47
+ ```tsx
48
+ // Antes
49
+ <Avatar variant="circle" />
50
+
51
+ // Ahora
52
+ <Avatar shape="circle" />
53
+ ```
54
+
55
+ ---
56
+
57
+ #### Checkbox
58
+
59
+ La prop `onChange` fue renombrada a `onCheckedChange`. `checked` y `defaultChecked` no cambian.
60
+
61
+ ```tsx
62
+ // Antes
63
+ <Checkbox onChange={(value) => setValue(value)} />
64
+
65
+ // Ahora
66
+ <Checkbox onCheckedChange={(value) => setValue(value)} />
67
+ ```
68
+
69
+ Las siguientes props fueron eliminadas: `size`, `containerClassName`, `containerProps`.
70
+
71
+ ---
72
+
73
+ #### Switch
74
+
75
+ La prop `onChange` fue renombrada a `onCheckedChange`. `checked` y `defaultChecked` no cambian.
76
+
77
+ ```tsx
78
+ // Antes
79
+ <Switch onChange={(value) => setValue(value)} />
80
+
81
+ // Ahora
82
+ <Switch onCheckedChange={(value) => setValue(value)} />
83
+ ```
84
+
85
+ Las siguientes props fueron eliminadas: `containerClassName`, `containerProps`. El control de estilos ahora es via `className`.
86
+
87
+ ---
88
+
89
+ #### Kbd
90
+
91
+ Las siguientes props fueron eliminadas: `size`, `variant`.
92
+
93
+ ---
94
+
95
+ #### Skeleton
96
+
97
+ Las props `width`, `height`, `isCircle` e `isLoading` fueron eliminadas. El control de tamaño y forma ahora es via `className`. Además, ya no acepta `children` — usá un ternario para controlar la visibilidad.
98
+
99
+ ```tsx
100
+ // Antes
101
+ <Skeleton width="200px" height="16px" isLoading={isLoading}>
102
+ <p>Contenido</p>
103
+ </Skeleton>;
104
+
105
+ // Ahora
106
+ {
107
+ isLoading ? <Skeleton className="h-4 w-[200px]" /> : <p>Contenido</p>;
108
+ }
109
+ ```
110
+
111
+ ---
112
+
113
+ #### Dialog
114
+
115
+ `DialogContent` fue renombrado a `DialogPopup`. La prop `trigger` cambió de `ReactNode` a `ReactElement`.
116
+
117
+ Las siguientes props fueron eliminadas: `triggerProps`, `contentProps`, `contentClassName`, `headerProps`, `headerClassName`, `titleProps`, `titleClassName`, `descriptionProps`, `descriptionClassName`, `footerProps`, `footerClassName`, `focus`.
118
+
119
+ ---
120
+
121
+ #### AlertDialog
122
+
123
+ La prop `asChild` del composite fue eliminada — ya no es necesaria.
124
+
125
+ ---
126
+
127
+ #### Tooltip
128
+
129
+ La prop `label` fue renombrada a `content`. La prop `asChild` fue eliminada.
130
+
131
+ ```tsx
132
+ // Antes
133
+ <Tooltip label="Más información" asChild>
134
+ <button>Hover</button>
135
+ </Tooltip>
136
+
137
+ // Ahora
138
+ <Tooltip content="Más información">
139
+ <button>Hover</button>
140
+ </Tooltip>
141
+ ```
142
+
143
+ ---
144
+
145
+ #### Toast
146
+
147
+ La prop `type` fue renombrada a `variant` en las llamadas directas a `toast`.
148
+
149
+ ```tsx
150
+ // Antes
151
+ toast({ type: "error", description: "Algo salió mal" });
152
+
153
+ // Ahora
154
+ toast({ variant: "error", description: "Algo salió mal" });
155
+ ```
156
+
157
+ ---
158
+
159
+ La API de `toast.promise` cambió. Ahora cada estado recibe un objeto con las props del toast en lugar de un string directo.
160
+
161
+ ```tsx
162
+ // Antes
163
+ toast.promise(mockSuccessPromise(), {
164
+ loading: "Guardando...",
165
+ success: (data) => data.message || "Guardado correctamente",
166
+ error: (error) => error.message || "Error al guardar",
167
+ });
168
+ ```
169
+
170
+ ```tsx
171
+ // Ahora
172
+ toast.promise(saveData(), {
173
+ loading: { description: "Guardando..." },
174
+ success: (data) => ({
175
+ variant: "success",
176
+ description: data.message || "Guardado correctamente",
177
+ }),
178
+ error: (error) => ({
179
+ variant: "error",
180
+ description: error.message || "Error al guardar",
181
+ }),
182
+ });
183
+ ```
184
+
185
+ ---
186
+
187
+ #### Componentes nuevos
188
+
189
+ Se agregaron los siguientes componentes. No requieren ningún cambio en tu código existente.
190
+
191
+ - **Alert** — notificaciones y mensajes de estado inline.
192
+ - **CheckboxGroup** — agrupa múltiples checkboxes con manejo de estado unificado.
193
+ - **Progress** — barra de progreso determinada e indeterminada.
194
+
195
+ ---
196
+
197
+ ## 2. Version 2.0.0-alpha.7
198
+
199
+ ### Instalación
200
+
201
+ ```bash
202
+ npm install @boxcustodia/library@2.0.0-alpha.7
203
+ ```
204
+
205
+ ### Cambios necesarios
206
+
207
+ #### Field
208
+
209
+ Las siguientes props fueron eliminadas: `labelClassName`, `labelProps`, `errorClassName`, `errorProps`.
210
+
211
+ La prop `error` cambió de `ReactNode` a `string | { message: ReactNode; match: FieldErrorMatch }`.
212
+
213
+ ```tsx
214
+ // Antes
215
+ <Field error={<span>Campo requerido</span>} />
216
+
217
+ // Ahora
218
+ <Field error="Campo requerido" />
219
+ ```
220
+
221
+ ---
222
+
223
+ #### Input
224
+
225
+ La integración con `ThemeProvider` fue eliminada. El control de estilos ahora es via `className`.
226
+
227
+ ---
228
+
229
+ #### Password
230
+
231
+ La prop `containerClassName` fue eliminada. Usá `className` para estilizar el input directamente, y un wrapper externo para controlar el contenedor.
232
+
233
+ ---
234
+
235
+ ## 3. Version 2.0.0-alpha.8
236
+
237
+ ### Instalación
238
+
239
+ ```bash
240
+ npm install @boxcustodia/library@2.0.0-alpha.8
241
+ ```
242
+
243
+ ### Cambios necesarios
244
+
245
+ #### Form
246
+
247
+ La API de `Form` cambió completamente. El componente ya no tiene acoplamiento con React Hook Form — ahora es agnóstico a cualquier estrategia de validación (HTML nativo, Zod, server actions, RHF, etc.).
248
+
249
+ **Si querés migrar a la nueva API**, revisá la story **Components/Form** en Storybook para ver los distintos modos de uso.
250
+
251
+ **Si no querés migrar todavía**, copiá el código desde la story **Form → WithReactHookForm** (tab "Show code") en un archivo de tu proyecto, por ejemplo `src/components/form/form.tsx`. El snippet ya exporta los helpers con los mismos nombres que usabas — `useForm`, `Form` y `FormField` — así que solo tenés que cambiar los imports:
252
+
253
+ ```tsx
254
+ // Antes
255
+ import { useForm, Form, FormField } from "@boxcustodia/library";
256
+
257
+ // Ahora
258
+ import { useForm, Form, FormField } from "@/components/form/form";
259
+ ```
260
+
261
+ El resto de tu código no necesita ningún cambio.
262
+
263
+ ---
264
+
265
+ ## 4. Version 2.0.0-alpha.10
266
+
267
+ ### Instalación
268
+
269
+ ```bash
270
+ npm install @boxcustodia/library@2.0.0-alpha.10
271
+ ```
272
+
273
+ ### Cambios necesarios
274
+
275
+ #### Calendar
276
+
277
+ El componente `Calendar` fue completamente reescrito usando `react-day-picker` en lugar de una implementación custom. La API cambió significativamente:
278
+
279
+ **Props eliminadas:**
280
+
281
+ - `initialView` — el calendar ahora solo soporta modo month.
282
+ - `view` / `onChangeView` — no hay control de vista (month/year/decade).
283
+ - `initialDate` — usá las props nativas de `react-day-picker`.
284
+ - `monthViewProps` — usá `classNames` para customizar estilos.
285
+ - `goBackProps`, `goNextProps`, `changeViewProps` — los controles de navegación son internos.
286
+
287
+ **Props nuevas (de react-day-picker):**
288
+
289
+ - `mode` — `"single"`, `"multiple"`, `"range"`.
290
+ - `captionLayout` — `"dropdown"` o `"buttons"` para seleccionar mes/año.
291
+ - `classNames` — object con clases para cada parte del calendar.
292
+ - `components` — customizar componentes internos (Dropdown, Chevron).
293
+ - `startMonth` / `endMonth` — rango de meses navegables.
294
+
295
+ ```tsx
296
+ // Antes
297
+ <Calendar
298
+ initialView="month"
299
+ disabled={(date) => date.getDay() === 0}
300
+ goBackProps={{ className: "custom" }}
301
+ />
302
+
303
+ // Ahora
304
+ <Calendar
305
+ mode="single"
306
+ disabled={(date) => date.getDay() === 0}
307
+ captionLayout="dropdown"
308
+ classNames={{ button_previous: "custom" }}
309
+ />
310
+ ```
311
+
312
+ ---
313
+
314
+ #### Popover
315
+
316
+ El componente `Popover` fue completamente reescrito usando Base UI en lugar de Radix. La API cambió significativamente:
317
+
318
+ **Props renombradas:**
319
+
320
+ - `contentClassName` → `popupClassName`
321
+ - `contentProps` → `popupProps`
322
+
323
+ **Props eliminadas:**
324
+
325
+ - `triggerAsChild` — el comportamiento ahora es el predeterminado. Usá `render` en lugar de `asChild`.
326
+ - `triggerClassName` — pasá `className` al elemento dentro del `render`.
327
+ - `offset` — se divide en dos props: `sideOffset` (brecha vertical/horizontal) y `alignOffset` (desplazamiento perpendicular).
328
+
329
+ **Cambios en el tipo de `trigger`:**
330
+
331
+ - Antes: `ReactNode`
332
+ - Ahora: `ReactElement` (se pasa directamente, no envuelto).
333
+
334
+ ```tsx
335
+ // Antes
336
+ <Popover trigger={<Button>Open</Button>} contentClassName="w-80">
337
+ Content
338
+ </Popover>
339
+
340
+ // Ahora
341
+ <Popover trigger={<Button>Open</Button>} popupClassName="w-80">
342
+ Content
343
+ </Popover>
344
+ ```
345
+
346
+ **Offset → sideOffset + alignOffset:**
347
+
348
+ ```tsx
349
+ // Antes
350
+ <Popover offset={8}>Content</Popover>
351
+
352
+ // Ahora
353
+ <Popover sideOffset={8} alignOffset={0}>Content</Popover>
354
+ ```
355
+
356
+ **Primitivas con `render`:**
357
+
358
+ Si usabas `PopoverTrigger` con `asChild`, reemplazá con `render`:
359
+
360
+ ```tsx
361
+ // Antes
362
+ <PopoverTrigger asChild>
363
+ <Button>Open</Button>
364
+ </PopoverTrigger>
365
+
366
+ // Ahora
367
+ <PopoverTrigger render={<Button>Open</Button>} />
368
+ ```
369
+
370
+ ---
371
+
372
+ #### DatePicker
373
+
374
+ El componente ahora soporta múltiples modos y cambió de API internamente.
375
+
376
+ **Props eliminadas:**
377
+
378
+ - `hideFooter` — usá `renderFooter` para controlar completamente el pie.
379
+
380
+ **Props nuevas:**
381
+
382
+ - `mode` — `"single"`, `"range"`, `"multiple"` para seleccionar el tipo de picker.
383
+
384
+ ```tsx
385
+ // Antes
386
+ <DatePicker value={date} onChange={setDate} hideFooter />
387
+
388
+ // Ahora
389
+ <DatePicker mode="single" value={date} onChange={setDate} renderFooter={() => null} />
390
+ ```
391
+
392
+ **Si necesitás un date picker editable:** Usá el nuevo componente `DateInput` que permite escribir la fecha directamente en el input además de seleccionar desde el calendar.
393
+
394
+ ---
395
+
396
+ ## 5. Version 2.0.0-alpha.11
397
+
398
+ ### Instalación
399
+
400
+ ```bash
401
+ npm install @boxcustodia/library@2.0.0-alpha.11
402
+ ```
403
+
404
+ ### Cambios necesarios
405
+
406
+ #### Combobox
407
+
408
+ El Combobox fue completamente reescrito usando Base UI en lugar de la arquitectura anterior. La API es significativamente diferente. Ahora soporta selección múltiple con chips dinámicos y una arquitectura de primitivas para casos de uso avanzados.
409
+
410
+ **Props renombradas:**
411
+
412
+ - `valueKey` → `getValue` (ahora una function `(item) => string`)
413
+ - `labelKey` → `getLabel` (ahora una function `(item) => string`)
414
+ - `renderOption` → `renderItem`
415
+ - `emptyMessage` → `emptyText`
416
+ - `searchPlaceholder` → `placeholder`
417
+ - `triggerProps` → `inputProps` (single) o `chipsProps` (multiple)
418
+ - `contentProps` → `popupProps`
419
+
420
+ **Props eliminadas:**
421
+
422
+ - `searchProps` — en modo multiple, el input ahora está en el popup
423
+ - `commandProps` — no necesario con la nueva arquitectura
424
+ - `contentClassName` — usá `popupProps` con `className`
425
+
426
+ **Props nuevas:**
427
+
428
+ - `multiple?: boolean` — habilita modo múltiple con chips dinámicos
429
+ - `getLabel: (item: TItem) => string` — extraer label del item
430
+ - `getValue: (item: TItem) => string` — extraer valor del item
431
+ - `renderItem?: (item: TItem) => ReactNode` — customizar contenido de cada item
432
+ - `showClear?: boolean` — mostrar botón clear (default `true`)
433
+ - `listProps?: ComponentProps` — customizar lista
434
+ - `itemProps?: ComponentProps` — customizar items
435
+
436
+ **Cambios de comportamiento:**
437
+
438
+ En single select, el input está en el trigger. En multiple select, los chips se renderizan en el trigger y el input para búsqueda va en el popup. Los chips se ajustan dinámicamente al ancho del contenedor — si no caben, muestran "+N más".
439
+
440
+ ```tsx
441
+ // Antes (single select)
442
+ <Combobox
443
+ items={fruits}
444
+ valueKey="id"
445
+ labelKey="name"
446
+ renderOption={(item) => item.name}
447
+ value={selected}
448
+ onChange={(val) => setSelected(val)}
449
+ />
450
+
451
+ // Ahora (single select)
452
+ <Combobox
453
+ items={fruits}
454
+ getLabel={(item) => item.name}
455
+ getValue={(item) => item.id}
456
+ renderItem={(item) => item.name}
457
+ value={selected}
458
+ onChange={(item) => setSelected(item)}
459
+ />
460
+
461
+ // Ahora (multiple select - NUEVO)
462
+ <Combobox
463
+ items={fruits}
464
+ multiple
465
+ getLabel={(item) => item.name}
466
+ getValue={(item) => item.id}
467
+ placeholder="Select fruits…"
468
+ value={selectedFruits}
469
+ onChange={setSelectedFruits}
470
+ />
471
+ ```
472
+
473
+ **Para casos avanzados:** Si los props de escape-hatch no son suficientes, usá las primitivas directamente: `ComboboxRoot`, `ComboboxInput`, `ComboboxChips`, `ComboboxChipsInput`, `ComboboxPopup`, `ComboboxList`, etc.
474
+
475
+ ---
@@ -0,0 +1,132 @@
1
+ import {
2
+ Canvas,
3
+ ColorItem,
4
+ ColorPalette,
5
+ Meta,
6
+ Source,
7
+ } from "@storybook/addon-docs/blocks";
8
+ import { BorderRadius } from "./Examples";
9
+
10
+ <Meta title="Documentation/Theme" />
11
+
12
+ # Theme
13
+
14
+ La librería permite la customización de los estilos mediante variables CSS y la personalización detallada de cada componente usando slots.
15
+
16
+ ## Personalización mediante Slots
17
+
18
+ Cada componente de la librería está construido con una arquitectura basada en slots, lo que permite una personalización detallada de cada parte del componente a nivel global. Los slots son identificados mediante el atributo `data-slot` en los elementos HTML subyacentes.
19
+
20
+ ### Cómo personalizar usando Slots
21
+
22
+ Puedes sobrescribir los estilos de cualquier slot utilizando selectores CSS que apunten al atributo `data-slot`. Esta personalización se puede aplicar globalmente en tu archivo CSS principal o dentro de un módulo CSS.
23
+
24
+ #### Ejemplo: Personalizando un Dialog
25
+
26
+ ```css
27
+ /* En tu archivo index.css */
28
+ [data-slot="input"] {
29
+ @apply h-12 rounded-xl border-primary; /* Aplica estilos a todos los inputs */
30
+ }
31
+
32
+ [data-slot="dialog-content"] {
33
+ @apply rounded-3xl; /* Aplica bordes más redondeados a todos los dialog */
34
+ }
35
+ ```
36
+
37
+ ## Border Radius
38
+
39
+ Estos son los bordes redondeados por defecto. Se puede customizar `--radius`. La clase `rounded` es equivalente a la mitad del valor de `--radius`
40
+
41
+ <BorderRadius />
42
+
43
+ ## Paleta de colores
44
+
45
+ Colores por defecto de la librería. Se puede customizar con las variables css
46
+
47
+ <ColorPalette>
48
+ <ColorItem
49
+ title="color.primary"
50
+ subtitle="Primary Colors"
51
+ colors={{
52
+ Primary: "var(--color-primary)",
53
+ PrimaryForeground: "var(--color-primary-foreground)",
54
+ }}
55
+ />
56
+ <ColorItem
57
+ title="color.secondary"
58
+ subtitle="Secondary Colors"
59
+ colors={{
60
+ Secondary: "var(--color-secondary)",
61
+ SecondaryForeground: "var(--color-secondary-foreground)",
62
+ }}
63
+ />
64
+ <ColorItem
65
+ title="color.error"
66
+ subtitle="Error Colors"
67
+ colors={{
68
+ error: "var(--color-error)",
69
+ errorForeground: "var(--color-error-foreground)",
70
+ }}
71
+ />
72
+ <ColorItem
73
+ title="color.success"
74
+ subtitle="Success Colors"
75
+ colors={{
76
+ Success: "var(--color-success)",
77
+ SuccessForeground: "var(--color-success-foreground)",
78
+ }}
79
+ />
80
+ <ColorItem
81
+ title="color.muted"
82
+ subtitle="Muted Colors"
83
+ colors={{
84
+ Muted: "var(--color-muted)",
85
+ MutedForeground: "var(--color-muted-foreground)",
86
+ }}
87
+ />
88
+ <ColorItem
89
+ title="color.accent"
90
+ subtitle="Accent Colors"
91
+ colors={{
92
+ Accent: "var(--color-accent)",
93
+ AccentForeground: "var(--color-accent-foreground)",
94
+ }}
95
+ />
96
+ <ColorItem
97
+ title="color.popover"
98
+ subtitle="Popover Colors"
99
+ colors={{
100
+ Popover: "var(--color-popover)",
101
+ PopoverForeground: "var(--color-popover-foreground)",
102
+ }}
103
+ />
104
+ <ColorItem
105
+ title="color.background"
106
+ subtitle="Background Colors"
107
+ colors={{
108
+ Background: "var(--color-background)",
109
+ }}
110
+ />
111
+ <ColorItem
112
+ title="color.foreground"
113
+ subtitle="Foreground Colors"
114
+ colors={{
115
+ Foreground: "var(--color-foreground)",
116
+ }}
117
+ />
118
+ <ColorItem
119
+ title="color.input"
120
+ subtitle="Input Colors"
121
+ colors={{
122
+ Input: "var(--color-input)",
123
+ }}
124
+ />
125
+ <ColorItem
126
+ title="color.ring"
127
+ subtitle="Ring Colors"
128
+ colors={{
129
+ Ring: "var(--color-ring)",
130
+ }}
131
+ />
132
+ </ColorPalette>