@uxf/ui 1.0.0-beta.100 → 1.0.0-beta.102

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/config/icons-config.d.ts +1 -1
  2. package/config/icons-config.js +1 -1
  3. package/config/icons.d.ts +15 -0
  4. package/config/icons.js +3 -0
  5. package/css/dropzone.css +81 -0
  6. package/css/input.css +3 -3
  7. package/css/loader.css +13 -1
  8. package/css/tooltip.css +9 -0
  9. package/date-picker-input/date-picker-day.js +1 -1
  10. package/date-picker-input/date-picker-decade.js +1 -1
  11. package/date-picker-input/date-picker-year.js +1 -1
  12. package/dropzone/dropzone-input.d.ts +18 -0
  13. package/dropzone/dropzone-input.js +120 -0
  14. package/dropzone/dropzone-list.d.ts +10 -0
  15. package/dropzone/dropzone-list.js +67 -0
  16. package/dropzone/dropzone.stories.d.ts +12 -0
  17. package/dropzone/dropzone.stories.js +98 -0
  18. package/dropzone/index.d.ts +6 -0
  19. package/dropzone/index.js +6 -0
  20. package/dropzone/types.d.ts +10 -0
  21. package/{file-input → dropzone}/types.js +0 -0
  22. package/file-input/file-input-base.d.ts +1 -2
  23. package/loader/loader.d.ts +5 -2
  24. package/loader/loader.js +3 -2
  25. package/loader/loader.stories.d.ts +1 -1
  26. package/loader/loader.stories.js +2 -1
  27. package/package.json +3 -2
  28. package/tooltip/index.d.ts +1 -0
  29. package/tooltip/index.js +17 -0
  30. package/tooltip/tooltip.d.ts +7 -0
  31. package/tooltip/tooltip.js +79 -0
  32. package/tooltip/tooltip.stories.d.ts +7 -0
  33. package/tooltip/tooltip.stories.js +19 -0
  34. package/tooltip/use-tooltip.d.ts +28 -0
  35. package/tooltip/use-tooltip.js +35 -0
  36. package/types/file-response.d.ts +12 -0
  37. package/types/file-response.js +2 -0
  38. package/types/index.d.ts +1 -0
  39. package/types/index.js +1 -0
  40. package/utils/icons-config.js +15 -0
  41. package/file-input/types.d.ts +0 -7
@@ -1,2 +1,2 @@
1
- export declare const ICONS_VERSION = "1673628509595";
1
+ export declare const ICONS_VERSION = "1674059698879";
2
2
  export declare const ICON_SPRITE = "/.storybook/static-assets/icons-generated/_icon-sprite.svg";
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ICON_SPRITE = exports.ICONS_VERSION = void 0;
4
- exports.ICONS_VERSION = "1673628509595";
4
+ exports.ICONS_VERSION = "1674059698879";
5
5
  exports.ICON_SPRITE = "/.storybook/static-assets/icons-generated/_icon-sprite.svg";
package/config/icons.d.ts CHANGED
@@ -51,6 +51,18 @@ export declare const ICONS: {
51
51
  readonly w: 640;
52
52
  readonly h: 512;
53
53
  };
