@uipath/apollo-wind 0.9.0 → 0.10.0-pr257.2a4b17b

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 (145) hide show
  1. package/dist/components/forms/field-renderer.cjs +120 -69
  2. package/dist/components/forms/field-renderer.js +120 -69
  3. package/dist/components/forms/form-designer.cjs +2352 -1488
  4. package/dist/components/forms/form-designer.js +2353 -1489
  5. package/dist/components/forms/form-examples.cjs +10 -10
  6. package/dist/components/forms/form-examples.js +10 -10
  7. package/dist/components/forms/form-state-viewer.cjs +988 -433
  8. package/dist/components/forms/form-state-viewer.js +988 -433
  9. package/dist/components/forms/metadata-form.cjs +446 -170
  10. package/dist/components/forms/metadata-form.js +446 -170
  11. package/dist/components/forms/schema-viewer.cjs +173 -80
  12. package/dist/components/forms/schema-viewer.js +173 -80
  13. package/dist/components/ui/accordion.cjs +131 -27
  14. package/dist/components/ui/accordion.js +131 -27
  15. package/dist/components/ui/alert-dialog.cjs +273 -45
  16. package/dist/components/ui/alert-dialog.js +273 -45
  17. package/dist/components/ui/alert.cjs +106 -17
  18. package/dist/components/ui/alert.js +106 -17
  19. package/dist/components/ui/avatar.cjs +100 -15
  20. package/dist/components/ui/avatar.js +100 -15
  21. package/dist/components/ui/badge.cjs +36 -6
  22. package/dist/components/ui/badge.js +36 -6
  23. package/dist/components/ui/breadcrumb.cjs +258 -52
  24. package/dist/components/ui/breadcrumb.js +258 -52
  25. package/dist/components/ui/button-group.cjs +119 -19
  26. package/dist/components/ui/button-group.js +119 -19
  27. package/dist/components/ui/button.cjs +48 -8
  28. package/dist/components/ui/button.js +48 -8
  29. package/dist/components/ui/calendar.cjs +88 -30
  30. package/dist/components/ui/calendar.js +88 -30
  31. package/dist/components/ui/card.cjs +199 -30
  32. package/dist/components/ui/card.js +199 -30
  33. package/dist/components/ui/checkbox.cjs +42 -8
  34. package/dist/components/ui/checkbox.js +42 -8
  35. package/dist/components/ui/combobox.cjs +150 -53
  36. package/dist/components/ui/combobox.js +150 -53
  37. package/dist/components/ui/command.cjs +291 -53
  38. package/dist/components/ui/command.js +291 -53
  39. package/dist/components/ui/context-menu.cjs +370 -72
  40. package/dist/components/ui/context-menu.js +370 -72
  41. package/dist/components/ui/data-table.cjs +76 -39
  42. package/dist/components/ui/data-table.js +76 -39
  43. package/dist/components/ui/date-picker.cjs +179 -68
  44. package/dist/components/ui/date-picker.js +179 -68
  45. package/dist/components/ui/datetime-picker.cjs +225 -104
  46. package/dist/components/ui/datetime-picker.js +225 -104
  47. package/dist/components/ui/dialog.cjs +290 -78
  48. package/dist/components/ui/dialog.js +290 -78
  49. package/dist/components/ui/drawer.cjs +220 -39
  50. package/dist/components/ui/drawer.js +220 -39
  51. package/dist/components/ui/dropdown-menu.cjs +376 -73
  52. package/dist/components/ui/dropdown-menu.js +376 -73
  53. package/dist/components/ui/editable-cell.cjs +106 -42
  54. package/dist/components/ui/editable-cell.js +106 -42
  55. package/dist/components/ui/empty-state.cjs +106 -33
  56. package/dist/components/ui/empty-state.js +106 -33
  57. package/dist/components/ui/file-upload.cjs +405 -187
  58. package/dist/components/ui/file-upload.d.ts +3 -1
  59. package/dist/components/ui/file-upload.js +405 -187
  60. package/dist/components/ui/hover-card.cjs +46 -7
  61. package/dist/components/ui/hover-card.js +46 -7
  62. package/dist/components/ui/index.cjs +4 -4
  63. package/dist/components/ui/input.cjs +39 -6
  64. package/dist/components/ui/input.js +39 -6
  65. package/dist/components/ui/label.cjs +34 -5
  66. package/dist/components/ui/label.js +34 -5
  67. package/dist/components/ui/layout/column.cjs +209 -41
  68. package/dist/components/ui/layout/column.js +209 -41
  69. package/dist/components/ui/layout/grid.cjs +275 -60
  70. package/dist/components/ui/layout/grid.js +275 -60
  71. package/dist/components/ui/layout/row.cjs +209 -41
  72. package/dist/components/ui/layout/row.js +209 -41
  73. package/dist/components/ui/menubar.cjs +540 -106
  74. package/dist/components/ui/menubar.js +540 -106
  75. package/dist/components/ui/multi-select.cjs +289 -135
  76. package/dist/components/ui/multi-select.js +289 -135
  77. package/dist/components/ui/navigation-menu.cjs +244 -47
  78. package/dist/components/ui/navigation-menu.js +244 -47
  79. package/dist/components/ui/pagination.cjs +301 -65
  80. package/dist/components/ui/pagination.js +301 -65
  81. package/dist/components/ui/popover.cjs +48 -9
  82. package/dist/components/ui/popover.js +48 -9
  83. package/dist/components/ui/progress.cjs +48 -8
  84. package/dist/components/ui/progress.js +48 -8
  85. package/dist/components/ui/radio-group.cjs +74 -12
  86. package/dist/components/ui/radio-group.js +74 -12
  87. package/dist/components/ui/resizable.cjs +75 -10
  88. package/dist/components/ui/resizable.js +75 -10
  89. package/dist/components/ui/scroll-area.cjs +113 -21
  90. package/dist/components/ui/scroll-area.js +113 -21
  91. package/dist/components/ui/search.cjs +280 -98
  92. package/dist/components/ui/search.js +280 -98
  93. package/dist/components/ui/select.cjs +334 -68
  94. package/dist/components/ui/select.js +334 -68
  95. package/dist/components/ui/separator.cjs +48 -7
  96. package/dist/components/ui/separator.js +48 -7
  97. package/dist/components/ui/sheet.cjs +236 -50
  98. package/dist/components/ui/sheet.js +236 -50
  99. package/dist/components/ui/skeleton.cjs +31 -5
  100. package/dist/components/ui/skeleton.js +31 -5
  101. package/dist/components/ui/slider.cjs +71 -21
  102. package/dist/components/ui/slider.js +71 -21
  103. package/dist/components/ui/sonner.cjs +43 -15
  104. package/dist/components/ui/sonner.js +43 -15
  105. package/dist/components/ui/spinner.cjs +83 -21
  106. package/dist/components/ui/spinner.js +83 -21
  107. package/dist/components/ui/stats-card.cjs +169 -60
  108. package/dist/components/ui/stats-card.js +169 -60
  109. package/dist/components/ui/stepper.cjs +126 -57
  110. package/dist/components/ui/stepper.js +126 -57
  111. package/dist/components/ui/switch.cjs +42 -8
  112. package/dist/components/ui/switch.js +42 -8
  113. package/dist/components/ui/table.cjs +267 -42
  114. package/dist/components/ui/table.js +267 -42
  115. package/dist/components/ui/tabs.cjs +100 -15
  116. package/dist/components/ui/tabs.js +100 -15
  117. package/dist/components/ui/textarea.cjs +34 -5
  118. package/dist/components/ui/textarea.js +34 -5
  119. package/dist/components/ui/toggle-group.cjs +112 -19
  120. package/dist/components/ui/toggle-group.js +112 -19
  121. package/dist/components/ui/toggle.cjs +43 -6
  122. package/dist/components/ui/toggle.js +43 -6
  123. package/dist/components/ui/tooltip.cjs +40 -6
  124. package/dist/components/ui/tooltip.js +40 -6
  125. package/dist/examples/admin-layout-example.cjs +879 -347
  126. package/dist/examples/admin-layout-example.js +879 -347
  127. package/dist/examples/app-shell-example.cjs +14 -14
  128. package/dist/examples/app-shell-example.js +14 -14
  129. package/dist/examples/dashboard-example.cjs +495 -334
  130. package/dist/examples/dashboard-example.js +495 -334
  131. package/dist/examples/data-management-example.cjs +501 -303
  132. package/dist/examples/data-management-example.js +502 -304
  133. package/dist/examples/flow-editor-layout-example.cjs +435 -231
  134. package/dist/examples/flow-editor-layout-example.js +436 -232
  135. package/dist/examples/flow-start-example.cjs +508 -251
  136. package/dist/examples/flow-start-example.js +509 -252
  137. package/dist/examples/form-builder-example.cjs +1006 -602
  138. package/dist/examples/form-builder-example.js +1007 -603
  139. package/dist/examples/new-project-example.cjs +806 -474
  140. package/dist/examples/new-project-example.js +807 -475
  141. package/dist/examples/settings-example.cjs +792 -704
  142. package/dist/examples/settings-example.js +792 -704
  143. package/dist/examples/vscode-example.cjs +731 -236
  144. package/dist/examples/vscode-example.js +731 -236
  145. package/package.json +4 -1
