@boxcustodia/library 2.0.0-alpha.12 → 2.0.0-alpha.14
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 +1 -138
- package/dist/index.d.ts +1087 -720
- package/dist/index.es.js +7011 -56097
- package/dist/theme.css +1 -1
- package/package.json +34 -26
- package/src/__doc__/Examples.tsx +1 -1
- package/src/__doc__/Intro.mdx +3 -3
- package/src/__doc__/Tabs.mdx +112 -0
- package/src/__doc__/V2.mdx +1246 -0
- package/src/components/accordion/accordion.stories.tsx +143 -0
- package/src/components/accordion/accordion.tsx +135 -0
- package/src/components/accordion/index.ts +1 -0
- package/src/components/alert/alert.stories.tsx +24 -4
- package/src/components/alert/alert.tsx +17 -9
- package/src/components/alert-dialog/alert-dialog.stories.tsx +24 -0
- package/src/components/alert-dialog/alert-dialog.test.tsx +1 -1
- package/src/components/alert-dialog/alert-dialog.tsx +58 -10
- package/src/components/auto-complete/auto-complete.stories.tsx +616 -200
- package/src/components/auto-complete/auto-complete.tsx +420 -68
- package/src/components/auto-complete/index.ts +0 -1
- package/src/components/avatar/avatar.stories.tsx +162 -21
- package/src/components/avatar/avatar.tsx +79 -20
- package/src/components/button/button.stories.tsx +219 -294
- package/src/components/button/button.test.tsx +10 -17
- package/src/components/button/button.tsx +78 -19
- package/src/components/button/components/base-button.tsx +30 -53
- package/src/components/button/index.ts +0 -1
- package/src/components/calendar/calendar.stories.tsx +1 -1
- package/src/components/calendar/calendar.tsx +4 -4
- package/src/components/card/card.stories.tsx +141 -69
- package/src/components/card/card.tsx +155 -54
- package/src/components/center/center.stories.tsx +22 -39
- package/src/components/checkbox/checkbox.stories.tsx +25 -5
- package/src/components/checkbox/checkbox.tsx +76 -15
- package/src/components/checkbox-group/checkbox-group.stories.tsx +116 -28
- package/src/components/checkbox-group/checkbox-group.tsx +84 -3
- package/src/components/combobox/combobox.stories.tsx +33 -23
- package/src/components/combobox/combobox.tsx +99 -77
- package/src/components/date-picker/date-input.stories.tsx +14 -6
- package/src/components/date-picker/date-input.tsx +2 -2
- package/src/components/date-picker/date-picker.model.ts +13 -4
- package/src/components/date-picker/date-picker.stories.tsx +38 -12
- package/src/components/date-picker/date-picker.tsx +28 -14
- package/src/components/dialog/dialog.stories.tsx +18 -0
- package/src/components/dialog/dialog.test.tsx +1 -1
- package/src/components/dialog/dialog.tsx +51 -20
- package/src/components/divider/divider.stories.tsx +126 -51
- package/src/components/divider/divider.tsx +16 -16
- package/src/components/dropzone/dropzone.stories.tsx +71 -90
- package/src/components/dropzone/dropzone.tsx +383 -105
- package/src/components/dropzone/index.ts +0 -1
- package/src/components/empty/empty.stories.tsx +165 -0
- package/src/components/empty/empty.tsx +156 -0
- package/src/components/empty/index.ts +1 -0
- package/src/components/field/field.stories.tsx +227 -4
- package/src/components/field/field.tsx +77 -42
- package/src/components/form/form.stories.tsx +320 -197
- package/src/components/form/form.tsx +3 -23
- package/src/components/index.ts +2 -6
- package/src/components/input/input.stories.tsx +5 -5
- package/src/components/input/input.tsx +4 -4
- package/src/components/kbd/kbd.stories.tsx +1 -0
- package/src/components/label/label.stories.tsx +16 -0
- package/src/components/label/label.tsx +13 -2
- package/src/components/loader/loader.stories.tsx +7 -5
- package/src/components/loader/loader.tsx +8 -3
- package/src/components/menu/menu-primitives.tsx +207 -196
- package/src/components/menu/menu.stories.tsx +276 -146
- package/src/components/menu/menu.tsx +146 -54
- package/src/components/number-input/number-input.stories.tsx +27 -4
- package/src/components/number-input/number-input.test.tsx +2 -2
- package/src/components/number-input/number-input.tsx +31 -33
- package/src/components/otp/index.ts +1 -0
- package/src/components/otp/otp.stories.tsx +209 -0
- package/src/components/otp/otp.tsx +100 -0
- package/src/components/pagination/index.ts +1 -0
- package/src/components/pagination/pagination.model.ts +2 -0
- package/src/components/pagination/pagination.stories.tsx +154 -59
- package/src/components/pagination/pagination.test.tsx +122 -57
- package/src/components/pagination/pagination.tsx +575 -77
- package/src/components/password/password.stories.tsx +18 -3
- package/src/components/password/password.tsx +29 -9
- package/src/components/popover/popover.stories.tsx +26 -5
- package/src/components/popover/popover.tsx +15 -23
- package/src/components/progress/progress.stories.tsx +1 -0
- package/src/components/radio-group/index.ts +1 -0
- package/src/components/radio-group/radio-group.stories.tsx +251 -0
- package/src/components/radio-group/radio-group.tsx +212 -0
- package/src/components/scroll-area/scroll-area.stories.tsx +1 -0
- package/src/components/select/select.stories.tsx +118 -19
- package/src/components/select/select.tsx +67 -62
- package/src/components/skeleton/skeleton.stories.tsx +1 -0
- package/src/components/stack/stack.stories.tsx +179 -89
- package/src/components/stack/stack.tsx +2 -2
- package/src/components/stepper/index.ts +1 -1
- package/src/components/stepper/stepper.stories.tsx +767 -83
- package/src/components/stepper/stepper.test.tsx +18 -18
- package/src/components/stepper/stepper.tsx +554 -0
- package/src/components/switch/switch.stories.tsx +15 -1
- package/src/components/switch/switch.tsx +17 -4
- package/src/components/table/index.ts +0 -2
- package/src/components/table/table.stories.tsx +131 -18
- package/src/components/table/table.test.tsx +1 -1
- package/src/components/table/table.tsx +183 -77
- package/src/components/tabs/tabs.stories.tsx +373 -155
- package/src/components/tabs/tabs.test.tsx +12 -12
- package/src/components/tabs/tabs.tsx +72 -149
- package/src/components/tag/index.ts +0 -1
- package/src/components/tag/tag.stories.tsx +155 -120
- package/src/components/tag/tag.tsx +47 -95
- package/src/components/textarea/textarea.stories.tsx +8 -22
- package/src/components/textarea/textarea.tsx +17 -79
- package/src/components/timeline/timeline.stories.tsx +323 -42
- package/src/components/timeline/timeline.tsx +359 -132
- package/src/components/toast/toast.stories.tsx +1 -0
- package/src/components/tooltip/tooltip.tsx +11 -9
- package/src/components/tree/index.ts +0 -1
- package/src/components/tree/tree.stories.tsx +365 -408
- package/src/components/tree/tree.test.tsx +163 -0
- package/src/components/tree/tree.tsx +212 -36
- package/src/hooks/useAsync/__doc__/useAsync.stories.tsx +5 -5
- package/src/hooks/useClipboard/__doc__/useClipboard.stories.tsx +1 -3
- package/src/hooks/useDebounceCallback/__doc__/useDebouncedCallback.stories.tsx +6 -6
- package/src/hooks/useDocumentTitle/__doc__/useDocumentTitle.stories.tsx +1 -1
- package/src/hooks/useEventListener/__test__/useEventListener.test.tsx +1 -1
- package/src/hooks/useLocalStorage/__doc__/useLocalStorage.stories.tsx +1 -1
- package/src/hooks/usePagination/usePagination.tsx +36 -24
- package/src/styles/theme.css +1 -1
- package/src/utils/form.tsx +67 -37
- package/src/utils/index.ts +1 -1
- package/src/__doc__/Migration.mdx +0 -475
- package/src/components/auto-complete/auto-complete-primitives.tsx +0 -155
- package/src/components/background-image/background-image.stories.tsx +0 -21
- package/src/components/background-image/background-image.test.tsx +0 -29
- package/src/components/background-image/background-image.tsx +0 -23
- package/src/components/background-image/index.ts +0 -1
- package/src/components/button/button.variants.ts +0 -44
- package/src/components/button/components/loader-overlay.tsx +0 -21
- package/src/components/button/components/loading-icon.tsx +0 -47
- package/src/components/dropzone/upload-primitives.tsx +0 -310
- package/src/components/dropzone/use-dropzone.ts +0 -122
- package/src/components/empty-state/empty-state.stories.tsx +0 -56
- package/src/components/empty-state/empty-state.tsx +0 -39
- package/src/components/empty-state/index.ts +0 -1
- package/src/components/heading/heading.stories.tsx +0 -74
- package/src/components/heading/heading.tsx +0 -28
- package/src/components/heading/heading.variants.ts +0 -27
- package/src/components/heading/index.ts +0 -1
- package/src/components/kbd/kbd.variants.ts +0 -26
- package/src/components/menu/util/render-menu-item.tsx +0 -54
- package/src/components/multi-select/hooks/use-multi-select.ts +0 -66
- package/src/components/multi-select/index.ts +0 -1
- package/src/components/multi-select/multi-select.stories.tsx +0 -294
- package/src/components/multi-select/multi-select.tsx +0 -300
- package/src/components/multi-select/multi-select.variants.ts +0 -22
- package/src/components/pagination/components/pagination-option.tsx +0 -27
- package/src/components/show/index.ts +0 -1
- package/src/components/show/show.stories.tsx +0 -197
- package/src/components/show/show.test.tsx +0 -41
- package/src/components/show/show.tsx +0 -16
- package/src/components/stepper/Stepper.tsx +0 -190
- package/src/components/stepper/context/stepper-context.tsx +0 -11
- package/src/components/table/table-primitives.tsx +0 -122
- package/src/components/table/table.model.ts +0 -20
- package/src/components/table-pagination/index.ts +0 -2
- package/src/components/table-pagination/table-pagination.model.ts +0 -2
- package/src/components/table-pagination/table-pagination.stories.tsx +0 -23
- package/src/components/table-pagination/table-pagination.test.tsx +0 -32
- package/src/components/table-pagination/table-pagination.tsx +0 -108
- package/src/components/tabs/context/tabs-context.tsx +0 -14
- package/src/components/tag/tag.variants.ts +0 -31
- package/src/components/timeline/timeline-status.ts +0 -5
- package/src/components/tree/hooks/use-controllable-tree-state.ts +0 -80
- package/src/components/tree/tree-primitives.tsx +0 -126
|
@@ -1,36 +1,61 @@
|
|
|
1
|
-
import { Meta, StoryObj } from "@storybook/react-vite";
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
2
2
|
import { Camera, File, FileArchive, ImageIcon, Trash } from "lucide-react";
|
|
3
|
-
import React from "react";
|
|
4
3
|
import { Button } from "../../components/button";
|
|
5
|
-
import { Dropzone } from ".";
|
|
6
|
-
import { FileType, FileTypeGroups, FileTypeValue } from "./file-types";
|
|
7
4
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
Dropzone,
|
|
6
|
+
DropzoneAcceptedFiles,
|
|
7
|
+
DropzoneContent,
|
|
8
|
+
DropzoneRejectedFiles,
|
|
9
|
+
DropzoneRoot,
|
|
10
|
+
DropzoneTrigger,
|
|
11
|
+
type FileError,
|
|
12
|
+
} from ".";
|
|
13
|
+
import { FileType, FileTypeGroups, type FileTypeValue } from "./file-types";
|
|
15
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Drag-and-drop file uploader built on react-dropzone. Supports controlled and uncontrolled
|
|
17
|
+
* file state, MIME type filtering, size limits, and custom file item rendering via render props.
|
|
18
|
+
*
|
|
19
|
+
* Compose with primitives (`DropzoneRoot`, `DropzoneTrigger`, `DropzoneContent`,
|
|
20
|
+
* `DropzoneAcceptedFiles`, `DropzoneRejectedFiles`) for full layout control.
|
|
21
|
+
*/
|
|
16
22
|
const meta: Meta<typeof Dropzone> = {
|
|
17
|
-
title: "
|
|
23
|
+
title: "Components/Dropzone",
|
|
18
24
|
component: Dropzone,
|
|
19
25
|
subcomponents: {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
DropzoneRoot: DropzoneRoot as React.ComponentType<unknown>,
|
|
27
|
+
DropzoneTrigger: DropzoneTrigger as React.ComponentType<unknown>,
|
|
28
|
+
DropzoneContent: DropzoneContent as React.ComponentType<unknown>,
|
|
29
|
+
DropzoneAcceptedFiles:
|
|
30
|
+
DropzoneAcceptedFiles as React.ComponentType<unknown>,
|
|
31
|
+
DropzoneRejectedFiles:
|
|
32
|
+
DropzoneRejectedFiles as React.ComponentType<unknown>,
|
|
33
|
+
},
|
|
34
|
+
args: {
|
|
35
|
+
allowedExtensions: [...FileTypeGroups.IMAGES, FileType.PDF],
|
|
36
|
+
},
|
|
37
|
+
argTypes: {
|
|
38
|
+
classNames: { control: false },
|
|
25
39
|
},
|
|
40
|
+
tags: ["beta"],
|
|
26
41
|
};
|
|
27
42
|
|
|
28
43
|
export default meta;
|
|
29
44
|
type Story = StoryObj<typeof Dropzone>;
|
|
30
45
|
|
|
31
|
-
export const Default: Story = {
|
|
46
|
+
export const Default: Story = {};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* `className` styles the outer wrapper. `classNames` exposes the `trigger`,
|
|
50
|
+
* `icon`, `label`, and `content` slots for fine-grained tweaks.
|
|
51
|
+
*/
|
|
52
|
+
export const WithClassNames: Story = {
|
|
32
53
|
args: {
|
|
33
|
-
|
|
54
|
+
classNames: {
|
|
55
|
+
trigger: "border-primary bg-primary/5",
|
|
56
|
+
icon: "text-primary",
|
|
57
|
+
label: "text-primary",
|
|
58
|
+
},
|
|
34
59
|
},
|
|
35
60
|
};
|
|
36
61
|
|
|
@@ -59,60 +84,20 @@ export const MultipleFiles: Story = {
|
|
|
59
84
|
};
|
|
60
85
|
|
|
61
86
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* ```typescript
|
|
66
|
-
* type FileError = {
|
|
67
|
-
* file: File; // El archivo que causó el error
|
|
68
|
-
* errorMessage: string; // Mensaje de error genérico
|
|
69
|
-
* errorCode: FileErrorCode; // Código para identificar el tipo de error
|
|
70
|
-
* };
|
|
71
|
-
* ```
|
|
72
|
-
*
|
|
73
|
-
* ### Códigos de Error Disponibles
|
|
74
|
-
* - `'INVALID_EXTENSION'`: El archivo no tiene una extensión permitida
|
|
75
|
-
* - `'FILE_TOO_LARGE'`: El archivo excede el tamaño máximo permitido
|
|
76
|
-
* - `'MAX_FILES_EXCEEDED'`: Se ha alcanzado el límite máximo de archivos
|
|
77
|
-
*
|
|
78
|
-
* ### Ejemplo de Uso
|
|
79
|
-
* ```typescript
|
|
80
|
-
* onError: (fileErrors) => {
|
|
81
|
-
* fileErrors.forEach(({ file, errorCode }) => {
|
|
82
|
-
* switch (errorCode) {
|
|
83
|
-
* case 'INVALID_EXTENSION':
|
|
84
|
-
* toast.error(`${file.name} no es un tipo válido`);
|
|
85
|
-
* break;
|
|
86
|
-
* case 'FILE_TOO_LARGE':
|
|
87
|
-
* toast.error(`${file.name} es muy grande`);
|
|
88
|
-
* break;
|
|
89
|
-
* case 'MAX_FILES_EXCEEDED':
|
|
90
|
-
* toast.error('Demasiados archivos');
|
|
91
|
-
* break;
|
|
92
|
-
* }
|
|
93
|
-
* });
|
|
94
|
-
* };
|
|
95
|
-
* ```
|
|
96
|
-
*
|
|
97
|
-
* ### Notas Importantes
|
|
98
|
-
* - El `onError` se ejecuta automáticamente cada vez que `validateFiles` encuentra errores
|
|
99
|
-
* - Puedes acceder al archivo original para mostrar información personalizada
|
|
100
|
-
* - Los mensajes de error son genéricos, puedes crear los tuyos propios basándote en el `errorCode`
|
|
87
|
+
* `onError` fires with a `FileError[]` whenever files are rejected. Each entry
|
|
88
|
+
* includes `errorCode` (`INVALID_EXTENSION`, `FILE_TOO_LARGE`, `MAX_FILES_EXCEEDED`)
|
|
89
|
+
* for granular error handling.
|
|
101
90
|
*/
|
|
102
91
|
export const WithErrorHandling: Story = {
|
|
103
92
|
args: {
|
|
104
93
|
multiple: true,
|
|
105
94
|
maxFiles: 2,
|
|
106
|
-
maxFileSize: 2 * 1024 * 1024,
|
|
95
|
+
maxFileSize: 2 * 1024 * 1024,
|
|
107
96
|
allowedExtensions: [...FileTypeGroups.IMAGES, FileType.PDF],
|
|
108
97
|
onError: (fileErrors: FileError[]) => {
|
|
109
|
-
console.log("Errores de archivos:", fileErrors);
|
|
110
98
|
alert(
|
|
111
99
|
fileErrors
|
|
112
|
-
.map(
|
|
113
|
-
({ file, errorMessage, errorCode }) =>
|
|
114
|
-
`${file.name}: ${errorMessage} (${errorCode})`,
|
|
115
|
-
)
|
|
100
|
+
.map(({ file, errorCode }) => `${file.name}: ${errorCode}`)
|
|
116
101
|
.join("\n"),
|
|
117
102
|
);
|
|
118
103
|
},
|
|
@@ -174,37 +159,33 @@ export const CustomFilePreview: Story = {
|
|
|
174
159
|
};
|
|
175
160
|
|
|
176
161
|
/**
|
|
177
|
-
*
|
|
162
|
+
* Use primitives directly for full layout control. `DropzoneTrigger` with `render`
|
|
163
|
+
* turns any element into the drag target and click handler.
|
|
178
164
|
*
|
|
179
|
-
* Este ejemplo muestra como armar el componente Dropzone usando los componentes primitivos.
|
|
180
|
-
*
|
|
181
|
-
* ##### Estructura
|
|
182
165
|
* ```tsx
|
|
183
|
-
* <
|
|
184
|
-
* <
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
* </UploadContent>
|
|
191
|
-
* </UploadRoot>
|
|
166
|
+
* <DropzoneRoot>
|
|
167
|
+
* <DropzoneTrigger render={<Button>Upload</Button>} />
|
|
168
|
+
* <DropzoneContent>
|
|
169
|
+
* <DropzoneAcceptedFiles />
|
|
170
|
+
* <DropzoneRejectedFiles />
|
|
171
|
+
* </DropzoneContent>
|
|
172
|
+
* </DropzoneRoot>
|
|
192
173
|
* ```
|
|
193
174
|
*/
|
|
194
|
-
export const
|
|
195
|
-
render: () =>
|
|
196
|
-
|
|
197
|
-
<
|
|
198
|
-
|
|
175
|
+
export const Primitive: Story = {
|
|
176
|
+
render: () => (
|
|
177
|
+
<DropzoneRoot>
|
|
178
|
+
<DropzoneTrigger
|
|
179
|
+
render={
|
|
199
180
|
<Button>
|
|
200
181
|
<Camera /> Upload
|
|
201
182
|
</Button>
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
</
|
|
208
|
-
|
|
209
|
-
|
|
183
|
+
}
|
|
184
|
+
/>
|
|
185
|
+
<DropzoneContent>
|
|
186
|
+
<DropzoneAcceptedFiles />
|
|
187
|
+
<DropzoneRejectedFiles />
|
|
188
|
+
</DropzoneContent>
|
|
189
|
+
</DropzoneRoot>
|
|
190
|
+
),
|
|
210
191
|
};
|