54
+ readonly file: {
55
+ readonly w: 384;
56
+ readonly h: 512;
57
+ };
58
+ readonly imageFile: {
59
+ readonly w: 384;
60
+ readonly h: 512;
61
+ };
62
+ readonly videoFile: {
63
+ readonly w: 384;
64
+ readonly h: 512;
65
+ };
54
66
  readonly user: {
55
67
  readonly w: 448;
56
68
  readonly h: 512;
@@ -76,6 +88,9 @@ declare module "@uxf/ui/icon/theme" {
76
88
  "chevronsRight": true;
77
89
  "chevronUp": true;
78
90
  "cloud": true;
91
+ "file": true;
92
+ "imageFile": true;
93
+ "videoFile": true;
79
94
  "user": true;
80
95
  "xmarkLarge": true;
81
96
  }
package/config/icons.js CHANGED
@@ -16,6 +16,9 @@ exports.ICONS = {
16
16
  "chevronsRight": { w: 512, h: 512 },
17
17
  "chevronUp": { w: 512, h: 512 },
18
18
  "cloud": { w: 640, h: 512 },
19
+ "file": { w: 384, h: 512 },
20
+ "imageFile": { w: 384, h: 512 },
21
+ "videoFile": { w: 384, h: 512 },
19
22
  "user": { w: 448, h: 512 },
20
23
  "xmarkLarge": { w: 448, h: 512 },
21
24
  };
@@ -0,0 +1,81 @@
1
+ .uxf-dropzone {
2
+ @apply rounded-lg focus:outline-none;
3
+
4
+ &__input {
5
+ @apply sr-only;
6
+ }
7
+
8
+ &__label {
9
+ @apply flex flex-col space-y-2 items-center justify-center p-4 border-2 border-lightBorder border-dashed
10
+ rounded-inherit cursor-pointer text-lightLow text-[14px];
11
+
12
+ &__icon {
13
+ @apply h-6;
14
+ }
15
+
16
+ &.is-invalid {
17
+ @apply border-error-600;
18
+ }
19
+
20
+ &.is-disabled {
21
+ @apply bg-lightBorder/50 cursor-not-allowed;
22
+ }
23
+ }
24
+ }
25
+
26
+ .uxf-dropzone-list {
27
+ @apply space-y-2;
28
+
29
+ &__item-wrapper {
30
+ @apply flex flex-col items-start justify-start space-y-1;
31
+ }
32
+
33
+ &__item {
34
+ @apply overflow-scroll border px-4 py-3 shadow-sm sm:rounded-md sm:px-6 flex w-full
35
+ items-center justify-between space-x-6;
36
+
37
+ :root .light & {
38
+ @apply border-lightBorder text-lightMedium;
39
+ }
40
+
41
+ :root .dark & {
42
+ @apply border-gray-700 bg-gray-800 text-gray-200;
43
+ }
44
+
45
+ &.is-invalid {
46
+ :root .light & {
47
+ @apply border-error-600 text-error-600;
48
+ }
49
+
50
+ :root .dark & {
51
+ @apply border-error-600 text-error-600;
52
+ }
53
+ }
54
+
55
+ &__block {
56
+ @apply flex items-center space-x-4 min-w-0;
57
+
58
+ &:nth-child(2) {
59
+ @apply shrink-0;
60
+ }
61
+
62
+ &__icon {
63
+ @apply h-6;
64
+ }
65
+
66
+ &__file-name {
67
+ @apply truncate;
68
+ }
69
+
70
+ &__file-size {
71
+ @apply whitespace-nowrap shrink-0;
72
+ }
73
+
74
+ &__remove-button {
75
+ &__icon {
76
+ @apply h-4;
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
package/css/input.css CHANGED
@@ -31,10 +31,10 @@
31
31
 
32
32
  &__left-addon,
33
33
  &__right-addon {
34
- @apply border px-2 bg-gray-100;
34
+ @apply border px-2;
35
35
 
36
36
  :root .light & {
37
- @apply border-gray-200;
37
+ @apply border-gray-200 bg-gray-100;
38
38
  }
39
39
 
40
40
  :root .dark & {
@@ -198,7 +198,7 @@
198
198
  }
199
199
 
200
200
  :root .light & {
201
- -webkit-box-shadow: inset 0 0 0 1000px theme("colors.gray.100");
201
+ -webkit-box-shadow: inset 0 0 0 1000px theme("colors.white");
202
202
  }
203
203
  }
204
204
  }
package/css/loader.css CHANGED
@@ -7,5 +7,17 @@
7
7
  .uxf-loader {
8
8
  animation: spinner 1.2s linear infinite;
9
9
 
10
- @apply inline-block h-12 w-12 rounded-full border-r-4 border-t-4 border-r-transparent border-t-current;
10
+ @apply inline-block rounded-full border-r-transparent border-t-current;
11
+
12
+ &--size-default {
13
+ @apply h-12 w-12 border-r-4 border-t-4;
14
+ }
15
+
16
+ &--size-lg {
17
+ @apply h-24 w-24 border-r-8 border-t-8;
18
+ }
19
+
20
+ &--size-sm {
21
+ @apply h-6 w-6 border-r-2 border-t-2;
22
+ }
11
23
  }
@@ -0,0 +1,9 @@
1
+ .uxf-tooltip {
2
+ &__content {
3
+ @apply w-max max-w-[calc(100vw-20px)] bg-lightHigh p-3 text-white rounded-lg;
4
+ }
5
+
6
+ &__arrow {
7
+ @apply bg-lightHigh rounded-sm;
8
+ }
9
+ }
@@ -58,6 +58,6 @@ exports.DatePickerDay = (0, react_1.memo)((props) => {
58
58
  if (!day.dayLabel) {
59
59
  return react_1.default.createElement("div", null);
60
60
  }
61
- return (react_1.default.createElement("button", { className: (0, cx_1.cx)("uxf-date-picker__cell uxf-date-picker__cell__day", isDisabled && classes_1.CLASSES.IS_DISABLED, isToday && "uxf-date-picker__cell__day--today", isSelected && "uxf-date-picker__cell__day--selected", !props.currentMonth && "uxf-date-picker__cell__day--not-current-month"), ref: isDisabled ? undefined : (0, composeRefs_1.composeRefs)(dayCellRef, innerRef), onClick: onClick, onKeyDown: onKeyDown, onMouseEnter: onMouseEnter, tabIndex: tabIndex }, day.dayLabel));
61
+ return (react_1.default.createElement("button", { className: (0, cx_1.cx)("uxf-date-picker__cell uxf-date-picker__cell__day", isDisabled && classes_1.CLASSES.IS_DISABLED, isToday && "uxf-date-picker__cell__day--today", isSelected && "uxf-date-picker__cell__day--selected", !props.currentMonth && "uxf-date-picker__cell__day--not-current-month"), ref: isDisabled ? undefined : (0, composeRefs_1.composeRefs)(dayCellRef, innerRef), onClick: onClick, onKeyDown: onKeyDown, onMouseEnter: onMouseEnter, tabIndex: tabIndex, type: "button" }, day.dayLabel));
62
62
  });
63
63
  exports.DatePickerDay.displayName = "DatePickerDay";
@@ -66,6 +66,6 @@ exports.DatePickerDecade = (0, react_1.memo)((props) => {
66
66
  react_1.default.createElement("p", { className: "uxf-date-picker__decade-label" }, decadeLabel),
67
67
  react_1.default.createElement(button_1.Button, { isIconButton: true, onClick: handleGoToNextDecadeClick, title: "Vp\u0159ed", variant: "text" },
68
68
  react_1.default.createElement(icon_1.Icon, { name: "chevronRight", size: 16 }))),
69
- react_1.default.createElement("div", { className: "uxf-date-picker__decade-calendar" }, years.map((year, index) => (react_1.default.createElement("button", { className: (0, cx_1.cx)("uxf-date-picker__cell uxf-date-picker__cell__year", !canGoToYear(year.date) && classes_1.CLASSES.IS_DISABLED, (0, dayjs_1.default)(year.date).year() === currentYear && "uxf-date-picker__cell__year--current"), key: year.yearLabel + index, onClick: handleSelectYear(year.date) }, year.yearLabel))))));
69
+ react_1.default.createElement("div", { className: "uxf-date-picker__decade-calendar" }, years.map((year, index) => (react_1.default.createElement("button", { className: (0, cx_1.cx)("uxf-date-picker__cell uxf-date-picker__cell__year", !canGoToYear(year.date) && classes_1.CLASSES.IS_DISABLED, (0, dayjs_1.default)(year.date).year() === currentYear && "uxf-date-picker__cell__year--current"), key: year.yearLabel + index, onClick: handleSelectYear(year.date), type: "button" }, year.yearLabel))))));
70
70
  });