@@ -28,204 +28,422 @@ __webpack_require__.d(__webpack_exports__, {
28
28
  FileUpload: ()=>FileUpload
29
29
  });
30
30
  const jsx_runtime_namespaceObject = require("react/jsx-runtime");
31
+ const compiler_runtime_namespaceObject = require("react/compiler-runtime");
31
32
  const external_lucide_react_namespaceObject = require("lucide-react");
32
33
  const external_react_namespaceObject = require("react");
33
34
  const external_button_cjs_namespaceObject = require("./button.cjs");
34
35
  const index_cjs_namespaceObject = require("../../lib/index.cjs");
35
- function FileUpload({ onFilesChange, accept, multiple = false, disabled = false, maxSize, className, showPreview = false }) {
36
- const [files, setFiles] = external_react_namespaceObject.useState([]);
36
+ function FileUpload(t0) {
37
+ const $ = (0, compiler_runtime_namespaceObject.c)(72);
38
+ const { onFilesChange, accept, multiple: t1, disabled: t2, maxSize, className, showPreview: t3, errors } = t0;
39
+ const multiple = void 0 === t1 ? false : t1;
40
+ const disabled = void 0 === t2 ? false : t2;
41
+ const showPreview = void 0 === t3 ? false : t3;
42
+ let t4;
43
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
44
+ t4 = [];
45
+ $[0] = t4;
46
+ } else t4 = $[0];
47
+ const [files, setFiles] = external_react_namespaceObject.useState(t4);
37
48
  const [isDragging, setIsDragging] = external_react_namespaceObject.useState(false);
38
- const [error, setError] = external_react_namespaceObject.useState('');
39
- const [previews, setPreviews] = external_react_namespaceObject.useState([]);
49
+ let t5;
50
+ if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
51
+ t5 = new Map();
52
+ $[1] = t5;
53
+ } else t5 = $[1];
54
+ const [fileErrors, setFileErrors] = external_react_namespaceObject.useState(t5);
55
+ let t6;
56
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
57
+ t6 = [];
58
+ $[2] = t6;
59
+ } else t6 = $[2];
60
+ const [previews, setPreviews] = external_react_namespaceObject.useState(t6);
40
61
  const inputRef = external_react_namespaceObject.useRef(null);
