@ceed/cds 1.14.0 → 1.15.0-next.10
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/components/FilterableCheckboxGroup/FilterableCheckboxGroup.d.ts +23 -0
- package/dist/components/FilterableCheckboxGroup/index.d.ts +3 -0
- package/dist/components/Pagination/Pagination.d.ts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/inputs/FilterableCheckboxGroup.md +179 -0
- package/dist/components/inputs/llms.txt +1 -0
- package/dist/components/navigation/Pagination.md +2 -2
- package/dist/index.cjs +455 -133
- package/dist/index.d.ts +1 -1
- package/dist/index.js +446 -124
- package/dist/llms.txt +1 -0
- package/framer/index.js +51 -51
- package/package.json +4 -3
package/dist/index.cjs
CHANGED
|
@@ -117,6 +117,7 @@ __export(index_exports, {
|
|
|
117
117
|
Divider: () => Divider,
|
|
118
118
|
Drawer: () => Drawer,
|
|
119
119
|
Dropdown: () => import_joy14.Dropdown,
|
|
120
|
+
FilterableCheckboxGroup: () => FilterableCheckboxGroup,
|
|
120
121
|
FormControl: () => FormControl,
|
|
121
122
|
FormHelperText: () => FormHelperText,
|
|
122
123
|
FormLabel: () => FormLabel,
|
|
@@ -3527,8 +3528,10 @@ TableBody.displayName = "TableBody";
|
|
|
3527
3528
|
|
|
3528
3529
|
// src/components/Pagination/Pagination.tsx
|
|
3529
3530
|
var import_react27 = __toESM(require("react"));
|
|
3530
|
-
var
|
|
3531
|
-
var
|
|
3531
|
+
var import_ChevronLeftRounded = __toESM(require("@mui/icons-material/ChevronLeftRounded"));
|
|
3532
|
+
var import_ChevronRightRounded = __toESM(require("@mui/icons-material/ChevronRightRounded"));
|
|
3533
|
+
var import_FirstPageRounded = __toESM(require("@mui/icons-material/FirstPageRounded"));
|
|
3534
|
+
var import_LastPageRounded = __toESM(require("@mui/icons-material/LastPageRounded"));
|
|
3532
3535
|
var import_joy35 = require("@mui/joy");
|
|
3533
3536
|
var PaginationButton = (0, import_joy35.styled)(Button_default, {
|
|
3534
3537
|
name: "Pagination",
|
|
@@ -3587,6 +3590,7 @@ function Pagination(props) {
|
|
|
3587
3590
|
onPageChange,
|
|
3588
3591
|
rowCount,
|
|
3589
3592
|
size = "md",
|
|
3593
|
+
variant = "standard",
|
|
3590
3594
|
...innerProps
|
|
3591
3595
|
} = props;
|
|
3592
3596
|
const [paginationModel, setPaginationModel] = useControlledState(
|
|
@@ -3613,6 +3617,87 @@ function Pagination(props) {
|
|
|
3613
3617
|
setPaginationModel({ ...paginationModel, page: lastPage });
|
|
3614
3618
|
}
|
|
3615
3619
|
}, [rowCount, paginationModel, lastPage, setPaginationModel]);
|
|
3620
|
+
const pageOptions = Array.from({ length: lastPage }, (_, i) => ({
|
|
3621
|
+
label: `${i + 1}`,
|
|
3622
|
+
value: `${i + 1}`
|
|
3623
|
+
}));
|
|
3624
|
+
if (variant === "compact") {
|
|
3625
|
+
return /* @__PURE__ */ import_react27.default.createElement(PaginationRoot, { ...innerProps }, /* @__PURE__ */ import_react27.default.createElement(PaginationContainer, { direction: "row", size, alignItems: "center" }, /* @__PURE__ */ import_react27.default.createElement(Stack_default, { direction: "row" }, /* @__PURE__ */ import_react27.default.createElement(
|
|
3626
|
+
PaginationIconButton,
|
|
3627
|
+
{
|
|
3628
|
+
size,
|
|
3629
|
+
variant: "plain",
|
|
3630
|
+
color: "neutral",
|
|
3631
|
+
onClick: () => handlePageChange(firstPage),
|
|
3632
|
+
disabled: paginationModel.page === firstPage,
|
|
3633
|
+
"aria-label": "First page"
|
|
3634
|
+
},
|
|
3635
|
+
/* @__PURE__ */ import_react27.default.createElement(import_FirstPageRounded.default, null)
|
|
3636
|
+
), /* @__PURE__ */ import_react27.default.createElement(
|
|
3637
|
+
PaginationIconButton,
|
|
3638
|
+
{
|
|
3639
|
+
size,
|
|
3640
|
+
variant: "plain",
|
|
3641
|
+
color: "neutral",
|
|
3642
|
+
onClick: () => handlePageChange(paginationModel.page - 1),
|
|
3643
|
+
disabled: paginationModel.page === firstPage,
|
|
3644
|
+
"aria-label": "Previous page"
|
|
3645
|
+
},
|
|
3646
|
+
/* @__PURE__ */ import_react27.default.createElement(import_ChevronLeftRounded.default, null)
|
|
3647
|
+
)), /* @__PURE__ */ import_react27.default.createElement(
|
|
3648
|
+
Autocomplete_default,
|
|
3649
|
+
{
|
|
3650
|
+
size,
|
|
3651
|
+
value: `${paginationModel.page}`,
|
|
3652
|
+
onChange: (event) => {
|
|
3653
|
+
if (event.target.value) {
|
|
3654
|
+
handlePageChange(parseInt(event.target.value, 10));
|
|
3655
|
+
}
|
|
3656
|
+
},
|
|
3657
|
+
options: pageOptions,
|
|
3658
|
+
sx: {
|
|
3659
|
+
width: {
|
|
3660
|
+
sm: "80px",
|
|
3661
|
+
md: "100px",
|
|
3662
|
+
lg: "120px"
|
|
3663
|
+
}[size]
|
|
3664
|
+
}
|
|
3665
|
+
}
|
|
3666
|
+
), /* @__PURE__ */ import_react27.default.createElement(
|
|
3667
|
+
Typography_default,
|
|
3668
|
+
{
|
|
3669
|
+
level: `body-${size}`,
|
|
3670
|
+
sx: (theme) => ({
|
|
3671
|
+
color: theme.palette.text.secondary,
|
|
3672
|
+
fontWeight: 500
|
|
3673
|
+
})
|
|
3674
|
+
},
|
|
3675
|
+
"/ ",
|
|
3676
|
+
lastPage
|
|
3677
|
+
), /* @__PURE__ */ import_react27.default.createElement(Stack_default, { direction: "row" }, /* @__PURE__ */ import_react27.default.createElement(
|
|
3678
|
+
PaginationIconButton,
|
|
3679
|
+
{
|
|
3680
|
+
size,
|
|
3681
|
+
variant: "plain",
|
|
3682
|
+
color: "neutral",
|
|
3683
|
+
onClick: () => handlePageChange(paginationModel.page + 1),
|
|
3684
|
+
disabled: paginationModel.page === lastPage,
|
|
3685
|
+
"aria-label": "Next page"
|
|
3686
|
+
},
|
|
3687
|
+
/* @__PURE__ */ import_react27.default.createElement(import_ChevronRightRounded.default, null)
|
|
3688
|
+
), /* @__PURE__ */ import_react27.default.createElement(
|
|
3689
|
+
PaginationIconButton,
|
|
3690
|
+
{
|
|
3691
|
+
size,
|
|
3692
|
+
variant: "plain",
|
|
3693
|
+
color: "neutral",
|
|
3694
|
+
onClick: () => handlePageChange(lastPage),
|
|
3695
|
+
disabled: paginationModel.page === lastPage,
|
|
3696
|
+
"aria-label": "Last page"
|
|
3697
|
+
},
|
|
3698
|
+
/* @__PURE__ */ import_react27.default.createElement(import_LastPageRounded.default, null)
|
|
3699
|
+
))));
|
|
3700
|
+
}
|
|
3616
3701
|
return /* @__PURE__ */ import_react27.default.createElement(PaginationRoot, { ...innerProps }, /* @__PURE__ */ import_react27.default.createElement(PaginationContainer, { direction: "row", size, alignItems: "center" }, /* @__PURE__ */ import_react27.default.createElement(
|
|
3617
3702
|
PaginationIconButton,
|
|
3618
3703
|
{
|
|
@@ -3623,7 +3708,7 @@ function Pagination(props) {
|
|
|
3623
3708
|
disabled: paginationModel.page === firstPage,
|
|
3624
3709
|
"aria-label": "Previous page"
|
|
3625
3710
|
},
|
|
3626
|
-
/* @__PURE__ */ import_react27.default.createElement(
|
|
3711
|
+
/* @__PURE__ */ import_react27.default.createElement(import_ChevronLeftRounded.default, null)
|
|
3627
3712
|
), paginationModel.page !== firstPage && /* @__PURE__ */ import_react27.default.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(firstPage) }, firstPage), isMoreBeforePages && /* @__PURE__ */ import_react27.default.createElement(
|
|
3628
3713
|
PaginationButton,
|
|
3629
3714
|
{
|
|
@@ -3634,7 +3719,7 @@ function Pagination(props) {
|
|
|
3634
3719
|
"aria-label": "More previous pages"
|
|
3635
3720
|
},
|
|
3636
3721
|
"..."
|
|
3637
|
-
), beforePages.map((p) => /* @__PURE__ */ import_react27.default.createElement(PaginationButton, { key: p, size, variant: "plain", color: "neutral", onClick: () => handlePageChange(p) }, p)), /* @__PURE__ */ import_react27.default.createElement(PaginationButton, { active: "
|
|
3722
|
+
), beforePages.map((p) => /* @__PURE__ */ import_react27.default.createElement(PaginationButton, { key: p, size, variant: "plain", color: "neutral", onClick: () => handlePageChange(p) }, p)), /* @__PURE__ */ import_react27.default.createElement(PaginationButton, { active: "true", size, "aria-current": "page" }, paginationModel.page), afterPages.map((p) => /* @__PURE__ */ import_react27.default.createElement(PaginationButton, { key: p, size, variant: "plain", color: "neutral", onClick: () => handlePageChange(p) }, p)), isMoreAfterPages && /* @__PURE__ */ import_react27.default.createElement(
|
|
3638
3723
|
PaginationButton,
|
|
3639
3724
|
{
|
|
3640
3725
|
size,
|
|
@@ -3654,7 +3739,7 @@ function Pagination(props) {
|
|
|
3654
3739
|
disabled: paginationModel.page === lastPage,
|
|
3655
3740
|
"aria-label": "Next page"
|
|
3656
3741
|
},
|
|
3657
|
-
/* @__PURE__ */ import_react27.default.createElement(
|
|
3742
|
+
/* @__PURE__ */ import_react27.default.createElement(import_ChevronRightRounded.default, null)
|
|
3658
3743
|
)));
|
|
3659
3744
|
}
|
|
3660
3745
|
Pagination.displayName = "Pagination";
|
|
@@ -4497,11 +4582,248 @@ var InsetDrawer = (0, import_joy43.styled)(import_joy43.Drawer)(({ theme }) => (
|
|
|
4497
4582
|
}
|
|
4498
4583
|
}));
|
|
4499
4584
|
|
|
4585
|
+
// src/components/FilterableCheckboxGroup/FilterableCheckboxGroup.tsx
|
|
4586
|
+
var import_react34 = __toESM(require("react"));
|
|
4587
|
+
var import_Search = __toESM(require("@mui/icons-material/Search"));
|
|
4588
|
+
var import_react_virtual3 = require("@tanstack/react-virtual");
|
|
4589
|
+
function LabelWithTooltip(props) {
|
|
4590
|
+
const { label, size } = props;
|
|
4591
|
+
const labelContentRef = (0, import_react34.useRef)(null);
|
|
4592
|
+
const [isOverflowing, setIsOverflowing] = (0, import_react34.useState)(false);
|
|
4593
|
+
const labelContent = /* @__PURE__ */ import_react34.default.createElement(
|
|
4594
|
+
"span",
|
|
4595
|
+
{
|
|
4596
|
+
ref: labelContentRef,
|
|
4597
|
+
style: {
|
|
4598
|
+
textOverflow: "ellipsis",
|
|
4599
|
+
overflow: "hidden",
|
|
4600
|
+
whiteSpace: "nowrap",
|
|
4601
|
+
display: "block",
|
|
4602
|
+
position: "relative",
|
|
4603
|
+
zIndex: 1,
|
|
4604
|
+
cursor: "pointer"
|
|
4605
|
+
}
|
|
4606
|
+
},
|
|
4607
|
+
label
|
|
4608
|
+
);
|
|
4609
|
+
(0, import_react34.useEffect)(() => {
|
|
4610
|
+
const element = labelContentRef.current;
|
|
4611
|
+
if (element) {
|
|
4612
|
+
setIsOverflowing(element.scrollWidth > element.clientWidth);
|
|
4613
|
+
}
|
|
4614
|
+
}, [label]);
|
|
4615
|
+
if (isOverflowing) {
|
|
4616
|
+
return /* @__PURE__ */ import_react34.default.createElement(Tooltip_default, { variant: "solid", size, title: label, placement: "bottom-start" }, labelContent);
|
|
4617
|
+
}
|
|
4618
|
+
return labelContent;
|
|
4619
|
+
}
|
|
4620
|
+
function FilterableCheckboxGroup(props) {
|
|
4621
|
+
const {
|
|
4622
|
+
value,
|
|
4623
|
+
options,
|
|
4624
|
+
label,
|
|
4625
|
+
placeholder,
|
|
4626
|
+
helperText,
|
|
4627
|
+
size = "md",
|
|
4628
|
+
required,
|
|
4629
|
+
onChange,
|
|
4630
|
+
maxHeight = 300,
|
|
4631
|
+
disabled
|
|
4632
|
+
} = props;
|
|
4633
|
+
const [searchTerm, setSearchTerm] = (0, import_react34.useState)("");
|
|
4634
|
+
const [sortedOptions, setSortedOptions] = (0, import_react34.useState)(options);
|
|
4635
|
+
const [internalValue, setInternalValue] = useControlledState(
|
|
4636
|
+
value,
|
|
4637
|
+
value ?? [],
|
|
4638
|
+
(0, import_react34.useCallback)((newValue) => onChange?.(newValue), [onChange])
|
|
4639
|
+
);
|
|
4640
|
+
const parentRef = (0, import_react34.useRef)(null);
|
|
4641
|
+
const isInitialSortRef = (0, import_react34.useRef)(false);
|
|
4642
|
+
const filteredOptions = (0, import_react34.useMemo)(() => {
|
|
4643
|
+
if (!searchTerm) return sortedOptions;
|
|
4644
|
+
return sortedOptions.filter((option) => option.label.toLowerCase().includes(searchTerm.toLowerCase()));
|
|
4645
|
+
}, [sortedOptions, searchTerm]);
|
|
4646
|
+
const itemSize = (0, import_react34.useMemo)(() => {
|
|
4647
|
+
switch (size) {
|
|
4648
|
+
case "sm":
|
|
4649
|
+
return 28;
|
|
4650
|
+
case "md":
|
|
4651
|
+
return 32;
|
|
4652
|
+
case "lg":
|
|
4653
|
+
return 36;
|
|
4654
|
+
}
|
|
4655
|
+
}, [size]);
|
|
4656
|
+
const noOptionsFontSize = (0, import_react34.useMemo)(() => {
|
|
4657
|
+
switch (size) {
|
|
4658
|
+
case "sm":
|
|
4659
|
+
return "14px";
|
|
4660
|
+
case "md":
|
|
4661
|
+
return "16px";
|
|
4662
|
+
case "lg":
|
|
4663
|
+
return "18px";
|
|
4664
|
+
}
|
|
4665
|
+
}, [size]);
|
|
4666
|
+
const virtualizer = (0, import_react_virtual3.useVirtualizer)({
|
|
4667
|
+
count: filteredOptions.length,
|
|
4668
|
+
estimateSize: () => itemSize,
|
|
4669
|
+
measureElement: (element) => element.clientHeight,
|
|
4670
|
+
getScrollElement: () => parentRef.current,
|
|
4671
|
+
overscan: 5
|
|
4672
|
+
});
|
|
4673
|
+
const items = virtualizer.getVirtualItems();
|
|
4674
|
+
(0, import_react34.useEffect)(() => {
|
|
4675
|
+
if (isInitialSortRef.current) return;
|
|
4676
|
+
const initialValue = value ?? [];
|
|
4677
|
+
const sorted = [...options].sort((a, b) => {
|
|
4678
|
+
const aSelected = initialValue.includes(a.value);
|
|
4679
|
+
const bSelected = initialValue.includes(b.value);
|
|
4680
|
+
if (aSelected !== bSelected) {
|
|
4681
|
+
return aSelected ? -1 : 1;
|
|
4682
|
+
}
|
|
4683
|
+
const aIsAlpha = /^[a-zA-Z]/.test(a.label);
|
|
4684
|
+
const bIsAlpha = /^[a-zA-Z]/.test(b.label);
|
|
4685
|
+
if (aIsAlpha !== bIsAlpha) {
|
|
4686
|
+
return aIsAlpha ? -1 : 1;
|
|
4687
|
+
}
|
|
4688
|
+
return a.label.localeCompare(b.label);
|
|
4689
|
+
});
|
|
4690
|
+
setSortedOptions(sorted);
|
|
4691
|
+
isInitialSortRef.current = true;
|
|
4692
|
+
}, [options, value]);
|
|
4693
|
+
(0, import_react34.useEffect)(() => {
|
|
4694
|
+
virtualizer.measure();
|
|
4695
|
+
}, [virtualizer, filteredOptions]);
|
|
4696
|
+
const handleSearchChange = (0, import_react34.useCallback)((event) => {
|
|
4697
|
+
setSearchTerm(event.target.value);
|
|
4698
|
+
}, []);
|
|
4699
|
+
const handleCheckboxChange = (0, import_react34.useCallback)(
|
|
4700
|
+
(optionValue) => (event) => {
|
|
4701
|
+
const checked = event.target.checked;
|
|
4702
|
+
const newValue = checked ? [...internalValue, optionValue] : internalValue.filter((v) => v !== optionValue);
|
|
4703
|
+
setInternalValue(newValue);
|
|
4704
|
+
},
|
|
4705
|
+
[internalValue, setInternalValue]
|
|
4706
|
+
);
|
|
4707
|
+
const handleSelectAll = (0, import_react34.useCallback)(
|
|
4708
|
+
(event) => {
|
|
4709
|
+
const checked = event.target.checked;
|
|
4710
|
+
const enabledOptions = filteredOptions.filter((option) => !option.disabled);
|
|
4711
|
+
const disabledSelectedValues = internalValue.filter(
|
|
4712
|
+
(v) => filteredOptions.some((opt) => opt.value === v && opt.disabled)
|
|
4713
|
+
);
|
|
4714
|
+
if (checked) {
|
|
4715
|
+
const enabledValues = enabledOptions.map((option) => option.value);
|
|
4716
|
+
setInternalValue([...disabledSelectedValues, ...enabledValues]);
|
|
4717
|
+
} else {
|
|
4718
|
+
setInternalValue(disabledSelectedValues);
|
|
4719
|
+
}
|
|
4720
|
+
},
|
|
4721
|
+
[filteredOptions, internalValue, setInternalValue]
|
|
4722
|
+
);
|
|
4723
|
+
const enabledFilteredOptions = (0, import_react34.useMemo)(() => filteredOptions.filter((option) => !option.disabled), [filteredOptions]);
|
|
4724
|
+
const isAllSelected = enabledFilteredOptions.length > 0 && enabledFilteredOptions.every((option) => internalValue.includes(option.value));
|
|
4725
|
+
const isIndeterminate = !isAllSelected && enabledFilteredOptions.some((option) => internalValue.includes(option.value));
|
|
4726
|
+
return /* @__PURE__ */ import_react34.default.createElement("div", { style: { width: "100%" } }, /* @__PURE__ */ import_react34.default.createElement(
|
|
4727
|
+
Input_default,
|
|
4728
|
+
{
|
|
4729
|
+
label,
|
|
4730
|
+
helperText,
|
|
4731
|
+
required,
|
|
4732
|
+
variant: "outlined",
|
|
4733
|
+
color: "neutral",
|
|
4734
|
+
placeholder,
|
|
4735
|
+
value: searchTerm,
|
|
4736
|
+
onChange: handleSearchChange,
|
|
4737
|
+
size,
|
|
4738
|
+
disabled,
|
|
4739
|
+
endDecorator: /* @__PURE__ */ import_react34.default.createElement(import_Search.default, null)
|
|
4740
|
+
}
|
|
4741
|
+
), filteredOptions.length === 0 ? /* @__PURE__ */ import_react34.default.createElement(
|
|
4742
|
+
Stack_default,
|
|
4743
|
+
{
|
|
4744
|
+
sx: (theme) => ({
|
|
4745
|
+
padding: "20px 12px",
|
|
4746
|
+
justifyContent: "center",
|
|
4747
|
+
alignItems: "center",
|
|
4748
|
+
fontSize: noOptionsFontSize,
|
|
4749
|
+
color: theme.palette.neutral.softDisabledColor
|
|
4750
|
+
})
|
|
4751
|
+
},
|
|
4752
|
+
"No options found."
|
|
4753
|
+
) : /* @__PURE__ */ import_react34.default.createElement(
|
|
4754
|
+
"div",
|
|
4755
|
+
{
|
|
4756
|
+
ref: parentRef,
|
|
4757
|
+
style: {
|
|
4758
|
+
overflow: "auto",
|
|
4759
|
+
maxHeight: typeof maxHeight === "number" ? `${maxHeight}px` : maxHeight,
|
|
4760
|
+
padding: "8px 0px",
|
|
4761
|
+
marginTop: "8px"
|
|
4762
|
+
}
|
|
4763
|
+
},
|
|
4764
|
+
!searchTerm && /* @__PURE__ */ import_react34.default.createElement(
|
|
4765
|
+
Checkbox_default,
|
|
4766
|
+
{
|
|
4767
|
+
label: "Select all",
|
|
4768
|
+
checked: isAllSelected,
|
|
4769
|
+
indeterminate: isIndeterminate,
|
|
4770
|
+
onChange: handleSelectAll,
|
|
4771
|
+
size,
|
|
4772
|
+
disabled,
|
|
4773
|
+
slotProps: {
|
|
4774
|
+
action: {
|
|
4775
|
+
sx: { top: 0, left: 0, bottom: 0, right: 0 }
|
|
4776
|
+
}
|
|
4777
|
+
},
|
|
4778
|
+
sx: { width: "100%", height: itemSize }
|
|
4779
|
+
}
|
|
4780
|
+
),
|
|
4781
|
+
/* @__PURE__ */ import_react34.default.createElement(
|
|
4782
|
+
Stack_default,
|
|
4783
|
+
{
|
|
4784
|
+
sx: {
|
|
4785
|
+
height: `${virtualizer.getTotalSize()}px`,
|
|
4786
|
+
position: "relative"
|
|
4787
|
+
}
|
|
4788
|
+
},
|
|
4789
|
+
items.map((virtualRow) => {
|
|
4790
|
+
const option = filteredOptions[virtualRow.index];
|
|
4791
|
+
return /* @__PURE__ */ import_react34.default.createElement(
|
|
4792
|
+
Checkbox_default,
|
|
4793
|
+
{
|
|
4794
|
+
key: virtualRow.key,
|
|
4795
|
+
label: /* @__PURE__ */ import_react34.default.createElement(LabelWithTooltip, { label: option.label, size }),
|
|
4796
|
+
checked: internalValue.includes(option.value),
|
|
4797
|
+
onChange: handleCheckboxChange(option.value),
|
|
4798
|
+
size,
|
|
4799
|
+
disabled: disabled || option.disabled,
|
|
4800
|
+
slotProps: {
|
|
4801
|
+
action: {
|
|
4802
|
+
sx: { top: 0, left: 0, bottom: 0, right: 0 }
|
|
4803
|
+
// NOTE: 불필요한 좌우 스크롤 방지
|
|
4804
|
+
}
|
|
4805
|
+
},
|
|
4806
|
+
sx: {
|
|
4807
|
+
position: "absolute",
|
|
4808
|
+
top: 0,
|
|
4809
|
+
left: 0,
|
|
4810
|
+
width: "100%",
|
|
4811
|
+
height: `${virtualRow.size}px`,
|
|
4812
|
+
transform: `translateY(${virtualRow.start}px)`
|
|
4813
|
+
}
|
|
4814
|
+
}
|
|
4815
|
+
);
|
|
4816
|
+
})
|
|
4817
|
+
)
|
|
4818
|
+
));
|
|
4819
|
+
}
|
|
4820
|
+
FilterableCheckboxGroup.displayName = "FilterableCheckboxGroup";
|
|
4821
|
+
|
|
4500
4822
|
// src/components/Grid/Grid.tsx
|
|
4501
4823
|
var import_joy44 = require("@mui/joy");
|
|
4502
4824
|
|
|
4503
4825
|
// src/components/IconMenuButton/IconMenuButton.tsx
|
|
4504
|
-
var
|
|
4826
|
+
var import_react35 = __toESM(require("react"));
|
|
4505
4827
|
var import_joy45 = require("@mui/joy");
|
|
4506
4828
|
function IconMenuButton(props) {
|
|
4507
4829
|
const {
|
|
@@ -4515,7 +4837,7 @@ function IconMenuButton(props) {
|
|
|
4515
4837
|
placement = "bottom"
|
|
4516
4838
|
} = props;
|
|
4517
4839
|
if (!items.length) {
|
|
4518
|
-
return /* @__PURE__ */
|
|
4840
|
+
return /* @__PURE__ */ import_react35.default.createElement(
|
|
4519
4841
|
import_joy45.IconButton,
|
|
4520
4842
|
{
|
|
4521
4843
|
component: props.buttonComponent ?? "button",
|
|
@@ -4529,7 +4851,7 @@ function IconMenuButton(props) {
|
|
|
4529
4851
|
icon
|
|
4530
4852
|
);
|
|
4531
4853
|
}
|
|
4532
|
-
return /* @__PURE__ */
|
|
4854
|
+
return /* @__PURE__ */ import_react35.default.createElement(Dropdown_default, null, /* @__PURE__ */ import_react35.default.createElement(
|
|
4533
4855
|
import_joy45.MenuButton,
|
|
4534
4856
|
{
|
|
4535
4857
|
slots: { root: import_joy45.IconButton },
|
|
@@ -4546,19 +4868,19 @@ function IconMenuButton(props) {
|
|
|
4546
4868
|
}
|
|
4547
4869
|
},
|
|
4548
4870
|
icon
|
|
4549
|
-
), /* @__PURE__ */
|
|
4871
|
+
), /* @__PURE__ */ import_react35.default.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ import_react35.default.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
|
|
4550
4872
|
}
|
|
4551
4873
|
IconMenuButton.displayName = "IconMenuButton";
|
|
4552
4874
|
|
|
4553
4875
|
// src/components/Markdown/Markdown.tsx
|
|
4554
|
-
var
|
|
4876
|
+
var import_react36 = __toESM(require("react"));
|
|
4555
4877
|
var import_joy46 = require("@mui/joy");
|
|
4556
4878
|
var import_joy47 = require("@mui/joy");
|
|
4557
4879
|
var import_remark_gfm = __toESM(require("remark-gfm"));
|
|
4558
|
-
var LazyReactMarkdown = (0,
|
|
4880
|
+
var LazyReactMarkdown = (0, import_react36.lazy)(() => import("react-markdown"));
|
|
4559
4881
|
var Markdown = (props) => {
|
|
4560
|
-
const [rehypeAccent2, setRehypeAccent] = (0,
|
|
4561
|
-
(0,
|
|
4882
|
+
const [rehypeAccent2, setRehypeAccent] = (0, import_react36.useState)(null);
|
|
4883
|
+
(0, import_react36.useEffect)(() => {
|
|
4562
4884
|
const loadRehypeAccent = async () => {
|
|
4563
4885
|
const module2 = await Promise.resolve().then(() => (init_rehype_accent(), rehype_accent_exports));
|
|
4564
4886
|
setRehypeAccent(() => module2.rehypeAccent);
|
|
@@ -4580,12 +4902,12 @@ var Markdown = (props) => {
|
|
|
4580
4902
|
if (!rehypeAccent2) {
|
|
4581
4903
|
return null;
|
|
4582
4904
|
}
|
|
4583
|
-
return /* @__PURE__ */
|
|
4584
|
-
|
|
4905
|
+
return /* @__PURE__ */ import_react36.default.createElement(Typography, { component: "div", color, textColor, level: defaultLevel, ...innerProps }, /* @__PURE__ */ import_react36.default.createElement(
|
|
4906
|
+
import_react36.Suspense,
|
|
4585
4907
|
{
|
|
4586
|
-
fallback: fallback || /* @__PURE__ */
|
|
4908
|
+
fallback: fallback || /* @__PURE__ */ import_react36.default.createElement(Typography, null, /* @__PURE__ */ import_react36.default.createElement(import_joy46.Skeleton, null, content || ""))
|
|
4587
4909
|
},
|
|
4588
|
-
/* @__PURE__ */
|
|
4910
|
+
/* @__PURE__ */ import_react36.default.createElement(
|
|
4589
4911
|
LazyReactMarkdown,
|
|
4590
4912
|
{
|
|
4591
4913
|
...markdownOptions,
|
|
@@ -4593,15 +4915,15 @@ var Markdown = (props) => {
|
|
|
4593
4915
|
rehypePlugins: [[rehypeAccent2, { accentColor }]],
|
|
4594
4916
|
remarkPlugins: [import_remark_gfm.default],
|
|
4595
4917
|
components: {
|
|
4596
|
-
h1: ({ children }) => /* @__PURE__ */
|
|
4597
|
-
h2: ({ children }) => /* @__PURE__ */
|
|
4598
|
-
h3: ({ children }) => /* @__PURE__ */
|
|
4599
|
-
h4: ({ children }) => /* @__PURE__ */
|
|
4600
|
-
p: ({ children, node }) => /* @__PURE__ */
|
|
4601
|
-
a: ({ children, href }) => /* @__PURE__ */
|
|
4602
|
-
hr: () => /* @__PURE__ */
|
|
4603
|
-
b: ({ children }) => /* @__PURE__ */
|
|
4604
|
-
strong: ({ children }) => /* @__PURE__ */
|
|
4918
|
+
h1: ({ children }) => /* @__PURE__ */ import_react36.default.createElement(Typography, { color, textColor, level: "h1" }, children),
|
|
4919
|
+
h2: ({ children }) => /* @__PURE__ */ import_react36.default.createElement(Typography, { color, textColor, level: "h2" }, children),
|
|
4920
|
+
h3: ({ children }) => /* @__PURE__ */ import_react36.default.createElement(Typography, { color, textColor, level: "h3" }, children),
|
|
4921
|
+
h4: ({ children }) => /* @__PURE__ */ import_react36.default.createElement(Typography, { color, textColor, level: "h4" }, children),
|
|
4922
|
+
p: ({ children, node }) => /* @__PURE__ */ import_react36.default.createElement(Typography, { color, textColor, level: defaultLevel, ...node?.properties }, children),
|
|
4923
|
+
a: ({ children, href }) => /* @__PURE__ */ import_react36.default.createElement(import_joy47.Link, { href, target: defaultLinkAction }, children),
|
|
4924
|
+
hr: () => /* @__PURE__ */ import_react36.default.createElement(Divider, null),
|
|
4925
|
+
b: ({ children }) => /* @__PURE__ */ import_react36.default.createElement(Typography, { fontWeight: boldFontWeight }, children),
|
|
4926
|
+
strong: ({ children }) => /* @__PURE__ */ import_react36.default.createElement(Typography, { fontWeight: boldFontWeight }, children),
|
|
4605
4927
|
...markdownOptions?.components
|
|
4606
4928
|
}
|
|
4607
4929
|
}
|
|
@@ -4611,7 +4933,7 @@ var Markdown = (props) => {
|
|
|
4611
4933
|
Markdown.displayName = "Markdown";
|
|
4612
4934
|
|
|
4613
4935
|
// src/components/MenuButton/MenuButton.tsx
|
|
4614
|
-
var
|
|
4936
|
+
var import_react37 = __toESM(require("react"));
|
|
4615
4937
|
var import_joy48 = require("@mui/joy");
|
|
4616
4938
|
var import_ExpandMore = __toESM(require("@mui/icons-material/ExpandMore"));
|
|
4617
4939
|
function MenuButton(props) {
|
|
@@ -4629,7 +4951,7 @@ function MenuButton(props) {
|
|
|
4629
4951
|
placement = "bottom"
|
|
4630
4952
|
} = props;
|
|
4631
4953
|
if (!items.length) {
|
|
4632
|
-
return /* @__PURE__ */
|
|
4954
|
+
return /* @__PURE__ */ import_react37.default.createElement(
|
|
4633
4955
|
import_joy48.Button,
|
|
4634
4956
|
{
|
|
4635
4957
|
component: props.buttonComponent ?? "button",
|
|
@@ -4640,12 +4962,12 @@ function MenuButton(props) {
|
|
|
4640
4962
|
loading,
|
|
4641
4963
|
startDecorator,
|
|
4642
4964
|
...props.buttonComponentProps ?? {},
|
|
4643
|
-
endDecorator: showIcon ? /* @__PURE__ */
|
|
4965
|
+
endDecorator: showIcon ? /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, endDecorator, /* @__PURE__ */ import_react37.default.createElement(import_ExpandMore.default, null)) : /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, endDecorator)
|
|
4644
4966
|
},
|
|
4645
4967
|
buttonText
|
|
4646
4968
|
);
|
|
4647
4969
|
}
|
|
4648
|
-
return /* @__PURE__ */
|
|
4970
|
+
return /* @__PURE__ */ import_react37.default.createElement(Dropdown_default, null, /* @__PURE__ */ import_react37.default.createElement(
|
|
4649
4971
|
import_joy48.MenuButton,
|
|
4650
4972
|
{
|
|
4651
4973
|
component: props.buttonComponent ?? "button",
|
|
@@ -4656,15 +4978,15 @@ function MenuButton(props) {
|
|
|
4656
4978
|
loading,
|
|
4657
4979
|
startDecorator,
|
|
4658
4980
|
...props.buttonComponentProps ?? {},
|
|
4659
|
-
endDecorator: showIcon ? /* @__PURE__ */
|
|
4981
|
+
endDecorator: showIcon ? /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, endDecorator, /* @__PURE__ */ import_react37.default.createElement(import_ExpandMore.default, null)) : /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, endDecorator)
|
|
4660
4982
|
},
|
|
4661
4983
|
buttonText
|
|
4662
|
-
), /* @__PURE__ */
|
|
4984
|
+
), /* @__PURE__ */ import_react37.default.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ import_react37.default.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
|
|
4663
4985
|
}
|
|
4664
4986
|
MenuButton.displayName = "MenuButton";
|
|
4665
4987
|
|
|
4666
4988
|
// src/components/MonthPicker/MonthPicker.tsx
|
|
4667
|
-
var
|
|
4989
|
+
var import_react38 = __toESM(require("react"));
|
|
4668
4990
|
var import_CalendarToday3 = __toESM(require("@mui/icons-material/CalendarToday"));
|
|
4669
4991
|
var import_joy49 = require("@mui/joy");
|
|
4670
4992
|
var import_base4 = require("@mui/base");
|
|
@@ -4719,7 +5041,7 @@ function parseDate3(dateString, format) {
|
|
|
4719
5041
|
const result = new Date(year, month, day);
|
|
4720
5042
|
return result;
|
|
4721
5043
|
}
|
|
4722
|
-
var MonthPicker = (0,
|
|
5044
|
+
var MonthPicker = (0, import_react38.forwardRef)((inProps, ref) => {
|
|
4723
5045
|
const props = (0, import_joy49.useThemeProps)({ props: inProps, name: "MonthPicker" });
|
|
4724
5046
|
const {
|
|
4725
5047
|
onChange,
|
|
@@ -4746,14 +5068,14 @@ var MonthPicker = (0, import_react37.forwardRef)((inProps, ref) => {
|
|
|
4746
5068
|
locale,
|
|
4747
5069
|
...innerProps
|
|
4748
5070
|
} = props;
|
|
4749
|
-
const innerRef = (0,
|
|
4750
|
-
const buttonRef = (0,
|
|
5071
|
+
const innerRef = (0, import_react38.useRef)(null);
|
|
5072
|
+
const buttonRef = (0, import_react38.useRef)(null);
|
|
4751
5073
|
const [value, setValue, isControlled] = useControlledState(
|
|
4752
5074
|
props.value,
|
|
4753
5075
|
props.defaultValue || "",
|
|
4754
|
-
(0,
|
|
5076
|
+
(0, import_react38.useCallback)((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
|
|
4755
5077
|
);
|
|
4756
|
-
const getFormattedDisplayValue = (0,
|
|
5078
|
+
const getFormattedDisplayValue = (0, import_react38.useCallback)(
|
|
4757
5079
|
(inputValue) => {
|
|
4758
5080
|
if (!inputValue) return "";
|
|
4759
5081
|
try {
|
|
@@ -4764,19 +5086,19 @@ var MonthPicker = (0, import_react37.forwardRef)((inProps, ref) => {
|
|
|
4764
5086
|
},
|
|
4765
5087
|
[format, displayFormat, locale]
|
|
4766
5088
|
);
|
|
4767
|
-
const [displayValue, setDisplayValue] = (0,
|
|
4768
|
-
const [anchorEl, setAnchorEl] = (0,
|
|
5089
|
+
const [displayValue, setDisplayValue] = (0, import_react38.useState)(() => getFormattedDisplayValue(value));
|
|
5090
|
+
const [anchorEl, setAnchorEl] = (0, import_react38.useState)(null);
|
|
4769
5091
|
const open = Boolean(anchorEl);
|
|
4770
|
-
(0,
|
|
5092
|
+
(0, import_react38.useEffect)(() => {
|
|
4771
5093
|
if (!anchorEl) {
|
|
4772
5094
|
innerRef.current?.blur();
|
|
4773
5095
|
}
|
|
4774
5096
|
}, [anchorEl, innerRef]);
|
|
4775
|
-
(0,
|
|
4776
|
-
(0,
|
|
5097
|
+
(0, import_react38.useImperativeHandle)(ref, () => innerRef.current, [innerRef]);
|
|
5098
|
+
(0, import_react38.useEffect)(() => {
|
|
4777
5099
|
setDisplayValue(getFormattedDisplayValue(value));
|
|
4778
5100
|
}, [value, getFormattedDisplayValue]);
|
|
4779
|
-
const handleChange = (0,
|
|
5101
|
+
const handleChange = (0, import_react38.useCallback)(
|
|
4780
5102
|
(event) => {
|
|
4781
5103
|
const newValue = event.target.value;
|
|
4782
5104
|
setValue(newValue);
|
|
@@ -4786,21 +5108,21 @@ var MonthPicker = (0, import_react37.forwardRef)((inProps, ref) => {
|
|
|
4786
5108
|
},
|
|
4787
5109
|
[setValue, getFormattedDisplayValue, isControlled]
|
|
4788
5110
|
);
|
|
4789
|
-
const handleCalendarToggle = (0,
|
|
5111
|
+
const handleCalendarToggle = (0, import_react38.useCallback)(
|
|
4790
5112
|
(event) => {
|
|
4791
5113
|
setAnchorEl(anchorEl ? null : event.currentTarget);
|
|
4792
5114
|
innerRef.current?.focus();
|
|
4793
5115
|
},
|
|
4794
5116
|
[anchorEl, setAnchorEl, innerRef]
|
|
4795
5117
|
);
|
|
4796
|
-
const handleInputMouseDown = (0,
|
|
5118
|
+
const handleInputMouseDown = (0, import_react38.useCallback)(
|
|
4797
5119
|
(event) => {
|
|
4798
5120
|
event.preventDefault();
|
|
4799
5121
|
buttonRef.current?.focus();
|
|
4800
5122
|
},
|
|
4801
5123
|
[buttonRef]
|
|
4802
5124
|
);
|
|
4803
|
-
return /* @__PURE__ */
|
|
5125
|
+
return /* @__PURE__ */ import_react38.default.createElement(MonthPickerRoot, null, /* @__PURE__ */ import_react38.default.createElement(import_base4.FocusTrap, { open: true }, /* @__PURE__ */ import_react38.default.createElement(import_react38.default.Fragment, null, /* @__PURE__ */ import_react38.default.createElement(
|
|
4804
5126
|
Input_default,
|
|
4805
5127
|
{
|
|
4806
5128
|
...innerProps,
|
|
@@ -4830,7 +5152,7 @@ var MonthPicker = (0, import_react37.forwardRef)((inProps, ref) => {
|
|
|
4830
5152
|
// NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
|
|
4831
5153
|
fontFamily: "monospace"
|
|
4832
5154
|
},
|
|
4833
|
-
endDecorator: /* @__PURE__ */
|
|
5155
|
+
endDecorator: /* @__PURE__ */ import_react38.default.createElement(
|
|
4834
5156
|
IconButton_default,
|
|
4835
5157
|
{
|
|
4836
5158
|
ref: buttonRef,
|
|
@@ -4842,12 +5164,12 @@ var MonthPicker = (0, import_react37.forwardRef)((inProps, ref) => {
|
|
|
4842
5164
|
"aria-expanded": open,
|
|
4843
5165
|
disabled
|
|
4844
5166
|
},
|
|
4845
|
-
/* @__PURE__ */
|
|
5167
|
+
/* @__PURE__ */ import_react38.default.createElement(import_CalendarToday3.default, null)
|
|
4846
5168
|
),
|
|
4847
5169
|
label,
|
|
4848
5170
|
helperText
|
|
4849
5171
|
}
|
|
4850
|
-
), open && /* @__PURE__ */
|
|
5172
|
+
), open && /* @__PURE__ */ import_react38.default.createElement(import_base4.ClickAwayListener, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ import_react38.default.createElement(
|
|
4851
5173
|
StyledPopper3,
|
|
4852
5174
|
{
|
|
4853
5175
|
id: "month-picker-popper",
|
|
@@ -4866,7 +5188,7 @@ var MonthPicker = (0, import_react37.forwardRef)((inProps, ref) => {
|
|
|
4866
5188
|
"aria-label": "Calendar Tooltip",
|
|
4867
5189
|
"aria-expanded": open
|
|
4868
5190
|
},
|
|
4869
|
-
/* @__PURE__ */
|
|
5191
|
+
/* @__PURE__ */ import_react38.default.createElement(CalendarSheet3, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react38.default.createElement(
|
|
4870
5192
|
Calendar_default,
|
|
4871
5193
|
{
|
|
4872
5194
|
view: "month",
|
|
@@ -4887,14 +5209,14 @@ var MonthPicker = (0, import_react37.forwardRef)((inProps, ref) => {
|
|
|
4887
5209
|
disablePast,
|
|
4888
5210
|
locale
|
|
4889
5211
|
}
|
|
4890
|
-
), /* @__PURE__ */
|
|
5212
|
+
), /* @__PURE__ */ import_react38.default.createElement(
|
|
4891
5213
|
DialogActions_default,
|
|
4892
5214
|
{
|
|
4893
5215
|
sx: {
|
|
4894
5216
|
p: 1
|
|
4895
5217
|
}
|
|
4896
5218
|
},
|
|
4897
|
-
/* @__PURE__ */
|
|
5219
|
+
/* @__PURE__ */ import_react38.default.createElement(
|
|
4898
5220
|
Button_default,
|
|
4899
5221
|
{
|
|
4900
5222
|
size,
|
|
@@ -4917,7 +5239,7 @@ var MonthPicker = (0, import_react37.forwardRef)((inProps, ref) => {
|
|
|
4917
5239
|
});
|
|
4918
5240
|
|
|
4919
5241
|
// src/components/MonthRangePicker/MonthRangePicker.tsx
|
|
4920
|
-
var
|
|
5242
|
+
var import_react39 = __toESM(require("react"));
|
|
4921
5243
|
var import_react_imask3 = require("react-imask");
|
|
4922
5244
|
var import_CalendarToday4 = __toESM(require("@mui/icons-material/CalendarToday"));
|
|
4923
5245
|
var import_joy50 = require("@mui/joy");
|
|
@@ -4975,9 +5297,9 @@ var parseDates2 = (str) => {
|
|
|
4975
5297
|
var formatToPattern3 = (format) => {
|
|
4976
5298
|
return `${format} - ${format}`.replace(/YYYY/g, "Y").replace(/MM/g, "m").replace(/[^YMm\s]/g, (match) => `${match}\``);
|
|
4977
5299
|
};
|
|
4978
|
-
var TextMaskAdapter7 =
|
|
5300
|
+
var TextMaskAdapter7 = import_react39.default.forwardRef(function TextMaskAdapter8(props, ref) {
|
|
4979
5301
|
const { onChange, format, ...other } = props;
|
|
4980
|
-
return /* @__PURE__ */
|
|
5302
|
+
return /* @__PURE__ */ import_react39.default.createElement(
|
|
4981
5303
|
import_react_imask3.IMaskInput,
|
|
4982
5304
|
{
|
|
4983
5305
|
...other,
|
|
@@ -5005,7 +5327,7 @@ var TextMaskAdapter7 = import_react38.default.forwardRef(function TextMaskAdapte
|
|
|
5005
5327
|
}
|
|
5006
5328
|
);
|
|
5007
5329
|
});
|
|
5008
|
-
var MonthRangePicker = (0,
|
|
5330
|
+
var MonthRangePicker = (0, import_react39.forwardRef)((inProps, ref) => {
|
|
5009
5331
|
const props = (0, import_joy50.useThemeProps)({ props: inProps, name: "MonthRangePicker" });
|
|
5010
5332
|
const {
|
|
5011
5333
|
onChange,
|
|
@@ -5025,35 +5347,35 @@ var MonthRangePicker = (0, import_react38.forwardRef)((inProps, ref) => {
|
|
|
5025
5347
|
size,
|
|
5026
5348
|
...innerProps
|
|
5027
5349
|
} = props;
|
|
5028
|
-
const innerRef = (0,
|
|
5350
|
+
const innerRef = (0, import_react39.useRef)(null);
|
|
5029
5351
|
const [value, setValue] = useControlledState(
|
|
5030
5352
|
props.value,
|
|
5031
5353
|
props.defaultValue || "",
|
|
5032
|
-
(0,
|
|
5354
|
+
(0, import_react39.useCallback)((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
|
|
5033
5355
|
);
|
|
5034
|
-
const [anchorEl, setAnchorEl] = (0,
|
|
5356
|
+
const [anchorEl, setAnchorEl] = (0, import_react39.useState)(null);
|
|
5035
5357
|
const open = Boolean(anchorEl);
|
|
5036
|
-
const calendarValue = (0,
|
|
5037
|
-
(0,
|
|
5358
|
+
const calendarValue = (0, import_react39.useMemo)(() => value ? parseDates2(value) : void 0, [value]);
|
|
5359
|
+
(0, import_react39.useEffect)(() => {
|
|
5038
5360
|
if (!anchorEl) {
|
|
5039
5361
|
innerRef.current?.blur();
|
|
5040
5362
|
}
|
|
5041
5363
|
}, [anchorEl, innerRef]);
|
|
5042
|
-
(0,
|
|
5043
|
-
const handleChange = (0,
|
|
5364
|
+
(0, import_react39.useImperativeHandle)(ref, () => innerRef.current, [innerRef]);
|
|
5365
|
+
const handleChange = (0, import_react39.useCallback)(
|
|
5044
5366
|
(event) => {
|
|
5045
5367
|
setValue(event.target.value);
|
|
5046
5368
|
},
|
|
5047
5369
|
[setValue]
|
|
5048
5370
|
);
|
|
5049
|
-
const handleCalendarToggle = (0,
|
|
5371
|
+
const handleCalendarToggle = (0, import_react39.useCallback)(
|
|
5050
5372
|
(event) => {
|
|
5051
5373
|
setAnchorEl(anchorEl ? null : event.currentTarget);
|
|
5052
5374
|
innerRef.current?.focus();
|
|
5053
5375
|
},
|
|
5054
5376
|
[anchorEl, setAnchorEl, innerRef]
|
|
5055
5377
|
);
|
|
5056
|
-
const handleCalendarChange = (0,
|
|
5378
|
+
const handleCalendarChange = (0, import_react39.useCallback)(
|
|
5057
5379
|
([date1, date2]) => {
|
|
5058
5380
|
if (!date1 || !date2) return;
|
|
5059
5381
|
setValue(formatValueString4([date1, date2], format));
|
|
@@ -5061,7 +5383,7 @@ var MonthRangePicker = (0, import_react38.forwardRef)((inProps, ref) => {
|
|
|
5061
5383
|
},
|
|
5062
5384
|
[setValue, setAnchorEl, format]
|
|
5063
5385
|
);
|
|
5064
|
-
return /* @__PURE__ */
|
|
5386
|
+
return /* @__PURE__ */ import_react39.default.createElement(MonthRangePickerRoot, null, /* @__PURE__ */ import_react39.default.createElement(import_base5.FocusTrap, { open: true }, /* @__PURE__ */ import_react39.default.createElement(import_react39.default.Fragment, null, /* @__PURE__ */ import_react39.default.createElement(
|
|
5065
5387
|
Input_default,
|
|
5066
5388
|
{
|
|
5067
5389
|
...innerProps,
|
|
@@ -5083,7 +5405,7 @@ var MonthRangePicker = (0, import_react38.forwardRef)((inProps, ref) => {
|
|
|
5083
5405
|
// NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
|
|
5084
5406
|
fontFamily: "monospace"
|
|
5085
5407
|
},
|
|
5086
|
-
endDecorator: /* @__PURE__ */
|
|
5408
|
+
endDecorator: /* @__PURE__ */ import_react39.default.createElement(
|
|
5087
5409
|
IconButton_default,
|
|
5088
5410
|
{
|
|
5089
5411
|
variant: "plain",
|
|
@@ -5093,12 +5415,12 @@ var MonthRangePicker = (0, import_react38.forwardRef)((inProps, ref) => {
|
|
|
5093
5415
|
"aria-haspopup": "dialog",
|
|
5094
5416
|
"aria-expanded": open
|
|
5095
5417
|
},
|
|
5096
|
-
/* @__PURE__ */
|
|
5418
|
+
/* @__PURE__ */ import_react39.default.createElement(import_CalendarToday4.default, null)
|
|
5097
5419
|
),
|
|
5098
5420
|
label,
|
|
5099
5421
|
helperText
|
|
5100
5422
|
}
|
|
5101
|
-
), open && /* @__PURE__ */
|
|
5423
|
+
), open && /* @__PURE__ */ import_react39.default.createElement(import_base5.ClickAwayListener, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ import_react39.default.createElement(
|
|
5102
5424
|
StyledPopper4,
|
|
5103
5425
|
{
|
|
5104
5426
|
id: "month-range-picker-popper",
|
|
@@ -5117,7 +5439,7 @@ var MonthRangePicker = (0, import_react38.forwardRef)((inProps, ref) => {
|
|
|
5117
5439
|
"aria-label": "Calendar Tooltip",
|
|
5118
5440
|
"aria-expanded": open
|
|
5119
5441
|
},
|
|
5120
|
-
/* @__PURE__ */
|
|
5442
|
+
/* @__PURE__ */ import_react39.default.createElement(CalendarSheet4, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react39.default.createElement(
|
|
5121
5443
|
Calendar_default,
|
|
5122
5444
|
{
|
|
5123
5445
|
view: "month",
|
|
@@ -5130,14 +5452,14 @@ var MonthRangePicker = (0, import_react38.forwardRef)((inProps, ref) => {
|
|
|
5130
5452
|
disableFuture,
|
|
5131
5453
|
disablePast
|
|
5132
5454
|
}
|
|
5133
|
-
), /* @__PURE__ */
|
|
5455
|
+
), /* @__PURE__ */ import_react39.default.createElement(
|
|
5134
5456
|
DialogActions_default,
|
|
5135
5457
|
{
|
|
5136
5458
|
sx: {
|
|
5137
5459
|
p: 1
|
|
5138
5460
|
}
|
|
5139
5461
|
},
|
|
5140
|
-
/* @__PURE__ */
|
|
5462
|
+
/* @__PURE__ */ import_react39.default.createElement(
|
|
5141
5463
|
Button_default,
|
|
5142
5464
|
{
|
|
5143
5465
|
size,
|
|
@@ -5156,7 +5478,7 @@ var MonthRangePicker = (0, import_react38.forwardRef)((inProps, ref) => {
|
|
|
5156
5478
|
MonthRangePicker.displayName = "MonthRangePicker";
|
|
5157
5479
|
|
|
5158
5480
|
// src/components/NavigationGroup/NavigationGroup.tsx
|
|
5159
|
-
var
|
|
5481
|
+
var import_react40 = __toESM(require("react"));
|
|
5160
5482
|
var import_joy51 = require("@mui/joy");
|
|
5161
5483
|
var AccordionSummary2 = (0, import_joy51.styled)(import_joy51.AccordionSummary, {
|
|
5162
5484
|
name: "NavigationGroup",
|
|
@@ -5180,11 +5502,11 @@ var AccordionDetails2 = (0, import_joy51.styled)(import_joy51.AccordionDetails,
|
|
|
5180
5502
|
}));
|
|
5181
5503
|
function NavigationGroup(props) {
|
|
5182
5504
|
const { title, children, startDecorator, level, ...rest } = props;
|
|
5183
|
-
return /* @__PURE__ */
|
|
5505
|
+
return /* @__PURE__ */ import_react40.default.createElement(import_joy51.Accordion, { ...rest }, /* @__PURE__ */ import_react40.default.createElement(AccordionSummary2, { useIcon: !!startDecorator, level }, /* @__PURE__ */ import_react40.default.createElement(import_joy51.Stack, { direction: "row", gap: 4 }, startDecorator, title)), /* @__PURE__ */ import_react40.default.createElement(AccordionDetails2, null, children));
|
|
5184
5506
|
}
|
|
5185
5507
|
|
|
5186
5508
|
// src/components/NavigationItem/NavigationItem.tsx
|
|
5187
|
-
var
|
|
5509
|
+
var import_react41 = __toESM(require("react"));
|
|
5188
5510
|
var import_joy52 = require("@mui/joy");
|
|
5189
5511
|
var ListItemButton = (0, import_joy52.styled)(import_joy52.ListItemButton, {
|
|
5190
5512
|
name: "NavigationItem",
|
|
@@ -5213,7 +5535,7 @@ function NavigationItem(props) {
|
|
|
5213
5535
|
const handleClick = () => {
|
|
5214
5536
|
onClick?.(id);
|
|
5215
5537
|
};
|
|
5216
|
-
return /* @__PURE__ */
|
|
5538
|
+
return /* @__PURE__ */ import_react41.default.createElement(import_joy52.ListItem, { ...rest }, /* @__PURE__ */ import_react41.default.createElement(
|
|
5217
5539
|
ListItemButton,
|
|
5218
5540
|
{
|
|
5219
5541
|
level,
|
|
@@ -5222,21 +5544,21 @@ function NavigationItem(props) {
|
|
|
5222
5544
|
"aria-current": selected,
|
|
5223
5545
|
onClick: handleClick
|
|
5224
5546
|
},
|
|
5225
|
-
startDecorator && /* @__PURE__ */
|
|
5547
|
+
startDecorator && /* @__PURE__ */ import_react41.default.createElement(import_joy52.ListItemDecorator, null, startDecorator),
|
|
5226
5548
|
children
|
|
5227
5549
|
));
|
|
5228
5550
|
}
|
|
5229
5551
|
|
|
5230
5552
|
// src/components/Navigator/Navigator.tsx
|
|
5231
|
-
var
|
|
5553
|
+
var import_react42 = __toESM(require("react"));
|
|
5232
5554
|
function Navigator(props) {
|
|
5233
5555
|
const { items, level = 0, onSelect } = props;
|
|
5234
5556
|
const handleItemClick = (id) => {
|
|
5235
5557
|
onSelect?.(id);
|
|
5236
5558
|
};
|
|
5237
|
-
return /* @__PURE__ */
|
|
5559
|
+
return /* @__PURE__ */ import_react42.default.createElement("div", null, items.map((item, index) => {
|
|
5238
5560
|
if (item.type === "item") {
|
|
5239
|
-
return /* @__PURE__ */
|
|
5561
|
+
return /* @__PURE__ */ import_react42.default.createElement(
|
|
5240
5562
|
NavigationItem,
|
|
5241
5563
|
{
|
|
5242
5564
|
key: item.id,
|
|
@@ -5249,7 +5571,7 @@ function Navigator(props) {
|
|
|
5249
5571
|
item.title
|
|
5250
5572
|
);
|
|
5251
5573
|
} else if (item.type === "group") {
|
|
5252
|
-
return /* @__PURE__ */
|
|
5574
|
+
return /* @__PURE__ */ import_react42.default.createElement(
|
|
5253
5575
|
NavigationGroup,
|
|
5254
5576
|
{
|
|
5255
5577
|
key: `${item.title}-${index}`,
|
|
@@ -5267,16 +5589,16 @@ function Navigator(props) {
|
|
|
5267
5589
|
Navigator.displayName = "Navigator";
|
|
5268
5590
|
|
|
5269
5591
|
// src/components/PercentageInput/PercentageInput.tsx
|
|
5270
|
-
var
|
|
5592
|
+
var import_react43 = __toESM(require("react"));
|
|
5271
5593
|
var import_react_number_format2 = require("react-number-format");
|
|
5272
5594
|
var import_joy53 = require("@mui/joy");
|
|
5273
5595
|
var padDecimal = (value, decimalScale) => {
|
|
5274
5596
|
const [integer, decimal = ""] = `${value}`.split(".");
|
|
5275
5597
|
return Number(`${integer}${decimal.padEnd(decimalScale, "0")}`);
|
|
5276
5598
|
};
|
|
5277
|
-
var TextMaskAdapter9 =
|
|
5599
|
+
var TextMaskAdapter9 = import_react43.default.forwardRef(function TextMaskAdapter10(props, ref) {
|
|
5278
5600
|
const { onChange, min, max, ...innerProps } = props;
|
|
5279
|
-
return /* @__PURE__ */
|
|
5601
|
+
return /* @__PURE__ */ import_react43.default.createElement(
|
|
5280
5602
|
import_react_number_format2.NumericFormat,
|
|
5281
5603
|
{
|
|
5282
5604
|
...innerProps,
|
|
@@ -5301,7 +5623,7 @@ var PercentageInputRoot = (0, import_joy53.styled)(Input_default, {
|
|
|
5301
5623
|
slot: "Root",
|
|
5302
5624
|
overridesResolver: (props, styles) => styles.root
|
|
5303
5625
|
})({});
|
|
5304
|
-
var PercentageInput =
|
|
5626
|
+
var PercentageInput = import_react43.default.forwardRef(
|
|
5305
5627
|
function PercentageInput2(inProps, ref) {
|
|
5306
5628
|
const props = (0, import_joy53.useThemeProps)({ props: inProps, name: "PercentageInput" });
|
|
5307
5629
|
const {
|
|
@@ -5324,18 +5646,18 @@ var PercentageInput = import_react42.default.forwardRef(
|
|
|
5324
5646
|
const [_value, setValue] = useControlledState(
|
|
5325
5647
|
props.value,
|
|
5326
5648
|
props.defaultValue,
|
|
5327
|
-
(0,
|
|
5649
|
+
(0, import_react43.useCallback)((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
|
|
5328
5650
|
);
|
|
5329
|
-
const [internalError, setInternalError] = (0,
|
|
5651
|
+
const [internalError, setInternalError] = (0, import_react43.useState)(
|
|
5330
5652
|
max && _value && _value > max || min && _value && _value < min
|
|
5331
5653
|
);
|
|
5332
|
-
const value = (0,
|
|
5654
|
+
const value = (0, import_react43.useMemo)(() => {
|
|
5333
5655
|
if (_value && useMinorUnit) {
|
|
5334
5656
|
return _value / Math.pow(10, maxDecimalScale);
|
|
5335
5657
|
}
|
|
5336
5658
|
return _value;
|
|
5337
5659
|
}, [_value, useMinorUnit, maxDecimalScale]);
|
|
5338
|
-
const handleChange = (0,
|
|
5660
|
+
const handleChange = (0, import_react43.useCallback)(
|
|
5339
5661
|
(event) => {
|
|
5340
5662
|
if (event.target.value === "") {
|
|
5341
5663
|
setValue(void 0);
|
|
@@ -5352,7 +5674,7 @@ var PercentageInput = import_react42.default.forwardRef(
|
|
|
5352
5674
|
},
|
|
5353
5675
|
[setValue, useMinorUnit, maxDecimalScale, min, max]
|
|
5354
5676
|
);
|
|
5355
|
-
return /* @__PURE__ */
|
|
5677
|
+
return /* @__PURE__ */ import_react43.default.createElement(
|
|
5356
5678
|
PercentageInputRoot,
|
|
5357
5679
|
{
|
|
5358
5680
|
...innerProps,
|
|
@@ -5393,15 +5715,15 @@ var RadioGroup = MotionRadioGroup;
|
|
|
5393
5715
|
RadioGroup.displayName = "RadioGroup";
|
|
5394
5716
|
|
|
5395
5717
|
// src/components/RadioList/RadioList.tsx
|
|
5396
|
-
var
|
|
5718
|
+
var import_react44 = __toESM(require("react"));
|
|
5397
5719
|
function RadioList(props) {
|
|
5398
5720
|
const { items, ...innerProps } = props;
|
|
5399
|
-
return /* @__PURE__ */
|
|
5721
|
+
return /* @__PURE__ */ import_react44.default.createElement(RadioGroup, { ...innerProps }, items.map((item) => /* @__PURE__ */ import_react44.default.createElement(Radio, { key: `${item.value}`, value: item.value, label: item.label })));
|
|
5400
5722
|
}
|
|
5401
5723
|
RadioList.displayName = "RadioList";
|
|
5402
5724
|
|
|
5403
5725
|
// src/components/Stepper/Stepper.tsx
|
|
5404
|
-
var
|
|
5726
|
+
var import_react45 = __toESM(require("react"));
|
|
5405
5727
|
var import_joy55 = require("@mui/joy");
|
|
5406
5728
|
var import_Check = __toESM(require("@mui/icons-material/Check"));
|
|
5407
5729
|
var import_framer_motion28 = require("framer-motion");
|
|
@@ -5430,7 +5752,7 @@ function Stepper(props) {
|
|
|
5430
5752
|
stepOrientation = "horizontal"
|
|
5431
5753
|
} = props;
|
|
5432
5754
|
const effectiveStepOrientation = orientation === "vertical" ? "horizontal" : stepOrientation;
|
|
5433
|
-
return /* @__PURE__ */
|
|
5755
|
+
return /* @__PURE__ */ import_react45.default.createElement(
|
|
5434
5756
|
MotionStepper,
|
|
5435
5757
|
{
|
|
5436
5758
|
orientation,
|
|
@@ -5469,23 +5791,23 @@ function Stepper(props) {
|
|
|
5469
5791
|
const completed = activeStep > i + 1;
|
|
5470
5792
|
const disabled = activeStep < i + 1;
|
|
5471
5793
|
const hasContent = step.label || step.extraContent;
|
|
5472
|
-
return /* @__PURE__ */
|
|
5794
|
+
return /* @__PURE__ */ import_react45.default.createElement(
|
|
5473
5795
|
Step,
|
|
5474
5796
|
{
|
|
5475
5797
|
key: `step-${i}`,
|
|
5476
|
-
indicator: /* @__PURE__ */
|
|
5798
|
+
indicator: /* @__PURE__ */ import_react45.default.createElement(StepIndicator, { variant: disabled ? "outlined" : "solid", color: disabled ? "neutral" : "primary" }, completed ? /* @__PURE__ */ import_react45.default.createElement(import_Check.default, null) : step.indicatorContent),
|
|
5477
5799
|
active,
|
|
5478
5800
|
completed,
|
|
5479
5801
|
disabled,
|
|
5480
5802
|
orientation: effectiveStepOrientation
|
|
5481
5803
|
},
|
|
5482
|
-
hasContent && /* @__PURE__ */
|
|
5804
|
+
hasContent && /* @__PURE__ */ import_react45.default.createElement(
|
|
5483
5805
|
Stack_default,
|
|
5484
5806
|
{
|
|
5485
5807
|
sx: orientation === "horizontal" && effectiveStepOrientation === "vertical" ? { alignItems: "center" } : {}
|
|
5486
5808
|
},
|
|
5487
|
-
step.label && /* @__PURE__ */
|
|
5488
|
-
step.extraContent && /* @__PURE__ */
|
|
5809
|
+
step.label && /* @__PURE__ */ import_react45.default.createElement(Typography_default, { level: "title-sm" }, step.label),
|
|
5810
|
+
step.extraContent && /* @__PURE__ */ import_react45.default.createElement(Typography_default, { level: "body-xs" }, step.extraContent)
|
|
5489
5811
|
)
|
|
5490
5812
|
);
|
|
5491
5813
|
})
|
|
@@ -5494,7 +5816,7 @@ function Stepper(props) {
|
|
|
5494
5816
|
Stepper.displayName = "Stepper";
|
|
5495
5817
|
|
|
5496
5818
|
// src/components/Switch/Switch.tsx
|
|
5497
|
-
var
|
|
5819
|
+
var import_react46 = __toESM(require("react"));
|
|
5498
5820
|
var import_joy56 = require("@mui/joy");
|
|
5499
5821
|
var import_framer_motion29 = require("framer-motion");
|
|
5500
5822
|
var MotionSwitch = (0, import_framer_motion29.motion)(import_joy56.Switch);
|
|
@@ -5516,14 +5838,14 @@ var StyledThumb = (0, import_joy56.styled)(import_framer_motion29.motion.div)({
|
|
|
5516
5838
|
right: "var(--Switch-thumbOffset)"
|
|
5517
5839
|
}
|
|
5518
5840
|
});
|
|
5519
|
-
var Thumb = (props) => /* @__PURE__ */
|
|
5841
|
+
var Thumb = (props) => /* @__PURE__ */ import_react46.default.createElement(StyledThumb, { ...props, layout: true, transition: spring });
|
|
5520
5842
|
var spring = {
|
|
5521
5843
|
type: "spring",
|
|
5522
5844
|
stiffness: 700,
|
|
5523
5845
|
damping: 30
|
|
5524
5846
|
};
|
|
5525
5847
|
var Switch = (props) => {
|
|
5526
|
-
return /* @__PURE__ */
|
|
5848
|
+
return /* @__PURE__ */ import_react46.default.createElement(
|
|
5527
5849
|
MotionSwitch,
|
|
5528
5850
|
{
|
|
5529
5851
|
...props,
|
|
@@ -5537,7 +5859,7 @@ var Switch = (props) => {
|
|
|
5537
5859
|
Switch.displayName = "Switch";
|
|
5538
5860
|
|
|
5539
5861
|
// src/components/Tabs/Tabs.tsx
|
|
5540
|
-
var
|
|
5862
|
+
var import_react47 = __toESM(require("react"));
|
|
5541
5863
|
var import_joy57 = require("@mui/joy");
|
|
5542
5864
|
var StyledTabs = (0, import_joy57.styled)(import_joy57.Tabs)(({ theme }) => ({
|
|
5543
5865
|
backgroundColor: theme.palette.background.body
|
|
@@ -5553,15 +5875,15 @@ var StyledTab = (0, import_joy57.styled)(import_joy57.Tab)(({ theme }) => ({
|
|
|
5553
5875
|
backgroundColor: theme.palette.background.body
|
|
5554
5876
|
}
|
|
5555
5877
|
}));
|
|
5556
|
-
var Tab = (0,
|
|
5557
|
-
return /* @__PURE__ */
|
|
5878
|
+
var Tab = (0, import_react47.forwardRef)(function Tab2({ startDecorator, endDecorator, children, ...props }, ref) {
|
|
5879
|
+
return /* @__PURE__ */ import_react47.default.createElement(StyledTab, { ...props, ref }, startDecorator, children, endDecorator);
|
|
5558
5880
|
});
|
|
5559
5881
|
Tab.displayName = "Tab";
|
|
5560
5882
|
var TabList = import_joy57.TabList;
|
|
5561
5883
|
var TabPanel = import_joy57.TabPanel;
|
|
5562
5884
|
|
|
5563
5885
|
// src/components/ThemeProvider/ThemeProvider.tsx
|
|
5564
|
-
var
|
|
5886
|
+
var import_react48 = __toESM(require("react"));
|
|
5565
5887
|
var import_joy58 = require("@mui/joy");
|
|
5566
5888
|
var colorScheme = {
|
|
5567
5889
|
palette: {
|
|
@@ -5811,12 +6133,12 @@ var defaultTheme = (0, import_joy58.extendTheme)({
|
|
|
5811
6133
|
});
|
|
5812
6134
|
function ThemeProvider(props) {
|
|
5813
6135
|
const theme = props.theme || defaultTheme;
|
|
5814
|
-
return /* @__PURE__ */
|
|
6136
|
+
return /* @__PURE__ */ import_react48.default.createElement(import_react48.default.Fragment, null, /* @__PURE__ */ import_react48.default.createElement(import_joy58.CssVarsProvider, { theme }, /* @__PURE__ */ import_react48.default.createElement(import_joy58.CssBaseline, null), props.children));
|
|
5815
6137
|
}
|
|
5816
6138
|
ThemeProvider.displayName = "ThemeProvider";
|
|
5817
6139
|
|
|
5818
6140
|
// src/components/Uploader/Uploader.tsx
|
|
5819
|
-
var
|
|
6141
|
+
var import_react49 = __toESM(require("react"));
|
|
5820
6142
|
var import_joy59 = require("@mui/joy");
|
|
5821
6143
|
var import_CloudUploadRounded = __toESM(require("@mui/icons-material/CloudUploadRounded"));
|
|
5822
6144
|
var import_UploadFileRounded = __toESM(require("@mui/icons-material/UploadFileRounded"));
|
|
@@ -5893,7 +6215,7 @@ var getFileSize = (n) => {
|
|
|
5893
6215
|
};
|
|
5894
6216
|
var Preview = (props) => {
|
|
5895
6217
|
const { files, uploaded, onDelete } = props;
|
|
5896
|
-
return /* @__PURE__ */
|
|
6218
|
+
return /* @__PURE__ */ import_react49.default.createElement(PreviewRoot, { gap: 1 }, [...uploaded, ...files].map((file) => /* @__PURE__ */ import_react49.default.createElement(UploadCard, { key: file.name, size: "sm", color: "neutral" }, /* @__PURE__ */ import_react49.default.createElement(Stack_default, { direction: "row", alignItems: "center", gap: 2 }, /* @__PURE__ */ import_react49.default.createElement(UploadFileIcon, null), /* @__PURE__ */ import_react49.default.createElement(Stack_default, { flex: "1", sx: { overflow: "hidden" } }, /* @__PURE__ */ import_react49.default.createElement(
|
|
5897
6219
|
Typography_default,
|
|
5898
6220
|
{
|
|
5899
6221
|
level: "body-sm",
|
|
@@ -5905,7 +6227,7 @@ var Preview = (props) => {
|
|
|
5905
6227
|
}
|
|
5906
6228
|
},
|
|
5907
6229
|
file.name
|
|
5908
|
-
), !!file.size && /* @__PURE__ */
|
|
6230
|
+
), !!file.size && /* @__PURE__ */ import_react49.default.createElement(Typography_default, { level: "body-xs", fontWeight: "300", lineHeight: "1.33", textColor: "text.tertiary" }, getFileSize(file.size))), /* @__PURE__ */ import_react49.default.createElement(IconButton_default, { onClick: () => onDelete?.(file) }, /* @__PURE__ */ import_react49.default.createElement(ClearIcon2, null))))));
|
|
5909
6231
|
};
|
|
5910
6232
|
var UploaderRoot = (0, import_joy59.styled)(Stack_default, {
|
|
5911
6233
|
name: "Uploader",
|
|
@@ -5948,7 +6270,7 @@ var UploaderIcon = (0, import_joy59.styled)(import_CloudUploadRounded.default, {
|
|
|
5948
6270
|
}
|
|
5949
6271
|
})
|
|
5950
6272
|
);
|
|
5951
|
-
var Uploader =
|
|
6273
|
+
var Uploader = import_react49.default.memo(
|
|
5952
6274
|
(props) => {
|
|
5953
6275
|
const {
|
|
5954
6276
|
accept,
|
|
@@ -5965,14 +6287,14 @@ var Uploader = import_react48.default.memo(
|
|
|
5965
6287
|
error: errorProp,
|
|
5966
6288
|
helperText: helperTextProp
|
|
5967
6289
|
} = props;
|
|
5968
|
-
const dropZoneRef = (0,
|
|
5969
|
-
const inputRef = (0,
|
|
5970
|
-
const [errorText, setErrorText] = (0,
|
|
5971
|
-
const [files, setFiles] = (0,
|
|
5972
|
-
const [uploaded, setUploaded] = (0,
|
|
5973
|
-
const [previewState, setPreviewState] = (0,
|
|
5974
|
-
const accepts = (0,
|
|
5975
|
-
const parsedAccepts = (0,
|
|
6290
|
+
const dropZoneRef = (0, import_react49.useRef)(null);
|
|
6291
|
+
const inputRef = (0, import_react49.useRef)(null);
|
|
6292
|
+
const [errorText, setErrorText] = (0, import_react49.useState)();
|
|
6293
|
+
const [files, setFiles] = (0, import_react49.useState)([]);
|
|
6294
|
+
const [uploaded, setUploaded] = (0, import_react49.useState)(props.uploaded || []);
|
|
6295
|
+
const [previewState, setPreviewState] = (0, import_react49.useState)("idle");
|
|
6296
|
+
const accepts = (0, import_react49.useMemo)(() => accept.split(",").map((accept2) => accept2.trim()), [accept]);
|
|
6297
|
+
const parsedAccepts = (0, import_react49.useMemo)(
|
|
5976
6298
|
() => accepts.flatMap((type) => {
|
|
5977
6299
|
if (["image/*", "video/*", "audio/*"].includes(type)) {
|
|
5978
6300
|
return ALL_EXTENSIONS_BY_TYPE[type];
|
|
@@ -5981,7 +6303,7 @@ var Uploader = import_react48.default.memo(
|
|
|
5981
6303
|
}),
|
|
5982
6304
|
[accepts]
|
|
5983
6305
|
);
|
|
5984
|
-
const helperText = (0,
|
|
6306
|
+
const helperText = (0, import_react49.useMemo)(() => {
|
|
5985
6307
|
if (helperTextProp) {
|
|
5986
6308
|
return helperTextProp;
|
|
5987
6309
|
}
|
|
@@ -6011,12 +6333,12 @@ var Uploader = import_react48.default.memo(
|
|
|
6011
6333
|
}
|
|
6012
6334
|
return helperTexts.join(", ");
|
|
6013
6335
|
}, [accepts, maxFileTotalSize, maxCount, helperTextProp]);
|
|
6014
|
-
const error = (0,
|
|
6015
|
-
const showDropZone = (0,
|
|
6336
|
+
const error = (0, import_react49.useMemo)(() => !!errorText || errorProp, [errorProp, errorText]);
|
|
6337
|
+
const showDropZone = (0, import_react49.useMemo)(
|
|
6016
6338
|
() => !maxCount || maxCount && [...uploaded, ...files].length !== maxCount,
|
|
6017
6339
|
[files, maxCount, uploaded]
|
|
6018
6340
|
);
|
|
6019
|
-
const addFiles = (0,
|
|
6341
|
+
const addFiles = (0, import_react49.useCallback)(
|
|
6020
6342
|
(uploads) => {
|
|
6021
6343
|
try {
|
|
6022
6344
|
const types = parsedAccepts.map((type) => type.replace(".", "")) || [];
|
|
@@ -6061,7 +6383,7 @@ var Uploader = import_react48.default.memo(
|
|
|
6061
6383
|
},
|
|
6062
6384
|
[files, uploaded, maxCount, parsedAccepts, maxFileSize, maxFileTotalSize, name, onChange]
|
|
6063
6385
|
);
|
|
6064
|
-
(0,
|
|
6386
|
+
(0, import_react49.useEffect)(() => {
|
|
6065
6387
|
if (!dropZoneRef.current || disabled) {
|
|
6066
6388
|
return;
|
|
6067
6389
|
}
|
|
@@ -6099,7 +6421,7 @@ var Uploader = import_react48.default.memo(
|
|
|
6099
6421
|
);
|
|
6100
6422
|
return () => cleanup?.();
|
|
6101
6423
|
}, [disabled, addFiles]);
|
|
6102
|
-
(0,
|
|
6424
|
+
(0, import_react49.useEffect)(() => {
|
|
6103
6425
|
if (inputRef.current && minCount) {
|
|
6104
6426
|
if (files.length < minCount) {
|
|
6105
6427
|
inputRef.current.setCustomValidity(`At least ${minCount} files are required.`);
|
|
@@ -6108,14 +6430,14 @@ var Uploader = import_react48.default.memo(
|
|
|
6108
6430
|
}
|
|
6109
6431
|
}
|
|
6110
6432
|
}, [inputRef, files, minCount]);
|
|
6111
|
-
const handleFileChanged = (0,
|
|
6433
|
+
const handleFileChanged = (0, import_react49.useCallback)(
|
|
6112
6434
|
(event) => {
|
|
6113
6435
|
const files2 = Array.from(event.target.files || []);
|
|
6114
6436
|
addFiles(files2);
|
|
6115
6437
|
},
|
|
6116
6438
|
[addFiles]
|
|
6117
6439
|
);
|
|
6118
|
-
const handleDeleteFile = (0,
|
|
6440
|
+
const handleDeleteFile = (0, import_react49.useCallback)(
|
|
6119
6441
|
(deletedFile) => {
|
|
6120
6442
|
if (deletedFile instanceof File) {
|
|
6121
6443
|
setFiles((current) => {
|
|
@@ -6135,10 +6457,10 @@ var Uploader = import_react48.default.memo(
|
|
|
6135
6457
|
},
|
|
6136
6458
|
[name, onChange, onDelete]
|
|
6137
6459
|
);
|
|
6138
|
-
const handleUploaderButtonClick = (0,
|
|
6460
|
+
const handleUploaderButtonClick = (0, import_react49.useCallback)(() => {
|
|
6139
6461
|
inputRef.current?.click();
|
|
6140
6462
|
}, []);
|
|
6141
|
-
const uploader = /* @__PURE__ */
|
|
6463
|
+
const uploader = /* @__PURE__ */ import_react49.default.createElement(
|
|
6142
6464
|
FileDropZone,
|
|
6143
6465
|
{
|
|
6144
6466
|
state: previewState,
|
|
@@ -6147,8 +6469,8 @@ var Uploader = import_react48.default.memo(
|
|
|
6147
6469
|
ref: dropZoneRef,
|
|
6148
6470
|
onClick: handleUploaderButtonClick
|
|
6149
6471
|
},
|
|
6150
|
-
/* @__PURE__ */
|
|
6151
|
-
/* @__PURE__ */
|
|
6472
|
+
/* @__PURE__ */ import_react49.default.createElement(Stack_default, { alignItems: "center", gap: 1 }, /* @__PURE__ */ import_react49.default.createElement(UploaderIcon, { state: previewState, error: !!(error || errorText), disabled })),
|
|
6473
|
+
/* @__PURE__ */ import_react49.default.createElement(
|
|
6152
6474
|
VisuallyHiddenInput,
|
|
6153
6475
|
{
|
|
6154
6476
|
disabled,
|
|
@@ -6171,7 +6493,7 @@ var Uploader = import_react48.default.memo(
|
|
|
6171
6493
|
}
|
|
6172
6494
|
)
|
|
6173
6495
|
);
|
|
6174
|
-
return /* @__PURE__ */
|
|
6496
|
+
return /* @__PURE__ */ import_react49.default.createElement(UploaderRoot, null, showDropZone && /* @__PURE__ */ import_react49.default.createElement(FormControl_default, { size, error: !!(error || errorText), disabled, required: !!minCount }, label && /* @__PURE__ */ import_react49.default.createElement(FormLabel_default, null, label), uploader, /* @__PURE__ */ import_react49.default.createElement(FormHelperText_default, null, /* @__PURE__ */ import_react49.default.createElement(Stack_default, null, errorText && /* @__PURE__ */ import_react49.default.createElement("div", null, errorText), /* @__PURE__ */ import_react49.default.createElement("div", null, helperText)))), [...uploaded, ...files].length > 0 && /* @__PURE__ */ import_react49.default.createElement(Preview, { files, uploaded, onDelete: handleDeleteFile }));
|
|
6175
6497
|
}
|
|
6176
6498
|
);
|
|
6177
6499
|
Uploader.displayName = "Uploader";
|