71
71
  exports.DatePickerDecade.displayName = "DatePickerDecade";
@@ -69,6 +69,6 @@ exports.DatePickerYear = (0, react_1.memo)((props) => {
69
69
  react_1.default.createElement(button_1.Button, { variant: "text", onClick: handleYearClick }, yearLabel),
70
70
  react_1.default.createElement(button_1.Button, { disabled: !canGoToNextYear, isIconButton: true, onClick: canGoToNextYear ? handleGoToNextYear : undefined, title: "Nadch\u00E1zej\u00EDc\u00ED rok", variant: "text" },
71
71
  react_1.default.createElement(icon_1.Icon, { name: "chevronRight", size: 16 }))),
72
- react_1.default.createElement("div", { className: "uxf-date-picker__year-calendar" }, months.map((month, index) => (react_1.default.createElement("button", { className: (0, cx_1.cx)("uxf-date-picker__cell uxf-date-picker__cell__month", !canGoToMonth(month.date) && classes_1.CLASSES.IS_DISABLED, (0, dayjs_1.default)(month.date).month() === currentMonth && "uxf-date-picker__cell__month--current"), key: month.monthLabel + index, onClick: handleMonthClick(month.date) }, month.monthLabel))))));
72
+ react_1.default.createElement("div", { className: "uxf-date-picker__year-calendar" }, months.map((month, index) => (react_1.default.createElement("button", { className: (0, cx_1.cx)("uxf-date-picker__cell uxf-date-picker__cell__month", !canGoToMonth(month.date) && classes_1.CLASSES.IS_DISABLED, (0, dayjs_1.default)(month.date).month() === currentMonth && "uxf-date-picker__cell__month--current"), key: month.monthLabel + index, onClick: handleMonthClick(month.date), type: "button" }, month.monthLabel))))));
73
73
  });
74
74
  exports.DatePickerYear.displayName = "DatePickerYear";