41
- const validateFiles = (fileList)=>{
42
- setError('');
43
- const validFiles = [];
44
- for (const file of fileList){
45
- if (maxSize && file.size > maxSize) {
46
- setError(`File "${file.name}" exceeds maximum size of ${formatFileSize(maxSize)}`);
47
- continue;
62
+ let t7;
63
+ if ($[3] !== accept) {
64
+ t7 = (file)=>{
65
+ if (!accept) return true;
66
+ const acceptedTypes = accept.split(",").map(_temp);
67
+ for (const acceptedType of acceptedTypes)if (acceptedType.endsWith("/*")) {
68
+ const baseType = acceptedType.slice(0, -2);
69
+ if (file.type.toLowerCase().startsWith(baseType)) return true;
70
+ } else if (acceptedType.includes("/")) {
71
+ if (file.type.toLowerCase() === acceptedType) return true;
72
+ } else if (acceptedType.startsWith(".")) {
73
+ if (file.name.toLowerCase().endsWith(acceptedType)) return true;
48
74
  }
49
- const isDuplicate = files.some((existingFile)=>existingFile.name === file.name && existingFile.size === file.size);
50
- if (!isDuplicate) validFiles.push(file);
51
- }
52
- return validFiles;
53
- };
54
- const handleFiles = (fileList)=>{
55
- if (!fileList || 0 === fileList.length) return;
56
- const filesArray = Array.from(fileList);
57
- const validFiles = validateFiles(filesArray);
58
- if (0 === validFiles.length) return;
59
- const newFiles = multiple ? [
60
- ...files,
61
- ...validFiles
62
- ] : validFiles;
63
- setFiles(newFiles);
64
- onFilesChange?.(newFiles);
65
- if (showPreview) {
66
- const newPreviews = [];
67
- validFiles.forEach((file)=>{
68
- if (file.type.startsWith('image/')) {
69
- const reader = new FileReader();
70
- reader.onloadend = ()=>{
71
- newPreviews.push(reader.result);
72
- if (newPreviews.length === validFiles.filter((f)=>f.type.startsWith('image/')).length) setPreviews(multiple ? [
73
- ...previews,
74
- ...newPreviews
75
- ] : newPreviews);
76
- };
77
- reader.readAsDataURL(file);
75
+ return false;
76
+ };
77
+ $[3] = accept;
78
+ $[4] = t7;
79
+ } else t7 = $[4];
80
+ const isFileTypeAccepted = t7;
81
+ let formatFileSize;
82
+ let handleClick;
83
+ let handleDragEnter;
84
+ let handleDragLeave;
85
+ let handleDragOver;
86
+ let handleDrop;
87
+ let handleInputChange;
88
+ let removeFile;
89
+ if ($[5] !== disabled || $[6] !== fileErrors || $[7] !== files || $[8] !== isFileTypeAccepted || $[9] !== maxSize || $[10] !== multiple || $[11] !== onFilesChange || $[12] !== previews || $[13] !== showPreview) {
90
+ const validateFiles = (fileList, startIndex, existingErrors)=>{
91
+ const validFiles = [];
92
+ const errors_0 = multiple ? new Map(existingErrors) : new Map();
93
+ for (const file_0 of fileList){
94
+ const fileIndex = startIndex + validFiles.length;
95
+ if (!isFileTypeAccepted(file_0)) {
96
+ errors_0.set(fileIndex, "File type not accepted");
97
+ validFiles.push(file_0);
98
+ continue;
78
99
  }
79
- });
80
- }
81
- };
82
- const removeFile = (index)=>{
83
- const newFiles = files.filter((_, i)=>i !== index);
84
- setFiles(newFiles);
85
- onFilesChange?.(newFiles);
86
- if (showPreview) {
87
- const newPreviews = previews.filter((_, i)=>i !== index);
88
- setPreviews(newPreviews);
89
- }
90
- setError('');
91
- };
92
- const handleDragEnter = (e)=>{
93
- e.preventDefault();
94
- e.stopPropagation();
95
- if (!disabled) setIsDragging(true);
96
- };
97
- const handleDragLeave = (e)=>{
98
- e.preventDefault();
99
- e.stopPropagation();
100
- setIsDragging(false);
101
- };
102
- const handleDragOver = (e)=>{
103
- e.preventDefault();
104
- e.stopPropagation();
105
- };
106
- const handleDrop = (e)=>{
107
- e.preventDefault();
108
- e.stopPropagation();
109
- setIsDragging(false);
110
- if (!disabled) handleFiles(e.dataTransfer.files);
111
- };
112
- const handleInputChange = (e)=>{
113
- handleFiles(e.target.files);
114
- if (inputRef.current) inputRef.current.value = '';
115
- };
116
- const handleClick = ()=>{
117
- if (!disabled) inputRef.current?.click();
118
- };
119
- const formatFileSize = (bytes)=>{
120
- if (0 === bytes) return '0 Bytes';
121
- const k = 1024;
122
- const sizes = [
123
- 'Bytes',
124
- 'KB',
125
- 'MB',
126
- 'GB'
127
- ];
128
- const i = Math.floor(Math.log(bytes) / Math.log(k));
129
- return Math.round(bytes / k ** i * 100) / 100 + ' ' + sizes[i];
130
- };
131
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
132
- className: (0, index_cjs_namespaceObject.cn)('w-full', className),
133
- children: [
134
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
135
- className: (0, index_cjs_namespaceObject.cn)('relative flex flex-col items-center justify-center w-full h-32 px-4 py-6 border-2 border-dashed rounded-lg cursor-pointer transition-colors', isDragging ? 'border-primary bg-primary/5' : 'border-input bg-background hover:bg-accent/50', disabled && 'opacity-50 cursor-not-allowed hover:bg-background', error && 'border-destructive'),
136
- onDragEnter: handleDragEnter,
137
- onDragOver: handleDragOver,
138
- onDragLeave: handleDragLeave,
139
- onDrop: handleDrop,
140
- onClick: handleClick,
141
- children: [
142
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("input", {
143
- ref: inputRef,
144
- type: "file",
145
- className: "hidden",
146
- accept: accept,
147
- multiple: multiple,
148
- disabled: disabled,
149
- onChange: handleInputChange,
150
- "aria-label": "File upload"
151
- }),
152
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_lucide_react_namespaceObject.Upload, {
153
- className: "w-8 h-8 mb-2 text-muted-foreground"
154
- }),
155
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("p", {
156
- className: "text-sm text-muted-foreground text-center",
157
- children: [
158
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
159
- className: "font-semibold",
160
- children: "Click to upload"
161
- }),
162
- " or drag and drop"
163
- ]
164
- }),
165
- accept && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("p", {
166
- className: "text-xs text-muted-foreground mt-1",
167
- children: accept.split(',').join(', ')
168
- }),
169
- maxSize && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("p", {
170
- className: "text-xs text-muted-foreground",
171
- children: [
172
- "Max size: ",
173
- formatFileSize(maxSize)
174
- ]
175
- })
176
- ]
177
- }),
178
- error && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("p", {
179
- className: "text-sm text-destructive mt-2",
180
- children: error
181
- }),
182
- files.length > 0 && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
183
- className: "mt-4 space-y-2",
184
- children: files.map((file, index)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
185
- className: "flex items-center justify-between p-3 bg-accent/50 rounded-md",
186
- children: [
187
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
188
- className: "flex items-center gap-3 flex-1 min-w-0",
189
- children: [
190
- showPreview && previews[index] && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("img", {
191
- src: previews[index],
192
- alt: file.name,
193
- className: "w-10 h-10 object-cover rounded"
194
- }),
195
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
196
- className: "flex-1 min-w-0",
197
- children: [
198
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("p", {
199
- className: "text-sm font-medium truncate",
200
- children: file.name
201
- }),
202
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("p", {
203
- className: "text-xs text-muted-foreground",
204
- children: formatFileSize(file.size)
205
- })
206
- ]
100
+ if (maxSize && file_0.size > maxSize) {
101
+ errors_0.set(fileIndex, `Exceeds maximum size of ${formatFileSize(maxSize)}`);
102
+ validFiles.push(file_0);
103
+ continue;
104
+ }
105
+ const isDuplicate = files.some((existingFile)=>existingFile.name === file_0.name && existingFile.size === file_0.size);
106
+ if (!isDuplicate) validFiles.push(file_0);
107
+ }
108
+ return {
109
+ validFiles,
110
+ errors: errors_0
111
+ };
112
+ };
113
+ const handleFiles = (fileList_0)=>{
114
+ if (!fileList_0 || 0 === fileList_0.length) return;
115
+ const filesArray = Array.from(fileList_0);
116
+ const startIndex_0 = multiple ? files.length : 0;
117
+ const { validFiles: validFiles_0, errors: errors_1 } = validateFiles(filesArray, startIndex_0, fileErrors);
118
+ if (0 === validFiles_0.length) return;
119
+ const newFiles = multiple ? [
120
+ ...files,
121
+ ...validFiles_0
122
+ ] : validFiles_0;
123
+ setFiles(newFiles);
124
+ onFilesChange?.(newFiles);
125
+ setFileErrors(errors_1);
126
+ if (showPreview) {
127
+ const newPreviews = [];
128
+ validFiles_0.forEach((file_1)=>{
129
+ if (file_1.type.startsWith("image/")) {
130
+ const reader = new FileReader();
131
+ reader.onloadend = ()=>{
132
+ newPreviews.push(reader.result);
133
+ if (newPreviews.length === validFiles_0.filter(_temp2).length) setPreviews(multiple ? [
134
+ ...previews,
135
+ ...newPreviews
136
+ ] : newPreviews);
137
+ };
138
+ reader.readAsDataURL(file_1);
139
+ }
140
+ });
141
+ }
142
+ };
143
+ let t8;
144
+ if ($[22] !== files || $[23] !== onFilesChange || $[24] !== previews || $[25] !== showPreview) {
145
+ t8 = (index)=>{
146
+ const newFiles_0 = files.filter((_, i)=>i !== index);
147
+ setFiles(newFiles_0);
148
+ onFilesChange?.(newFiles_0);
149
+ if (showPreview) {
150
+ const newPreviews_0 = previews.filter((__0, i_0)=>i_0 !== index);
151
+ setPreviews(newPreviews_0);
152
+ }
153
+ setFileErrors((prev)=>{
154
+ const updated = new Map();
155
+ prev.forEach((error, i_1)=>{
156
+ if (i_1 < index) updated.set(i_1, error);
157
+ else if (i_1 > index) updated.set(i_1 - 1, error);
158
+ });
159
+ return updated;
160
+ });
161
+ };
162
+ $[22] = files;
163
+ $[23] = onFilesChange;
164
+ $[24] = previews;
165
+ $[25] = showPreview;
166
+ $[26] = t8;
167
+ } else t8 = $[26];
168
+ removeFile = t8;
169
+ let t9;
170
+ if ($[27] !== disabled) {
171
+ t9 = (e)=>{
172
+ e.preventDefault();
173
+ e.stopPropagation();
174
+ if (!disabled) setIsDragging(true);
175
+ };
176
+ $[27] = disabled;
177
+ $[28] = t9;
178
+ } else t9 = $[28];
179
+ handleDragEnter = t9;
180
+ let t10;
181
+ if ($[29] === Symbol.for("react.memo_cache_sentinel")) {
182
+ t10 = (e_0)=>{
183
+ e_0.preventDefault();
184
+ e_0.stopPropagation();
185
+ setIsDragging(false);
186
+ };
187
+ $[29] = t10;
188
+ } else t10 = $[29];
189
+ handleDragLeave = t10;
190
+ handleDragOver = _temp3;
191
+ handleDrop = (e_2)=>{
192
+ e_2.preventDefault();
193
+ e_2.stopPropagation();
194
+ setIsDragging(false);
195
+ if (!disabled) handleFiles(e_2.dataTransfer.files);
196
+ };
197
+ handleInputChange = (e_3)=>{
198
+ handleFiles(e_3.target.files);
199
+ if (inputRef.current) inputRef.current.value = "";
200
+ };
201
+ let t11;
202
+ if ($[30] !== disabled) {
203
+ t11 = ()=>{
204
+ if (!disabled) inputRef.current?.click();
205
+ };
206
+ $[30] = disabled;
207
+ $[31] = t11;
208
+ } else t11 = $[31];
209
+ handleClick = t11;
210
+ formatFileSize = _temp4;
211
+ $[5] = disabled;
212
+ $[6] = fileErrors;
213
+ $[7] = files;
214
+ $[8] = isFileTypeAccepted;
215
+ $[9] = maxSize;
216
+ $[10] = multiple;
217
+ $[11] = onFilesChange;
218
+ $[12] = previews;
219
+ $[13] = showPreview;
220
+ $[14] = formatFileSize;
221
+ $[15] = handleClick;
222
+ $[16] = handleDragEnter;
223
+ $[17] = handleDragLeave;
224
+ $[18] = handleDragOver;
225
+ $[19] = handleDrop;
226
+ $[20] = handleInputChange;
227
+ $[21] = removeFile;
228
+ } else {
229
+ formatFileSize = $[14];
230
+ handleClick = $[15];
231
+ handleDragEnter = $[16];
232
+ handleDragLeave = $[17];
233
+ handleDragOver = $[18];
234
+ handleDrop = $[19];
235
+ handleInputChange = $[20];
236
+ removeFile = $[21];
237
+ }
238
+ let t8;
239
+ if ($[32] !== className) {
240
+ t8 = (0, index_cjs_namespaceObject.cn)("w-full", className);
241
+ $[32] = className;
242
+ $[33] = t8;
243
+ } else t8 = $[33];
244
+ const t9 = isDragging ? "border-primary bg-primary/5" : "border-input bg-background hover:bg-accent/50";
245
+ const t10 = disabled && "opacity-50 cursor-not-allowed hover:bg-background";
246
+ let t11;
247
+ if ($[34] !== t10 || $[35] !== t9) {
248
+ t11 = (0, index_cjs_namespaceObject.cn)("relative flex flex-col items-center justify-center w-full h-32 px-4 py-6 border-2 border-dashed rounded-lg cursor-pointer transition-colors", t9, t10);
249
+ $[34] = t10;
250
+ $[35] = t9;
251
+ $[36] = t11;
252
+ } else t11 = $[36];
253
+ let t12;
254
+ if ($[37] !== accept || $[38] !== disabled || $[39] !== handleInputChange || $[40] !== multiple) {
255
+ t12 = /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("input", {
256
+ ref: inputRef,
257
+ type: "file",
258
+ className: "hidden",
259
+ accept: accept,
260
+ multiple: multiple,
261
+ disabled: disabled,
262
+ onChange: handleInputChange,
263
+ "aria-label": "File upload"
264
+ });
265
+ $[37] = accept;
266
+ $[38] = disabled;
267
+ $[39] = handleInputChange;
268
+ $[40] = multiple;
269
+ $[41] = t12;
270
+ } else t12 = $[41];
271
+ let t13;
272
+ if ($[42] === Symbol.for("react.memo_cache_sentinel")) {
273
+ t13 = /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_lucide_react_namespaceObject.Upload, {
274
+ className: "w-8 h-8 mb-2 text-muted-foreground"
275
+ });
276
+ $[42] = t13;
277
+ } else t13 = $[42];
278
+ let t14;
279
+ if ($[43] === Symbol.for("react.memo_cache_sentinel")) {
280
+ t14 = /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("p", {
281
+ className: "text-sm text-muted-foreground text-center",
282
+ children: [
283
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
284
+ className: "font-semibold",
285
+ children: "Click to upload"
286
+ }),
287
+ " or drag and drop"
288
+ ]
289
+ });
290
+ $[43] = t14;
291
+ } else t14 = $[43];
292
+ let t15;
293
+ if ($[44] !== accept) {
294
+ t15 = accept && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("p", {
295
+ className: "text-xs text-muted-foreground mt-1",
296
+ children: accept.split(",").join(", ")
297
+ });
298
+ $[44] = accept;
299
+ $[45] = t15;
300
+ } else t15 = $[45];
301
+ let t16;
302
+ if ($[46] !== formatFileSize || $[47] !== maxSize) {
303
+ t16 = maxSize && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("p", {
304
+ className: "text-xs text-muted-foreground",
305
+ children: [
306
+ "Max size: ",
307
+ formatFileSize(maxSize)
308
+ ]
309
+ });
310
+ $[46] = formatFileSize;
311
+ $[47] = maxSize;
312
+ $[48] = t16;
313
+ } else t16 = $[48];
314
+ let t17;
315
+ if ($[49] !== handleClick || $[50] !== handleDragEnter || $[51] !== handleDragLeave || $[52] !== handleDragOver || $[53] !== handleDrop || $[54] !== t11 || $[55] !== t12 || $[56] !== t15 || $[57] !== t16) {
316
+ t17 = /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
317
+ className: t11,
318
+ onDragEnter: handleDragEnter,
319
+ onDragOver: handleDragOver,
320
+ onDragLeave: handleDragLeave,
321
+ onDrop: handleDrop,
322
+ onClick: handleClick,
323
+ children: [
324
+ t12,
325
+ t13,
326
+ t14,
327
+ t15,
328
+ t16
329
+ ]
330
+ });
331
+ $[49] = handleClick;
332
+ $[50] = handleDragEnter;
333
+ $[51] = handleDragLeave;
334
+ $[52] = handleDragOver;
335
+ $[53] = handleDrop;
336
+ $[54] = t11;
337
+ $[55] = t12;
338
+ $[56] = t15;
339
+ $[57] = t16;
340
+ $[58] = t17;
341
+ } else t17 = $[58];
342
+ let t18;
343
+ if ($[59] !== disabled || $[60] !== errors || $[61] !== fileErrors || $[62] !== files || $[63] !== formatFileSize || $[64] !== previews || $[65] !== removeFile || $[66] !== showPreview) {
344
+ t18 = files.length > 0 && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
345
+ className: "mt-4 space-y-2",
346
+ children: files.map((file_2, index_0)=>{
347
+ const fileError = errors?.[file_2.name] ?? fileErrors.get(index_0);
348
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
349
+ className: (0, index_cjs_namespaceObject.cn)("flex flex-col p-3 rounded-md", fileError ? "bg-destructive/10 border border-destructive/20" : "bg-accent/50"),
350
+ children: [
351
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
352
+ className: "flex items-center justify-between",
353
+ children: [
354
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
355
+ className: "flex items-center gap-3 flex-1 min-w-0",
356
+ children: [
357
+ showPreview && previews[index_0] && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("img", {
358
+ src: previews[index_0],
359
+ alt: file_2.name,
360
+ className: "w-10 h-10 object-cover rounded"
361
+ }),
362
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
363
+ className: "flex-1 min-w-0",
364
+ children: [
365
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("p", {
366
+ className: "text-sm font-medium truncate",
367
+ children: file_2.name
368
+ }),
369
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("p", {
370
+ className: "text-xs text-muted-foreground",
371
+ children: formatFileSize(file_2.size)
372
+ })
373
+ ]
374
+ })
375
+ ]
376
+ }),
377
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button, {
378
+ variant: "ghost",
379
+ size: "icon",
380
+ className: "h-8 w-8",
381
+ "aria-label": `Remove ${file_2.name}`,
382
+ onClick: (e_4)=>{
383
+ e_4.stopPropagation();
384
+ removeFile(index_0);
385
+ },
386
+ disabled: disabled,
387
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_lucide_react_namespaceObject.X, {
388
+ className: "h-4 w-4"
207
389
  })
208
- ]
209
- }),
210
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button, {
211
- variant: "ghost",
212
- size: "icon",
213
- className: "h-8 w-8",
214
- "aria-label": `Remove ${file.name}`,
215
- onClick: (e)=>{
216
- e.stopPropagation();
217
- removeFile(index);
218
- },
219
- disabled: disabled,
220
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_lucide_react_namespaceObject.X, {
221
- className: "h-4 w-4"
222
390
  })
