@spark-ui/components 11.4.2 → 11.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/checkbox/index.js.map +1 -1
- package/dist/checkbox/index.mjs.map +1 -1
- package/dist/chip/index.js.map +1 -1
- package/dist/chip/index.mjs.map +1 -1
- package/dist/docgen.json +42 -296
- package/dist/file-upload/index.d.mts +35 -79
- package/dist/file-upload/index.d.ts +35 -79
- package/dist/file-upload/index.js +149 -179
- package/dist/file-upload/index.js.map +1 -1
- package/dist/file-upload/index.mjs +129 -159
- package/dist/file-upload/index.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -135,14 +135,14 @@ var FileUpload = ({
|
|
|
135
135
|
children,
|
|
136
136
|
defaultValue = [],
|
|
137
137
|
value: controlledValue,
|
|
138
|
-
|
|
138
|
+
onFileAccept,
|
|
139
|
+
onFileReject,
|
|
140
|
+
onFileChange,
|
|
139
141
|
multiple = true,
|
|
140
142
|
accept,
|
|
141
143
|
maxFiles,
|
|
142
|
-
onMaxFilesReached,
|
|
143
144
|
maxFileSize,
|
|
144
145
|
minFileSize,
|
|
145
|
-
onFileSizeError,
|
|
146
146
|
disabled = false,
|
|
147
147
|
readOnly = false,
|
|
148
148
|
locale
|
|
@@ -152,11 +152,7 @@ var FileUpload = ({
|
|
|
152
152
|
const triggerRef = (0, import_react2.useRef)(null);
|
|
153
153
|
const dropzoneRef = (0, import_react2.useRef)(null);
|
|
154
154
|
const deleteButtonRefs = (0, import_react2.useRef)([]);
|
|
155
|
-
const [filesState, setFilesState, ,] = (0, import_use_combined_state.useCombinedState)(
|
|
156
|
-
controlledValue,
|
|
157
|
-
defaultValue,
|
|
158
|
-
onFilesChange
|
|
159
|
-
);
|
|
155
|
+
const [filesState, setFilesState, ,] = (0, import_use_combined_state.useCombinedState)(controlledValue, defaultValue);
|
|
160
156
|
const files = filesState ?? [];
|
|
161
157
|
const setFiles = setFilesState;
|
|
162
158
|
const [rejectedFiles, setRejectedFiles] = (0, import_react2.useState)([]);
|
|
@@ -185,9 +181,6 @@ var FileUpload = ({
|
|
|
185
181
|
errors: [error]
|
|
186
182
|
});
|
|
187
183
|
}
|
|
188
|
-
if (onFileSizeError) {
|
|
189
|
-
onFileSizeError(file, error);
|
|
190
|
-
}
|
|
191
184
|
};
|
|
192
185
|
setFiles((prev) => {
|
|
193
186
|
const currentFiles = prev ?? [];
|
|
@@ -251,19 +244,29 @@ var FileUpload = ({
|
|
|
251
244
|
filesToAdd.forEach((file) => {
|
|
252
245
|
addRejectedFile(file, "TOO_MANY_FILES");
|
|
253
246
|
});
|
|
254
|
-
onMaxFilesReached?.(maxFiles, filesToAdd.length);
|
|
255
247
|
filesToAdd = [];
|
|
256
248
|
} else if (filesToAdd.length > remainingSlots) {
|
|
257
249
|
filesToAdd.forEach((file) => {
|
|
258
250
|
addRejectedFile(file, "TOO_MANY_FILES");
|
|
259
251
|
});
|
|
260
|
-
onMaxFilesReached?.(maxFiles, filesToAdd.length);
|
|
261
252
|
filesToAdd = [];
|
|
262
253
|
}
|
|
263
254
|
}
|
|
264
255
|
const updated = multiple ? [...currentFiles, ...filesToAdd] : filesToAdd;
|
|
265
256
|
const rejectedFilesToAdd = [...newRejectedFiles];
|
|
266
257
|
setRejectedFiles(rejectedFilesToAdd);
|
|
258
|
+
if (filesToAdd.length > 0 && onFileAccept) {
|
|
259
|
+
onFileAccept({ files: filesToAdd });
|
|
260
|
+
}
|
|
261
|
+
if (rejectedFilesToAdd.length > 0 && onFileReject) {
|
|
262
|
+
onFileReject({ files: rejectedFilesToAdd });
|
|
263
|
+
}
|
|
264
|
+
if (onFileChange) {
|
|
265
|
+
onFileChange({
|
|
266
|
+
acceptedFiles: updated,
|
|
267
|
+
rejectedFiles: rejectedFilesToAdd
|
|
268
|
+
});
|
|
269
|
+
}
|
|
267
270
|
return updated;
|
|
268
271
|
});
|
|
269
272
|
};
|
|
@@ -274,10 +277,18 @@ var FileUpload = ({
|
|
|
274
277
|
setFiles((prev) => {
|
|
275
278
|
const currentFiles = prev ?? [];
|
|
276
279
|
const updated = currentFiles.filter((_, i) => i !== index);
|
|
280
|
+
let updatedRejectedFiles = rejectedFiles;
|
|
277
281
|
if (maxFiles !== void 0 && updated.length < maxFiles) {
|
|
278
|
-
|
|
279
|
-
(
|
|
282
|
+
updatedRejectedFiles = rejectedFiles.filter(
|
|
283
|
+
(rejected) => !rejected.errors.includes("TOO_MANY_FILES")
|
|
280
284
|
);
|
|
285
|
+
setRejectedFiles(updatedRejectedFiles);
|
|
286
|
+
}
|
|
287
|
+
if (onFileChange) {
|
|
288
|
+
onFileChange({
|
|
289
|
+
acceptedFiles: updated,
|
|
290
|
+
rejectedFiles: updatedRejectedFiles
|
|
291
|
+
});
|
|
281
292
|
}
|
|
282
293
|
return updated;
|
|
283
294
|
});
|
|
@@ -289,6 +300,12 @@ var FileUpload = ({
|
|
|
289
300
|
setFiles([]);
|
|
290
301
|
setRejectedFiles([]);
|
|
291
302
|
deleteButtonRefs.current = [];
|
|
303
|
+
if (onFileChange) {
|
|
304
|
+
onFileChange({
|
|
305
|
+
acceptedFiles: [],
|
|
306
|
+
rejectedFiles: []
|
|
307
|
+
});
|
|
308
|
+
}
|
|
292
309
|
};
|
|
293
310
|
const removeRejectedFile = (index) => {
|
|
294
311
|
if (disabled || readOnly) {
|
|
@@ -361,6 +378,9 @@ var useFileUploadContext = () => {
|
|
|
361
378
|
return context;
|
|
362
379
|
};
|
|
363
380
|
|
|
381
|
+
// src/file-upload/FileUploadAcceptedFile.tsx
|
|
382
|
+
var import_class_variance_authority10 = require("class-variance-authority");
|
|
383
|
+
|
|
364
384
|
// src/icon/Icon.tsx
|
|
365
385
|
var import_react4 = require("react");
|
|
366
386
|
|
|
@@ -659,50 +679,24 @@ ProgressBar.displayName = "Progress.Bar";
|
|
|
659
679
|
ProgressIndicator.displayName = "Progress.Indicator";
|
|
660
680
|
ProgressLabel.displayName = "Progress.Label";
|
|
661
681
|
|
|
662
|
-
// src/file-upload/FileUploadItem.tsx
|
|
663
|
-
var import_class_variance_authority5 = require("class-variance-authority");
|
|
664
|
-
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
665
|
-
var Item = ({
|
|
666
|
-
asChild: _asChild = false,
|
|
667
|
-
className,
|
|
668
|
-
children,
|
|
669
|
-
...props
|
|
670
|
-
}) => {
|
|
671
|
-
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
672
|
-
"li",
|
|
673
|
-
{
|
|
674
|
-
"data-spark-component": "file-upload-item",
|
|
675
|
-
className: (0, import_class_variance_authority5.cx)(
|
|
676
|
-
"relative",
|
|
677
|
-
"default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md",
|
|
678
|
-
"gap-md flex items-center justify-between default:w-full",
|
|
679
|
-
className
|
|
680
|
-
),
|
|
681
|
-
...props,
|
|
682
|
-
children
|
|
683
|
-
}
|
|
684
|
-
);
|
|
685
|
-
};
|
|
686
|
-
Item.displayName = "FileUpload.Item";
|
|
687
|
-
|
|
688
682
|
// src/file-upload/FileUploadItemDeleteTrigger.tsx
|
|
689
683
|
var import_Close = require("@spark-ui/icons/Close");
|
|
690
|
-
var
|
|
684
|
+
var import_class_variance_authority9 = require("class-variance-authority");
|
|
691
685
|
var import_react9 = require("react");
|
|
692
686
|
|
|
693
687
|
// src/button/Button.tsx
|
|
694
|
-
var
|
|
688
|
+
var import_class_variance_authority7 = require("class-variance-authority");
|
|
695
689
|
var import_react8 = require("react");
|
|
696
690
|
|
|
697
691
|
// src/spinner/Spinner.styles.tsx
|
|
698
692
|
var import_internal_utils2 = require("@spark-ui/internal-utils");
|
|
699
|
-
var
|
|
693
|
+
var import_class_variance_authority5 = require("class-variance-authority");
|
|
700
694
|
var defaultVariants = {
|
|
701
695
|
intent: "current",
|
|
702
696
|
size: "current",
|
|
703
697
|
isBackgroundVisible: false
|
|
704
698
|
};
|
|
705
|
-
var spinnerStyles = (0,
|
|
699
|
+
var spinnerStyles = (0, import_class_variance_authority5.cva)(
|
|
706
700
|
["inline-block", "border-solid", "rounded-full", "border-md", "animate-spin"],
|
|
707
701
|
{
|
|
708
702
|
variants: {
|
|
@@ -743,7 +737,7 @@ var spinnerStyles = (0, import_class_variance_authority6.cva)(
|
|
|
743
737
|
);
|
|
744
738
|
|
|
745
739
|
// src/spinner/Spinner.tsx
|
|
746
|
-
var
|
|
740
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
747
741
|
var Spinner = ({
|
|
748
742
|
className,
|
|
749
743
|
size = "current",
|
|
@@ -753,7 +747,7 @@ var Spinner = ({
|
|
|
753
747
|
ref,
|
|
754
748
|
...others
|
|
755
749
|
}) => {
|
|
756
|
-
return /* @__PURE__ */ (0,
|
|
750
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
757
751
|
"span",
|
|
758
752
|
{
|
|
759
753
|
role: "status",
|
|
@@ -761,14 +755,14 @@ var Spinner = ({
|
|
|
761
755
|
ref,
|
|
762
756
|
className: spinnerStyles({ className, size, intent, isBackgroundVisible }),
|
|
763
757
|
...others,
|
|
764
|
-
children: label && /* @__PURE__ */ (0,
|
|
758
|
+
children: label && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(VisuallyHidden, { children: label })
|
|
765
759
|
}
|
|
766
760
|
);
|
|
767
761
|
};
|
|
768
762
|
|
|
769
763
|
// src/button/Button.styles.tsx
|
|
770
764
|
var import_internal_utils8 = require("@spark-ui/internal-utils");
|
|
771
|
-
var
|
|
765
|
+
var import_class_variance_authority6 = require("class-variance-authority");
|
|
772
766
|
|
|
773
767
|
// src/button/variants/filled.ts
|
|
774
768
|
var import_internal_utils3 = require("@spark-ui/internal-utils");
|
|
@@ -1374,7 +1368,7 @@ var contrastVariants = [
|
|
|
1374
1368
|
];
|
|
1375
1369
|
|
|
1376
1370
|
// src/button/Button.styles.tsx
|
|
1377
|
-
var buttonStyles = (0,
|
|
1371
|
+
var buttonStyles = (0, import_class_variance_authority6.cva)(
|
|
1378
1372
|
[
|
|
1379
1373
|
"u-shadow-border-transition",
|
|
1380
1374
|
"box-border inline-flex items-center justify-center gap-md whitespace-nowrap",
|
|
@@ -1465,7 +1459,7 @@ var buttonStyles = (0, import_class_variance_authority7.cva)(
|
|
|
1465
1459
|
);
|
|
1466
1460
|
|
|
1467
1461
|
// src/button/Button.tsx
|
|
1468
|
-
var
|
|
1462
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
1469
1463
|
var blockedEventHandlers = [
|
|
1470
1464
|
"onClick",
|
|
1471
1465
|
"onMouseDown",
|
|
@@ -1509,7 +1503,7 @@ var Button = ({
|
|
|
1509
1503
|
className: loadingText ? "inline-block" : "absolute",
|
|
1510
1504
|
...loadingLabel && { "aria-label": loadingLabel }
|
|
1511
1505
|
};
|
|
1512
|
-
return /* @__PURE__ */ (0,
|
|
1506
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1513
1507
|
Component,
|
|
1514
1508
|
{
|
|
1515
1509
|
"data-spark-component": "button",
|
|
@@ -1532,14 +1526,14 @@ var Button = ({
|
|
|
1532
1526
|
children: wrapPolymorphicSlot(
|
|
1533
1527
|
asChild,
|
|
1534
1528
|
children,
|
|
1535
|
-
(slotted) => isLoading ? /* @__PURE__ */ (0,
|
|
1536
|
-
/* @__PURE__ */ (0,
|
|
1529
|
+
(slotted) => isLoading ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1530
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Spinner, { ...spinnerProps }),
|
|
1537
1531
|
loadingText && loadingText,
|
|
1538
|
-
/* @__PURE__ */ (0,
|
|
1532
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1539
1533
|
"div",
|
|
1540
1534
|
{
|
|
1541
1535
|
"aria-hidden": true,
|
|
1542
|
-
className: (0,
|
|
1536
|
+
className: (0, import_class_variance_authority7.cx)("gap-md", loadingText ? "hidden" : "inline-flex opacity-0"),
|
|
1543
1537
|
children: slotted
|
|
1544
1538
|
}
|
|
1545
1539
|
)
|
|
@@ -1552,8 +1546,8 @@ Button.displayName = "Button";
|
|
|
1552
1546
|
|
|
1553
1547
|
// src/icon-button/IconButton.styles.tsx
|
|
1554
1548
|
var import_internal_utils9 = require("@spark-ui/internal-utils");
|
|
1555
|
-
var
|
|
1556
|
-
var iconButtonStyles = (0,
|
|
1549
|
+
var import_class_variance_authority8 = require("class-variance-authority");
|
|
1550
|
+
var iconButtonStyles = (0, import_class_variance_authority8.cva)(["pl-0 pr-0"], {
|
|
1557
1551
|
variants: {
|
|
1558
1552
|
/**
|
|
1559
1553
|
* Sets the size of the icon.
|
|
@@ -1567,7 +1561,7 @@ var iconButtonStyles = (0, import_class_variance_authority9.cva)(["pl-0 pr-0"],
|
|
|
1567
1561
|
});
|
|
1568
1562
|
|
|
1569
1563
|
// src/icon-button/IconButton.tsx
|
|
1570
|
-
var
|
|
1564
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
1571
1565
|
var IconButton = ({
|
|
1572
1566
|
design = "filled",
|
|
1573
1567
|
disabled = false,
|
|
@@ -1578,7 +1572,7 @@ var IconButton = ({
|
|
|
1578
1572
|
ref,
|
|
1579
1573
|
...others
|
|
1580
1574
|
}) => {
|
|
1581
|
-
return /* @__PURE__ */ (0,
|
|
1575
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1582
1576
|
Button,
|
|
1583
1577
|
{
|
|
1584
1578
|
"data-spark-component": "icon-button",
|
|
@@ -1596,15 +1590,16 @@ var IconButton = ({
|
|
|
1596
1590
|
IconButton.displayName = "IconButton";
|
|
1597
1591
|
|
|
1598
1592
|
// src/file-upload/FileUploadItemDeleteTrigger.tsx
|
|
1599
|
-
var
|
|
1593
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
1600
1594
|
var ItemDeleteTrigger = ({
|
|
1601
1595
|
className,
|
|
1602
|
-
|
|
1596
|
+
file,
|
|
1603
1597
|
onClick,
|
|
1604
1598
|
...props
|
|
1605
1599
|
}) => {
|
|
1606
|
-
const { removeFile, triggerRef, dropzoneRef, deleteButtonRefs, disabled, readOnly } = useFileUploadContext();
|
|
1600
|
+
const { removeFile, triggerRef, dropzoneRef, deleteButtonRefs, disabled, readOnly, files } = useFileUploadContext();
|
|
1607
1601
|
const buttonRef = (0, import_react9.useRef)(null);
|
|
1602
|
+
const fileIndex = files.findIndex((f) => f.name === file.name && f.size === file.size);
|
|
1608
1603
|
const handleClick = (e) => {
|
|
1609
1604
|
if (disabled || readOnly) {
|
|
1610
1605
|
return;
|
|
@@ -1640,98 +1635,68 @@ var ItemDeleteTrigger = ({
|
|
|
1640
1635
|
}
|
|
1641
1636
|
}
|
|
1642
1637
|
};
|
|
1643
|
-
return /* @__PURE__ */ (0,
|
|
1638
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1644
1639
|
IconButton,
|
|
1645
1640
|
{
|
|
1646
1641
|
ref: setRef,
|
|
1647
1642
|
"data-spark-component": "file-upload-item-delete-trigger",
|
|
1648
|
-
className: (0,
|
|
1643
|
+
className: (0, import_class_variance_authority9.cx)(className),
|
|
1649
1644
|
onClick: handleClick,
|
|
1650
1645
|
disabled: disabled || readOnly,
|
|
1651
1646
|
size: "sm",
|
|
1652
1647
|
design: "contrast",
|
|
1653
1648
|
intent: "surface",
|
|
1654
1649
|
...props,
|
|
1655
|
-
children: /* @__PURE__ */ (0,
|
|
1650
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Icon, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_Close.Close, {}) })
|
|
1656
1651
|
}
|
|
1657
1652
|
);
|
|
1658
1653
|
};
|
|
1659
1654
|
ItemDeleteTrigger.displayName = "FileUpload.ItemDeleteTrigger";
|
|
1660
1655
|
|
|
1661
|
-
// src/file-upload/FileUploadItemFileName.tsx
|
|
1662
|
-
var import_class_variance_authority11 = require("class-variance-authority");
|
|
1663
|
-
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1664
|
-
var ItemFileName = ({
|
|
1665
|
-
asChild: _asChild = false,
|
|
1666
|
-
className,
|
|
1667
|
-
children,
|
|
1668
|
-
...props
|
|
1669
|
-
}) => {
|
|
1670
|
-
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1671
|
-
"p",
|
|
1672
|
-
{
|
|
1673
|
-
"data-spark-component": "file-upload-item-file-name",
|
|
1674
|
-
className: (0, import_class_variance_authority11.cx)("text-body-2 truncate font-medium", className),
|
|
1675
|
-
...props,
|
|
1676
|
-
children
|
|
1677
|
-
}
|
|
1678
|
-
);
|
|
1679
|
-
};
|
|
1680
|
-
ItemFileName.displayName = "FileUpload.ItemFileName";
|
|
1681
|
-
|
|
1682
|
-
// src/file-upload/FileUploadItemSizeText.tsx
|
|
1683
|
-
var import_class_variance_authority12 = require("class-variance-authority");
|
|
1684
|
-
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
1685
|
-
var ItemSizeText = ({
|
|
1686
|
-
asChild: _asChild = false,
|
|
1687
|
-
className,
|
|
1688
|
-
children,
|
|
1689
|
-
...props
|
|
1690
|
-
}) => {
|
|
1691
|
-
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1692
|
-
"p",
|
|
1693
|
-
{
|
|
1694
|
-
"data-spark-component": "file-upload-item-size-text",
|
|
1695
|
-
className: (0, import_class_variance_authority12.cx)("text-caption", className),
|
|
1696
|
-
...props,
|
|
1697
|
-
children
|
|
1698
|
-
}
|
|
1699
|
-
);
|
|
1700
|
-
};
|
|
1701
|
-
ItemSizeText.displayName = "FileUpload.ItemSizeText";
|
|
1702
|
-
|
|
1703
1656
|
// src/file-upload/FileUploadAcceptedFile.tsx
|
|
1704
|
-
var
|
|
1657
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1705
1658
|
var AcceptedFile = ({
|
|
1706
1659
|
asChild: _asChild = false,
|
|
1707
1660
|
className,
|
|
1708
1661
|
file,
|
|
1709
|
-
fileIndex,
|
|
1710
1662
|
uploadProgress,
|
|
1711
1663
|
deleteButtonAriaLabel,
|
|
1712
1664
|
progressAriaLabel,
|
|
1713
1665
|
...props
|
|
1714
1666
|
}) => {
|
|
1715
1667
|
const { locale } = useFileUploadContext();
|
|
1716
|
-
return /* @__PURE__ */ (0,
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1668
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
1669
|
+
"li",
|
|
1670
|
+
{
|
|
1671
|
+
"data-spark-component": "file-upload-accepted-file",
|
|
1672
|
+
className: (0, import_class_variance_authority10.cx)(
|
|
1673
|
+
"relative",
|
|
1674
|
+
"default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md",
|
|
1675
|
+
"gap-md flex items-center justify-between default:w-full",
|
|
1676
|
+
className
|
|
1677
|
+
),
|
|
1678
|
+
...props,
|
|
1679
|
+
children: [
|
|
1680
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "size-sz-40 bg-support-container flex items-center justify-center rounded-md", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { size: "md", children: getFileIcon(file) }) }),
|
|
1681
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
1682
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "gap-md flex flex-row items-center justify-between", children: [
|
|
1683
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-body-2 truncate font-medium", children: file.name }),
|
|
1684
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-caption opacity-dim-1", children: formatFileSize(file.size, locale) })
|
|
1685
|
+
] }),
|
|
1686
|
+
uploadProgress !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "mt-md", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Progress2, { value: uploadProgress, max: 100, "aria-label": progressAriaLabel }) })
|
|
1687
|
+
] }),
|
|
1688
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ItemDeleteTrigger, { "aria-label": deleteButtonAriaLabel, file })
|
|
1689
|
+
]
|
|
1690
|
+
}
|
|
1691
|
+
);
|
|
1727
1692
|
};
|
|
1728
1693
|
AcceptedFile.displayName = "FileUpload.AcceptedFile";
|
|
1729
1694
|
|
|
1730
1695
|
// src/file-upload/FileUploadContext.tsx
|
|
1731
|
-
var
|
|
1696
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1732
1697
|
var Context = ({ children }) => {
|
|
1733
1698
|
const { files = [], rejectedFiles = [], locale } = useFileUploadContext();
|
|
1734
|
-
return /* @__PURE__ */ (0,
|
|
1699
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_jsx_runtime14.Fragment, { children: children({
|
|
1735
1700
|
acceptedFiles: files,
|
|
1736
1701
|
rejectedFiles,
|
|
1737
1702
|
formatFileSize,
|
|
@@ -1741,12 +1706,11 @@ var Context = ({ children }) => {
|
|
|
1741
1706
|
Context.displayName = "FileUpload.Context";
|
|
1742
1707
|
|
|
1743
1708
|
// src/file-upload/FileUploadDropzone.tsx
|
|
1744
|
-
var
|
|
1709
|
+
var import_class_variance_authority11 = require("class-variance-authority");
|
|
1745
1710
|
var import_react10 = require("react");
|
|
1746
|
-
var
|
|
1711
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
1747
1712
|
function Dropzone({
|
|
1748
1713
|
children,
|
|
1749
|
-
onFiles,
|
|
1750
1714
|
className,
|
|
1751
1715
|
unstyled = false
|
|
1752
1716
|
}) {
|
|
@@ -1761,7 +1725,6 @@ function Dropzone({
|
|
|
1761
1725
|
return;
|
|
1762
1726
|
}
|
|
1763
1727
|
const files = e.dataTransfer.files;
|
|
1764
|
-
onFiles?.(files);
|
|
1765
1728
|
let filesArray = [];
|
|
1766
1729
|
if (files) {
|
|
1767
1730
|
filesArray = Array.isArray(files) ? [...files] : Array.from(files);
|
|
@@ -1784,7 +1747,7 @@ function Dropzone({
|
|
|
1784
1747
|
}
|
|
1785
1748
|
};
|
|
1786
1749
|
const isDisabled = ctx.disabled || ctx.readOnly;
|
|
1787
|
-
return /* @__PURE__ */ (0,
|
|
1750
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1788
1751
|
"div",
|
|
1789
1752
|
{
|
|
1790
1753
|
ref: (node) => {
|
|
@@ -1802,12 +1765,12 @@ function Dropzone({
|
|
|
1802
1765
|
onDragOver: (e) => {
|
|
1803
1766
|
e.preventDefault();
|
|
1804
1767
|
},
|
|
1805
|
-
className: unstyled ? className : (0,
|
|
1806
|
-
"default:bg-surface default:border-sm default:border-outline default:rounded-lg default:border-dashed",
|
|
1768
|
+
className: unstyled ? className : (0, import_class_variance_authority11.cx)(
|
|
1769
|
+
"default:bg-surface default:border-sm default:border-outline default:relative default:rounded-lg default:border-dashed",
|
|
1807
1770
|
"gap-lg flex flex-col items-center justify-center text-center",
|
|
1808
1771
|
"default:p-xl",
|
|
1809
1772
|
"transition-colors duration-200",
|
|
1810
|
-
!isDisabled && "hover:bg-surface-hovered",
|
|
1773
|
+
!isDisabled && "default:hover:bg-surface-hovered",
|
|
1811
1774
|
"data-[drag-over=true]:border-outline-high data-[drag-over=true]:bg-surface-hovered data-[drag-over=true]:border-solid",
|
|
1812
1775
|
// Disabled: more visually disabled (opacity + cursor)
|
|
1813
1776
|
ctx.disabled && "cursor-not-allowed opacity-50",
|
|
@@ -1830,9 +1793,9 @@ function Dropzone({
|
|
|
1830
1793
|
Dropzone.displayName = "FileUploadDropzone";
|
|
1831
1794
|
|
|
1832
1795
|
// src/file-upload/FileUploadPreviewImage.tsx
|
|
1833
|
-
var
|
|
1796
|
+
var import_class_variance_authority12 = require("class-variance-authority");
|
|
1834
1797
|
var import_react11 = require("react");
|
|
1835
|
-
var
|
|
1798
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
1836
1799
|
var PreviewImage = ({
|
|
1837
1800
|
asChild: _asChild = false,
|
|
1838
1801
|
className,
|
|
@@ -1852,11 +1815,11 @@ var PreviewImage = ({
|
|
|
1852
1815
|
};
|
|
1853
1816
|
}, [imageUrl]);
|
|
1854
1817
|
if (!isImage || imageError) {
|
|
1855
|
-
return /* @__PURE__ */ (0,
|
|
1818
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1856
1819
|
"div",
|
|
1857
1820
|
{
|
|
1858
1821
|
"data-spark-component": "file-upload-preview-image",
|
|
1859
|
-
className: (0,
|
|
1822
|
+
className: (0, import_class_variance_authority12.cx)(
|
|
1860
1823
|
"bg-neutral-container flex items-center justify-center rounded-md",
|
|
1861
1824
|
className
|
|
1862
1825
|
),
|
|
@@ -1865,24 +1828,24 @@ var PreviewImage = ({
|
|
|
1865
1828
|
}
|
|
1866
1829
|
);
|
|
1867
1830
|
}
|
|
1868
|
-
return /* @__PURE__ */ (0,
|
|
1831
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
1869
1832
|
"div",
|
|
1870
1833
|
{
|
|
1871
1834
|
"data-spark-component": "file-upload-preview-image",
|
|
1872
|
-
className: (0,
|
|
1835
|
+
className: (0, import_class_variance_authority12.cx)("bg-neutral-container overflow-hidden", className),
|
|
1873
1836
|
...props,
|
|
1874
1837
|
children: [
|
|
1875
|
-
/* @__PURE__ */ (0,
|
|
1838
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1876
1839
|
"img",
|
|
1877
1840
|
{
|
|
1878
1841
|
src: imageUrl,
|
|
1879
1842
|
alt: file.name,
|
|
1880
|
-
className: (0,
|
|
1843
|
+
className: (0, import_class_variance_authority12.cx)("size-full object-cover", !imageLoaded && "opacity-0"),
|
|
1881
1844
|
onLoad: () => setImageLoaded(true),
|
|
1882
1845
|
onError: () => setImageError(true)
|
|
1883
1846
|
}
|
|
1884
1847
|
),
|
|
1885
|
-
!imageLoaded && /* @__PURE__ */ (0,
|
|
1848
|
+
!imageLoaded && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "absolute inset-0 flex items-center justify-center", children: fallback })
|
|
1886
1849
|
]
|
|
1887
1850
|
}
|
|
1888
1851
|
);
|
|
@@ -1891,21 +1854,24 @@ PreviewImage.displayName = "FileUpload.PreviewImage";
|
|
|
1891
1854
|
|
|
1892
1855
|
// src/file-upload/FileUploadRejectedFile.tsx
|
|
1893
1856
|
var import_WarningOutline = require("@spark-ui/icons/WarningOutline");
|
|
1894
|
-
var
|
|
1857
|
+
var import_class_variance_authority14 = require("class-variance-authority");
|
|
1895
1858
|
|
|
1896
1859
|
// src/file-upload/FileUploadRejectedFileDeleteTrigger.tsx
|
|
1897
1860
|
var import_Close2 = require("@spark-ui/icons/Close");
|
|
1898
|
-
var
|
|
1861
|
+
var import_class_variance_authority13 = require("class-variance-authority");
|
|
1899
1862
|
var import_react12 = require("react");
|
|
1900
|
-
var
|
|
1863
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
1901
1864
|
var RejectedFileDeleteTrigger = ({
|
|
1902
1865
|
className,
|
|
1903
|
-
|
|
1866
|
+
rejectedFile,
|
|
1904
1867
|
onClick,
|
|
1905
1868
|
...props
|
|
1906
1869
|
}) => {
|
|
1907
|
-
const { removeRejectedFile, triggerRef, dropzoneRef, disabled, readOnly } = useFileUploadContext();
|
|
1870
|
+
const { removeRejectedFile, triggerRef, dropzoneRef, disabled, readOnly, rejectedFiles } = useFileUploadContext();
|
|
1908
1871
|
const buttonRef = (0, import_react12.useRef)(null);
|
|
1872
|
+
const rejectedFileIndex = rejectedFiles.findIndex(
|
|
1873
|
+
(rf) => rf.file.name === rejectedFile.file.name && rf.file.size === rejectedFile.file.size
|
|
1874
|
+
);
|
|
1909
1875
|
const handleClick = (e) => {
|
|
1910
1876
|
if (disabled || readOnly) {
|
|
1911
1877
|
return;
|
|
@@ -1919,59 +1885,66 @@ var RejectedFileDeleteTrigger = ({
|
|
|
1919
1885
|
}, 0);
|
|
1920
1886
|
onClick?.(e);
|
|
1921
1887
|
};
|
|
1922
|
-
return /* @__PURE__ */ (0,
|
|
1888
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1923
1889
|
IconButton,
|
|
1924
1890
|
{
|
|
1925
1891
|
ref: buttonRef,
|
|
1926
1892
|
"data-spark-component": "file-upload-rejected-file-delete-trigger",
|
|
1927
|
-
className: (0,
|
|
1893
|
+
className: (0, import_class_variance_authority13.cx)(className),
|
|
1928
1894
|
onClick: handleClick,
|
|
1929
1895
|
disabled: disabled || readOnly,
|
|
1930
1896
|
size: "sm",
|
|
1931
1897
|
design: "contrast",
|
|
1932
1898
|
intent: "surface",
|
|
1933
1899
|
...props,
|
|
1934
|
-
children: /* @__PURE__ */ (0,
|
|
1900
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Icon, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_Close2.Close, {}) })
|
|
1935
1901
|
}
|
|
1936
1902
|
);
|
|
1937
1903
|
};
|
|
1938
1904
|
RejectedFileDeleteTrigger.displayName = "FileUpload.RejectedFileDeleteTrigger";
|
|
1939
1905
|
|
|
1940
1906
|
// src/file-upload/FileUploadRejectedFile.tsx
|
|
1941
|
-
var
|
|
1907
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
1942
1908
|
var RejectedFile = ({
|
|
1943
1909
|
asChild: _asChild = false,
|
|
1944
1910
|
className,
|
|
1945
1911
|
rejectedFile,
|
|
1946
|
-
rejectedFileIndex,
|
|
1947
1912
|
renderError,
|
|
1948
1913
|
deleteButtonAriaLabel,
|
|
1949
1914
|
...props
|
|
1950
1915
|
}) => {
|
|
1951
1916
|
const { locale } = useFileUploadContext();
|
|
1952
|
-
return /* @__PURE__ */ (0,
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1917
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
1918
|
+
"li",
|
|
1919
|
+
{
|
|
1920
|
+
"data-spark-component": "file-upload-rejected-file",
|
|
1921
|
+
className: (0, import_class_variance_authority14.cx)(
|
|
1922
|
+
"relative",
|
|
1923
|
+
"default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md",
|
|
1924
|
+
"gap-md flex items-center justify-between default:w-full",
|
|
1925
|
+
"border-error border-md",
|
|
1926
|
+
className
|
|
1927
|
+
),
|
|
1928
|
+
...props,
|
|
1929
|
+
children: [
|
|
1930
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "size-sz-40 bg-error-container flex items-center justify-center rounded-md", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { size: "md", className: "text-error", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_WarningOutline.WarningOutline, {}) }) }),
|
|
1931
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "gap-md flex flex-col", children: [
|
|
1932
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "gap-md flex flex-row items-center justify-between", children: [
|
|
1933
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "text-body-2 truncate font-medium", children: rejectedFile.file.name }),
|
|
1934
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "text-caption opacity-dim-1", children: formatFileSize(rejectedFile.file.size, locale) })
|
|
1935
|
+
] }),
|
|
1936
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "gap-xs flex flex-col", children: rejectedFile.errors.map((error, errorIndex) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "text-caption text-error", "data-error-code": error, children: renderError(error) }, errorIndex)) })
|
|
1937
|
+
] }) }),
|
|
1938
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(RejectedFileDeleteTrigger, { "aria-label": deleteButtonAriaLabel, rejectedFile })
|
|
1939
|
+
]
|
|
1940
|
+
}
|
|
1941
|
+
);
|
|
1969
1942
|
};
|
|
1970
1943
|
RejectedFile.displayName = "FileUpload.RejectedFile";
|
|
1971
1944
|
|
|
1972
1945
|
// src/file-upload/FileUploadTrigger.tsx
|
|
1973
|
-
var
|
|
1974
|
-
var
|
|
1946
|
+
var import_class_variance_authority15 = require("class-variance-authority");
|
|
1947
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1975
1948
|
var Trigger = ({
|
|
1976
1949
|
className,
|
|
1977
1950
|
children,
|
|
@@ -1992,7 +1965,7 @@ var Trigger = ({
|
|
|
1992
1965
|
};
|
|
1993
1966
|
const buttonComponent = unstyled ? "button" : Button;
|
|
1994
1967
|
const Comp = asChild ? Slot : buttonComponent;
|
|
1995
|
-
return /* @__PURE__ */ (0,
|
|
1968
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1996
1969
|
Comp,
|
|
1997
1970
|
{
|
|
1998
1971
|
type: "button",
|
|
@@ -2011,7 +1984,7 @@ var Trigger = ({
|
|
|
2011
1984
|
design,
|
|
2012
1985
|
intent,
|
|
2013
1986
|
"data-spark-component": "file-upload-trigger",
|
|
2014
|
-
className: (0,
|
|
1987
|
+
className: (0, import_class_variance_authority15.cx)(className),
|
|
2015
1988
|
disabled: disabled || readOnly,
|
|
2016
1989
|
onClick: handleClick,
|
|
2017
1990
|
...props,
|
|
@@ -2023,25 +1996,22 @@ Trigger.displayName = "FileUpload.Trigger";
|
|
|
2023
1996
|
|
|
2024
1997
|
// src/file-upload/index.ts
|
|
2025
1998
|
var FileUpload2 = Object.assign(FileUpload, {
|
|
1999
|
+
// Main input components
|
|
2026
2000
|
Trigger,
|
|
2027
2001
|
Dropzone,
|
|
2002
|
+
// Context components
|
|
2028
2003
|
Context,
|
|
2029
|
-
Item,
|
|
2030
|
-
ItemFileName,
|
|
2031
|
-
ItemSizeText,
|
|
2032
|
-
ItemDeleteTrigger,
|
|
2033
|
-
PreviewImage,
|
|
2034
2004
|
AcceptedFile,
|
|
2035
2005
|
RejectedFile,
|
|
2006
|
+
// Helpers for custom renders
|
|
2007
|
+
PreviewImage,
|
|
2008
|
+
ItemDeleteTrigger,
|
|
2036
2009
|
RejectedFileDeleteTrigger
|
|
2037
2010
|
});
|
|
2038
2011
|
FileUpload2.displayName = "FileUpload";
|
|
2039
2012
|
Trigger.displayName = "FileUpload.Trigger";
|
|
2040
2013
|
Dropzone.displayName = "FileUpload.Dropzone";
|
|
2041
2014
|
Context.displayName = "FileUpload.Context";
|
|
2042
|
-
Item.displayName = "FileUpload.Item";
|
|
2043
|
-
ItemFileName.displayName = "FileUpload.ItemFileName";
|
|
2044
|
-
ItemSizeText.displayName = "FileUpload.ItemSizeText";
|
|
2045
2015
|
ItemDeleteTrigger.displayName = "FileUpload.ItemDeleteTrigger";
|
|
2046
2016
|
PreviewImage.displayName = "FileUpload.PreviewImage";
|
|
2047
2017
|
AcceptedFile.displayName = "FileUpload.AcceptedFile";
|