@@ -0,0 +1,18 @@
1
+ import { FileResponse, FormControlProps, UploadOptions } from "@uxf/ui/types";
2
+ import React, { ReactNode } from "react";
3
+ import { IconName } from "../icon/types";
4
+ import { Accept, DropzoneFile } from "./types";
5
+ export interface DropzoneInputProps extends FormControlProps<DropzoneFile[]> {
6
+ accept?: Accept;
7
+ helperText?: ReactNode;
8
+ icon?: IconName;
9
+ label?: ReactNode;
10
+ maxFileSize?: number;
11
+ maxFilesCount?: number;
12
+ minFileSize?: number;
13
+ noClick?: boolean;
14
+ noDrag?: boolean;
15
+ onUploadError?: (err: unknown) => void;
16
+ onUploadFile: (file: File, options?: UploadOptions) => Promise<FileResponse>;
17
+ }
18
+ export declare const DropzoneInput: React.ForwardRefExoticComponent<DropzoneInputProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.DropzoneInput = void 0;
27
+ const classes_1 = require("@uxf/core/constants/classes");
28
+ const composeRefs_1 = require("@uxf/core/utils/composeRefs");
29
+ const cx_1 = require("@uxf/core/utils/cx");
30
+ const react_1 = __importStar(require("react"));
31
+ const react_dropzone_1 = require("react-dropzone");
32
+ const icon_1 = require("../icon");
33
+ function fileToFileResponse(file) {
34
+ const nameParts = file.name.split(".");
35
+ return {
36
+ id: -Math.round(Math.random() * 100000000),
37
+ uuid: "00000000-0000-0000-0000-000000000000",
38
+ name: nameParts.slice(0, -1).join("."),
39
+ extension: nameParts[nameParts.length - 1],
40
+ };
41
+ }
42
+ function progressHandler(progressEvent, file, onValuesChange, values) {
43
+ if (onValuesChange && values) {
44
+ onValuesChange(values.map((f) => f.id === file.id
45
+ ? {
46
+ ...f,
47
+ progress: progressEvent.lengthComputable
48
+ ? Math.round((progressEvent.loaded / progressEvent.total) * 100)
49
+ : null,
50
+ }
51
+ : f));
52
+ }
53
+ }
54
+ function fileUploadedHandler(uploadedFile, dropzoneFile, onValuesChange, values) {
55
+ if (onValuesChange && values) {
56
+ onValuesChange(values.map((f) => f.id === dropzoneFile.id ? { ...uploadedFile, progress: 100, originalFile: f.originalFile } : f));
57
+ }
58
+ }
59
+ function fileRejectedHandler(err, dropzoneFile, onValuesChange, values, onUploadError) {
60
+ onUploadError === null || onUploadError === void 0 ? void 0 : onUploadError(err);
61
+ dropzoneFile.error = err;
62
+ if (onValuesChange && values) {
63
+ onValuesChange(values.map((f) => (f.id === dropzoneFile.id ? { ...f, error: err } : f)));
64
+ }
65
+ }
66
+ exports.DropzoneInput = (0, react_1.forwardRef)((props, ref) => {
67
+ var _a;
68
+ const refValue = (0, react_1.useRef)();
69
+ refValue.current = props.value;
70
+ const handleFileDrop = async (acceptedFiles) => {
71
+ if (!props.onChange) {
72
+ return;
73
+ }
74
+ const files = acceptedFiles.map((file) => ({
75
+ ...fileToFileResponse(file),
76
+ abortController: new AbortController(),
77
+ originalFile: file,
78
+ progress: 0,
79
+ }));
80
+ props.onChange(props.value ? [...props.value, ...files] : files);
81
+ for (const file of files) {
82
+ if (!file.originalFile) {
83
+ file.error = "File not found";
84
+ continue;
85
+ }
86
+ props
87
+ .onUploadFile(file.originalFile, {
88
+ abortController: file.abortController,
89
+ onUploadProgress: (e) => progressHandler(e, file, props.onChange, refValue.current),
90
+ })
91
+ .then((res) => fileUploadedHandler(res, file, props.onChange, refValue.current))
92
+ .catch((err) => fileRejectedHandler(err, file, props.onChange, refValue.current, props.onUploadError));
93
+ }
94
+ };
95
+ const { getRootProps, getInputProps, rootRef } = (0, react_dropzone_1.useDropzone)({
96
+ accept: props.accept,
97
+ disabled: props.isDisabled,
98
+ maxFiles: props.maxFilesCount,
99
+ maxSize: props.maxFileSize,
100
+ minSize: props.minFileSize,
101
+ multiple: props.maxFilesCount !== 1,
102
+ noClick: props.noClick,
103
+ noDrag: props.noDrag,
104
+ onDrop: handleFileDrop,
105
+ preventDropOnDocument: props.noDrag,
106
+ });
107
+ return (react_1.default.createElement("div", { className: "uxf-dropzone" },
108
+ react_1.default.createElement("label", { ...getRootProps({
109
+ className: (0, cx_1.cx)("uxf-dropzone__label", props.isInvalid && classes_1.CLASSES.IS_INVALID, props.isDisabled && classes_1.CLASSES.IS_DISABLED, props.noClick && "cursor-auto"),
110
+ }), ref: (0, composeRefs_1.composeRefs)(ref, rootRef) },
111
+ react_1.default.createElement(icon_1.Icon, { className: "uxf-dropzone__label__icon", name: (_a = props.icon) !== null && _a !== void 0 ? _a : "cloud" }),
112
+ typeof props.label === "string" ? react_1.default.createElement("span", null, props.label) : props.label,
113
+ react_1.default.createElement("input", { ...getInputProps({
114
+ className: "uxf-dropzone__input",
115
+ name: props.name,
116
+ type: "file",
117
+ }) })),
118
+ props.helperText && (react_1.default.createElement("div", { className: (0, cx_1.cx)("uxf-helper-text", props.isInvalid && classes_1.CLASSES.IS_INVALID) }, props.helperText))));
119
+ });
120
+ exports.DropzoneInput.displayName = "DropzoneInput";
@@ -0,0 +1,10 @@
1
+ import { FC, ReactNode } from "react";
2
+ import { FormControlProps } from "../types";
3
+ import { DropzoneFile } from "./types";
4
+ export interface DropzoneListProps extends FormControlProps<DropzoneFile[]> {
5
+ errorText?: string;
6
+ onAbortWarning?: string;
7
+ onRemoveWarning?: string;
8
+ renderItem?: (file: DropzoneFile) => ReactNode;
9
+ }
10
+ export declare const DropzoneList: FC<DropzoneListProps>;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DropzoneList = void 0;
7
+ const classes_1 = require("@uxf/core/constants/classes");
8
+ const cx_1 = require("@uxf/core/utils/cx");
9
+ const react_1 = __importDefault(require("react"));
10
+ const icon_1 = require("../icon");
11
+ const loader_1 = require("../loader/loader");
12
+ function formatBytes(bytes, decimals = 2) {
13
+ const k = 1024;
14
+ const dm = decimals < 0 ? 0 : decimals;
15
+ const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
16
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
17
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
18
+ }
19
+ function getIconName(extension) {
20
+ switch (extension) {
21
+ case "jpg":
22
+ case "jpeg":
23
+ case "png":
24
+ case "gif":
25
+ return "imageFile";
26
+ case "mp4":
27
+ case "avi":
28
+ case "mov":
29
+ return "videoFile";
30
+ default:
31
+ return "file";
32
+ }
33
+ }
34
+ const DropzoneList = (props) => {
35
+ const onRemove = (file, isUploading) => () => {
36
+ var _a, _b, _c;
37
+ // eslint-disable-next-line no-alert
38
+ if (isUploading && props.value && confirm(props.onAbortWarning || "Do you want to abort the file?")) {
39
+ (_a = file.abortController) === null || _a === void 0 ? void 0 : _a.abort();
40
+ (_b = props.onChange) === null || _b === void 0 ? void 0 : _b.call(props, props.value.filter((f) => f.id !== file.id));
41
+ return;
42
+ }
43
+ // eslint-disable-next-line no-alert
44
+ if (!isUploading && props.value && confirm(props.onRemoveWarning || "Do you want to delete the file?")) {
45
+ (_c = props.onChange) === null || _c === void 0 ? void 0 : _c.call(props, props.value.filter((f) => f.id !== file.id));
46
+ }
47
+ };
48
+ if (!props.value || props.value.length === 0) {
49
+ return null;
50
+ }
51
+ return (react_1.default.createElement("ul", { className: "uxf-dropzone-list" }, props.value.map((file) => {
52
+ var _a, _b, _c;
53
+ const isUploading = file.id < 0 && !file.error;
54
+ return ((_b = (_a = props.renderItem) === null || _a === void 0 ? void 0 : _a.call(props, file)) !== null && _b !== void 0 ? _b : (react_1.default.createElement("li", { className: "uxf-dropzone-list__item-wrapper", key: file.id },
55
+ react_1.default.createElement("div", { className: (0, cx_1.cx)("uxf-dropzone-list__item", !!file.error && classes_1.CLASSES.IS_INVALID) },
56
+ react_1.default.createElement("div", { className: "uxf-dropzone-list__item__block" },
57
+ react_1.default.createElement(icon_1.Icon, { className: "uxf-dropzone-list__item__block__icon", name: getIconName(file.extension) }),
58
+ react_1.default.createElement("span", { className: "uxf-dropzone-list__item__block__file-name" }, file.name + "." + file.extension)),
59
+ react_1.default.createElement("div", { className: "uxf-dropzone-list__item__block" },
60
+ isUploading ? (react_1.default.createElement(loader_1.Loader, { size: "sm" })) : (!file.error &&
61
+ ((_c = file.originalFile) === null || _c === void 0 ? void 0 : _c.size) && (react_1.default.createElement("span", { className: "uxf-dropzone-list__item__block__file-size" }, formatBytes(file.originalFile.size)))),
62
+ react_1.default.createElement("button", { className: "uxf-dropzone-list__item__block__remove-button", onClick: onRemove(file, isUploading), type: "button" },
63
+ react_1.default.createElement(icon_1.Icon, { className: "uxf-dropzone-list__item__block__remove-button__icon", name: "xmarkLarge" })))),
64
+ !!file.error && (react_1.default.createElement("span", { className: (0, cx_1.cx)("uxf-helper-text", classes_1.CLASSES.IS_INVALID) }, props.errorText || "File upload error")))));
65
+ })));
66
+ };
67
+ exports.DropzoneList = DropzoneList;
@@ -0,0 +1,12 @@
1
+ import { FileResponse, UploadOptions } from "@uxf/ui/types/file-response";
2
+ import React from "react";
3
+ declare const _default: {
4
+ title: string;
5
+ component: React.ForwardRefExoticComponent<import("./dropzone-input").DropzoneInputProps & React.RefAttributes<HTMLDivElement>> & {
6
+ List: React.FC<import("./dropzone-list").DropzoneListProps>;
7
+ };
8
+ };
9
+ export default _default;
10
+ export declare function uploadFile(file: File, uploadOptions?: UploadOptions): Promise<FileResponse>;
11
+ export declare function Default(): JSX.Element;
12
+ export declare function ComponentStructure(): JSX.Element;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.ComponentStructure = exports.Default = exports.uploadFile = void 0;
30
+ const component_structure_analyzer_1 = __importDefault(require("@uxf/ui/utils/component-structure-analyzer"));
31
+ const react_1 = __importStar(require("react"));
32
+ const index_1 = require("./index");
33
+ exports.default = {
34
+ title: "UI/Dropzone",
35
+ component: index_1.Dropzone,
36
+ };
37
+ function getRandomUuid() {
38
+ return "00000000-0000-0000-0000-000000000000"
39
+ .split("-")
40
+ .map((el) => Array(el.length)
41
+ .fill(0)
42
+ .map(() => Math.round(Math.random() * 9).toString())
43
+ .join(""))
44
+ .join("-");
45
+ }
46
+ function uploadFile(file, uploadOptions) {
47
+ // axios.put("/api/upload", file, { signal: uploadOptions?.abortController?.signal });
48
+ return new Promise((resolve) => {
49
+ const time = file.size / 10;
50
+ const interval = time / 10;
51
+ let loaded = 0;
52
+ const timeoutTimer = window.setTimeout(() => {
53
+ const nameParts = file.name.split(".");
54
+ resolve({
55
+ id: Math.round(Math.random() * 100000000),
56
+ uuid: getRandomUuid(),
57
+ name: nameParts.slice(0, -1).join("."),
58
+ extension: nameParts[nameParts.length - 1],
59
+ });
60
+ }, time);
61
+ const intervalTimer = window.setInterval(() => {
62
+ var _a, _b;
63
+ if ((_a = uploadOptions === null || uploadOptions === void 0 ? void 0 : uploadOptions.abortController) === null || _a === void 0 ? void 0 : _a.signal.aborted) {
64
+ clearInterval(intervalTimer);
65
+ clearTimeout(timeoutTimer);
66
+ return;
67
+ }
68
+ loaded += (file.size / time) * interval;
69
+ (_b = uploadOptions === null || uploadOptions === void 0 ? void 0 : uploadOptions.onUploadProgress) === null || _b === void 0 ? void 0 : _b.call(uploadOptions, {
70
+ lengthComputable: true,
71
+ loaded,
72
+ total: file.size,
73
+ });
74
+ }, interval);
75
+ });
76
+ }
77
+ exports.uploadFile = uploadFile;
78
+ function Default() {
79
+ const [files, setFiles] = (0, react_1.useState)([]);
80
+ const storyDropzone = (react_1.default.createElement("div", { className: "space-y-2" },
81
+ react_1.default.createElement(index_1.Dropzone, { helperText: "Disabled drag 'n' drop", label: "Use drag and drop or click to upload", noDrag: true, onChange: setFiles, onUploadFile: uploadFile, value: files }),
82
+ react_1.default.createElement(index_1.Dropzone, { helperText: "Disabled onClick upload", label: react_1.default.createElement("span", { className: "rounded-lg bg-primary-600 px-4 py-2 font-bold text-white" }, "JSX label"), noClick: true, onChange: setFiles, onUploadFile: uploadFile, value: files }),
83
+ react_1.default.createElement(index_1.Dropzone, { accept: { "image/*": [] }, label: "Only images upload", onChange: setFiles, onUploadFile: uploadFile, value: files }),
84
+ react_1.default.createElement(index_1.Dropzone, { label: "Single file upload", maxFilesCount: 1, onChange: setFiles, onUploadFile: uploadFile, value: files }),
85
+ react_1.default.createElement(index_1.Dropzone, { isDisabled: true, label: "Disabled dropzone", onChange: setFiles, onUploadFile: uploadFile, value: files }),
86
+ react_1.default.createElement(index_1.Dropzone.List, { errorText: "Chyba p\u0159i nahr\u00E1v\u00E1n\u00ED souboru", onAbortWarning: "Opravdu chcete p\u0159eru\u0161it nahr\u00E1v\u00E1n\u00ED?", onChange: setFiles, onRemoveWarning: "Opravdu chcete soubor smazat?", value: files }),
87
+ react_1.default.createElement(index_1.Dropzone.List, { onChange: setFiles, value: files, renderItem: (file) => (react_1.default.createElement("li", { key: file.id },
88
+ react_1.default.createElement("pre", null, JSON.stringify(file, null, 4)))) })));
89
+ return (react_1.default.createElement("div", { className: "flex flex-col lg:flex-row" },
90
+ react_1.default.createElement("div", { className: "light space-y-2 p-20 lg:w-1/2" }, storyDropzone),
91
+ react_1.default.createElement("div", { className: "dark space-y-2 bg-gray-900 p-20 lg:w-1/2" }, storyDropzone)));
92
+ }
93
+ exports.Default = Default;
94
+ function ComponentStructure() {
95
+ return (react_1.default.createElement(component_structure_analyzer_1.default, null,
96
+ react_1.default.createElement(index_1.Dropzone, null)));
97
+ }
98
+ exports.ComponentStructure = ComponentStructure;
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ export { DropzoneInputProps } from "./dropzone-input";
3
+ export { DropzoneListProps } from "./dropzone-list";
4
+ export declare const Dropzone: import("react").ForwardRefExoticComponent<import("./dropzone-input").DropzoneInputProps & import("react").RefAttributes<HTMLDivElement>> & {
5
+ List: import("react").FC<import("./dropzone-list").DropzoneListProps>;
6
+ };
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Dropzone = void 0;
4
+ const dropzone_input_1 = require("./dropzone-input");
5
+ const dropzone_list_1 = require("./dropzone-list");
6
+ exports.Dropzone = Object.assign(dropzone_input_1.DropzoneInput, { List: dropzone_list_1.DropzoneList });
@@ -0,0 +1,10 @@
1
+ import { FileResponse } from "@uxf/ui/types";
2
+ export interface DropzoneFile extends FileResponse {
3
+ abortController?: AbortController;
4
+ error?: unknown;
5
+ originalFile?: File;
6
+ progress: number | null;
7
+ }
8
+ export interface Accept {
9
+ [key: string]: string[];
10
+ }
File without changes
@@ -1,6 +1,5 @@
1
+ import { FileResponse, FormControlProps } from "@uxf/ui/types";
1
2
  import React from "react";