223
- })
224
- ]
225
- }, index))
391
+ ]
392
+ }),
393
+ fileError && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("p", {
394
+ className: "text-xs text-destructive mt-2",
395
+ children: fileError
396
+ })
397
+ ]
398
+ }, index_0);
226
399
  })
227
- ]
228
- });
400
+ });
401
+ $[59] = disabled;
402
+ $[60] = errors;
403
+ $[61] = fileErrors;
404
+ $[62] = files;
405
+ $[63] = formatFileSize;
406
+ $[64] = previews;
407
+ $[65] = removeFile;
408
+ $[66] = showPreview;
409
+ $[67] = t18;
410
+ } else t18 = $[67];
411
+ let t19;
412
+ if ($[68] !== t17 || $[69] !== t18 || $[70] !== t8) {
413
+ t19 = /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
414
+ className: t8,
415
+ children: [
416
+ t17,
417
+ t18
418
+ ]
419
+ });
420
+ $[68] = t17;
421
+ $[69] = t18;
422
+ $[70] = t8;
423
+ $[71] = t19;
424
+ } else t19 = $[71];
425
+ return t19;
426
+ }
427
+ function _temp4(bytes) {
428
+ if (0 === bytes) return "0 Bytes";
429
+ const sizes = [
430
+ "Bytes",
431
+ "KB",
432
+ "MB",
433
+ "GB"
434
+ ];
435
+ const i_2 = Math.floor(Math.log(bytes) / Math.log(1024));
436
+ return Math.round(bytes / 1024 ** i_2 * 100) / 100 + " " + sizes[i_2];
437
+ }
438
+ function _temp3(e_1) {
439
+ e_1.preventDefault();
440
+ e_1.stopPropagation();
441
+ }
442
+ function _temp2(f) {
443
+ return f.type.startsWith("image/");
444
+ }
445
+ function _temp(type) {
446
+ return type.trim().toLowerCase();
229
447
  }
230
448
  exports.FileUpload = __webpack_exports__.FileUpload;
231
449
  for(var __webpack_i__ in __webpack_exports__)if (-1 === [
@@ -6,5 +6,7 @@ export interface FileUploadProps {
6
6
  maxSize?: number;
7
7
  className?: string;
8
8
  showPreview?: boolean;
9
+ /** External errors keyed by filename. Use this to set errors from outside (e.g., upload failures). */
10
+ errors?: Record<string, string>;
9
11
  }
10
- export declare function FileUpload({ onFilesChange, accept, multiple, disabled, maxSize, className, showPreview, }: FileUploadProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function FileUpload({ onFilesChange, accept, multiple, disabled, maxSize, className, showPreview, errors, }: FileUploadProps): import("react/jsx-runtime").JSX.Element;