@techsio/ui-kit 0.42.0 → 0.43.0

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.
@@ -0,0 +1,369 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { connect, machine } from "@zag-js/file-upload";
3
+ import { mergeProps, normalizeProps, useMachine } from "@zag-js/react";
4
+ import { createContext, useContext, useEffect, useId, useRef, useState } from "react";
5
+ import { ActionIcon } from "../atoms/action-icon.js";
6
+ import { Button } from "../atoms/button.js";
7
+ import { Icon } from "../atoms/icon.js";
8
+ import { Image } from "../atoms/image.js";
9
+ import { Label } from "../atoms/label.js";
10
+ import { tv } from "../utils.js";
11
+ const fileUploadStyles = tv({
12
+ slots: {
13
+ root: "flex w-full flex-col items-start gap-file-upload-root",
14
+ label: [
15
+ "font-file-upload-label text-file-upload-label text-file-upload-label-fg",
16
+ "data-disabled:text-file-upload-label-disabled-fg"
17
+ ],
18
+ dropzone: [
19
+ "flex min-h-file-upload-dropzone-min-height w-full cursor-pointer flex-col items-center justify-center gap-file-upload-dropzone",
20
+ "file-upload-dropzone-border-dashed file-upload-dropzone-border-width rounded-file-upload-dropzone border-file-upload-dropzone-border bg-file-upload-dropzone-bg p-file-upload-dropzone",
21
+ "transition-colors hover:bg-file-upload-dropzone-hover-bg motion-reduce:transition-none",
22
+ "focus-visible:file-upload-focus",
23
+ "data-dragging:file-upload-dropzone-border-solid data-dragging:border-file-upload-dropzone-dragging-border data-dragging:bg-file-upload-dropzone-dragging-bg",
24
+ "data-invalid:border-file-upload-dropzone-invalid-border",
25
+ "data-disabled:cursor-not-allowed data-disabled:border-file-upload-dropzone-disabled-border data-disabled:bg-file-upload-dropzone-disabled-bg",
26
+ "data-readonly:cursor-default"
27
+ ],
28
+ trigger: "",
29
+ itemGroup: "flex w-full flex-col gap-file-upload-item-group empty:hidden",
30
+ item: [
31
+ "flex w-full items-center gap-file-upload-item",
32
+ "file-upload-item-border-width rounded-file-upload-item border-file-upload-item-border bg-file-upload-item-bg p-file-upload-item text-file-upload-item",
33
+ "data-[type=rejected]:border-file-upload-item-rejected-border data-[type=rejected]:bg-file-upload-item-rejected-bg",
34
+ "data-disabled:text-file-upload-item-disabled-fg"
35
+ ],
36
+ itemPreview: [
37
+ "flex size-file-upload-item-preview shrink-0 items-center justify-center overflow-hidden rounded-file-upload-item-preview text-file-upload-item-preview-fg",
38
+ "data-disabled:text-file-upload-item-disabled-fg"
39
+ ],
40
+ itemPreviewImage: "size-full object-cover",
41
+ itemName: [
42
+ "min-w-0 flex-1 truncate font-file-upload-item-name text-file-upload-item-name-fg",
43
+ "data-disabled:text-file-upload-item-disabled-fg"
44
+ ],
45
+ itemSizeText: [
46
+ "text-file-upload-item-size text-file-upload-item-size-fg",
47
+ "data-disabled:text-file-upload-item-disabled-fg"
48
+ ],
49
+ itemDeleteTrigger: "",
50
+ clearTrigger: ""
51
+ }
52
+ });
53
+ const FileUploadContext = /*#__PURE__*/ createContext(null);
54
+ function useFileUploadContext() {
55
+ const context = useContext(FileUploadContext);
56
+ if (!context) throw new Error("FileUpload components must be used within FileUpload.Root");
57
+ return context;
58
+ }
59
+ const FileUploadItemGroupContext = /*#__PURE__*/ createContext(null);
60
+ function useFileUploadItemGroupContext() {
61
+ const context = useContext(FileUploadItemGroupContext);
62
+ if (!context) throw new Error("FileUpload.Item must be used within FileUpload.ItemGroup");
63
+ return context;
64
+ }
65
+ const FileUploadItemContext = /*#__PURE__*/ createContext(null);
66
+ function useFileUploadItemContext() {
67
+ const context = useContext(FileUploadItemContext);
68
+ if (!context) throw new Error("FileUpload item components must be used within FileUpload.Item");
69
+ return context;
70
+ }
71
+ function FileUpload({ accept, acceptedFiles, allowDrop, capture, children, className, defaultAcceptedFiles, dir = "ltr", directory, disabled, getRootNode, id, ids, invalid, locale, maxFileSize, maxFiles, minFileSize, name, onFileAccept, onFileChange, onFileReject, preventDocumentDrop, readOnly, ref, required, transformFiles, translations, validate, ...props }) {
72
+ const generatedId = useId();
73
+ const service = useMachine(machine, {
74
+ accept,
75
+ acceptedFiles,
76
+ allowDrop,
77
+ capture,
78
+ defaultAcceptedFiles,
79
+ dir,
80
+ directory,
81
+ disabled,
82
+ getRootNode,
83
+ id: id ?? generatedId,
84
+ ids,
85
+ invalid,
86
+ locale,
87
+ maxFileSize,
88
+ maxFiles,
89
+ minFileSize,
90
+ name,
91
+ onFileAccept,
92
+ onFileChange,
93
+ onFileReject,
94
+ preventDocumentDrop,
95
+ readOnly,
96
+ required,
97
+ transformFiles,
98
+ translations,
99
+ validate
100
+ });
101
+ const api = connect(service, normalizeProps);
102
+ const styles = fileUploadStyles();
103
+ const rootProps = mergeProps(props, api.getRootProps());
104
+ return /*#__PURE__*/ jsx(FileUploadContext.Provider, {
105
+ value: {
106
+ api,
107
+ required,
108
+ styles
109
+ },
110
+ children: /*#__PURE__*/ jsx("div", {
111
+ className: styles.root({
112
+ className
113
+ }),
114
+ ref: ref,
115
+ ...rootProps,
116
+ children: children
117
+ })
118
+ });
119
+ }
120
+ FileUpload.Context = function({ children }) {
121
+ const { api } = useFileUploadContext();
122
+ return children(api);
123
+ };
124
+ FileUpload.Label = function({ children, className, ref, ...props }) {
125
+ const { api, required, styles } = useFileUploadContext();
126
+ const labelProps = mergeProps({
127
+ ref
128
+ }, props, api.getLabelProps());
129
+ return /*#__PURE__*/ jsx(Label, {
130
+ className: styles.label({
131
+ className
132
+ }),
133
+ required: required,
134
+ size: "current",
135
+ ...labelProps,
136
+ children: children
137
+ });
138
+ };
139
+ FileUpload.Dropzone = function({ children, className, disableClick, onClick, onKeyDown, ref, ...props }) {
140
+ const { api, styles } = useFileUploadContext();
141
+ const { onClick: onMachineClick, onKeyDown: onMachineKeyDown, ...machineDropzoneProps } = api.getDropzoneProps({
142
+ disableClick
143
+ });
144
+ const dropzoneProps = mergeProps(props, machineDropzoneProps, {
145
+ onClick (event) {
146
+ onClick?.(event);
147
+ if (!event.defaultPrevented) onMachineClick?.(event);
148
+ },
149
+ onKeyDown (event) {
150
+ onKeyDown?.(event);
151
+ if (!event.defaultPrevented) onMachineKeyDown?.(event);
152
+ }
153
+ });
154
+ return /*#__PURE__*/ jsx("div", {
155
+ className: styles.dropzone({
156
+ className
157
+ }),
158
+ ref: ref,
159
+ ...dropzoneProps,
160
+ children: children
161
+ });
162
+ };
163
+ FileUpload.HiddenInput = function({ ref, ...props }) {
164
+ const { api } = useFileUploadContext();
165
+ const inputProps = mergeProps(props, api.getHiddenInputProps());
166
+ return /*#__PURE__*/ jsx("input", {
167
+ ref: ref,
168
+ ...inputProps
169
+ });
170
+ };
171
+ FileUpload.Trigger = function({ children, className, disabled, icon = "token-icon-file-upload-trigger", onClick, ref, ...props }) {
172
+ const { api, styles } = useFileUploadContext();
173
+ const { disabled: machineDisabled, onClick: onMachineClick, ...machineTriggerProps } = api.getTriggerProps();
174
+ const triggerProps = mergeProps(props, machineTriggerProps);
175
+ const isDisabled = Boolean(disabled || machineDisabled);
176
+ return /*#__PURE__*/ jsx(Button, {
177
+ className: styles.trigger({
178
+ className
179
+ }),
180
+ disabled: isDisabled,
181
+ icon: icon,
182
+ onClick: (event)=>{
183
+ onClick?.(event);
184
+ if (!event.defaultPrevented) onMachineClick?.(event);
185
+ },
186
+ ref: ref,
187
+ size: "md",
188
+ theme: "outlined",
189
+ type: "button",
190
+ variant: "primary",
191
+ ...triggerProps,
192
+ children: children
193
+ });
194
+ };
195
+ FileUpload.ItemGroup = function({ children, className, ref, type = "accepted", ...props }) {
196
+ const { api, styles } = useFileUploadContext();
197
+ const itemGroupProps = mergeProps(props, api.getItemGroupProps({
198
+ type
199
+ }));
200
+ return /*#__PURE__*/ jsx(FileUploadItemGroupContext.Provider, {
201
+ value: {
202
+ type
203
+ },
204
+ children: /*#__PURE__*/ jsx("ul", {
205
+ className: styles.itemGroup({
206
+ className
207
+ }),
208
+ ref: ref,
209
+ ...itemGroupProps,
210
+ children: children
211
+ })
212
+ });
213
+ };
214
+ FileUpload.Item = function({ children, className, file, ref, ...props }) {
215
+ const { api, styles } = useFileUploadContext();
216
+ const { type } = useFileUploadItemGroupContext();
217
+ const itemProps = mergeProps(props, api.getItemProps({
218
+ file,
219
+ type
220
+ }));
221
+ return /*#__PURE__*/ jsx(FileUploadItemContext.Provider, {
222
+ value: {
223
+ file,
224
+ type
225
+ },
226
+ children: /*#__PURE__*/ jsx("li", {
227
+ className: styles.item({
228
+ className
229
+ }),
230
+ ref: ref,
231
+ ...itemProps,
232
+ children: children
233
+ })
234
+ });
235
+ };
236
+ FileUpload.ItemPreview = function({ children, className, ref, ...props }) {
237
+ const { api, styles } = useFileUploadContext();
238
+ const { file, type } = useFileUploadItemContext();
239
+ const previewProps = mergeProps(props, api.getItemPreviewProps({
240
+ file,
241
+ type
242
+ }));
243
+ return /*#__PURE__*/ jsx("div", {
244
+ className: styles.itemPreview({
245
+ className
246
+ }),
247
+ ref: ref,
248
+ ...previewProps,
249
+ children: children ?? /*#__PURE__*/ jsx(Icon, {
250
+ icon: "token-icon-file-upload-preview",
251
+ size: "lg"
252
+ })
253
+ });
254
+ };
255
+ FileUpload.ItemPreviewImage = function({ className, ref, ...props }) {
256
+ const { api, styles } = useFileUploadContext();
257
+ const { file, type } = useFileUploadItemContext();
258
+ const apiRef = useRef(api);
259
+ const [url, setUrl] = useState();
260
+ apiRef.current = api;
261
+ useEffect(()=>{
262
+ setUrl(void 0);
263
+ return apiRef.current.createFileUrl(file, setUrl);
264
+ }, [
265
+ file
266
+ ]);
267
+ if (!url) return null;
268
+ const imageProps = mergeProps({
269
+ ref
270
+ }, props, api.getItemPreviewImageProps({
271
+ file,
272
+ type,
273
+ url
274
+ }));
275
+ const { alt, src, ...imageElementProps } = imageProps;
276
+ return /*#__PURE__*/ jsx(Image, {
277
+ alt: alt ?? file.name,
278
+ className: styles.itemPreviewImage({
279
+ className
280
+ }),
281
+ size: "custom",
282
+ src: src ?? url,
283
+ ...imageElementProps
284
+ });
285
+ };
286
+ FileUpload.ItemName = function({ children, className, ref, ...props }) {
287
+ const { api, styles } = useFileUploadContext();
288
+ const { file, type } = useFileUploadItemContext();
289
+ const nameProps = mergeProps(props, api.getItemNameProps({
290
+ file,
291
+ type
292
+ }));
293
+ return /*#__PURE__*/ jsx("span", {
294
+ className: styles.itemName({
295
+ className
296
+ }),
297
+ ref: ref,
298
+ ...nameProps,
299
+ children: children ?? file.name
300
+ });
301
+ };
302
+ FileUpload.ItemSizeText = function({ children, className, ref, ...props }) {
303
+ const { api, styles } = useFileUploadContext();
304
+ const { file, type } = useFileUploadItemContext();
305
+ const sizeTextProps = mergeProps(props, api.getItemSizeTextProps({
306
+ file,
307
+ type
308
+ }));
309
+ return /*#__PURE__*/ jsx("span", {
310
+ className: styles.itemSizeText({
311
+ className
312
+ }),
313
+ ref: ref,
314
+ ...sizeTextProps,
315
+ children: children ?? api.getFileSize(file)
316
+ });
317
+ };
318
+ FileUpload.ItemDeleteTrigger = function({ className, disabled, icon = "token-icon-file-upload-delete", onClick, ref, ...props }) {
319
+ const { api, styles } = useFileUploadContext();
320
+ const { file, type } = useFileUploadItemContext();
321
+ const { disabled: machineDisabled, onClick: onMachineClick, ...machineDeleteProps } = api.getItemDeleteTriggerProps({
322
+ file,
323
+ type
324
+ });
325
+ const deleteProps = mergeProps(props, machineDeleteProps);
326
+ const isDisabled = Boolean(disabled || machineDisabled);
327
+ return /*#__PURE__*/ jsx(ActionIcon, {
328
+ className: styles.itemDeleteTrigger({
329
+ className
330
+ }),
331
+ disabled: isDisabled,
332
+ icon: icon,
333
+ onClick: (event)=>{
334
+ onClick?.(event);
335
+ if (!event.defaultPrevented) onMachineClick?.(event);
336
+ },
337
+ ref: ref,
338
+ size: "md",
339
+ tone: "neutral",
340
+ type: "button",
341
+ ...deleteProps
342
+ });
343
+ };
344
+ FileUpload.ClearTrigger = function({ "aria-label": ariaLabel = "Clear files", className, disabled, icon = "token-icon-file-upload-clear", onClick, ref, ...props }) {
345
+ const { api, styles } = useFileUploadContext();
346
+ const { disabled: machineDisabled, onClick: onMachineClick, ...machineClearProps } = api.getClearTriggerProps();
347
+ const clearProps = mergeProps(props, machineClearProps);
348
+ const isDisabled = Boolean(disabled || machineDisabled);
349
+ return /*#__PURE__*/ jsx(ActionIcon, {
350
+ "aria-label": ariaLabel,
351
+ className: styles.clearTrigger({
352
+ className
353
+ }),
354
+ disabled: isDisabled,
355
+ icon: icon,
356
+ onClick: (event)=>{
357
+ onClick?.(event);
358
+ if (!event.defaultPrevented) onMachineClick?.(event);
359
+ },
360
+ ref: ref,
361
+ size: "md",
362
+ tone: "neutral",
363
+ type: "button",
364
+ ...clearProps
365
+ });
366
+ };
367
+ FileUpload.Root = FileUpload;
368
+ FileUpload.displayName = "FileUpload";
369
+ export { FileUpload };
@@ -0,0 +1,84 @@
1
+ /**
2
+ * FileUpload — @techsio/ui-kit molecule.
3
+ *
4
+ * @component FileUpload
5
+ * @componentVersion v1.0.0
6
+ * @skill file-upload-usage
7
+ * @changelog libs/ui/stories/changelog/changelog.stories.tsx
8
+ *
9
+ * Versioning is enforced at commit by scripts/check-skill-sync.mjs: @componentVersion must match
10
+ * the file-upload-usage skill's component_version and a changelog entry. Bump all three together.
11
+ */
12
+ import { type Api as FileUploadApi, type ItemType as FileUploadItemType, type Props as FileUploadMachineProps } from "@zag-js/file-upload";
13
+ import { type ComponentPropsWithoutRef, type ReactNode, type Ref } from "react";
14
+ import { type IconType } from "../atoms/icon.js";
15
+ import { Label } from "../atoms/label.js";
16
+ type FileUploadRootDomProps = Omit<ComponentPropsWithoutRef<"div">, keyof FileUploadMachineProps>;
17
+ export type FileUploadProps = FileUploadRootDomProps & Omit<FileUploadMachineProps, "id"> & {
18
+ id?: string;
19
+ ref?: Ref<HTMLDivElement>;
20
+ };
21
+ export declare function FileUpload({ accept, acceptedFiles, allowDrop, capture, children, className, defaultAcceptedFiles, dir, directory, disabled, getRootNode, id, ids, invalid, locale, maxFileSize, maxFiles, minFileSize, name, onFileAccept, onFileChange, onFileReject, preventDocumentDrop, readOnly, ref, required, transformFiles, translations, validate, ...props }: FileUploadProps): import("react/jsx-runtime").JSX.Element;
22
+ export declare namespace FileUpload {
23
+ var Context: ({ children, }: FileUploadContextProps) => ReactNode;
24
+ var Label: ({ children, className, ref, ...props }: FileUploadLabelProps) => import("react/jsx-runtime").JSX.Element;
25
+ var Dropzone: ({ children, className, disableClick, onClick, onKeyDown, ref, ...props }: FileUploadDropzoneProps) => import("react/jsx-runtime").JSX.Element;
26
+ var HiddenInput: ({ ref, ...props }: FileUploadHiddenInputProps) => import("react/jsx-runtime").JSX.Element;
27
+ var Trigger: ({ children, className, disabled, icon, onClick, ref, ...props }: FileUploadTriggerProps) => import("react/jsx-runtime").JSX.Element;
28
+ var ItemGroup: ({ children, className, ref, type, ...props }: FileUploadItemGroupProps) => import("react/jsx-runtime").JSX.Element;
29
+ var Item: ({ children, className, file, ref, ...props }: FileUploadItemProps) => import("react/jsx-runtime").JSX.Element;
30
+ var ItemPreview: ({ children, className, ref, ...props }: FileUploadItemPreviewProps) => import("react/jsx-runtime").JSX.Element;
31
+ var ItemPreviewImage: ({ className, ref, ...props }: FileUploadItemPreviewImageProps) => import("react/jsx-runtime").JSX.Element | null;
32
+ var ItemName: ({ children, className, ref, ...props }: FileUploadItemNameProps) => import("react/jsx-runtime").JSX.Element;
33
+ var ItemSizeText: ({ children, className, ref, ...props }: FileUploadItemSizeTextProps) => import("react/jsx-runtime").JSX.Element;
34
+ var ItemDeleteTrigger: ({ className, disabled, icon, onClick, ref, ...props }: FileUploadItemDeleteTriggerProps) => import("react/jsx-runtime").JSX.Element;
35
+ var ClearTrigger: ({ "aria-label": ariaLabel, className, disabled, icon, onClick, ref, ...props }: FileUploadClearTriggerProps) => import("react/jsx-runtime").JSX.Element;
36
+ var Root: typeof FileUpload;
37
+ var displayName: string;
38
+ }
39
+ export type FileUploadContextProps = {
40
+ children: (api: FileUploadApi) => ReactNode;
41
+ };
42
+ export type FileUploadLabelProps = Omit<ComponentPropsWithoutRef<typeof Label>, "disabled" | "htmlFor" | "required" | "size"> & {
43
+ ref?: Ref<HTMLLabelElement>;
44
+ };
45
+ export type FileUploadDropzoneProps = ComponentPropsWithoutRef<"div"> & {
46
+ disableClick?: boolean;
47
+ ref?: Ref<HTMLDivElement>;
48
+ };
49
+ type MachineOwnedInputProps = "accept" | "aria-hidden" | "autoFocus" | "capture" | "defaultValue" | "disabled" | "files" | "id" | "multiple" | "name" | "required" | "style" | "tabIndex" | "type" | "value" | "webkitdirectory";
50
+ export type FileUploadHiddenInputProps = Omit<ComponentPropsWithoutRef<"input">, MachineOwnedInputProps> & {
51
+ ref?: Ref<HTMLInputElement>;
52
+ };
53
+ export type FileUploadTriggerProps = Omit<ComponentPropsWithoutRef<"button">, "type"> & {
54
+ icon?: IconType;
55
+ ref?: Ref<HTMLButtonElement>;
56
+ };
57
+ export type FileUploadItemGroupProps = ComponentPropsWithoutRef<"ul"> & {
58
+ ref?: Ref<HTMLUListElement>;
59
+ type?: FileUploadItemType;
60
+ };
61
+ export type FileUploadItemProps = ComponentPropsWithoutRef<"li"> & {
62
+ file: File;
63
+ ref?: Ref<HTMLLIElement>;
64
+ };
65
+ export type FileUploadItemPreviewProps = ComponentPropsWithoutRef<"div"> & {
66
+ ref?: Ref<HTMLDivElement>;
67
+ };
68
+ export type FileUploadItemPreviewImageProps = Omit<ComponentPropsWithoutRef<"img">, "alt" | "src"> & {
69
+ ref?: Ref<HTMLImageElement>;
70
+ };
71
+ export type FileUploadItemNameProps = ComponentPropsWithoutRef<"span"> & {
72
+ ref?: Ref<HTMLSpanElement>;
73
+ };
74
+ export type FileUploadItemSizeTextProps = ComponentPropsWithoutRef<"span"> & {
75
+ ref?: Ref<HTMLSpanElement>;
76
+ };
77
+ type FileUploadActionIconProps = Omit<ComponentPropsWithoutRef<"button">, "children" | "type"> & {
78
+ icon?: IconType;
79
+ ref?: Ref<HTMLButtonElement>;
80
+ };
81
+ export type FileUploadItemDeleteTriggerProps = FileUploadActionIconProps;
82
+ export type FileUploadClearTriggerProps = FileUploadActionIconProps;
83
+ export {};
84
+ //# sourceMappingURL=file-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload.d.ts","sourceRoot":"","sources":["../../../src/molecules/file-upload.tsx"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export type * as Checkbox from "@zag-js/checkbox";
4
4
  export type * as Combobox from "@zag-js/combobox";