2
- import { FormControlProps } from "../types";
3
- import { FileResponse } from "./types";
4
3
  export interface BaseFileInputProps extends FormControlProps<string> {
5
4
  "aria-describedby"?: string;
6
5
  accept?: string;
@@ -1,2 +1,5 @@
1
- import React from "react";
2
- export declare const Loader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
1
+ import React, { HTMLAttributes } from "react";
2
+ export interface LoaderProps extends HTMLAttributes<HTMLDivElement> {
3
+ size?: "default" | "lg" | "sm";
4
+ }
5
+ export declare const Loader: React.ForwardRefExoticComponent<LoaderProps & React.RefAttributes<HTMLDivElement>>;
package/loader/loader.js CHANGED
@@ -5,9 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Loader = void 0;
7
7
  const cx_1 = require("@uxf/core/utils/cx");
8
- const react_1 = __importDefault(require("react"));
9
8
  const forwardRef_1 = require("@uxf/core/utils/forwardRef");
9
+ const react_1 = __importDefault(require("react"));
10
10
  exports.Loader = (0, forwardRef_1.forwardRef)("Loader", (props, ref) => {
11
- const loaderClassName = (0, cx_1.cx)("uxf-loader", props.className);
11
+ var _a;
12
+ const loaderClassName = (0, cx_1.cx)("uxf-loader", `uxf-loader--size-${(_a = props.size) !== null && _a !== void 0 ? _a : "default"}`, props.className);
12
13
  return react_1.default.createElement("span", { ref: ref, className: loaderClassName });
13
14
  });
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  declare const _default: {
3
3
  title: string;
4
- component: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
4
+ component: React.ForwardRefExoticComponent<import("./loader").LoaderProps & React.RefAttributes<HTMLDivElement>>;
5
5
  };
6
6
  export default _default;
7
7
  export declare function Default(): JSX.Element;
@@ -12,8 +12,9 @@ exports.default = {
12
12
  };
13
13
  function Default() {
14
14
  const loaders = (react_1.default.createElement(react_1.default.Fragment, null,
15
+ react_1.default.createElement(loader_1.Loader, { size: "sm" }),
15
16
  react_1.default.createElement(loader_1.Loader, null),
16
- react_1.default.createElement(loader_1.Loader, { className: "h-6 w-6" })));
17
+ react_1.default.createElement(loader_1.Loader, { size: "lg" })));
17
18
  return (react_1.default.createElement("div", { className: "flex flex-col lg:flex-row" },
18
19
  react_1.default.createElement("div", { className: "light space-y-4 space-x-4 rounded bg-white p-8" }, loaders),
19
20
  react_1.default.createElement("div", { className: "dark space-y-4 space-x-4 rounded bg-gray-900 p-8 text-white" }, loaders)));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/ui",
