@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.
- package/dist/index.cjs.js +70 -70
- package/dist/index.css +2 -0
- package/dist/index.d.ts +420 -272
- package/dist/index.es.js +34448 -27816
- package/dist/theme.css +1 -1
- package/package.json +11 -6
- package/src/__doc__/Changelog.mdx +6 -0
- package/src/__doc__/Components.mdx +73 -0
- package/src/__doc__/Examples.tsx +69 -0
- package/src/__doc__/Icons.mdx +41 -0
- package/src/__doc__/Intro.mdx +138 -0
- package/src/__doc__/MCP.mdx +71 -0
- package/src/__doc__/Migration.mdx +475 -0
- package/src/__doc__/Theme.mdx +132 -0
- package/src/__doc__/Types.mdx +252 -0
- package/src/components/alert/alert.stories.tsx +142 -0
- package/src/components/alert/alert.tsx +109 -0
- package/src/components/alert/index.ts +7 -0
- package/src/components/alert-dialog/alert-dialog.stories.tsx +173 -0
- package/src/components/alert-dialog/alert-dialog.test.tsx +49 -0
- package/src/components/alert-dialog/alert-dialog.tsx +265 -0
- package/src/components/alert-dialog/index.ts +1 -0
- package/src/components/auto-complete/auto-complete-primitives.tsx +155 -0
- package/src/components/auto-complete/auto-complete.stories.tsx +241 -0
- package/src/components/auto-complete/auto-complete.tsx +82 -0
- package/src/components/auto-complete/index.ts +2 -0
- package/src/components/avatar/avatar.stories.tsx +84 -0
- package/src/components/avatar/avatar.test.tsx +61 -0
- package/src/components/avatar/avatar.tsx +104 -0
- package/src/components/avatar/index.ts +1 -0
- package/src/components/background-image/background-image.stories.tsx +21 -0
- package/src/components/background-image/background-image.test.tsx +29 -0
- package/src/components/background-image/background-image.tsx +23 -0
- package/src/components/background-image/index.ts +1 -0
- package/src/components/button/button.stories.tsx +396 -0
- package/src/components/button/button.test.tsx +58 -0
- package/src/components/button/button.tsx +31 -0
- package/src/components/button/button.variants.ts +44 -0
- package/src/components/button/components/base-button.tsx +86 -0
- package/src/components/button/components/loader-overlay.tsx +21 -0
- package/src/components/button/components/loading-icon.tsx +47 -0
- package/src/components/button/index.ts +3 -0
- package/src/components/calendar/calendar.model.ts +86 -0
- package/src/components/calendar/calendar.stories.tsx +155 -0
- package/src/components/calendar/calendar.test.tsx +12 -0
- package/src/components/calendar/calendar.tsx +185 -0
- package/src/components/calendar/components/calendar-navigation.tsx +141 -0
- package/src/components/calendar/components/day.tsx +61 -0
- package/src/components/calendar/components/decade-view.tsx +45 -0
- package/src/components/calendar/components/index.ts +6 -0
- package/src/components/calendar/components/month-view.tsx +58 -0
- package/src/components/calendar/components/week-days.tsx +27 -0
- package/src/components/calendar/components/year-view.tsx +29 -0
- package/src/components/calendar/hooks/index.ts +4 -0
- package/src/components/calendar/hooks/use-calendar-navigation.ts +79 -0
- package/src/components/calendar/hooks/use-calendar.ts +90 -0
- package/src/components/calendar/hooks/use-multiple-calendar.ts +34 -0
- package/src/components/calendar/hooks/use-range-calendar.ts +91 -0
- package/src/components/calendar/hooks/use-single-calendar.ts +18 -0
- package/src/components/calendar/index.ts +1 -0
- package/src/components/calendar/utils/typeguards.ts +7 -0
- package/src/components/card/card.stories.tsx +116 -0
- package/src/components/card/card.tsx +74 -0
- package/src/components/card/index.ts +1 -0
- package/src/components/center/center.stories.tsx +81 -0
- package/src/components/center/center.tsx +24 -0
- package/src/components/center/index.ts +1 -0
- package/src/components/checkbox/checkbox.stories.tsx +307 -0
- package/src/components/checkbox/checkbox.tsx +273 -0
- package/src/components/checkbox/index.ts +1 -0
- package/src/components/checkbox-group/checkbox-group.stories.tsx +104 -0
- package/src/components/checkbox-group/checkbox-group.tsx +16 -0
- package/src/components/checkbox-group/index.ts +1 -0
- package/src/components/combobox/combobox.stories.tsx +339 -0
- package/src/components/combobox/combobox.tsx +892 -0
- package/src/components/combobox/index.ts +1 -0
- package/src/components/date-picker/date-input.stories.tsx +158 -0
- package/src/components/date-picker/date-input.tsx +163 -0
- package/src/components/date-picker/date-picker.model.ts +90 -0
- package/src/components/date-picker/date-picker.stories.tsx +200 -0
- package/src/components/date-picker/date-picker.test.tsx +23 -0
- package/src/components/date-picker/date-picker.tsx +298 -0
- package/src/components/date-picker/date-picker.utils.ts +260 -0
- package/src/components/date-picker/index.ts +3 -0
- package/src/components/date-picker/use-date-input-popover.ts +48 -0
- package/src/components/date-picker/use-date-input.ts +125 -0
- package/src/components/dialog/dialog.stories.tsx +171 -0
- package/src/components/dialog/dialog.test.tsx +68 -0
- package/src/components/dialog/dialog.tsx +277 -0
- package/src/components/dialog/index.ts +1 -0
- package/src/components/divider/divider.stories.tsx +70 -0
- package/src/components/divider/divider.test.tsx +22 -0
- package/src/components/divider/divider.tsx +23 -0
- package/src/components/divider/index.ts +1 -0
- package/src/components/dropzone/dropzone.stories.tsx +210 -0
- package/src/components/dropzone/dropzone.tsx +154 -0
- package/src/components/dropzone/file-types.ts +64 -0
- package/src/components/dropzone/index.ts +3 -0
- package/src/components/dropzone/upload-primitives.tsx +310 -0
- package/src/components/dropzone/use-dropzone.ts +122 -0
- package/src/components/empty-state/empty-state.stories.tsx +56 -0
- package/src/components/empty-state/empty-state.tsx +39 -0
- package/src/components/empty-state/index.ts +1 -0
- package/src/components/field/field.stories.tsx +223 -0
- package/src/components/field/field.tsx +229 -0
- package/src/components/field/index.ts +1 -0
- package/src/components/form/form.stories.tsx +594 -0
- package/src/components/form/form.tsx +30 -0
- package/src/components/form/index.ts +1 -0
- package/src/components/heading/heading.stories.tsx +74 -0
- package/src/components/heading/heading.tsx +28 -0
- package/src/components/heading/heading.variants.ts +27 -0
- package/src/components/heading/index.ts +1 -0
- package/src/components/index.ts +46 -0
- package/src/components/input/index.ts +1 -0
- package/src/components/input/input.stories.tsx +104 -0
- package/src/components/input/input.tsx +75 -0
- package/src/components/kbd/index.ts +1 -0
- package/src/components/kbd/kbd.stories.tsx +40 -0
- package/src/components/kbd/kbd.tsx +31 -0
- package/src/components/kbd/kbd.variants.ts +26 -0
- package/src/components/label/index.ts +1 -0
- package/src/components/label/label.stories.tsx +68 -0
- package/src/components/label/label.test.tsx +61 -0
- package/src/components/label/label.tsx +62 -0
- package/src/components/loader/index.ts +1 -0
- package/src/components/loader/loader.stories.tsx +60 -0
- package/src/components/loader/loader.test.tsx +26 -0
- package/src/components/loader/loader.tsx +60 -0
- package/src/components/menu/index.ts +2 -0
- package/src/components/menu/menu-primitives.tsx +248 -0
- package/src/components/menu/menu.stories.tsx +203 -0
- package/src/components/menu/menu.tsx +100 -0
- package/src/components/menu/util/render-menu-item.tsx +54 -0
- package/src/components/multi-select/hooks/use-multi-select.ts +66 -0
- package/src/components/multi-select/index.ts +1 -0
- package/src/components/multi-select/multi-select.stories.tsx +294 -0
- package/src/components/multi-select/multi-select.tsx +300 -0
- package/src/components/multi-select/multi-select.variants.ts +22 -0
- package/src/components/number-input/index.ts +1 -0
- package/src/components/number-input/number-input.stories.tsx +209 -0
- package/src/components/number-input/number-input.test.tsx +87 -0
- package/src/components/number-input/number-input.tsx +230 -0
- package/src/components/pagination/components/pagination-option.tsx +27 -0
- package/src/components/pagination/index.ts +1 -0
- package/src/components/pagination/pagination.stories.tsx +80 -0
- package/src/components/pagination/pagination.test.tsx +76 -0
- package/src/components/pagination/pagination.tsx +102 -0
- package/src/components/password/index.ts +1 -0
- package/src/components/password/password.stories.tsx +104 -0
- package/src/components/password/password.tsx +71 -0
- package/src/components/popover/index.ts +1 -0
- package/src/components/popover/popover.stories.tsx +213 -0
- package/src/components/popover/popover.tsx +203 -0
- package/src/components/progress/index.ts +1 -0
- package/src/components/progress/progress.stories.tsx +124 -0
- package/src/components/progress/progress.test.tsx +25 -0
- package/src/components/progress/progress.tsx +124 -0
- package/src/components/scroll-area/index.ts +1 -0
- package/src/components/scroll-area/scroll-area.stories.tsx +166 -0
- package/src/components/scroll-area/scroll-area.tsx +64 -0
- package/src/components/select/index.ts +1 -0
- package/src/components/select/select.stories.tsx +253 -0
- package/src/components/select/select.tsx +430 -0
- package/src/components/show/index.ts +1 -0
- package/src/components/show/show.stories.tsx +197 -0
- package/src/components/show/show.test.tsx +41 -0
- package/src/components/show/show.tsx +16 -0
- package/src/components/skeleton/index.ts +1 -0
- package/src/components/skeleton/skeleton.stories.tsx +36 -0
- package/src/components/skeleton/skeleton.test.tsx +14 -0
- package/src/components/skeleton/skeleton.tsx +15 -0
- package/src/components/stack/index.ts +1 -0
- package/src/components/stack/stack.stories.tsx +194 -0
- package/src/components/stack/stack.tsx +52 -0
- package/src/components/stepper/Stepper.tsx +190 -0
- package/src/components/stepper/context/stepper-context.tsx +11 -0
- package/src/components/stepper/index.ts +1 -0
- package/src/components/stepper/stepper.stories.tsx +130 -0
- package/src/components/stepper/stepper.test.tsx +91 -0
- package/src/components/switch/index.ts +1 -0
- package/src/components/switch/switch.stories.tsx +122 -0
- package/src/components/switch/switch.test.tsx +30 -0
- package/src/components/switch/switch.tsx +86 -0
- package/src/components/table/index.ts +3 -0
- package/src/components/table/table-primitives.tsx +122 -0
- package/src/components/table/table.model.ts +20 -0
- package/src/components/table/table.stories.tsx +169 -0
- package/src/components/table/table.test.tsx +91 -0
- package/src/components/table/table.tsx +109 -0
- package/src/components/table-pagination/index.ts +2 -0
- package/src/components/table-pagination/table-pagination.model.ts +2 -0
- package/src/components/table-pagination/table-pagination.stories.tsx +23 -0
- package/src/components/table-pagination/table-pagination.test.tsx +32 -0
- package/src/components/table-pagination/table-pagination.tsx +108 -0
- package/src/components/tabs/context/tabs-context.tsx +14 -0
- package/src/components/tabs/index.ts +1 -0
- package/src/components/tabs/tabs.stories.tsx +182 -0
- package/src/components/tabs/tabs.test.tsx +61 -0
- package/src/components/tabs/tabs.tsx +175 -0
- package/src/components/tag/index.ts +2 -0
- package/src/components/tag/tag.stories.tsx +170 -0
- package/src/components/tag/tag.test.tsx +18 -0
- package/src/components/tag/tag.tsx +99 -0
- package/src/components/tag/tag.variants.ts +31 -0
- package/src/components/textarea/index.ts +1 -0
- package/src/components/textarea/textarea.stories.tsx +73 -0
- package/src/components/textarea/textarea.tsx +105 -0
- package/src/components/timeline/index.ts +1 -0
- package/src/components/timeline/timeline-status.ts +5 -0
- package/src/components/timeline/timeline.stories.tsx +84 -0
- package/src/components/timeline/timeline.tsx +147 -0
- package/src/components/toast/index.ts +1 -0
- package/src/components/toast/toast.stories.tsx +392 -0
- package/src/components/toast/toast.test.tsx +50 -0
- package/src/components/toast/toast.tsx +411 -0
- package/src/components/tooltip/index.ts +1 -0
- package/src/components/tooltip/tooltip.stories.tsx +226 -0
- package/src/components/tooltip/tooltip.test.tsx +46 -0
- package/src/components/tooltip/tooltip.tsx +171 -0
- package/src/components/tree/hooks/use-controllable-tree-state.ts +80 -0
- package/src/components/tree/index.ts +2 -0
- package/src/components/tree/tree-primitives.tsx +126 -0
- package/src/components/tree/tree.stories.tsx +468 -0
- package/src/components/tree/tree.tsx +42 -0
- package/src/hooks/index.ts +26 -0
- package/src/hooks/useArray/__doc__/useArray.stories.tsx +100 -0
- package/src/hooks/useArray/__test__/useArray.test.tsx +88 -0
- package/src/hooks/useArray/index.ts +1 -0
- package/src/hooks/useArray/useArray.ts +76 -0
- package/src/hooks/useAsync/__doc__/useAsync.stories.tsx +149 -0
- package/src/hooks/useAsync/__test__/useAsync.test.tsx +68 -0
- package/src/hooks/useAsync/index.ts +1 -0
- package/src/hooks/useAsync/useAsync.ts +58 -0
- package/src/hooks/useClickOutside/__doc__/useClickOutside.stories.tsx +40 -0
- package/src/hooks/useClickOutside/__test__/useClickOutside.test.tsx +33 -0
- package/src/hooks/useClickOutside/index.ts +1 -0
- package/src/hooks/useClickOutside/useClickOutside.ts +26 -0
- package/src/hooks/useClipboard/__doc__/useClipboard.stories.tsx +45 -0
- package/src/hooks/useClipboard/__test__/useClipboard.test.tsx +19 -0
- package/src/hooks/useClipboard/index.ts +1 -0
- package/src/hooks/useClipboard/useClipboard.tsx +28 -0
- package/src/hooks/useDebounceCallback/__doc__/useDebouncedCallback.stories.tsx +84 -0
- package/src/hooks/useDebounceCallback/index.ts +1 -0
- package/src/hooks/useDebounceCallback/useDebouncedCallback.ts +23 -0
- package/src/hooks/useDebounceValue/__doc__/useDebouncedValue.stories.tsx +75 -0
- package/src/hooks/useDebounceValue/index.ts +1 -0
- package/src/hooks/useDebounceValue/useDebouncedValue.ts +17 -0
- package/src/hooks/useDisclosure/__doc__/useDisclosure.stories.tsx +39 -0
- package/src/hooks/useDisclosure/__test__/useDisclosure.test.ts +43 -0
- package/src/hooks/useDisclosure/index.ts +1 -0
- package/src/hooks/useDisclosure/useDisclosure.ts +37 -0
- package/src/hooks/useDocumentTitle/__doc__/useDocumentTitle.stories.tsx +26 -0
- package/src/hooks/useDocumentTitle/index.ts +1 -0
- package/src/hooks/useDocumentTitle/useDocumentTitle.tsx +11 -0
- package/src/hooks/useEventListener/__doc__/useEventListener.stories.tsx +28 -0
- package/src/hooks/useEventListener/__test__/useEventListener.test.tsx +26 -0
- package/src/hooks/useEventListener/index.ts +1 -0
- package/src/hooks/useEventListener/useEventListener.ts +25 -0
- package/src/hooks/useFocusTrap/__doc__/useFocusTrap.stories.tsx +37 -0
- package/src/hooks/useFocusTrap/index.ts +1 -0
- package/src/hooks/useFocusTrap/scopeTab.ts +38 -0
- package/src/hooks/useFocusTrap/tabbable.ts +70 -0
- package/src/hooks/useFocusTrap/useFocusTrap.ts +78 -0
- package/src/hooks/useHotkey/__docs__/useHotkey.stories.tsx +116 -0
- package/src/hooks/useHotkey/__test__/useHotkey.test.tsx +105 -0
- package/src/hooks/useHotkey/__utils__/create-hotkey-listener.ts +25 -0
- package/src/hooks/useHotkey/__utils__/index.ts +3 -0
- package/src/hooks/useHotkey/__utils__/is-input-field.ts +14 -0
- package/src/hooks/useHotkey/__utils__/match-key-modifiers.ts +25 -0
- package/src/hooks/useHotkey/index.ts +1 -0
- package/src/hooks/useHotkey/useHotkey.ts +34 -0
- package/src/hooks/useHover/__doc__/useHover.stories.tsx +41 -0
- package/src/hooks/useHover/__test__/useHover.test.tsx +45 -0
- package/src/hooks/useHover/index.ts +1 -0
- package/src/hooks/useHover/useHover.tsx +40 -0
- package/src/hooks/useIsVisible/__doc__/useIsVisible.stories.tsx +60 -0
- package/src/hooks/useIsVisible/index.ts +1 -0
- package/src/hooks/useIsVisible/useIsVisible.tsx +50 -0
- package/src/hooks/useLocalStorage/__doc__/useLocalStorage.stories.tsx +86 -0
- package/src/hooks/useLocalStorage/__test__/useLocalStorage.test.ts +85 -0
- package/src/hooks/useLocalStorage/index.ts +1 -0
- package/src/hooks/useLocalStorage/useLocalStorage.ts +57 -0
- package/src/hooks/useMediaQuery/__doc__/useMediaQuery.stories.tsx +39 -0
- package/src/hooks/useMediaQuery/index.ts +1 -0
- package/src/hooks/useMediaQuery/useMediaQuery.ts +22 -0
- package/src/hooks/useMemoizedFn/index.ts +1 -0
- package/src/hooks/useMemoizedFn/useMemoizedFn.ts +32 -0
- package/src/hooks/useMutation/__doc__/useMutation.stories.tsx +111 -0
- package/src/hooks/useMutation/__test__/useMutation.test.tsx +83 -0
- package/src/hooks/useMutation/index.ts +1 -0
- package/src/hooks/useMutation/useMutation.tsx +60 -0
- package/src/hooks/useObject/__doc__/useObject.stories.tsx +119 -0
- package/src/hooks/useObject/__test__/useObject.test.tsx +87 -0
- package/src/hooks/useObject/index.ts +1 -0
- package/src/hooks/useObject/useObject.tsx +48 -0
- package/src/hooks/usePagination/__doc__/usePagination.stories.tsx +72 -0
- package/src/hooks/usePagination/__test__/usePagination.test.tsx +98 -0
- package/src/hooks/usePagination/index.ts +2 -0
- package/src/hooks/usePagination/usePagination.tsx +74 -0
- package/src/hooks/usePortal/__doc__/usePortal.stories.tsx +19 -0
- package/src/hooks/usePortal/__test__/usePortal.test.tsx +20 -0
- package/src/hooks/usePortal/index.ts +1 -0
- package/src/hooks/usePortal/usePortal.ts +40 -0
- package/src/hooks/usePreventCloseWindow/__doc__/usePreventCloseWindow.stories.tsx +32 -0
- package/src/hooks/usePreventCloseWindow/index.ts +1 -0
- package/src/hooks/usePreventCloseWindow/usePreventCloseWindow.ts +33 -0
- package/src/hooks/useRangePagination/__test__/useRangePagination.test.tsx +63 -0
- package/src/hooks/useRangePagination/index.ts +2 -0
- package/src/hooks/useRangePagination/useRangePagination.tsx +72 -0
- package/src/hooks/useSelection/__doc__/useSelection.stories.tsx +140 -0
- package/src/hooks/useSelection/__test__/useSelection.test.tsx +57 -0
- package/src/hooks/useSelection/index.ts +1 -0
- package/src/hooks/useSelection/useSelection.ts +121 -0
- package/src/hooks/useStep/__doc__/useStep.stories.tsx +98 -0
- package/src/hooks/useStep/__test__/useStep.test.ts +51 -0
- package/src/hooks/useStep/index.ts +1 -0
- package/src/hooks/useStep/useStep.ts +57 -0
- package/src/hooks/useToggle/__doc__/useToggle.stories.tsx +25 -0
- package/src/hooks/useToggle/__test__/useToggle.test.tsx +43 -0
- package/src/hooks/useToggle/index.ts +1 -0
- package/src/hooks/useToggle/useToggle.ts +16 -0
- package/src/index.ts +6 -0
- package/src/lib/cn.ts +8 -0
- package/src/lib/index.ts +1 -0
- package/src/models/Generic.model.ts +67 -0
- package/src/models/index.ts +1 -0
- package/src/providers/index.ts +2 -0
- package/src/providers/library-provider.tsx +44 -0
- package/src/providers/theme/ThemeProvider.tsx +25 -0
- package/src/providers/theme/index.ts +3 -0
- package/src/providers/theme/types.ts +11 -0
- package/src/providers/theme/useThemeProps.ts +25 -0
- package/src/stores/theme.store.ts +31 -0
- package/src/styles/components.css +4 -0
- package/src/styles/index.css +2 -0
- package/src/styles/library.css +2 -0
- package/src/styles/theme.css +232 -0
- package/src/utils/dates/parseDateRange.utility.ts +39 -0
- package/src/utils/form.tsx +91 -0
- package/src/utils/functions/createSafeContext.ts +17 -0
- package/src/utils/functions/ensureReactElement.tsx +30 -0
- package/src/utils/functions/getFormData.ts +19 -0
- package/src/utils/functions/index.ts +4 -0
- package/src/utils/functions/mergeRefs.ts +18 -0
- package/src/utils/index.ts +3 -0
- package/src/utils/strings/extractInitials.utility.ts +10 -0
- package/src/utils/strings/index.ts +1 -0
- package/src/utils/tests/click.ts +3 -0
- package/src/utils/tests/index.ts +2 -0
- package/src/utils/tests/keyboard.ts +21 -0
- package/src/utils/tests/type.ts +6 -0
package/dist/theme.css
CHANGED
package/package.json
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@boxcustodia/library",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"module": "dist/index.es.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
|
+
"style": "dist/index.css",
|
|
8
9
|
"sideEffects": false,
|
|
9
10
|
"files": [
|
|
10
|
-
"/dist"
|
|
11
|
+
"/dist",
|
|
12
|
+
"/src"
|
|
11
13
|
],
|
|
12
14
|
"publishConfig": {
|
|
13
15
|
"access": "public",
|
|
@@ -15,9 +17,10 @@
|
|
|
15
17
|
},
|
|
16
18
|
"scripts": {
|
|
17
19
|
"format": "biome format --write .",
|
|
18
|
-
"lint": "biome check --write .",
|
|
20
|
+
"lint": "biome check --write --unsafe .",
|
|
19
21
|
"build": "tsc && vite build && npm run copy:theme",
|
|
20
|
-
"copy:theme": "node -e \"require('fs').copyFileSync('./src/styles/theme.css',
|
|
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');\"",
|
|
23
|
+
"build:css": "tailwindcss -i src/styles/components.css -o dist/components.css --minify",
|
|
21
24
|
"test": "vitest run",
|
|
22
25
|
"test-watch": "vitest",
|
|
23
26
|
"test:ui": "vitest --ui",
|
|
@@ -42,7 +45,7 @@
|
|
|
42
45
|
},
|
|
43
46
|
"lint-staged": {
|
|
44
47
|
"*": [
|
|
45
|
-
"biome check --write --no-errors-on-unmatched --files-ignore-unknown=true"
|
|
48
|
+
"biome check --write --unsafe --no-errors-on-unmatched --files-ignore-unknown=true"
|
|
46
49
|
]
|
|
47
50
|
},
|
|
48
51
|
"keywords": [],
|
|
@@ -51,6 +54,7 @@
|
|
|
51
54
|
"description": "",
|
|
52
55
|
"dependencies": {
|
|
53
56
|
"@base-ui/react": "^1.4.0",
|
|
57
|
+
"tw-animate-css": "^1.2.9",
|
|
54
58
|
"@biomejs/biome": "^2.3.8",
|
|
55
59
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
56
60
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
@@ -61,6 +65,7 @@
|
|
|
61
65
|
"@radix-ui/react-tooltip": "1.2.8",
|
|
62
66
|
"@radix-ui/react-use-controllable-state": "^1.2.2",
|
|
63
67
|
"react-aria-components": "^1.13.0",
|
|
68
|
+
"react-day-picker": "^9.14.0",
|
|
64
69
|
"vite-tsconfig-paths": "^6.0.1"
|
|
65
70
|
},
|
|
66
71
|
"devDependencies": {
|
|
@@ -72,6 +77,7 @@
|
|
|
72
77
|
"@storybook/addon-mcp": "^0.6.0",
|
|
73
78
|
"@storybook/addon-onboarding": "10.3.5",
|
|
74
79
|
"@storybook/react-vite": "10.3.5",
|
|
80
|
+
"@tailwindcss/cli": "^4.1.18",
|
|
75
81
|
"@tailwindcss/vite": "^4.1.18",
|
|
76
82
|
"@testing-library/jest-dom": "^6.9.1",
|
|
77
83
|
"@testing-library/react": "16.3.0",
|
|
@@ -105,7 +111,6 @@
|
|
|
105
111
|
"tailwind-merge": "^3.4.0",
|
|
106
112
|
"tailwind-variants": "^3.2.2",
|
|
107
113
|
"tailwindcss": "^4.1.18",
|
|
108
|
-
"tailwindcss-animate": "^1.0.7",
|
|
109
114
|
"typescript": "^5.9.3",
|
|
110
115
|
"vite": "^7.3.0",
|
|
111
116
|
"vite-plugin-dts": "^4.5.4",
|
|
@@ -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
|
+

|
|
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
|
+
/>
|