@boxcustodia/library 2.0.0-alpha.11 → 2.0.0-alpha.13

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 +38 -38
  2. package/dist/index.css +1 -1
  3. package/dist/index.d.ts +28 -29
  4. package/dist/index.es.js +6804 -6792
  5. package/package.json +4 -3
  6. package/src/__doc__/Changelog.mdx +6 -0
  7. package/src/__doc__/Components.mdx +73 -0
  8. package/src/__doc__/Examples.tsx +69 -0
  9. package/src/__doc__/Icons.mdx +41 -0
  10. package/src/__doc__/Intro.mdx +138 -0
  11. package/src/__doc__/MCP.mdx +71 -0
  12. package/src/__doc__/Migration.mdx +451 -0
  13. package/src/__doc__/Theme.mdx +132 -0
  14. package/src/__doc__/Types.mdx +252 -0
  15. package/src/components/alert/alert.stories.tsx +142 -0
  16. package/src/components/alert/alert.tsx +109 -0
  17. package/src/components/alert/index.ts +7 -0
  18. package/src/components/alert-dialog/alert-dialog.stories.tsx +173 -0
  19. package/src/components/alert-dialog/alert-dialog.test.tsx +49 -0
  20. package/src/components/alert-dialog/alert-dialog.tsx +265 -0
  21. package/src/components/alert-dialog/index.ts +1 -0
  22. package/src/components/auto-complete/auto-complete-primitives.tsx +155 -0
  23. package/src/components/auto-complete/auto-complete.stories.tsx +241 -0
  24. package/src/components/auto-complete/auto-complete.tsx +82 -0
  25. package/src/components/auto-complete/index.ts +2 -0
  26. package/src/components/avatar/avatar.stories.tsx +84 -0
  27. package/src/components/avatar/avatar.test.tsx +61 -0
  28. package/src/components/avatar/avatar.tsx +104 -0
  29. package/src/components/avatar/index.ts +1 -0
  30. package/src/components/background-image/background-image.stories.tsx +21 -0
  31. package/src/components/background-image/background-image.test.tsx +29 -0
  32. package/src/components/background-image/background-image.tsx +23 -0
  33. package/src/components/background-image/index.ts +1 -0
  34. package/src/components/button/button.stories.tsx +396 -0
  35. package/src/components/button/button.test.tsx +58 -0
  36. package/src/components/button/button.tsx +31 -0
  37. package/src/components/button/button.variants.ts +44 -0
  38. package/src/components/button/components/base-button.tsx +86 -0
  39. package/src/components/button/components/loader-overlay.tsx +21 -0
  40. package/src/components/button/components/loading-icon.tsx +47 -0
  41. package/src/components/button/index.ts +3 -0
  42. package/src/components/calendar/calendar.model.ts +86 -0
  43. package/src/components/calendar/calendar.stories.tsx +155 -0
  44. package/src/components/calendar/calendar.test.tsx +12 -0
  45. package/src/components/calendar/calendar.tsx +185 -0
  46. package/src/components/calendar/components/calendar-navigation.tsx +141 -0
  47. package/src/components/calendar/components/day.tsx +61 -0
  48. package/src/components/calendar/components/decade-view.tsx +45 -0
  49. package/src/components/calendar/components/index.ts +6 -0
  50. package/src/components/calendar/components/month-view.tsx +58 -0
  51. package/src/components/calendar/components/week-days.tsx +27 -0
  52. package/src/components/calendar/components/year-view.tsx +29 -0
  53. package/src/components/calendar/hooks/index.ts +4 -0
  54. package/src/components/calendar/hooks/use-calendar-navigation.ts +79 -0
  55. package/src/components/calendar/hooks/use-calendar.ts +90 -0
  56. package/src/components/calendar/hooks/use-multiple-calendar.ts +34 -0
  57. package/src/components/calendar/hooks/use-range-calendar.ts +91 -0
  58. package/src/components/calendar/hooks/use-single-calendar.ts +18 -0
  59. package/src/components/calendar/index.ts +1 -0
  60. package/src/components/calendar/utils/typeguards.ts +7 -0
  61. package/src/components/card/card.stories.tsx +116 -0
  62. package/src/components/card/card.tsx +74 -0
  63. package/src/components/card/index.ts +1 -0
  64. package/src/components/center/center.stories.tsx +81 -0
  65. package/src/components/center/center.tsx +24 -0
  66. package/src/components/center/index.ts +1 -0
  67. package/src/components/checkbox/checkbox.stories.tsx +307 -0
  68. package/src/components/checkbox/checkbox.tsx +273 -0
  69. package/src/components/checkbox/index.ts +1 -0
  70. package/src/components/checkbox-group/checkbox-group.stories.tsx +104 -0
  71. package/src/components/checkbox-group/checkbox-group.tsx +16 -0
  72. package/src/components/checkbox-group/index.ts +1 -0
  73. package/src/components/combobox/combobox.stories.tsx +339 -0
  74. package/src/components/combobox/combobox.tsx +898 -0
  75. package/src/components/combobox/index.ts +1 -0
  76. package/src/components/date-picker/date-input.stories.tsx +158 -0
  77. package/src/components/date-picker/date-input.tsx +163 -0
  78. package/src/components/date-picker/date-picker.model.ts +90 -0
  79. package/src/components/date-picker/date-picker.stories.tsx +200 -0
  80. package/src/components/date-picker/date-picker.test.tsx +23 -0
  81. package/src/components/date-picker/date-picker.tsx +298 -0
  82. package/src/components/date-picker/date-picker.utils.ts +260 -0
  83. package/src/components/date-picker/index.ts +3 -0
  84. package/src/components/date-picker/use-date-input-popover.ts +48 -0
  85. package/src/components/date-picker/use-date-input.ts +125 -0
  86. package/src/components/dialog/dialog.stories.tsx +171 -0
  87. package/src/components/dialog/dialog.test.tsx +68 -0
  88. package/src/components/dialog/dialog.tsx +277 -0
  89. package/src/components/dialog/index.ts +1 -0
  90. package/src/components/divider/divider.stories.tsx +139 -0
  91. package/src/components/divider/divider.test.tsx +22 -0
  92. package/src/components/divider/divider.tsx +23 -0
  93. package/src/components/divider/index.ts +1 -0
  94. package/src/components/dropzone/dropzone.stories.tsx +210 -0
  95. package/src/components/dropzone/dropzone.tsx +154 -0
  96. package/src/components/dropzone/file-types.ts +64 -0
  97. package/src/components/dropzone/index.ts +3 -0
  98. package/src/components/dropzone/upload-primitives.tsx +310 -0
  99. package/src/components/dropzone/use-dropzone.ts +122 -0
  100. package/src/components/empty-state/empty-state.stories.tsx +56 -0
  101. package/src/components/empty-state/empty-state.tsx +39 -0
  102. package/src/components/empty-state/index.ts +1 -0
  103. package/src/components/field/field.stories.tsx +223 -0
  104. package/src/components/field/field.tsx +229 -0
  105. package/src/components/field/index.ts +1 -0
  106. package/src/components/form/form.stories.tsx +594 -0
  107. package/src/components/form/form.tsx +30 -0
  108. package/src/components/form/index.ts +1 -0
  109. package/src/components/heading/heading.stories.tsx +74 -0
  110. package/src/components/heading/heading.tsx +28 -0
  111. package/src/components/heading/heading.variants.ts +27 -0
  112. package/src/components/heading/index.ts +1 -0
  113. package/src/components/index.ts +46 -0
  114. package/src/components/input/index.ts +1 -0
  115. package/src/components/input/input.stories.tsx +104 -0
  116. package/src/components/input/input.tsx +75 -0
  117. package/src/components/kbd/index.ts +1 -0
  118. package/src/components/kbd/kbd.stories.tsx +40 -0
  119. package/src/components/kbd/kbd.tsx +31 -0
  120. package/src/components/kbd/kbd.variants.ts +26 -0
  121. package/src/components/label/index.ts +1 -0
  122. package/src/components/label/label.stories.tsx +68 -0
  123. package/src/components/label/label.test.tsx +61 -0
  124. package/src/components/label/label.tsx +62 -0
  125. package/src/components/loader/index.ts +1 -0
  126. package/src/components/loader/loader.stories.tsx +60 -0
  127. package/src/components/loader/loader.test.tsx +26 -0
  128. package/src/components/loader/loader.tsx +60 -0
  129. package/src/components/menu/index.ts +2 -0
  130. package/src/components/menu/menu-primitives.tsx +248 -0
  131. package/src/components/menu/menu.stories.tsx +203 -0
  132. package/src/components/menu/menu.tsx +100 -0
  133. package/src/components/menu/util/render-menu-item.tsx +54 -0
  134. package/src/components/multi-select/hooks/use-multi-select.ts +66 -0
  135. package/src/components/multi-select/index.ts +1 -0
  136. package/src/components/multi-select/multi-select.stories.tsx +294 -0
  137. package/src/components/multi-select/multi-select.tsx +300 -0
  138. package/src/components/multi-select/multi-select.variants.ts +22 -0
  139. package/src/components/number-input/index.ts +1 -0
  140. package/src/components/number-input/number-input.stories.tsx +209 -0
  141. package/src/components/number-input/number-input.test.tsx +87 -0
  142. package/src/components/number-input/number-input.tsx +232 -0
  143. package/src/components/pagination/components/pagination-option.tsx +27 -0
  144. package/src/components/pagination/index.ts +1 -0
  145. package/src/components/pagination/pagination.stories.tsx +80 -0
  146. package/src/components/pagination/pagination.test.tsx +76 -0
  147. package/src/components/pagination/pagination.tsx +102 -0
  148. package/src/components/password/index.ts +1 -0
  149. package/src/components/password/password.stories.tsx +104 -0
  150. package/src/components/password/password.tsx +75 -0
  151. package/src/components/popover/index.ts +1 -0
  152. package/src/components/popover/popover.stories.tsx +213 -0
  153. package/src/components/popover/popover.tsx +203 -0
  154. package/src/components/progress/index.ts +1 -0
  155. package/src/components/progress/progress.stories.tsx +124 -0
  156. package/src/components/progress/progress.test.tsx +25 -0
  157. package/src/components/progress/progress.tsx +124 -0
  158. package/src/components/scroll-area/index.ts +1 -0
  159. package/src/components/scroll-area/scroll-area.stories.tsx +166 -0
  160. package/src/components/scroll-area/scroll-area.tsx +64 -0
  161. package/src/components/select/index.ts +1 -0
  162. package/src/components/select/select.stories.tsx +253 -0
  163. package/src/components/select/select.tsx +430 -0
  164. package/src/components/show/index.ts +1 -0
  165. package/src/components/show/show.stories.tsx +197 -0
  166. package/src/components/show/show.test.tsx +41 -0
  167. package/src/components/show/show.tsx +16 -0
  168. package/src/components/skeleton/index.ts +1 -0
  169. package/src/components/skeleton/skeleton.stories.tsx +36 -0
  170. package/src/components/skeleton/skeleton.test.tsx +14 -0
  171. package/src/components/skeleton/skeleton.tsx +15 -0
  172. package/src/components/stack/index.ts +1 -0
  173. package/src/components/stack/stack.stories.tsx +194 -0
  174. package/src/components/stack/stack.tsx +52 -0
  175. package/src/components/stepper/Stepper.tsx +190 -0
  176. package/src/components/stepper/context/stepper-context.tsx +11 -0
  177. package/src/components/stepper/index.ts +1 -0
  178. package/src/components/stepper/stepper.stories.tsx +130 -0
  179. package/src/components/stepper/stepper.test.tsx +91 -0
  180. package/src/components/switch/index.ts +1 -0
  181. package/src/components/switch/switch.stories.tsx +122 -0
  182. package/src/components/switch/switch.test.tsx +30 -0
  183. package/src/components/switch/switch.tsx +86 -0
  184. package/src/components/table/index.ts +3 -0
  185. package/src/components/table/table-primitives.tsx +122 -0
  186. package/src/components/table/table.model.ts +20 -0
  187. package/src/components/table/table.stories.tsx +169 -0
  188. package/src/components/table/table.test.tsx +91 -0
  189. package/src/components/table/table.tsx +109 -0
  190. package/src/components/table-pagination/index.ts +2 -0
  191. package/src/components/table-pagination/table-pagination.model.ts +2 -0
  192. package/src/components/table-pagination/table-pagination.stories.tsx +23 -0
  193. package/src/components/table-pagination/table-pagination.test.tsx +32 -0
  194. package/src/components/table-pagination/table-pagination.tsx +108 -0
  195. package/src/components/tabs/context/tabs-context.tsx +14 -0
  196. package/src/components/tabs/index.ts +1 -0
  197. package/src/components/tabs/tabs.stories.tsx +182 -0
  198. package/src/components/tabs/tabs.test.tsx +61 -0
  199. package/src/components/tabs/tabs.tsx +175 -0
  200. package/src/components/tag/index.ts +2 -0
  201. package/src/components/tag/tag.stories.tsx +170 -0
  202. package/src/components/tag/tag.test.tsx +18 -0
  203. package/src/components/tag/tag.tsx +99 -0
  204. package/src/components/tag/tag.variants.ts +31 -0
  205. package/src/components/textarea/index.ts +1 -0
  206. package/src/components/textarea/textarea.stories.tsx +73 -0
  207. package/src/components/textarea/textarea.tsx +105 -0
  208. package/src/components/timeline/index.ts +1 -0
  209. package/src/components/timeline/timeline-status.ts +5 -0
  210. package/src/components/timeline/timeline.stories.tsx +84 -0
  211. package/src/components/timeline/timeline.tsx +147 -0
  212. package/src/components/toast/index.ts +1 -0
  213. package/src/components/toast/toast.stories.tsx +392 -0
  214. package/src/components/toast/toast.test.tsx +50 -0
  215. package/src/components/toast/toast.tsx +411 -0
  216. package/src/components/tooltip/index.ts +1 -0
  217. package/src/components/tooltip/tooltip.stories.tsx +226 -0
  218. package/src/components/tooltip/tooltip.test.tsx +46 -0
  219. package/src/components/tooltip/tooltip.tsx +171 -0
  220. package/src/components/tree/hooks/use-controllable-tree-state.ts +80 -0
  221. package/src/components/tree/index.ts +2 -0
  222. package/src/components/tree/tree-primitives.tsx +126 -0
  223. package/src/components/tree/tree.stories.tsx +468 -0
  224. package/src/components/tree/tree.tsx +42 -0
  225. package/src/hooks/index.ts +26 -0
  226. package/src/hooks/useArray/__doc__/useArray.stories.tsx +100 -0
  227. package/src/hooks/useArray/__test__/useArray.test.tsx +88 -0
  228. package/src/hooks/useArray/index.ts +1 -0
  229. package/src/hooks/useArray/useArray.ts +76 -0
  230. package/src/hooks/useAsync/__doc__/useAsync.stories.tsx +149 -0
  231. package/src/hooks/useAsync/__test__/useAsync.test.tsx +68 -0
  232. package/src/hooks/useAsync/index.ts +1 -0
  233. package/src/hooks/useAsync/useAsync.ts +58 -0
  234. package/src/hooks/useClickOutside/__doc__/useClickOutside.stories.tsx +40 -0
  235. package/src/hooks/useClickOutside/__test__/useClickOutside.test.tsx +33 -0
  236. package/src/hooks/useClickOutside/index.ts +1 -0
  237. package/src/hooks/useClickOutside/useClickOutside.ts +26 -0
  238. package/src/hooks/useClipboard/__doc__/useClipboard.stories.tsx +45 -0
  239. package/src/hooks/useClipboard/__test__/useClipboard.test.tsx +19 -0
  240. package/src/hooks/useClipboard/index.ts +1 -0
  241. package/src/hooks/useClipboard/useClipboard.tsx +28 -0
  242. package/src/hooks/useDebounceCallback/__doc__/useDebouncedCallback.stories.tsx +84 -0
  243. package/src/hooks/useDebounceCallback/index.ts +1 -0
  244. package/src/hooks/useDebounceCallback/useDebouncedCallback.ts +23 -0
  245. package/src/hooks/useDebounceValue/__doc__/useDebouncedValue.stories.tsx +75 -0
  246. package/src/hooks/useDebounceValue/index.ts +1 -0
  247. package/src/hooks/useDebounceValue/useDebouncedValue.ts +17 -0
  248. package/src/hooks/useDisclosure/__doc__/useDisclosure.stories.tsx +39 -0
  249. package/src/hooks/useDisclosure/__test__/useDisclosure.test.ts +43 -0
  250. package/src/hooks/useDisclosure/index.ts +1 -0
  251. package/src/hooks/useDisclosure/useDisclosure.ts +37 -0
  252. package/src/hooks/useDocumentTitle/__doc__/useDocumentTitle.stories.tsx +26 -0
  253. package/src/hooks/useDocumentTitle/index.ts +1 -0
  254. package/src/hooks/useDocumentTitle/useDocumentTitle.tsx +11 -0
  255. package/src/hooks/useEventListener/__doc__/useEventListener.stories.tsx +28 -0
  256. package/src/hooks/useEventListener/__test__/useEventListener.test.tsx +26 -0
  257. package/src/hooks/useEventListener/index.ts +1 -0
  258. package/src/hooks/useEventListener/useEventListener.ts +25 -0
  259. package/src/hooks/useFocusTrap/__doc__/useFocusTrap.stories.tsx +37 -0
  260. package/src/hooks/useFocusTrap/index.ts +1 -0
  261. package/src/hooks/useFocusTrap/scopeTab.ts +38 -0
  262. package/src/hooks/useFocusTrap/tabbable.ts +70 -0
  263. package/src/hooks/useFocusTrap/useFocusTrap.ts +78 -0
  264. package/src/hooks/useHotkey/__docs__/useHotkey.stories.tsx +116 -0
  265. package/src/hooks/useHotkey/__test__/useHotkey.test.tsx +105 -0
  266. package/src/hooks/useHotkey/__utils__/create-hotkey-listener.ts +25 -0
  267. package/src/hooks/useHotkey/__utils__/index.ts +3 -0
  268. package/src/hooks/useHotkey/__utils__/is-input-field.ts +14 -0
  269. package/src/hooks/useHotkey/__utils__/match-key-modifiers.ts +25 -0
  270. package/src/hooks/useHotkey/index.ts +1 -0
  271. package/src/hooks/useHotkey/useHotkey.ts +34 -0
  272. package/src/hooks/useHover/__doc__/useHover.stories.tsx +41 -0
  273. package/src/hooks/useHover/__test__/useHover.test.tsx +45 -0
  274. package/src/hooks/useHover/index.ts +1 -0
  275. package/src/hooks/useHover/useHover.tsx +40 -0
  276. package/src/hooks/useIsVisible/__doc__/useIsVisible.stories.tsx +60 -0
  277. package/src/hooks/useIsVisible/index.ts +1 -0
  278. package/src/hooks/useIsVisible/useIsVisible.tsx +50 -0
  279. package/src/hooks/useLocalStorage/__doc__/useLocalStorage.stories.tsx +86 -0
  280. package/src/hooks/useLocalStorage/__test__/useLocalStorage.test.ts +85 -0
  281. package/src/hooks/useLocalStorage/index.ts +1 -0
  282. package/src/hooks/useLocalStorage/useLocalStorage.ts +57 -0
  283. package/src/hooks/useMediaQuery/__doc__/useMediaQuery.stories.tsx +39 -0
  284. package/src/hooks/useMediaQuery/index.ts +1 -0
  285. package/src/hooks/useMediaQuery/useMediaQuery.ts +22 -0
  286. package/src/hooks/useMemoizedFn/index.ts +1 -0
  287. package/src/hooks/useMemoizedFn/useMemoizedFn.ts +32 -0
  288. package/src/hooks/useMutation/__doc__/useMutation.stories.tsx +111 -0
  289. package/src/hooks/useMutation/__test__/useMutation.test.tsx +83 -0
  290. package/src/hooks/useMutation/index.ts +1 -0
  291. package/src/hooks/useMutation/useMutation.tsx +60 -0
  292. package/src/hooks/useObject/__doc__/useObject.stories.tsx +119 -0
  293. package/src/hooks/useObject/__test__/useObject.test.tsx +87 -0
  294. package/src/hooks/useObject/index.ts +1 -0
  295. package/src/hooks/useObject/useObject.tsx +48 -0
  296. package/src/hooks/usePagination/__doc__/usePagination.stories.tsx +72 -0
  297. package/src/hooks/usePagination/__test__/usePagination.test.tsx +98 -0
  298. package/src/hooks/usePagination/index.ts +2 -0
  299. package/src/hooks/usePagination/usePagination.tsx +74 -0
  300. package/src/hooks/usePortal/__doc__/usePortal.stories.tsx +19 -0
  301. package/src/hooks/usePortal/__test__/usePortal.test.tsx +20 -0
  302. package/src/hooks/usePortal/index.ts +1 -0
  303. package/src/hooks/usePortal/usePortal.ts +40 -0
  304. package/src/hooks/usePreventCloseWindow/__doc__/usePreventCloseWindow.stories.tsx +32 -0
  305. package/src/hooks/usePreventCloseWindow/index.ts +1 -0
  306. package/src/hooks/usePreventCloseWindow/usePreventCloseWindow.ts +33 -0
  307. package/src/hooks/useRangePagination/__test__/useRangePagination.test.tsx +63 -0
  308. package/src/hooks/useRangePagination/index.ts +2 -0
  309. package/src/hooks/useRangePagination/useRangePagination.tsx +72 -0
  310. package/src/hooks/useSelection/__doc__/useSelection.stories.tsx +140 -0
  311. package/src/hooks/useSelection/__test__/useSelection.test.tsx +57 -0
  312. package/src/hooks/useSelection/index.ts +1 -0
  313. package/src/hooks/useSelection/useSelection.ts +121 -0
  314. package/src/hooks/useStep/__doc__/useStep.stories.tsx +98 -0
  315. package/src/hooks/useStep/__test__/useStep.test.ts +51 -0
  316. package/src/hooks/useStep/index.ts +1 -0
  317. package/src/hooks/useStep/useStep.ts +57 -0
  318. package/src/hooks/useToggle/__doc__/useToggle.stories.tsx +25 -0
  319. package/src/hooks/useToggle/__test__/useToggle.test.tsx +43 -0
  320. package/src/hooks/useToggle/index.ts +1 -0
  321. package/src/hooks/useToggle/useToggle.ts +16 -0
  322. package/src/index.ts +6 -0
  323. package/src/lib/cn.ts +8 -0
  324. package/src/lib/index.ts +1 -0
  325. package/src/models/Generic.model.ts +67 -0
  326. package/src/models/index.ts +1 -0
  327. package/src/providers/index.ts +2 -0
  328. package/src/providers/library-provider.tsx +44 -0
  329. package/src/providers/theme/ThemeProvider.tsx +25 -0
  330. package/src/providers/theme/index.ts +3 -0
  331. package/src/providers/theme/types.ts +11 -0
  332. package/src/providers/theme/useThemeProps.ts +25 -0
  333. package/src/stores/theme.store.ts +31 -0
  334. package/src/styles/components.css +4 -0
  335. package/src/styles/index.css +2 -0
  336. package/src/styles/library.css +2 -0
  337. package/src/styles/theme.css +232 -0
  338. package/src/utils/dates/parseDateRange.utility.ts +39 -0
  339. package/src/utils/form.tsx +91 -0
  340. package/src/utils/functions/createSafeContext.ts +17 -0
  341. package/src/utils/functions/ensureReactElement.tsx +30 -0
  342. package/src/utils/functions/getFormData.ts +19 -0
  343. package/src/utils/functions/index.ts +4 -0
  344. package/src/utils/functions/mergeRefs.ts +18 -0
  345. package/src/utils/index.ts +3 -0
  346. package/src/utils/strings/extractInitials.utility.ts +10 -0
  347. package/src/utils/strings/index.ts +1 -0
  348. package/src/utils/tests/click.ts +3 -0
  349. package/src/utils/tests/index.ts +2 -0
  350. package/src/utils/tests/keyboard.ts +21 -0
  351. package/src/utils/tests/type.ts +6 -0
  352. package/dist/components.css +0 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boxcustodia/library",
