@spark-ui/components 11.4.1 → 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 +77 -274
- package/dist/file-upload/index.d.mts +47 -79
- package/dist/file-upload/index.d.ts +47 -79
- package/dist/file-upload/index.js +152 -186
- package/dist/file-upload/index.js.map +1 -1
- package/dist/file-upload/index.mjs +132 -166
- 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,103 +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,
|
|
1663
|
+
deleteButtonAriaLabel,
|
|
1664
|
+
progressAriaLabel,
|
|
1711
1665
|
...props
|
|
1712
1666
|
}) => {
|
|
1713
1667
|
const { locale } = useFileUploadContext();
|
|
1714
|
-
return /* @__PURE__ */ (0,
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
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
|
+
);
|
|
1732
1692
|
};
|
|
1733
1693
|
AcceptedFile.displayName = "FileUpload.AcceptedFile";
|
|
1734
1694
|
|
|
1735
1695
|
// src/file-upload/FileUploadContext.tsx
|
|
1736
|
-
var
|
|
1696
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1737
1697
|
var Context = ({ children }) => {
|
|
1738
1698
|
const { files = [], rejectedFiles = [], locale } = useFileUploadContext();
|
|
1739
|
-
return /* @__PURE__ */ (0,
|
|
1699
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_jsx_runtime14.Fragment, { children: children({
|
|
1740
1700
|
acceptedFiles: files,
|
|
1741
1701
|
rejectedFiles,
|
|
1742
1702
|
formatFileSize,
|
|
@@ -1746,12 +1706,11 @@ var Context = ({ children }) => {
|
|
|
1746
1706
|
Context.displayName = "FileUpload.Context";
|
|
1747
1707
|
|
|
1748
1708
|
// src/file-upload/FileUploadDropzone.tsx
|
|
1749
|
-
var
|
|
1709
|
+
var import_class_variance_authority11 = require("class-variance-authority");
|
|
1750
1710
|
var import_react10 = require("react");
|
|
1751
|
-
var
|
|
1711
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
1752
1712
|
function Dropzone({
|
|
1753
1713
|
children,
|
|
1754
|
-
onFiles,
|
|
1755
1714
|
className,
|
|
1756
1715
|
unstyled = false
|
|
1757
1716
|
}) {
|
|
@@ -1766,7 +1725,6 @@ function Dropzone({
|
|
|
1766
1725
|
return;
|
|
1767
1726
|
}
|
|
1768
1727
|
const files = e.dataTransfer.files;
|
|
1769
|
-
onFiles?.(files);
|
|
1770
1728
|
let filesArray = [];
|
|
1771
1729
|
if (files) {
|
|
1772
1730
|
filesArray = Array.isArray(files) ? [...files] : Array.from(files);
|
|
@@ -1789,7 +1747,7 @@ function Dropzone({
|
|
|
1789
1747
|
}
|
|
1790
1748
|
};
|
|
1791
1749
|
const isDisabled = ctx.disabled || ctx.readOnly;
|
|
1792
|
-
return /* @__PURE__ */ (0,
|
|
1750
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1793
1751
|
"div",
|
|
1794
1752
|
{
|
|
1795
1753
|
ref: (node) => {
|
|
@@ -1807,12 +1765,12 @@ function Dropzone({
|
|
|
1807
1765
|
onDragOver: (e) => {
|
|
1808
1766
|
e.preventDefault();
|
|
1809
1767
|
},
|
|
1810
|
-
className: unstyled ? className : (0,
|
|
1811
|
-
"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",
|
|
1812
1770
|
"gap-lg flex flex-col items-center justify-center text-center",
|
|
1813
1771
|
"default:p-xl",
|
|
1814
1772
|
"transition-colors duration-200",
|
|
1815
|
-
!isDisabled && "hover:bg-surface-hovered",
|
|
1773
|
+
!isDisabled && "default:hover:bg-surface-hovered",
|
|
1816
1774
|
"data-[drag-over=true]:border-outline-high data-[drag-over=true]:bg-surface-hovered data-[drag-over=true]:border-solid",
|
|
1817
1775
|
// Disabled: more visually disabled (opacity + cursor)
|
|
1818
1776
|
ctx.disabled && "cursor-not-allowed opacity-50",
|
|
@@ -1835,9 +1793,9 @@ function Dropzone({
|
|
|
1835
1793
|
Dropzone.displayName = "FileUploadDropzone";
|
|
1836
1794
|
|
|
1837
1795
|
// src/file-upload/FileUploadPreviewImage.tsx
|
|
1838
|
-
var
|
|
1796
|
+
var import_class_variance_authority12 = require("class-variance-authority");
|
|
1839
1797
|
var import_react11 = require("react");
|
|
1840
|
-
var
|
|
1798
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
1841
1799
|
var PreviewImage = ({
|
|
1842
1800
|
asChild: _asChild = false,
|
|
1843
1801
|
className,
|
|
@@ -1857,11 +1815,11 @@ var PreviewImage = ({
|
|
|
1857
1815
|
};
|
|
1858
1816
|
}, [imageUrl]);
|
|
1859
1817
|
if (!isImage || imageError) {
|
|
1860
|
-
return /* @__PURE__ */ (0,
|
|
1818
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1861
1819
|
"div",
|
|
1862
1820
|
{
|
|
1863
1821
|
"data-spark-component": "file-upload-preview-image",
|
|
1864
|
-
className: (0,
|
|
1822
|
+
className: (0, import_class_variance_authority12.cx)(
|
|
1865
1823
|
"bg-neutral-container flex items-center justify-center rounded-md",
|
|
1866
1824
|
className
|
|
1867
1825
|
),
|
|
@@ -1870,24 +1828,24 @@ var PreviewImage = ({
|
|
|
1870
1828
|
}
|
|
1871
1829
|
);
|
|
1872
1830
|
}
|
|
1873
|
-
return /* @__PURE__ */ (0,
|
|
1831
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
1874
1832
|
"div",
|
|
1875
1833
|
{
|
|
1876
1834
|
"data-spark-component": "file-upload-preview-image",
|
|
1877
|
-
className: (0,
|
|
1835
|
+
className: (0, import_class_variance_authority12.cx)("bg-neutral-container overflow-hidden", className),
|
|
1878
1836
|
...props,
|
|
1879
1837
|
children: [
|
|
1880
|
-
/* @__PURE__ */ (0,
|
|
1838
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1881
1839
|
"img",
|
|
1882
1840
|
{
|
|
1883
1841
|
src: imageUrl,
|
|
1884
1842
|
alt: file.name,
|
|
1885
|
-
className: (0,
|
|
1843
|
+
className: (0, import_class_variance_authority12.cx)("size-full object-cover", !imageLoaded && "opacity-0"),
|
|
1886
1844
|
onLoad: () => setImageLoaded(true),
|
|
1887
1845
|
onError: () => setImageError(true)
|
|
1888
1846
|
}
|
|
1889
1847
|
),
|
|
1890
|
-
!imageLoaded && /* @__PURE__ */ (0,
|
|
1848
|
+
!imageLoaded && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "absolute inset-0 flex items-center justify-center", children: fallback })
|
|
1891
1849
|
]
|
|
1892
1850
|
}
|
|
1893
1851
|
);
|
|
@@ -1896,21 +1854,24 @@ PreviewImage.displayName = "FileUpload.PreviewImage";
|
|
|
1896
1854
|
|
|
1897
1855
|
// src/file-upload/FileUploadRejectedFile.tsx
|
|
1898
1856
|
var import_WarningOutline = require("@spark-ui/icons/WarningOutline");
|
|
1899
|
-
var
|
|
1857
|
+
var import_class_variance_authority14 = require("class-variance-authority");
|
|
1900
1858
|
|
|
1901
1859
|
// src/file-upload/FileUploadRejectedFileDeleteTrigger.tsx
|
|
1902
1860
|
var import_Close2 = require("@spark-ui/icons/Close");
|
|
1903
|
-
var
|
|
1861
|
+
var import_class_variance_authority13 = require("class-variance-authority");
|
|
1904
1862
|
var import_react12 = require("react");
|
|
1905
|
-
var
|
|
1863
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
1906
1864
|
var RejectedFileDeleteTrigger = ({
|
|
1907
1865
|
className,
|
|
1908
|
-
|
|
1866
|
+
rejectedFile,
|
|
1909
1867
|
onClick,
|
|
1910
1868
|
...props
|
|
1911
1869
|
}) => {
|
|
1912
|
-
const { removeRejectedFile, triggerRef, dropzoneRef, disabled, readOnly } = useFileUploadContext();
|
|
1870
|
+
const { removeRejectedFile, triggerRef, dropzoneRef, disabled, readOnly, rejectedFiles } = useFileUploadContext();
|
|
1913
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
|
+
);
|
|
1914
1875
|
const handleClick = (e) => {
|
|
1915
1876
|
if (disabled || readOnly) {
|
|
1916
1877
|
return;
|
|
@@ -1924,58 +1885,66 @@ var RejectedFileDeleteTrigger = ({
|
|
|
1924
1885
|
}, 0);
|
|
1925
1886
|
onClick?.(e);
|
|
1926
1887
|
};
|
|
1927
|
-
return /* @__PURE__ */ (0,
|
|
1888
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1928
1889
|
IconButton,
|
|
1929
1890
|
{
|
|
1930
1891
|
ref: buttonRef,
|
|
1931
1892
|
"data-spark-component": "file-upload-rejected-file-delete-trigger",
|
|
1932
|
-
className: (0,
|
|
1893
|
+
className: (0, import_class_variance_authority13.cx)(className),
|
|
1933
1894
|
onClick: handleClick,
|
|
1934
1895
|
disabled: disabled || readOnly,
|
|
1935
1896
|
size: "sm",
|
|
1936
1897
|
design: "contrast",
|
|
1937
1898
|
intent: "surface",
|
|
1938
1899
|
...props,
|
|
1939
|
-
children: /* @__PURE__ */ (0,
|
|
1900
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Icon, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_Close2.Close, {}) })
|
|
1940
1901
|
}
|
|
1941
1902
|
);
|
|
1942
1903
|
};
|
|
1943
1904
|
RejectedFileDeleteTrigger.displayName = "FileUpload.RejectedFileDeleteTrigger";
|
|
1944
1905
|
|
|
1945
1906
|
// src/file-upload/FileUploadRejectedFile.tsx
|
|
1946
|
-
var
|
|
1907
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
1947
1908
|
var RejectedFile = ({
|
|
1948
1909
|
asChild: _asChild = false,
|
|
1949
1910
|
className,
|
|
1950
1911
|
rejectedFile,
|
|
1951
|
-
rejectedFileIndex,
|
|
1952
1912
|
renderError,
|
|
1913
|
+
deleteButtonAriaLabel,
|
|
1953
1914
|
...props
|
|
1954
1915
|
}) => {
|
|
1955
1916
|
const { locale } = useFileUploadContext();
|
|
1956
|
-
return /* @__PURE__ */ (0,
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
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
|
+
);
|
|
1973
1942
|
};
|
|
1974
1943
|
RejectedFile.displayName = "FileUpload.RejectedFile";
|
|
1975
1944
|
|
|
1976
1945
|
// src/file-upload/FileUploadTrigger.tsx
|
|
1977
|
-
var
|
|
1978
|
-
var
|
|
1946
|
+
var import_class_variance_authority15 = require("class-variance-authority");
|
|
1947
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1979
1948
|
var Trigger = ({
|
|
1980
1949
|
className,
|
|
1981
1950
|
children,
|
|
@@ -1996,7 +1965,7 @@ var Trigger = ({
|
|
|
1996
1965
|
};
|
|
1997
1966
|
const buttonComponent = unstyled ? "button" : Button;
|
|
1998
1967
|
const Comp = asChild ? Slot : buttonComponent;
|
|
1999
|
-
return /* @__PURE__ */ (0,
|
|
1968
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2000
1969
|
Comp,
|
|
2001
1970
|
{
|
|
2002
1971
|
type: "button",
|
|
@@ -2015,7 +1984,7 @@ var Trigger = ({
|
|
|
2015
1984
|
design,
|
|
2016
1985
|
intent,
|
|
2017
1986
|
"data-spark-component": "file-upload-trigger",
|
|
2018
|
-
className: (0,
|
|
1987
|
+
className: (0, import_class_variance_authority15.cx)(className),
|
|
2019
1988
|
disabled: disabled || readOnly,
|
|
2020
1989
|
onClick: handleClick,
|
|
2021
1990
|
...props,
|
|
@@ -2027,25 +1996,22 @@ Trigger.displayName = "FileUpload.Trigger";
|
|
|
2027
1996
|
|
|
2028
1997
|
// src/file-upload/index.ts
|
|
2029
1998
|
var FileUpload2 = Object.assign(FileUpload, {
|
|
1999
|
+
// Main input components
|
|
2030
2000
|
Trigger,
|
|
2031
2001
|
Dropzone,
|
|
2002
|
+
// Context components
|
|
2032
2003
|
Context,
|
|
2033
|
-
Item,
|
|
2034
|
-
ItemFileName,
|
|
2035
|
-
ItemSizeText,
|
|
2036
|
-
ItemDeleteTrigger,
|
|
2037
|
-
PreviewImage,
|
|
2038
2004
|
AcceptedFile,
|
|
2039
2005
|
RejectedFile,
|
|
2006
|
+
// Helpers for custom renders
|
|
2007
|
+
PreviewImage,
|
|
2008
|
+
ItemDeleteTrigger,
|
|
2040
2009
|
RejectedFileDeleteTrigger
|
|
2041
2010
|
});
|
|
2042
2011
|
FileUpload2.displayName = "FileUpload";
|
|
2043
2012
|
Trigger.displayName = "FileUpload.Trigger";
|
|
2044
2013
|
Dropzone.displayName = "FileUpload.Dropzone";
|
|
2045
2014
|
Context.displayName = "FileUpload.Context";
|
|
2046
|
-
Item.displayName = "FileUpload.Item";
|
|
2047
|
-
ItemFileName.displayName = "FileUpload.ItemFileName";
|
|
2048
|
-
ItemSizeText.displayName = "FileUpload.ItemSizeText";
|
|
2049
2015
|
ItemDeleteTrigger.displayName = "FileUpload.ItemDeleteTrigger";
|
|
2050
2016
|
PreviewImage.displayName = "FileUpload.PreviewImage";
|
|
2051
2017
|
AcceptedFile.displayName = "FileUpload.AcceptedFile";
|