@ceed/cds 1.9.0 → 1.11.0-next.1

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/index.cjs CHANGED
@@ -85,26 +85,26 @@ __export(index_exports, {
85
85
  AccordionSummary: () => AccordionSummary,
86
86
  Accordions: () => Accordions,
87
87
  Alert: () => Alert,
88
- AspectRatio: () => import_joy58.AspectRatio,
88
+ AspectRatio: () => import_joy60.AspectRatio,
89
89
  Autocomplete: () => Autocomplete,
90
- AutocompleteListbox: () => import_joy58.AutocompleteListbox,
91
- AutocompleteOption: () => import_joy58.AutocompleteOption,
90
+ AutocompleteListbox: () => import_joy60.AutocompleteListbox,
91
+ AutocompleteOption: () => import_joy60.AutocompleteOption,
92
92
  Avatar: () => Avatar,
93
93
  AvatarGroup: () => import_joy11.AvatarGroup,
94
- Badge: () => import_joy58.Badge,
94
+ Badge: () => import_joy60.Badge,
95
95
  Box: () => Box,
96
96
  Breadcrumbs: () => Breadcrumbs,
97
97
  Button: () => Button,
98
- ButtonGroup: () => import_joy58.ButtonGroup,
98
+ ButtonGroup: () => import_joy60.ButtonGroup,
99
99
  Calendar: () => Calendar,
100
- Card: () => import_joy58.Card,
101
- CardActions: () => import_joy58.CardActions,
102
- CardContent: () => import_joy58.CardContent,
103
- CardCover: () => import_joy58.CardCover,
104
- CardOverflow: () => import_joy58.CardOverflow,
100
+ Card: () => import_joy60.Card,
101
+ CardActions: () => import_joy60.CardActions,
102
+ CardContent: () => import_joy60.CardContent,
103
+ CardCover: () => import_joy60.CardCover,
104
+ CardOverflow: () => import_joy60.CardOverflow,
105
105
  Checkbox: () => Checkbox,
106
- Chip: () => import_joy58.Chip,
107
- CircularProgress: () => import_joy58.CircularProgress,
106
+ Chip: () => import_joy60.Chip,
107
+ CircularProgress: () => import_joy60.CircularProgress,
108
108
  Container: () => Container,
109
109
  CurrencyInput: () => CurrencyInput,
110
110
  DataTable: () => DataTable,
@@ -120,21 +120,21 @@ __export(index_exports, {
120
120
  FormControl: () => FormControl,
121
121
  FormHelperText: () => FormHelperText,
122
122
  FormLabel: () => FormLabel,
123
- Grid: () => import_joy42.Grid,
123
+ Grid: () => import_joy44.Grid,
124
124
  IconButton: () => IconButton,
125
125
  IconMenuButton: () => IconMenuButton,
126
126
  InfoSign: () => InfoSign,
127
127
  Input: () => Input,
128
128
  InsetDrawer: () => InsetDrawer,
129
- LinearProgress: () => import_joy58.LinearProgress,
130
- Link: () => import_joy58.Link,
131
- List: () => import_joy58.List,
132
- ListDivider: () => import_joy58.ListDivider,
133
- ListItem: () => import_joy58.ListItem,
134
- ListItemButton: () => import_joy58.ListItemButton,
135
- ListItemContent: () => import_joy58.ListItemContent,
136
- ListItemDecorator: () => import_joy58.ListItemDecorator,
137
- ListSubheader: () => import_joy58.ListSubheader,
129
+ LinearProgress: () => import_joy60.LinearProgress,
130
+ Link: () => import_joy60.Link,
131
+ List: () => import_joy60.List,
132
+ ListDivider: () => import_joy60.ListDivider,
133
+ ListItem: () => import_joy60.ListItem,
134
+ ListItemButton: () => import_joy60.ListItemButton,
135
+ ListItemContent: () => import_joy60.ListItemContent,
136
+ ListItemDecorator: () => import_joy60.ListItemDecorator,
137
+ ListSubheader: () => import_joy60.ListSubheader,
138
138
  Markdown: () => Markdown,
139
139
  Menu: () => Menu,
140
140
  MenuButton: () => MenuButton,
@@ -157,11 +157,11 @@ __export(index_exports, {
157
157
  RadioList: () => RadioList,
158
158
  Select: () => Select,
159
159
  Sheet: () => Sheet,
160
- Skeleton: () => import_joy58.Skeleton,
161
- Slider: () => import_joy58.Slider,
160
+ Skeleton: () => import_joy60.Skeleton,
161
+ Slider: () => import_joy60.Slider,
162
162
  Stack: () => import_joy3.Stack,
163
163
  Step: () => Step,
164
- StepButton: () => import_joy58.StepButton,
164
+ StepButton: () => import_joy60.StepButton,
165
165
  StepIndicator: () => StepIndicator,
166
166
  Stepper: () => Stepper,
167
167
  Switch: () => Switch,
@@ -177,84 +177,84 @@ __export(index_exports, {
177
177
  Tooltip: () => Tooltip,
178
178
  Typography: () => Typography,
179
179
  Uploader: () => Uploader,
180
- accordionClasses: () => import_joy58.accordionClasses,
181
- accordionDetailsClasses: () => import_joy58.accordionDetailsClasses,
182
- accordionSummaryClasses: () => import_joy58.accordionSummaryClasses,
183
- accordionsClasses: () => import_joy58.accordionGroupClasses,
184
- alertClasses: () => import_joy58.alertClasses,
185
- aspectRatioClasses: () => import_joy58.aspectRatioClasses,
186
- autocompleteClasses: () => import_joy58.autocompleteClasses,
187
- autocompleteListboxClasses: () => import_joy58.autocompleteListboxClasses,
188
- autocompleteOptionClasses: () => import_joy58.autocompleteOptionClasses,
189
- avatarClasses: () => import_joy58.avatarClasses,
190
- avatarGroupClasses: () => import_joy58.avatarGroupClasses,
191
- badgeClasses: () => import_joy58.badgeClasses,
192
- boxClasses: () => import_joy58.boxClasses,
193
- breadcrumbsClasses: () => import_joy58.breadcrumbsClasses,
194
- buttonClasses: () => import_joy58.buttonClasses,
195
- cardActionsClasses: () => import_joy58.cardActionsClasses,
196
- cardClasses: () => import_joy58.cardClasses,
197
- cardContentClasses: () => import_joy58.cardContentClasses,
198
- cardCoverClasses: () => import_joy58.cardCoverClasses,
199
- cardOverflowClasses: () => import_joy58.cardOverflowClasses,
200
- checkboxClasses: () => import_joy58.checkboxClasses,
201
- chipClasses: () => import_joy58.chipClasses,
202
- circularProgressClasses: () => import_joy58.circularProgressClasses,
203
- dialogActionsClasses: () => import_joy58.dialogActionsClasses,
204
- dialogContentClasses: () => import_joy58.dialogContentClasses,
205
- dialogTitleClasses: () => import_joy58.dialogTitleClasses,
206
- dividerClasses: () => import_joy58.dividerClasses,
207
- drawerClasses: () => import_joy58.drawerClasses,
208
- extendTheme: () => import_joy56.extendTheme,
209
- formControlClasses: () => import_joy58.formControlClasses,
210
- formHelperTextClasses: () => import_joy58.formHelperTextClasses,
211
- formLabelClasses: () => import_joy58.formLabelClasses,
212
- gridClasses: () => import_joy58.gridClasses,
213
- iconButtonClasses: () => import_joy58.iconButtonClasses,
214
- inputClasses: () => import_joy58.inputClasses,
215
- linearProgressClasses: () => import_joy58.linearProgressClasses,
216
- linkClasses: () => import_joy58.linkClasses,
217
- listClasses: () => import_joy58.listClasses,
218
- listDividerClasses: () => import_joy58.listDividerClasses,
219
- listItemButtonClasses: () => import_joy58.listItemButtonClasses,
220
- listItemClasses: () => import_joy58.listItemClasses,
221
- listItemContentClasses: () => import_joy58.listItemContentClasses,
222
- listItemDecoratorClasses: () => import_joy58.listItemDecoratorClasses,
223
- listSubheaderClasses: () => import_joy58.listSubheaderClasses,
224
- menuButtonClasses: () => import_joy58.menuButtonClasses,
225
- menuClasses: () => import_joy58.menuClasses,
226
- menuItemClasses: () => import_joy58.menuItemClasses,
227
- modalClasses: () => import_joy58.modalClasses,
228
- modalCloseClasses: () => import_joy58.modalCloseClasses,
229
- modalDialogClasses: () => import_joy58.modalDialogClasses,
230
- modalOverflowClasses: () => import_joy58.modalOverflowClasses,
231
- optionClasses: () => import_joy58.optionClasses,
232
- radioClasses: () => import_joy58.radioClasses,
233
- radioGroupClasses: () => import_joy58.radioGroupClasses,
234
- selectClasses: () => import_joy58.selectClasses,
235
- sheetClasses: () => import_joy58.sheetClasses,
236
- skeletonClasses: () => import_joy58.skeletonClasses,
237
- sliderClasses: () => import_joy58.sliderClasses,
238
- stackClasses: () => import_joy58.stackClasses,
239
- stepButtonClasses: () => import_joy58.stepButtonClasses,
240
- stepClasses: () => import_joy58.stepClasses,
241
- stepperClasses: () => import_joy58.stepperClasses,
242
- styled: () => import_joy58.styled,
243
- switchClasses: () => import_joy58.switchClasses,
244
- tabListClasses: () => import_joy58.tabListClasses,
245
- tabPanelClasses: () => import_joy58.tabPanelClasses,
246
- tableClasses: () => import_joy58.tableClasses,
247
- tabsClasses: () => import_joy58.tabsClasses,
248
- textareaClasses: () => import_joy58.textareaClasses,
180
+ accordionClasses: () => import_joy60.accordionClasses,
181
+ accordionDetailsClasses: () => import_joy60.accordionDetailsClasses,
182
+ accordionSummaryClasses: () => import_joy60.accordionSummaryClasses,
183
+ accordionsClasses: () => import_joy60.accordionGroupClasses,
184
+ alertClasses: () => import_joy60.alertClasses,
185
+ aspectRatioClasses: () => import_joy60.aspectRatioClasses,
186
+ autocompleteClasses: () => import_joy60.autocompleteClasses,
187
+ autocompleteListboxClasses: () => import_joy60.autocompleteListboxClasses,
188
+ autocompleteOptionClasses: () => import_joy60.autocompleteOptionClasses,
189
+ avatarClasses: () => import_joy60.avatarClasses,
190
+ avatarGroupClasses: () => import_joy60.avatarGroupClasses,
191
+ badgeClasses: () => import_joy60.badgeClasses,
192
+ boxClasses: () => import_joy60.boxClasses,
193
+ breadcrumbsClasses: () => import_joy60.breadcrumbsClasses,
194
+ buttonClasses: () => import_joy60.buttonClasses,
195
+ cardActionsClasses: () => import_joy60.cardActionsClasses,
196
+ cardClasses: () => import_joy60.cardClasses,
197
+ cardContentClasses: () => import_joy60.cardContentClasses,
198
+ cardCoverClasses: () => import_joy60.cardCoverClasses,
199
+ cardOverflowClasses: () => import_joy60.cardOverflowClasses,
200
+ checkboxClasses: () => import_joy60.checkboxClasses,
201
+ chipClasses: () => import_joy60.chipClasses,
202
+ circularProgressClasses: () => import_joy60.circularProgressClasses,
203
+ dialogActionsClasses: () => import_joy60.dialogActionsClasses,
204
+ dialogContentClasses: () => import_joy60.dialogContentClasses,
205
+ dialogTitleClasses: () => import_joy60.dialogTitleClasses,
206
+ dividerClasses: () => import_joy60.dividerClasses,
207
+ drawerClasses: () => import_joy60.drawerClasses,
208
+ extendTheme: () => import_joy58.extendTheme,
209
+ formControlClasses: () => import_joy60.formControlClasses,
210
+ formHelperTextClasses: () => import_joy60.formHelperTextClasses,
211
+ formLabelClasses: () => import_joy60.formLabelClasses,
212
+ gridClasses: () => import_joy60.gridClasses,
213
+ iconButtonClasses: () => import_joy60.iconButtonClasses,
214
+ inputClasses: () => import_joy60.inputClasses,
215
+ linearProgressClasses: () => import_joy60.linearProgressClasses,
216
+ linkClasses: () => import_joy60.linkClasses,
217
+ listClasses: () => import_joy60.listClasses,
218
+ listDividerClasses: () => import_joy60.listDividerClasses,
219
+ listItemButtonClasses: () => import_joy60.listItemButtonClasses,
220
+ listItemClasses: () => import_joy60.listItemClasses,
221
+ listItemContentClasses: () => import_joy60.listItemContentClasses,
222
+ listItemDecoratorClasses: () => import_joy60.listItemDecoratorClasses,
223
+ listSubheaderClasses: () => import_joy60.listSubheaderClasses,
224
+ menuButtonClasses: () => import_joy60.menuButtonClasses,
225
+ menuClasses: () => import_joy60.menuClasses,
226
+ menuItemClasses: () => import_joy60.menuItemClasses,
227
+ modalClasses: () => import_joy60.modalClasses,
228
+ modalCloseClasses: () => import_joy60.modalCloseClasses,
229
+ modalDialogClasses: () => import_joy60.modalDialogClasses,
230
+ modalOverflowClasses: () => import_joy60.modalOverflowClasses,
231
+ optionClasses: () => import_joy60.optionClasses,
232
+ radioClasses: () => import_joy60.radioClasses,
233
+ radioGroupClasses: () => import_joy60.radioGroupClasses,
234
+ selectClasses: () => import_joy60.selectClasses,
235
+ sheetClasses: () => import_joy60.sheetClasses,
236
+ skeletonClasses: () => import_joy60.skeletonClasses,
237
+ sliderClasses: () => import_joy60.sliderClasses,
238
+ stackClasses: () => import_joy60.stackClasses,
239
+ stepButtonClasses: () => import_joy60.stepButtonClasses,
240
+ stepClasses: () => import_joy60.stepClasses,
241
+ stepperClasses: () => import_joy60.stepperClasses,
242
+ styled: () => import_joy60.styled,
243
+ switchClasses: () => import_joy60.switchClasses,
244
+ tabListClasses: () => import_joy60.tabListClasses,
245
+ tabPanelClasses: () => import_joy60.tabPanelClasses,
246
+ tableClasses: () => import_joy60.tableClasses,
247
+ tabsClasses: () => import_joy60.tabsClasses,
248
+ textareaClasses: () => import_joy60.textareaClasses,
249
249
  theme: () => defaultTheme,
250
- tooltipClasses: () => import_joy58.tooltipClasses,
251
- typographyClasses: () => import_joy58.typographyClasses,
252
- useColorScheme: () => import_joy58.useColorScheme,
253
- useTheme: () => import_joy58.useTheme,
254
- useThemeProps: () => import_joy58.useThemeProps
250
+ tooltipClasses: () => import_joy60.tooltipClasses,
251
+ typographyClasses: () => import_joy60.typographyClasses,
252
+ useColorScheme: () => import_joy60.useColorScheme,
253
+ useTheme: () => import_joy60.useTheme,
254
+ useThemeProps: () => import_joy60.useThemeProps
255
255
  });
256
256
  module.exports = __toCommonJS(index_exports);
257
- var import_joy58 = require("@mui/joy");
257
+ var import_joy60 = require("@mui/joy");
258
258
 
259
259
  // src/components/Accordions/Accordions.tsx
260
260
  var import_react = __toESM(require("react"));
@@ -1924,1066 +1924,861 @@ var CurrencyInput = import_react17.default.forwardRef(function CurrencyInput2(in
1924
1924
  var CurrencyInput_default = CurrencyInput;
1925
1925
 
1926
1926
  // src/components/DataTable/DataTable.tsx
1927
- var import_react25 = __toESM(require("react"));
1927
+ var import_react28 = __toESM(require("react"));
1928
1928
  var import_react_virtual2 = require("@tanstack/react-virtual");
1929
- var import_joy33 = require("@mui/joy");
1930
- var import_ArrowUpwardRounded = __toESM(require("@mui/icons-material/ArrowUpwardRounded"));
1931
-
1932
- // src/components/Sheet/Sheet.tsx
1933
- var import_joy24 = require("@mui/joy");
1934
- var import_framer_motion16 = require("framer-motion");
1935
- var MotionSheet = (0, import_framer_motion16.motion)(import_joy24.Sheet);
1936
- var Sheet = MotionSheet;
1937
- Sheet.displayName = "Sheet";
1938
-
1939
- // src/components/Sheet/index.ts
1940
- var Sheet_default = Sheet;
1941
1929
 
1942
- // src/components/Table/Table.tsx
1943
- var import_react18 = __toESM(require("react"));
1944
- var import_joy25 = require("@mui/joy");
1945
- var Table = (props) => {
1946
- const { children, ...inheritProps } = props;
1947
- return /* @__PURE__ */ import_react18.default.createElement(import_joy25.Table, { ...inheritProps }, children);
1948
- };
1949
- Table.displayName = "Table";
1950
- function TableHead(props) {
1951
- const {
1952
- headCells,
1953
- showCheckbox,
1954
- onCheckboxChange,
1955
- slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
1956
- slotProps: { checkbox: checkboxProps = {} } = {}
1957
- } = props;
1958
- return /* @__PURE__ */ import_react18.default.createElement("thead", null, /* @__PURE__ */ import_react18.default.createElement("tr", null, showCheckbox && /* @__PURE__ */ import_react18.default.createElement(
1959
- "th",
1960
- {
1961
- style: {
1962
- width: "40px",
1963
- textAlign: "center"
1964
- }
1965
- },
1966
- /* @__PURE__ */ import_react18.default.createElement(RenderCheckbox, { onChange: onCheckboxChange, ...checkboxProps })
1967
- ), headCells.map((headCell) => /* @__PURE__ */ import_react18.default.createElement(
1968
- "th",
1969
- {
1970
- key: headCell.label,
1971
- style: {
1972
- width: headCell.width,
1973
- minWidth: headCell.minWidth,
1974
- maxWidth: headCell.maxWidth,
1975
- textAlign: headCell.numeric ? "right" : "left"
1976
- }
1977
- },
1978
- headCell.label
1979
- ))));
1930
+ // src/components/DataTable/utils.ts
1931
+ function extractFieldsFromGroupingModel(items) {
1932
+ const fields = /* @__PURE__ */ new Set();
1933
+ for (const item of items) {
1934
+ if ("groupId" in item) {
1935
+ const children = Array.isArray(item.children) ? item.children : [item.children];
1936
+ const childFields = extractFieldsFromGroupingModel(children);
1937
+ childFields.forEach((field) => fields.add(field));
1938
+ } else {
1939
+ fields.add(item.field);
1940
+ }
1941
+ }
1942
+ return fields;
1980
1943
  }
1981
- TableHead.displayName = "TableHead";
1982
- function TableBody(props) {
1983
- const {
1984
- rows,
1985
- cellOrder,
1986
- rowOptions,
1987
- showCheckbox,
1988
- onCheckboxChange,
1989
- slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
1990
- slotProps: { checkbox: checkboxProps = {} } = {}
1991
- } = props;
1992
- return /* @__PURE__ */ import_react18.default.createElement("tbody", null, rows.map((row, rowIndex) => /* @__PURE__ */ import_react18.default.createElement("tr", { key: `table-row-${rowIndex}` }, showCheckbox && /* @__PURE__ */ import_react18.default.createElement(
1993
- "td",
1994
- {
1995
- style: {
1996
- textAlign: "center"
1997
- }
1998
- },
1999
- /* @__PURE__ */ import_react18.default.createElement(RenderCheckbox, { onChange: (event) => onCheckboxChange?.(event, rowIndex), ...checkboxProps })
2000
- ), cellOrder.map((cellKey) => /* @__PURE__ */ import_react18.default.createElement(
2001
- "td",
2002
- {
2003
- key: cellKey,
2004
- style: {
2005
- textAlign: rowOptions?.[cellKey]?.numeric ? "right" : "left"
1944
+ function reorderColumnsByGroupingModel(columns, columnGroupingModel) {
1945
+ const fieldsInGroupingModel = extractFieldsFromGroupingModel(columnGroupingModel);
1946
+ const orderedFields = [];
1947
+ function collectFieldsInOrder(items) {
1948
+ for (const item of items) {
1949
+ if ("groupId" in item) {
1950
+ const children = Array.isArray(item.children) ? item.children : [item.children];
1951
+ collectFieldsInOrder(children);
1952
+ } else {
1953
+ if (!orderedFields.includes(item.field)) {
1954
+ orderedFields.push(item.field);
1955
+ }
2006
1956
  }
2007
- },
2008
- row[cellKey]
2009
- )))));
2010
- }
2011
- TableBody.displayName = "TableBody";
2012
-
2013
- // src/components/DatePicker/DatePicker.tsx
2014
- var import_react19 = __toESM(require("react"));
2015
- var import_react_imask = require("react-imask");
2016
- var import_CalendarToday = __toESM(require("@mui/icons-material/CalendarToday"));
2017
- var import_joy27 = require("@mui/joy");
2018
- var import_base2 = require("@mui/base");
2019
-
2020
- // src/components/DialogActions/DialogActions.tsx
2021
- var import_joy26 = require("@mui/joy");
2022
- var import_framer_motion17 = require("framer-motion");
2023
- var MotionDialogActions = (0, import_framer_motion17.motion)(import_joy26.DialogActions);
2024
- var StyledDialogActions = (0, import_joy26.styled)(MotionDialogActions)(({ theme }) => ({
2025
- padding: theme.spacing(2),
2026
- gap: theme.spacing(2),
2027
- flexDirection: "row",
2028
- justifyContent: "flex-end"
2029
- }));
2030
- var DialogActions = StyledDialogActions;
2031
- DialogActions.displayName = "DialogActions";
2032
-
2033
- // src/components/DialogActions/index.ts
2034
- var DialogActions_default = DialogActions;
2035
-
2036
- // src/components/DatePicker/DatePicker.tsx
2037
- var CalendarButton = (0, import_joy27.styled)(IconButton_default, {
2038
- name: "DatePicker",
2039
- slot: "calendarButton"
2040
- })(({ theme }) => ({
2041
- "&:focus": {
2042
- "--Icon-color": "currentColor",
2043
- outlineOffset: `${theme.getCssVar("focus-thickness")}`,
2044
- outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar("palette-focusVisible")}`
2045
- }
2046
- }));
2047
- var StyledPopper = (0, import_joy27.styled)(import_base2.Popper, {
2048
- name: "DatePicker",
2049
- slot: "popper"
2050
- })(({ theme }) => ({
2051
- zIndex: theme.zIndex.tooltip
2052
- }));
2053
- var CalendarSheet = (0, import_joy27.styled)(Sheet_default, {
2054
- name: "DatePicker",
2055
- slot: "sheet",
2056
- overridesResolver: (props, styles) => styles.root
2057
- })(({ theme }) => ({
2058
- width: "264px",
2059
- boxShadow: theme.shadow.md,
2060
- borderRadius: theme.radius.md
2061
- }));
2062
- var DatePickerRoot = (0, import_joy27.styled)("div", {
2063
- name: "DatePicker",
2064
- slot: "root",
2065
- overridesResolver: (props, styles) => styles.root
2066
- })({
2067
- width: "100%"
2068
- });
2069
- var validValueFormat = (value, format) => {
2070
- try {
2071
- const parsedValue = parseDate(value, format);
2072
- if (parsedValue.toString() === "Invalid Date") {
2073
- return false;
2074
1957
  }
2075
- if (value !== formatValueString(parsedValue, format)) {
2076
- return false;
1958
+ }
1959
+ collectFieldsInOrder(columnGroupingModel);
1960
+ const columnMap = new Map(columns.map((col) => [col.field, col]));
1961
+ const reorderedColumns = [];
1962
+ for (const field of orderedFields) {
1963
+ const column = columnMap.get(field);
1964
+ if (column) {
1965
+ reorderedColumns.push(column);
2077
1966
  }
2078
- const regex = new RegExp(`^${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")}$`);
2079
- return regex.test(value);
2080
- } catch (e) {
2081
- return false;
2082
1967
  }
2083
- };
2084
- var formatValueString = (date, format) => {
2085
- let day = `${date.getDate()}`;
2086
- let month = `${date.getMonth() + 1}`;
2087
- const year = date.getFullYear();
2088
- if (Number(day) < 10) day = "0" + day;
2089
- if (Number(month) < 10) month = "0" + month;
2090
- return format.replace(/YYYY/g, year.toString()).replace(/MM/g, month).replace(/DD/g, day);
2091
- };
2092
- function parseDate(dateString, format) {
2093
- const formatParts = format.split(/[-./\s]/);
2094
- const dateParts = dateString.split(/[-./\s]/);
2095
- if (formatParts.length !== dateParts.length) {
2096
- throw new Error("Invalid date string or format");
1968
+ for (const column of columns) {
1969
+ if (!fieldsInGroupingModel.has(column.field)) {
1970
+ reorderedColumns.push(column);
1971
+ }
2097
1972
  }
2098
- let day, month, year;
2099
- for (let i = 0; i < formatParts.length; i++) {
2100
- const value = parseInt(dateParts[i], 10);
2101
- switch (formatParts[i]) {
2102
- case "DD":
2103
- day = value;
2104
- break;
2105
- case "MM":
2106
- month = value - 1;
2107
- break;
2108
- case "YYYY":
2109
- year = value;
2110
- break;
1973
+ return reorderedColumns;
1974
+ }
1975
+ function flattenColumnGroups(items, groupPath = [], columnIndex = { current: 0 }) {
1976
+ const result = [];
1977
+ for (const item of items) {
1978
+ if ("groupId" in item) {
1979
+ const newPath = [...groupPath, item.groupId];
1980
+ const children = Array.isArray(item.children) ? item.children : [item.children];
1981
+ result.push(...flattenColumnGroups(children, newPath, columnIndex));
1982
+ } else {
1983
+ result.push({
1984
+ ...item,
1985
+ groupPath,
1986
+ columnIndex: columnIndex.current++
1987
+ });
2111
1988
  }
2112
1989
  }
2113
- const result = new Date(year, month, day);
2114
1990
  return result;
2115
1991
  }
2116
- var formatToPattern = (format) => {
2117
- return format.replace(/YYYY/g, "Y").replace(/MM/g, "M").replace(/DD/g, "D").replace(/[^YMD\s]/g, (match) => `${match}\``);
2118
- };
2119
- var TextMaskAdapter3 = import_react19.default.forwardRef(function TextMaskAdapter4(props, ref) {
2120
- const { onChange, format, ...other } = props;
2121
- return /* @__PURE__ */ import_react19.default.createElement(
2122
- import_react_imask.IMaskInput,
2123
- {
2124
- ...other,
2125
- inputRef: ref,
2126
- onAccept: (value) => onChange({ target: { name: props.name, value } }),
2127
- mask: Date,
2128
- pattern: formatToPattern(format),
2129
- blocks: {
2130
- D: {
2131
- mask: import_react_imask.IMask.MaskedRange,
2132
- from: 1,
2133
- to: 31,
2134
- maxLength: 2
2135
- },
2136
- M: {
2137
- mask: import_react_imask.IMask.MaskedRange,
2138
- from: 1,
2139
- to: 12,
2140
- maxLength: 2
2141
- },
2142
- Y: {
2143
- mask: import_react_imask.IMask.MaskedRange,
2144
- from: 1900,
2145
- to: 9999,
2146
- maxLength: 4
2147
- }
2148
- },
2149
- format: (date) => formatValueString(date, format),
2150
- parse: (str) => parseDate(str, format),
2151
- autofix: "pad",
2152
- overwrite: true
1992
+ function calculateColumnGroups(columnGroupingModel, columns) {
1993
+ const fieldsInGroupingModel = extractFieldsFromGroupingModel(columnGroupingModel);
1994
+ const flattenedColumns = flattenColumnGroups(columnGroupingModel);
1995
+ const columnIndexMap = new Map(flattenedColumns.map((col) => [col.field, col.columnIndex]));
1996
+ const processedGroups = /* @__PURE__ */ new Map();
1997
+ const groupsByLevel = [];
1998
+ let maxLevel = 0;
1999
+ function processGroup(items, level, parentGroupId) {
2000
+ let minIndex = Infinity;
2001
+ let maxIndex = -Infinity;
2002
+ for (const item of items) {
2003
+ if ("groupId" in item) {
2004
+ const groupKey = parentGroupId ? `${parentGroupId}.${item.groupId}` : item.groupId;
2005
+ if (!processedGroups.has(groupKey)) {
2006
+ const children = Array.isArray(item.children) ? item.children : [item.children];
2007
+ const { startIndex, colspan } = processGroup(children, level + 1, groupKey);
2008
+ const group = {
2009
+ groupId: item.groupId,
2010
+ headerName: item.headerName,
2011
+ headerClassName: item.headerClassName,
2012
+ colspan,
2013
+ level,
2014
+ startIndex
2015
+ };
2016
+ processedGroups.set(groupKey, group);
2017
+ if (!groupsByLevel[level]) {
2018
+ groupsByLevel[level] = [];
2019
+ }
2020
+ groupsByLevel[level].push(group);
2021
+ maxLevel = Math.max(maxLevel, level);
2022
+ minIndex = Math.min(minIndex, startIndex);
2023
+ maxIndex = Math.max(maxIndex, startIndex + colspan - 1);
2024
+ }
2025
+ } else {
2026
+ const columnIndex = columnIndexMap.get(item.field);
2027
+ if (columnIndex !== void 0) {
2028
+ minIndex = Math.min(minIndex, columnIndex);
2029
+ maxIndex = Math.max(maxIndex, columnIndex);
2030
+ }
2031
+ }
2153
2032
  }
2154
- );
2033
+ return {
2034
+ startIndex: minIndex === Infinity ? 0 : minIndex,
2035
+ colspan: maxIndex === -Infinity ? 0 : maxIndex - minIndex + 1
2036
+ };
2037
+ }
2038
+ processGroup(columnGroupingModel, 0);
2039
+ groupsByLevel.forEach((level) => {
2040
+ level.sort((a, b) => a.startIndex - b.startIndex);
2041
+ });
2042
+ return { groups: groupsByLevel, maxLevel, fieldsInGroupingModel };
2043
+ }
2044
+ function getTextAlign(props) {
2045
+ return !props.editMode && ["number", "date", "currency"].includes(props.type || "") ? "end" : "start";
2046
+ }
2047
+ var numberFormatter = (value) => "Intl" in window ? new Intl.NumberFormat().format(value) : value;
2048
+
2049
+ // src/components/DataTable/styled.tsx
2050
+ var import_react18 = __toESM(require("react"));
2051
+ var import_joy24 = require("@mui/joy");
2052
+ var import_framer_motion16 = require("framer-motion");
2053
+ var import_ArrowUpwardRounded = __toESM(require("@mui/icons-material/ArrowUpwardRounded"));
2054
+ var EllipsisDiv = (0, import_joy24.styled)("div", {
2055
+ name: "DataTable",
2056
+ slot: "textEllipsis"
2057
+ })({
2058
+ overflow: "hidden",
2059
+ textOverflow: "ellipsis",
2060
+ whiteSpace: "nowrap"
2155
2061
  });
2156
- var DatePicker = (0, import_react19.forwardRef)((inProps, ref) => {
2157
- const props = (0, import_joy27.useThemeProps)({ props: inProps, name: "DatePicker" });
2158
- const {
2159
- onChange,
2160
- disabled,
2161
- label,
2162
- error,
2163
- helperText,
2164
- minDate,
2165
- maxDate,
2166
- disableFuture,
2167
- disablePast,
2168
- required,
2169
- // NOTE: 스타일 관련된 props는 최상위 엘리먼트에 적용한다.
2170
- sx,
2171
- className,
2172
- format = "YYYY/MM/DD",
2173
- displayFormat = "YYYY/MM/DD",
2174
- size,
2175
- inputReadOnly,
2176
- hideClearButton,
2177
- readOnly,
2178
- shouldDisableDate,
2179
- ...innerProps
2180
- } = props;
2181
- const innerRef = (0, import_react19.useRef)(null);
2182
- const buttonRef = (0, import_react19.useRef)(null);
2183
- const [value, setValue] = useControlledState(
2184
- props.value,
2185
- props.defaultValue || "",
2186
- (0, import_react19.useCallback)((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
2187
- );
2188
- const [displayValue, setDisplayValue] = (0, import_react19.useState)(
2189
- () => value ? formatValueString(parseDate(value, format), displayFormat) : ""
2190
- );
2191
- const [anchorEl, setAnchorEl] = (0, import_react19.useState)(null);
2192
- const open = Boolean(anchorEl);
2193
- (0, import_react19.useEffect)(() => {
2194
- if (!anchorEl) {
2195
- innerRef.current?.blur();
2062
+ var OverlayWrapper = (0, import_joy24.styled)("tr", {
2063
+ name: "DataTable",
2064
+ slot: "overlayWrapper"
2065
+ })({
2066
+ position: "sticky",
2067
+ top: `calc(var(--unstable_TableCell-height, 32px))`,
2068
+ left: 0,
2069
+ right: 0,
2070
+ zIndex: 1,
2071
+ "& > td": {
2072
+ height: 0,
2073
+ padding: 0,
2074
+ border: "none !important"
2075
+ }
2076
+ });
2077
+ var VirtualizedTableBody = (0, import_joy24.styled)("tbody", {
2078
+ name: "DataTable",
2079
+ slot: "tableBody"
2080
+ })({
2081
+ "&::after": {
2082
+ content: "''",
2083
+ display: "block",
2084
+ height: "0.01em"
2085
+ },
2086
+ [`& .${import_joy24.buttonClasses.root}`]: {
2087
+ "--Button-minHeight": "26px",
2088
+ "--Button-paddingBlock": "0.25rem",
2089
+ lineHeight: 1,
2090
+ marginTop: "-2px",
2091
+ marginBottom: "-2px"
2092
+ },
2093
+ [`& .${import_joy24.iconButtonClasses.root}`]: {
2094
+ "--IconButton-size": "26px",
2095
+ verticalAlign: "middle",
2096
+ marginTop: "-2px",
2097
+ marginBottom: "-2px"
2098
+ }
2099
+ });
2100
+ var StyledTableRow = (0, import_joy24.styled)("tr", {
2101
+ name: "DataTable",
2102
+ slot: "tableRow",
2103
+ shouldForwardProp: (prop) => prop !== "striped"
2104
+ })(({ striped }) => ({
2105
+ ...striped && {
2106
+ backgroundColor: "var(--TableRow-stripeBackground, var(--ceed-palette-background-level2))",
2107
+ color: "var(--ceed-palette-text-primary)",
2108
+ "& td": {
2109
+ backgroundColor: "background.surface"
2196
2110
  }
2197
- }, [anchorEl, innerRef]);
2198
- (0, import_react19.useEffect)(() => {
2199
- if (value === "") {
2200
- setDisplayValue("");
2201
- return;
2111
+ },
2112
+ "&:hover": {
2113
+ backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))",
2114
+ "& td": {
2115
+ backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))"
2202
2116
  }
2203
- const formattedValue = formatValueString(parseDate(value, format), displayFormat);
2204
- if (validValueFormat(formattedValue, displayFormat) && formattedValue !== displayValue) {
2205
- setDisplayValue(formattedValue);
2117
+ }
2118
+ }));
2119
+ var Asterisk = (0, import_joy24.styled)("span", {
2120
+ name: "DataTable",
2121
+ slot: "headCellAsterisk"
2122
+ })(({ theme }) => ({
2123
+ color: "var(--ceed-palette-danger-500)",
2124
+ marginLeft: theme.spacing(0.5)
2125
+ }));
2126
+ var StyledTh = (0, import_joy24.styled)(import_framer_motion16.motion.th)(({ theme }) => ({
2127
+ boxShadow: "1px 0 var(--TableCell-borderColor)"
2128
+ }));
2129
+ var StyledTd = (0, import_joy24.styled)("td")(({ theme }) => ({
2130
+ transition: `box-shadow 0.3s`,
2131
+ "&:not(.is-last-left):not(.is-last-right)": {
2132
+ boxShadow: "1px 0 var(--TableCell-borderColor)"
2133
+ },
2134
+ ".ScrollableRight &": {
2135
+ "&.is-last-left": {
2136
+ boxShadow: `1px 0 var(--TableCell-borderColor), ${theme.shadow.md}`
2206
2137
  }
2207
- }, [displayFormat, displayValue, format, value]);
2208
- (0, import_react19.useImperativeHandle)(ref, () => innerRef.current, [innerRef]);
2209
- const handleChange = (0, import_react19.useCallback)(
2210
- (event) => {
2211
- const value2 = event.target.value;
2212
- setDisplayValue(value2 ? formatValueString(parseDate(value2, format), displayFormat) : value2);
2213
- setValue(value2);
2214
- },
2215
- [displayFormat, format, setValue]
2216
- );
2217
- const handleDisplayInputChange = (0, import_react19.useCallback)(
2218
- (event) => {
2219
- if (event.target.value === "") {
2220
- handleChange({
2221
- target: {
2222
- name: props.name,
2223
- value: ""
2224
- }
2225
- });
2226
- return;
2227
- }
2228
- const isValidDisplayValue = validValueFormat(event.target.value, displayFormat);
2229
- if (isValidDisplayValue) {
2230
- const parsedDate = parseDate(event.target.value, displayFormat);
2231
- const formattedValue = formatValueString(parsedDate, format);
2232
- handleChange({
2233
- target: {
2234
- name: props.name,
2235
- value: formattedValue
2236
- }
2237
- });
2238
- }
2239
- },
2240
- [displayFormat, format, handleChange, props.name]
2241
- );
2242
- const handleCalendarToggle = (0, import_react19.useCallback)(
2243
- (event) => {
2244
- setAnchorEl(anchorEl ? null : event.currentTarget);
2245
- setTimeout(() => {
2246
- innerRef.current?.focus();
2247
- }, 0);
2248
- },
2249
- [anchorEl, setAnchorEl, innerRef]
2250
- );
2251
- const handleInputMouseDown = (0, import_react19.useCallback)(
2252
- (event) => {
2253
- if (inputReadOnly) {
2254
- event.preventDefault();
2255
- buttonRef.current?.focus();
2256
- }
2138
+ },
2139
+ ".ScrollableLeft &": {
2140
+ "&.is-last-right": {
2141
+ boxShadow: `1px 0 var(--TableCell-borderColor), ${theme.shadow.md}`
2142
+ }
2143
+ }
2144
+ }));
2145
+ var MotionSortIcon = (0, import_framer_motion16.motion)(import_ArrowUpwardRounded.default);
2146
+ var DefaultLoadingOverlay = () => /* @__PURE__ */ import_react18.default.createElement(import_joy24.LinearProgress, { value: 8, variant: "plain" });
2147
+ var Resizer = (ref, targetRef = ref) => /* @__PURE__ */ import_react18.default.createElement(
2148
+ Box_default,
2149
+ {
2150
+ sx: {
2151
+ position: "absolute",
2152
+ top: 0,
2153
+ right: 0,
2154
+ bottom: 0,
2155
+ width: "4px",
2156
+ cursor: "col-resize"
2257
2157
  },
2258
- [inputReadOnly, buttonRef]
2259
- );
2260
- return /* @__PURE__ */ import_react19.default.createElement(DatePickerRoot, null, /* @__PURE__ */ import_react19.default.createElement(import_base2.FocusTrap, { open: true }, /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, /* @__PURE__ */ import_react19.default.createElement(
2261
- Input_default,
2262
- {
2263
- ...innerProps,
2264
- color: error ? "danger" : innerProps.color,
2265
- ref: innerRef,
2266
- size,
2267
- value: displayValue,
2268
- onChange: handleDisplayInputChange,
2269
- placeholder: displayFormat,
2270
- disabled,
2271
- required,
2272
- error,
2273
- slotProps: {
2274
- input: {
2275
- component: TextMaskAdapter3,
2276
- ref: innerRef,
2277
- format: displayFormat,
2278
- sx: {
2279
- "&:hover": {
2280
- cursor: inputReadOnly || readOnly ? "default" : "text"
2281
- }
2282
- },
2283
- onMouseDown: handleInputMouseDown
2158
+ onClick: (e) => e.stopPropagation(),
2159
+ onMouseDown: (e) => {
2160
+ const initialX = e.clientX;
2161
+ const initialWidth = ref.current?.getBoundingClientRect().width;
2162
+ const onMouseMove = (e2) => {
2163
+ if (initialWidth && initialX) {
2164
+ ref.current.style.width = `${initialWidth + (e2.clientX - initialX)}px`;
2165
+ targetRef.current.style.width = `${initialWidth + (e2.clientX - initialX)}px`;
2284
2166
  }
2285
- },
2286
- className,
2287
- sx,
2288
- endDecorator: /* @__PURE__ */ import_react19.default.createElement(
2289
- CalendarButton,
2290
- {
2291
- ref: buttonRef,
2292
- variant: "plain",
2293
- onClick: readOnly ? void 0 : handleCalendarToggle,
2294
- "aria-label": "Toggle Calendar",
2295
- "aria-controls": "date-picker-popper",
2296
- "aria-haspopup": "dialog",
2297
- "aria-expanded": open,
2298
- disabled
2299
- },
2300
- /* @__PURE__ */ import_react19.default.createElement(import_CalendarToday.default, null)
2301
- ),
2302
- label,
2303
- helperText,
2304
- readOnly: readOnly || inputReadOnly
2167
+ };
2168
+ const onMouseUp = () => {
2169
+ document.removeEventListener("mousemove", onMouseMove);
2170
+ document.removeEventListener("mouseup", onMouseUp);
2171
+ };
2172
+ document.addEventListener("mousemove", onMouseMove);
2173
+ document.addEventListener("mouseup", onMouseUp);
2305
2174
  }
2306
- ), open && /* @__PURE__ */ import_react19.default.createElement(import_base2.ClickAwayListener, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ import_react19.default.createElement(
2307
- StyledPopper,
2308
- {
2309
- id: "date-picker-popper",
2310
- open: true,
2311
- anchorEl,
2312
- placement: "bottom-end",
2313
- onMouseDown: (e) => e.preventDefault(),
2314
- modifiers: [
2315
- {
2316
- name: "offset",
2317
- options: {
2318
- offset: [4, 4]
2319
- }
2320
- }
2321
- ],
2322
- "aria-label": "Calendar Tooltip",
2323
- "aria-expanded": open
2324
- },
2325
- /* @__PURE__ */ import_react19.default.createElement(CalendarSheet, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react19.default.createElement(
2326
- Calendar_default,
2327
- {
2328
- value: value && !Number.isNaN(parseDate(value, format).getTime()) ? [parseDate(value, format), void 0] : void 0,
2329
- onChange: ([date]) => {
2330
- handleChange({
2331
- target: {
2332
- name: props.name,
2333
- value: formatValueString(date, format)
2334
- }
2335
- });
2336
- setAnchorEl(null);
2337
- },
2338
- minDate: minDate ? new Date(minDate) : void 0,
2339
- maxDate: maxDate ? new Date(maxDate) : void 0,
2340
- disableFuture,
2341
- disablePast,
2342
- shouldDisableDate: shouldDisableDate ? (date) => shouldDisableDate(formatValueString(date, format)) : void 0
2343
- }
2344
- ), !hideClearButton && /* @__PURE__ */ import_react19.default.createElement(
2345
- DialogActions_default,
2346
- {
2347
- sx: {
2348
- p: 1
2349
- }
2350
- },
2351
- /* @__PURE__ */ import_react19.default.createElement(
2352
- Button_default,
2353
- {
2354
- size,
2355
- variant: "plain",
2356
- color: "neutral",
2357
- onClick: () => {
2358
- handleChange({
2359
- target: {
2360
- name: props.name,
2361
- value: ""
2362
- }
2363
- });
2364
- setAnchorEl(null);
2365
- }
2366
- },
2367
- "Clear"
2368
- )
2369
- ))
2370
- )))));
2371
- });
2175
+ }
2176
+ );
2372
2177
 
2373
- // src/components/DatePicker/index.ts
2374
- var DatePicker_default = DatePicker;
2178
+ // src/components/DataTable/components.tsx
2179
+ var import_react24 = __toESM(require("react"));
2180
+ var import_joy32 = require("@mui/joy");
2181
+ var import_framer_motion22 = require("framer-motion");
2375
2182
 
2376
- // src/components/Textarea/Textarea.tsx
2377
- var import_react20 = __toESM(require("react"));
2378
- var import_joy28 = require("@mui/joy");
2183
+ // src/components/DatePicker/DatePicker.tsx
2184
+ var import_react19 = __toESM(require("react"));
2185
+ var import_react_imask = require("react-imask");
2186
+ var import_CalendarToday = __toESM(require("@mui/icons-material/CalendarToday"));
2187
+ var import_joy27 = require("@mui/joy");
2188
+ var import_base2 = require("@mui/base");
2189
+
2190
+ // src/components/Sheet/Sheet.tsx
2191
+ var import_joy25 = require("@mui/joy");
2192
+ var import_framer_motion17 = require("framer-motion");
2193
+ var MotionSheet = (0, import_framer_motion17.motion)(import_joy25.Sheet);
2194
+ var Sheet = MotionSheet;
2195
+ Sheet.displayName = "Sheet";
2196
+
2197
+ // src/components/Sheet/index.ts
2198
+ var Sheet_default = Sheet;
2199
+
2200
+ // src/components/DialogActions/DialogActions.tsx
2201
+ var import_joy26 = require("@mui/joy");
2379
2202
  var import_framer_motion18 = require("framer-motion");
2380
- var MotionTextarea = (0, import_framer_motion18.motion)(import_joy28.Textarea);
2381
- var Textarea = (props) => {
2382
- const {
2383
- label,
2384
- error,
2385
- helperText,
2386
- color,
2387
- size,
2388
- disabled,
2389
- required,
2390
- minRows = 2,
2391
- maxRows = 4,
2392
- // NOTE: 스타일 관련된 props는 최상위 엘리먼트에 적용한다.
2393
- sx,
2394
- className,
2395
- ...innerProps
2396
- } = props;
2397
- const textarea = /* @__PURE__ */ import_react20.default.createElement(
2398
- MotionTextarea,
2399
- {
2400
- required,
2401
- disabled,
2402
- color: error ? "danger" : color,
2403
- size,
2404
- minRows,
2405
- maxRows,
2406
- ...innerProps
2407
- }
2408
- );
2409
- return /* @__PURE__ */ import_react20.default.createElement(
2410
- FormControl_default,
2411
- {
2412
- required,
2413
- disabled,
2414
- color,
2415
- size,
2416
- error,
2417
- sx,
2418
- className
2419
- },
2420
- label && /* @__PURE__ */ import_react20.default.createElement(FormLabel_default, null, label),
2421
- textarea,
2422
- helperText && /* @__PURE__ */ import_react20.default.createElement(FormHelperText_default, null, helperText)
2423
- );
2424
- };
2425
- Textarea.displayName = "Textarea";
2203
+ var MotionDialogActions = (0, import_framer_motion18.motion)(import_joy26.DialogActions);
2204
+ var StyledDialogActions = (0, import_joy26.styled)(MotionDialogActions)(({ theme }) => ({
2205
+ padding: theme.spacing(2),
2206
+ gap: theme.spacing(2),
2207
+ flexDirection: "row",
2208
+ justifyContent: "flex-end"
2209
+ }));
2210
+ var DialogActions = StyledDialogActions;
2211
+ DialogActions.displayName = "DialogActions";
2426
2212
 
2427
- // src/components/Textarea/index.ts
2428
- var Textarea_default = Textarea;
2213
+ // src/components/DialogActions/index.ts
2214
+ var DialogActions_default = DialogActions;
2429
2215
 
2430
- // src/components/Select/Select.tsx
2431
- var import_react21 = __toESM(require("react"));
2432
- var import_joy29 = require("@mui/joy");
2433
- var import_framer_motion19 = require("framer-motion");
2434
- var MotionOption = (0, import_framer_motion19.motion)(import_joy29.Option);
2435
- var Option = MotionOption;
2436
- Option.displayName = "Option";
2437
- function Select(props) {
2438
- const {
2439
- label,
2440
- helperText,
2441
- error,
2442
- size,
2443
- color,
2444
- disabled,
2445
- required,
2446
- onChange,
2447
- // NOTE: 스타일 관련된 props는 최상위 엘리먼트에 적용한다.
2448
- sx,
2449
- className,
2450
- ...innerProps
2451
- } = props;
2452
- const options = (0, import_react21.useMemo)(
2453
- () => props.options.map((option) => {
2454
- if (option.hasOwnProperty("value") && option.hasOwnProperty("label")) {
2455
- return option;
2456
- }
2457
- return {
2458
- value: option,
2459
- label: option
2460
- };
2461
- }),
2462
- [props.options]
2463
- );
2464
- const handleChange = (event, newValue) => {
2465
- const _event = event || { target: {} };
2466
- const newEvent = {
2467
- ..._event,
2468
- target: {
2469
- ..._event.target,
2470
- // @ts-expect-error target에 name이 있을 수 있다.
2471
- name: _event.target?.name || props.name,
2472
- value: newValue
2473
- }
2474
- };
2475
- onChange?.(newEvent, newValue);
2476
- };
2477
- const select = /* @__PURE__ */ import_react21.default.createElement(
2478
- import_joy29.Select,
2479
- {
2480
- ...innerProps,
2481
- required,
2482
- disabled,
2483
- size,
2484
- color: error ? "danger" : color,
2485
- onChange: handleChange
2486
- },
2487
- options.map((option) => /* @__PURE__ */ import_react21.default.createElement(Option, { key: option.value, value: option.value }, option.label))
2488
- );
2489
- return /* @__PURE__ */ import_react21.default.createElement(
2490
- FormControl_default,
2491
- {
2492
- required,
2493
- disabled,
2494
- size,
2495
- color,
2496
- error,
2497
- sx,
2498
- className
2499
- },
2500
- label && /* @__PURE__ */ import_react21.default.createElement(FormLabel_default, null, label),
2501
- select,
2502
- helperText && /* @__PURE__ */ import_react21.default.createElement(FormHelperText_default, null, helperText)
2503
- );
2504
- }
2505
- Select.displayName = "Select";
2506
-
2507
- // src/components/Select/index.ts
2508
- var Select_default = Select;
2509
-
2510
- // src/components/Tooltip/Tooltip.tsx
2511
- var import_react22 = __toESM(require("react"));
2512
- var import_joy30 = require("@mui/joy");
2513
- var import_framer_motion20 = require("framer-motion");
2514
- var MotionTooltip = (0, import_framer_motion20.motion)(import_joy30.Tooltip);
2515
- var Tooltip = (props) => {
2516
- return /* @__PURE__ */ import_react22.default.createElement(MotionTooltip, { ...props });
2517
- };
2518
- Tooltip.displayName = "Tooltip";
2519
-
2520
- // src/components/Tooltip/index.ts
2521
- var Tooltip_default = Tooltip;
2522
-
2523
- // src/components/DataTable/DataTable.tsx
2524
- var import_framer_motion21 = require("framer-motion");
2525
-
2526
- // src/components/Pagination/Pagination.tsx
2527
- var import_react23 = __toESM(require("react"));
2528
- var import_ChevronLeft2 = __toESM(require("@mui/icons-material/ChevronLeft"));
2529
- var import_ChevronRight2 = __toESM(require("@mui/icons-material/ChevronRight"));
2530
- var import_joy31 = require("@mui/joy");
2531
- var PaginationButton = (0, import_joy31.styled)(Button_default, {
2532
- name: "Pagination",
2533
- slot: "button"
2534
- })(({ theme, active, size }) => ({
2535
- "--Button-size": {
2536
- sm: "32px",
2537
- md: "40px",
2538
- lg: "48px"
2539
- }[size],
2540
- width: "var(--Button-size)",
2541
- height: "var(--Button-size)",
2542
- backgroundColor: active ? theme.vars.palette.primary.softHoverBg : "transparent",
2543
- color: active ? theme.vars.palette.primary.softColor : theme.vars.palette.neutral.plainColor,
2544
- "&:hover": {
2545
- color: active ? theme.vars.palette.primary.softColor : theme.vars.palette.neutral.softColor,
2546
- backgroundColor: active ? theme.vars.palette.primary.softActiveBg : theme.vars.palette.neutral.softHoverBg
2547
- }
2548
- }));
2549
- var PaginationIconButton = (0, import_joy31.styled)(IconButton_default, {
2550
- name: "Pagination",
2551
- slot: "button"
2552
- })(({ theme, size }) => ({
2553
- "--IconButton-size": {
2554
- sm: "32px",
2555
- md: "40px",
2556
- lg: "48px"
2557
- }[size],
2558
- "--Icon-fontSize": "20px",
2559
- width: "var(--IconButton-size)",
2560
- height: "var(--IconButton-size)",
2561
- color: theme.vars.palette.neutral.plainColor,
2562
- "&:hover": {
2563
- color: theme.vars.palette.neutral.softColor,
2564
- backgroundColor: theme.vars.palette.neutral.softHoverBg
2216
+ // src/components/DatePicker/DatePicker.tsx
2217
+ var CalendarButton = (0, import_joy27.styled)(IconButton_default, {
2218
+ name: "DatePicker",
2219
+ slot: "calendarButton"
2220
+ })(({ theme }) => ({
2221
+ "&:focus": {
2222
+ "--Icon-color": "currentColor",
2223
+ outlineOffset: `${theme.getCssVar("focus-thickness")}`,
2224
+ outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar("palette-focusVisible")}`
2565
2225
  }
2566
2226
  }));
2567
- var PaginationRoot = (0, import_joy31.styled)(Stack_default, {
2568
- name: "Pagination",
2569
- slot: "root"
2570
- })({});
2571
- var PaginationContainer = (0, import_joy31.styled)(Stack_default, {
2572
- name: "Pagination",
2573
- slot: "container"
2574
- })(({ theme, size }) => ({
2575
- gap: {
2576
- sm: theme.spacing(1),
2577
- md: theme.spacing(1.5),
2578
- lg: theme.spacing(2)
2579
- }[size]
2227
+ var StyledPopper = (0, import_joy27.styled)(import_base2.Popper, {
2228
+ name: "DatePicker",
2229
+ slot: "popper"
2230
+ })(({ theme }) => ({
2231
+ zIndex: theme.zIndex.tooltip
2580
2232
  }));
2581
- function Pagination(props) {
2582
- const {
2583
- paginationModel: _paginationModel,
2584
- defaultPaginationModel = { page: 1, pageSize: 25 },
2585
- onPageChange,
2586
- rowCount,
2587
- size = "md",
2588
- ...innerProps
2589
- } = props;
2590
- const [paginationModel, setPaginationModel] = useControlledState(
2591
- _paginationModel,
2592
- defaultPaginationModel,
2593
- (0, import_react23.useCallback)(
2594
- (newPage) => {
2595
- onPageChange(newPage.page);
2596
- },
2597
- [onPageChange]
2598
- )
2599
- );
2600
- const handlePageChange = (newPage) => {
2601
- setPaginationModel({ ...paginationModel, page: newPage });
2602
- };
2603
- const firstPage = 1;
2604
- const lastPage = Math.max(firstPage, Math.ceil(rowCount / paginationModel.pageSize));
2605
- const beforePages = [paginationModel.page - 2, paginationModel.page - 1].filter((p) => p > 1);
2606
- const afterPages = [paginationModel.page + 1, paginationModel.page + 2].filter((p) => p <= lastPage - 1);
2607
- const isMoreAfterPages = lastPage > 1 && paginationModel.page < lastPage - 3;
2608
- const isMoreBeforePages = lastPage > 1 && paginationModel.page > 4;
2609
- (0, import_react23.useEffect)(() => {
2610
- if (paginationModel.page > lastPage) {
2611
- setPaginationModel({ ...paginationModel, page: lastPage });
2612
- }
2613
- }, [rowCount, paginationModel, lastPage, setPaginationModel]);
2614
- return /* @__PURE__ */ import_react23.default.createElement(PaginationRoot, { ...innerProps }, /* @__PURE__ */ import_react23.default.createElement(PaginationContainer, { direction: "row", size, alignItems: "center" }, /* @__PURE__ */ import_react23.default.createElement(
2615
- PaginationIconButton,
2616
- {
2617
- size,
2618
- variant: "plain",
2619
- color: "neutral",
2620
- onClick: () => handlePageChange(paginationModel.page - 1),
2621
- disabled: paginationModel.page === firstPage,
2622
- "aria-label": "Previous page"
2623
- },
2624
- /* @__PURE__ */ import_react23.default.createElement(import_ChevronLeft2.default, null)
2625
- ), paginationModel.page !== firstPage && /* @__PURE__ */ import_react23.default.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(firstPage) }, firstPage), isMoreBeforePages && /* @__PURE__ */ import_react23.default.createElement(
2626
- PaginationButton,
2627
- {
2628
- size,
2629
- variant: "plain",
2630
- color: "neutral",
2631
- onClick: () => handlePageChange(paginationModel.page - 3),
2632
- "aria-label": "More previous pages"
2633
- },
2634
- "..."
2635
- ), beforePages.map((p) => /* @__PURE__ */ import_react23.default.createElement(PaginationButton, { key: p, size, variant: "plain", color: "neutral", onClick: () => handlePageChange(p) }, p)), /* @__PURE__ */ import_react23.default.createElement(PaginationButton, { active: "active", size, "aria-current": "page" }, paginationModel.page), afterPages.map((p) => /* @__PURE__ */ import_react23.default.createElement(PaginationButton, { key: p, size, variant: "plain", color: "neutral", onClick: () => handlePageChange(p) }, p)), isMoreAfterPages && /* @__PURE__ */ import_react23.default.createElement(
2636
- PaginationButton,
2637
- {
2638
- size,
2639
- variant: "plain",
2640
- color: "neutral",
2641
- "aria-label": "More next pages",
2642
- onClick: () => handlePageChange(paginationModel.page + 3)
2643
- },
2644
- "..."
2645
- ), paginationModel.page !== lastPage && /* @__PURE__ */ import_react23.default.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(lastPage) }, lastPage), /* @__PURE__ */ import_react23.default.createElement(
2646
- PaginationIconButton,
2647
- {
2648
- size,
2649
- variant: "plain",
2650
- color: "neutral",
2651
- onClick: () => handlePageChange(paginationModel.page + 1),
2652
- disabled: paginationModel.page === lastPage,
2653
- "aria-label": "Next page"
2654
- },
2655
- /* @__PURE__ */ import_react23.default.createElement(import_ChevronRight2.default, null)
2656
- )));
2657
- }
2658
- Pagination.displayName = "Pagination";
2659
-
2660
- // src/components/Pagination/index.ts
2661
- var Pagination_default = Pagination;
2662
-
2663
- // src/components/InfoSign/InfoSign.tsx
2664
- var import_react24 = __toESM(require("react"));
2665
- var import_joy32 = require("@mui/joy");
2666
- var import_Info = __toESM(require("@mui/icons-material/Info"));
2667
- var InfoIcon = (0, import_joy32.styled)(import_Info.default, {
2668
- name: "InfoSign",
2669
- slot: "InfoSign"
2233
+ var CalendarSheet = (0, import_joy27.styled)(Sheet_default, {
2234
+ name: "DatePicker",
2235
+ slot: "sheet",
2236
+ overridesResolver: (props, styles) => styles.root
2670
2237
  })(({ theme }) => ({
2671
- color: theme.palette.text.icon,
2672
- width: "14px",
2673
- height: "14px"
2238
+ width: "264px",
2239
+ boxShadow: theme.shadow.md,
2240
+ borderRadius: theme.radius.md
2674
2241
  }));
2675
- function InfoSign(props) {
2676
- const { message, placement } = props;
2677
- return /* @__PURE__ */ import_react24.default.createElement(
2678
- Tooltip_default,
2679
- {
2680
- arrow: true,
2681
- placement,
2682
- sx: {
2683
- [`&.${import_joy32.tooltipClasses.root}`]: {
2684
- maxWidth: "320px"
2685
- }
2686
- },
2687
- title: message?.split("\n").map((line, i) => /* @__PURE__ */ import_react24.default.createElement("div", { key: `info-sign-${i}` }, line))
2688
- },
2689
- /* @__PURE__ */ import_react24.default.createElement(InfoIcon, null)
2690
- );
2691
- }
2692
-
2693
- // src/components/InfoSign/index.ts
2694
- var InfoSign_default = InfoSign;
2695
-
2696
- // src/components/DataTable/DataTable.tsx
2697
- function extractFieldsFromGroupingModel(items) {
2698
- const fields = /* @__PURE__ */ new Set();
2699
- for (const item of items) {
2700
- if ("groupId" in item) {
2701
- const children = Array.isArray(item.children) ? item.children : [item.children];
2702
- const childFields = extractFieldsFromGroupingModel(children);
2703
- childFields.forEach((field) => fields.add(field));
2704
- } else {
2705
- fields.add(item.field);
2242
+ var DatePickerRoot = (0, import_joy27.styled)("div", {
2243
+ name: "DatePicker",
2244
+ slot: "root",
2245
+ overridesResolver: (props, styles) => styles.root
2246
+ })({
2247
+ width: "100%"
2248
+ });
2249
+ var validValueFormat = (value, format) => {
2250
+ try {
2251
+ const parsedValue = parseDate(value, format);
2252
+ if (parsedValue.toString() === "Invalid Date") {
2253
+ return false;
2706
2254
  }
2707
- }
2708
- return fields;
2709
- }
2710
- function reorderColumnsByGroupingModel(columns, columnGroupingModel) {
2711
- const fieldsInGroupingModel = extractFieldsFromGroupingModel(columnGroupingModel);
2712
- const orderedFields = [];
2713
- function collectFieldsInOrder(items) {
2714
- for (const item of items) {
2715
- if ("groupId" in item) {
2716
- const children = Array.isArray(item.children) ? item.children : [item.children];
2717
- collectFieldsInOrder(children);
2718
- } else {
2719
- if (!orderedFields.includes(item.field)) {
2720
- orderedFields.push(item.field);
2721
- }
2722
- }
2255
+ if (value !== formatValueString(parsedValue, format)) {
2256
+ return false;
2723
2257
  }
2258
+ const regex = new RegExp(`^${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")}$`);
2259
+ return regex.test(value);
2260
+ } catch (e) {
2261
+ return false;
2724
2262
  }
2725
- collectFieldsInOrder(columnGroupingModel);
2726
- const columnMap = new Map(columns.map((col) => [col.field, col]));
2727
- const reorderedColumns = [];
2728
- for (const field of orderedFields) {
2729
- const column = columnMap.get(field);
2730
- if (column) {
2731
- reorderedColumns.push(column);
2732
- }
2733
- }
2734
- for (const column of columns) {
2735
- if (!fieldsInGroupingModel.has(column.field)) {
2736
- reorderedColumns.push(column);
2737
- }
2263
+ };
2264
+ var formatValueString = (date, format) => {
2265
+ let day = `${date.getDate()}`;
2266
+ let month = `${date.getMonth() + 1}`;
2267
+ const year = date.getFullYear();
2268
+ if (Number(day) < 10) day = "0" + day;
2269
+ if (Number(month) < 10) month = "0" + month;
2270
+ return format.replace(/YYYY/g, year.toString()).replace(/MM/g, month).replace(/DD/g, day);
2271
+ };
2272
+ function parseDate(dateString, format) {
2273
+ const formatParts = format.split(/[-./\s]/);
2274
+ const dateParts = dateString.split(/[-./\s]/);
2275
+ if (formatParts.length !== dateParts.length) {
2276
+ throw new Error("Invalid date string or format");
2738
2277
  }
2739
- return reorderedColumns;
2740
- }
2741
- function flattenColumnGroups(items, groupPath = [], columnIndex = { current: 0 }) {
2742
- const result = [];
2743
- for (const item of items) {
2744
- if ("groupId" in item) {
2745
- const newPath = [...groupPath, item.groupId];
2746
- const children = Array.isArray(item.children) ? item.children : [item.children];
2747
- result.push(...flattenColumnGroups(children, newPath, columnIndex));
2748
- } else {
2749
- result.push({
2750
- ...item,
2751
- groupPath,
2752
- columnIndex: columnIndex.current++
2753
- });
2278
+ let day, month, year;
2279
+ for (let i = 0; i < formatParts.length; i++) {
2280
+ const value = parseInt(dateParts[i], 10);
2281
+ switch (formatParts[i]) {
2282
+ case "DD":
2283
+ day = value;
2284
+ break;
2285
+ case "MM":
2286
+ month = value - 1;
2287
+ break;
2288
+ case "YYYY":
2289
+ year = value;
2290
+ break;
2754
2291
  }
2755
2292
  }
2293
+ const result = new Date(year, month, day);
2756
2294
  return result;
2757
2295
  }
2758
- function calculateColumnGroups(columnGroupingModel, columns) {
2759
- const fieldsInGroupingModel = extractFieldsFromGroupingModel(columnGroupingModel);
2760
- const flattenedColumns = flattenColumnGroups(columnGroupingModel);
2761
- const columnIndexMap = new Map(flattenedColumns.map((col) => [col.field, col.columnIndex]));
2762
- const processedGroups = /* @__PURE__ */ new Map();
2763
- const groupsByLevel = [];
2764
- let maxLevel = 0;
2765
- function processGroup(items, level, parentGroupId) {
2766
- let minIndex = Infinity;
2767
- let maxIndex = -Infinity;
2768
- for (const item of items) {
2769
- if ("groupId" in item) {
2770
- const groupKey = parentGroupId ? `${parentGroupId}.${item.groupId}` : item.groupId;
2771
- if (!processedGroups.has(groupKey)) {
2772
- const children = Array.isArray(item.children) ? item.children : [item.children];
2773
- const { startIndex, colspan } = processGroup(children, level + 1, groupKey);
2774
- const group = {
2775
- groupId: item.groupId,
2776
- headerName: item.headerName,
2777
- colspan,
2778
- level,
2779
- startIndex
2780
- };
2781
- processedGroups.set(groupKey, group);
2782
- if (!groupsByLevel[level]) {
2783
- groupsByLevel[level] = [];
2784
- }
2785
- groupsByLevel[level].push(group);
2786
- maxLevel = Math.max(maxLevel, level);
2787
- minIndex = Math.min(minIndex, startIndex);
2788
- maxIndex = Math.max(maxIndex, startIndex + colspan - 1);
2789
- }
2790
- } else {
2791
- const columnIndex = columnIndexMap.get(item.field);
2792
- if (columnIndex !== void 0) {
2793
- minIndex = Math.min(minIndex, columnIndex);
2794
- maxIndex = Math.max(maxIndex, columnIndex);
2296
+ var formatToPattern = (format) => {
2297
+ return format.replace(/YYYY/g, "Y").replace(/MM/g, "M").replace(/DD/g, "D").replace(/[^YMD\s]/g, (match) => `${match}\``);
2298
+ };
2299
+ var TextMaskAdapter3 = import_react19.default.forwardRef(function TextMaskAdapter4(props, ref) {
2300
+ const { onChange, format, ...other } = props;
2301
+ return /* @__PURE__ */ import_react19.default.createElement(
2302
+ import_react_imask.IMaskInput,
2303
+ {
2304
+ ...other,
2305
+ inputRef: ref,
2306
+ onAccept: (value) => onChange({ target: { name: props.name, value } }),
2307
+ mask: Date,
2308
+ pattern: formatToPattern(format),
2309
+ blocks: {
2310
+ D: {
2311
+ mask: import_react_imask.IMask.MaskedRange,
2312
+ from: 1,
2313
+ to: 31,
2314
+ maxLength: 2
2315
+ },
2316
+ M: {
2317
+ mask: import_react_imask.IMask.MaskedRange,
2318
+ from: 1,
2319
+ to: 12,
2320
+ maxLength: 2
2321
+ },
2322
+ Y: {
2323
+ mask: import_react_imask.IMask.MaskedRange,
2324
+ from: 1900,
2325
+ to: 9999,
2326
+ maxLength: 4
2795
2327
  }
2796
- }
2328
+ },
2329
+ format: (date) => formatValueString(date, format),
2330
+ parse: (str) => parseDate(str, format),
2331
+ autofix: "pad",
2332
+ overwrite: true
2797
2333
  }
2798
- return {
2799
- startIndex: minIndex === Infinity ? 0 : minIndex,
2800
- colspan: maxIndex === -Infinity ? 0 : maxIndex - minIndex + 1
2801
- };
2802
- }
2803
- processGroup(columnGroupingModel, 0);
2804
- groupsByLevel.forEach((level) => {
2805
- level.sort((a, b) => a.startIndex - b.startIndex);
2806
- });
2807
- return { groups: groupsByLevel, maxLevel, fieldsInGroupingModel };
2808
- }
2809
- function getTextAlign(props) {
2810
- return !props.editMode && ["number", "date", "currency"].includes(props.type || "") ? "end" : "start";
2811
- }
2812
- var DefaultLoadingOverlay = () => /* @__PURE__ */ import_react25.default.createElement(import_joy33.LinearProgress, { value: 8, variant: "plain" });
2813
- var EllipsisDiv = (0, import_joy33.styled)("div", {
2814
- name: "DataTable",
2815
- slot: "textEllipsis"
2816
- })({
2817
- overflow: "hidden",
2818
- textOverflow: "ellipsis",
2819
- whiteSpace: "nowrap"
2334
+ );
2820
2335
  });
2821
- var TextEllipsis = ({ children }) => {
2822
- const textRef = (0, import_react25.useRef)(null);
2823
- const [showTooltip, setShowTooltip] = (0, import_react25.useState)(false);
2824
- (0, import_react25.useLayoutEffect)(() => {
2825
- const element = textRef.current;
2826
- if (element) {
2827
- const isTextTruncated = element.scrollWidth > element.clientWidth;
2828
- setShowTooltip(isTextTruncated);
2336
+ var DatePicker = (0, import_react19.forwardRef)((inProps, ref) => {
2337
+ const props = (0, import_joy27.useThemeProps)({ props: inProps, name: "DatePicker" });
2338
+ const {
2339
+ onChange,
2340
+ disabled,
2341
+ label,
2342
+ error,
2343
+ helperText,
2344
+ minDate,
2345
+ maxDate,
2346
+ disableFuture,
2347
+ disablePast,
2348
+ required,
2349
+ // NOTE: 스타일 관련된 props는 최상위 엘리먼트에 적용한다.
2350
+ sx,
2351
+ className,
2352
+ format = "YYYY/MM/DD",
2353
+ displayFormat = "YYYY/MM/DD",
2354
+ size,
2355
+ inputReadOnly,
2356
+ hideClearButton,
2357
+ readOnly,
2358
+ shouldDisableDate,
2359
+ ...innerProps
2360
+ } = props;
2361
+ const innerRef = (0, import_react19.useRef)(null);
2362
+ const buttonRef = (0, import_react19.useRef)(null);
2363
+ const [value, setValue] = useControlledState(
2364
+ props.value,
2365
+ props.defaultValue || "",
2366
+ (0, import_react19.useCallback)((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
2367
+ );
2368
+ const [displayValue, setDisplayValue] = (0, import_react19.useState)(
2369
+ () => value ? formatValueString(parseDate(value, format), displayFormat) : ""
2370
+ );
2371
+ const [anchorEl, setAnchorEl] = (0, import_react19.useState)(null);
2372
+ const open = Boolean(anchorEl);
2373
+ (0, import_react19.useEffect)(() => {
2374
+ if (!anchorEl) {
2375
+ innerRef.current?.blur();
2829
2376
  }
2830
- }, [children]);
2831
- const content = /* @__PURE__ */ import_react25.default.createElement(EllipsisDiv, { ref: textRef }, children);
2832
- if (showTooltip) {
2833
- return /* @__PURE__ */ import_react25.default.createElement(Tooltip_default, { title: children, placement: "top", onClick: (e) => e.stopPropagation() }, content);
2834
- }
2835
- return content;
2836
- };
2837
- var CellTextEllipsis = ({ children }) => {
2838
- const textRef = (0, import_react25.useRef)(null);
2839
- const [showTooltip, setShowTooltip] = (0, import_react25.useState)(false);
2840
- (0, import_react25.useLayoutEffect)(() => {
2841
- const element = textRef.current;
2842
- if (element) {
2843
- const isTextTruncated = element.scrollWidth > element.clientWidth;
2844
- setShowTooltip(isTextTruncated);
2377
+ }, [anchorEl, innerRef]);
2378
+ (0, import_react19.useEffect)(() => {
2379
+ if (value === "") {
2380
+ setDisplayValue("");
2381
+ return;
2845
2382
  }
2846
- }, [children]);
2847
- const content = /* @__PURE__ */ import_react25.default.createElement(EllipsisDiv, { ref: textRef }, children);
2848
- if (showTooltip) {
2849
- return /* @__PURE__ */ import_react25.default.createElement(
2850
- Tooltip_default,
2851
- {
2852
- title: children,
2853
- placement: "top",
2854
- enterDelay: 800,
2855
- enterNextDelay: 200,
2856
- onClick: (e) => e.stopPropagation()
2857
- },
2858
- content
2859
- );
2860
- }
2861
- return content;
2862
- };
2863
- var OverlayWrapper = (0, import_joy33.styled)("tr", {
2864
- name: "DataTable",
2865
- slot: "overlayWrapper"
2866
- })({
2867
- position: "sticky",
2868
- top: `calc(var(--unstable_TableCell-height, 32px))`,
2869
- left: 0,
2870
- right: 0,
2871
- zIndex: 1,
2872
- "& > td": {
2873
- height: 0,
2874
- padding: 0,
2875
- border: "none !important"
2876
- }
2877
- });
2878
- var numberFormatter = (value) => "Intl" in window ? new Intl.NumberFormat().format(value) : value;
2879
- var Resizer = (ref, targetRef = ref) => /* @__PURE__ */ import_react25.default.createElement(
2880
- Box_default,
2881
- {
2882
- sx: {
2883
- position: "absolute",
2884
- top: 0,
2885
- right: 0,
2886
- bottom: 0,
2887
- width: "4px",
2888
- cursor: "col-resize"
2889
- },
2890
- onClick: (e) => e.stopPropagation(),
2891
- onMouseDown: (e) => {
2892
- const initialX = e.clientX;
2893
- const initialWidth = ref.current?.getBoundingClientRect().width;
2894
- const onMouseMove = (e2) => {
2895
- if (initialWidth && initialX) {
2896
- ref.current.style.width = `${initialWidth + (e2.clientX - initialX)}px`;
2897
- targetRef.current.style.width = `${initialWidth + (e2.clientX - initialX)}px`;
2383
+ const formattedValue = formatValueString(parseDate(value, format), displayFormat);
2384
+ if (validValueFormat(formattedValue, displayFormat) && formattedValue !== displayValue) {
2385
+ setDisplayValue(formattedValue);
2386
+ }
2387
+ }, [displayFormat, displayValue, format, value]);
2388
+ (0, import_react19.useImperativeHandle)(ref, () => innerRef.current, [innerRef]);
2389
+ const handleChange = (0, import_react19.useCallback)(
2390
+ (event) => {
2391
+ const value2 = event.target.value;
2392
+ setDisplayValue(value2 ? formatValueString(parseDate(value2, format), displayFormat) : value2);
2393
+ setValue(value2);
2394
+ },
2395
+ [displayFormat, format, setValue]
2396
+ );
2397
+ const handleDisplayInputChange = (0, import_react19.useCallback)(
2398
+ (event) => {
2399
+ if (event.target.value === "") {
2400
+ handleChange({
2401
+ target: {
2402
+ name: props.name,
2403
+ value: ""
2404
+ }
2405
+ });
2406
+ return;
2407
+ }
2408
+ const isValidDisplayValue = validValueFormat(event.target.value, displayFormat);
2409
+ if (isValidDisplayValue) {
2410
+ const parsedDate = parseDate(event.target.value, displayFormat);
2411
+ const formattedValue = formatValueString(parsedDate, format);
2412
+ handleChange({
2413
+ target: {
2414
+ name: props.name,
2415
+ value: formattedValue
2416
+ }
2417
+ });
2418
+ }
2419
+ },
2420
+ [displayFormat, format, handleChange, props.name]
2421
+ );
2422
+ const handleCalendarToggle = (0, import_react19.useCallback)(
2423
+ (event) => {
2424
+ setAnchorEl(anchorEl ? null : event.currentTarget);
2425
+ setTimeout(() => {
2426
+ innerRef.current?.focus();
2427
+ }, 0);
2428
+ },
2429
+ [anchorEl, setAnchorEl, innerRef]
2430
+ );
2431
+ const handleInputMouseDown = (0, import_react19.useCallback)(
2432
+ (event) => {
2433
+ if (inputReadOnly) {
2434
+ event.preventDefault();
2435
+ buttonRef.current?.focus();
2436
+ }
2437
+ },
2438
+ [inputReadOnly, buttonRef]
2439
+ );
2440
+ return /* @__PURE__ */ import_react19.default.createElement(DatePickerRoot, null, /* @__PURE__ */ import_react19.default.createElement(import_base2.FocusTrap, { open: true }, /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, /* @__PURE__ */ import_react19.default.createElement(
2441
+ Input_default,
2442
+ {
2443
+ ...innerProps,
2444
+ color: error ? "danger" : innerProps.color,
2445
+ ref: innerRef,
2446
+ size,
2447
+ value: displayValue,
2448
+ onChange: handleDisplayInputChange,
2449
+ placeholder: displayFormat,
2450
+ disabled,
2451
+ required,
2452
+ error,
2453
+ slotProps: {
2454
+ input: {
2455
+ component: TextMaskAdapter3,
2456
+ ref: innerRef,
2457
+ format: displayFormat,
2458
+ sx: {
2459
+ "&:hover": {
2460
+ cursor: inputReadOnly || readOnly ? "default" : "text"
2461
+ }
2462
+ },
2463
+ onMouseDown: handleInputMouseDown
2898
2464
  }
2899
- };
2900
- const onMouseUp = () => {
2901
- document.removeEventListener("mousemove", onMouseMove);
2902
- document.removeEventListener("mouseup", onMouseUp);
2903
- };
2904
- document.addEventListener("mousemove", onMouseMove);
2905
- document.addEventListener("mouseup", onMouseUp);
2465
+ },
2466
+ className,
2467
+ sx,
2468
+ endDecorator: /* @__PURE__ */ import_react19.default.createElement(
2469
+ CalendarButton,
2470
+ {
2471
+ ref: buttonRef,
2472
+ variant: "plain",
2473
+ onClick: readOnly ? void 0 : handleCalendarToggle,
2474
+ "aria-label": "Toggle Calendar",
2475
+ "aria-controls": "date-picker-popper",
2476
+ "aria-haspopup": "dialog",
2477
+ "aria-expanded": open,
2478
+ disabled
2479
+ },
2480
+ /* @__PURE__ */ import_react19.default.createElement(import_CalendarToday.default, null)
2481
+ ),
2482
+ label,
2483
+ helperText,
2484
+ readOnly: readOnly || inputReadOnly
2906
2485
  }
2907
- }
2908
- );
2909
- var VirtualizedTableBody = (0, import_joy33.styled)("tbody", {
2910
- name: "DataTable",
2911
- slot: "tableBody"
2912
- })({
2913
- // HACK: for virtualization: tbody의 height를 렌더링 된 tr의 총 높이 보다 높은 값으로 지정하고도 tr의 size를 유지하기 위한 꼼수
2914
- "&::after": {
2915
- content: "''",
2916
- display: "block",
2917
- height: "0.01em"
2918
- },
2919
- // NOTE: 테이블 안에 버튼을 넣을 때 버튼의 높이가 테이블의 높이를 넘어가지 않도록 설정
2920
- [`& .${import_joy33.buttonClasses.root}`]: {
2921
- "--Button-minHeight": "26px",
2922
- "--Button-paddingBlock": "0.25rem",
2923
- lineHeight: 1,
2924
- marginTop: "-2px",
2925
- marginBottom: "-2px"
2926
- },
2927
- [`& .${import_joy33.iconButtonClasses.root}`]: {
2928
- "--IconButton-size": "26px",
2929
- verticalAlign: "middle",
2930
- marginTop: "-2px",
2931
- marginBottom: "-2px"
2932
- }
2486
+ ), open && /* @__PURE__ */ import_react19.default.createElement(import_base2.ClickAwayListener, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ import_react19.default.createElement(
2487
+ StyledPopper,
2488
+ {
2489
+ id: "date-picker-popper",
2490
+ open: true,
2491
+ anchorEl,
2492
+ placement: "bottom-end",
2493
+ onMouseDown: (e) => e.preventDefault(),
2494
+ modifiers: [
2495
+ {
2496
+ name: "offset",
2497
+ options: {
2498
+ offset: [4, 4]
2499
+ }
2500
+ }
2501
+ ],
2502
+ "aria-label": "Calendar Tooltip",
2503
+ "aria-expanded": open
2504
+ },
2505
+ /* @__PURE__ */ import_react19.default.createElement(CalendarSheet, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react19.default.createElement(
2506
+ Calendar_default,
2507
+ {
2508
+ value: value && !Number.isNaN(parseDate(value, format).getTime()) ? [parseDate(value, format), void 0] : void 0,
2509
+ onChange: ([date]) => {
2510
+ handleChange({
2511
+ target: {
2512
+ name: props.name,
2513
+ value: formatValueString(date, format)
2514
+ }
2515
+ });
2516
+ setAnchorEl(null);
2517
+ },
2518
+ minDate: minDate ? new Date(minDate) : void 0,
2519
+ maxDate: maxDate ? new Date(maxDate) : void 0,
2520
+ disableFuture,
2521
+ disablePast,
2522
+ shouldDisableDate: shouldDisableDate ? (date) => shouldDisableDate(formatValueString(date, format)) : void 0
2523
+ }
2524
+ ), !hideClearButton && /* @__PURE__ */ import_react19.default.createElement(
2525
+ DialogActions_default,
2526
+ {
2527
+ sx: {
2528
+ p: 1
2529
+ }
2530
+ },
2531
+ /* @__PURE__ */ import_react19.default.createElement(
2532
+ Button_default,
2533
+ {
2534
+ size,
2535
+ variant: "plain",
2536
+ color: "neutral",
2537
+ onClick: () => {
2538
+ handleChange({
2539
+ target: {
2540
+ name: props.name,
2541
+ value: ""
2542
+ }
2543
+ });
2544
+ setAnchorEl(null);
2545
+ }
2546
+ },
2547
+ "Clear"
2548
+ )
2549
+ ))
2550
+ )))));
2933
2551
  });
2934
- var StyledTableRow = (0, import_joy33.styled)("tr", {
2935
- name: "DataTable",
2936
- slot: "tableRow",
2937
- shouldForwardProp: (prop) => prop !== "striped"
2938
- })(({ striped }) => ({
2939
- ...striped && {
2940
- backgroundColor: "var(--TableRow-stripeBackground, var(--ceed-palette-background-level2))",
2941
- color: "var(--ceed-palette-text-primary)",
2942
- "& td": {
2943
- backgroundColor: "background.surface"
2944
- }
2945
- },
2946
- "&:hover": {
2947
- backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))",
2948
- "& td": {
2949
- backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))"
2552
+
2553
+ // src/components/DatePicker/index.ts
2554
+ var DatePicker_default = DatePicker;
2555
+
2556
+ // src/components/Textarea/Textarea.tsx
2557
+ var import_react20 = __toESM(require("react"));
2558
+ var import_joy28 = require("@mui/joy");
2559
+ var import_framer_motion19 = require("framer-motion");
2560
+ var MotionTextarea = (0, import_framer_motion19.motion)(import_joy28.Textarea);
2561
+ var Textarea = (props) => {
2562
+ const {
2563
+ label,
2564
+ error,
2565
+ helperText,
2566
+ color,
2567
+ size,
2568
+ disabled,
2569
+ required,
2570
+ minRows = 2,
2571
+ maxRows = 4,
2572
+ // NOTE: 스타일 관련된 props는 최상위 엘리먼트에 적용한다.
2573
+ sx,
2574
+ className,
2575
+ ...innerProps
2576
+ } = props;
2577
+ const textarea = /* @__PURE__ */ import_react20.default.createElement(
2578
+ MotionTextarea,
2579
+ {
2580
+ required,
2581
+ disabled,
2582
+ color: error ? "danger" : color,
2583
+ size,
2584
+ minRows,
2585
+ maxRows,
2586
+ ...innerProps
2950
2587
  }
2951
- }
2952
- }));
2953
- var VirtualizedTableRow = (0, import_react25.memo)(StyledTableRow, (prevProps, nextProps) => {
2954
- return prevProps.striped === nextProps.striped && prevProps.style?.height === nextProps.style?.height && prevProps.style?.transform === nextProps.style?.transform && // @ts-ignore
2955
- prevProps["data-row-id"] === nextProps["data-row-id"] && // @ts-ignore
2956
- prevProps["data-index"] === nextProps["data-index"] && prevProps.tabIndex === nextProps.tabIndex && prevProps["aria-checked"] === nextProps["aria-checked"] && // Include children check to handle isCellEditable changes
2957
- prevProps.children === nextProps.children;
2958
- });
2959
- var Asterisk = (0, import_joy33.styled)("span", {
2960
- name: "DataTable",
2961
- slot: "headCellAsterisk"
2588
+ );
2589
+ return /* @__PURE__ */ import_react20.default.createElement(
2590
+ FormControl_default,
2591
+ {
2592
+ required,
2593
+ disabled,
2594
+ color,
2595
+ size,
2596
+ error,
2597
+ sx,
2598
+ className
2599
+ },
2600
+ label && /* @__PURE__ */ import_react20.default.createElement(FormLabel_default, null, label),
2601
+ textarea,
2602
+ helperText && /* @__PURE__ */ import_react20.default.createElement(FormHelperText_default, null, helperText)
2603
+ );
2604
+ };
2605
+ Textarea.displayName = "Textarea";
2606
+
2607
+ // src/components/Textarea/index.ts
2608
+ var Textarea_default = Textarea;
2609
+
2610
+ // src/components/Select/Select.tsx
2611
+ var import_react21 = __toESM(require("react"));
2612
+ var import_joy29 = require("@mui/joy");
2613
+ var import_framer_motion20 = require("framer-motion");
2614
+ var MotionOption = (0, import_framer_motion20.motion)(import_joy29.Option);
2615
+ var Option = MotionOption;
2616
+ Option.displayName = "Option";
2617
+ function Select(props) {
2618
+ const {
2619
+ label,
2620
+ helperText,
2621
+ error,
2622
+ size,
2623
+ color,
2624
+ disabled,
2625
+ required,
2626
+ onChange,
2627
+ // NOTE: 스타일 관련된 props는 최상위 엘리먼트에 적용한다.
2628
+ sx,
2629
+ className,
2630
+ ...innerProps
2631
+ } = props;
2632
+ const options = (0, import_react21.useMemo)(
2633
+ () => props.options.map((option) => {
2634
+ if (option.hasOwnProperty("value") && option.hasOwnProperty("label")) {
2635
+ return option;
2636
+ }
2637
+ return {
2638
+ value: option,
2639
+ label: option
2640
+ };
2641
+ }),
2642
+ [props.options]
2643
+ );
2644
+ const handleChange = (event, newValue) => {
2645
+ const _event = event || { target: {} };
2646
+ const newEvent = {
2647
+ ..._event,
2648
+ target: {
2649
+ ..._event.target,
2650
+ // @ts-expect-error target에 name이 있을 수 있다.
2651
+ name: _event.target?.name || props.name,
2652
+ value: newValue
2653
+ }
2654
+ };
2655
+ onChange?.(newEvent, newValue);
2656
+ };
2657
+ const select = /* @__PURE__ */ import_react21.default.createElement(
2658
+ import_joy29.Select,
2659
+ {
2660
+ ...innerProps,
2661
+ required,
2662
+ disabled,
2663
+ size,
2664
+ color: error ? "danger" : color,
2665
+ onChange: handleChange
2666
+ },
2667
+ options.map((option) => /* @__PURE__ */ import_react21.default.createElement(Option, { key: option.value, value: option.value }, option.label))
2668
+ );
2669
+ return /* @__PURE__ */ import_react21.default.createElement(
2670
+ FormControl_default,
2671
+ {
2672
+ required,
2673
+ disabled,
2674
+ size,
2675
+ color,
2676
+ error,
2677
+ sx,
2678
+ className
2679
+ },
2680
+ label && /* @__PURE__ */ import_react21.default.createElement(FormLabel_default, null, label),
2681
+ select,
2682
+ helperText && /* @__PURE__ */ import_react21.default.createElement(FormHelperText_default, null, helperText)
2683
+ );
2684
+ }
2685
+ Select.displayName = "Select";
2686
+
2687
+ // src/components/Select/index.ts
2688
+ var Select_default = Select;
2689
+
2690
+ // src/components/DataTable/components.tsx
2691
+ var import_joy33 = require("@mui/joy");
2692
+
2693
+ // src/components/Tooltip/Tooltip.tsx
2694
+ var import_react22 = __toESM(require("react"));
2695
+ var import_joy30 = require("@mui/joy");
2696
+ var import_framer_motion21 = require("framer-motion");
2697
+ var MotionTooltip = (0, import_framer_motion21.motion)(import_joy30.Tooltip);
2698
+ var Tooltip = (props) => {
2699
+ return /* @__PURE__ */ import_react22.default.createElement(MotionTooltip, { ...props });
2700
+ };
2701
+ Tooltip.displayName = "Tooltip";
2702
+
2703
+ // src/components/Tooltip/index.ts
2704
+ var Tooltip_default = Tooltip;
2705
+
2706
+ // src/components/InfoSign/InfoSign.tsx
2707
+ var import_react23 = __toESM(require("react"));
2708
+ var import_joy31 = require("@mui/joy");
2709
+ var import_Info = __toESM(require("@mui/icons-material/Info"));
2710
+ var InfoIcon = (0, import_joy31.styled)(import_Info.default, {
2711
+ name: "InfoSign",
2712
+ slot: "InfoSign"
2962
2713
  })(({ theme }) => ({
2963
- color: "var(--ceed-palette-danger-500)",
2964
- marginLeft: theme.spacing(0.5)
2965
- }));
2966
- var StyledTh = (0, import_joy33.styled)(import_framer_motion21.motion.th)(({ theme }) => ({
2967
- boxShadow: "1px 0 var(--TableCell-borderColor)"
2968
- // border 대신 box-shadow를 사용하여 stickyHeader와 함께 사용할 때 border가 겹치는 문제를 해결
2714
+ color: theme.palette.text.icon,
2715
+ width: "14px",
2716
+ height: "14px"
2969
2717
  }));
2970
- var StyledTd = (0, import_joy33.styled)("td")(({ theme }) => ({
2971
- transition: `box-shadow 0.3s`,
2972
- "&:not(.is-last-left):not(.is-last-right)": {
2973
- boxShadow: "1px 0 var(--TableCell-borderColor)"
2974
- },
2975
- ".ScrollableRight &": {
2976
- "&.is-last-left": {
2977
- boxShadow: `1px 0 var(--TableCell-borderColor), ${theme.shadow.md}`
2718
+ function InfoSign(props) {
2719
+ const { message, placement } = props;
2720
+ return /* @__PURE__ */ import_react23.default.createElement(
2721
+ Tooltip_default,
2722
+ {
2723
+ arrow: true,
2724
+ placement,
2725
+ sx: {
2726
+ [`&.${import_joy31.tooltipClasses.root}`]: {
2727
+ maxWidth: "320px"
2728
+ }
2729
+ },
2730
+ title: message?.split("\n").map((line, i) => /* @__PURE__ */ import_react23.default.createElement("div", { key: `info-sign-${i}` }, line))
2731
+ },
2732
+ /* @__PURE__ */ import_react23.default.createElement(InfoIcon, null)
2733
+ );
2734
+ }
2735
+
2736
+ // src/components/InfoSign/index.ts
2737
+ var InfoSign_default = InfoSign;
2738
+
2739
+ // src/components/DataTable/components.tsx
2740
+ var TextEllipsis = ({ children }) => {
2741
+ const textRef = (0, import_react24.useRef)(null);
2742
+ const [showTooltip, setShowTooltip] = (0, import_react24.useState)(false);
2743
+ (0, import_react24.useLayoutEffect)(() => {
2744
+ const element = textRef.current;
2745
+ if (element) {
2746
+ const isTextTruncated = element.scrollWidth > element.clientWidth;
2747
+ setShowTooltip(isTextTruncated);
2978
2748
  }
2979
- },
2980
- ".ScrollableLeft &": {
2981
- "&.is-last-right": {
2982
- boxShadow: `1px 0 var(--TableCell-borderColor), ${theme.shadow.md}`
2749
+ }, [children]);
2750
+ const content = /* @__PURE__ */ import_react24.default.createElement(EllipsisDiv, { ref: textRef }, children);
2751
+ if (showTooltip) {
2752
+ return /* @__PURE__ */ import_react24.default.createElement(Tooltip_default, { title: children, placement: "top", onClick: (e) => e.stopPropagation() }, content);
2753
+ }
2754
+ return content;
2755
+ };
2756
+ var CellTextEllipsis = ({ children }) => {
2757
+ const textRef = (0, import_react24.useRef)(null);
2758
+ const [showTooltip, setShowTooltip] = (0, import_react24.useState)(false);
2759
+ (0, import_react24.useLayoutEffect)(() => {
2760
+ const element = textRef.current;
2761
+ if (element) {
2762
+ const isTextTruncated = element.scrollWidth > element.clientWidth;
2763
+ setShowTooltip(isTextTruncated);
2983
2764
  }
2765
+ }, [children]);
2766
+ const content = /* @__PURE__ */ import_react24.default.createElement(EllipsisDiv, { ref: textRef }, children);
2767
+ if (showTooltip) {
2768
+ return /* @__PURE__ */ import_react24.default.createElement(
2769
+ Tooltip_default,
2770
+ {
2771
+ title: children,
2772
+ placement: "top",
2773
+ enterDelay: 800,
2774
+ enterNextDelay: 200,
2775
+ onClick: (e) => e.stopPropagation()
2776
+ },
2777
+ content
2778
+ );
2984
2779
  }
2985
- }));
2986
- var MotionSortIcon = (0, import_framer_motion21.motion)(import_ArrowUpwardRounded.default);
2780
+ return content;
2781
+ };
2987
2782
  var HeadCell = (props) => {
2988
2783
  const {
2989
2784
  width,
@@ -3006,19 +2801,20 @@ var HeadCell = (props) => {
3006
2801
  pinnedStartPosition,
3007
2802
  pinnedEndPosition,
3008
2803
  headerRef,
3009
- tableColRef
2804
+ tableColRef,
2805
+ headerClassName
3010
2806
  } = props;
3011
- const theme = (0, import_joy33.useTheme)();
2807
+ const theme = (0, import_joy32.useTheme)();
3012
2808
  const ref = headerRef;
3013
2809
  const colRef = tableColRef;
3014
- const [isHovered, setIsHovered] = (0, import_react25.useState)(false);
2810
+ const [isHovered, setIsHovered] = (0, import_react24.useState)(false);
3015
2811
  const sortable = type === "actions" ? false : _sortable;
3016
- const headId = (0, import_react25.useMemo)(
2812
+ const headId = (0, import_react24.useMemo)(
3017
2813
  () => `${tableId}_header_${headerName ?? field}`.trim(),
3018
2814
  [tableId, headerName, field]
3019
2815
  );
3020
- const resizer = (0, import_react25.useMemo)(() => resizable ?? true ? Resizer(ref, colRef) : null, [resizable, ref, colRef]);
3021
- const style = (0, import_react25.useMemo)(
2816
+ const resizer = (0, import_react24.useMemo)(() => resizable ?? true ? Resizer(ref, colRef) : null, [resizable, ref, colRef]);
2817
+ const style = (0, import_react24.useMemo)(
3022
2818
  () => ({
3023
2819
  width,
3024
2820
  minWidth: minWidth ?? "50px",
@@ -3036,10 +2832,10 @@ var HeadCell = (props) => {
3036
2832
  );
3037
2833
  const textAlign = getTextAlign(props);
3038
2834
  const initialSort = sortOrder[0];
3039
- const sortIcon = (0, import_react25.useMemo)(() => {
2835
+ const sortIcon = (0, import_react24.useMemo)(() => {
3040
2836
  const isSorted = !!sort;
3041
2837
  const isVisible = sortable && (isSorted || isHovered);
3042
- return /* @__PURE__ */ import_react25.default.createElement(import_framer_motion21.AnimatePresence, { mode: "wait" }, isVisible && /* @__PURE__ */ import_react25.default.createElement(
2838
+ return /* @__PURE__ */ import_react24.default.createElement(import_framer_motion22.AnimatePresence, { mode: "wait" }, isVisible && /* @__PURE__ */ import_react24.default.createElement(
3043
2839
  MotionSortIcon,
3044
2840
  {
3045
2841
  key: "sort-icon",
@@ -3067,11 +2863,21 @@ var HeadCell = (props) => {
3067
2863
  }
3068
2864
  ));
3069
2865
  }, [headId, initialSort, sort, sortable, isHovered]);
3070
- const infoSign = (0, import_react25.useMemo)(
3071
- () => description ? /* @__PURE__ */ import_react25.default.createElement(InfoSign_default, { message: description, placement: "bottom" }) : null,
2866
+ const infoSign = (0, import_react24.useMemo)(
2867
+ () => description ? /* @__PURE__ */ import_react24.default.createElement(InfoSign_default, { message: description, placement: "bottom" }) : null,
3072
2868
  [description]
3073
2869
  );
3074
- return /* @__PURE__ */ import_react25.default.createElement(
2870
+ const params = (0, import_react24.useMemo)(
2871
+ () => ({
2872
+ field
2873
+ }),
2874
+ [field]
2875
+ );
2876
+ const computedHeaderClassName = (0, import_react24.useMemo)(
2877
+ () => (typeof headerClassName === "function" ? headerClassName(params) : headerClassName) || void 0,
2878
+ [headerClassName, params]
2879
+ );
2880
+ return /* @__PURE__ */ import_react24.default.createElement(
3075
2881
  StyledTh,
3076
2882
  {
3077
2883
  id: headId,
@@ -3080,16 +2886,17 @@ var HeadCell = (props) => {
3080
2886
  ref,
3081
2887
  key: field,
3082
2888
  style,
3083
- onClick: (0, import_react25.useCallback)(
2889
+ onClick: (0, import_react24.useCallback)(
3084
2890
  (e) => sortable && onSortChange?.({ field, currentSort: sort, multiple: e.shiftKey }),
3085
2891
  [field, onSortChange, sort, sortable]
3086
2892
  ),
3087
2893
  onMouseEnter: () => setIsHovered(true),
3088
2894
  onMouseLeave: () => setIsHovered(false),
3089
2895
  whileHover: "hover",
3090
- initial: "initial"
2896
+ initial: "initial",
2897
+ className: computedHeaderClassName
3091
2898
  },
3092
- /* @__PURE__ */ import_react25.default.createElement(Stack_default, { gap: 1, direction: "row", justifyContent: textAlign, alignItems: "center" }, textAlign === "end" && sortIcon, textAlign === "end" && infoSign, /* @__PURE__ */ import_react25.default.createElement(TextEllipsis, null, headerName ?? field, editMode && required && /* @__PURE__ */ import_react25.default.createElement(Asterisk, null, "*")), textAlign === "start" && infoSign, textAlign === "start" && sortIcon),
2899
+ /* @__PURE__ */ import_react24.default.createElement(Stack_default, { gap: 1, direction: "row", justifyContent: textAlign, alignItems: "center" }, textAlign === "end" && sortIcon, textAlign === "end" && infoSign, /* @__PURE__ */ import_react24.default.createElement(TextEllipsis, null, headerName ?? field, editMode && required && /* @__PURE__ */ import_react24.default.createElement(Asterisk, null, "*")), textAlign === "start" && infoSign, textAlign === "start" && sortIcon),
3093
2900
  resizer
3094
2901
  );
3095
2902
  };
@@ -3113,10 +2920,10 @@ var BodyCell = (props) => {
3113
2920
  onCellEditStart,
3114
2921
  onCellEditStop
3115
2922
  } = props;
3116
- const theme = (0, import_joy33.useTheme)();
3117
- const [value, setValue] = (0, import_react25.useState)(row[field]);
3118
- const cellRef = (0, import_react25.useRef)(null);
3119
- const params = (0, import_react25.useMemo)(
2923
+ const theme = (0, import_joy32.useTheme)();
2924
+ const [value, setValue] = (0, import_react24.useState)(row[field]);
2925
+ const cellRef = (0, import_react24.useRef)(null);
2926
+ const params = (0, import_react24.useMemo)(
3120
2927
  () => ({
3121
2928
  row,
3122
2929
  value,
@@ -3125,19 +2932,19 @@ var BodyCell = (props) => {
3125
2932
  }),
3126
2933
  [row, rowId, value, field]
3127
2934
  );
3128
- const editMode = (0, import_react25.useMemo)(
2935
+ const editMode = (0, import_react24.useMemo)(
3129
2936
  () => !!(props.editMode && (typeof isCellEditable === "function" ? isCellEditable(params) : isCellEditable ?? true)),
3130
2937
  [props.editMode, isCellEditable, params]
3131
2938
  );
3132
2939
  const propsComponentProps = "componentProps" in props ? props.componentProps : null;
3133
- const componentProps = (0, import_react25.useMemo)(
2940
+ const componentProps = (0, import_react24.useMemo)(
3134
2941
  () => ({
3135
2942
  ..."componentProps" in props && (typeof propsComponentProps === "function" ? propsComponentProps(params) : propsComponentProps || {}),
3136
2943
  size: "sm"
3137
2944
  }),
3138
2945
  [props, propsComponentProps, params]
3139
2946
  );
3140
- const editModeComponentProps = (0, import_react25.useMemo)(
2947
+ const editModeComponentProps = (0, import_react24.useMemo)(
3141
2948
  () => ({
3142
2949
  ...componentProps,
3143
2950
  onChange: (e) => {
@@ -3199,23 +3006,23 @@ var BodyCell = (props) => {
3199
3006
  }),
3200
3007
  [params, row, field, value, componentProps, type, onCellEditStop, onCellEditStart]
3201
3008
  );
3202
- const EditModeComponent = (0, import_react25.useMemo)(() => {
3009
+ const EditModeComponent = (0, import_react24.useMemo)(() => {
3203
3010
  if (renderEditCell) {
3204
- return (0, import_react25.createElement)((0, import_react25.memo)(renderEditCell), params);
3011
+ return (0, import_react24.createElement)((0, import_react24.memo)(renderEditCell), params);
3205
3012
  }
3206
3013
  return {
3207
- date: /* @__PURE__ */ import_react25.default.createElement(DatePicker_default, { value, ...editModeComponentProps }),
3208
- currency: /* @__PURE__ */ import_react25.default.createElement(
3014
+ date: /* @__PURE__ */ import_react24.default.createElement(DatePicker_default, { value, ...editModeComponentProps }),
3015
+ currency: /* @__PURE__ */ import_react24.default.createElement(
3209
3016
  CurrencyInput_default,
3210
3017
  {
3211
3018
  value,
3212
3019
  ...editModeComponentProps
3213
3020
  }
3214
3021
  ),
3215
- number: /* @__PURE__ */ import_react25.default.createElement(Input_default, { value, type: "number", ...editModeComponentProps }),
3216
- text: /* @__PURE__ */ import_react25.default.createElement(Input_default, { value, type: "text", ...editModeComponentProps }),
3217
- longText: /* @__PURE__ */ import_react25.default.createElement(Textarea_default, { value, ...editModeComponentProps }),
3218
- autocomplete: /* @__PURE__ */ import_react25.default.createElement(
3022
+ number: /* @__PURE__ */ import_react24.default.createElement(Input_default, { value, type: "number", ...editModeComponentProps }),
3023
+ text: /* @__PURE__ */ import_react24.default.createElement(Input_default, { value, type: "text", ...editModeComponentProps }),
3024
+ longText: /* @__PURE__ */ import_react24.default.createElement(Textarea_default, { value, ...editModeComponentProps }),
3025
+ autocomplete: /* @__PURE__ */ import_react24.default.createElement(
3219
3026
  Autocomplete_default,
3220
3027
  {
3221
3028
  value,
@@ -3223,7 +3030,7 @@ var BodyCell = (props) => {
3223
3030
  ...editModeComponentProps
3224
3031
  }
3225
3032
  ),
3226
- select: /* @__PURE__ */ import_react25.default.createElement(
3033
+ select: /* @__PURE__ */ import_react24.default.createElement(
3227
3034
  Select_default,
3228
3035
  {
3229
3036
  value,
@@ -3234,13 +3041,13 @@ var BodyCell = (props) => {
3234
3041
  }[type || "text"];
3235
3042
  }, [value, editModeComponentProps, type, renderEditCell, params]);
3236
3043
  const linkComponentFromProps = props.component;
3237
- const ReadModeComponent = (0, import_react25.useMemo)(() => {
3044
+ const ReadModeComponent = (0, import_react24.useMemo)(() => {
3238
3045
  if (renderCell) {
3239
- return (0, import_react25.createElement)((0, import_react25.memo)(renderCell), params);
3046
+ return (0, import_react24.createElement)((0, import_react24.memo)(renderCell), params);
3240
3047
  }
3241
3048
  const innerText = value;
3242
3049
  const typedComponent = {
3243
- link: import_react25.default.createElement(linkComponentFromProps || import_joy33.Link, {
3050
+ link: import_react24.default.createElement(linkComponentFromProps || import_joy33.Link, {
3244
3051
  children: innerText,
3245
3052
  ...componentProps
3246
3053
  })
@@ -3248,22 +3055,22 @@ var BodyCell = (props) => {
3248
3055
  return typedComponent || innerText;
3249
3056
  }, [value, renderCell, params, type, componentProps, linkComponentFromProps]);
3250
3057
  const getActions = props.getActions;
3251
- const CellComponent = (0, import_react25.useMemo)(() => {
3058
+ const CellComponent = (0, import_react24.useMemo)(() => {
3252
3059
  if (type === "actions") {
3253
- return /* @__PURE__ */ import_react25.default.createElement(Stack_default, { direction: "row", gap: 1, justifyContent: "center", alignItems: "center" }, getActions?.(params));
3060
+ return /* @__PURE__ */ import_react24.default.createElement(Stack_default, { direction: "row", gap: 1, justifyContent: "center", alignItems: "center" }, getActions?.(params));
3254
3061
  }
3255
3062
  return editMode && EditModeComponent ? EditModeComponent : ReadModeComponent;
3256
3063
  }, [type, getActions, params, editMode, EditModeComponent, ReadModeComponent]);
3257
- const showTooltip = (0, import_react25.useMemo)(() => noWrap && type === "longText", [noWrap, type]);
3064
+ const showTooltip = (0, import_react24.useMemo)(() => noWrap && type === "longText", [noWrap, type]);
3258
3065
  const isBoundary = props.isLastStartPinnedColumn || props.isLastEndPinnedColumn;
3259
- const computedCellClassName = (0, import_react25.useMemo)(
3066
+ const computedCellClassName = (0, import_react24.useMemo)(
3260
3067
  () => (typeof cellClassName === "function" ? cellClassName(params) : cellClassName) || "",
3261
3068
  [cellClassName, params]
3262
3069
  );
3263
- (0, import_react25.useEffect)(() => {
3070
+ (0, import_react24.useEffect)(() => {
3264
3071
  setValue(row[field]);
3265
3072
  }, [row, field]);
3266
- return /* @__PURE__ */ import_react25.default.createElement(
3073
+ return /* @__PURE__ */ import_react24.default.createElement(
3267
3074
  StyledTd,
3268
3075
  {
3269
3076
  ref: cellRef,
@@ -3280,16 +3087,16 @@ var BodyCell = (props) => {
3280
3087
  },
3281
3088
  className: [isLastStartPinnedColumn && "is-last-left", isLastEndPinnedColumn && "is-last-right", computedCellClassName].filter(Boolean).join(" ") || ""
3282
3089
  },
3283
- (0, import_react25.useMemo)(
3284
- () => showTooltip ? /* @__PURE__ */ import_react25.default.createElement(CellTextEllipsis, null, CellComponent) : CellComponent,
3090
+ (0, import_react24.useMemo)(
3091
+ () => showTooltip ? /* @__PURE__ */ import_react24.default.createElement(CellTextEllipsis, null, CellComponent) : CellComponent,
3285
3092
  [CellComponent, showTooltip]
3286
3093
  )
3287
3094
  );
3288
3095
  };
3289
- var BodyRow = (0, import_react25.memo)(
3096
+ var BodyRow = (0, import_react24.memo)(
3290
3097
  (props) => {
3291
3098
  const { tableId, columns, rowId, editMode, noWrap, row } = props;
3292
- return /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, columns.map((column, i) => /* @__PURE__ */ import_react25.default.createElement(
3099
+ return /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, columns.map((column, i) => /* @__PURE__ */ import_react24.default.createElement(
3293
3100
  BodyCell,
3294
3101
  {
3295
3102
  key: `${rowId}_${column.field.toString()}_${i}`,
@@ -3303,6 +3110,34 @@ var BodyRow = (0, import_react25.memo)(
3303
3110
  )));
3304
3111
  }
3305
3112
  );
3113
+ var StyledTableRow2 = (0, import_joy32.styled)("tr", {
3114
+ name: "DataTable",
3115
+ slot: "tableRow",
3116
+ shouldForwardProp: (prop) => prop !== "striped"
3117
+ })(({ striped }) => ({
3118
+ ...striped && {
3119
+ backgroundColor: "var(--TableRow-stripeBackground, var(--ceed-palette-background-level2))",
3120
+ color: "var(--ceed-palette-text-primary)",
3121
+ "& td": {
3122
+ backgroundColor: "background.surface"
3123
+ }
3124
+ },
3125
+ "&:hover": {
3126
+ backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))",
3127
+ "& td": {
3128
+ backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))"
3129
+ }
3130
+ }
3131
+ }));
3132
+ var VirtualizedTableRow = (0, import_react24.memo)(StyledTableRow2, (prevProps, nextProps) => {
3133
+ return prevProps.striped === nextProps.striped && prevProps.style?.height === nextProps.style?.height && prevProps.style?.transform === nextProps.style?.transform && // @ts-ignore
3134
+ prevProps["data-row-id"] === nextProps["data-row-id"] && // @ts-ignore
3135
+ prevProps["data-index"] === nextProps["data-index"] && prevProps.tabIndex === nextProps.tabIndex && prevProps["aria-checked"] === nextProps["aria-checked"] && // Include children check to handle isCellEditable changes
3136
+ prevProps.children === nextProps.children;
3137
+ });
3138
+
3139
+ // src/components/DataTable/hooks.ts
3140
+ var import_react25 = require("react");
3306
3141
  function useColumnWidths(columnsByField) {
3307
3142
  const [widths, setWidths] = (0, import_react25.useState)({});
3308
3143
  const roRef = (0, import_react25.useRef)();
@@ -3354,7 +3189,6 @@ function useDataTableRenderer({
3354
3189
  isTotalSelected: _isTotalSelected,
3355
3190
  isRowSelectable,
3356
3191
  columnGroupingModel
3357
- // Add this prop
3358
3192
  }) {
3359
3193
  if (pinnedColumns && columnGroupingModel) {
3360
3194
  throw new Error(
@@ -3379,8 +3213,8 @@ function useDataTableRenderer({
3379
3213
  ...acc,
3380
3214
  [curr.field]: {
3381
3215
  ...curr,
3382
- headerRef: import_react25.default.createRef(),
3383
- tableColRef: import_react25.default.createRef()
3216
+ headerRef: (0, import_react25.createRef)(),
3217
+ tableColRef: (0, import_react25.createRef)()
3384
3218
  }
3385
3219
  }),
3386
3220
  {}
@@ -3420,7 +3254,6 @@ function useDataTableRenderer({
3420
3254
  [_rows, sortModel, sortComparator]
3421
3255
  );
3422
3256
  const sortOrder = (0, import_react25.useMemo)(
3423
- // NOTE: default value를 props destructuring에서 할당하면 렌더링 시점에 초기화가 되어버린다.
3424
3257
  () => Array.from(new Set(_sortOrder || ["asc", "desc", null])),
3425
3258
  [_sortOrder]
3426
3259
  );
@@ -3430,11 +3263,7 @@ function useDataTableRenderer({
3430
3263
  (row, index) => _getId?.(row) ?? row.id ?? `${(index || 0) + (page - 1) * pageSize}`,
3431
3264
  [_getId, page, pageSize]
3432
3265
  );
3433
- const selectedModelSet = (0, import_react25.useMemo)(
3434
- // NOTE: default value를 props destructuring에서 할당하면 렌더링 시점에 초기화가 되어버린다.
3435
- () => new Set(selectionModel || []),
3436
- [selectionModel]
3437
- );
3266
+ const selectedModelSet = (0, import_react25.useMemo)(() => new Set(selectionModel || []), [selectionModel]);
3438
3267
  const dataInPage = (0, import_react25.useMemo)(
3439
3268
  () => !pagination || paginationMode === "server" ? rows : rows.slice((page - 1) * pageSize, (page - 1) * pageSize + pageSize),
3440
3269
  [rows, page, pageSize, paginationMode, pagination]
@@ -3470,12 +3299,9 @@ function useDataTableRenderer({
3470
3299
  return calculateColumnGroups(columnGroupingModel, reorderedColumns);
3471
3300
  }, [columnGroupingModel, reorderedColumns]);
3472
3301
  const columns = (0, import_react25.useMemo)(() => {
3473
- const baseColumns = reorderedColumns.length > 0 ? reorderedColumns : (
3474
- // fallback
3475
- Object.keys(rows[0] || {}).map((key) => ({
3476
- field: key
3477
- }))
3478
- );
3302
+ const baseColumns = reorderedColumns.length > 0 ? reorderedColumns : Object.keys(rows[0] || {}).map((key) => ({
3303
+ field: key
3304
+ }));
3479
3305
  return baseColumns.map((column) => {
3480
3306
  const isLeftPinned = pinnedColumns?.left?.includes(column.field);
3481
3307
  const isRightPinned = pinnedColumns?.right?.includes(column.field);
@@ -3490,7 +3316,6 @@ function useDataTableRenderer({
3490
3316
  isPinned,
3491
3317
  isLastStartPinnedColumn: isLeftPinned && [...pinnedColumns?.left || []].pop() === column.field,
3492
3318
  isLastEndPinnedColumn: isRightPinned && (pinnedColumns?.right?.[0] ?? null) === column.field,
3493
- // pinned 관련 계산부
3494
3319
  pinnedStartPosition: pinnedColumns?.left?.slice(0, isLeftPinned ? pinnedColumns.left.indexOf(column.field) : pinnedColumns.left.length).reduce((acc, curr) => acc + getWidth(curr), 0),
3495
3320
  pinnedEndPosition: pinnedColumns?.right?.slice(isRightPinned ? pinnedColumns.right.indexOf(column.field) + 1 : 0).reduce((acc, curr) => acc + getWidth(curr), 0)
3496
3321
  };
@@ -3552,56 +3377,265 @@ function useDataTableRenderer({
3552
3377
  }, [page]);
3553
3378
  return {
3554
3379
  rowCount,
3555
- selectableRowCount,
3556
- page,
3557
- pageSize,
3558
- onPaginationModelChange: handlePageChange,
3559
- getId,
3560
- HeadCell,
3561
- BodyRow,
3562
- dataInPage,
3563
- handleSortChange,
3564
- isAllSelected,
3565
- // all rows are selected on this page
3566
- isTotalSelected,
3567
- isSelectedRow: (0, import_react25.useCallback)((model) => selectedModelSet.has(model), [selectedModelSet]),
3568
- isRowSelectable: (0, import_react25.useCallback)(
3569
- (rowId, row) => {
3570
- if (!isRowSelectable) return true;
3571
- return isRowSelectable({ row, id: rowId });
3572
- },
3573
- [isRowSelectable]
3574
- ),
3575
- focusedRowId,
3576
- onRowFocus: (0, import_react25.useCallback)((rowId) => {
3577
- setFocusedRowId(rowId);
3578
- }, []),
3579
- onAllCheckboxChange: (0, import_react25.useCallback)(() => {
3580
- onSelectionModelChange?.(isAllSelected ? [] : selectableDataInPage.map(getId));
3581
- }, [isAllSelected, selectableDataInPage, onSelectionModelChange, getId]),
3582
- onCheckboxChange: (0, import_react25.useCallback)(
3583
- (event, selectedModel) => {
3584
- if (selectedModelSet.has(selectedModel)) {
3585
- const newSelectionModel = (selectionModel || []).filter((model) => model !== selectedModel);
3586
- onSelectionModelChange?.(newSelectionModel);
3587
- } else {
3588
- const newSelectionModel = [...selectionModel || [], selectedModel];
3589
- onSelectionModelChange?.(newSelectionModel);
3590
- }
3380
+ selectableRowCount,
3381
+ page,
3382
+ pageSize,
3383
+ onPaginationModelChange: handlePageChange,
3384
+ getId,
3385
+ HeadCell,
3386
+ BodyRow,
3387
+ dataInPage,
3388
+ handleSortChange,
3389
+ isAllSelected,
3390
+ isTotalSelected,
3391
+ isSelectedRow: (0, import_react25.useCallback)((model) => selectedModelSet.has(model), [selectedModelSet]),
3392
+ isRowSelectable: (0, import_react25.useCallback)(
3393
+ (rowId, row) => {
3394
+ if (!isRowSelectable) return true;
3395
+ return isRowSelectable({ row, id: rowId });
3396
+ },
3397
+ [isRowSelectable]
3398
+ ),
3399
+ focusedRowId,
3400
+ onRowFocus: (0, import_react25.useCallback)((rowId) => {
3401
+ setFocusedRowId(rowId);
3402
+ }, []),
3403
+ onAllCheckboxChange: (0, import_react25.useCallback)(() => {
3404
+ onSelectionModelChange?.(isAllSelected ? [] : selectableDataInPage.map(getId));
3405
+ }, [isAllSelected, selectableDataInPage, onSelectionModelChange, getId]),
3406
+ onCheckboxChange: (0, import_react25.useCallback)(
3407
+ (event, selectedModel) => {
3408
+ if (selectedModelSet.has(selectedModel)) {
3409
+ const newSelectionModel = (selectionModel || []).filter((model) => model !== selectedModel);
3410
+ onSelectionModelChange?.(newSelectionModel);
3411
+ } else {
3412
+ const newSelectionModel = [...selectionModel || [], selectedModel];
3413
+ onSelectionModelChange?.(newSelectionModel);
3414
+ }
3415
+ },
3416
+ [selectionModel, onSelectionModelChange, selectedModelSet]
3417
+ ),
3418
+ columns,
3419
+ processedColumnGroups,
3420
+ onTotalSelect: (0, import_react25.useCallback)(() => {
3421
+ const selectableRows = rows.filter((row, i) => {
3422
+ if (!isRowSelectable) return true;
3423
+ return isRowSelectable({ row, id: getId(row, i) });
3424
+ });
3425
+ onSelectionModelChange?.(isTotalSelected ? [] : selectableRows.map(getId), !isTotalSelected);
3426
+ }, [isTotalSelected, rows, onSelectionModelChange, getId, isRowSelectable])
3427
+ };
3428
+ }
3429
+
3430
+ // src/components/Table/Table.tsx
3431
+ var import_react26 = __toESM(require("react"));
3432
+ var import_joy34 = require("@mui/joy");
3433
+ var Table = (props) => {
3434
+ const { children, ...inheritProps } = props;
3435
+ return /* @__PURE__ */ import_react26.default.createElement(import_joy34.Table, { ...inheritProps }, children);
3436
+ };
3437
+ Table.displayName = "Table";
3438
+ function TableHead(props) {
3439
+ const {
3440
+ headCells,
3441
+ showCheckbox,
3442
+ onCheckboxChange,
3443
+ slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
3444
+ slotProps: { checkbox: checkboxProps = {} } = {}
3445
+ } = props;
3446
+ return /* @__PURE__ */ import_react26.default.createElement("thead", null, /* @__PURE__ */ import_react26.default.createElement("tr", null, showCheckbox && /* @__PURE__ */ import_react26.default.createElement(
3447
+ "th",
3448
+ {
3449
+ style: {
3450
+ width: "40px",
3451
+ textAlign: "center"
3452
+ }
3453
+ },
3454
+ /* @__PURE__ */ import_react26.default.createElement(RenderCheckbox, { onChange: onCheckboxChange, ...checkboxProps })
3455
+ ), headCells.map((headCell) => /* @__PURE__ */ import_react26.default.createElement(
3456
+ "th",
3457
+ {
3458
+ key: headCell.label,
3459
+ style: {
3460
+ width: headCell.width,
3461
+ minWidth: headCell.minWidth,
3462
+ maxWidth: headCell.maxWidth,
3463
+ textAlign: headCell.numeric ? "right" : "left"
3464
+ }
3465
+ },
3466
+ headCell.label
3467
+ ))));
3468
+ }
3469
+ TableHead.displayName = "TableHead";
3470
+ function TableBody(props) {
3471
+ const {
3472
+ rows,
3473
+ cellOrder,
3474
+ rowOptions,
3475
+ showCheckbox,
3476
+ onCheckboxChange,
3477
+ slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
3478
+ slotProps: { checkbox: checkboxProps = {} } = {}
3479
+ } = props;
3480
+ return /* @__PURE__ */ import_react26.default.createElement("tbody", null, rows.map((row, rowIndex) => /* @__PURE__ */ import_react26.default.createElement("tr", { key: `table-row-${rowIndex}` }, showCheckbox && /* @__PURE__ */ import_react26.default.createElement(
3481
+ "td",
3482
+ {
3483
+ style: {
3484
+ textAlign: "center"
3485
+ }
3486
+ },
3487
+ /* @__PURE__ */ import_react26.default.createElement(RenderCheckbox, { onChange: (event) => onCheckboxChange?.(event, rowIndex), ...checkboxProps })
3488
+ ), cellOrder.map((cellKey) => /* @__PURE__ */ import_react26.default.createElement(
3489
+ "td",
3490
+ {
3491
+ key: cellKey,
3492
+ style: {
3493
+ textAlign: rowOptions?.[cellKey]?.numeric ? "right" : "left"
3494
+ }
3495
+ },
3496
+ row[cellKey]
3497
+ )))));
3498
+ }
3499
+ TableBody.displayName = "TableBody";
3500
+
3501
+ // src/components/Pagination/Pagination.tsx
3502
+ var import_react27 = __toESM(require("react"));
3503
+ var import_ChevronLeft2 = __toESM(require("@mui/icons-material/ChevronLeft"));
3504
+ var import_ChevronRight2 = __toESM(require("@mui/icons-material/ChevronRight"));
3505
+ var import_joy35 = require("@mui/joy");
3506
+ var PaginationButton = (0, import_joy35.styled)(Button_default, {
3507
+ name: "Pagination",
3508
+ slot: "button"
3509
+ })(({ theme, active, size }) => ({
3510
+ "--Button-size": {
3511
+ sm: "32px",
3512
+ md: "40px",
3513
+ lg: "48px"
3514
+ }[size],
3515
+ width: "var(--Button-size)",
3516
+ height: "var(--Button-size)",
3517
+ backgroundColor: active ? theme.vars.palette.primary.softHoverBg : "transparent",
3518
+ color: active ? theme.vars.palette.primary.softColor : theme.vars.palette.neutral.plainColor,
3519
+ "&:hover": {
3520
+ color: active ? theme.vars.palette.primary.softColor : theme.vars.palette.neutral.softColor,
3521
+ backgroundColor: active ? theme.vars.palette.primary.softActiveBg : theme.vars.palette.neutral.softHoverBg
3522
+ }
3523
+ }));
3524
+ var PaginationIconButton = (0, import_joy35.styled)(IconButton_default, {
3525
+ name: "Pagination",
3526
+ slot: "button"
3527
+ })(({ theme, size }) => ({
3528
+ "--IconButton-size": {
3529
+ sm: "32px",
3530
+ md: "40px",
3531
+ lg: "48px"
3532
+ }[size],
3533
+ "--Icon-fontSize": "20px",
3534
+ width: "var(--IconButton-size)",
3535
+ height: "var(--IconButton-size)",
3536
+ color: theme.vars.palette.neutral.plainColor,
3537
+ "&:hover": {
3538
+ color: theme.vars.palette.neutral.softColor,
3539
+ backgroundColor: theme.vars.palette.neutral.softHoverBg
3540
+ }
3541
+ }));
3542
+ var PaginationRoot = (0, import_joy35.styled)(Stack_default, {
3543
+ name: "Pagination",
3544
+ slot: "root"
3545
+ })({});
3546
+ var PaginationContainer = (0, import_joy35.styled)(Stack_default, {
3547
+ name: "Pagination",
3548
+ slot: "container"
3549
+ })(({ theme, size }) => ({
3550
+ gap: {
3551
+ sm: theme.spacing(1),
3552
+ md: theme.spacing(1.5),
3553
+ lg: theme.spacing(2)
3554
+ }[size]
3555
+ }));
3556
+ function Pagination(props) {
3557
+ const {
3558
+ paginationModel: _paginationModel,
3559
+ defaultPaginationModel = { page: 1, pageSize: 25 },
3560
+ onPageChange,
3561
+ rowCount,
3562
+ size = "md",
3563
+ ...innerProps
3564
+ } = props;
3565
+ const [paginationModel, setPaginationModel] = useControlledState(
3566
+ _paginationModel,
3567
+ defaultPaginationModel,
3568
+ (0, import_react27.useCallback)(
3569
+ (newPage) => {
3570
+ onPageChange(newPage.page);
3591
3571
  },
3592
- [selectionModel, onSelectionModelChange, selectedModelSet]
3593
- ),
3594
- columns,
3595
- processedColumnGroups,
3596
- onTotalSelect: (0, import_react25.useCallback)(() => {
3597
- const selectableRows = rows.filter((row, i) => {
3598
- if (!isRowSelectable) return true;
3599
- return isRowSelectable({ row, id: getId(row, i) });
3600
- });
3601
- onSelectionModelChange?.(isTotalSelected ? [] : selectableRows.map(getId), !isTotalSelected);
3602
- }, [isTotalSelected, rows, onSelectionModelChange, getId, isRowSelectable])
3572
+ [onPageChange]
3573
+ )
3574
+ );
3575
+ const handlePageChange = (newPage) => {
3576
+ setPaginationModel({ ...paginationModel, page: newPage });
3603
3577
  };
3578
+ const firstPage = 1;
3579
+ const lastPage = Math.max(firstPage, Math.ceil(rowCount / paginationModel.pageSize));
3580
+ const beforePages = [paginationModel.page - 2, paginationModel.page - 1].filter((p) => p > 1);
3581
+ const afterPages = [paginationModel.page + 1, paginationModel.page + 2].filter((p) => p <= lastPage - 1);
3582
+ const isMoreAfterPages = lastPage > 1 && paginationModel.page < lastPage - 3;
3583
+ const isMoreBeforePages = lastPage > 1 && paginationModel.page > 4;
3584
+ (0, import_react27.useEffect)(() => {
3585
+ if (paginationModel.page > lastPage) {
3586
+ setPaginationModel({ ...paginationModel, page: lastPage });
3587
+ }
3588
+ }, [rowCount, paginationModel, lastPage, setPaginationModel]);
3589
+ return /* @__PURE__ */ import_react27.default.createElement(PaginationRoot, { ...innerProps }, /* @__PURE__ */ import_react27.default.createElement(PaginationContainer, { direction: "row", size, alignItems: "center" }, /* @__PURE__ */ import_react27.default.createElement(
3590
+ PaginationIconButton,
3591
+ {
3592
+ size,
3593
+ variant: "plain",
3594
+ color: "neutral",
3595
+ onClick: () => handlePageChange(paginationModel.page - 1),
3596
+ disabled: paginationModel.page === firstPage,
3597
+ "aria-label": "Previous page"
3598
+ },
3599
+ /* @__PURE__ */ import_react27.default.createElement(import_ChevronLeft2.default, null)
3600
+ ), paginationModel.page !== firstPage && /* @__PURE__ */ import_react27.default.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(firstPage) }, firstPage), isMoreBeforePages && /* @__PURE__ */ import_react27.default.createElement(
3601
+ PaginationButton,
3602
+ {
3603
+ size,
3604
+ variant: "plain",
3605
+ color: "neutral",
3606
+ onClick: () => handlePageChange(paginationModel.page - 3),
3607
+ "aria-label": "More previous pages"
3608
+ },
3609
+ "..."
3610
+ ), 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: "active", 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(
3611
+ PaginationButton,
3612
+ {
3613
+ size,
3614
+ variant: "plain",
3615
+ color: "neutral",
3616
+ "aria-label": "More next pages",
3617
+ onClick: () => handlePageChange(paginationModel.page + 3)
3618
+ },
3619
+ "..."
3620
+ ), paginationModel.page !== lastPage && /* @__PURE__ */ import_react27.default.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(lastPage) }, lastPage), /* @__PURE__ */ import_react27.default.createElement(
3621
+ PaginationIconButton,
3622
+ {
3623
+ size,
3624
+ variant: "plain",
3625
+ color: "neutral",
3626
+ onClick: () => handlePageChange(paginationModel.page + 1),
3627
+ disabled: paginationModel.page === lastPage,
3628
+ "aria-label": "Next page"
3629
+ },
3630
+ /* @__PURE__ */ import_react27.default.createElement(import_ChevronRight2.default, null)
3631
+ )));
3604
3632
  }
3633
+ Pagination.displayName = "Pagination";
3634
+
3635
+ // src/components/Pagination/index.ts
3636
+ var Pagination_default = Pagination;
3637
+
3638
+ // src/components/DataTable/DataTable.tsx
3605
3639
  function Component(props, apiRef) {
3606
3640
  const {
3607
3641
  rows,
@@ -3648,9 +3682,9 @@ function Component(props, apiRef) {
3648
3682
  isTotalSelected: ___________,
3649
3683
  ...innerProps
3650
3684
  } = props;
3651
- const tableId = (0, import_react25.useId)();
3652
- const parentRef = (0, import_react25.useRef)(null);
3653
- const tableBodyRef = (0, import_react25.useRef)(null);
3685
+ const tableId = (0, import_react28.useId)();
3686
+ const parentRef = (0, import_react28.useRef)(null);
3687
+ const tableBodyRef = (0, import_react28.useRef)(null);
3654
3688
  const {
3655
3689
  columns,
3656
3690
  processedColumnGroups,
@@ -3681,29 +3715,29 @@ function Component(props, apiRef) {
3681
3715
  measureElement: (element) => element.clientHeight,
3682
3716
  overscan: 10
3683
3717
  });
3684
- const paginationModel = (0, import_react25.useMemo)(() => ({ page, pageSize }), [page, pageSize]);
3718
+ const paginationModel = (0, import_react28.useMemo)(() => ({ page, pageSize }), [page, pageSize]);
3685
3719
  const totalSize = virtualizer.getTotalSize();
3686
3720
  const virtualizedItems = virtualizer.getVirtualItems();
3687
- const getRowClickHandler = (0, import_react25.useCallback)(
3721
+ const getRowClickHandler = (0, import_react28.useCallback)(
3688
3722
  (row, rowId) => (e) => {
3689
3723
  onRowClick?.({ row, rowId }, e);
3690
3724
  checkboxSelection && !disableSelectionOnClick && isRowSelectableCheck(rowId, row) && onCheckboxChange(e, rowId);
3691
3725
  },
3692
3726
  [onRowClick, checkboxSelection, disableSelectionOnClick, onCheckboxChange, isRowSelectableCheck]
3693
3727
  );
3694
- const getRowFocusHandler = (0, import_react25.useCallback)(
3728
+ const getRowFocusHandler = (0, import_react28.useCallback)(
3695
3729
  (rowId) => () => {
3696
3730
  onRowFocus(rowId);
3697
3731
  },
3698
3732
  [onRowFocus]
3699
3733
  );
3700
- const getCheckboxClickHandler = (0, import_react25.useCallback)(
3734
+ const getCheckboxClickHandler = (0, import_react28.useCallback)(
3701
3735
  () => (e) => {
3702
3736
  e.stopPropagation();
3703
3737
  },
3704
3738
  []
3705
3739
  );
3706
- const getCheckboxChangeHandler = (0, import_react25.useCallback)(
3740
+ const getCheckboxChangeHandler = (0, import_react28.useCallback)(
3707
3741
  (rowId, row) => (e) => {
3708
3742
  if (isRowSelectableCheck(rowId, row)) {
3709
3743
  onCheckboxChange(e, rowId);
@@ -3711,7 +3745,7 @@ function Component(props, apiRef) {
3711
3745
  },
3712
3746
  [onCheckboxChange, isRowSelectableCheck]
3713
3747
  );
3714
- (0, import_react25.useImperativeHandle)(apiRef, () => ({
3748
+ (0, import_react28.useImperativeHandle)(apiRef, () => ({
3715
3749
  getRowIndexRelativeToVisibleRows(rowId) {
3716
3750
  return dataInPage.findIndex((row) => String(getId(row)) === rowId);
3717
3751
  },
@@ -3727,7 +3761,7 @@ function Component(props, apiRef) {
3727
3761
  });
3728
3762
  }
3729
3763
  }));
3730
- return /* @__PURE__ */ import_react25.default.createElement(
3764
+ return /* @__PURE__ */ import_react28.default.createElement(
3731
3765
  Box_default,
3732
3766
  {
3733
3767
  sx: {
@@ -3737,7 +3771,7 @@ function Component(props, apiRef) {
3737
3771
  flexDirection: "column"
3738
3772
  }
3739
3773
  },
3740
- (!!checkboxSelection || !!Toolbar) && /* @__PURE__ */ import_react25.default.createElement(
3774
+ (!!checkboxSelection || !!Toolbar) && /* @__PURE__ */ import_react28.default.createElement(
3741
3775
  Stack_default,
3742
3776
  {
3743
3777
  direction: "row",
@@ -3747,10 +3781,10 @@ function Component(props, apiRef) {
3747
3781
  justifyContent: "space-between",
3748
3782
  alignItems: "center"
3749
3783
  },
3750
- !!checkboxSelection && /* @__PURE__ */ import_react25.default.createElement(Stack_default, { direction: "row", spacing: 1 }, !isAllSelected && /* @__PURE__ */ import_react25.default.createElement(Typography_default, { level: "body-xs" }, numberFormatter(selectionModel?.length || 0), " items selected"), isAllSelected && !isTotalSelected && /* @__PURE__ */ import_react25.default.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ import_react25.default.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectionModel?.length || 0), " items on this page are selected."), /* @__PURE__ */ import_react25.default.createElement(Button_default, { size: "sm", variant: "plain", onClick: onTotalSelect }, "Select all ", numberFormatter(selectableRowCount), " items")), isTotalSelected && /* @__PURE__ */ import_react25.default.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ import_react25.default.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectableRowCount), " items are selected."), /* @__PURE__ */ import_react25.default.createElement(Button_default, { size: "sm", variant: "plain", color: "danger", onClick: onTotalSelect }, "Cancel"))),
3751
- Toolbar && /* @__PURE__ */ import_react25.default.createElement(Toolbar, { ...toolbarProps || {} })
3784
+ !!checkboxSelection && /* @__PURE__ */ import_react28.default.createElement(Stack_default, { direction: "row", spacing: 1 }, !isAllSelected && /* @__PURE__ */ import_react28.default.createElement(Typography_default, { level: "body-xs" }, numberFormatter(selectionModel?.length || 0), " items selected"), isAllSelected && !isTotalSelected && /* @__PURE__ */ import_react28.default.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ import_react28.default.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectionModel?.length || 0), " items on this page are selected."), /* @__PURE__ */ import_react28.default.createElement(Button_default, { size: "sm", variant: "plain", onClick: onTotalSelect }, "Select all ", numberFormatter(selectableRowCount), " items")), isTotalSelected && /* @__PURE__ */ import_react28.default.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ import_react28.default.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectableRowCount), " items are selected."), /* @__PURE__ */ import_react28.default.createElement(Button_default, { size: "sm", variant: "plain", color: "danger", onClick: onTotalSelect }, "Cancel"))),
3785
+ Toolbar && /* @__PURE__ */ import_react28.default.createElement(Toolbar, { ...toolbarProps || {} })
3752
3786
  ),
3753
- /* @__PURE__ */ import_react25.default.createElement(
3787
+ /* @__PURE__ */ import_react28.default.createElement(
3754
3788
  Sheet_default,
3755
3789
  {
3756
3790
  variant: "outlined",
@@ -3771,14 +3805,14 @@ function Component(props, apiRef) {
3771
3805
  ref: parentRef,
3772
3806
  ...backgroundProps
3773
3807
  },
3774
- /* @__PURE__ */ import_react25.default.createElement(Table, { ...innerProps }, /* @__PURE__ */ import_react25.default.createElement("colgroup", null, checkboxSelection && /* @__PURE__ */ import_react25.default.createElement(
3808
+ /* @__PURE__ */ import_react28.default.createElement(Table, { ...innerProps }, /* @__PURE__ */ import_react28.default.createElement("colgroup", null, checkboxSelection && /* @__PURE__ */ import_react28.default.createElement(
3775
3809
  "col",
3776
3810
  {
3777
3811
  style: {
3778
3812
  width: "40px"
3779
3813
  }
3780
3814
  }
3781
- ), columns.map((c) => /* @__PURE__ */ import_react25.default.createElement(
3815
+ ), columns.map((c) => /* @__PURE__ */ import_react28.default.createElement(
3782
3816
  "col",
3783
3817
  {
3784
3818
  ref: c.tableColRef,
@@ -3787,7 +3821,7 @@ function Component(props, apiRef) {
3787
3821
  width: c.width
3788
3822
  }
3789
3823
  }
3790
- ))), /* @__PURE__ */ import_react25.default.createElement("thead", null, processedColumnGroups && processedColumnGroups.groups.map((levelGroups, level) => /* @__PURE__ */ import_react25.default.createElement("tr", { key: `group-level-${level}` }, checkboxSelection && level === 0 && /* @__PURE__ */ import_react25.default.createElement(
3824
+ ))), /* @__PURE__ */ import_react28.default.createElement("thead", null, processedColumnGroups && processedColumnGroups.groups.map((levelGroups, level) => /* @__PURE__ */ import_react28.default.createElement("tr", { key: `group-level-${level}` }, checkboxSelection && level === 0 && /* @__PURE__ */ import_react28.default.createElement(
3791
3825
  "th",
3792
3826
  {
3793
3827
  rowSpan: processedColumnGroups.maxLevel + 2,
@@ -3797,7 +3831,7 @@ function Component(props, apiRef) {
3797
3831
  verticalAlign: "middle"
3798
3832
  }
3799
3833
  },
3800
- /* @__PURE__ */ import_react25.default.createElement(
3834
+ /* @__PURE__ */ import_react28.default.createElement(
3801
3835
  RenderCheckbox,
3802
3836
  {
3803
3837
  onChange: onAllCheckboxChange,
@@ -3807,10 +3841,12 @@ function Component(props, apiRef) {
3807
3841
  ...checkboxProps
3808
3842
  }
3809
3843
  )
3810
- ), level > 0 && Array.from({ length: levelGroups[0]?.startIndex || 0 }).map((_2, i) => /* @__PURE__ */ import_react25.default.createElement("th", { key: `empty-${level}-${i}` })), levelGroups.map((group, groupIndex) => {
3844
+ ), level > 0 && Array.from({ length: levelGroups[0]?.startIndex || 0 }).map((_2, i) => /* @__PURE__ */ import_react28.default.createElement("th", { key: `empty-${level}-${i}` })), levelGroups.map((group, groupIndex) => {
3811
3845
  const nextGroup = levelGroups[groupIndex + 1];
3812
3846
  const emptyCells = nextGroup ? nextGroup.startIndex - (group.startIndex + group.colspan) : columns.length - (group.startIndex + group.colspan);
3813
- return /* @__PURE__ */ import_react25.default.createElement(import_react25.Fragment, { key: group.groupId }, /* @__PURE__ */ import_react25.default.createElement(
3847
+ const params = { groupId: group.groupId };
3848
+ const computedHeaderClassName = group.headerClassName ? typeof group.headerClassName === "function" ? group.headerClassName(params) : group.headerClassName : void 0;
3849
+ return /* @__PURE__ */ import_react28.default.createElement(import_react28.Fragment, { key: group.groupId }, /* @__PURE__ */ import_react28.default.createElement(
3814
3850
  "th",
3815
3851
  {
3816
3852
  colSpan: group.colspan,
@@ -3818,11 +3854,12 @@ function Component(props, apiRef) {
3818
3854
  textAlign: "center",
3819
3855
  fontWeight: "bold",
3820
3856
  verticalAlign: "middle"
3821
- }
3857
+ },
3858
+ className: computedHeaderClassName
3822
3859
  },
3823
3860
  group.headerName ?? group.groupId
3824
- ), emptyCells > 0 && Array.from({ length: emptyCells }).map((_2, i) => /* @__PURE__ */ import_react25.default.createElement("th", { key: `empty-between-${level}-${groupIndex}-${i}`, colSpan: 1 })));
3825
- }))), /* @__PURE__ */ import_react25.default.createElement("tr", null, !processedColumnGroups && checkboxSelection && /* @__PURE__ */ import_react25.default.createElement(
3861
+ ), emptyCells > 0 && Array.from({ length: emptyCells }).map((_2, i) => /* @__PURE__ */ import_react28.default.createElement("th", { key: `empty-between-${level}-${groupIndex}-${i}`, colSpan: 1 })));
3862
+ }))), /* @__PURE__ */ import_react28.default.createElement("tr", null, !processedColumnGroups && checkboxSelection && /* @__PURE__ */ import_react28.default.createElement(
3826
3863
  "th",
3827
3864
  {
3828
3865
  style: {
@@ -3830,7 +3867,7 @@ function Component(props, apiRef) {
3830
3867
  textAlign: "center"
3831
3868
  }
3832
3869
  },
3833
- /* @__PURE__ */ import_react25.default.createElement(
3870
+ /* @__PURE__ */ import_react28.default.createElement(
3834
3871
  RenderCheckbox,
3835
3872
  {
3836
3873
  onChange: onAllCheckboxChange,
@@ -3842,7 +3879,7 @@ function Component(props, apiRef) {
3842
3879
  )
3843
3880
  ), columns.map((c, i) => (
3844
3881
  // @ts-ignore
3845
- /* @__PURE__ */ import_react25.default.createElement(
3882
+ /* @__PURE__ */ import_react28.default.createElement(
3846
3883
  HeadCell2,
3847
3884
  {
3848
3885
  tableId,
@@ -3853,7 +3890,7 @@ function Component(props, apiRef) {
3853
3890
  ...c
3854
3891
  }
3855
3892
  )
3856
- )))), /* @__PURE__ */ import_react25.default.createElement(
3893
+ )))), /* @__PURE__ */ import_react28.default.createElement(
3857
3894
  VirtualizedTableBody,
3858
3895
  {
3859
3896
  ref: tableBodyRef,
@@ -3863,7 +3900,7 @@ function Component(props, apiRef) {
3863
3900
  role: "rowgroup",
3864
3901
  "aria-label": "DataTableBody"
3865
3902
  },
3866
- !!loading && /* @__PURE__ */ import_react25.default.createElement(OverlayWrapper, null, /* @__PURE__ */ import_react25.default.createElement(
3903
+ !!loading && /* @__PURE__ */ import_react28.default.createElement(OverlayWrapper, null, /* @__PURE__ */ import_react28.default.createElement(
3867
3904
  "td",
3868
3905
  {
3869
3906
  style: {
@@ -3872,7 +3909,7 @@ function Component(props, apiRef) {
3872
3909
  overflow: "visible"
3873
3910
  }
3874
3911
  },
3875
- /* @__PURE__ */ import_react25.default.createElement(
3912
+ /* @__PURE__ */ import_react28.default.createElement(
3876
3913
  Box_default,
3877
3914
  {
3878
3915
  sx: {
@@ -3882,7 +3919,7 @@ function Component(props, apiRef) {
3882
3919
  right: 0
3883
3920
  }
3884
3921
  },
3885
- /* @__PURE__ */ import_react25.default.createElement(LoadingOverlay, null)
3922
+ /* @__PURE__ */ import_react28.default.createElement(LoadingOverlay, null)
3886
3923
  )
3887
3924
  )),
3888
3925
  virtualizedItems.map((virtualizedRow, index) => {
@@ -3890,7 +3927,7 @@ function Component(props, apiRef) {
3890
3927
  const row = dataInPage[rowIndex];
3891
3928
  const rowId = getId(row, rowIndex);
3892
3929
  const striped = stripe && (stripe === "even" && (rowIndex + 1) % 2 === 0 || stripe === "odd" && (rowIndex + 1) % 2 === 1);
3893
- return /* @__PURE__ */ import_react25.default.createElement(
3930
+ return /* @__PURE__ */ import_react28.default.createElement(
3894
3931
  VirtualizedTableRow,
3895
3932
  {
3896
3933
  key: virtualizedRow.key,
@@ -3908,7 +3945,7 @@ function Component(props, apiRef) {
3908
3945
  transform: `translateY(${virtualizedRow.start - index * virtualizedRow.size}px)`
3909
3946
  }
3910
3947
  },
3911
- checkboxSelection && /* @__PURE__ */ import_react25.default.createElement(
3948
+ checkboxSelection && /* @__PURE__ */ import_react28.default.createElement(
3912
3949
  "th",
3913
3950
  {
3914
3951
  scope: "row",
@@ -3916,7 +3953,7 @@ function Component(props, apiRef) {
3916
3953
  textAlign: "center"
3917
3954
  }
3918
3955
  },
3919
- /* @__PURE__ */ import_react25.default.createElement(
3956
+ /* @__PURE__ */ import_react28.default.createElement(
3920
3957
  RenderCheckbox,
3921
3958
  {
3922
3959
  onClick: getCheckboxClickHandler(),
@@ -3927,7 +3964,7 @@ function Component(props, apiRef) {
3927
3964
  }
3928
3965
  )
3929
3966
  ),
3930
- /* @__PURE__ */ import_react25.default.createElement(
3967
+ /* @__PURE__ */ import_react28.default.createElement(
3931
3968
  BodyRow2,
3932
3969
  {
3933
3970
  tableId,
@@ -3940,9 +3977,9 @@ function Component(props, apiRef) {
3940
3977
  )
3941
3978
  );
3942
3979
  })
3943
- ), Footer && /* @__PURE__ */ import_react25.default.createElement(Footer, null))
3980
+ ), Footer && /* @__PURE__ */ import_react28.default.createElement(Footer, null))
3944
3981
  ),
3945
- pagination && /* @__PURE__ */ import_react25.default.createElement(
3982
+ pagination && /* @__PURE__ */ import_react28.default.createElement(
3946
3983
  Pagination_default,
3947
3984
  {
3948
3985
  pt: 2,
@@ -3955,16 +3992,16 @@ function Component(props, apiRef) {
3955
3992
  )
3956
3993
  );
3957
3994
  }
3958
- var DataTable = (0, import_react25.forwardRef)(Component);
3995
+ var DataTable = (0, import_react28.forwardRef)(Component);
3959
3996
  DataTable.displayName = "DataTable";
3960
3997
 
3961
3998
  // src/components/DateRangePicker/DateRangePicker.tsx
3962
- var import_react26 = __toESM(require("react"));
3999
+ var import_react29 = __toESM(require("react"));
3963
4000
  var import_react_imask2 = require("react-imask");
3964
4001
  var import_CalendarToday2 = __toESM(require("@mui/icons-material/CalendarToday"));
3965
- var import_joy34 = require("@mui/joy");
4002
+ var import_joy36 = require("@mui/joy");
3966
4003
  var import_base3 = require("@mui/base");
3967
- var CalendarButton2 = (0, import_joy34.styled)(IconButton_default, {
4004
+ var CalendarButton2 = (0, import_joy36.styled)(IconButton_default, {
3968
4005
  name: "DateRangePicker",
3969
4006
  slot: "calendarButton"
3970
4007
  })(({ theme }) => ({
@@ -3974,13 +4011,13 @@ var CalendarButton2 = (0, import_joy34.styled)(IconButton_default, {
3974
4011
  outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar("palette-focusVisible")}`
3975
4012
  }
3976
4013
  }));
3977
- var StyledPopper2 = (0, import_joy34.styled)(import_base3.Popper, {
4014
+ var StyledPopper2 = (0, import_joy36.styled)(import_base3.Popper, {
3978
4015
  name: "DateRangePicker",
3979
4016
  slot: "popper"
3980
4017
  })(({ theme }) => ({
3981
4018
  zIndex: theme.zIndex.tooltip
3982
4019
  }));
3983
- var CalendarSheet2 = (0, import_joy34.styled)(Sheet_default, {
4020
+ var CalendarSheet2 = (0, import_joy36.styled)(Sheet_default, {
3984
4021
  name: "DateRangePicker",
3985
4022
  slot: "sheet",
3986
4023
  overridesResolver: (props, styles) => styles.root
@@ -3990,7 +4027,7 @@ var CalendarSheet2 = (0, import_joy34.styled)(Sheet_default, {
3990
4027
  boxShadow: theme.shadow.md,
3991
4028
  borderRadius: theme.radius.md
3992
4029
  }));
3993
- var DateRangePickerRoot = (0, import_joy34.styled)("div", {
4030
+ var DateRangePickerRoot = (0, import_joy36.styled)("div", {
3994
4031
  name: "DateRangePicker",
3995
4032
  slot: "root",
3996
4033
  overridesResolver: (props, styles) => styles.root
@@ -4060,9 +4097,9 @@ var parseDates = (str, format) => {
4060
4097
  var formatToPattern2 = (format) => {
4061
4098
  return `${format} - ${format}`.replace(/YYYY/g, "Y").replace(/MM/g, "M").replace(/DD/g, "D").replace(/[^YMD\s]/g, (match) => `${match}\``);
4062
4099
  };
4063
- var TextMaskAdapter5 = import_react26.default.forwardRef(function TextMaskAdapter6(props, ref) {
4100
+ var TextMaskAdapter5 = import_react29.default.forwardRef(function TextMaskAdapter6(props, ref) {
4064
4101
  const { onChange, format, ...other } = props;
4065
- return /* @__PURE__ */ import_react26.default.createElement(
4102
+ return /* @__PURE__ */ import_react29.default.createElement(
4066
4103
  import_react_imask2.IMaskInput,
4067
4104
  {
4068
4105
  ...other,
@@ -4096,8 +4133,8 @@ var TextMaskAdapter5 = import_react26.default.forwardRef(function TextMaskAdapte
4096
4133
  }
4097
4134
  );
4098
4135
  });
4099
- var DateRangePicker = (0, import_react26.forwardRef)((inProps, ref) => {
4100
- const props = (0, import_joy34.useThemeProps)({ props: inProps, name: "DateRangePicker" });
4136
+ var DateRangePicker = (0, import_react29.forwardRef)((inProps, ref) => {
4137
+ const props = (0, import_joy36.useThemeProps)({ props: inProps, name: "DateRangePicker" });
4101
4138
  const {
4102
4139
  onChange,
4103
4140
  disabled,
@@ -4120,23 +4157,23 @@ var DateRangePicker = (0, import_react26.forwardRef)((inProps, ref) => {
4120
4157
  readOnly,
4121
4158
  ...innerProps
4122
4159
  } = props;
4123
- const innerRef = (0, import_react26.useRef)(null);
4124
- const buttonRef = (0, import_react26.useRef)(null);
4160
+ const innerRef = (0, import_react29.useRef)(null);
4161
+ const buttonRef = (0, import_react29.useRef)(null);
4125
4162
  const [value, setValue] = useControlledState(
4126
4163
  props.value,
4127
4164
  props.defaultValue || "",
4128
- (0, import_react26.useCallback)((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
4165
+ (0, import_react29.useCallback)((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
4129
4166
  );
4130
- const [displayValue, setDisplayValue] = (0, import_react26.useState)(
4167
+ const [displayValue, setDisplayValue] = (0, import_react29.useState)(
4131
4168
  () => value ? formatValueString2(parseDates(value, format), displayFormat) : ""
4132
4169
  );
4133
- const [anchorEl, setAnchorEl] = (0, import_react26.useState)(null);
4170
+ const [anchorEl, setAnchorEl] = (0, import_react29.useState)(null);
4134
4171
  const open = Boolean(anchorEl);
4135
- const calendarValue = (0, import_react26.useMemo)(
4172
+ const calendarValue = (0, import_react29.useMemo)(
4136
4173
  () => value ? parseDates(value, format) : void 0,
4137
4174
  [value, format]
4138
4175
  );
4139
- (0, import_react26.useEffect)(() => {
4176
+ (0, import_react29.useEffect)(() => {
4140
4177
  if (value) {
4141
4178
  try {
4142
4179
  const dates = parseDates(value, format);
@@ -4148,13 +4185,13 @@ var DateRangePicker = (0, import_react26.forwardRef)((inProps, ref) => {
4148
4185
  setDisplayValue("");
4149
4186
  }
4150
4187
  }, [displayFormat, value, format]);
4151
- (0, import_react26.useEffect)(() => {
4188
+ (0, import_react29.useEffect)(() => {
4152
4189
  if (!anchorEl) {
4153
4190
  innerRef.current?.blur();
4154
4191
  }
4155
4192
  }, [anchorEl, innerRef]);
4156
- (0, import_react26.useImperativeHandle)(ref, () => innerRef.current, [innerRef]);
4157
- const handleChange = (0, import_react26.useCallback)(
4193
+ (0, import_react29.useImperativeHandle)(ref, () => innerRef.current, [innerRef]);
4194
+ const handleChange = (0, import_react29.useCallback)(
4158
4195
  (event) => {
4159
4196
  const value2 = event.target.value;
4160
4197
  setDisplayValue(value2 ? formatValueString2(parseDates(value2, format), displayFormat) : value2);
@@ -4162,7 +4199,7 @@ var DateRangePicker = (0, import_react26.forwardRef)((inProps, ref) => {
4162
4199
  },
4163
4200
  [displayFormat, format, setValue]
4164
4201
  );
4165
- const handleDisplayInputChange = (0, import_react26.useCallback)(
4202
+ const handleDisplayInputChange = (0, import_react29.useCallback)(
4166
4203
  (event) => {
4167
4204
  if (event.target.value === "") {
4168
4205
  handleChange({
@@ -4187,14 +4224,14 @@ var DateRangePicker = (0, import_react26.forwardRef)((inProps, ref) => {
4187
4224
  },
4188
4225
  [displayFormat, format, handleChange, props.name]
4189
4226
  );
4190
- const handleCalendarToggle = (0, import_react26.useCallback)(
4227
+ const handleCalendarToggle = (0, import_react29.useCallback)(
4191
4228
  (event) => {
4192
4229
  setAnchorEl(anchorEl ? null : event.currentTarget);
4193
4230
  innerRef.current?.focus();
4194
4231
  },
4195
4232
  [anchorEl, setAnchorEl, innerRef]
4196
4233
  );
4197
- const handleCalendarChange = (0, import_react26.useCallback)(
4234
+ const handleCalendarChange = (0, import_react29.useCallback)(
4198
4235
  ([date1, date2]) => {
4199
4236
  if (!date1 || !date2) return;
4200
4237
  const formattedValue = formatValueString2([date1, date2], format);
@@ -4208,7 +4245,7 @@ var DateRangePicker = (0, import_react26.forwardRef)((inProps, ref) => {
4208
4245
  },
4209
4246
  [props.value, props.name, onChange, setValue, setAnchorEl, format, displayFormat]
4210
4247
  );
4211
- const handleInputMouseDown = (0, import_react26.useCallback)(
4248
+ const handleInputMouseDown = (0, import_react29.useCallback)(
4212
4249
  (event) => {
4213
4250
  if (inputReadOnly) {
4214
4251
  event.preventDefault();
@@ -4217,7 +4254,7 @@ var DateRangePicker = (0, import_react26.forwardRef)((inProps, ref) => {
4217
4254
  },
4218
4255
  [inputReadOnly, buttonRef]
4219
4256
  );
4220
- return /* @__PURE__ */ import_react26.default.createElement(DateRangePickerRoot, null, /* @__PURE__ */ import_react26.default.createElement(import_base3.FocusTrap, { open: true }, /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement(
4257
+ return /* @__PURE__ */ import_react29.default.createElement(DateRangePickerRoot, null, /* @__PURE__ */ import_react29.default.createElement(import_base3.FocusTrap, { open: true }, /* @__PURE__ */ import_react29.default.createElement(import_react29.default.Fragment, null, /* @__PURE__ */ import_react29.default.createElement(
4221
4258
  Input_default,
4222
4259
  {
4223
4260
  ...innerProps,
@@ -4245,7 +4282,7 @@ var DateRangePicker = (0, import_react26.forwardRef)((inProps, ref) => {
4245
4282
  error,
4246
4283
  className,
4247
4284
  sx,
4248
- endDecorator: /* @__PURE__ */ import_react26.default.createElement(
4285
+ endDecorator: /* @__PURE__ */ import_react29.default.createElement(
4249
4286
  CalendarButton2,
4250
4287
  {
4251
4288
  ref: buttonRef,
@@ -4257,13 +4294,13 @@ var DateRangePicker = (0, import_react26.forwardRef)((inProps, ref) => {
4257
4294
  "aria-expanded": open,
4258
4295
  disabled
4259
4296
  },
4260
- /* @__PURE__ */ import_react26.default.createElement(import_CalendarToday2.default, null)
4297
+ /* @__PURE__ */ import_react29.default.createElement(import_CalendarToday2.default, null)
4261
4298
  ),
4262
4299
  label,
4263
4300
  helperText,
4264
4301
  readOnly: readOnly || inputReadOnly
4265
4302
  }
4266
- ), open && /* @__PURE__ */ import_react26.default.createElement(import_base3.ClickAwayListener, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ import_react26.default.createElement(
4303
+ ), open && /* @__PURE__ */ import_react29.default.createElement(import_base3.ClickAwayListener, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ import_react29.default.createElement(
4267
4304
  StyledPopper2,
4268
4305
  {
4269
4306
  id: "date-range-picker-popper",
@@ -4282,7 +4319,7 @@ var DateRangePicker = (0, import_react26.forwardRef)((inProps, ref) => {
4282
4319
  "aria-label": "Calendar Tooltip",
4283
4320
  "aria-expanded": open
4284
4321
  },
4285
- /* @__PURE__ */ import_react26.default.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react26.default.createElement(
4322
+ /* @__PURE__ */ import_react29.default.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react29.default.createElement(
4286
4323
  Calendar_default,
4287
4324
  {
4288
4325
  rangeSelection: true,
@@ -4293,14 +4330,14 @@ var DateRangePicker = (0, import_react26.forwardRef)((inProps, ref) => {
4293
4330
  disableFuture,
4294
4331
  disablePast
4295
4332
  }
4296
- ), !hideClearButton && /* @__PURE__ */ import_react26.default.createElement(
4333
+ ), !hideClearButton && /* @__PURE__ */ import_react29.default.createElement(
4297
4334
  DialogActions_default,
4298
4335
  {
4299
4336
  sx: {
4300
4337
  p: 1
4301
4338
  }
4302
4339
  },
4303
- /* @__PURE__ */ import_react26.default.createElement(
4340
+ /* @__PURE__ */ import_react29.default.createElement(
4304
4341
  Button_default,
4305
4342
  {
4306
4343
  size,
@@ -4320,17 +4357,17 @@ var DateRangePicker = (0, import_react26.forwardRef)((inProps, ref) => {
4320
4357
  DateRangePicker.displayName = "DateRangePicker";
4321
4358
 
4322
4359
  // src/components/Drawer/Drawer.tsx
4323
- var import_react27 = __toESM(require("react"));
4324
- var import_joy35 = require("@mui/joy");
4325
- var import_framer_motion22 = require("framer-motion");
4326
- var MotionDrawer = (0, import_framer_motion22.motion)(import_joy35.Drawer);
4327
- var StyledDrawer = (0, import_joy35.styled)(MotionDrawer)(({ theme, size = "md" }) => ({
4360
+ var import_react30 = __toESM(require("react"));
4361
+ var import_joy37 = require("@mui/joy");
4362
+ var import_framer_motion23 = require("framer-motion");
4363
+ var MotionDrawer = (0, import_framer_motion23.motion)(import_joy37.Drawer);
4364
+ var StyledDrawer = (0, import_joy37.styled)(MotionDrawer)(({ theme, size = "md" }) => ({
4328
4365
  "--Drawer-horizontalSize": {
4329
4366
  sm: "360px",
4330
4367
  md: "600px",
4331
4368
  lg: "900px"
4332
4369
  }[size],
4333
- [`& .${import_joy35.drawerClasses.content}`]: {
4370
+ [`& .${import_joy37.drawerClasses.content}`]: {
4334
4371
  [theme.breakpoints.down("md")]: {
4335
4372
  width: "100%"
4336
4373
  }
@@ -4338,15 +4375,15 @@ var StyledDrawer = (0, import_joy35.styled)(MotionDrawer)(({ theme, size = "md"
4338
4375
  }));
4339
4376
  var Drawer = (props) => {
4340
4377
  const { children, ...innerProps } = props;
4341
- return /* @__PURE__ */ import_react27.default.createElement(StyledDrawer, { ...innerProps }, children);
4378
+ return /* @__PURE__ */ import_react30.default.createElement(StyledDrawer, { ...innerProps }, children);
4342
4379
  };
4343
4380
  Drawer.displayName = "Drawer";
4344
4381
 
4345
4382
  // src/components/DialogContent/DialogContent.tsx
4346
- var import_joy36 = require("@mui/joy");
4347
- var import_framer_motion23 = require("framer-motion");
4348
- var MotionDialogContent = (0, import_framer_motion23.motion)(import_joy36.DialogContent);
4349
- var StyledDialogContent = (0, import_joy36.styled)(MotionDialogContent)(({ theme }) => ({
4383
+ var import_joy38 = require("@mui/joy");
4384
+ var import_framer_motion24 = require("framer-motion");
4385
+ var MotionDialogContent = (0, import_framer_motion24.motion)(import_joy38.DialogContent);
4386
+ var StyledDialogContent = (0, import_joy38.styled)(MotionDialogContent)(({ theme }) => ({
4350
4387
  padding: theme.spacing(0, 6, 5)
4351
4388
  }));
4352
4389
  var DialogContent = StyledDialogContent;
@@ -4356,10 +4393,10 @@ DialogContent.displayName = "DialogContent";
4356
4393
  var DialogContent_default = DialogContent;
4357
4394
 
4358
4395
  // src/components/DialogTitle/DialogTitle.tsx
4359
- var import_joy37 = require("@mui/joy");
4360
- var import_framer_motion24 = require("framer-motion");
4361
- var MotionDialogTitle = (0, import_framer_motion24.motion)(import_joy37.DialogTitle);
4362
- var StyledDialogTitle = (0, import_joy37.styled)(MotionDialogTitle)(({ theme }) => ({
4396
+ var import_joy39 = require("@mui/joy");
4397
+ var import_framer_motion25 = require("framer-motion");
4398
+ var MotionDialogTitle = (0, import_framer_motion25.motion)(import_joy39.DialogTitle);
4399
+ var StyledDialogTitle = (0, import_joy39.styled)(MotionDialogTitle)(({ theme }) => ({
4363
4400
  padding: theme.spacing(4, 6)
4364
4401
  }));
4365
4402
  var DialogTitle = StyledDialogTitle;
@@ -4369,58 +4406,58 @@ DialogTitle.displayName = "DialogTitle";
4369
4406
  var DialogTitle_default = DialogTitle;
4370
4407
 
4371
4408
  // src/components/DialogFrame/DialogFrame.tsx
4372
- var import_react29 = __toESM(require("react"));
4409
+ var import_react32 = __toESM(require("react"));
4373
4410
 
4374
4411
  // src/components/Modal/Modal.tsx
4375
- var import_react28 = __toESM(require("react"));
4376
- var import_joy38 = require("@mui/joy");
4377
- var import_framer_motion25 = require("framer-motion");
4378
- var MotionModal = (0, import_framer_motion25.motion)(import_joy38.Modal);
4412
+ var import_react31 = __toESM(require("react"));
4413
+ var import_joy40 = require("@mui/joy");
4414
+ var import_framer_motion26 = require("framer-motion");
4415
+ var MotionModal = (0, import_framer_motion26.motion)(import_joy40.Modal);
4379
4416
  var Modal = MotionModal;
4380
4417
  Modal.displayName = "Modal";
4381
- var StyledModalDialog = (0, import_joy38.styled)(import_joy38.ModalDialog)({
4418
+ var StyledModalDialog = (0, import_joy40.styled)(import_joy40.ModalDialog)({
4382
4419
  padding: 0
4383
4420
  });
4384
4421
  var ModalDialog = StyledModalDialog;
4385
4422
  ModalDialog.displayName = "ModalDialog";
4386
- var ModalClose = import_joy38.ModalClose;
4387
- var MotionModalOverflow = (0, import_framer_motion25.motion)(import_joy38.ModalOverflow);
4423
+ var ModalClose = import_joy40.ModalClose;
4424
+ var MotionModalOverflow = (0, import_framer_motion26.motion)(import_joy40.ModalOverflow);
4388
4425
  var ModalOverflow = MotionModalOverflow;
4389
4426
  ModalOverflow.displayName = "ModalOverflow";
4390
4427
  function ModalFrame(props) {
4391
4428
  const { title, children, titleStartDecorator, onClose, ...innerProps } = props;
4392
- return /* @__PURE__ */ import_react28.default.createElement(StyledModalDialog, { ...innerProps }, /* @__PURE__ */ import_react28.default.createElement(ModalClose, { onClick: onClose }), /* @__PURE__ */ import_react28.default.createElement(DialogTitle_default, null, titleStartDecorator, title), /* @__PURE__ */ import_react28.default.createElement(DialogContent_default, null, children));
4429
+ return /* @__PURE__ */ import_react31.default.createElement(StyledModalDialog, { ...innerProps }, /* @__PURE__ */ import_react31.default.createElement(ModalClose, { onClick: onClose }), /* @__PURE__ */ import_react31.default.createElement(DialogTitle_default, null, titleStartDecorator, title), /* @__PURE__ */ import_react31.default.createElement(DialogContent_default, null, children));
4393
4430
  }
4394
4431
  ModalFrame.displayName = "ModalFrame";
4395
4432
 
4396
4433
  // src/components/DialogFrame/DialogFrame.tsx
4397
- var import_joy39 = require("@mui/joy");
4398
- var StyledDialogFrame = (0, import_joy39.styled)(ModalDialog, {
4434
+ var import_joy41 = require("@mui/joy");
4435
+ var StyledDialogFrame = (0, import_joy41.styled)(ModalDialog, {
4399
4436
  name: "Dialog",
4400
4437
  slot: "Root"
4401
4438
  })({
4402
4439
  padding: 0
4403
4440
  });
4404
- var DialogFrame = import_react29.default.forwardRef((props, ref) => {
4441
+ var DialogFrame = import_react32.default.forwardRef((props, ref) => {
4405
4442
  const { title, children, actions, fullscreen, ...innerProps } = props;
4406
- return /* @__PURE__ */ import_react29.default.createElement(StyledDialogFrame, { layout: fullscreen ? "fullscreen" : "center", ref, ...innerProps }, /* @__PURE__ */ import_react29.default.createElement(DialogTitle_default, null, title), /* @__PURE__ */ import_react29.default.createElement(DialogContent_default, null, children), /* @__PURE__ */ import_react29.default.createElement(DialogActions_default, null, actions));
4443
+ return /* @__PURE__ */ import_react32.default.createElement(StyledDialogFrame, { layout: fullscreen ? "fullscreen" : "center", ref, ...innerProps }, /* @__PURE__ */ import_react32.default.createElement(DialogTitle_default, null, title), /* @__PURE__ */ import_react32.default.createElement(DialogContent_default, null, children), /* @__PURE__ */ import_react32.default.createElement(DialogActions_default, null, actions));
4407
4444
  });
4408
4445
  DialogFrame.displayName = "DialogFrame";
4409
4446
 
4410
4447
  // src/components/Divider/Divider.tsx
4411
- var import_react30 = __toESM(require("react"));
4412
- var import_joy40 = require("@mui/joy");
4413
- var import_framer_motion26 = require("framer-motion");
4414
- var MotionDivider = (0, import_framer_motion26.motion)(import_joy40.Divider);
4448
+ var import_react33 = __toESM(require("react"));
4449
+ var import_joy42 = require("@mui/joy");
4450
+ var import_framer_motion27 = require("framer-motion");
4451
+ var MotionDivider = (0, import_framer_motion27.motion)(import_joy42.Divider);
4415
4452
  var Divider = (props) => {
4416
- return /* @__PURE__ */ import_react30.default.createElement(MotionDivider, { ...props });
4453
+ return /* @__PURE__ */ import_react33.default.createElement(MotionDivider, { ...props });
4417
4454
  };
4418
4455
  Divider.displayName = "Divider";
4419
4456
 
4420
4457
  // src/components/InsetDrawer/InsetDrawer.tsx
4421
- var import_joy41 = require("@mui/joy");
4422
- var InsetDrawer = (0, import_joy41.styled)(import_joy41.Drawer)(({ theme }) => ({
4423
- [`& .${import_joy41.drawerClasses.content}`]: {
4458
+ var import_joy43 = require("@mui/joy");
4459
+ var InsetDrawer = (0, import_joy43.styled)(import_joy43.Drawer)(({ theme }) => ({
4460
+ [`& .${import_joy43.drawerClasses.content}`]: {
4424
4461
  backgroundColor: "transparent",
4425
4462
  boxShadow: "none",
4426
4463
  [theme.breakpoints.down("md")]: {
@@ -4434,11 +4471,11 @@ var InsetDrawer = (0, import_joy41.styled)(import_joy41.Drawer)(({ theme }) => (
4434
4471
  }));
4435
4472
 
4436
4473
  // src/components/Grid/Grid.tsx
4437
- var import_joy42 = require("@mui/joy");
4474
+ var import_joy44 = require("@mui/joy");
4438
4475
 
4439
4476
  // src/components/IconMenuButton/IconMenuButton.tsx
4440
- var import_react31 = __toESM(require("react"));
4441
- var import_joy43 = require("@mui/joy");
4477
+ var import_react34 = __toESM(require("react"));
4478
+ var import_joy45 = require("@mui/joy");
4442
4479
  function IconMenuButton(props) {
4443
4480
  const {
4444
4481
  size,
@@ -4451,8 +4488,8 @@ function IconMenuButton(props) {
4451
4488
  placement = "bottom"
4452
4489
  } = props;
4453
4490
  if (!items.length) {
4454
- return /* @__PURE__ */ import_react31.default.createElement(
4455
- import_joy43.IconButton,
4491
+ return /* @__PURE__ */ import_react34.default.createElement(
4492
+ import_joy45.IconButton,
4456
4493
  {
4457
4494
  component: props.buttonComponent ?? "button",
4458
4495
  size,
@@ -4465,10 +4502,10 @@ function IconMenuButton(props) {
4465
4502
  icon
4466
4503
  );
4467
4504
  }
4468
- return /* @__PURE__ */ import_react31.default.createElement(Dropdown_default, null, /* @__PURE__ */ import_react31.default.createElement(
4469
- import_joy43.MenuButton,
4505
+ return /* @__PURE__ */ import_react34.default.createElement(Dropdown_default, null, /* @__PURE__ */ import_react34.default.createElement(
4506
+ import_joy45.MenuButton,
4470
4507
  {
4471
- slots: { root: import_joy43.IconButton },
4508
+ slots: { root: import_joy45.IconButton },
4472
4509
  slotProps: {
4473
4510
  root: {
4474
4511
  component: props.buttonComponent ?? "button",
@@ -4482,19 +4519,19 @@ function IconMenuButton(props) {
4482
4519
  }
4483
4520
  },
4484
4521
  icon
4485
- ), /* @__PURE__ */ import_react31.default.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ import_react31.default.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
4522
+ ), /* @__PURE__ */ import_react34.default.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ import_react34.default.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
4486
4523
  }
4487
4524
  IconMenuButton.displayName = "IconMenuButton";
4488
4525
 
4489
4526
  // src/components/Markdown/Markdown.tsx
4490
- var import_react32 = __toESM(require("react"));
4491
- var import_joy44 = require("@mui/joy");
4492
- var import_joy45 = require("@mui/joy");
4527
+ var import_react35 = __toESM(require("react"));
4528
+ var import_joy46 = require("@mui/joy");
4529
+ var import_joy47 = require("@mui/joy");
4493
4530
  var import_remark_gfm = __toESM(require("remark-gfm"));
4494
- var LazyReactMarkdown = (0, import_react32.lazy)(() => import("react-markdown"));
4531
+ var LazyReactMarkdown = (0, import_react35.lazy)(() => import("react-markdown"));
4495
4532
  var Markdown = (props) => {
4496
- const [rehypeAccent2, setRehypeAccent] = (0, import_react32.useState)(null);
4497
- (0, import_react32.useEffect)(() => {
4533
+ const [rehypeAccent2, setRehypeAccent] = (0, import_react35.useState)(null);
4534
+ (0, import_react35.useEffect)(() => {
4498
4535
  const loadRehypeAccent = async () => {
4499
4536
  const module2 = await Promise.resolve().then(() => (init_rehype_accent(), rehype_accent_exports));
4500
4537
  setRehypeAccent(() => module2.rehypeAccent);
@@ -4516,12 +4553,12 @@ var Markdown = (props) => {
4516
4553
  if (!rehypeAccent2) {
4517
4554
  return null;
4518
4555
  }
4519
- return /* @__PURE__ */ import_react32.default.createElement(Typography, { component: "div", color, textColor, level: defaultLevel, ...innerProps }, /* @__PURE__ */ import_react32.default.createElement(
4520
- import_react32.Suspense,
4556
+ return /* @__PURE__ */ import_react35.default.createElement(Typography, { component: "div", color, textColor, level: defaultLevel, ...innerProps }, /* @__PURE__ */ import_react35.default.createElement(
4557
+ import_react35.Suspense,
4521
4558
  {
4522
- fallback: fallback || /* @__PURE__ */ import_react32.default.createElement(Typography, null, /* @__PURE__ */ import_react32.default.createElement(import_joy44.Skeleton, null, content || ""))
4559
+ fallback: fallback || /* @__PURE__ */ import_react35.default.createElement(Typography, null, /* @__PURE__ */ import_react35.default.createElement(import_joy46.Skeleton, null, content || ""))
4523
4560
  },
4524
- /* @__PURE__ */ import_react32.default.createElement(
4561
+ /* @__PURE__ */ import_react35.default.createElement(
4525
4562
  LazyReactMarkdown,
4526
4563
  {
4527
4564
  ...markdownOptions,
@@ -4529,15 +4566,15 @@ var Markdown = (props) => {
4529
4566
  rehypePlugins: [[rehypeAccent2, { accentColor }]],
4530
4567
  remarkPlugins: [import_remark_gfm.default],
4531
4568
  components: {
4532
- h1: ({ children }) => /* @__PURE__ */ import_react32.default.createElement(Typography, { color, textColor, level: "h1" }, children),
4533
- h2: ({ children }) => /* @__PURE__ */ import_react32.default.createElement(Typography, { color, textColor, level: "h2" }, children),
4534
- h3: ({ children }) => /* @__PURE__ */ import_react32.default.createElement(Typography, { color, textColor, level: "h3" }, children),
4535
- h4: ({ children }) => /* @__PURE__ */ import_react32.default.createElement(Typography, { color, textColor, level: "h4" }, children),
4536
- p: ({ children, node }) => /* @__PURE__ */ import_react32.default.createElement(Typography, { color, textColor, level: defaultLevel, ...node?.properties }, children),
4537
- a: ({ children, href }) => /* @__PURE__ */ import_react32.default.createElement(import_joy45.Link, { href, target: defaultLinkAction }, children),
4538
- hr: () => /* @__PURE__ */ import_react32.default.createElement(Divider, null),
4539
- b: ({ children }) => /* @__PURE__ */ import_react32.default.createElement(Typography, { fontWeight: boldFontWeight }, children),
4540
- strong: ({ children }) => /* @__PURE__ */ import_react32.default.createElement(Typography, { fontWeight: boldFontWeight }, children),
4569
+ h1: ({ children }) => /* @__PURE__ */ import_react35.default.createElement(Typography, { color, textColor, level: "h1" }, children),
4570
+ h2: ({ children }) => /* @__PURE__ */ import_react35.default.createElement(Typography, { color, textColor, level: "h2" }, children),
4571
+ h3: ({ children }) => /* @__PURE__ */ import_react35.default.createElement(Typography, { color, textColor, level: "h3" }, children),
4572
+ h4: ({ children }) => /* @__PURE__ */ import_react35.default.createElement(Typography, { color, textColor, level: "h4" }, children),
4573
+ p: ({ children, node }) => /* @__PURE__ */ import_react35.default.createElement(Typography, { color, textColor, level: defaultLevel, ...node?.properties }, children),
4574
+ a: ({ children, href }) => /* @__PURE__ */ import_react35.default.createElement(import_joy47.Link, { href, target: defaultLinkAction }, children),
4575
+ hr: () => /* @__PURE__ */ import_react35.default.createElement(Divider, null),
4576
+ b: ({ children }) => /* @__PURE__ */ import_react35.default.createElement(Typography, { fontWeight: boldFontWeight }, children),
4577
+ strong: ({ children }) => /* @__PURE__ */ import_react35.default.createElement(Typography, { fontWeight: boldFontWeight }, children),
4541
4578
  ...markdownOptions?.components
4542
4579
  }
4543
4580
  }
@@ -4547,8 +4584,8 @@ var Markdown = (props) => {
4547
4584
  Markdown.displayName = "Markdown";
4548
4585
 
4549
4586
  // src/components/MenuButton/MenuButton.tsx
4550
- var import_react33 = __toESM(require("react"));
4551
- var import_joy46 = require("@mui/joy");
4587
+ var import_react36 = __toESM(require("react"));
4588
+ var import_joy48 = require("@mui/joy");
4552
4589
  var import_ExpandMore = __toESM(require("@mui/icons-material/ExpandMore"));
4553
4590
  function MenuButton(props) {
4554
4591
  const {
@@ -4565,8 +4602,8 @@ function MenuButton(props) {
4565
4602
  placement = "bottom"
4566
4603
  } = props;
4567
4604
  if (!items.length) {
4568
- return /* @__PURE__ */ import_react33.default.createElement(
4569
- import_joy46.Button,
4605
+ return /* @__PURE__ */ import_react36.default.createElement(
4606
+ import_joy48.Button,
4570
4607
  {
4571
4608
  component: props.buttonComponent ?? "button",
4572
4609
  size,
@@ -4576,13 +4613,13 @@ function MenuButton(props) {
4576
4613
  loading,
4577
4614
  startDecorator,
4578
4615
  ...props.buttonComponentProps ?? {},
4579
- endDecorator: showIcon ? /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, endDecorator, /* @__PURE__ */ import_react33.default.createElement(import_ExpandMore.default, null)) : /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, endDecorator)
4616
+ endDecorator: showIcon ? /* @__PURE__ */ import_react36.default.createElement(import_react36.default.Fragment, null, endDecorator, /* @__PURE__ */ import_react36.default.createElement(import_ExpandMore.default, null)) : /* @__PURE__ */ import_react36.default.createElement(import_react36.default.Fragment, null, endDecorator)
4580
4617
  },
4581
4618
  buttonText
4582
4619
  );
4583
4620
  }
4584
- return /* @__PURE__ */ import_react33.default.createElement(Dropdown_default, null, /* @__PURE__ */ import_react33.default.createElement(
4585
- import_joy46.MenuButton,
4621
+ return /* @__PURE__ */ import_react36.default.createElement(Dropdown_default, null, /* @__PURE__ */ import_react36.default.createElement(
4622
+ import_joy48.MenuButton,
4586
4623
  {
4587
4624
  component: props.buttonComponent ?? "button",
4588
4625
  size,
@@ -4592,25 +4629,25 @@ function MenuButton(props) {
4592
4629
  loading,
4593
4630
  startDecorator,
4594
4631
  ...props.buttonComponentProps ?? {},
4595
- endDecorator: showIcon ? /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, endDecorator, /* @__PURE__ */ import_react33.default.createElement(import_ExpandMore.default, null)) : /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, endDecorator)
4632
+ endDecorator: showIcon ? /* @__PURE__ */ import_react36.default.createElement(import_react36.default.Fragment, null, endDecorator, /* @__PURE__ */ import_react36.default.createElement(import_ExpandMore.default, null)) : /* @__PURE__ */ import_react36.default.createElement(import_react36.default.Fragment, null, endDecorator)
4596
4633
  },
4597
4634
  buttonText
4598
- ), /* @__PURE__ */ import_react33.default.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ import_react33.default.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
4635
+ ), /* @__PURE__ */ import_react36.default.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ import_react36.default.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
4599
4636
  }
4600
4637
  MenuButton.displayName = "MenuButton";
4601
4638
 
4602
4639
  // src/components/MonthPicker/MonthPicker.tsx
4603
- var import_react34 = __toESM(require("react"));
4640
+ var import_react37 = __toESM(require("react"));
4604
4641
  var import_CalendarToday3 = __toESM(require("@mui/icons-material/CalendarToday"));
4605
- var import_joy47 = require("@mui/joy");
4642
+ var import_joy49 = require("@mui/joy");
4606
4643
  var import_base4 = require("@mui/base");
4607
- var StyledPopper3 = (0, import_joy47.styled)(import_base4.Popper, {
4644
+ var StyledPopper3 = (0, import_joy49.styled)(import_base4.Popper, {
4608
4645
  name: "MonthPicker",
4609
4646
  slot: "popper"
4610
4647
  })(({ theme }) => ({
4611
4648
  zIndex: theme.zIndex.tooltip
4612
4649
  }));
4613
- var CalendarSheet3 = (0, import_joy47.styled)(Sheet_default, {
4650
+ var CalendarSheet3 = (0, import_joy49.styled)(Sheet_default, {
4614
4651
  name: "MonthPicker",
4615
4652
  slot: "sheet",
4616
4653
  overridesResolver: (props, styles) => styles.root
@@ -4619,7 +4656,7 @@ var CalendarSheet3 = (0, import_joy47.styled)(Sheet_default, {
4619
4656
  boxShadow: theme.shadow.md,
4620
4657
  borderRadius: theme.radius.md
4621
4658
  }));
4622
- var MonthPickerRoot = (0, import_joy47.styled)("div", {
4659
+ var MonthPickerRoot = (0, import_joy49.styled)("div", {
4623
4660
  name: "MonthPicker",
4624
4661
  slot: "root",
4625
4662
  overridesResolver: (props, styles) => styles.root
@@ -4655,8 +4692,8 @@ function parseDate3(dateString, format) {
4655
4692
  const result = new Date(year, month, day);
4656
4693
  return result;
4657
4694
  }
4658
- var MonthPicker = (0, import_react34.forwardRef)((inProps, ref) => {
4659
- const props = (0, import_joy47.useThemeProps)({ props: inProps, name: "MonthPicker" });
4695
+ var MonthPicker = (0, import_react37.forwardRef)((inProps, ref) => {
4696
+ const props = (0, import_joy49.useThemeProps)({ props: inProps, name: "MonthPicker" });
4660
4697
  const {
4661
4698
  onChange,
4662
4699
  disabled,
@@ -4682,14 +4719,14 @@ var MonthPicker = (0, import_react34.forwardRef)((inProps, ref) => {
4682
4719
  locale,
4683
4720
  ...innerProps
4684
4721
  } = props;
4685
- const innerRef = (0, import_react34.useRef)(null);
4686
- const buttonRef = (0, import_react34.useRef)(null);
4722
+ const innerRef = (0, import_react37.useRef)(null);
4723
+ const buttonRef = (0, import_react37.useRef)(null);
4687
4724
  const [value, setValue, isControlled] = useControlledState(
4688
4725
  props.value,
4689
4726
  props.defaultValue || "",
4690
- (0, import_react34.useCallback)((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
4727
+ (0, import_react37.useCallback)((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
4691
4728
  );
4692
- const getFormattedDisplayValue = (0, import_react34.useCallback)(
4729
+ const getFormattedDisplayValue = (0, import_react37.useCallback)(
4693
4730
  (inputValue) => {
4694
4731
  if (!inputValue) return "";
4695
4732
  try {
@@ -4700,19 +4737,19 @@ var MonthPicker = (0, import_react34.forwardRef)((inProps, ref) => {
4700
4737
  },
4701
4738
  [format, displayFormat, locale]
4702
4739
  );
4703
- const [displayValue, setDisplayValue] = (0, import_react34.useState)(() => getFormattedDisplayValue(value));
4704
- const [anchorEl, setAnchorEl] = (0, import_react34.useState)(null);
4740
+ const [displayValue, setDisplayValue] = (0, import_react37.useState)(() => getFormattedDisplayValue(value));
4741
+ const [anchorEl, setAnchorEl] = (0, import_react37.useState)(null);
4705
4742
  const open = Boolean(anchorEl);
4706
- (0, import_react34.useEffect)(() => {
4743
+ (0, import_react37.useEffect)(() => {
4707
4744
  if (!anchorEl) {
4708
4745
  innerRef.current?.blur();
4709
4746
  }
4710
4747
  }, [anchorEl, innerRef]);
4711
- (0, import_react34.useImperativeHandle)(ref, () => innerRef.current, [innerRef]);
4712
- (0, import_react34.useEffect)(() => {
4748
+ (0, import_react37.useImperativeHandle)(ref, () => innerRef.current, [innerRef]);
4749
+ (0, import_react37.useEffect)(() => {
4713
4750
  setDisplayValue(getFormattedDisplayValue(value));
4714
4751
  }, [value, getFormattedDisplayValue]);
4715
- const handleChange = (0, import_react34.useCallback)(
4752
+ const handleChange = (0, import_react37.useCallback)(
4716
4753
  (event) => {
4717
4754
  const newValue = event.target.value;
4718
4755
  setValue(newValue);
@@ -4722,21 +4759,21 @@ var MonthPicker = (0, import_react34.forwardRef)((inProps, ref) => {
4722
4759
  },
4723
4760
  [setValue, getFormattedDisplayValue, isControlled]
4724
4761
  );
4725
- const handleCalendarToggle = (0, import_react34.useCallback)(
4762
+ const handleCalendarToggle = (0, import_react37.useCallback)(
4726
4763
  (event) => {
4727
4764
  setAnchorEl(anchorEl ? null : event.currentTarget);
4728
4765
  innerRef.current?.focus();
4729
4766
  },
4730
4767
  [anchorEl, setAnchorEl, innerRef]
4731
4768
  );
4732
- const handleInputMouseDown = (0, import_react34.useCallback)(
4769
+ const handleInputMouseDown = (0, import_react37.useCallback)(
4733
4770
  (event) => {
4734
4771
  event.preventDefault();
4735
4772
  buttonRef.current?.focus();
4736
4773
  },
4737
4774
  [buttonRef]
4738
4775
  );
4739
- return /* @__PURE__ */ import_react34.default.createElement(MonthPickerRoot, null, /* @__PURE__ */ import_react34.default.createElement(import_base4.FocusTrap, { open: true }, /* @__PURE__ */ import_react34.default.createElement(import_react34.default.Fragment, null, /* @__PURE__ */ import_react34.default.createElement(
4776
+ return /* @__PURE__ */ import_react37.default.createElement(MonthPickerRoot, null, /* @__PURE__ */ import_react37.default.createElement(import_base4.FocusTrap, { open: true }, /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, /* @__PURE__ */ import_react37.default.createElement(
4740
4777
  Input_default,
4741
4778
  {
4742
4779
  ...innerProps,
@@ -4766,7 +4803,7 @@ var MonthPicker = (0, import_react34.forwardRef)((inProps, ref) => {
4766
4803
  // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
4767
4804
  fontFamily: "monospace"
4768
4805
  },
4769
- endDecorator: /* @__PURE__ */ import_react34.default.createElement(
4806
+ endDecorator: /* @__PURE__ */ import_react37.default.createElement(
4770
4807
  IconButton_default,
4771
4808
  {
4772
4809
  ref: buttonRef,
@@ -4778,12 +4815,12 @@ var MonthPicker = (0, import_react34.forwardRef)((inProps, ref) => {
4778
4815
  "aria-expanded": open,
4779
4816
  disabled
4780
4817
  },
4781
- /* @__PURE__ */ import_react34.default.createElement(import_CalendarToday3.default, null)
4818
+ /* @__PURE__ */ import_react37.default.createElement(import_CalendarToday3.default, null)
4782
4819
  ),
4783
4820
  label,
4784
4821
  helperText
4785
4822
  }
4786
- ), open && /* @__PURE__ */ import_react34.default.createElement(import_base4.ClickAwayListener, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ import_react34.default.createElement(
4823
+ ), open && /* @__PURE__ */ import_react37.default.createElement(import_base4.ClickAwayListener, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ import_react37.default.createElement(
4787
4824
  StyledPopper3,
4788
4825
  {
4789
4826
  id: "month-picker-popper",
@@ -4802,7 +4839,7 @@ var MonthPicker = (0, import_react34.forwardRef)((inProps, ref) => {
4802
4839
  "aria-label": "Calendar Tooltip",
4803
4840
  "aria-expanded": open
4804
4841
  },
4805
- /* @__PURE__ */ import_react34.default.createElement(CalendarSheet3, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react34.default.createElement(
4842
+ /* @__PURE__ */ import_react37.default.createElement(CalendarSheet3, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react37.default.createElement(
4806
4843
  Calendar_default,
4807
4844
  {
4808
4845
  view: "month",
@@ -4823,14 +4860,14 @@ var MonthPicker = (0, import_react34.forwardRef)((inProps, ref) => {
4823
4860
  disablePast,
4824
4861
  locale
4825
4862
  }
4826
- ), /* @__PURE__ */ import_react34.default.createElement(
4863
+ ), /* @__PURE__ */ import_react37.default.createElement(
4827
4864
  DialogActions_default,
4828
4865
  {
4829
4866
  sx: {
4830
4867
  p: 1
4831
4868
  }
4832
4869
  },
4833
- /* @__PURE__ */ import_react34.default.createElement(
4870
+ /* @__PURE__ */ import_react37.default.createElement(
4834
4871
  Button_default,
4835
4872
  {
4836
4873
  size,
@@ -4853,18 +4890,18 @@ var MonthPicker = (0, import_react34.forwardRef)((inProps, ref) => {
4853
4890
  });
4854
4891
 
4855
4892
  // src/components/MonthRangePicker/MonthRangePicker.tsx
4856
- var import_react35 = __toESM(require("react"));
4893
+ var import_react38 = __toESM(require("react"));
4857
4894
  var import_react_imask3 = require("react-imask");
4858
4895
  var import_CalendarToday4 = __toESM(require("@mui/icons-material/CalendarToday"));
4859
- var import_joy48 = require("@mui/joy");
4896
+ var import_joy50 = require("@mui/joy");
4860
4897
  var import_base5 = require("@mui/base");
4861
- var StyledPopper4 = (0, import_joy48.styled)(import_base5.Popper, {
4898
+ var StyledPopper4 = (0, import_joy50.styled)(import_base5.Popper, {
4862
4899
  name: "MonthRangePicker",
4863
4900
  slot: "popper"
4864
4901
  })(({ theme }) => ({
4865
4902
  zIndex: theme.zIndex.tooltip
4866
4903
  }));
4867
- var CalendarSheet4 = (0, import_joy48.styled)(Sheet_default, {
4904
+ var CalendarSheet4 = (0, import_joy50.styled)(Sheet_default, {
4868
4905
  name: "MonthRangePicker",
4869
4906
  slot: "sheet",
4870
4907
  overridesResolver: (props, styles) => styles.root
@@ -4874,7 +4911,7 @@ var CalendarSheet4 = (0, import_joy48.styled)(Sheet_default, {
4874
4911
  boxShadow: theme.shadow.md,
4875
4912
  borderRadius: theme.radius.md
4876
4913
  }));
4877
- var MonthRangePickerRoot = (0, import_joy48.styled)("div", {
4914
+ var MonthRangePickerRoot = (0, import_joy50.styled)("div", {
4878
4915
  name: "MonthRangePicker",
4879
4916
  slot: "root",
4880
4917
  overridesResolver: (props, styles) => styles.root
@@ -4911,9 +4948,9 @@ var parseDates2 = (str) => {
4911
4948
  var formatToPattern3 = (format) => {
4912
4949
  return `${format} - ${format}`.replace(/YYYY/g, "Y").replace(/MM/g, "m").replace(/[^YMm\s]/g, (match) => `${match}\``);
4913
4950
  };
4914
- var TextMaskAdapter7 = import_react35.default.forwardRef(function TextMaskAdapter8(props, ref) {
4951
+ var TextMaskAdapter7 = import_react38.default.forwardRef(function TextMaskAdapter8(props, ref) {
4915
4952
  const { onChange, format, ...other } = props;
4916
- return /* @__PURE__ */ import_react35.default.createElement(
4953
+ return /* @__PURE__ */ import_react38.default.createElement(
4917
4954
  import_react_imask3.IMaskInput,
4918
4955
  {
4919
4956
  ...other,
@@ -4941,8 +4978,8 @@ var TextMaskAdapter7 = import_react35.default.forwardRef(function TextMaskAdapte
4941
4978
  }
4942
4979
  );
4943
4980
  });
4944
- var MonthRangePicker = (0, import_react35.forwardRef)((inProps, ref) => {
4945
- const props = (0, import_joy48.useThemeProps)({ props: inProps, name: "MonthRangePicker" });
4981
+ var MonthRangePicker = (0, import_react38.forwardRef)((inProps, ref) => {
4982
+ const props = (0, import_joy50.useThemeProps)({ props: inProps, name: "MonthRangePicker" });
4946
4983
  const {
4947
4984
  onChange,
4948
4985
  disabled,
@@ -4961,35 +4998,35 @@ var MonthRangePicker = (0, import_react35.forwardRef)((inProps, ref) => {
4961
4998
  size,
4962
4999
  ...innerProps
4963
5000
  } = props;
4964
- const innerRef = (0, import_react35.useRef)(null);
5001
+ const innerRef = (0, import_react38.useRef)(null);
4965
5002
  const [value, setValue] = useControlledState(
4966
5003
  props.value,
4967
5004
  props.defaultValue || "",
4968
- (0, import_react35.useCallback)((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
5005
+ (0, import_react38.useCallback)((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
4969
5006
  );
4970
- const [anchorEl, setAnchorEl] = (0, import_react35.useState)(null);
5007
+ const [anchorEl, setAnchorEl] = (0, import_react38.useState)(null);
4971
5008
  const open = Boolean(anchorEl);
4972
- const calendarValue = (0, import_react35.useMemo)(() => value ? parseDates2(value) : void 0, [value]);
4973
- (0, import_react35.useEffect)(() => {
5009
+ const calendarValue = (0, import_react38.useMemo)(() => value ? parseDates2(value) : void 0, [value]);
5010
+ (0, import_react38.useEffect)(() => {
4974
5011
  if (!anchorEl) {
4975
5012
  innerRef.current?.blur();
4976
5013
  }
4977
5014
  }, [anchorEl, innerRef]);
4978
- (0, import_react35.useImperativeHandle)(ref, () => innerRef.current, [innerRef]);
4979
- const handleChange = (0, import_react35.useCallback)(
5015
+ (0, import_react38.useImperativeHandle)(ref, () => innerRef.current, [innerRef]);
5016
+ const handleChange = (0, import_react38.useCallback)(
4980
5017
  (event) => {
4981
5018
  setValue(event.target.value);
4982
5019
  },
4983
5020
  [setValue]
4984
5021
  );
4985
- const handleCalendarToggle = (0, import_react35.useCallback)(
5022
+ const handleCalendarToggle = (0, import_react38.useCallback)(
4986
5023
  (event) => {
4987
5024
  setAnchorEl(anchorEl ? null : event.currentTarget);
4988
5025
  innerRef.current?.focus();
4989
5026
  },
4990
5027
  [anchorEl, setAnchorEl, innerRef]
4991
5028
  );
4992
- const handleCalendarChange = (0, import_react35.useCallback)(
5029
+ const handleCalendarChange = (0, import_react38.useCallback)(
4993
5030
  ([date1, date2]) => {
4994
5031
  if (!date1 || !date2) return;
4995
5032
  setValue(formatValueString4([date1, date2], format));
@@ -4997,7 +5034,7 @@ var MonthRangePicker = (0, import_react35.forwardRef)((inProps, ref) => {
4997
5034
  },
4998
5035
  [setValue, setAnchorEl, format]
4999
5036
  );
5000
- return /* @__PURE__ */ import_react35.default.createElement(MonthRangePickerRoot, null, /* @__PURE__ */ import_react35.default.createElement(import_base5.FocusTrap, { open: true }, /* @__PURE__ */ import_react35.default.createElement(import_react35.default.Fragment, null, /* @__PURE__ */ import_react35.default.createElement(
5037
+ return /* @__PURE__ */ import_react38.default.createElement(MonthRangePickerRoot, null, /* @__PURE__ */ import_react38.default.createElement(import_base5.FocusTrap, { open: true }, /* @__PURE__ */ import_react38.default.createElement(import_react38.default.Fragment, null, /* @__PURE__ */ import_react38.default.createElement(
5001
5038
  Input_default,
5002
5039
  {
5003
5040
  ...innerProps,
@@ -5019,7 +5056,7 @@ var MonthRangePicker = (0, import_react35.forwardRef)((inProps, ref) => {
5019
5056
  // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
5020
5057
  fontFamily: "monospace"
5021
5058
  },
5022
- endDecorator: /* @__PURE__ */ import_react35.default.createElement(
5059
+ endDecorator: /* @__PURE__ */ import_react38.default.createElement(
5023
5060
  IconButton_default,
5024
5061
  {
5025
5062
  variant: "plain",
@@ -5029,12 +5066,12 @@ var MonthRangePicker = (0, import_react35.forwardRef)((inProps, ref) => {
5029
5066
  "aria-haspopup": "dialog",
5030
5067
  "aria-expanded": open
5031
5068
  },
5032
- /* @__PURE__ */ import_react35.default.createElement(import_CalendarToday4.default, null)
5069
+ /* @__PURE__ */ import_react38.default.createElement(import_CalendarToday4.default, null)
5033
5070
  ),
5034
5071
  label,
5035
5072
  helperText
5036
5073
  }
5037
- ), open && /* @__PURE__ */ import_react35.default.createElement(import_base5.ClickAwayListener, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ import_react35.default.createElement(
5074
+ ), open && /* @__PURE__ */ import_react38.default.createElement(import_base5.ClickAwayListener, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ import_react38.default.createElement(
5038
5075
  StyledPopper4,
5039
5076
  {
5040
5077
  id: "month-range-picker-popper",
@@ -5053,7 +5090,7 @@ var MonthRangePicker = (0, import_react35.forwardRef)((inProps, ref) => {
5053
5090
  "aria-label": "Calendar Tooltip",
5054
5091
  "aria-expanded": open
5055
5092
  },
5056
- /* @__PURE__ */ import_react35.default.createElement(CalendarSheet4, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react35.default.createElement(
5093
+ /* @__PURE__ */ import_react38.default.createElement(CalendarSheet4, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react38.default.createElement(
5057
5094
  Calendar_default,
5058
5095
  {
5059
5096
  view: "month",
@@ -5066,14 +5103,14 @@ var MonthRangePicker = (0, import_react35.forwardRef)((inProps, ref) => {
5066
5103
  disableFuture,
5067
5104
  disablePast
5068
5105
  }
5069
- ), /* @__PURE__ */ import_react35.default.createElement(
5106
+ ), /* @__PURE__ */ import_react38.default.createElement(
5070
5107
  DialogActions_default,
5071
5108
  {
5072
5109
  sx: {
5073
5110
  p: 1
5074
5111
  }
5075
5112
  },
5076
- /* @__PURE__ */ import_react35.default.createElement(
5113
+ /* @__PURE__ */ import_react38.default.createElement(
5077
5114
  Button_default,
5078
5115
  {
5079
5116
  size,
@@ -5092,22 +5129,22 @@ var MonthRangePicker = (0, import_react35.forwardRef)((inProps, ref) => {
5092
5129
  MonthRangePicker.displayName = "MonthRangePicker";
5093
5130
 
5094
5131
  // src/components/NavigationGroup/NavigationGroup.tsx
5095
- var import_react36 = __toESM(require("react"));
5096
- var import_joy49 = require("@mui/joy");
5097
- var AccordionSummary2 = (0, import_joy49.styled)(import_joy49.AccordionSummary, {
5132
+ var import_react39 = __toESM(require("react"));
5133
+ var import_joy51 = require("@mui/joy");
5134
+ var AccordionSummary2 = (0, import_joy51.styled)(import_joy51.AccordionSummary, {
5098
5135
  name: "NavigationGroup",
5099
5136
  slot: "Summary",
5100
5137
  shouldForwardProp: (prop) => prop !== "useIcon" && prop !== "level"
5101
5138
  })(({ theme, useIcon, level }) => ({
5102
- [`& .${import_joy49.accordionSummaryClasses.button}`]: {
5139
+ [`& .${import_joy51.accordionSummaryClasses.button}`]: {
5103
5140
  padding: theme.spacing(4, 6, 4, (useIcon ? 6 : 8) + (level || 0) * 8),
5104
- [`&.${import_joy49.accordionSummaryClasses.expanded}`]: {
5141
+ [`&.${import_joy51.accordionSummaryClasses.expanded}`]: {
5105
5142
  color: theme.palette.primary.plainColor,
5106
5143
  "--Icon-color": theme.palette.primary.plainColor
5107
5144
  }
5108
5145
  }
5109
5146
  }));
5110
- var AccordionDetails2 = (0, import_joy49.styled)(import_joy49.AccordionDetails, {
5147
+ var AccordionDetails2 = (0, import_joy51.styled)(import_joy51.AccordionDetails, {
5111
5148
  name: "NavigationGroup",
5112
5149
  slot: "Details"
5113
5150
  })(({ theme }) => ({
@@ -5116,13 +5153,13 @@ var AccordionDetails2 = (0, import_joy49.styled)(import_joy49.AccordionDetails,
5116
5153
  }));
5117
5154
  function NavigationGroup(props) {
5118
5155
  const { title, children, startDecorator, level, ...rest } = props;
5119
- return /* @__PURE__ */ import_react36.default.createElement(import_joy49.Accordion, { ...rest }, /* @__PURE__ */ import_react36.default.createElement(AccordionSummary2, { useIcon: !!startDecorator, level }, /* @__PURE__ */ import_react36.default.createElement(import_joy49.Stack, { direction: "row", gap: 4 }, startDecorator, title)), /* @__PURE__ */ import_react36.default.createElement(AccordionDetails2, null, children));
5156
+ return /* @__PURE__ */ import_react39.default.createElement(import_joy51.Accordion, { ...rest }, /* @__PURE__ */ import_react39.default.createElement(AccordionSummary2, { useIcon: !!startDecorator, level }, /* @__PURE__ */ import_react39.default.createElement(import_joy51.Stack, { direction: "row", gap: 4 }, startDecorator, title)), /* @__PURE__ */ import_react39.default.createElement(AccordionDetails2, null, children));
5120
5157
  }
5121
5158
 
5122
5159
  // src/components/NavigationItem/NavigationItem.tsx
5123
- var import_react37 = __toESM(require("react"));
5124
- var import_joy50 = require("@mui/joy");
5125
- var ListItemButton = (0, import_joy50.styled)(import_joy50.ListItemButton, {
5160
+ var import_react40 = __toESM(require("react"));
5161
+ var import_joy52 = require("@mui/joy");
5162
+ var ListItemButton = (0, import_joy52.styled)(import_joy52.ListItemButton, {
5126
5163
  name: "NavigationItem",
5127
5164
  slot: "Button",
5128
5165
  shouldForwardProp: (prop) => prop !== "useIcon" && prop !== "level"
@@ -5136,7 +5173,7 @@ var ListItemButton = (0, import_joy50.styled)(import_joy50.ListItemButton, {
5136
5173
  "&:active": {
5137
5174
  backgroundColor: theme.palette.neutral.plainActiveBg
5138
5175
  },
5139
- [`&.${import_joy50.listItemButtonClasses.selected}`]: {
5176
+ [`&.${import_joy52.listItemButtonClasses.selected}`]: {
5140
5177
  color: theme.palette.primary.plainColor,
5141
5178
  "--Icon-color": theme.palette.primary.plainColor,
5142
5179
  "&:not(:hover):not(:active)": {
@@ -5149,7 +5186,7 @@ function NavigationItem(props) {
5149
5186
  const handleClick = () => {
5150
5187
  onClick?.(id);
5151
5188
  };
5152
- return /* @__PURE__ */ import_react37.default.createElement(import_joy50.ListItem, { ...rest }, /* @__PURE__ */ import_react37.default.createElement(
5189
+ return /* @__PURE__ */ import_react40.default.createElement(import_joy52.ListItem, { ...rest }, /* @__PURE__ */ import_react40.default.createElement(
5153
5190
  ListItemButton,
5154
5191
  {
5155
5192
  level,
@@ -5158,21 +5195,21 @@ function NavigationItem(props) {
5158
5195
  "aria-current": selected,
5159
5196
  onClick: handleClick
5160
5197
  },
5161
- startDecorator && /* @__PURE__ */ import_react37.default.createElement(import_joy50.ListItemDecorator, null, startDecorator),
5198
+ startDecorator && /* @__PURE__ */ import_react40.default.createElement(import_joy52.ListItemDecorator, null, startDecorator),
5162
5199
  children
5163
5200
  ));
5164
5201
  }
5165
5202
 
5166
5203
  // src/components/Navigator/Navigator.tsx
5167
- var import_react38 = __toESM(require("react"));
5204
+ var import_react41 = __toESM(require("react"));
5168
5205
  function Navigator(props) {
5169
5206
  const { items, level = 0, onSelect } = props;
5170
5207
  const handleItemClick = (id) => {
5171
5208
  onSelect?.(id);
5172
5209
  };
5173
- return /* @__PURE__ */ import_react38.default.createElement("div", null, items.map((item, index) => {
5210
+ return /* @__PURE__ */ import_react41.default.createElement("div", null, items.map((item, index) => {
5174
5211
  if (item.type === "item") {
5175
- return /* @__PURE__ */ import_react38.default.createElement(
5212
+ return /* @__PURE__ */ import_react41.default.createElement(
5176
5213
  NavigationItem,
5177
5214
  {
5178
5215
  key: item.id,
@@ -5185,7 +5222,7 @@ function Navigator(props) {
5185
5222
  item.title
5186
5223
  );
5187
5224
  } else if (item.type === "group") {
5188
- return /* @__PURE__ */ import_react38.default.createElement(
5225
+ return /* @__PURE__ */ import_react41.default.createElement(
5189
5226
  NavigationGroup,
5190
5227
  {
5191
5228
  key: `${item.title}-${index}`,
@@ -5203,16 +5240,16 @@ function Navigator(props) {
5203
5240
  Navigator.displayName = "Navigator";
5204
5241
 
5205
5242
  // src/components/PercentageInput/PercentageInput.tsx
5206
- var import_react39 = __toESM(require("react"));
5243
+ var import_react42 = __toESM(require("react"));
5207
5244
  var import_react_number_format2 = require("react-number-format");
5208
- var import_joy51 = require("@mui/joy");
5245
+ var import_joy53 = require("@mui/joy");
5209
5246
  var padDecimal = (value, decimalScale) => {
5210
5247
  const [integer, decimal = ""] = `${value}`.split(".");
5211
5248
  return Number(`${integer}${decimal.padEnd(decimalScale, "0")}`);
5212
5249
  };
5213
- var TextMaskAdapter9 = import_react39.default.forwardRef(function TextMaskAdapter10(props, ref) {
5250
+ var TextMaskAdapter9 = import_react42.default.forwardRef(function TextMaskAdapter10(props, ref) {
5214
5251
  const { onChange, min, max, ...innerProps } = props;
5215
- return /* @__PURE__ */ import_react39.default.createElement(
5252
+ return /* @__PURE__ */ import_react42.default.createElement(
5216
5253
  import_react_number_format2.NumericFormat,
5217
5254
  {
5218
5255
  ...innerProps,
@@ -5232,14 +5269,14 @@ var TextMaskAdapter9 = import_react39.default.forwardRef(function TextMaskAdapte
5232
5269
  }
5233
5270
  );
5234
5271
  });
5235
- var PercentageInputRoot = (0, import_joy51.styled)(Input_default, {
5272
+ var PercentageInputRoot = (0, import_joy53.styled)(Input_default, {
5236
5273
  name: "PercentageInput",
5237
5274
  slot: "Root",
5238
5275
  overridesResolver: (props, styles) => styles.root
5239
5276
  })({});
5240
- var PercentageInput = import_react39.default.forwardRef(
5277
+ var PercentageInput = import_react42.default.forwardRef(
5241
5278
  function PercentageInput2(inProps, ref) {
5242
- const props = (0, import_joy51.useThemeProps)({ props: inProps, name: "PercentageInput" });
5279
+ const props = (0, import_joy53.useThemeProps)({ props: inProps, name: "PercentageInput" });
5243
5280
  const {
5244
5281
  name,
5245
5282
  onChange,
@@ -5260,18 +5297,18 @@ var PercentageInput = import_react39.default.forwardRef(
5260
5297
  const [_value, setValue] = useControlledState(
5261
5298
  props.value,
5262
5299
  props.defaultValue,
5263
- (0, import_react39.useCallback)((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
5300
+ (0, import_react42.useCallback)((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
5264
5301
  );
5265
- const [internalError, setInternalError] = (0, import_react39.useState)(
5302
+ const [internalError, setInternalError] = (0, import_react42.useState)(
5266
5303
  max && _value && _value > max || min && _value && _value < min
5267
5304
  );
5268
- const value = (0, import_react39.useMemo)(() => {
5305
+ const value = (0, import_react42.useMemo)(() => {
5269
5306
  if (_value && useMinorUnit) {
5270
5307
  return _value / Math.pow(10, maxDecimalScale);
5271
5308
  }
5272
5309
  return _value;
5273
5310
  }, [_value, useMinorUnit, maxDecimalScale]);
5274
- const handleChange = (0, import_react39.useCallback)(
5311
+ const handleChange = (0, import_react42.useCallback)(
5275
5312
  (event) => {
5276
5313
  if (event.target.value === "") {
5277
5314
  setValue(void 0);
@@ -5288,7 +5325,7 @@ var PercentageInput = import_react39.default.forwardRef(
5288
5325
  },
5289
5326
  [setValue, useMinorUnit, maxDecimalScale, min, max]
5290
5327
  );
5291
- return /* @__PURE__ */ import_react39.default.createElement(
5328
+ return /* @__PURE__ */ import_react42.default.createElement(
5292
5329
  PercentageInputRoot,
5293
5330
  {
5294
5331
  ...innerProps,
@@ -5319,41 +5356,41 @@ var PercentageInput = import_react39.default.forwardRef(
5319
5356
  PercentageInput.displayName = "PercentageInput";
5320
5357
 
5321
5358
  // src/components/Radio/Radio.tsx
5322
- var import_joy52 = require("@mui/joy");
5323
- var import_framer_motion27 = require("framer-motion");
5324
- var MotionRadio = (0, import_framer_motion27.motion)(import_joy52.Radio);
5359
+ var import_joy54 = require("@mui/joy");
5360
+ var import_framer_motion28 = require("framer-motion");
5361
+ var MotionRadio = (0, import_framer_motion28.motion)(import_joy54.Radio);
5325
5362
  var Radio = MotionRadio;
5326
5363
  Radio.displayName = "Radio";
5327
- var MotionRadioGroup = (0, import_framer_motion27.motion)(import_joy52.RadioGroup);
5364
+ var MotionRadioGroup = (0, import_framer_motion28.motion)(import_joy54.RadioGroup);
5328
5365
  var RadioGroup = MotionRadioGroup;
5329
5366
  RadioGroup.displayName = "RadioGroup";
5330
5367
 
5331
5368
  // src/components/RadioList/RadioList.tsx
5332
- var import_react40 = __toESM(require("react"));
5369
+ var import_react43 = __toESM(require("react"));
5333
5370
  function RadioList(props) {
5334
5371
  const { items, ...innerProps } = props;
5335
- return /* @__PURE__ */ import_react40.default.createElement(RadioGroup, { ...innerProps }, items.map((item) => /* @__PURE__ */ import_react40.default.createElement(Radio, { key: `${item.value}`, value: item.value, label: item.label })));
5372
+ return /* @__PURE__ */ import_react43.default.createElement(RadioGroup, { ...innerProps }, items.map((item) => /* @__PURE__ */ import_react43.default.createElement(Radio, { key: `${item.value}`, value: item.value, label: item.label })));
5336
5373
  }
5337
5374
  RadioList.displayName = "RadioList";
5338
5375
 
5339
5376
  // src/components/Stepper/Stepper.tsx
5340
- var import_react41 = __toESM(require("react"));
5341
- var import_joy53 = require("@mui/joy");
5377
+ var import_react44 = __toESM(require("react"));
5378
+ var import_joy55 = require("@mui/joy");
5342
5379
  var import_Check = __toESM(require("@mui/icons-material/Check"));
5343
- var import_framer_motion28 = require("framer-motion");
5344
- var Step = (0, import_joy53.styled)(import_joy53.Step)({});
5380
+ var import_framer_motion29 = require("framer-motion");
5381
+ var Step = (0, import_joy55.styled)(import_joy55.Step)({});
5345
5382
  Step.displayName = "Step";
5346
- var StepIndicator = (0, import_joy53.styled)(import_joy53.StepIndicator)({});
5383
+ var StepIndicator = (0, import_joy55.styled)(import_joy55.StepIndicator)({});
5347
5384
  StepIndicator.displayName = "StepIndicator";
5348
- var StyledStepper = (0, import_joy53.styled)(import_joy53.Stepper)(({ theme }) => ({
5385
+ var StyledStepper = (0, import_joy55.styled)(import_joy55.Stepper)(({ theme }) => ({
5349
5386
  "--StepIndicator-size": "24px",
5350
5387
  "--Step-gap": theme.spacing(2),
5351
5388
  "--joy-palette-success-solidBg": "var(--joy-palette-success-400)",
5352
- [`& .${import_joy53.stepIndicatorClasses.root}`]: {
5389
+ [`& .${import_joy55.stepIndicatorClasses.root}`]: {
5353
5390
  fontSize: "var(--ceed-fontSize-xs)"
5354
5391
  }
5355
5392
  }));
5356
- var MotionStepper = (0, import_framer_motion28.motion)(StyledStepper);
5393
+ var MotionStepper = (0, import_framer_motion29.motion)(StyledStepper);
5357
5394
  function Stepper(props) {
5358
5395
  const {
5359
5396
  steps,
@@ -5363,30 +5400,30 @@ function Stepper(props) {
5363
5400
  inactiveLineColor = "neutral.300",
5364
5401
  activeStep
5365
5402
  } = props;
5366
- return /* @__PURE__ */ import_react41.default.createElement(
5403
+ return /* @__PURE__ */ import_react44.default.createElement(
5367
5404
  MotionStepper,
5368
5405
  {
5369
5406
  sx: (theme) => ({
5370
5407
  "--StepIndicator-size": "24px",
5371
5408
  "--Step-gap": theme.spacing(2),
5372
- [`& .${import_joy53.stepIndicatorClasses.root}`]: {
5409
+ [`& .${import_joy55.stepIndicatorClasses.root}`]: {
5373
5410
  fontSize: "var(--ceed-fontSize-xs)"
5374
5411
  },
5375
- [`& .${import_joy53.stepClasses.completed}`]: {
5412
+ [`& .${import_joy55.stepClasses.completed}`]: {
5376
5413
  "&::after": { bgcolor: activeLineColor },
5377
- [`& .${import_joy53.stepIndicatorClasses.root}`]: {
5414
+ [`& .${import_joy55.stepIndicatorClasses.root}`]: {
5378
5415
  bgcolor: activeColor
5379
5416
  }
5380
5417
  },
5381
- [`& .${import_joy53.stepClasses.active}`]: {
5418
+ [`& .${import_joy55.stepClasses.active}`]: {
5382
5419
  "&::after": { bgcolor: inactiveLineColor },
5383
- [`& .${import_joy53.stepIndicatorClasses.root}`]: {
5420
+ [`& .${import_joy55.stepIndicatorClasses.root}`]: {
5384
5421
  bgcolor: activeColor
5385
5422
  }
5386
5423
  },
5387
- [`& .${import_joy53.stepClasses.disabled}`]: {
5424
+ [`& .${import_joy55.stepClasses.disabled}`]: {
5388
5425
  "&::after": { bgcolor: inactiveLineColor },
5389
- [`& .${import_joy53.stepIndicatorClasses.root}`]: {
5426
+ [`& .${import_joy55.stepIndicatorClasses.root}`]: {
5390
5427
  bgcolor: inactiveColor
5391
5428
  }
5392
5429
  }
@@ -5397,16 +5434,16 @@ function Stepper(props) {
5397
5434
  const completed = activeStep > i + 1;
5398
5435
  const disabled = activeStep < i + 1;
5399
5436
  const hasContent = step.label || step.extraContent;
5400
- return /* @__PURE__ */ import_react41.default.createElement(
5437
+ return /* @__PURE__ */ import_react44.default.createElement(
5401
5438
  Step,
5402
5439
  {
5403
5440
  key: `step-${i}`,
5404
- indicator: /* @__PURE__ */ import_react41.default.createElement(StepIndicator, { variant: "solid", color: "primary" }, completed ? /* @__PURE__ */ import_react41.default.createElement(import_Check.default, null) : step.indicatorContent),
5441
+ indicator: /* @__PURE__ */ import_react44.default.createElement(StepIndicator, { variant: "solid", color: "primary" }, completed ? /* @__PURE__ */ import_react44.default.createElement(import_Check.default, null) : step.indicatorContent),
5405
5442
  active,
5406
5443
  completed,
5407
5444
  disabled
5408
5445
  },
5409
- hasContent && /* @__PURE__ */ import_react41.default.createElement(Stack_default, null, step.label && /* @__PURE__ */ import_react41.default.createElement(Typography_default, { level: "title-sm" }, step.label), step.extraContent && /* @__PURE__ */ import_react41.default.createElement(Typography_default, { level: "body-xs" }, step.extraContent))
5446
+ hasContent && /* @__PURE__ */ import_react44.default.createElement(Stack_default, null, step.label && /* @__PURE__ */ import_react44.default.createElement(Typography_default, { level: "title-sm" }, step.label), step.extraContent && /* @__PURE__ */ import_react44.default.createElement(Typography_default, { level: "body-xs" }, step.extraContent))
5410
5447
  );
5411
5448
  })
5412
5449
  );
@@ -5414,11 +5451,11 @@ function Stepper(props) {
5414
5451
  Stepper.displayName = "Stepper";
5415
5452
 
5416
5453
  // src/components/Switch/Switch.tsx
5417
- var import_react42 = __toESM(require("react"));
5418
- var import_joy54 = require("@mui/joy");
5419
- var import_framer_motion29 = require("framer-motion");
5420
- var MotionSwitch = (0, import_framer_motion29.motion)(import_joy54.Switch);
5421
- var StyledThumb = (0, import_joy54.styled)(import_framer_motion29.motion.div)({
5454
+ var import_react45 = __toESM(require("react"));
5455
+ var import_joy56 = require("@mui/joy");
5456
+ var import_framer_motion30 = require("framer-motion");
5457
+ var MotionSwitch = (0, import_framer_motion30.motion)(import_joy56.Switch);
5458
+ var StyledThumb = (0, import_joy56.styled)(import_framer_motion30.motion.div)({
5422
5459
  "--Icon-fontSize": "calc(var(--Switch-thumbSize) * 0.75)",
5423
5460
  display: "inline-flex",
5424
5461
  justifyContent: "center",
@@ -5431,19 +5468,19 @@ var StyledThumb = (0, import_joy54.styled)(import_framer_motion29.motion.div)({
5431
5468
  boxShadow: "var(--Switch-thumbShadow)",
5432
5469
  color: "var(--Switch-thumbColor)",
5433
5470
  backgroundColor: "var(--Switch-thumbBackground)",
5434
- [`&.${import_joy54.switchClasses.checked}`]: {
5471
+ [`&.${import_joy56.switchClasses.checked}`]: {
5435
5472
  left: "unset",
5436
5473
  right: "var(--Switch-thumbOffset)"
5437
5474
  }
5438
5475
  });
5439
- var Thumb = (props) => /* @__PURE__ */ import_react42.default.createElement(StyledThumb, { ...props, layout: true, transition: spring });
5476
+ var Thumb = (props) => /* @__PURE__ */ import_react45.default.createElement(StyledThumb, { ...props, layout: true, transition: spring });
5440
5477
  var spring = {
5441
5478
  type: "spring",
5442
5479
  stiffness: 700,
5443
5480
  damping: 30
5444
5481
  };
5445
5482
  var Switch = (props) => {
5446
- return /* @__PURE__ */ import_react42.default.createElement(
5483
+ return /* @__PURE__ */ import_react45.default.createElement(
5447
5484
  MotionSwitch,
5448
5485
  {
5449
5486
  ...props,
@@ -5457,32 +5494,32 @@ var Switch = (props) => {
5457
5494
  Switch.displayName = "Switch";
5458
5495
 
5459
5496
  // src/components/Tabs/Tabs.tsx
5460
- var import_react43 = __toESM(require("react"));
5461
- var import_joy55 = require("@mui/joy");
5462
- var StyledTabs = (0, import_joy55.styled)(import_joy55.Tabs)(({ theme }) => ({
5497
+ var import_react46 = __toESM(require("react"));
5498
+ var import_joy57 = require("@mui/joy");
5499
+ var StyledTabs = (0, import_joy57.styled)(import_joy57.Tabs)(({ theme }) => ({
5463
5500
  backgroundColor: theme.palette.background.body
5464
5501
  }));
5465
5502
  var Tabs = StyledTabs;
5466
5503
  Tabs.displayName = "Tabs";
5467
- var StyledTab = (0, import_joy55.styled)(import_joy55.Tab)(({ theme }) => ({
5504
+ var StyledTab = (0, import_joy57.styled)(import_joy57.Tab)(({ theme }) => ({
5468
5505
  gap: theme.spacing(2),
5469
- [`&:not(.${import_joy55.tabClasses.selected})`]: {
5506
+ [`&:not(.${import_joy57.tabClasses.selected})`]: {
5470
5507
  color: theme.palette.neutral[700]
5471
5508
  },
5472
- [`&.${import_joy55.tabClasses.variantPlain}`]: {
5509
+ [`&.${import_joy57.tabClasses.variantPlain}`]: {
5473
5510
  backgroundColor: theme.palette.background.body
5474
5511
  }
5475
5512
  }));
5476
- var Tab = (0, import_react43.forwardRef)(function Tab2({ startDecorator, endDecorator, children, ...props }, ref) {
5477
- return /* @__PURE__ */ import_react43.default.createElement(StyledTab, { ...props, ref }, startDecorator, children, endDecorator);
5513
+ var Tab = (0, import_react46.forwardRef)(function Tab2({ startDecorator, endDecorator, children, ...props }, ref) {
5514
+ return /* @__PURE__ */ import_react46.default.createElement(StyledTab, { ...props, ref }, startDecorator, children, endDecorator);
5478
5515
  });
5479
5516
  Tab.displayName = "Tab";
5480
- var TabList = import_joy55.TabList;
5481
- var TabPanel = import_joy55.TabPanel;
5517
+ var TabList = import_joy57.TabList;
5518
+ var TabPanel = import_joy57.TabPanel;
5482
5519
 
5483
5520
  // src/components/ThemeProvider/ThemeProvider.tsx
5484
- var import_react44 = __toESM(require("react"));
5485
- var import_joy56 = require("@mui/joy");
5521
+ var import_react47 = __toESM(require("react"));
5522
+ var import_joy58 = require("@mui/joy");
5486
5523
  var colorScheme = {
5487
5524
  palette: {
5488
5525
  danger: {
@@ -5535,7 +5572,7 @@ var colorScheme = {
5535
5572
  }
5536
5573
  }
5537
5574
  };
5538
- var defaultTheme = (0, import_joy56.extendTheme)({
5575
+ var defaultTheme = (0, import_joy58.extendTheme)({
5539
5576
  cssVarPrefix: "ceed",
5540
5577
  spacing: 4,
5541
5578
  breakpoints: {
@@ -5587,7 +5624,7 @@ var defaultTheme = (0, import_joy56.extendTheme)({
5587
5624
  },
5588
5625
  styleOverrides: {
5589
5626
  root: {
5590
- [`.${import_joy56.inputClasses.root}`]: {
5627
+ [`.${import_joy58.inputClasses.root}`]: {
5591
5628
  // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
5592
5629
  "font-family": "monospace"
5593
5630
  }
@@ -5600,7 +5637,7 @@ var defaultTheme = (0, import_joy56.extendTheme)({
5600
5637
  },
5601
5638
  styleOverrides: {
5602
5639
  root: {
5603
- [`.${import_joy56.inputClasses.root}`]: {
5640
+ [`.${import_joy58.inputClasses.root}`]: {
5604
5641
  // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
5605
5642
  "font-family": "monospace"
5606
5643
  }
@@ -5613,7 +5650,7 @@ var defaultTheme = (0, import_joy56.extendTheme)({
5613
5650
  },
5614
5651
  styleOverrides: {
5615
5652
  root: {
5616
- [`.${import_joy56.inputClasses.root}`]: {
5653
+ [`.${import_joy58.inputClasses.root}`]: {
5617
5654
  // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
5618
5655
  "font-family": "monospace"
5619
5656
  }
@@ -5626,7 +5663,7 @@ var defaultTheme = (0, import_joy56.extendTheme)({
5626
5663
  },
5627
5664
  styleOverrides: {
5628
5665
  root: {
5629
- [`.${import_joy56.inputClasses.root}`]: {
5666
+ [`.${import_joy58.inputClasses.root}`]: {
5630
5667
  // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
5631
5668
  "font-family": "monospace"
5632
5669
  }
@@ -5639,7 +5676,7 @@ var defaultTheme = (0, import_joy56.extendTheme)({
5639
5676
  },
5640
5677
  styleOverrides: {
5641
5678
  root: {
5642
- [`.${import_joy56.inputClasses.root}`]: {
5679
+ [`.${import_joy58.inputClasses.root}`]: {
5643
5680
  // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
5644
5681
  "font-family": "monospace"
5645
5682
  }
@@ -5681,7 +5718,7 @@ var defaultTheme = (0, import_joy56.extendTheme)({
5681
5718
  outline: `${theme.palette.primary[500]} solid 2px`,
5682
5719
  outlineOffset: "-2px"
5683
5720
  },
5684
- [`& .${import_joy56.checkboxClasses.root}`]: {
5721
+ [`& .${import_joy58.checkboxClasses.root}`]: {
5685
5722
  verticalAlign: "middle"
5686
5723
  }
5687
5724
  })
@@ -5731,13 +5768,13 @@ var defaultTheme = (0, import_joy56.extendTheme)({
5731
5768
  });
5732
5769
  function ThemeProvider(props) {
5733
5770
  const theme = props.theme || defaultTheme;
5734
- return /* @__PURE__ */ import_react44.default.createElement(import_react44.default.Fragment, null, /* @__PURE__ */ import_react44.default.createElement(import_joy56.CssVarsProvider, { theme }, /* @__PURE__ */ import_react44.default.createElement(import_joy56.CssBaseline, null), props.children));
5771
+ return /* @__PURE__ */ import_react47.default.createElement(import_react47.default.Fragment, null, /* @__PURE__ */ import_react47.default.createElement(import_joy58.CssVarsProvider, { theme }, /* @__PURE__ */ import_react47.default.createElement(import_joy58.CssBaseline, null), props.children));
5735
5772
  }
5736
5773
  ThemeProvider.displayName = "ThemeProvider";
5737
5774
 
5738
5775
  // src/components/Uploader/Uploader.tsx
5739
- var import_react45 = __toESM(require("react"));
5740
- var import_joy57 = require("@mui/joy");
5776
+ var import_react48 = __toESM(require("react"));
5777
+ var import_joy59 = require("@mui/joy");
5741
5778
  var import_CloudUploadRounded = __toESM(require("@mui/icons-material/CloudUploadRounded"));
5742
5779
  var import_UploadFileRounded = __toESM(require("@mui/icons-material/UploadFileRounded"));
5743
5780
  var import_ClearRounded = __toESM(require("@mui/icons-material/ClearRounded"));
@@ -5759,7 +5796,7 @@ var esmFiles = {
5759
5796
  "@atlaskit/pragmatic-drag-and-drop/dist/esm/entry-point/prevent-unhandled.js"
5760
5797
  )
5761
5798
  };
5762
- var VisuallyHiddenInput = (0, import_joy57.styled)(import_joy57.Input)({
5799
+ var VisuallyHiddenInput = (0, import_joy59.styled)(import_joy59.Input)({
5763
5800
  width: "1px",
5764
5801
  height: "1px",
5765
5802
  overflow: "hidden",
@@ -5768,18 +5805,18 @@ var VisuallyHiddenInput = (0, import_joy57.styled)(import_joy57.Input)({
5768
5805
  clipPath: "inset(50%)",
5769
5806
  position: "absolute"
5770
5807
  });
5771
- var PreviewRoot = (0, import_joy57.styled)(Stack_default, {
5808
+ var PreviewRoot = (0, import_joy59.styled)(Stack_default, {
5772
5809
  name: "Uploader",
5773
5810
  slot: "PreviewRoot"
5774
5811
  })({});
5775
- var UploadCard = (0, import_joy57.styled)(Card, {
5812
+ var UploadCard = (0, import_joy59.styled)(Card, {
5776
5813
  name: "Uploader",
5777
5814
  slot: "UploadCard"
5778
5815
  })(({ theme }) => ({
5779
5816
  padding: theme.spacing(2.5),
5780
5817
  border: `1px solid ${theme.palette.neutral.outlinedBorder}`
5781
5818
  }));
5782
- var UploadFileIcon = (0, import_joy57.styled)(import_UploadFileRounded.default, {
5819
+ var UploadFileIcon = (0, import_joy59.styled)(import_UploadFileRounded.default, {
5783
5820
  name: "Uploader",
5784
5821
  slot: "UploadFileIcon"
5785
5822
  })(({ theme }) => ({
@@ -5787,7 +5824,7 @@ var UploadFileIcon = (0, import_joy57.styled)(import_UploadFileRounded.default,
5787
5824
  width: "32px",
5788
5825
  height: "32px"
5789
5826
  }));
5790
- var ClearIcon2 = (0, import_joy57.styled)(import_ClearRounded.default, {
5827
+ var ClearIcon2 = (0, import_joy59.styled)(import_ClearRounded.default, {
5791
5828
  name: "Uploader",
5792
5829
  slot: "ClearIcon"
5793
5830
  })(({ theme }) => ({
@@ -5813,40 +5850,50 @@ var getFileSize = (n) => {
5813
5850
  };
5814
5851
  var Preview = (props) => {
5815
5852
  const { files, uploaded, onDelete } = props;
5816
- return /* @__PURE__ */ import_react45.default.createElement(PreviewRoot, { gap: 1 }, [...uploaded, ...files].map((file) => /* @__PURE__ */ import_react45.default.createElement(UploadCard, { key: file.name, size: "sm", color: "neutral" }, /* @__PURE__ */ import_react45.default.createElement(Stack_default, { direction: "row", alignItems: "center", gap: 2 }, /* @__PURE__ */ import_react45.default.createElement(UploadFileIcon, null), /* @__PURE__ */ import_react45.default.createElement(Stack_default, { flex: "1" }, /* @__PURE__ */ import_react45.default.createElement(Typography_default, { level: "body-sm", textColor: "common.black" }, file.name), !!file.size && /* @__PURE__ */ import_react45.default.createElement(Typography_default, { level: "body-xs", fontWeight: "300", lineHeight: "1.33", textColor: "text.tertiary" }, getFileSize(file.size))), /* @__PURE__ */ import_react45.default.createElement(IconButton_default, { onClick: () => onDelete?.(file) }, /* @__PURE__ */ import_react45.default.createElement(ClearIcon2, null))))));
5853
+ return /* @__PURE__ */ import_react48.default.createElement(PreviewRoot, { gap: 1 }, [...uploaded, ...files].map((file) => /* @__PURE__ */ import_react48.default.createElement(UploadCard, { key: file.name, size: "sm", color: "neutral" }, /* @__PURE__ */ import_react48.default.createElement(Stack_default, { direction: "row", alignItems: "center", gap: 2 }, /* @__PURE__ */ import_react48.default.createElement(UploadFileIcon, null), /* @__PURE__ */ import_react48.default.createElement(Stack_default, { flex: "1" }, /* @__PURE__ */ import_react48.default.createElement(Typography_default, { level: "body-sm", textColor: "common.black" }, file.name), !!file.size && /* @__PURE__ */ import_react48.default.createElement(Typography_default, { level: "body-xs", fontWeight: "300", lineHeight: "1.33", textColor: "text.tertiary" }, getFileSize(file.size))), /* @__PURE__ */ import_react48.default.createElement(IconButton_default, { onClick: () => onDelete?.(file) }, /* @__PURE__ */ import_react48.default.createElement(ClearIcon2, null))))));
5817
5854
  };
5818
- var UploaderRoot = (0, import_joy57.styled)(Stack_default, {
5855
+ var UploaderRoot = (0, import_joy59.styled)(Stack_default, {
5819
5856
  name: "Uploader",
5820
5857
  slot: "root"
5821
5858
  })(({ theme }) => ({
5822
5859
  gap: theme.spacing(2)
5823
5860
  }));
5824
- var FileDropZone = (0, import_joy57.styled)(Sheet_default, {
5861
+ var FileDropZone = (0, import_joy59.styled)(Sheet_default, {
5825
5862
  name: "Uploader",
5826
5863
  slot: "dropZone",
5827
- shouldForwardProp: (prop) => prop !== "error"
5828
- })(({ theme, state, error }) => ({
5829
- width: "100%",
5830
- display: "flex",
5831
- flexDirection: "column",
5832
- justifyContent: "center",
5833
- alignItems: "center",
5834
- padding: theme.spacing(5),
5835
- gap: theme.spacing(4),
5836
- cursor: "pointer",
5837
- backgroundColor: theme.palette.background.surface,
5838
- border: error ? `1px solid ${theme.palette.danger.outlinedBorder}` : state === "idle" ? `1px solid ${theme.palette.neutral.outlinedBorder}` : `1px solid ${theme.palette.primary.outlinedBorder}`
5839
- }));
5840
- var UploaderIcon = (0, import_joy57.styled)(import_CloudUploadRounded.default, {
5864
+ shouldForwardProp: (prop) => prop !== "error" && prop !== "disabled"
5865
+ })(
5866
+ ({ theme, state, error, disabled }) => ({
5867
+ width: "100%",
5868
+ display: "flex",
5869
+ flexDirection: "column",
5870
+ justifyContent: "center",
5871
+ alignItems: "center",
5872
+ padding: theme.spacing(5),
5873
+ gap: theme.spacing(4),
5874
+ cursor: disabled ? "not-allowed" : "pointer",
5875
+ backgroundColor: theme.palette.background.surface,
5876
+ border: disabled ? `1px solid ${theme.palette.danger.outlinedDisabledBorder}` : error ? `1px solid ${theme.palette.danger.outlinedBorder}` : state === "idle" ? `1px solid ${theme.palette.neutral.outlinedBorder}` : `1px solid ${theme.palette.primary.outlinedBorder}`,
5877
+ "&:hover": {
5878
+ border: disabled ? `1px solid ${theme.palette.danger.outlinedDisabledBorder}` : error ? `1px solid ${theme.palette.danger.outlinedBorder}` : `1px solid ${theme.palette.primary.outlinedBorder}`
5879
+ }
5880
+ })
5881
+ );
5882
+ var UploaderIcon = (0, import_joy59.styled)(import_CloudUploadRounded.default, {
5841
5883
  name: "Uploader",
5842
5884
  slot: "iconContainer",
5843
- shouldForwardProp: (prop) => prop !== "error"
5844
- })(({ theme, state, error }) => ({
5845
- color: error ? `rgba(${theme.vars.palette.danger.mainChannel} / 0.6)` : state === "over" ? `rgba(${theme.palette.primary.mainChannel} / 0.6)` : theme.palette.neutral.softActiveBg,
5846
- width: "32px",
5847
- height: "32px"
5848
- }));
5849
- var Uploader = import_react45.default.memo(
5885
+ shouldForwardProp: (prop) => prop !== "error" && prop !== "disabled"
5886
+ })(
5887
+ ({ theme, state, error, disabled }) => ({
5888
+ color: disabled ? theme.palette.primary.outlinedDisabledBorder : error ? `rgba(${theme.vars.palette.danger.mainChannel} / 0.6)` : state === "over" ? `rgba(${theme.palette.primary.mainChannel} / 0.6)` : theme.palette.neutral.softActiveBg,
5889
+ width: "32px",
5890
+ height: "32px",
5891
+ ".MuiSheet-root:hover &": {
5892
+ color: disabled ? theme.palette.primary.outlinedDisabledBorder : error ? `rgba(${theme.vars.palette.danger.mainChannel} / 0.6)` : `rgba(${theme.palette.primary.mainChannel} / 0.6)`
5893
+ }
5894
+ })
5895
+ );
5896
+ var Uploader = import_react48.default.memo(
5850
5897
  (props) => {
5851
5898
  const {
5852
5899
  accept,
@@ -5861,14 +5908,14 @@ var Uploader = import_react45.default.memo(
5861
5908
  disabled,
5862
5909
  onDelete
5863
5910
  } = props;
5864
- const dropZoneRef = (0, import_react45.useRef)(null);
5865
- const inputRef = (0, import_react45.useRef)(null);
5866
- const [errorText, setErrorText] = (0, import_react45.useState)();
5867
- const [files, setFiles] = (0, import_react45.useState)([]);
5868
- const [uploaded, setUploaded] = (0, import_react45.useState)(props.uploaded || []);
5869
- const [previewState, setPreviewState] = (0, import_react45.useState)("idle");
5870
- const accepts = (0, import_react45.useMemo)(() => accept.split(",").map((accept2) => accept2.trim()), [accept]);
5871
- const parsedAccepts = (0, import_react45.useMemo)(
5911
+ const dropZoneRef = (0, import_react48.useRef)(null);
5912
+ const inputRef = (0, import_react48.useRef)(null);
5913
+ const [errorText, setErrorText] = (0, import_react48.useState)();
5914
+ const [files, setFiles] = (0, import_react48.useState)([]);
5915
+ const [uploaded, setUploaded] = (0, import_react48.useState)(props.uploaded || []);
5916
+ const [previewState, setPreviewState] = (0, import_react48.useState)("idle");
5917
+ const accepts = (0, import_react48.useMemo)(() => accept.split(",").map((accept2) => accept2.trim()), [accept]);
5918
+ const parsedAccepts = (0, import_react48.useMemo)(
5872
5919
  () => accepts.flatMap((type) => {
5873
5920
  if (["image/*", "video/*", "audio/*"].includes(type)) {
5874
5921
  return ALL_EXTENSIONS_BY_TYPE[type];
@@ -5877,7 +5924,7 @@ var Uploader = import_react45.default.memo(
5877
5924
  }),
5878
5925
  [accepts]
5879
5926
  );
5880
- const helperText = (0, import_react45.useMemo)(() => {
5927
+ const helperText = (0, import_react48.useMemo)(() => {
5881
5928
  const [allAcceptedTypes, acceptedTypes] = [
5882
5929
  accepts.filter((accept2) => ["image/*", "video/*", "audio/*"].includes(accept2)).map((accept2) => {
5883
5930
  const [type] = accept2.split("/");
@@ -5904,12 +5951,12 @@ var Uploader = import_react45.default.memo(
5904
5951
  }
5905
5952
  return helperTexts.join(", ");
5906
5953
  }, [accepts, maxFileTotalSize, maxCount]);
5907
- const error = (0, import_react45.useMemo)(() => !!errorText || props.error, [props.error, errorText]);
5908
- const showDropZone = (0, import_react45.useMemo)(
5954
+ const error = (0, import_react48.useMemo)(() => !!errorText || props.error, [props.error, errorText]);
5955
+ const showDropZone = (0, import_react48.useMemo)(
5909
5956
  () => !maxCount || maxCount && [...uploaded, ...files].length !== maxCount,
5910
5957
  [files, maxCount, uploaded]
5911
5958
  );
5912
- const addFiles = (0, import_react45.useCallback)(
5959
+ const addFiles = (0, import_react48.useCallback)(
5913
5960
  (uploads) => {
5914
5961
  try {
5915
5962
  const types = parsedAccepts.map((type) => type.replace(".", "")) || [];
@@ -5954,7 +6001,7 @@ var Uploader = import_react45.default.memo(
5954
6001
  },
5955
6002
  [files, uploaded, maxCount, parsedAccepts, maxFileSize, maxFileTotalSize, name, onChange]
5956
6003
  );
5957
- (0, import_react45.useEffect)(() => {
6004
+ (0, import_react48.useEffect)(() => {
5958
6005
  if (!dropZoneRef.current || disabled) {
5959
6006
  return;
5960
6007
  }
@@ -5992,7 +6039,7 @@ var Uploader = import_react45.default.memo(
5992
6039
  );
5993
6040
  return () => cleanup?.();
5994
6041
  }, [disabled, addFiles]);
5995
- (0, import_react45.useEffect)(() => {
6042
+ (0, import_react48.useEffect)(() => {
5996
6043
  if (inputRef.current && minCount) {
5997
6044
  if (files.length < minCount) {
5998
6045
  inputRef.current.setCustomValidity(`At least ${minCount} files are required.`);
@@ -6001,14 +6048,14 @@ var Uploader = import_react45.default.memo(
6001
6048
  }
6002
6049
  }
6003
6050
  }, [inputRef, files, minCount]);
6004
- const handleFileChanged = (0, import_react45.useCallback)(
6051
+ const handleFileChanged = (0, import_react48.useCallback)(
6005
6052
  (event) => {
6006
6053
  const files2 = Array.from(event.target.files || []);
6007
6054
  addFiles(files2);
6008
6055
  },
6009
6056
  [addFiles]
6010
6057
  );
6011
- const handleDeleteFile = (0, import_react45.useCallback)(
6058
+ const handleDeleteFile = (0, import_react48.useCallback)(
6012
6059
  (deletedFile) => {
6013
6060
  if (deletedFile instanceof File) {
6014
6061
  setFiles((current) => {
@@ -6028,19 +6075,20 @@ var Uploader = import_react45.default.memo(
6028
6075
  },
6029
6076
  [name, onChange, onDelete]
6030
6077
  );
6031
- const handleUploaderButtonClick = (0, import_react45.useCallback)(() => {
6078
+ const handleUploaderButtonClick = (0, import_react48.useCallback)(() => {
6032
6079
  inputRef.current?.click();
6033
6080
  }, []);
6034
- const uploader = /* @__PURE__ */ import_react45.default.createElement(
6081
+ const uploader = /* @__PURE__ */ import_react48.default.createElement(
6035
6082
  FileDropZone,
6036
6083
  {
6037
6084
  state: previewState,
6038
6085
  error: !!(error || errorText),
6086
+ disabled,
6039
6087
  ref: dropZoneRef,
6040
6088
  onClick: handleUploaderButtonClick
6041
6089
  },
6042
- /* @__PURE__ */ import_react45.default.createElement(Stack_default, { alignItems: "center", gap: 1 }, /* @__PURE__ */ import_react45.default.createElement(UploaderIcon, { state: previewState, error: !!(error || errorText) })),
6043
- /* @__PURE__ */ import_react45.default.createElement(
6090
+ /* @__PURE__ */ import_react48.default.createElement(Stack_default, { alignItems: "center", gap: 1 }, /* @__PURE__ */ import_react48.default.createElement(UploaderIcon, { state: previewState, error: !!(error || errorText), disabled })),
6091
+ /* @__PURE__ */ import_react48.default.createElement(
6044
6092
  VisuallyHiddenInput,
6045
6093
  {
6046
6094
  disabled,
@@ -6063,7 +6111,7 @@ var Uploader = import_react45.default.memo(
6063
6111
  }
6064
6112
  )
6065
6113
  );
6066
- return /* @__PURE__ */ import_react45.default.createElement(UploaderRoot, null, showDropZone && /* @__PURE__ */ import_react45.default.createElement(FormControl_default, { size, error: !!(error || errorText), disabled, required: !!minCount }, label && /* @__PURE__ */ import_react45.default.createElement(FormLabel_default, null, label), uploader, /* @__PURE__ */ import_react45.default.createElement(FormHelperText_default, null, /* @__PURE__ */ import_react45.default.createElement(Stack_default, null, errorText && /* @__PURE__ */ import_react45.default.createElement("div", null, errorText), /* @__PURE__ */ import_react45.default.createElement("div", null, helperText)))), [...uploaded, ...files].length > 0 && /* @__PURE__ */ import_react45.default.createElement(Preview, { files, uploaded, onDelete: handleDeleteFile }));
6114
+ return /* @__PURE__ */ import_react48.default.createElement(UploaderRoot, null, showDropZone && /* @__PURE__ */ import_react48.default.createElement(FormControl_default, { size, error: !!(error || errorText), disabled, required: !!minCount }, label && /* @__PURE__ */ import_react48.default.createElement(FormLabel_default, null, label), uploader, /* @__PURE__ */ import_react48.default.createElement(FormHelperText_default, null, /* @__PURE__ */ import_react48.default.createElement(Stack_default, null, errorText && /* @__PURE__ */ import_react48.default.createElement("div", null, errorText), /* @__PURE__ */ import_react48.default.createElement("div", null, helperText)))), [...uploaded, ...files].length > 0 && /* @__PURE__ */ import_react48.default.createElement(Preview, { files, uploaded, onDelete: handleDeleteFile }));
6067
6115
  }
6068
6116
  );
6069
6117
  Uploader.displayName = "Uploader";