5
5
  export type * as Dialog from "@zag-js/dialog";
6
6
  export type * as Drawer from "@zag-js/drawer";
7
+ export type * as FileUpload from "@zag-js/file-upload";
7
8
  export type * as Menu from "@zag-js/menu";
8
9
  export type * as NumberInput from "@zag-js/number-input";
9
10
  export type * as Pagination from "@zag-js/pagination";
@@ -1 +1 @@
1
- {"version":3,"file":"zag.d.ts","sourceRoot":"","sources":["../../../src/types/zag.ts"],"names":[],"mappings":"AAAA,YAAY,KAAK,SAAS,MAAM,mBAAmB,CAAA;AACnD,YAAY,KAAK,QAAQ,MAAM,kBAAkB,CAAA;AACjD,YAAY,KAAK,QAAQ,MAAM,kBAAkB,CAAA;AACjD,YAAY,KAAK,QAAQ,MAAM,kBAAkB,CAAA;AACjD,YAAY,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAC7C,YAAY,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAC7C,YAAY,KAAK,IAAI,MAAM,cAAc,CAAA;AACzC,YAAY,KAAK,WAAW,MAAM,sBAAsB,CAAA;AACxD,YAAY,KAAK,UAAU,MAAM,oBAAoB,CAAA;AACrD,YAAY,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAC/C,YAAY,KAAK,UAAU,MAAM,qBAAqB,CAAA;AACtD,YAAY,KAAK,WAAW,MAAM,sBAAsB,CAAA;AACxD,YAAY,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAC7C,YAAY,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAC7C,YAAY,KAAK,KAAK,MAAM,eAAe,CAAA;AAC3C,YAAY,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAC7C,YAAY,KAAK,IAAI,MAAM,cAAc,CAAA;AACzC,YAAY,KAAK,KAAK,MAAM,eAAe,CAAA;AAC3C,YAAY,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAC/C,YAAY,KAAK,QAAQ,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"zag.d.ts","sourceRoot":"","sources":["../../../src/types/zag.ts"],"names":[],"mappings":"AAAA,YAAY,KAAK,SAAS,MAAM,mBAAmB,CAAA;AACnD,YAAY,KAAK,QAAQ,MAAM,kBAAkB,CAAA;AACjD,YAAY,KAAK,QAAQ,MAAM,kBAAkB,CAAA;AACjD,YAAY,KAAK,QAAQ,MAAM,kBAAkB,CAAA;AACjD,YAAY,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAC7C,YAAY,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAC7C,YAAY,KAAK,UAAU,MAAM,qBAAqB,CAAA;AACtD,YAAY,KAAK,IAAI,MAAM,cAAc,CAAA;AACzC,YAAY,KAAK,WAAW,MAAM,sBAAsB,CAAA;AACxD,YAAY,KAAK,UAAU,MAAM,oBAAoB,CAAA;AACrD,YAAY,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAC/C,YAAY,KAAK,UAAU,MAAM,qBAAqB,CAAA;AACtD,YAAY,KAAK,WAAW,MAAM,sBAAsB,CAAA;AACxD,YAAY,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAC7C,YAAY,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAC7C,YAAY,KAAK,KAAK,MAAM,eAAe,CAAA;AAC3C,YAAY,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAC7C,YAAY,KAAK,IAAI,MAAM,cAAc,CAAA;AACzC,YAAY,KAAK,KAAK,MAAM,eAAe,CAAA;AAC3C,YAAY,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAC/C,YAAY,KAAK,QAAQ,MAAM,mBAAmB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"changelog.stories.d.ts","sourceRoot":"","sources":["../../../stories/changelog/changelog.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAsLtD,iBAAS,SAAS,4CAUjB;AAED,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,SAAS,CAKhC,CAAA;AAED,eAAe,IAAI,CAAA;AAEnB,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,OAAO,SAAS,CAAM,CAAA"}
1
+ {"version":3,"file":"changelog.stories.d.ts","sourceRoot":"","sources":["../../../stories/changelog/changelog.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAyLtD,iBAAS,SAAS,4CAUjB;AAED,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,SAAS,CAKhC,CAAA;AAED,eAAe,IAAI,CAAA;AAEnB,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,OAAO,SAAS,CAAM,CAAA"}
@@ -0,0 +1,105 @@
1
+ import type { StoryObj } from "@storybook/react";
2
+ import { FileUpload } from "../../src/molecules/file-upload.js";
3
+ declare const meta: {
4
+ title: string;
5
+ component: typeof FileUpload;
6
+ tags: string[];
7
+ parameters: {
8
+ layout: string;
9
+ controls: {
10
+ include: string[];
11
+ };
12
+ docs: {
13
+ description: {
14
+ component: string;
15
+ };
16
+ };
17
+ };
18
+ argTypes: {
19
+ accept: {
20
+ control: "object";
21
+ description: string;
22
+ };
23
+ allowDrop: {
24
+ control: "boolean";
25
+ description: string;
26
+ };
27
+ disabled: {
28
+ control: "boolean";
29
+ description: string;
30
+ };
31
+ invalid: {
32
+ control: "boolean";
33
+ description: string;
34
+ };
35
+ maxFileSize: {
36
+ control: {
37
+ type: "number";
38
+ min: number;
39
+ step: number;
40
+ };
41
+ description: string;
42
+ };
43
+ maxFiles: {
44
+ control: {
45
+ type: "number";
46
+ min: number;
47
+ step: number;
48
+ };
49
+ description: string;
50
+ };
51
+ minFileSize: {
52
+ control: {
53
+ type: "number";
54
+ min: number;
55
+ step: number;
56
+ };
57
+ description: string;
58
+ };
59
+ readOnly: {
60
+ control: "boolean";
61
+ description: string;
62
+ };
63
+ required: {
64
+ control: "boolean";
65
+ description: string;
66
+ };
67
+ };
68
+ args: {
69
+ accept: {
70
+ "image/*": string[];
71
+ };
72
+ allowDrop: true;
73
+ disabled: false;
74
+ invalid: false;
75
+ maxFileSize: number;
76
+ maxFiles: number;
77
+ minFileSize: number;
78
+ onFileAccept: import("storybook/test").Mock<(...args: any[]) => any>;
79
+ onFileChange: import("storybook/test").Mock<(...args: any[]) => any>;
80
+ onFileReject: import("storybook/test").Mock<(...args: any[]) => any>;
81
+ readOnly: false;
82
+ required: false;
83
+ };
84
+ };
85
+ export default meta;
86
+ type Story = StoryObj<typeof meta>;
87
+ export declare const Playground: Story;
88
+ export declare const States: Story;
89
+ export declare const Basic: Story;
90
+ export declare const AcceptedFiles: Story;
91
+ export declare const Multiple: Story;
92
+ export declare const Dropzone: Story;
93
+ export declare const DropzoneStates: Story;
94
+ export declare const ConditionalDropzone: Story;
95
+ export declare const CustomPreview: Story;
96
+ export declare const RejectedFiles: Story;
97
+ export declare const Directory: Story;
98
+ export declare const MediaCapture: Story;
99
+ export declare const ProgrammaticOpen: Story;
100
+ export declare const InputLike: Story;
101
+ export declare const Clearable: Story;
102
+ export declare const Clipboard: Story;
103
+ export declare const Controlled: Story;
104
+ export declare const Form: Story;
105
+ //# sourceMappingURL=file-upload.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload.stories.d.ts","sourceRoot":"","sources":["../../../stories/molecules/file-upload.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAgBtD,OAAO,EACL,UAAU,EAEX,MAAM,iCAAiC,CAAA;AAExC,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8EyB,CAAA;AAEnC,eAAe,IAAI,CAAA;AACnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAuPlC,eAAO,MAAM,UAAU,EAAE,KAExB,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAqDpB,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,KAQnB,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAwB3B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAwBtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAgDtB,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KA0D5B,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,KA+BjC,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KA6C3B,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KA4B3B,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAYvB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAgB1B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,KAoB9B,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAqBvB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAyCvB,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,KAiBvB,CAAA;AA4BD,eAAO,MAAM,UAAU,EAAE,KAcxB,CAAA;AAyBD,eAAO,MAAM,IAAI,EAAE,KAkBlB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@techsio/ui-kit",
3
- "version": "0.42.0",
3
+ "version": "0.43.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "repository": {
@@ -104,6 +104,7 @@
104
104
  "@zag-js/combobox": "1.43.3",
105
105
  "@zag-js/dialog": "1.43.3",
106
106
  "@zag-js/drawer": "1.43.3",
107
+ "@zag-js/file-upload": "1.43.3",
107
108
  "@zag-js/i18n-utils": "1.43.3",
108
109
  "@zag-js/menu": "1.43.3",
109
110
  "@zag-js/number-input": "1.43.3",
@@ -24,6 +24,7 @@
24
24
  @import "./molecules/_combobox.css";
25
25
  @import "./molecules/_dialog.css";
26
26
  @import "./molecules/_drawer.css";
27
+ @import "./molecules/_file-upload.css";
27
28
  @import "./molecules/_pagination.css";
28
29
  @import "./molecules/_popover.css";
29
30
  @import "./molecules/_radio-card.css";
@@ -0,0 +1,128 @@
1
+ /*
2
+ * FileUpload — supplementary runtime tokens until a File Upload collection is
3
+ * available in Figma. The visual contract intentionally has one default style
4
+ * with no public size or variant axis.
5
+ */
6
+
7
+ @theme static {
8
+ /* Reference layer */
9
+ --color-file-upload-surface: var(--color-fill-surface);
10
+ --color-file-upload-item-surface: var(--color-base);
11
+ --color-file-upload-surface-hover: var(--color-fill-hover);
12
+ --color-file-upload-accent: var(--color-primary);
13
+ --color-file-upload-accent-subtle: var(--color-primary-light);
14
+ --color-file-upload-content: var(--color-fg-primary);
15
+ --color-file-upload-outline: var(--color-border-primary);
16
+ --color-file-upload-danger: var(--color-danger);
17
+ --color-file-upload-disabled-surface: var(--color-bg-disabled);
18
+ --color-file-upload-disabled-content: var(--color-fg-disabled);
19
+ --color-file-upload-disabled-outline: var(--color-border-disabled);
20
+ --color-file-upload-focus: var(--color-ring-default);
21
+
22
+ --spacing-file-upload-comfortable: var(--spacing-250);
23
+ --spacing-file-upload-content-gap: var(--spacing-150);
24
+ --spacing-file-upload-item-preview-base: var(--spacing-450);
25
+ --spacing-file-upload-dropzone-base: var(--container-2xs);
26
+
27
+ /* Derived color layer */
28
+ --color-file-upload-dropzone-bg: var(--color-file-upload-surface);
29
+ --color-file-upload-dropzone-hover-bg: var(--color-file-upload-surface-hover);
30
+ --color-file-upload-dropzone-dragging-bg: var(
31
+ --color-file-upload-accent-subtle
32
+ );
33
+ --color-file-upload-dropzone-disabled-bg: var(
34
+ --color-file-upload-disabled-surface
35
+ );
36
+ --color-file-upload-dropzone-border: var(--color-file-upload-outline);
37
+ --color-file-upload-dropzone-dragging-border: var(--color-file-upload-accent);
38
+ --color-file-upload-dropzone-invalid-border: var(--color-file-upload-danger);
39
+ --color-file-upload-dropzone-disabled-border: var(
40
+ --color-file-upload-disabled-outline
41
+ );
42
+ --color-file-upload-label-fg: var(--color-file-upload-content);
43
+ --color-file-upload-label-disabled-fg: var(
44
+ --color-file-upload-disabled-content
45
+ );
46
+ --color-file-upload-item-bg: var(--color-file-upload-item-surface);
47
+ --color-file-upload-item-rejected-bg: var(--color-file-upload-item-surface);
48
+ --color-file-upload-item-border: var(--color-file-upload-outline);
49
+ --color-file-upload-item-rejected-border: var(--color-file-upload-danger);
50
+ --color-file-upload-item-name-fg: var(--color-file-upload-content);
51
+ --color-file-upload-item-size-fg: var(--color-file-upload-content);
52
+ --color-file-upload-item-preview-fg: var(--color-file-upload-content);
53
+ --color-file-upload-item-disabled-fg: var(
54
+ --color-file-upload-disabled-content
55
+ );
56
+ --color-file-upload-focus-border: var(--color-file-upload-focus);
57
+
58
+ /* Derived layout and typography layer */
59
+ --gap-file-upload-root: var(--spacing-file-upload-comfortable);
60
+ --gap-file-upload-dropzone: var(--spacing-file-upload-comfortable);
61
+ --gap-file-upload-item-group: var(--spacing-file-upload-content-gap);
62
+ --gap-file-upload-item: var(--spacing-file-upload-content-gap);
63
+ --padding-file-upload-dropzone: var(--spacing-file-upload-content-gap)
64
+ var(--spacing-file-upload-comfortable);
65
+ --padding-file-upload-item: var(--spacing-file-upload-content-gap);
66
+ --spacing-file-upload-dropzone-min-height: var(
67
+ --spacing-file-upload-dropzone-base
68
+ );
69
+ --spacing-file-upload-item-preview: var(
70
+ --spacing-file-upload-item-preview-base
71
+ );
72
+ --spacing-file-upload-focus-offset: var(--default-ring-offset);
73
+
74
+ --text-file-upload-label: var(--text-sm);
75
+ --text-file-upload-item: var(--text-md);
76
+ --text-file-upload-item-size: var(--text-md);
77
+ --font-weight-file-upload-label: var(--font-weight-medium);
78
+ --font-weight-file-upload-item-name: var(--font-weight-medium);
79
+
80
+ --radius-file-upload-dropzone: var(--radius-md);
81
+ --radius-file-upload-item: var(--radius-md);
82
+ --radius-file-upload-item-preview: var(--radius-sm);
83
+ --border-width-file-upload-dropzone: var(--border-width-md);
84
+ --border-width-file-upload-item: var(--border-width-sm);
85
+ --border-width-file-upload-focus: var(--default-ring-width);
86
+ }
87
+
88
+ @utility file-upload-focus {
89
+ outline: var(--border-width-file-upload-focus) var(--default-ring-style)
90
+ var(--color-file-upload-focus-border);
91
+ outline-offset: var(--spacing-file-upload-focus-offset);
92
+ }
93
+
94
+ @utility file-upload-dropzone-border-width {
95
+ border-width: var(--border-width-file-upload-dropzone);
96
+ }
97
+
98
+ @utility file-upload-item-border-width {
99
+ border-width: var(--border-width-file-upload-item);
100
+ }
101
+
102
+ @utility file-upload-dropzone-border-dashed {
103
+ border-style: dashed;
104
+ }
105
+
106
+ @utility file-upload-dropzone-border-solid {
107
+ border-style: solid;
108
+ }
109
+
110
+ @utility token-icon-file-upload-trigger {
111
+ @apply icon-[mdi--upload];
112
+ }
113
+
114
+ @utility token-icon-file-upload-preview {
115
+ @apply token-icon-file-document;
116
+ }
117
+
118
+ @utility token-icon-file-upload-image {
119
+ @apply icon-[mdi--file-image-outline];
120
+ }
121
+
122
+ @utility token-icon-file-upload-delete {
123
+ @apply token-icon-trash;
124
+ }
125
+
126
+ @utility token-icon-file-upload-clear {
127
+ @apply token-icon-close;
128
+ }
@@ -133,8 +133,8 @@
133
133
  --color-fg-on-primary-solid-neo: var(--color-fg-reverse);
134
134
  --color-fg-primary: var(--color-slate-950);
135
135
  --color-fg-reverse: var(--color-white);
136
- --color-fg-status-error: var(--color-danger-400);
137
- --color-fg-status-success: var(--color-success-500);
136
+ --color-fg-status-error: var(--color-danger-600);
137
+ --color-fg-status-success: var(--color-success-700);
138
138
  --color-fg-status-warning: var(--color-warning-500);
139
139
  --color-fill-active: var(--color-black-15);
140
140
  --color-fill-base: var(--color-black-5);
@@ -111,8 +111,8 @@
111
111
  --color-fg-primary: var(--color-slate-950);
112
112
  --color-fg-reverse: var(--color-white);
113
113
  --color-fg-secondary: oklch(0.494 0.037 261.595);
114
- --color-fg-status-error: var(--color-danger-400);
115
- --color-fg-status-success: var(--color-success-500);
114
+ --color-fg-status-error: var(--color-danger-600);
115
+ --color-fg-status-success: var(--color-success-700);
116
116
  --color-fg-status-warning: var(--color-warning-500);
117
117
  --color-fill-active: var(--color-black-15);
118
118
  --color-fill-base: var(--color-black-5);
@@ -189,6 +189,7 @@
189
189
  --color-success-300: oklch(0.871 0.136 154.449);
190
190
  --color-success-500: oklch(0.723 0.192 149.579);
191
191
  --color-success-600: oklch(0.627 0.17 149.214);
192
+ --color-success-700: oklch(0.527 0.137 150.069);
192
193
  --color-success-disabled: var(--color-bg-disabled);
193
194
  --color-tertiary: var(--color-bg-tertiary-base);
194
195
  --color-tertiary-100: oklch(0.963 0.021 301.149);
@@ -189,6 +189,7 @@
189
189
  --color-success-300: oklch(0.871 0.136 154.449);
190
190
  --color-success-500: oklch(0.723 0.192 149.579);
191
191
  --color-success-600: oklch(0.627 0.17 149.214);
192
+ --color-success-700: oklch(0.527 0.137 150.069);
192
193
  --color-success-disabled: var(--color-bg-disabled);
193
194
  --color-tertiary: var(--color-bg-tertiary-base);
194
195
  --color-tertiary-100: oklch(0.963 0.021 301.149);
@@ -297,8 +297,8 @@
297
297
  --color-fg-primary: var(--color-slate-950);
298
298
  --color-fg-reverse: var(--color-white);
299
299
  --color-fg-secondary: oklch(0.494 0.037 261.595);
300
- --color-fg-status-error: var(--color-danger-400);
301
- --color-fg-status-success: var(--color-success-500);
300
+ --color-fg-status-error: var(--color-danger-600);
301
+ --color-fg-status-success: var(--color-success-700);
302
302
  --color-fg-status-warning: var(--color-warning-500);
303
303
  --color-fill-active: var(--color-black-15);
304
304
  --color-fill-base: var(--color-black-5);
@@ -732,6 +732,7 @@
732
732
  --color-success-300: oklch(0.871 0.136 154.449);
733
733
  --color-success-500: oklch(0.723 0.192 149.579);
734
734
  --color-success-600: oklch(0.627 0.17 149.214);
735
+ --color-success-700: oklch(0.527 0.137 150.069);
735
736
  --color-success-disabled: var(--color-bg-disabled);
736
737
  --color-switch-bg-base: var(--color-fill-overlay);
737
738
  --color-switch-bg-checked: var(--color-bg-success);
@@ -111,8 +111,8 @@
111
111
  --color-fg-primary: var(--color-slate-950);
112
112
  --color-fg-reverse: var(--color-white);
113
113
  --color-fg-secondary: oklch(0.494 0.037 261.595);
114
- --color-fg-status-error: var(--color-danger-400);
115
- --color-fg-status-success: var(--color-success-500);
114
+ --color-fg-status-error: var(--color-danger-600);
115
+ --color-fg-status-success: var(--color-success-700);
116
116
  --color-fg-status-warning: var(--color-warning-500);
117
117
  --color-fill-active: var(--color-black-15);
118
118
  --color-fill-base: var(--color-black-5);
@@ -189,6 +189,7 @@
189
189
  --color-success-300: oklch(0.871 0.136 154.449);
190
190
  --color-success-500: oklch(0.723 0.192 149.579);
191
191
  --color-success-600: oklch(0.627 0.17 149.214);
192
+ --color-success-700: oklch(0.527 0.137 150.069);
192
193
  --color-success-disabled: var(--color-bg-disabled);
193
194
  --color-tertiary: var(--color-bg-tertiary-base);
194
195
  --color-tertiary-100: oklch(0.963 0.021 301.149);
@@ -189,6 +189,7 @@
189
189
  --color-success-300: oklch(0.871 0.136 154.449);
190
190
  --color-success-500: oklch(0.723 0.192 149.579);
191
191
  --color-success-600: oklch(0.627 0.17 149.214);
192
+ --color-success-700: oklch(0.527 0.137 150.069);
192
193
  --color-success-disabled: var(--color-bg-disabled);
193
194
  --color-tertiary: var(--color-bg-tertiary-base);
194
195
  --color-tertiary-100: oklch(0.963 0.021 301.149);
@@ -359,8 +359,8 @@
359
359
  --color-fg-primary: light-dark(var(--color-slate-950), var(--color-white));
360
360
  --color-fg-reverse: light-dark(var(--color-white), var(--color-slate-950));
361
361
  --color-fg-secondary: oklch(0.494 0.037 261.595);
362
- --color-fg-status-error: light-dark(var(--color-danger-400), var(--color-danger-300));
363
- --color-fg-status-success: light-dark(var(--color-success-500), var(--color-success-300));
362
+ --color-fg-status-error: light-dark(var(--color-danger-600), var(--color-danger-300));
363
+ --color-fg-status-success: light-dark(var(--color-success-700), var(--color-success-300));
364
364
  --color-fg-status-warning: light-dark(var(--color-warning-500), var(--color-warning-400));
365
365
  --color-fill-active: light-dark(var(--color-black-15), var(--color-white-15));
366
366
  --color-fill-base: light-dark(var(--color-black-5), var(--color-white-5));
@@ -794,6 +794,7 @@
794
794
  --color-success-300: oklch(0.871 0.136 154.449);
795
795
  --color-success-500: oklch(0.723 0.192 149.579);
796
796
  --color-success-600: oklch(0.627 0.17 149.214);
797
+ --color-success-700: oklch(0.527 0.137 150.069);
797
798
  --color-success-disabled: var(--color-bg-disabled);
798
799
  --color-switch-bg-base: var(--color-fill-overlay);
799
800
  --color-switch-bg-checked: var(--color-bg-success);