3
- "version": "2.0.0-alpha.11",
3
+ "version": "2.0.0-alpha.13",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.es.js",
@@ -8,7 +8,8 @@
8
8
  "style": "dist/index.css",
9
9
  "sideEffects": false,
10
10
  "files": [
11
- "/dist"
11
+ "/dist",
12
+ "/src"
12
13
  ],
13
14
  "publishConfig": {
14
15
  "access": "public",
@@ -17,7 +18,7 @@
17
18
  "scripts": {
18
19
  "format": "biome format --write .",
19
20
  "lint": "biome check --write --unsafe .",
20
- "build": "tsc && vite build && npm run copy:theme && npm run build:css",
21
+ "build": "tsc && vite build && npm run copy:theme",
21
22
  "copy:theme": "node -e \"const fs=require('fs'); fs.copyFileSync('./src/styles/theme.css','./dist/theme.css'); fs.copyFileSync('./src/styles/library.css','./dist/index.css');\"",
22
23
  "build:css": "tailwindcss -i src/styles/components.css -o dist/components.css --minify",
23
24
  "test": "vitest run",
@@ -0,0 +1,6 @@
1
+ import { Meta } from "@storybook/addon-docs/blocks";
2
+ import { ChangelogViewer } from "./Examples";
3
+
4
+ <Meta title="Documentation/Changelog" />
5
+
6
+ <ChangelogViewer />
@@ -0,0 +1,73 @@
1
+ import {
2
+ Canvas,
3
+ ColorItem,
4
+ ColorPalette,
5
+ Meta,
6
+ Source,
7
+ } from "@storybook/addon-docs/blocks";
8
+ import { BorderRadius, ExampleProps } from "./Examples";
9
+
10
+ <Meta title="Documentation/Components" />
11
+
12
+ # Componentes
13
+
14
+ ## Estilos personalizados
15
+
16
+ Cada componente extiende las propiedades del elemento HTML correspondiente, esto permite pasar clases y estilos.
17
+ Se utiliza la librería `tailwind-merge` para combinar clases, evitar repeticiones y problemas de conflictos
18
+
19
+ ```tsx
20
+ // Agrega el color de fondo. No es necesario hacer un !important
21
+ <Input className="bg-red-400" />
22
+ ```
23
+
24
+ ## Creación de variantes y extensión de props
25
+
26
+ Acá se puede ver un ejemplo de cómo crear un componente personalizado `Input` que incluye un icono "x" para limpiar el valor del campo. Este componente personalizado hereda todas las propiedades y funcionalidades del componente Input de la librería.
27
+
28
+ <ExampleProps />
29
+ ```tsx
30
+ import {Button, Input} from "../../components";
31
+ // CustomInput.tsx
32
+ import { Button, Input } from "../../components";
33
+ import { ComponentPropsWithoutRef, useState } from "react";
34
+
35
+ // Extraer Props de componente Input
36
+ type InputProps = ComponentPropsWithoutRef<typeof Input>;
37
+
38
+ export const CustomInput = (props: InputProps) => {
39
+ const [value, setValue] = useState<string>("");
40
+
41
+ return (
42
+ <div className="relative">
43
+ <Input
44
+ {...props}
45
+ value={value}
46
+ onChange={(e) => setValue(e.target.value)}
47
+ className={cn("pr-12", props.className)}
48
+ />
49
+ <Button
50
+ variant="icon"
51
+ onClick={() => setValue("")}
52
+ className={cn(
53
+ "absolute right-0 top-1/2 -translate-y-1/2",
54
+ "text-error hover:text-error text-xl font-bold"
55
+ )}
56
+ >
57
+ x
58
+ </Button>
59
+ </div>
60
+ );
61
+ };
62
+
63
+ ```
64
+
65
+ ### Crear un nuevo componente
66
+ Para mantener la consistencia de los componentes y las estructuras se recomienda utilizar el comando `npx create-component`
67
+
68
+ Va a generar los siguientes cambios
69
+ * Crear el componente en `src/components/NAME.tsx`
70
+ * Crear/actualizar barrels en `src/components/NAME/index.ts` y en `src/components/index.ts`
71
+ * Crear el archivo de storybook con un template en `src/components/NAME/__doc__/NAME.stories.tsx`
72
+ * Crear el archivo de test con un template en `src/components/NAME/__test__/NAME.test.tsx`
73
+ ```
@@ -0,0 +1,69 @@
1
+ import { X } from "lucide-react";
2
+ import { ComponentPropsWithoutRef, useEffect, useState } from "react";
3
+ import Markdown from "react-markdown";
4
+ import { Button } from "../components/button";
5
+ import { Input } from "../components/input";
6
+ import { cn } from "../lib";
7
+
8
+ export const BorderRadius = () => {
9
+ const sizes = [
10
+ "rounded-sm",
11
+ "rounded",
12
+ "rounded-md",
13
+ "rounded-lg",
14
+ "rounded-xl",
15
+ ];
16
+ return (
17
+ <div className="flex justify-center gap-4">
18
+ {sizes.map((size) => (
19
+ <div
20
+ key={size}
21
+ className={`${size} bg-primary text-primary-foreground h-28 w-28 grid place-items-center`}
22
+ >
23
+ {size}
24
+ </div>
25
+ ))}
26
+ </div>
27
+ );
28
+ };
29
+
30
+ type InputProps = ComponentPropsWithoutRef<typeof Input>;
31
+
32
+ export const ExampleProps = (props: InputProps) => {
33
+ const [value, setValue] = useState<string>("");
34
+
35
+ return (
36
+ <div className="relative">
37
+ <Input
38
+ {...props}
39
+ value={value}
40
+ onChange={setValue}
41
+ className={cn("pr-12", props.className)}
42
+ />
43
+ <Button
44
+ size="icon"
45
+ variant="ghost"
46
+ onClick={(): void => setValue("")}
47
+ className={cn(
48
+ "absolute right-0 top-1/2 -translate-y-1/2 ",
49
+ "text-error hover:text-error text-xl font-bold",
50
+ )}
51
+ >
52
+ <X />
53
+ </Button>
54
+ </div>
55
+ );
56
+ };
57
+
58
+ export const ChangelogViewer = () => {
59
+ const [content, setContent] = useState("");
60
+
61
+ useEffect(() => {
62
+ fetch("../CHANGELOG.md")
63
+ .then((response) => response.text())
64
+ .then((text) => setContent(text))
65
+ .catch((error) => console.error("Error loading changelog:", error));
66
+ }, []);
67
+
68
+ return <Markdown>{content}</Markdown>;
69
+ };
@@ -0,0 +1,41 @@
1
+ import { Meta } from "@storybook/addon-docs/blocks";
2
+ import React, { useState } from "react";
3
+ import { Dog } from "lucide-react";
4
+
5
+ <Meta title="Documentation/Icons" />
6
+
7
+ # Documentación de Iconos
8
+
9
+ En este proyecto se utiliza la librería de ícono [Lucide Icons](https://github.com/lucide-icons/lucide)
10
+
11
+ ## Instalación
12
+
13
+ [Documentación de instalación](https://lucide.dev/guide/installation)
14
+
15
+ ```bash
16
+ npm install lucide-react
17
+ ```
18
+
19
+ ## Utilización
20
+
21
+ Basta con importar el ícono y usarlo como elemento JSX. Acá se puede ver el [listado de íconos](https://lucide.dev/icons/)
22
+
23
+ <Dog />
24
+
25
+ ```jsx
26
+ import { Dog } from "lucide-react";
27
+
28
+ <Dog />;
29
+ ```
30
+
31
+ ## Personalización de los Iconos
32
+
33
+ Puedes personalizar los íconos utilizando CSS. Por ejemplo, puedes cambiar el tamaño por defecto de los íconos ajustando la variable `--icon-size`
34
+ Para más información, ver la documentación [Global Styles](https://lucide.dev/guide/advanced/global-styling)
35
+
36
+ ```css
37
+ @theme {
38
+ /* ...Tus variables del theme */
39
+ --icon-size: 2rem;
40
+ }
41
+ ```
@@ -0,0 +1,138 @@
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/Intro" />
11
+
12
+ # Librería de componentes de 📦
13
+
14
+ La librería te ofrece una colección de componentes de UI personalizables que se adaptan fácilmente a lo que necesites.
15
+ Ya sea que estés buscando consistencia o flexibilidad, estos componentes te permiten construir interfaces rápidamente sin perder control sobre el estilo.
16
+ Además, incluye hooks y utilidades que te facilitan la vida al manejar estados y otras tareas comunes, todo pensado para que desarrollar en frontend sea más sencillo y rápido.
17
+
18
+ ![boxcustodia](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS87eAzcc4MxVVBZK4hO0SgjOSDBGah5zyO6g&s)
19
+
20
+ ## Instalación
21
+
22
+ Para empezar, primero debes instalar la librería ejecutando el siguiente comando en tu proyecto:
23
+
24
+ ```ts filename="index.js"
25
+ npm i @boxcustodia/library
26
+ ```
27
+
28
+ Luego, agregá estas dos líneas en tu CSS principal:
29
+
30
+ ```css filename="index.css"
31
+ @import "tailwindcss";
32
+ @import "@boxcustodia/library/dist/index.css";
33
+ ```
34
+
35
+ Un solo import incluye el tema, las variantes y los estilos pre-compilados de todos los componentes. No hace falta `@source` apuntando a `node_modules`.
36
+
37
+ ## Personalización del tema
38
+
39
+ Para ajustar colores, radios u otras variables a la identidad visual de tu proyecto, sobreescribí los tokens con `@theme` después de los imports:
40
+
41
+ ```css filename="index.css"
42
+ @import "tailwindcss";
43
+ @import "@boxcustodia/library/dist/index.css";
44
+
45
+ @theme {
46
+ --color-background: oklch(100% 0 0);
47
+ --color-foreground: oklch(13.63% 0.036 259.2);
48
+
49
+ --color-popover: oklch(100% 0 0);
50
+ --color-popover-foreground: oklch(13.63% 0.036 259.2);
51
+
52
+ --color-primary: oklch(59.5% 0.195 270.48);
53
+ --color-primary-foreground: oklch(100% 0 0);
54
+
55
+ --color-secondary: oklch(96.83% 0.007 247.9);
56
+ --color-secondary-foreground: oklch(20.77% 0.04 265.75);
57
+
58
+ --color-muted: oklch(96.83% 0.007 247.9);
59
+ --color-muted-foreground: oklch(55.44% 0.041 257.42);
60
+
61
+ --color-accent: oklch(96.74% 0.001 286.38);
62
+ --color-accent-foreground: oklch(19.06% 0.003 247.96);
63
+
64
+ --color-error: oklch(63.68% 0.208 25.33);
65
+ --color-error-foreground: oklch(98.42% 0.003 247.86);
66
+
67
+ --color-success: oklch(70.1% 0.146 156.33);
68
+ --color-success-foreground: oklch(98.42% 0.003 247.86);
69
+
70
+ --color-warning: oklch(79.65% 0.16 70.08);
71
+ --color-warning-foreground: oklch(17.97% 0.034 59.63);
72
+
73
+ --color-info: oklch(62.8% 0.152 237.57);
74
+ --color-info-foreground: oklch(98.42% 0.003 247.86);
75
+
76
+ --color-input: oklch(76.68% 0 0);
77
+ --color-checkbox: var(--color-primary);
78
+ --color-ring: oklch(13.63% 0.036 259.2);
79
+
80
+ --radius: 0.5rem;
81
+ --radius-sm: calc(var(--radius) - 4px);
82
+ --radius-md: calc(var(--radius) - 2px);
83
+ --radius-lg: calc(var(--radius));
84
+ --radius-xl: calc(var(--radius) + 4px);
85
+ --radius-tag: 0.375rem;
86
+ --radius-checkbox: 0.25rem;
87
+
88
+ --icon-size: 1rem;
89
+
90
+ --z-overlay: 50;
91
+ --z-float: 60;
92
+ --z-toast: 70;
93
+ }
94
+ ```
95
+
96
+ ## Configuración del provider
97
+
98
+ Envolvé tu app una sola vez con `<LibraryProvider>` — **es obligatorio**. Configura toda la infraestructura de la librería en un solo paso:
99
+
100
+ ```tsx
101
+ // app.tsx
102
+ import { LibraryProvider } from "@boxcustodia/library";
103
+
104
+ export function App() {
105
+ return (
106
+ <LibraryProvider>
107
+ <Router />
108
+ </LibraryProvider>
109
+ );
110
+ }
111
+ ```
112
+
113
+ Incluye internamente:
114
+
115
+ - **`TooltipProvider`** — agrupa el hover intent de todos los tooltips: una vez que uno se abre, los siguientes lo hacen sin delay hasta que el cursor salga.
116
+ - **`ToastProvider`** — habilita la API imperativa `toast.*` desde cualquier parte del árbol.
117
+
118
+ Props disponibles:
119
+
120
+ - **`tooltipDelay`** (`number`, default `600`) — tiempo en ms antes de que se abra un tooltip.
121
+ - **`toastManager`** (`ToastManager`, default singleton global) — pasá una instancia aislada para microfrontends o tests.
122
+
123
+ ## Tecnologías utilizadas
124
+
125
+ - [React](https://reactjs.org/)
126
+ - [Radix](https://www.radix-ui.com/)
127
+ - [Tailwind CSS](https://tailwindcss.com/)
128
+ - [Storybook](https://storybook.js.org/)
129
+ - [Jest](https://jestjs.io/)
130
+ - [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/)
131
+ - [Prettier](https://prettier.io/)
132
+ - [ESLint](https://eslint.org/)
133
+ - [Husky](https://typicode.github.io/husky/#/)
134
+ - [CVA](https://www.npmjs.com/package/class-variance-authority)
135
+
136
+ ## Documentación
137
+
138
+ - [Netlify (temporal)](https://libreria-box-test.netlify.app)
@@ -0,0 +1,71 @@
1
+ import { Meta, Source } from "@storybook/addon-docs/blocks";
2
+
3
+ <Meta title="Documentation/MCP" />
4
+
5
+ # MCP — AI Integration
6
+
7
+ Con este MCP (Model Context Protocol) Claude va a tener acceso directo a la documentación completa de todos los componentes de esta librería: props, variantes, ejemplos reales y patrones de uso.
8
+
9
+ Sin el MCP, Claude no conoce esta librería. Inventa props, ignora nuestras convenciones y genera código genérico que no funciona. Con el MCP instalado, Claude consulta la documentación en tiempo real y genera código que usa correctamente `@boxcustodia/library` desde el primer intento, sin necesidad de leer el codebase ni darle contexto adicional.
10
+
11
+ ## Requisito previo
12
+
13
+ El Storybook está hosteado en un proyecto privado de Chromatic. Para poder autenticarte necesitás tener acceso al proyecto.
14
+
15
+ **Pedile a Franco Baigorria que te agregue como colaborador en Chromatic antes de continuar.**
16
+
17
+ ## Instalación
18
+
19
+ Ejecutar una sola vez por computadora. Se instala globalmente y funciona en todos los proyectos internos automáticamente.
20
+
21
+ La URL usa el formato de permalink de Chromatic (`branch--appId`) que siempre apunta al último deploy de la rama `v2`. No uses una URL de build específico — esas cambian con cada deploy.
22
+
23
+ <Source
24
+ language="bash"
25
+ code={`npx mcp-add --type http --url "https://v2--69de51f0642746d263d5c46f.chromatic.com/mcp" --client-id "cdf3737dff9d485485968e50b63fd8b4" --scope global --clients "claude code"`}
26
+ />
27
+
28
+ El instalador va a hacer algunas preguntas, respondé así:
29
+
30
+ - **What is the server name?** → `boxcustodia-library`
31
+ - **HTTP headers?** → dejar vacío, Enter
32
+ - **claude code OAuth client secret?** → dejar vacío, Enter
33
+
34
+ La primera vez que Claude use el MCP abrirá el browser para autenticarse con Chromatic.
35
+
36
+ ## Instrucción CLAUDE.md
37
+
38
+ Se recomienda agregar este texto al archivo `CLAUDE.md` para que Claude sepa cuándo usar el MCP.
39
+
40
+ <Source
41
+ language="markdown"
42
+ code={`## @boxcustodia/library
43
+ Este proyecto usa @boxcustodia/library, que exporta componentes de UI y hooks de React.
44
+ Cuando no estés seguro de cómo usar un componente o hook, qué props o parámetros acepta, qué variantes tiene,
45
+ o cuál es el componente/hook correcto para una necesidad específica, consultá el MCP boxcustodia-library antes de escribir código.
46
+ No es necesario consultarlo para usos básicos y evidentes.`}
47
+ />
48
+
49
+ Así Claude lo consulta cuando realmente lo necesita — componentes complejos, props no obvias, patrones específicos — sin hacerlo para cada `Button` o `Input`.
50
+
51
+ ## Uso
52
+
53
+ Una vez instalado, Claude consulta la documentación automáticamente. Algunos ejemplos de lo que podés pedirle:
54
+
55
+ **Explorar la librería**
56
+
57
+ <Source
58
+ language="bash"
59
+ code={`¿Qué componentes están disponibles en la librería?`}
60
+ />
61
+
62
+ **Consultar props y variantes**
63
+
64
+ <Source language="bash" code={`¿Qué props acepta el componente Combobox?`} />
65
+
66
+ **Implementar funcionalidades**
67
+
68
+ <Source
69
+ language="bash"
70
+ code={`Implementá un buscador con sugerencias usando el componente AutoComplete de la librería.`}
71
+ />