3
- "version": "1.0.0-beta.100",
3
+ "version": "1.0.0-beta.102",
4
4
  "description": "",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -20,7 +20,8 @@
20
20
  "@uxf/styles": "^2.1.2",
21
21
  "color2k": "^2.0.1",
22
22
  "dayjs": "^1.11.7",
23
- "jump.js": "^1.0.2"
23
+ "jump.js": "^1.0.2",
24
+ "react-dropzone": "^14.2.3"
24
25
  },
25
26
  "devDependencies": {
26
27
  "@types/jump.js": "^1.0.4",
@@ -0,0 +1 @@
1
+ export * from "./tooltip";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./tooltip"), exports);
@@ -0,0 +1,7 @@
1
+ import React, { ReactElement, ReactNode } from "react";
2
+ import { TooltipOptions } from "./use-tooltip";
3
+ export interface TooltipProps extends Omit<TooltipOptions, "arrowRef"> {
4
+ children: ReactElement;
5
+ content: ReactNode;
6
+ }
7
+ export declare const Tooltip: React.ForwardRefExoticComponent<TooltipProps & React.RefAttributes<HTMLElement>>;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Tooltip = void 0;
27
+ const react_1 = require("@floating-ui/react");
28
+ const react_2 = __importStar(require("react"));
29
+ const forwardRef_1 = require("@uxf/core/utils/forwardRef");
30
+ const use_tooltip_1 = require("./use-tooltip");
31
+ const composeRefs_1 = require("@uxf/core/utils/composeRefs");
32
+ const STATIC_SIDES = {
33
+ top: "bottom",
34
+ right: "left",
35
+ bottom: "top",
36
+ left: "right",
37
+ };
38
+ exports.Tooltip = (0, forwardRef_1.forwardRef)("Tooltip", ({ children, content, ...options }, ref) => {
39
+ var _a, _b, _c, _d;
40
+ const arrowRef = (0, react_2.useRef)(null);
41
+ const tooltip = (0, use_tooltip_1.useTooltip)({ arrowRef, ...options });
42
+ const { getReferenceProps, getFloatingProps } = (0, react_1.useInteractions)([
43
+ (0, react_1.useHover)(tooltip.context),
44
+ (0, react_1.useFocus)(tooltip.context),
45
+ (0, react_1.useRole)(tooltip.context, { role: "tooltip" }),
46
+ (0, react_1.useDismiss)(tooltip.context),
47
+ ]);
48
+ const arrowX = (_a = tooltip.middlewareData.arrow) === null || _a === void 0 ? void 0 : _a.x;
49
+ const arrowY = (_b = tooltip.middlewareData.arrow) === null || _b === void 0 ? void 0 : _b.y;
50
+ const staticSide = STATIC_SIDES[tooltip.placement.split("-")[0]];
51
+ const stableRef = (0, react_2.useMemo)(() => (0, composeRefs_1.composeRefs)(ref, tooltip.reference, children.ref), [ref, tooltip.reference, children]);
52
+ return (react_2.default.createElement(react_2.default.Fragment, null,
53
+ (0, react_2.cloneElement)(children, getReferenceProps({
54
+ ref: stableRef,
55
+ ...children.props,
56
+ "data-state": tooltip.open ? "open" : "closed",
57
+ })),
58
+ tooltip.open && (react_2.default.createElement("div", { ...getFloatingProps({
59
+ ref: tooltip.floating,
60
+ style: {
61
+ position: tooltip.strategy,
62
+ top: (_c = tooltip.y) !== null && _c !== void 0 ? _c : 0,
63
+ left: (_d = tooltip.x) !== null && _d !== void 0 ? _d : 0,
64
+ visibility: tooltip.x === null ? "hidden" : "visible",
65
+ },
66
+ className: "uxf-tooltip__content",
67
+ }) },
68
+ content,
69
+ react_2.default.createElement("div", { className: "uxf-tooltip__arrow", ref: arrowRef, style: {
70
+ height: "16px",
71
+ left: arrowX !== undefined ? `${arrowX}px` : "",
72
+ position: "absolute",
73
+ top: arrowY !== undefined ? `${arrowY}px` : "",
74
+ transform: "rotate(45deg)",
75
+ width: "16px",
76
+ zIndex: "-1",
77
+ [staticSide]: "-6px",
78
+ } })))));
79
+ });
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ declare const _default: {
3
+ title: string;
4
+ component: React.ForwardRefExoticComponent<import("./tooltip").TooltipProps & React.RefAttributes<HTMLElement>>;
5
+ };
6
+ export default _default;
7
+ export declare function Default(): JSX.Element;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Default = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const tooltip_1 = require("./tooltip");
9
+ const chip_1 = require("../chip");
10
+ exports.default = {
11
+ title: "UI/Tooltip",
12
+ component: tooltip_1.Tooltip,
13
+ };
14
+ function Default() {
15
+ const sides = ["top", "bottom", "bottom-start", "left", "right"];
16
+ return (react_1.default.createElement("div", { className: "grid h-96 place-items-center" }, sides.map((placement) => (react_1.default.createElement(tooltip_1.Tooltip, { content: "My tooltip content", key: placement, placement: placement },
17
+ react_1.default.createElement(chip_1.Chip, { color: "green" }, placement))))));
18
+ }
19
+ exports.Default = Default;
@@ -0,0 +1,28 @@
1
+ import { MutableRefObject } from "react";
2
+ import { Placement } from "@floating-ui/react";
3
+ export interface TooltipOptions {
4
+ arrowRef: MutableRefObject<null>;
5
+ offset?: number;
6
+ placement?: Placement;
7
+ shiftPadding?: number;
8
+ }
9
+ export declare function useTooltip(options: TooltipOptions): {
10
+ placement: Placement;
11
+ strategy: import("@floating-ui/react").Strategy;
12
+ middlewareData: import("@floating-ui/react").MiddlewareData;
13
+ x: number | null;
14
+ y: number | null;
15
+ update: () => void;
16
+ reference: (node: import("@floating-ui/react").ReferenceType | null) => void;
17
+ floating: (node: HTMLElement | null) => void;
18
+ positionReference: (node: import("@floating-ui/react").ReferenceType | null) => void;
19
+ context: import("@floating-ui/react").FloatingContext<import("@floating-ui/react").ReferenceType>;
20
+ refs: import("@floating-ui/react").ExtendedRefs<import("@floating-ui/react").ReferenceType>;
21
+ elements: import("@floating-ui/react").ExtendedElements<import("@floating-ui/react").ReferenceType>;
22
+ isPositioned: boolean;
23
+ getReferenceProps: (userProps?: import("react").HTMLProps<Element> | undefined) => Record<string, unknown>;
24
+ getFloatingProps: (userProps?: import("react").HTMLProps<HTMLElement> | undefined) => Record<string, unknown>;
25
+ getItemProps: (userProps?: import("react").HTMLProps<HTMLElement> | undefined) => Record<string, unknown>;
26
+ open: boolean;
27
+ setOpen: import("react").Dispatch<import("react").SetStateAction<boolean>>;
28
+ };
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useTooltip = void 0;
4
+ const react_1 = require("react");
5
+ const react_2 = require("@floating-ui/react");
6
+ function useTooltip(options) {
7
+ var _a, _b;
8
+ const [open, setOpen] = (0, react_1.useState)(false);
9
+ const data = (0, react_2.useFloating)({
10
+ placement: options.placement,
11
+ open,
12
+ onOpenChange: setOpen,
13
+ whileElementsMounted: react_2.autoUpdate,
14
+ middleware: [
15
+ (0, react_2.offset)((_a = options.offset) !== null && _a !== void 0 ? _a : 16),
16
+ (0, react_2.flip)(),
17
+ (0, react_2.shift)({ padding: (_b = options.shiftPadding) !== null && _b !== void 0 ? _b : 8 }),
18
+ (0, react_2.arrow)({ element: options.arrowRef }),
19
+ ],
20
+ });
21
+ const context = data.context;
22
+ const hover = (0, react_2.useHover)(context, {
23
+ move: false,
24
+ });
25
+ const dismiss = (0, react_2.useDismiss)(context);
26
+ const role = (0, react_2.useRole)(context, { role: "tooltip" });
27
+ const interactions = (0, react_2.useInteractions)([hover, dismiss, role]);
28
+ return (0, react_1.useMemo)(() => ({
29
+ open,
30
+ setOpen,
31
+ ...interactions,
32
+ ...data,
33
+ }), [open, setOpen, interactions, data]);
34
+ }
35
+ exports.useTooltip = useTooltip;
@@ -0,0 +1,12 @@
1
+ export interface FileResponse {
2
+ extension: string;
3
+ id: number;
4
+ name: string;
5
+ namespace?: string | null;
6
+ uuid: string;
7
+ }
8
+ export interface UploadOptions {
9
+ abortController?: AbortController;
10
+ onUploadProgress?: (progressEvent: UploadProgressEvent) => void;
11
+ }
12
+ export declare type UploadProgressEvent = Pick<ProgressEvent, "lengthComputable" | "loaded" | "total">;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/types/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from "./color";
2
2
  export * from "./form-control-props";
3
+ export * from "./file-response";
package/types/index.js CHANGED
@@ -16,3 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./color"), exports);
18
18
  __exportStar(require("./form-control-props"), exports);
19
+ __exportStar(require("./file-response"), exports);
@@ -65,6 +65,21 @@ module.exports = {
65
65
  height: 512,
66
66
  data: `<path d="M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9-.1-2.7-.2-5.4-.2-8.1 0-88.4 71.6-160 160-160 59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96 0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128H144zm79-217c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39V392c0 13.3 10.7 24 24 24s24-10.7 24-24V257.9l39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0l-80 80z" fill="currentColor"/>`,
67
67
  },
68
+ file: {
69
+ width: 384,
70
+ height: 512,
71
+ data: `<path d="M0 64C0 28.65 28.65 0 64 0h165.5c17 0 33.2 6.743 45.2 18.75l90.6 90.55c12 12 18.7 28.2 18.7 45.2V448c0 35.3-28.7 64-64 64H64c-35.35 0-64-28.7-64-64V64zm336 384V160h-80c-17.7 0-32-14.3-32-32V48H64c-8.84 0-16 7.16-16 16v384c0 8.8 7.16 16 16 16h256c8.8 0 16-7.2 16-16z" fill="currentColor" />`,
72
+ },
73
+ imageFile: {
74
+ width: 384,
75
+ height: 512,
76
+ data: `<path d="m365.3 93.38-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6c0-16.9-6.7-33.2-18.7-45.22zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160V128c0 17.67 14.33 32 32 32h79.1v288zM215.3 292c-4.68 0-9.051 2.34-11.65 6.234L164 357.8l-11.68-17.53c-2.62-3.97-7.02-6.27-11.62-6.27-4.682 0-9.053 2.34-11.65 6.234l-46.67 70c-2.865 4.297-3.131 9.82-.6953 14.37C84.09 429.2 88.84 432 93.1 432h196c5.163 0 9.907-2.844 12.34-7.395 2.436-4.551 2.17-10.07-.6953-14.37l-74.67-112C224.4 294.3 220 292 215.3 292zm-87.3-4c17.67 0 32-14.33 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z" fill="currentColor" />`,
77
+ },
78
+ videoFile: {
79
+ width: 384,
80
+ height: 512,
81
+ data: `<path d="m365.3 93.38-74.63-74.64C278.6 6.742 262.3 0 245.4 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.34 28.65 64 64 64H320c35.2 0 64-28.8 64-64V138.6c0-16.9-6.7-33.2-18.7-45.22zM336 448c0 8.836-7.164 16-16 16H64.02c-8.838 0-16-7.164-16-16L48 64.13c0-8.836 7.164-16 16-16h160V128c0 17.67 14.33 32 32 32h79.1v288zm-96-160c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-16.52l43.84 30.2c8.46 5.82 20.16-.08 20.16-10.28V284.6c0-10.16-11.64-16.16-20.16-10.32L240 304.5V288z" fill="currentColor" />`,
82
+ },
68
83
  user: {
69
84
  width: 448,
70
85
  height: 512,
@@ -1,7 +0,0 @@
1
- export interface FileResponse {
2
- extension: string;
3
- id: number;
4
- name: string;
5
- namespace?: string | null;
6
- uuid: string;
7
- }