@ceed/ads 1.8.7 → 1.10.0

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.js CHANGED
@@ -147,7 +147,7 @@ import {
147
147
  stepperClasses,
148
148
  Skeleton as Skeleton2,
149
149
  skeletonClasses,
150
- styled as styled29
150
+ styled as styled30
151
151
  } from "@mui/joy";
152
152
 
153
153
  // src/components/Accordions/Accordions.tsx
@@ -1836,116 +1836,301 @@ var CurrencyInput = React15.forwardRef(function CurrencyInput2(inProps, ref) {
1836
1836
  var CurrencyInput_default = CurrencyInput;
1837
1837
 
1838
1838
  // src/components/DataTable/DataTable.tsx
1839
- import React23, {
1840
- useCallback as useCallback9,
1841
- useEffect as useEffect5,
1842
- useMemo as useMemo8,
1843
- useRef as useRef4,
1844
- useState as useState6,
1839
+ import React25, {
1840
+ useCallback as useCallback11,
1841
+ useMemo as useMemo10,
1842
+ useRef as useRef6,
1845
1843
  useId,
1846
1844
  forwardRef as forwardRef7,
1847
1845
  useImperativeHandle as useImperativeHandle2,
1848
- createElement,
1849
- memo,
1850
- useLayoutEffect
1846
+ Fragment as Fragment2
1851
1847
  } from "react";
1852
1848
  import { useVirtualizer as useVirtualizer2 } from "@tanstack/react-virtual";
1853
- import { styled as styled12, LinearProgress, Link, useTheme, buttonClasses, iconButtonClasses } from "@mui/joy";
1854
- import SortIcon from "@mui/icons-material/ArrowUpwardRounded";
1855
1849
 
1856
- // src/components/Sheet/Sheet.tsx
1857
- import { Sheet as JoySheet } from "@mui/joy";
1858
- import { motion as motion16 } from "framer-motion";
1859
- var MotionSheet = motion16(JoySheet);
1860
- var Sheet = MotionSheet;
1861
- Sheet.displayName = "Sheet";
1862
-
1863
- // src/components/Sheet/index.ts
1864
- var Sheet_default = Sheet;
1865
-
1866
- // src/components/Table/Table.tsx
1867
- import React16 from "react";
1868
- import { Table as JoyTable } from "@mui/joy";
1869
- var Table = (props) => {
1870
- const { children, ...inheritProps } = props;
1871
- return /* @__PURE__ */ React16.createElement(JoyTable, { ...inheritProps }, children);
1872
- };
1873
- Table.displayName = "Table";
1874
- function TableHead(props) {
1875
- const {
1876
- headCells,
1877
- showCheckbox,
1878
- onCheckboxChange,
1879
- slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
1880
- slotProps: { checkbox: checkboxProps = {} } = {}
1881
- } = props;
1882
- return /* @__PURE__ */ React16.createElement("thead", null, /* @__PURE__ */ React16.createElement("tr", null, showCheckbox && /* @__PURE__ */ React16.createElement(
1883
- "th",
1884
- {
1885
- style: {
1886
- width: "40px",
1887
- textAlign: "center"
1888
- }
1889
- },
1890
- /* @__PURE__ */ React16.createElement(RenderCheckbox, { onChange: onCheckboxChange, ...checkboxProps })
1891
- ), headCells.map((headCell) => /* @__PURE__ */ React16.createElement(
1892
- "th",
1893
- {
1894
- key: headCell.label,
1895
- style: {
1896
- width: headCell.width,
1897
- minWidth: headCell.minWidth,
1898
- maxWidth: headCell.maxWidth,
1899
- textAlign: headCell.numeric ? "right" : "left"
1900
- }
1901
- },
1902
- headCell.label
1903
- ))));
1850
+ // src/components/DataTable/utils.ts
1851
+ function extractFieldsFromGroupingModel(items) {
1852
+ const fields = /* @__PURE__ */ new Set();
1853
+ for (const item of items) {
1854
+ if ("groupId" in item) {
1855
+ const children = Array.isArray(item.children) ? item.children : [item.children];
1856
+ const childFields = extractFieldsFromGroupingModel(children);
1857
+ childFields.forEach((field) => fields.add(field));
1858
+ } else {
1859
+ fields.add(item.field);
1860
+ }
1861
+ }
1862
+ return fields;
1904
1863
  }
1905
- TableHead.displayName = "TableHead";
1906
- function TableBody(props) {
1907
- const {
1908
- rows,
1909
- cellOrder,
1910
- rowOptions,
1911
- showCheckbox,
1912
- onCheckboxChange,
1913
- slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
1914
- slotProps: { checkbox: checkboxProps = {} } = {}
1915
- } = props;
1916
- return /* @__PURE__ */ React16.createElement("tbody", null, rows.map((row, rowIndex) => /* @__PURE__ */ React16.createElement("tr", { key: `table-row-${rowIndex}` }, showCheckbox && /* @__PURE__ */ React16.createElement(
1917
- "td",
1918
- {
1919
- style: {
1920
- textAlign: "center"
1864
+ function reorderColumnsByGroupingModel(columns, columnGroupingModel) {
1865
+ const fieldsInGroupingModel = extractFieldsFromGroupingModel(columnGroupingModel);
1866
+ const orderedFields = [];
1867
+ function collectFieldsInOrder(items) {
1868
+ for (const item of items) {
1869
+ if ("groupId" in item) {
1870
+ const children = Array.isArray(item.children) ? item.children : [item.children];
1871
+ collectFieldsInOrder(children);
1872
+ } else {
1873
+ if (!orderedFields.includes(item.field)) {
1874
+ orderedFields.push(item.field);
1875
+ }
1921
1876
  }
1922
- },
1923
- /* @__PURE__ */ React16.createElement(RenderCheckbox, { onChange: (event) => onCheckboxChange?.(event, rowIndex), ...checkboxProps })
1924
- ), cellOrder.map((cellKey) => /* @__PURE__ */ React16.createElement(
1925
- "td",
1926
- {
1927
- key: cellKey,
1928
- style: {
1929
- textAlign: rowOptions?.[cellKey]?.numeric ? "right" : "left"
1877
+ }
1878
+ }
1879
+ collectFieldsInOrder(columnGroupingModel);
1880
+ const columnMap = new Map(columns.map((col) => [col.field, col]));
1881
+ const reorderedColumns = [];
1882
+ for (const field of orderedFields) {
1883
+ const column = columnMap.get(field);
1884
+ if (column) {
1885
+ reorderedColumns.push(column);
1886
+ }
1887
+ }
1888
+ for (const column of columns) {
1889
+ if (!fieldsInGroupingModel.has(column.field)) {
1890
+ reorderedColumns.push(column);
1891
+ }
1892
+ }
1893
+ return reorderedColumns;
1894
+ }
1895
+ function flattenColumnGroups(items, groupPath = [], columnIndex = { current: 0 }) {
1896
+ const result = [];
1897
+ for (const item of items) {
1898
+ if ("groupId" in item) {
1899
+ const newPath = [...groupPath, item.groupId];
1900
+ const children = Array.isArray(item.children) ? item.children : [item.children];
1901
+ result.push(...flattenColumnGroups(children, newPath, columnIndex));
1902
+ } else {
1903
+ result.push({
1904
+ ...item,
1905
+ groupPath,
1906
+ columnIndex: columnIndex.current++
1907
+ });
1908
+ }
1909
+ }
1910
+ return result;
1911
+ }
1912
+ function calculateColumnGroups(columnGroupingModel, columns) {
1913
+ const fieldsInGroupingModel = extractFieldsFromGroupingModel(columnGroupingModel);
1914
+ const flattenedColumns = flattenColumnGroups(columnGroupingModel);
1915
+ const columnIndexMap = new Map(flattenedColumns.map((col) => [col.field, col.columnIndex]));
1916
+ const processedGroups = /* @__PURE__ */ new Map();
1917
+ const groupsByLevel = [];
1918
+ let maxLevel = 0;
1919
+ function processGroup(items, level, parentGroupId) {
1920
+ let minIndex = Infinity;
1921
+ let maxIndex = -Infinity;
1922
+ for (const item of items) {
1923
+ if ("groupId" in item) {
1924
+ const groupKey = parentGroupId ? `${parentGroupId}.${item.groupId}` : item.groupId;
1925
+ if (!processedGroups.has(groupKey)) {
1926
+ const children = Array.isArray(item.children) ? item.children : [item.children];
1927
+ const { startIndex, colspan } = processGroup(children, level + 1, groupKey);
1928
+ const group = {
1929
+ groupId: item.groupId,
1930
+ headerName: item.headerName,
1931
+ headerClassName: item.headerClassName,
1932
+ colspan,
1933
+ level,
1934
+ startIndex
1935
+ };
1936
+ processedGroups.set(groupKey, group);
1937
+ if (!groupsByLevel[level]) {
1938
+ groupsByLevel[level] = [];
1939
+ }
1940
+ groupsByLevel[level].push(group);
1941
+ maxLevel = Math.max(maxLevel, level);
1942
+ minIndex = Math.min(minIndex, startIndex);
1943
+ maxIndex = Math.max(maxIndex, startIndex + colspan - 1);
1944
+ }
1945
+ } else {
1946
+ const columnIndex = columnIndexMap.get(item.field);
1947
+ if (columnIndex !== void 0) {
1948
+ minIndex = Math.min(minIndex, columnIndex);
1949
+ maxIndex = Math.max(maxIndex, columnIndex);
1950
+ }
1930
1951
  }
1931
- },
1932
- row[cellKey]
1933
- )))));
1952
+ }
1953
+ return {
1954
+ startIndex: minIndex === Infinity ? 0 : minIndex,
1955
+ colspan: maxIndex === -Infinity ? 0 : maxIndex - minIndex + 1
1956
+ };
1957
+ }
1958
+ processGroup(columnGroupingModel, 0);
1959
+ groupsByLevel.forEach((level) => {
1960
+ level.sort((a, b) => a.startIndex - b.startIndex);
1961
+ });
1962
+ return { groups: groupsByLevel, maxLevel, fieldsInGroupingModel };
1934
1963
  }
1935
- TableBody.displayName = "TableBody";
1964
+ function getTextAlign(props) {
1965
+ return !props.editMode && ["number", "date", "currency"].includes(props.type || "") ? "end" : "start";
1966
+ }
1967
+ var numberFormatter = (value) => "Intl" in window ? new Intl.NumberFormat().format(value) : value;
1968
+
1969
+ // src/components/DataTable/styled.tsx
1970
+ import React16 from "react";
1971
+ import { styled as styled8, LinearProgress, buttonClasses, iconButtonClasses } from "@mui/joy";
1972
+ import { motion as motion16 } from "framer-motion";
1973
+ import SortIcon from "@mui/icons-material/ArrowUpwardRounded";
1974
+ var EllipsisDiv = styled8("div", {
1975
+ name: "DataTable",
1976
+ slot: "textEllipsis"
1977
+ })({
1978
+ overflow: "hidden",
1979
+ textOverflow: "ellipsis",
1980
+ whiteSpace: "nowrap"
1981
+ });
1982
+ var OverlayWrapper = styled8("tr", {
1983
+ name: "DataTable",
1984
+ slot: "overlayWrapper"
1985
+ })({
1986
+ position: "sticky",
1987
+ top: `calc(var(--unstable_TableCell-height, 32px))`,
1988
+ left: 0,
1989
+ right: 0,
1990
+ zIndex: 1,
1991
+ "& > td": {
1992
+ height: 0,
1993
+ padding: 0,
1994
+ border: "none !important"
1995
+ }
1996
+ });
1997
+ var VirtualizedTableBody = styled8("tbody", {
1998
+ name: "DataTable",
1999
+ slot: "tableBody"
2000
+ })({
2001
+ "&::after": {
2002
+ content: "''",
2003
+ display: "block",
2004
+ height: "0.01em"
2005
+ },
2006
+ [`& .${buttonClasses.root}`]: {
2007
+ "--Button-minHeight": "26px",
2008
+ "--Button-paddingBlock": "0.25rem",
2009
+ lineHeight: 1,
2010
+ marginTop: "-2px",
2011
+ marginBottom: "-2px"
2012
+ },
2013
+ [`& .${iconButtonClasses.root}`]: {
2014
+ "--IconButton-size": "26px",
2015
+ verticalAlign: "middle",
2016
+ marginTop: "-2px",
2017
+ marginBottom: "-2px"
2018
+ }
2019
+ });
2020
+ var StyledTableRow = styled8("tr", {
2021
+ name: "DataTable",
2022
+ slot: "tableRow",
2023
+ shouldForwardProp: (prop) => prop !== "striped"
2024
+ })(({ striped }) => ({
2025
+ ...striped && {
2026
+ backgroundColor: "var(--TableRow-stripeBackground, var(--ceed-palette-background-level2))",
2027
+ color: "var(--ceed-palette-text-primary)",
2028
+ "& td": {
2029
+ backgroundColor: "background.surface"
2030
+ }
2031
+ },
2032
+ "&:hover": {
2033
+ backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))",
2034
+ "& td": {
2035
+ backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))"
2036
+ }
2037
+ }
2038
+ }));
2039
+ var Asterisk = styled8("span", {
2040
+ name: "DataTable",
2041
+ slot: "headCellAsterisk"
2042
+ })(({ theme }) => ({
2043
+ color: "var(--ceed-palette-danger-500)",
2044
+ marginLeft: theme.spacing(0.5)
2045
+ }));
2046
+ var StyledTh = styled8(motion16.th)(({ theme }) => ({
2047
+ boxShadow: "1px 0 var(--TableCell-borderColor)"
2048
+ }));
2049
+ var StyledTd = styled8("td")(({ theme }) => ({
2050
+ transition: `box-shadow 0.3s`,
2051
+ "&:not(.is-last-left):not(.is-last-right)": {
2052
+ boxShadow: "1px 0 var(--TableCell-borderColor)"
2053
+ },
2054
+ ".ScrollableRight &": {
2055
+ "&.is-last-left": {
2056
+ boxShadow: `1px 0 var(--TableCell-borderColor), ${theme.shadow.md}`
2057
+ }
2058
+ },
2059
+ ".ScrollableLeft &": {
2060
+ "&.is-last-right": {
2061
+ boxShadow: `1px 0 var(--TableCell-borderColor), ${theme.shadow.md}`
2062
+ }
2063
+ }
2064
+ }));
2065
+ var MotionSortIcon = motion16(SortIcon);
2066
+ var DefaultLoadingOverlay = () => /* @__PURE__ */ React16.createElement(LinearProgress, { value: 8, variant: "plain" });
2067
+ var Resizer = (ref, targetRef = ref) => /* @__PURE__ */ React16.createElement(
2068
+ Box_default,
2069
+ {
2070
+ sx: {
2071
+ position: "absolute",
2072
+ top: 0,
2073
+ right: 0,
2074
+ bottom: 0,
2075
+ width: "4px",
2076
+ cursor: "col-resize"
2077
+ },
2078
+ onClick: (e) => e.stopPropagation(),
2079
+ onMouseDown: (e) => {
2080
+ const initialX = e.clientX;
2081
+ const initialWidth = ref.current?.getBoundingClientRect().width;
2082
+ const onMouseMove = (e2) => {
2083
+ if (initialWidth && initialX) {
2084
+ ref.current.style.width = `${initialWidth + (e2.clientX - initialX)}px`;
2085
+ targetRef.current.style.width = `${initialWidth + (e2.clientX - initialX)}px`;
2086
+ }
2087
+ };
2088
+ const onMouseUp = () => {
2089
+ document.removeEventListener("mousemove", onMouseMove);
2090
+ document.removeEventListener("mouseup", onMouseUp);
2091
+ };
2092
+ document.addEventListener("mousemove", onMouseMove);
2093
+ document.addEventListener("mouseup", onMouseUp);
2094
+ }
2095
+ }
2096
+ );
2097
+
2098
+ // src/components/DataTable/components.tsx
2099
+ import React22, {
2100
+ useRef as useRef4,
2101
+ useState as useState6,
2102
+ useLayoutEffect,
2103
+ useMemo as useMemo8,
2104
+ useCallback as useCallback8,
2105
+ useEffect as useEffect4,
2106
+ memo,
2107
+ createElement
2108
+ } from "react";
2109
+ import { styled as styled12, useTheme } from "@mui/joy";
2110
+ import { AnimatePresence as AnimatePresence2 } from "framer-motion";
1936
2111
 
1937
2112
  // src/components/DatePicker/DatePicker.tsx
1938
2113
  import React17, { forwardRef as forwardRef6, useCallback as useCallback7, useEffect as useEffect3, useImperativeHandle, useRef as useRef3, useState as useState5 } from "react";
1939
2114
  import { IMaskInput, IMask } from "react-imask";
1940
2115
  import CalendarTodayIcon from "@mui/icons-material/CalendarToday";
1941
- import { styled as styled9, useThemeProps as useThemeProps4 } from "@mui/joy";
2116
+ import { styled as styled10, useThemeProps as useThemeProps4 } from "@mui/joy";
1942
2117
  import { FocusTrap, ClickAwayListener, Popper as Popper2 } from "@mui/base";
1943
2118
 
1944
- // src/components/DialogActions/DialogActions.tsx
1945
- import { DialogActions as JoyDialogActions, styled as styled8 } from "@mui/joy";
2119
+ // src/components/Sheet/Sheet.tsx
2120
+ import { Sheet as JoySheet } from "@mui/joy";
1946
2121
  import { motion as motion17 } from "framer-motion";
1947
- var MotionDialogActions = motion17(JoyDialogActions);
1948
- var StyledDialogActions = styled8(MotionDialogActions)(({ theme }) => ({
2122
+ var MotionSheet = motion17(JoySheet);
2123
+ var Sheet = MotionSheet;
2124
+ Sheet.displayName = "Sheet";
2125
+
2126
+ // src/components/Sheet/index.ts
2127
+ var Sheet_default = Sheet;
2128
+
2129
+ // src/components/DialogActions/DialogActions.tsx
2130
+ import { DialogActions as JoyDialogActions, styled as styled9 } from "@mui/joy";
2131
+ import { motion as motion18 } from "framer-motion";
2132
+ var MotionDialogActions = motion18(JoyDialogActions);
2133
+ var StyledDialogActions = styled9(MotionDialogActions)(({ theme }) => ({
1949
2134
  padding: theme.spacing(2),
1950
2135
  gap: theme.spacing(2),
1951
2136
  flexDirection: "row",
@@ -1958,7 +2143,7 @@ DialogActions.displayName = "DialogActions";
1958
2143
  var DialogActions_default = DialogActions;
1959
2144
 
1960
2145
  // src/components/DatePicker/DatePicker.tsx
1961
- var CalendarButton = styled9(IconButton_default, {
2146
+ var CalendarButton = styled10(IconButton_default, {
1962
2147
  name: "DatePicker",
1963
2148
  slot: "calendarButton"
1964
2149
  })(({ theme }) => ({
@@ -1968,13 +2153,13 @@ var CalendarButton = styled9(IconButton_default, {
1968
2153
  outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar("palette-focusVisible")}`
1969
2154
  }
1970
2155
  }));
1971
- var StyledPopper = styled9(Popper2, {
2156
+ var StyledPopper = styled10(Popper2, {
1972
2157
  name: "DatePicker",
1973
2158
  slot: "popper"
1974
2159
  })(({ theme }) => ({
1975
2160
  zIndex: theme.zIndex.tooltip
1976
2161
  }));
1977
- var CalendarSheet = styled9(Sheet_default, {
2162
+ var CalendarSheet = styled10(Sheet_default, {
1978
2163
  name: "DatePicker",
1979
2164
  slot: "sheet",
1980
2165
  overridesResolver: (props, styles) => styles.root
@@ -1983,7 +2168,7 @@ var CalendarSheet = styled9(Sheet_default, {
1983
2168
  boxShadow: theme.shadow.md,
1984
2169
  borderRadius: theme.radius.md
1985
2170
  }));
1986
- var DatePickerRoot = styled9("div", {
2171
+ var DatePickerRoot = styled10("div", {
1987
2172
  name: "DatePicker",
1988
2173
  slot: "root",
1989
2174
  overridesResolver: (props, styles) => styles.root
@@ -2300,8 +2485,8 @@ var DatePicker_default = DatePicker;
2300
2485
  // src/components/Textarea/Textarea.tsx
2301
2486
  import React18 from "react";
2302
2487
  import { Textarea as JoyTextarea } from "@mui/joy";
2303
- import { motion as motion18 } from "framer-motion";
2304
- var MotionTextarea = motion18(JoyTextarea);
2488
+ import { motion as motion19 } from "framer-motion";
2489
+ var MotionTextarea = motion19(JoyTextarea);
2305
2490
  var Textarea = (props) => {
2306
2491
  const {
2307
2492
  label,
@@ -2354,8 +2539,8 @@ var Textarea_default = Textarea;
2354
2539
  // src/components/Select/Select.tsx
2355
2540
  import React19, { useMemo as useMemo7 } from "react";
2356
2541
  import { Select as JoySelect, Option as JoyOption } from "@mui/joy";
2357
- import { motion as motion19 } from "framer-motion";
2358
- var MotionOption = motion19(JoyOption);
2542
+ import { motion as motion20 } from "framer-motion";
2543
+ var MotionOption = motion20(JoyOption);
2359
2544
  var Option = MotionOption;
2360
2545
  Option.displayName = "Option";
2361
2546
  function Select(props) {
@@ -2431,11 +2616,14 @@ Select.displayName = "Select";
2431
2616
  // src/components/Select/index.ts
2432
2617
  var Select_default = Select;
2433
2618
 
2619
+ // src/components/DataTable/components.tsx
2620
+ import { Link } from "@mui/joy";
2621
+
2434
2622
  // src/components/Tooltip/Tooltip.tsx
2435
2623
  import React20 from "react";
2436
2624
  import { Tooltip as JoyTooltip } from "@mui/joy";
2437
- import { motion as motion20 } from "framer-motion";
2438
- var MotionTooltip = motion20(JoyTooltip);
2625
+ import { motion as motion21 } from "framer-motion";
2626
+ var MotionTooltip = motion21(JoyTooltip);
2439
2627
  var Tooltip = (props) => {
2440
2628
  return /* @__PURE__ */ React20.createElement(MotionTooltip, { ...props });
2441
2629
  };
@@ -2444,148 +2632,8 @@ Tooltip.displayName = "Tooltip";
2444
2632
  // src/components/Tooltip/index.ts
2445
2633
  var Tooltip_default = Tooltip;
2446
2634
 
2447
- // src/components/DataTable/DataTable.tsx
2448
- import { motion as motion21, AnimatePresence as AnimatePresence2 } from "framer-motion";
2449
-
2450
- // src/components/Pagination/Pagination.tsx
2451
- import React21, { useCallback as useCallback8, useEffect as useEffect4 } from "react";
2452
- import PreviousIcon from "@mui/icons-material/ChevronLeft";
2453
- import NextIcon from "@mui/icons-material/ChevronRight";
2454
- import { styled as styled10 } from "@mui/joy";
2455
- var PaginationButton = styled10(Button_default, {
2456
- name: "Pagination",
2457
- slot: "button"
2458
- })(({ theme, active, size }) => ({
2459
- "--Button-size": {
2460
- sm: "32px",
2461
- md: "40px",
2462
- lg: "48px"
2463
- }[size],
2464
- width: "var(--Button-size)",
2465
- height: "var(--Button-size)",
2466
- backgroundColor: active ? theme.vars.palette.primary.softHoverBg : "transparent",
2467
- color: active ? theme.vars.palette.primary.softColor : theme.vars.palette.neutral.plainColor,
2468
- "&:hover": {
2469
- color: active ? theme.vars.palette.primary.softColor : theme.vars.palette.neutral.softColor,
2470
- backgroundColor: active ? theme.vars.palette.primary.softActiveBg : theme.vars.palette.neutral.softHoverBg
2471
- }
2472
- }));
2473
- var PaginationIconButton = styled10(IconButton_default, {
2474
- name: "Pagination",
2475
- slot: "button"
2476
- })(({ theme, size }) => ({
2477
- "--IconButton-size": {
2478
- sm: "32px",
2479
- md: "40px",
2480
- lg: "48px"
2481
- }[size],
2482
- "--Icon-fontSize": "20px",
2483
- width: "var(--IconButton-size)",
2484
- height: "var(--IconButton-size)",
2485
- color: theme.vars.palette.neutral.plainColor,
2486
- "&:hover": {
2487
- color: theme.vars.palette.neutral.softColor,
2488
- backgroundColor: theme.vars.palette.neutral.softHoverBg
2489
- }
2490
- }));
2491
- var PaginationRoot = styled10(Stack_default, {
2492
- name: "Pagination",
2493
- slot: "root"
2494
- })({});
2495
- var PaginationContainer = styled10(Stack_default, {
2496
- name: "Pagination",
2497
- slot: "container"
2498
- })(({ theme, size }) => ({
2499
- gap: {
2500
- sm: theme.spacing(1),
2501
- md: theme.spacing(1.5),
2502
- lg: theme.spacing(2)
2503
- }[size]
2504
- }));
2505
- function Pagination(props) {
2506
- const {
2507
- paginationModel: _paginationModel,
2508
- defaultPaginationModel = { page: 1, pageSize: 25 },
2509
- onPageChange,
2510
- rowCount,
2511
- size = "md",
2512
- ...innerProps
2513
- } = props;
2514
- const [paginationModel, setPaginationModel] = useControlledState(
2515
- _paginationModel,
2516
- defaultPaginationModel,
2517
- useCallback8(
2518
- (newPage) => {
2519
- onPageChange(newPage.page);
2520
- },
2521
- [onPageChange]
2522
- )
2523
- );
2524
- const handlePageChange = (newPage) => {
2525
- setPaginationModel({ ...paginationModel, page: newPage });
2526
- };
2527
- const firstPage = 1;
2528
- const lastPage = Math.max(firstPage, Math.ceil(rowCount / paginationModel.pageSize));
2529
- const beforePages = [paginationModel.page - 2, paginationModel.page - 1].filter((p) => p > 1);
2530
- const afterPages = [paginationModel.page + 1, paginationModel.page + 2].filter((p) => p <= lastPage - 1);
2531
- const isMoreAfterPages = lastPage > 1 && paginationModel.page < lastPage - 3;
2532
- const isMoreBeforePages = lastPage > 1 && paginationModel.page > 4;
2533
- useEffect4(() => {
2534
- if (paginationModel.page > lastPage) {
2535
- setPaginationModel({ ...paginationModel, page: lastPage });
2536
- }
2537
- }, [rowCount, paginationModel, lastPage, setPaginationModel]);
2538
- return /* @__PURE__ */ React21.createElement(PaginationRoot, { ...innerProps }, /* @__PURE__ */ React21.createElement(PaginationContainer, { direction: "row", size, alignItems: "center" }, /* @__PURE__ */ React21.createElement(
2539
- PaginationIconButton,
2540
- {
2541
- size,
2542
- variant: "plain",
2543
- color: "neutral",
2544
- onClick: () => handlePageChange(paginationModel.page - 1),
2545
- disabled: paginationModel.page === firstPage,
2546
- "aria-label": "Previous page"
2547
- },
2548
- /* @__PURE__ */ React21.createElement(PreviousIcon, null)
2549
- ), paginationModel.page !== firstPage && /* @__PURE__ */ React21.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(firstPage) }, firstPage), isMoreBeforePages && /* @__PURE__ */ React21.createElement(
2550
- PaginationButton,
2551
- {
2552
- size,
2553
- variant: "plain",
2554
- color: "neutral",
2555
- onClick: () => handlePageChange(paginationModel.page - 3),
2556
- "aria-label": "More previous pages"
2557
- },
2558
- "..."
2559
- ), beforePages.map((p) => /* @__PURE__ */ React21.createElement(PaginationButton, { key: p, size, variant: "plain", color: "neutral", onClick: () => handlePageChange(p) }, p)), /* @__PURE__ */ React21.createElement(PaginationButton, { active: "true", size, "aria-current": "page" }, paginationModel.page), afterPages.map((p) => /* @__PURE__ */ React21.createElement(PaginationButton, { key: p, size, variant: "plain", color: "neutral", onClick: () => handlePageChange(p) }, p)), isMoreAfterPages && /* @__PURE__ */ React21.createElement(
2560
- PaginationButton,
2561
- {
2562
- size,
2563
- variant: "plain",
2564
- color: "neutral",
2565
- "aria-label": "More next pages",
2566
- onClick: () => handlePageChange(paginationModel.page + 3)
2567
- },
2568
- "..."
2569
- ), paginationModel.page !== lastPage && /* @__PURE__ */ React21.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(lastPage) }, lastPage), /* @__PURE__ */ React21.createElement(
2570
- PaginationIconButton,
2571
- {
2572
- size,
2573
- variant: "plain",
2574
- color: "neutral",
2575
- onClick: () => handlePageChange(paginationModel.page + 1),
2576
- disabled: paginationModel.page === lastPage,
2577
- "aria-label": "Next page"
2578
- },
2579
- /* @__PURE__ */ React21.createElement(NextIcon, null)
2580
- )));
2581
- }
2582
- Pagination.displayName = "Pagination";
2583
-
2584
- // src/components/Pagination/index.ts
2585
- var Pagination_default = Pagination;
2586
-
2587
2635
  // src/components/InfoSign/InfoSign.tsx
2588
- import React22 from "react";
2636
+ import React21 from "react";
2589
2637
  import { styled as styled11, tooltipClasses } from "@mui/joy";
2590
2638
  import MuiInfoIcon from "@mui/icons-material/Info";
2591
2639
  var InfoIcon = styled11(MuiInfoIcon, {
@@ -2598,7 +2646,7 @@ var InfoIcon = styled11(MuiInfoIcon, {
2598
2646
  }));
2599
2647
  function InfoSign(props) {
2600
2648
  const { message, placement } = props;
2601
- return /* @__PURE__ */ React22.createElement(
2649
+ return /* @__PURE__ */ React21.createElement(
2602
2650
  Tooltip_default,
2603
2651
  {
2604
2652
  arrow: true,
@@ -2608,28 +2656,16 @@ function InfoSign(props) {
2608
2656
  maxWidth: "320px"
2609
2657
  }
2610
2658
  },
2611
- title: message?.split("\n").map((line, i) => /* @__PURE__ */ React22.createElement("div", { key: `info-sign-${i}` }, line))
2659
+ title: message?.split("\n").map((line, i) => /* @__PURE__ */ React21.createElement("div", { key: `info-sign-${i}` }, line))
2612
2660
  },
2613
- /* @__PURE__ */ React22.createElement(InfoIcon, null)
2661
+ /* @__PURE__ */ React21.createElement(InfoIcon, null)
2614
2662
  );
2615
2663
  }
2616
-
2617
- // src/components/InfoSign/index.ts
2618
- var InfoSign_default = InfoSign;
2619
-
2620
- // src/components/DataTable/DataTable.tsx
2621
- function getTextAlign(props) {
2622
- return !props.editMode && ["number", "date", "currency"].includes(props.type || "") ? "end" : "start";
2623
- }
2624
- var DefaultLoadingOverlay = () => /* @__PURE__ */ React23.createElement(LinearProgress, { value: 8, variant: "plain" });
2625
- var EllipsisDiv = styled12("div", {
2626
- name: "DataTable",
2627
- slot: "textEllipsis"
2628
- })({
2629
- overflow: "hidden",
2630
- textOverflow: "ellipsis",
2631
- whiteSpace: "nowrap"
2632
- });
2664
+
2665
+ // src/components/InfoSign/index.ts
2666
+ var InfoSign_default = InfoSign;
2667
+
2668
+ // src/components/DataTable/components.tsx
2633
2669
  var TextEllipsis = ({ children }) => {
2634
2670
  const textRef = useRef4(null);
2635
2671
  const [showTooltip, setShowTooltip] = useState6(false);
@@ -2640,9 +2676,9 @@ var TextEllipsis = ({ children }) => {
2640
2676
  setShowTooltip(isTextTruncated);
2641
2677
  }
2642
2678
  }, [children]);
2643
- const content = /* @__PURE__ */ React23.createElement(EllipsisDiv, { ref: textRef }, children);
2679
+ const content = /* @__PURE__ */ React22.createElement(EllipsisDiv, { ref: textRef }, children);
2644
2680
  if (showTooltip) {
2645
- return /* @__PURE__ */ React23.createElement(Tooltip_default, { title: children, placement: "top", onClick: (e) => e.stopPropagation() }, content);
2681
+ return /* @__PURE__ */ React22.createElement(Tooltip_default, { title: children, placement: "top", onClick: (e) => e.stopPropagation() }, content);
2646
2682
  }
2647
2683
  return content;
2648
2684
  };
@@ -2656,9 +2692,9 @@ var CellTextEllipsis = ({ children }) => {
2656
2692
  setShowTooltip(isTextTruncated);
2657
2693
  }
2658
2694
  }, [children]);
2659
- const content = /* @__PURE__ */ React23.createElement(EllipsisDiv, { ref: textRef }, children);
2695
+ const content = /* @__PURE__ */ React22.createElement(EllipsisDiv, { ref: textRef }, children);
2660
2696
  if (showTooltip) {
2661
- return /* @__PURE__ */ React23.createElement(
2697
+ return /* @__PURE__ */ React22.createElement(
2662
2698
  Tooltip_default,
2663
2699
  {
2664
2700
  title: children,
@@ -2672,129 +2708,6 @@ var CellTextEllipsis = ({ children }) => {
2672
2708
  }
2673
2709
  return content;
2674
2710
  };
2675
- var OverlayWrapper = styled12("tr", {
2676
- name: "DataTable",
2677
- slot: "overlayWrapper"
2678
- })({
2679
- position: "sticky",
2680
- top: `calc(var(--unstable_TableCell-height, 32px))`,
2681
- left: 0,
2682
- right: 0,
2683
- zIndex: 1,
2684
- "& > td": {
2685
- height: 0,
2686
- padding: 0,
2687
- border: "none !important"
2688
- }
2689
- });
2690
- var numberFormatter = (value) => "Intl" in window ? new Intl.NumberFormat().format(value) : value;
2691
- var Resizer = (ref) => /* @__PURE__ */ React23.createElement(
2692
- Box_default,
2693
- {
2694
- sx: {
2695
- position: "absolute",
2696
- top: 0,
2697
- right: 0,
2698
- bottom: 0,
2699
- width: "4px",
2700
- cursor: "col-resize"
2701
- },
2702
- onClick: (e) => e.stopPropagation(),
2703
- onMouseDown: (e) => {
2704
- const initialX = e.clientX;
2705
- const initialWidth = ref.current?.getBoundingClientRect().width;
2706
- const onMouseMove = (e2) => {
2707
- if (initialWidth && initialX) {
2708
- ref.current.style.width = `${initialWidth + (e2.clientX - initialX)}px`;
2709
- }
2710
- };
2711
- const onMouseUp = () => {
2712
- document.removeEventListener("mousemove", onMouseMove);
2713
- document.removeEventListener("mouseup", onMouseUp);
2714
- };
2715
- document.addEventListener("mousemove", onMouseMove);
2716
- document.addEventListener("mouseup", onMouseUp);
2717
- }
2718
- }
2719
- );
2720
- var VirtualizedTableBody = styled12("tbody", {
2721
- name: "DataTable",
2722
- slot: "tableBody"
2723
- })({
2724
- // HACK: for virtualization: tbody의 height를 렌더링 된 tr의 총 높이 보다 높은 값으로 지정하고도 tr의 size를 유지하기 위한 꼼수
2725
- "&::after": {
2726
- content: "''",
2727
- display: "block",
2728
- height: "0.01em"
2729
- },
2730
- // NOTE: 테이블 안에 버튼을 넣을 때 버튼의 높이가 테이블의 높이를 넘어가지 않도록 설정
2731
- [`& .${buttonClasses.root}`]: {
2732
- "--Button-minHeight": "26px",
2733
- "--Button-paddingBlock": "0.25rem",
2734
- lineHeight: 1,
2735
- marginTop: "-2px",
2736
- marginBottom: "-2px"
2737
- },
2738
- [`& .${iconButtonClasses.root}`]: {
2739
- "--IconButton-size": "26px",
2740
- verticalAlign: "middle",
2741
- marginTop: "-2px",
2742
- marginBottom: "-2px"
2743
- }
2744
- });
2745
- var StyledTableRow = styled12("tr", {
2746
- name: "DataTable",
2747
- slot: "tableRow",
2748
- shouldForwardProp: (prop) => prop !== "striped"
2749
- })(({ striped }) => ({
2750
- ...striped && {
2751
- backgroundColor: "var(--TableRow-stripeBackground, var(--ceed-palette-background-level2))",
2752
- color: "var(--ceed-palette-text-primary)",
2753
- "& td": {
2754
- backgroundColor: "background.surface"
2755
- }
2756
- },
2757
- "&:hover": {
2758
- backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))",
2759
- "& td": {
2760
- backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))"
2761
- }
2762
- }
2763
- }));
2764
- var VirtualizedTableRow = memo(StyledTableRow, (prevProps, nextProps) => {
2765
- return prevProps.striped === nextProps.striped && prevProps.style?.height === nextProps.style?.height && prevProps.style?.transform === nextProps.style?.transform && // @ts-ignore
2766
- prevProps["data-row-id"] === nextProps["data-row-id"] && // @ts-ignore
2767
- prevProps["data-index"] === nextProps["data-index"] && prevProps.tabIndex === nextProps.tabIndex && prevProps["aria-checked"] === nextProps["aria-checked"] && // Include children check to handle isCellEditable changes
2768
- prevProps.children === nextProps.children;
2769
- });
2770
- var Asterisk = styled12("span", {
2771
- name: "DataTable",
2772
- slot: "headCellAsterisk"
2773
- })(({ theme }) => ({
2774
- color: "var(--ceed-palette-danger-500)",
2775
- marginLeft: theme.spacing(0.5)
2776
- }));
2777
- var StyledTh = styled12(motion21.th)(({ theme }) => ({
2778
- boxShadow: "1px 0 var(--TableCell-borderColor)"
2779
- // border 대신 box-shadow를 사용하여 stickyHeader와 함께 사용할 때 border가 겹치는 문제를 해결
2780
- }));
2781
- var StyledTd = styled12("td")(({ theme }) => ({
2782
- transition: `box-shadow 0.3s`,
2783
- "&:not(.is-last-left):not(.is-last-right)": {
2784
- boxShadow: "1px 0 var(--TableCell-borderColor)"
2785
- },
2786
- ".ScrollableRight &": {
2787
- "&.is-last-left": {
2788
- boxShadow: `1px 0 var(--TableCell-borderColor), ${theme.shadow.md}`
2789
- }
2790
- },
2791
- ".ScrollableLeft &": {
2792
- "&.is-last-right": {
2793
- boxShadow: `1px 0 var(--TableCell-borderColor), ${theme.shadow.md}`
2794
- }
2795
- }
2796
- }));
2797
- var MotionSortIcon = motion21(SortIcon);
2798
2711
  var HeadCell = (props) => {
2799
2712
  const {
2800
2713
  width,
@@ -2816,17 +2729,20 @@ var HeadCell = (props) => {
2816
2729
  isPinned,
2817
2730
  pinnedStartPosition,
2818
2731
  pinnedEndPosition,
2819
- headerRef
2732
+ headerRef,
2733
+ tableColRef,
2734
+ headerClassName
2820
2735
  } = props;
2821
2736
  const theme = useTheme();
2822
2737
  const ref = headerRef;
2738
+ const colRef = tableColRef;
2823
2739
  const [isHovered, setIsHovered] = useState6(false);
2824
2740
  const sortable = type === "actions" ? false : _sortable;
2825
2741
  const headId = useMemo8(
2826
2742
  () => `${tableId}_header_${headerName ?? field}`.trim(),
2827
2743
  [tableId, headerName, field]
2828
2744
  );
2829
- const resizer = useMemo8(() => resizable ?? true ? Resizer(ref) : null, [resizable, ref]);
2745
+ const resizer = useMemo8(() => resizable ?? true ? Resizer(ref, colRef) : null, [resizable, ref, colRef]);
2830
2746
  const style = useMemo8(
2831
2747
  () => ({
2832
2748
  width,
@@ -2848,7 +2764,7 @@ var HeadCell = (props) => {
2848
2764
  const sortIcon = useMemo8(() => {
2849
2765
  const isSorted = !!sort;
2850
2766
  const isVisible = sortable && (isSorted || isHovered);
2851
- return /* @__PURE__ */ React23.createElement(AnimatePresence2, { mode: "wait" }, isVisible && /* @__PURE__ */ React23.createElement(
2767
+ return /* @__PURE__ */ React22.createElement(AnimatePresence2, { mode: "wait" }, isVisible && /* @__PURE__ */ React22.createElement(
2852
2768
  MotionSortIcon,
2853
2769
  {
2854
2770
  key: "sort-icon",
@@ -2877,10 +2793,20 @@ var HeadCell = (props) => {
2877
2793
  ));
2878
2794
  }, [headId, initialSort, sort, sortable, isHovered]);
2879
2795
  const infoSign = useMemo8(
2880
- () => description ? /* @__PURE__ */ React23.createElement(InfoSign_default, { message: description, placement: "bottom" }) : null,
2796
+ () => description ? /* @__PURE__ */ React22.createElement(InfoSign_default, { message: description, placement: "bottom" }) : null,
2881
2797
  [description]
2882
2798
  );
2883
- return /* @__PURE__ */ React23.createElement(
2799
+ const params = useMemo8(
2800
+ () => ({
2801
+ field
2802
+ }),
2803
+ [field]
2804
+ );
2805
+ const computedHeaderClassName = useMemo8(
2806
+ () => (typeof headerClassName === "function" ? headerClassName(params) : headerClassName) || void 0,
2807
+ [headerClassName, params]
2808
+ );
2809
+ return /* @__PURE__ */ React22.createElement(
2884
2810
  StyledTh,
2885
2811
  {
2886
2812
  id: headId,
@@ -2889,16 +2815,17 @@ var HeadCell = (props) => {
2889
2815
  ref,
2890
2816
  key: field,
2891
2817
  style,
2892
- onClick: useCallback9(
2818
+ onClick: useCallback8(
2893
2819
  (e) => sortable && onSortChange?.({ field, currentSort: sort, multiple: e.shiftKey }),
2894
2820
  [field, onSortChange, sort, sortable]
2895
2821
  ),
2896
2822
  onMouseEnter: () => setIsHovered(true),
2897
2823
  onMouseLeave: () => setIsHovered(false),
2898
2824
  whileHover: "hover",
2899
- initial: "initial"
2825
+ initial: "initial",
2826
+ className: computedHeaderClassName
2900
2827
  },
2901
- /* @__PURE__ */ React23.createElement(Stack_default, { gap: 1, direction: "row", justifyContent: textAlign, alignItems: "center" }, textAlign === "end" && sortIcon, textAlign === "end" && infoSign, /* @__PURE__ */ React23.createElement(TextEllipsis, null, headerName ?? field, editMode && required && /* @__PURE__ */ React23.createElement(Asterisk, null, "*")), textAlign === "start" && infoSign, textAlign === "start" && sortIcon),
2828
+ /* @__PURE__ */ React22.createElement(Stack_default, { gap: 1, direction: "row", justifyContent: textAlign, alignItems: "center" }, textAlign === "end" && sortIcon, textAlign === "end" && infoSign, /* @__PURE__ */ React22.createElement(TextEllipsis, null, headerName ?? field, editMode && required && /* @__PURE__ */ React22.createElement(Asterisk, null, "*")), textAlign === "start" && infoSign, textAlign === "start" && sortIcon),
2902
2829
  resizer
2903
2830
  );
2904
2831
  };
@@ -3013,18 +2940,18 @@ var BodyCell = (props) => {
3013
2940
  return createElement(memo(renderEditCell), params);
3014
2941
  }
3015
2942
  return {
3016
- date: /* @__PURE__ */ React23.createElement(DatePicker_default, { value, ...editModeComponentProps }),
3017
- currency: /* @__PURE__ */ React23.createElement(
2943
+ date: /* @__PURE__ */ React22.createElement(DatePicker_default, { value, ...editModeComponentProps }),
2944
+ currency: /* @__PURE__ */ React22.createElement(
3018
2945
  CurrencyInput_default,
3019
2946
  {
3020
2947
  value,
3021
2948
  ...editModeComponentProps
3022
2949
  }
3023
2950
  ),
3024
- number: /* @__PURE__ */ React23.createElement(Input_default, { value, type: "number", ...editModeComponentProps }),
3025
- text: /* @__PURE__ */ React23.createElement(Input_default, { value, type: "text", ...editModeComponentProps }),
3026
- longText: /* @__PURE__ */ React23.createElement(Textarea_default, { value, ...editModeComponentProps }),
3027
- autocomplete: /* @__PURE__ */ React23.createElement(
2951
+ number: /* @__PURE__ */ React22.createElement(Input_default, { value, type: "number", ...editModeComponentProps }),
2952
+ text: /* @__PURE__ */ React22.createElement(Input_default, { value, type: "text", ...editModeComponentProps }),
2953
+ longText: /* @__PURE__ */ React22.createElement(Textarea_default, { value, ...editModeComponentProps }),
2954
+ autocomplete: /* @__PURE__ */ React22.createElement(
3028
2955
  Autocomplete_default,
3029
2956
  {
3030
2957
  value,
@@ -3032,7 +2959,7 @@ var BodyCell = (props) => {
3032
2959
  ...editModeComponentProps
3033
2960
  }
3034
2961
  ),
3035
- select: /* @__PURE__ */ React23.createElement(
2962
+ select: /* @__PURE__ */ React22.createElement(
3036
2963
  Select_default,
3037
2964
  {
3038
2965
  value,
@@ -3049,7 +2976,7 @@ var BodyCell = (props) => {
3049
2976
  }
3050
2977
  const innerText = value;
3051
2978
  const typedComponent = {
3052
- link: React23.createElement(linkComponentFromProps || Link, {
2979
+ link: React22.createElement(linkComponentFromProps || Link, {
3053
2980
  children: innerText,
3054
2981
  ...componentProps
3055
2982
  })
@@ -3059,7 +2986,7 @@ var BodyCell = (props) => {
3059
2986
  const getActions = props.getActions;
3060
2987
  const CellComponent = useMemo8(() => {
3061
2988
  if (type === "actions") {
3062
- return /* @__PURE__ */ React23.createElement(Stack_default, { direction: "row", gap: 1, justifyContent: "center", alignItems: "center" }, getActions?.(params));
2989
+ return /* @__PURE__ */ React22.createElement(Stack_default, { direction: "row", gap: 1, justifyContent: "center", alignItems: "center" }, getActions?.(params));
3063
2990
  }
3064
2991
  return editMode && EditModeComponent ? EditModeComponent : ReadModeComponent;
3065
2992
  }, [type, getActions, params, editMode, EditModeComponent, ReadModeComponent]);
@@ -3069,10 +2996,10 @@ var BodyCell = (props) => {
3069
2996
  () => (typeof cellClassName === "function" ? cellClassName(params) : cellClassName) || "",
3070
2997
  [cellClassName, params]
3071
2998
  );
3072
- useEffect5(() => {
2999
+ useEffect4(() => {
3073
3000
  setValue(row[field]);
3074
3001
  }, [row, field]);
3075
- return /* @__PURE__ */ React23.createElement(
3002
+ return /* @__PURE__ */ React22.createElement(
3076
3003
  StyledTd,
3077
3004
  {
3078
3005
  ref: cellRef,
@@ -3090,7 +3017,7 @@ var BodyCell = (props) => {
3090
3017
  className: [isLastStartPinnedColumn && "is-last-left", isLastEndPinnedColumn && "is-last-right", computedCellClassName].filter(Boolean).join(" ") || ""
3091
3018
  },
3092
3019
  useMemo8(
3093
- () => showTooltip ? /* @__PURE__ */ React23.createElement(CellTextEllipsis, null, CellComponent) : CellComponent,
3020
+ () => showTooltip ? /* @__PURE__ */ React22.createElement(CellTextEllipsis, null, CellComponent) : CellComponent,
3094
3021
  [CellComponent, showTooltip]
3095
3022
  )
3096
3023
  );
@@ -3098,7 +3025,7 @@ var BodyCell = (props) => {
3098
3025
  var BodyRow = memo(
3099
3026
  (props) => {
3100
3027
  const { tableId, columns, rowId, editMode, noWrap, row } = props;
3101
- return /* @__PURE__ */ React23.createElement(React23.Fragment, null, columns.map((column, i) => /* @__PURE__ */ React23.createElement(
3028
+ return /* @__PURE__ */ React22.createElement(React22.Fragment, null, columns.map((column, i) => /* @__PURE__ */ React22.createElement(
3102
3029
  BodyCell,
3103
3030
  {
3104
3031
  key: `${rowId}_${column.field.toString()}_${i}`,
@@ -3112,10 +3039,38 @@ var BodyRow = memo(
3112
3039
  )));
3113
3040
  }
3114
3041
  );
3042
+ var StyledTableRow2 = styled12("tr", {
3043
+ name: "DataTable",
3044
+ slot: "tableRow",
3045
+ shouldForwardProp: (prop) => prop !== "striped"
3046
+ })(({ striped }) => ({
3047
+ ...striped && {
3048
+ backgroundColor: "var(--TableRow-stripeBackground, var(--ceed-palette-background-level2))",
3049
+ color: "var(--ceed-palette-text-primary)",
3050
+ "& td": {
3051
+ backgroundColor: "background.surface"
3052
+ }
3053
+ },
3054
+ "&:hover": {
3055
+ backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))",
3056
+ "& td": {
3057
+ backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))"
3058
+ }
3059
+ }
3060
+ }));
3061
+ var VirtualizedTableRow = memo(StyledTableRow2, (prevProps, nextProps) => {
3062
+ return prevProps.striped === nextProps.striped && prevProps.style?.height === nextProps.style?.height && prevProps.style?.transform === nextProps.style?.transform && // @ts-ignore
3063
+ prevProps["data-row-id"] === nextProps["data-row-id"] && // @ts-ignore
3064
+ prevProps["data-index"] === nextProps["data-index"] && prevProps.tabIndex === nextProps.tabIndex && prevProps["aria-checked"] === nextProps["aria-checked"] && // Include children check to handle isCellEditable changes
3065
+ prevProps.children === nextProps.children;
3066
+ });
3067
+
3068
+ // src/components/DataTable/hooks.ts
3069
+ import { useState as useState7, useLayoutEffect as useLayoutEffect2, useRef as useRef5, useMemo as useMemo9, useCallback as useCallback9, useEffect as useEffect5, createRef } from "react";
3115
3070
  function useColumnWidths(columnsByField) {
3116
- const [widths, setWidths] = useState6({});
3117
- const roRef = useRef4();
3118
- useLayoutEffect(() => {
3071
+ const [widths, setWidths] = useState7({});
3072
+ const roRef = useRef5();
3073
+ useLayoutEffect2(() => {
3119
3074
  if (roRef.current) roRef.current.disconnect();
3120
3075
  roRef.current = new ResizeObserver((entries) => {
3121
3076
  let changed = false;
@@ -3161,28 +3116,39 @@ function useDataTableRenderer({
3161
3116
  editMode,
3162
3117
  getId: _getId,
3163
3118
  isTotalSelected: _isTotalSelected,
3164
- isRowSelectable
3119
+ isRowSelectable,
3120
+ columnGroupingModel
3165
3121
  }) {
3166
- const onSelectionModelChangeRef = useRef4(onSelectionModelChange);
3122
+ if (pinnedColumns && columnGroupingModel) {
3123
+ throw new Error(
3124
+ "You cannot use both `pinnedColumns` and `columnGroupingModel` at the same time. Please choose one of them."
3125
+ );
3126
+ }
3127
+ const onSelectionModelChangeRef = useRef5(onSelectionModelChange);
3167
3128
  onSelectionModelChangeRef.current = onSelectionModelChange;
3168
- const [focusedRowId, setFocusedRowId] = useState6(null);
3129
+ const [focusedRowId, setFocusedRowId] = useState7(null);
3169
3130
  const [sortModel, setSortModel] = useControlledState(
3170
3131
  controlledSortModel,
3171
3132
  initialState?.sorting?.sortModel ?? [],
3172
3133
  useCallback9((sortModel2) => onSortModelChange?.(sortModel2), [onSortModelChange])
3173
3134
  );
3174
- const columnsByField = useMemo8(
3175
- () => columnsProp.reduce(
3135
+ const reorderedColumns = useMemo9(() => {
3136
+ if (!columnGroupingModel) return columnsProp;
3137
+ return reorderColumnsByGroupingModel(columnsProp, columnGroupingModel);
3138
+ }, [columnsProp, columnGroupingModel]);
3139
+ const columnsByField = useMemo9(
3140
+ () => reorderedColumns.reduce(
3176
3141
  (acc, curr) => ({
3177
3142
  ...acc,
3178
3143
  [curr.field]: {
3179
3144
  ...curr,
3180
- headerRef: React23.createRef()
3145
+ headerRef: createRef(),
3146
+ tableColRef: createRef()
3181
3147
  }
3182
3148
  }),
3183
3149
  {}
3184
3150
  ),
3185
- [columnsProp]
3151
+ [reorderedColumns]
3186
3152
  );
3187
3153
  const sortComparator = useCallback9(
3188
3154
  (rowA, rowB) => {
@@ -3212,47 +3178,42 @@ function useDataTableRenderer({
3212
3178
  },
3213
3179
  [sortModel, columnsByField]
3214
3180
  );
3215
- const rows = useMemo8(
3181
+ const rows = useMemo9(
3216
3182
  () => sortModel.length ? [..._rows].sort(sortComparator) : _rows,
3217
3183
  [_rows, sortModel, sortComparator]
3218
3184
  );
3219
- const sortOrder = useMemo8(
3220
- // NOTE: default value를 props destructuring에서 할당하면 렌더링 시점에 초기화가 되어버린다.
3185
+ const sortOrder = useMemo9(
3221
3186
  () => Array.from(new Set(_sortOrder || ["asc", "desc", null])),
3222
3187
  [_sortOrder]
3223
3188
  );
3224
- const [page, setPage] = useState6(paginationModel?.page || 1);
3189
+ const [page, setPage] = useState7(paginationModel?.page || 1);
3225
3190
  const pageSize = paginationModel?.pageSize || 20;
3226
3191
  const getId = useCallback9(
3227
3192
  (row, index) => _getId?.(row) ?? row.id ?? `${(index || 0) + (page - 1) * pageSize}`,
3228
3193
  [_getId, page, pageSize]
3229
3194
  );
3230
- const selectedModelSet = useMemo8(
3231
- // NOTE: default value를 props destructuring에서 할당하면 렌더링 시점에 초기화가 되어버린다.
3232
- () => new Set(selectionModel || []),
3233
- [selectionModel]
3234
- );
3235
- const dataInPage = useMemo8(
3195
+ const selectedModelSet = useMemo9(() => new Set(selectionModel || []), [selectionModel]);
3196
+ const dataInPage = useMemo9(
3236
3197
  () => !pagination || paginationMode === "server" ? rows : rows.slice((page - 1) * pageSize, (page - 1) * pageSize + pageSize),
3237
3198
  [rows, page, pageSize, paginationMode, pagination]
3238
3199
  );
3239
- const selectableDataInPage = useMemo8(
3200
+ const selectableDataInPage = useMemo9(
3240
3201
  () => dataInPage.filter((row, i) => {
3241
3202
  if (!isRowSelectable) return true;
3242
3203
  return isRowSelectable({ row, id: getId(row, i) });
3243
3204
  }),
3244
3205
  [dataInPage, isRowSelectable, getId]
3245
3206
  );
3246
- const isAllSelected = useMemo8(
3207
+ const isAllSelected = useMemo9(
3247
3208
  () => selectableDataInPage.length > 0 && selectableDataInPage.every((row, i) => selectedModelSet.has(getId(row, i))),
3248
3209
  [selectableDataInPage, selectedModelSet, getId]
3249
3210
  );
3250
3211
  const rowCount = totalRowsProp || rows.length;
3251
- const selectableRowCount = useMemo8(() => {
3212
+ const selectableRowCount = useMemo9(() => {
3252
3213
  if (!isRowSelectable) return rowCount;
3253
3214
  return rows.filter((row, i) => isRowSelectable({ row, id: getId(row, i) })).length;
3254
3215
  }, [rows, isRowSelectable, getId, rowCount]);
3255
- const isTotalSelected = useMemo8(
3216
+ const isTotalSelected = useMemo9(
3256
3217
  () => _isTotalSelected ?? (selectableRowCount > 0 && (selectionModel?.length || 0) === selectableRowCount),
3257
3218
  [_isTotalSelected, selectionModel, selectableRowCount]
3258
3219
  );
@@ -3262,9 +3223,12 @@ function useDataTableRenderer({
3262
3223
  columnsByField[f].minWidth ?? 0,
3263
3224
  [columnWidths, columnsByField]
3264
3225
  );
3265
- const columns = useMemo8(() => {
3266
- const baseColumns = columnsProp || // fallback
3267
- Object.keys(rows[0] || {}).map((key) => ({
3226
+ const processedColumnGroups = useMemo9(() => {
3227
+ if (!columnGroupingModel) return null;
3228
+ return calculateColumnGroups(columnGroupingModel, reorderedColumns);
3229
+ }, [columnGroupingModel, reorderedColumns]);
3230
+ const columns = useMemo9(() => {
3231
+ const baseColumns = reorderedColumns.length > 0 ? reorderedColumns : Object.keys(rows[0] || {}).map((key) => ({
3268
3232
  field: key
3269
3233
  }));
3270
3234
  return baseColumns.map((column) => {
@@ -3274,19 +3238,19 @@ function useDataTableRenderer({
3274
3238
  return {
3275
3239
  ...column,
3276
3240
  headerRef: columnsByField[column.field].headerRef,
3241
+ tableColRef: columnsByField[column.field].tableColRef,
3277
3242
  isCellEditable: editMode && (typeof column.isCellEditable === "function" ? column.isCellEditable : column.isCellEditable ?? true),
3278
3243
  sort: sortModel.find((sort) => sort.field === column.field)?.sort,
3279
3244
  sortOrder: columnsByField[column.field]?.sortOrder || sortOrder,
3280
3245
  isPinned,
3281
3246
  isLastStartPinnedColumn: isLeftPinned && [...pinnedColumns?.left || []].pop() === column.field,
3282
3247
  isLastEndPinnedColumn: isRightPinned && (pinnedColumns?.right?.[0] ?? null) === column.field,
3283
- // pinned 관련 계산부
3284
3248
  pinnedStartPosition: pinnedColumns?.left?.slice(0, isLeftPinned ? pinnedColumns.left.indexOf(column.field) : pinnedColumns.left.length).reduce((acc, curr) => acc + getWidth(curr), 0),
3285
3249
  pinnedEndPosition: pinnedColumns?.right?.slice(isRightPinned ? pinnedColumns.right.indexOf(column.field) + 1 : 0).reduce((acc, curr) => acc + getWidth(curr), 0)
3286
3250
  };
3287
3251
  });
3288
3252
  }, [
3289
- columnsProp,
3253
+ reorderedColumns,
3290
3254
  rows,
3291
3255
  pinnedColumns?.left,
3292
3256
  pinnedColumns?.right,
@@ -3342,55 +3306,265 @@ function useDataTableRenderer({
3342
3306
  }, [page]);
3343
3307
  return {
3344
3308
  rowCount,
3345
- selectableRowCount,
3346
- page,
3347
- pageSize,
3348
- onPaginationModelChange: handlePageChange,
3349
- getId,
3350
- HeadCell,
3351
- BodyRow,
3352
- dataInPage,
3353
- handleSortChange,
3354
- isAllSelected,
3355
- // all rows are selected on this page
3356
- isTotalSelected,
3357
- isSelectedRow: useCallback9((model) => selectedModelSet.has(model), [selectedModelSet]),
3358
- isRowSelectable: useCallback9(
3359
- (rowId, row) => {
3360
- if (!isRowSelectable) return true;
3361
- return isRowSelectable({ row, id: rowId });
3362
- },
3363
- [isRowSelectable]
3364
- ),
3365
- focusedRowId,
3366
- onRowFocus: useCallback9((rowId) => {
3367
- setFocusedRowId(rowId);
3368
- }, []),
3369
- onAllCheckboxChange: useCallback9(() => {
3370
- onSelectionModelChange?.(isAllSelected ? [] : selectableDataInPage.map(getId));
3371
- }, [isAllSelected, selectableDataInPage, onSelectionModelChange, getId]),
3372
- onCheckboxChange: useCallback9(
3373
- (event, selectedModel) => {
3374
- if (selectedModelSet.has(selectedModel)) {
3375
- const newSelectionModel = (selectionModel || []).filter((model) => model !== selectedModel);
3376
- onSelectionModelChange?.(newSelectionModel);
3377
- } else {
3378
- const newSelectionModel = [...selectionModel || [], selectedModel];
3379
- onSelectionModelChange?.(newSelectionModel);
3380
- }
3309
+ selectableRowCount,
3310
+ page,
3311
+ pageSize,
3312
+ onPaginationModelChange: handlePageChange,
3313
+ getId,
3314
+ HeadCell,
3315
+ BodyRow,
3316
+ dataInPage,
3317
+ handleSortChange,
3318
+ isAllSelected,
3319
+ isTotalSelected,
3320
+ isSelectedRow: useCallback9((model) => selectedModelSet.has(model), [selectedModelSet]),
3321
+ isRowSelectable: useCallback9(
3322
+ (rowId, row) => {
3323
+ if (!isRowSelectable) return true;
3324
+ return isRowSelectable({ row, id: rowId });
3325
+ },
3326
+ [isRowSelectable]
3327
+ ),
3328
+ focusedRowId,
3329
+ onRowFocus: useCallback9((rowId) => {
3330
+ setFocusedRowId(rowId);
3331
+ }, []),
3332
+ onAllCheckboxChange: useCallback9(() => {
3333
+ onSelectionModelChange?.(isAllSelected ? [] : selectableDataInPage.map(getId));
3334
+ }, [isAllSelected, selectableDataInPage, onSelectionModelChange, getId]),
3335
+ onCheckboxChange: useCallback9(
3336
+ (event, selectedModel) => {
3337
+ if (selectedModelSet.has(selectedModel)) {
3338
+ const newSelectionModel = (selectionModel || []).filter((model) => model !== selectedModel);
3339
+ onSelectionModelChange?.(newSelectionModel);
3340
+ } else {
3341
+ const newSelectionModel = [...selectionModel || [], selectedModel];
3342
+ onSelectionModelChange?.(newSelectionModel);
3343
+ }
3344
+ },
3345
+ [selectionModel, onSelectionModelChange, selectedModelSet]
3346
+ ),
3347
+ columns,
3348
+ processedColumnGroups,
3349
+ onTotalSelect: useCallback9(() => {
3350
+ const selectableRows = rows.filter((row, i) => {
3351
+ if (!isRowSelectable) return true;
3352
+ return isRowSelectable({ row, id: getId(row, i) });
3353
+ });
3354
+ onSelectionModelChange?.(isTotalSelected ? [] : selectableRows.map(getId), !isTotalSelected);
3355
+ }, [isTotalSelected, rows, onSelectionModelChange, getId, isRowSelectable])
3356
+ };
3357
+ }
3358
+
3359
+ // src/components/Table/Table.tsx
3360
+ import React23 from "react";
3361
+ import { Table as JoyTable } from "@mui/joy";
3362
+ var Table = (props) => {
3363
+ const { children, ...inheritProps } = props;
3364
+ return /* @__PURE__ */ React23.createElement(JoyTable, { ...inheritProps }, children);
3365
+ };
3366
+ Table.displayName = "Table";
3367
+ function TableHead(props) {
3368
+ const {
3369
+ headCells,
3370
+ showCheckbox,
3371
+ onCheckboxChange,
3372
+ slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
3373
+ slotProps: { checkbox: checkboxProps = {} } = {}
3374
+ } = props;
3375
+ return /* @__PURE__ */ React23.createElement("thead", null, /* @__PURE__ */ React23.createElement("tr", null, showCheckbox && /* @__PURE__ */ React23.createElement(
3376
+ "th",
3377
+ {
3378
+ style: {
3379
+ width: "40px",
3380
+ textAlign: "center"
3381
+ }
3382
+ },
3383
+ /* @__PURE__ */ React23.createElement(RenderCheckbox, { onChange: onCheckboxChange, ...checkboxProps })
3384
+ ), headCells.map((headCell) => /* @__PURE__ */ React23.createElement(
3385
+ "th",
3386
+ {
3387
+ key: headCell.label,
3388
+ style: {
3389
+ width: headCell.width,
3390
+ minWidth: headCell.minWidth,
3391
+ maxWidth: headCell.maxWidth,
3392
+ textAlign: headCell.numeric ? "right" : "left"
3393
+ }
3394
+ },
3395
+ headCell.label
3396
+ ))));
3397
+ }
3398
+ TableHead.displayName = "TableHead";
3399
+ function TableBody(props) {
3400
+ const {
3401
+ rows,
3402
+ cellOrder,
3403
+ rowOptions,
3404
+ showCheckbox,
3405
+ onCheckboxChange,
3406
+ slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
3407
+ slotProps: { checkbox: checkboxProps = {} } = {}
3408
+ } = props;
3409
+ return /* @__PURE__ */ React23.createElement("tbody", null, rows.map((row, rowIndex) => /* @__PURE__ */ React23.createElement("tr", { key: `table-row-${rowIndex}` }, showCheckbox && /* @__PURE__ */ React23.createElement(
3410
+ "td",
3411
+ {
3412
+ style: {
3413
+ textAlign: "center"
3414
+ }
3415
+ },
3416
+ /* @__PURE__ */ React23.createElement(RenderCheckbox, { onChange: (event) => onCheckboxChange?.(event, rowIndex), ...checkboxProps })
3417
+ ), cellOrder.map((cellKey) => /* @__PURE__ */ React23.createElement(
3418
+ "td",
3419
+ {
3420
+ key: cellKey,
3421
+ style: {
3422
+ textAlign: rowOptions?.[cellKey]?.numeric ? "right" : "left"
3423
+ }
3424
+ },
3425
+ row[cellKey]
3426
+ )))));
3427
+ }
3428
+ TableBody.displayName = "TableBody";
3429
+
3430
+ // src/components/Pagination/Pagination.tsx
3431
+ import React24, { useCallback as useCallback10, useEffect as useEffect6 } from "react";
3432
+ import PreviousIcon from "@mui/icons-material/ChevronLeft";
3433
+ import NextIcon from "@mui/icons-material/ChevronRight";
3434
+ import { styled as styled13 } from "@mui/joy";
3435
+ var PaginationButton = styled13(Button_default, {
3436
+ name: "Pagination",
3437
+ slot: "button"
3438
+ })(({ theme, active, size }) => ({
3439
+ "--Button-size": {
3440
+ sm: "32px",
3441
+ md: "40px",
3442
+ lg: "48px"
3443
+ }[size],
3444
+ width: "var(--Button-size)",
3445
+ height: "var(--Button-size)",
3446
+ backgroundColor: active ? theme.vars.palette.primary.softHoverBg : "transparent",
3447
+ color: active ? theme.vars.palette.primary.softColor : theme.vars.palette.neutral.plainColor,
3448
+ "&:hover": {
3449
+ color: active ? theme.vars.palette.primary.softColor : theme.vars.palette.neutral.softColor,
3450
+ backgroundColor: active ? theme.vars.palette.primary.softActiveBg : theme.vars.palette.neutral.softHoverBg
3451
+ }
3452
+ }));
3453
+ var PaginationIconButton = styled13(IconButton_default, {
3454
+ name: "Pagination",
3455
+ slot: "button"
3456
+ })(({ theme, size }) => ({
3457
+ "--IconButton-size": {
3458
+ sm: "32px",
3459
+ md: "40px",
3460
+ lg: "48px"
3461
+ }[size],
3462
+ "--Icon-fontSize": "20px",
3463
+ width: "var(--IconButton-size)",
3464
+ height: "var(--IconButton-size)",
3465
+ color: theme.vars.palette.neutral.plainColor,
3466
+ "&:hover": {
3467
+ color: theme.vars.palette.neutral.softColor,
3468
+ backgroundColor: theme.vars.palette.neutral.softHoverBg
3469
+ }
3470
+ }));
3471
+ var PaginationRoot = styled13(Stack_default, {
3472
+ name: "Pagination",
3473
+ slot: "root"
3474
+ })({});
3475
+ var PaginationContainer = styled13(Stack_default, {
3476
+ name: "Pagination",
3477
+ slot: "container"
3478
+ })(({ theme, size }) => ({
3479
+ gap: {
3480
+ sm: theme.spacing(1),
3481
+ md: theme.spacing(1.5),
3482
+ lg: theme.spacing(2)
3483
+ }[size]
3484
+ }));
3485
+ function Pagination(props) {
3486
+ const {
3487
+ paginationModel: _paginationModel,
3488
+ defaultPaginationModel = { page: 1, pageSize: 25 },
3489
+ onPageChange,
3490
+ rowCount,
3491
+ size = "md",
3492
+ ...innerProps
3493
+ } = props;
3494
+ const [paginationModel, setPaginationModel] = useControlledState(
3495
+ _paginationModel,
3496
+ defaultPaginationModel,
3497
+ useCallback10(
3498
+ (newPage) => {
3499
+ onPageChange(newPage.page);
3381
3500
  },
3382
- [selectionModel, onSelectionModelChange, selectedModelSet]
3383
- ),
3384
- columns,
3385
- onTotalSelect: useCallback9(() => {
3386
- const selectableRows = rows.filter((row, i) => {
3387
- if (!isRowSelectable) return true;
3388
- return isRowSelectable({ row, id: getId(row, i) });
3389
- });
3390
- onSelectionModelChange?.(isTotalSelected ? [] : selectableRows.map(getId), !isTotalSelected);
3391
- }, [isTotalSelected, rows, onSelectionModelChange, getId, isRowSelectable])
3501
+ [onPageChange]
3502
+ )
3503
+ );
3504
+ const handlePageChange = (newPage) => {
3505
+ setPaginationModel({ ...paginationModel, page: newPage });
3392
3506
  };
3507
+ const firstPage = 1;
3508
+ const lastPage = Math.max(firstPage, Math.ceil(rowCount / paginationModel.pageSize));
3509
+ const beforePages = [paginationModel.page - 2, paginationModel.page - 1].filter((p) => p > 1);
3510
+ const afterPages = [paginationModel.page + 1, paginationModel.page + 2].filter((p) => p <= lastPage - 1);
3511
+ const isMoreAfterPages = lastPage > 1 && paginationModel.page < lastPage - 3;
3512
+ const isMoreBeforePages = lastPage > 1 && paginationModel.page > 4;
3513
+ useEffect6(() => {
3514
+ if (paginationModel.page > lastPage) {
3515
+ setPaginationModel({ ...paginationModel, page: lastPage });
3516
+ }
3517
+ }, [rowCount, paginationModel, lastPage, setPaginationModel]);
3518
+ return /* @__PURE__ */ React24.createElement(PaginationRoot, { ...innerProps }, /* @__PURE__ */ React24.createElement(PaginationContainer, { direction: "row", size, alignItems: "center" }, /* @__PURE__ */ React24.createElement(
3519
+ PaginationIconButton,
3520
+ {
3521
+ size,
3522
+ variant: "plain",
3523
+ color: "neutral",
3524
+ onClick: () => handlePageChange(paginationModel.page - 1),
3525
+ disabled: paginationModel.page === firstPage,
3526
+ "aria-label": "Previous page"
3527
+ },
3528
+ /* @__PURE__ */ React24.createElement(PreviousIcon, null)
3529
+ ), paginationModel.page !== firstPage && /* @__PURE__ */ React24.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(firstPage) }, firstPage), isMoreBeforePages && /* @__PURE__ */ React24.createElement(
3530
+ PaginationButton,
3531
+ {
3532
+ size,
3533
+ variant: "plain",
3534
+ color: "neutral",
3535
+ onClick: () => handlePageChange(paginationModel.page - 3),
3536
+ "aria-label": "More previous pages"
3537
+ },
3538
+ "..."
3539
+ ), beforePages.map((p) => /* @__PURE__ */ React24.createElement(PaginationButton, { key: p, size, variant: "plain", color: "neutral", onClick: () => handlePageChange(p) }, p)), /* @__PURE__ */ React24.createElement(PaginationButton, { active: "true", size, "aria-current": "page" }, paginationModel.page), afterPages.map((p) => /* @__PURE__ */ React24.createElement(PaginationButton, { key: p, size, variant: "plain", color: "neutral", onClick: () => handlePageChange(p) }, p)), isMoreAfterPages && /* @__PURE__ */ React24.createElement(
3540
+ PaginationButton,
3541
+ {
3542
+ size,
3543
+ variant: "plain",
3544
+ color: "neutral",
3545
+ "aria-label": "More next pages",
3546
+ onClick: () => handlePageChange(paginationModel.page + 3)
3547
+ },
3548
+ "..."
3549
+ ), paginationModel.page !== lastPage && /* @__PURE__ */ React24.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(lastPage) }, lastPage), /* @__PURE__ */ React24.createElement(
3550
+ PaginationIconButton,
3551
+ {
3552
+ size,
3553
+ variant: "plain",
3554
+ color: "neutral",
3555
+ onClick: () => handlePageChange(paginationModel.page + 1),
3556
+ disabled: paginationModel.page === lastPage,
3557
+ "aria-label": "Next page"
3558
+ },
3559
+ /* @__PURE__ */ React24.createElement(NextIcon, null)
3560
+ )));
3393
3561
  }
3562
+ Pagination.displayName = "Pagination";
3563
+
3564
+ // src/components/Pagination/index.ts
3565
+ var Pagination_default = Pagination;
3566
+
3567
+ // src/components/DataTable/DataTable.tsx
3394
3568
  function Component(props, apiRef) {
3395
3569
  const {
3396
3570
  rows,
@@ -3424,6 +3598,8 @@ function Component(props, apiRef) {
3424
3598
  getId: ____________,
3425
3599
  // getId is used in useDataTableRenderer
3426
3600
  loading,
3601
+ columnGroupingModel: _________________,
3602
+ // columnGroupingModel is used in useDataTableRenderer
3427
3603
  slots: {
3428
3604
  checkbox: RenderCheckbox = Checkbox_default,
3429
3605
  toolbar: Toolbar,
@@ -3436,10 +3612,11 @@ function Component(props, apiRef) {
3436
3612
  ...innerProps
3437
3613
  } = props;
3438
3614
  const tableId = useId();
3439
- const parentRef = useRef4(null);
3440
- const tableBodyRef = useRef4(null);
3615
+ const parentRef = useRef6(null);
3616
+ const tableBodyRef = useRef6(null);
3441
3617
  const {
3442
3618
  columns,
3619
+ processedColumnGroups,
3443
3620
  isAllSelected,
3444
3621
  isSelectedRow,
3445
3622
  isRowSelectable: isRowSelectableCheck,
@@ -3467,29 +3644,29 @@ function Component(props, apiRef) {
3467
3644
  measureElement: (element) => element.clientHeight,
3468
3645
  overscan: 10
3469
3646
  });
3470
- const paginationModel = useMemo8(() => ({ page, pageSize }), [page, pageSize]);
3647
+ const paginationModel = useMemo10(() => ({ page, pageSize }), [page, pageSize]);
3471
3648
  const totalSize = virtualizer.getTotalSize();
3472
3649
  const virtualizedItems = virtualizer.getVirtualItems();
3473
- const getRowClickHandler = useCallback9(
3650
+ const getRowClickHandler = useCallback11(
3474
3651
  (row, rowId) => (e) => {
3475
3652
  onRowClick?.({ row, rowId }, e);
3476
3653
  checkboxSelection && !disableSelectionOnClick && isRowSelectableCheck(rowId, row) && onCheckboxChange(e, rowId);
3477
3654
  },
3478
3655
  [onRowClick, checkboxSelection, disableSelectionOnClick, onCheckboxChange, isRowSelectableCheck]
3479
3656
  );
3480
- const getRowFocusHandler = useCallback9(
3657
+ const getRowFocusHandler = useCallback11(
3481
3658
  (rowId) => () => {
3482
3659
  onRowFocus(rowId);
3483
3660
  },
3484
3661
  [onRowFocus]
3485
3662
  );
3486
- const getCheckboxClickHandler = useCallback9(
3663
+ const getCheckboxClickHandler = useCallback11(
3487
3664
  () => (e) => {
3488
3665
  e.stopPropagation();
3489
3666
  },
3490
3667
  []
3491
3668
  );
3492
- const getCheckboxChangeHandler = useCallback9(
3669
+ const getCheckboxChangeHandler = useCallback11(
3493
3670
  (rowId, row) => (e) => {
3494
3671
  if (isRowSelectableCheck(rowId, row)) {
3495
3672
  onCheckboxChange(e, rowId);
@@ -3513,7 +3690,7 @@ function Component(props, apiRef) {
3513
3690
  });
3514
3691
  }
3515
3692
  }));
3516
- return /* @__PURE__ */ React23.createElement(
3693
+ return /* @__PURE__ */ React25.createElement(
3517
3694
  Box_default,
3518
3695
  {
3519
3696
  sx: {
@@ -3523,7 +3700,7 @@ function Component(props, apiRef) {
3523
3700
  flexDirection: "column"
3524
3701
  }
3525
3702
  },
3526
- (!!checkboxSelection || !!Toolbar) && /* @__PURE__ */ React23.createElement(
3703
+ (!!checkboxSelection || !!Toolbar) && /* @__PURE__ */ React25.createElement(
3527
3704
  Stack_default,
3528
3705
  {
3529
3706
  direction: "row",
@@ -3533,10 +3710,10 @@ function Component(props, apiRef) {
3533
3710
  justifyContent: "space-between",
3534
3711
  alignItems: "center"
3535
3712
  },
3536
- !!checkboxSelection && /* @__PURE__ */ React23.createElement(Stack_default, { direction: "row", spacing: 1 }, !isAllSelected && /* @__PURE__ */ React23.createElement(Typography_default, { level: "body-xs" }, numberFormatter(selectionModel?.length || 0), " items selected"), isAllSelected && !isTotalSelected && /* @__PURE__ */ React23.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ React23.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectionModel?.length || 0), " items on this page are selected."), /* @__PURE__ */ React23.createElement(Button_default, { size: "sm", variant: "plain", onClick: onTotalSelect }, "Select all ", numberFormatter(selectableRowCount), " items")), isTotalSelected && /* @__PURE__ */ React23.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ React23.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectableRowCount), " items are selected."), /* @__PURE__ */ React23.createElement(Button_default, { size: "sm", variant: "plain", color: "danger", onClick: onTotalSelect }, "Cancel"))),
3537
- Toolbar && /* @__PURE__ */ React23.createElement(Toolbar, { ...toolbarProps || {} })
3713
+ !!checkboxSelection && /* @__PURE__ */ React25.createElement(Stack_default, { direction: "row", spacing: 1 }, !isAllSelected && /* @__PURE__ */ React25.createElement(Typography_default, { level: "body-xs" }, numberFormatter(selectionModel?.length || 0), " items selected"), isAllSelected && !isTotalSelected && /* @__PURE__ */ React25.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ React25.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectionModel?.length || 0), " items on this page are selected."), /* @__PURE__ */ React25.createElement(Button_default, { size: "sm", variant: "plain", onClick: onTotalSelect }, "Select all ", numberFormatter(selectableRowCount), " items")), isTotalSelected && /* @__PURE__ */ React25.createElement(Stack_default, { direction: "row", spacing: 1, alignItems: "center" }, /* @__PURE__ */ React25.createElement(Typography_default, { level: "body-xs" }, "All ", numberFormatter(selectableRowCount), " items are selected."), /* @__PURE__ */ React25.createElement(Button_default, { size: "sm", variant: "plain", color: "danger", onClick: onTotalSelect }, "Cancel"))),
3714
+ Toolbar && /* @__PURE__ */ React25.createElement(Toolbar, { ...toolbarProps || {} })
3538
3715
  ),
3539
- /* @__PURE__ */ React23.createElement(
3716
+ /* @__PURE__ */ React25.createElement(
3540
3717
  Sheet_default,
3541
3718
  {
3542
3719
  variant: "outlined",
@@ -3547,7 +3724,8 @@ function Component(props, apiRef) {
3547
3724
  boxShadow: "sm",
3548
3725
  borderRadius: "sm",
3549
3726
  "--DataTableSheet-width": parentRef.current?.clientWidth + "px",
3550
- backgroundColor: "white"
3727
+ backgroundColor: "white",
3728
+ "--TableCell-cornerRadius": "0px"
3551
3729
  },
3552
3730
  className: [
3553
3731
  ...(parentRef.current?.scrollLeft || 0) > 0 ? ["ScrollableRight"] : [],
@@ -3556,15 +3734,33 @@ function Component(props, apiRef) {
3556
3734
  ref: parentRef,
3557
3735
  ...backgroundProps
3558
3736
  },
3559
- /* @__PURE__ */ React23.createElement(Table, { ...innerProps }, /* @__PURE__ */ React23.createElement("thead", null, /* @__PURE__ */ React23.createElement("tr", null, checkboxSelection && /* @__PURE__ */ React23.createElement(
3737
+ /* @__PURE__ */ React25.createElement(Table, { ...innerProps }, /* @__PURE__ */ React25.createElement("colgroup", null, checkboxSelection && /* @__PURE__ */ React25.createElement(
3738
+ "col",
3739
+ {
3740
+ style: {
3741
+ width: "40px"
3742
+ }
3743
+ }
3744
+ ), columns.map((c) => /* @__PURE__ */ React25.createElement(
3745
+ "col",
3746
+ {
3747
+ ref: c.tableColRef,
3748
+ key: `${c.field.toString()}_${c.width}`,
3749
+ style: {
3750
+ width: c.width
3751
+ }
3752
+ }
3753
+ ))), /* @__PURE__ */ React25.createElement("thead", null, processedColumnGroups && processedColumnGroups.groups.map((levelGroups, level) => /* @__PURE__ */ React25.createElement("tr", { key: `group-level-${level}` }, checkboxSelection && level === 0 && /* @__PURE__ */ React25.createElement(
3560
3754
  "th",
3561
3755
  {
3756
+ rowSpan: processedColumnGroups.maxLevel + 2,
3562
3757
  style: {
3563
3758
  width: "40px",
3564
- textAlign: "center"
3759
+ textAlign: "center",
3760
+ verticalAlign: "middle"
3565
3761
  }
3566
3762
  },
3567
- /* @__PURE__ */ React23.createElement(
3763
+ /* @__PURE__ */ React25.createElement(
3568
3764
  RenderCheckbox,
3569
3765
  {
3570
3766
  onChange: onAllCheckboxChange,
@@ -3574,17 +3770,56 @@ function Component(props, apiRef) {
3574
3770
  ...checkboxProps
3575
3771
  }
3576
3772
  )
3577
- ), columns.map((c, i) => /* @__PURE__ */ React23.createElement(
3578
- HeadCell2,
3773
+ ), level > 0 && Array.from({ length: levelGroups[0]?.startIndex || 0 }).map((_2, i) => /* @__PURE__ */ React25.createElement("th", { key: `empty-${level}-${i}` })), levelGroups.map((group, groupIndex) => {
3774
+ const nextGroup = levelGroups[groupIndex + 1];
3775
+ const emptyCells = nextGroup ? nextGroup.startIndex - (group.startIndex + group.colspan) : columns.length - (group.startIndex + group.colspan);
3776
+ const params = { groupId: group.groupId };
3777
+ const computedHeaderClassName = group.headerClassName ? typeof group.headerClassName === "function" ? group.headerClassName(params) : group.headerClassName : void 0;
3778
+ return /* @__PURE__ */ React25.createElement(Fragment2, { key: group.groupId }, /* @__PURE__ */ React25.createElement(
3779
+ "th",
3780
+ {
3781
+ colSpan: group.colspan,
3782
+ style: {
3783
+ textAlign: "center",
3784
+ fontWeight: "bold",
3785
+ verticalAlign: "middle"
3786
+ },
3787
+ className: computedHeaderClassName
3788
+ },
3789
+ group.headerName ?? group.groupId
3790
+ ), emptyCells > 0 && Array.from({ length: emptyCells }).map((_2, i) => /* @__PURE__ */ React25.createElement("th", { key: `empty-between-${level}-${groupIndex}-${i}`, colSpan: 1 })));
3791
+ }))), /* @__PURE__ */ React25.createElement("tr", null, !processedColumnGroups && checkboxSelection && /* @__PURE__ */ React25.createElement(
3792
+ "th",
3579
3793
  {
3580
- tableId,
3581
- key: `${c.field.toString()}_${i}`,
3582
- stickyHeader: props.stickyHeader,
3583
- editMode: !!c.isCellEditable,
3584
- onSortChange: handleSortChange,
3585
- ...c
3586
- }
3587
- )))), /* @__PURE__ */ React23.createElement(
3794
+ style: {
3795
+ width: "40px",
3796
+ textAlign: "center"
3797
+ }
3798
+ },
3799
+ /* @__PURE__ */ React25.createElement(
3800
+ RenderCheckbox,
3801
+ {
3802
+ onChange: onAllCheckboxChange,
3803
+ checked: isAllSelected,
3804
+ indeterminate: (selectionModel || []).length > 0 && !isAllSelected,
3805
+ disabled: dataInPage.length > 0 && !selectableRowCount,
3806
+ ...checkboxProps
3807
+ }
3808
+ )
3809
+ ), columns.map((c, i) => (
3810
+ // @ts-ignore
3811
+ /* @__PURE__ */ React25.createElement(
3812
+ HeadCell2,
3813
+ {
3814
+ tableId,
3815
+ key: `${c.field.toString()}_${i}`,
3816
+ stickyHeader: props.stickyHeader,
3817
+ editMode: !!c.isCellEditable,
3818
+ onSortChange: handleSortChange,
3819
+ ...c
3820
+ }
3821
+ )
3822
+ )))), /* @__PURE__ */ React25.createElement(
3588
3823
  VirtualizedTableBody,
3589
3824
  {
3590
3825
  ref: tableBodyRef,
@@ -3594,7 +3829,7 @@ function Component(props, apiRef) {
3594
3829
  role: "rowgroup",
3595
3830
  "aria-label": "DataTableBody"
3596
3831
  },
3597
- !!loading && /* @__PURE__ */ React23.createElement(OverlayWrapper, null, /* @__PURE__ */ React23.createElement(
3832
+ !!loading && /* @__PURE__ */ React25.createElement(OverlayWrapper, null, /* @__PURE__ */ React25.createElement(
3598
3833
  "td",
3599
3834
  {
3600
3835
  style: {
@@ -3603,7 +3838,7 @@ function Component(props, apiRef) {
3603
3838
  overflow: "visible"
3604
3839
  }
3605
3840
  },
3606
- /* @__PURE__ */ React23.createElement(
3841
+ /* @__PURE__ */ React25.createElement(
3607
3842
  Box_default,
3608
3843
  {
3609
3844
  sx: {
@@ -3613,7 +3848,7 @@ function Component(props, apiRef) {
3613
3848
  right: 0
3614
3849
  }
3615
3850
  },
3616
- /* @__PURE__ */ React23.createElement(LoadingOverlay, null)
3851
+ /* @__PURE__ */ React25.createElement(LoadingOverlay, null)
3617
3852
  )
3618
3853
  )),
3619
3854
  virtualizedItems.map((virtualizedRow, index) => {
@@ -3621,7 +3856,7 @@ function Component(props, apiRef) {
3621
3856
  const row = dataInPage[rowIndex];
3622
3857
  const rowId = getId(row, rowIndex);
3623
3858
  const striped = stripe && (stripe === "even" && (rowIndex + 1) % 2 === 0 || stripe === "odd" && (rowIndex + 1) % 2 === 1);
3624
- return /* @__PURE__ */ React23.createElement(
3859
+ return /* @__PURE__ */ React25.createElement(
3625
3860
  VirtualizedTableRow,
3626
3861
  {
3627
3862
  key: virtualizedRow.key,
@@ -3639,7 +3874,7 @@ function Component(props, apiRef) {
3639
3874
  transform: `translateY(${virtualizedRow.start - index * virtualizedRow.size}px)`
3640
3875
  }
3641
3876
  },
3642
- checkboxSelection && /* @__PURE__ */ React23.createElement(
3877
+ checkboxSelection && /* @__PURE__ */ React25.createElement(
3643
3878
  "th",
3644
3879
  {
3645
3880
  scope: "row",
@@ -3647,7 +3882,7 @@ function Component(props, apiRef) {
3647
3882
  textAlign: "center"
3648
3883
  }
3649
3884
  },
3650
- /* @__PURE__ */ React23.createElement(
3885
+ /* @__PURE__ */ React25.createElement(
3651
3886
  RenderCheckbox,
3652
3887
  {
3653
3888
  onClick: getCheckboxClickHandler(),
@@ -3658,7 +3893,7 @@ function Component(props, apiRef) {
3658
3893
  }
3659
3894
  )
3660
3895
  ),
3661
- /* @__PURE__ */ React23.createElement(
3896
+ /* @__PURE__ */ React25.createElement(
3662
3897
  BodyRow2,
3663
3898
  {
3664
3899
  tableId,
@@ -3671,9 +3906,9 @@ function Component(props, apiRef) {
3671
3906
  )
3672
3907
  );
3673
3908
  })
3674
- ), Footer && /* @__PURE__ */ React23.createElement(Footer, null))
3909
+ ), Footer && /* @__PURE__ */ React25.createElement(Footer, null))
3675
3910
  ),
3676
- pagination && /* @__PURE__ */ React23.createElement(
3911
+ pagination && /* @__PURE__ */ React25.createElement(
3677
3912
  Pagination_default,
3678
3913
  {
3679
3914
  pt: 2,
@@ -3690,12 +3925,12 @@ var DataTable = forwardRef7(Component);
3690
3925
  DataTable.displayName = "DataTable";
3691
3926
 
3692
3927
  // src/components/DateRangePicker/DateRangePicker.tsx
3693
- import React24, { forwardRef as forwardRef8, useCallback as useCallback10, useEffect as useEffect6, useImperativeHandle as useImperativeHandle3, useMemo as useMemo9, useRef as useRef5, useState as useState7 } from "react";
3928
+ import React26, { forwardRef as forwardRef8, useCallback as useCallback12, useEffect as useEffect7, useImperativeHandle as useImperativeHandle3, useMemo as useMemo11, useRef as useRef7, useState as useState8 } from "react";
3694
3929
  import { IMaskInput as IMaskInput2, IMask as IMask2 } from "react-imask";
3695
3930
  import CalendarTodayIcon2 from "@mui/icons-material/CalendarToday";
3696
- import { styled as styled13, useThemeProps as useThemeProps5 } from "@mui/joy";
3931
+ import { styled as styled14, useThemeProps as useThemeProps5 } from "@mui/joy";
3697
3932
  import { FocusTrap as FocusTrap2, ClickAwayListener as ClickAwayListener2, Popper as Popper3 } from "@mui/base";
3698
- var CalendarButton2 = styled13(IconButton_default, {
3933
+ var CalendarButton2 = styled14(IconButton_default, {
3699
3934
  name: "DateRangePicker",
3700
3935
  slot: "calendarButton"
3701
3936
  })(({ theme }) => ({
@@ -3705,13 +3940,13 @@ var CalendarButton2 = styled13(IconButton_default, {
3705
3940
  outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar("palette-focusVisible")}`
3706
3941
  }
3707
3942
  }));
3708
- var StyledPopper2 = styled13(Popper3, {
3943
+ var StyledPopper2 = styled14(Popper3, {
3709
3944
  name: "DateRangePicker",
3710
3945
  slot: "popper"
3711
3946
  })(({ theme }) => ({
3712
3947
  zIndex: theme.zIndex.tooltip
3713
3948
  }));
3714
- var CalendarSheet2 = styled13(Sheet_default, {
3949
+ var CalendarSheet2 = styled14(Sheet_default, {
3715
3950
  name: "DateRangePicker",
3716
3951
  slot: "sheet",
3717
3952
  overridesResolver: (props, styles) => styles.root
@@ -3721,7 +3956,7 @@ var CalendarSheet2 = styled13(Sheet_default, {
3721
3956
  boxShadow: theme.shadow.md,
3722
3957
  borderRadius: theme.radius.md
3723
3958
  }));
3724
- var DateRangePickerRoot = styled13("div", {
3959
+ var DateRangePickerRoot = styled14("div", {
3725
3960
  name: "DateRangePicker",
3726
3961
  slot: "root",
3727
3962
  overridesResolver: (props, styles) => styles.root
@@ -3791,9 +4026,9 @@ var parseDates = (str, format) => {
3791
4026
  var formatToPattern2 = (format) => {
3792
4027
  return `${format} - ${format}`.replace(/YYYY/g, "Y").replace(/MM/g, "M").replace(/DD/g, "D").replace(/[^YMD\s]/g, (match) => `${match}\``);
3793
4028
  };
3794
- var TextMaskAdapter5 = React24.forwardRef(function TextMaskAdapter6(props, ref) {
4029
+ var TextMaskAdapter5 = React26.forwardRef(function TextMaskAdapter6(props, ref) {
3795
4030
  const { onChange, format, ...other } = props;
3796
- return /* @__PURE__ */ React24.createElement(
4031
+ return /* @__PURE__ */ React26.createElement(
3797
4032
  IMaskInput2,
3798
4033
  {
3799
4034
  ...other,
@@ -3851,23 +4086,23 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
3851
4086
  readOnly,
3852
4087
  ...innerProps
3853
4088
  } = props;
3854
- const innerRef = useRef5(null);
3855
- const buttonRef = useRef5(null);
4089
+ const innerRef = useRef7(null);
4090
+ const buttonRef = useRef7(null);
3856
4091
  const [value, setValue] = useControlledState(
3857
4092
  props.value,
3858
4093
  props.defaultValue || "",
3859
- useCallback10((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
4094
+ useCallback12((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
3860
4095
  );
3861
- const [displayValue, setDisplayValue] = useState7(
4096
+ const [displayValue, setDisplayValue] = useState8(
3862
4097
  () => value ? formatValueString2(parseDates(value, format), displayFormat) : ""
3863
4098
  );
3864
- const [anchorEl, setAnchorEl] = useState7(null);
4099
+ const [anchorEl, setAnchorEl] = useState8(null);
3865
4100
  const open = Boolean(anchorEl);
3866
- const calendarValue = useMemo9(
4101
+ const calendarValue = useMemo11(
3867
4102
  () => value ? parseDates(value, format) : void 0,
3868
4103
  [value, format]
3869
4104
  );
3870
- useEffect6(() => {
4105
+ useEffect7(() => {
3871
4106
  if (value) {
3872
4107
  try {
3873
4108
  const dates = parseDates(value, format);
@@ -3879,13 +4114,13 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
3879
4114
  setDisplayValue("");
3880
4115
  }
3881
4116
  }, [displayFormat, value, format]);
3882
- useEffect6(() => {
4117
+ useEffect7(() => {
3883
4118
  if (!anchorEl) {
3884
4119
  innerRef.current?.blur();
3885
4120
  }
3886
4121
  }, [anchorEl, innerRef]);
3887
4122
  useImperativeHandle3(ref, () => innerRef.current, [innerRef]);
3888
- const handleChange = useCallback10(
4123
+ const handleChange = useCallback12(
3889
4124
  (event) => {
3890
4125
  const value2 = event.target.value;
3891
4126
  setDisplayValue(value2 ? formatValueString2(parseDates(value2, format), displayFormat) : value2);
@@ -3893,7 +4128,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
3893
4128
  },
3894
4129
  [displayFormat, format, setValue]
3895
4130
  );
3896
- const handleDisplayInputChange = useCallback10(
4131
+ const handleDisplayInputChange = useCallback12(
3897
4132
  (event) => {
3898
4133
  if (event.target.value === "") {
3899
4134
  handleChange({
@@ -3918,14 +4153,14 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
3918
4153
  },
3919
4154
  [displayFormat, format, handleChange, props.name]
3920
4155
  );
3921
- const handleCalendarToggle = useCallback10(
4156
+ const handleCalendarToggle = useCallback12(
3922
4157
  (event) => {
3923
4158
  setAnchorEl(anchorEl ? null : event.currentTarget);
3924
4159
  innerRef.current?.focus();
3925
4160
  },
3926
4161
  [anchorEl, setAnchorEl, innerRef]
3927
4162
  );
3928
- const handleCalendarChange = useCallback10(
4163
+ const handleCalendarChange = useCallback12(
3929
4164
  ([date1, date2]) => {
3930
4165
  if (!date1 || !date2) return;
3931
4166
  const formattedValue = formatValueString2([date1, date2], format);
@@ -3939,7 +4174,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
3939
4174
  },
3940
4175
  [props.value, props.name, onChange, setValue, setAnchorEl, format, displayFormat]
3941
4176
  );
3942
- const handleInputMouseDown = useCallback10(
4177
+ const handleInputMouseDown = useCallback12(
3943
4178
  (event) => {
3944
4179
  if (inputReadOnly) {
3945
4180
  event.preventDefault();
@@ -3948,7 +4183,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
3948
4183
  },
3949
4184
  [inputReadOnly, buttonRef]
3950
4185
  );
3951
- return /* @__PURE__ */ React24.createElement(DateRangePickerRoot, null, /* @__PURE__ */ React24.createElement(FocusTrap2, { open: true }, /* @__PURE__ */ React24.createElement(React24.Fragment, null, /* @__PURE__ */ React24.createElement(
4186
+ return /* @__PURE__ */ React26.createElement(DateRangePickerRoot, null, /* @__PURE__ */ React26.createElement(FocusTrap2, { open: true }, /* @__PURE__ */ React26.createElement(React26.Fragment, null, /* @__PURE__ */ React26.createElement(
3952
4187
  Input_default,
3953
4188
  {
3954
4189
  ...innerProps,
@@ -3976,7 +4211,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
3976
4211
  error,
3977
4212
  className,
3978
4213
  sx,
3979
- endDecorator: /* @__PURE__ */ React24.createElement(
4214
+ endDecorator: /* @__PURE__ */ React26.createElement(
3980
4215
  CalendarButton2,
3981
4216
  {
3982
4217
  ref: buttonRef,
@@ -3988,13 +4223,13 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
3988
4223
  "aria-expanded": open,
3989
4224
  disabled
3990
4225
  },
3991
- /* @__PURE__ */ React24.createElement(CalendarTodayIcon2, null)
4226
+ /* @__PURE__ */ React26.createElement(CalendarTodayIcon2, null)
3992
4227
  ),
3993
4228
  label,
3994
4229
  helperText,
3995
4230
  readOnly: readOnly || inputReadOnly
3996
4231
  }
3997
- ), open && /* @__PURE__ */ React24.createElement(ClickAwayListener2, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React24.createElement(
4232
+ ), open && /* @__PURE__ */ React26.createElement(ClickAwayListener2, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React26.createElement(
3998
4233
  StyledPopper2,
3999
4234
  {
4000
4235
  id: "date-range-picker-popper",
@@ -4013,7 +4248,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
4013
4248
  "aria-label": "Calendar Tooltip",
4014
4249
  "aria-expanded": open
4015
4250
  },
4016
- /* @__PURE__ */ React24.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React24.createElement(
4251
+ /* @__PURE__ */ React26.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React26.createElement(
4017
4252
  Calendar_default,
4018
4253
  {
4019
4254
  rangeSelection: true,
@@ -4024,14 +4259,14 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
4024
4259
  disableFuture,
4025
4260
  disablePast
4026
4261
  }
4027
- ), !hideClearButton && /* @__PURE__ */ React24.createElement(
4262
+ ), !hideClearButton && /* @__PURE__ */ React26.createElement(
4028
4263
  DialogActions_default,
4029
4264
  {
4030
4265
  sx: {
4031
4266
  p: 1
4032
4267
  }
4033
4268
  },
4034
- /* @__PURE__ */ React24.createElement(
4269
+ /* @__PURE__ */ React26.createElement(
4035
4270
  Button_default,
4036
4271
  {
4037
4272
  size,
@@ -4051,10 +4286,10 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
4051
4286
  DateRangePicker.displayName = "DateRangePicker";
4052
4287
 
4053
4288
  // src/components/DialogContent/DialogContent.tsx
4054
- import { DialogContent as JoyDialogContent, styled as styled14 } from "@mui/joy";
4289
+ import { DialogContent as JoyDialogContent, styled as styled15 } from "@mui/joy";
4055
4290
  import { motion as motion22 } from "framer-motion";
4056
4291
  var MotionDialogContent = motion22(JoyDialogContent);
4057
- var StyledDialogContent = styled14(MotionDialogContent)(({ theme }) => ({
4292
+ var StyledDialogContent = styled15(MotionDialogContent)(({ theme }) => ({
4058
4293
  padding: theme.spacing(0, 6, 5)
4059
4294
  }));
4060
4295
  var DialogContent = StyledDialogContent;
@@ -4064,10 +4299,10 @@ DialogContent.displayName = "DialogContent";
4064
4299
  var DialogContent_default = DialogContent;
4065
4300
 
4066
4301
  // src/components/DialogTitle/DialogTitle.tsx
4067
- import { DialogTitle as JoyDialogTitle, styled as styled15 } from "@mui/joy";
4302
+ import { DialogTitle as JoyDialogTitle, styled as styled16 } from "@mui/joy";
4068
4303
  import { motion as motion23 } from "framer-motion";
4069
4304
  var MotionDialogTitle = motion23(JoyDialogTitle);
4070
- var StyledDialogTitle = styled15(MotionDialogTitle)(({ theme }) => ({
4305
+ var StyledDialogTitle = styled16(MotionDialogTitle)(({ theme }) => ({
4071
4306
  padding: theme.spacing(4, 6)
4072
4307
  }));
4073
4308
  var DialogTitle = StyledDialogTitle;
@@ -4077,22 +4312,22 @@ DialogTitle.displayName = "DialogTitle";
4077
4312
  var DialogTitle_default = DialogTitle;
4078
4313
 
4079
4314
  // src/components/DialogFrame/DialogFrame.tsx
4080
- import React26 from "react";
4315
+ import React28 from "react";
4081
4316
 
4082
4317
  // src/components/Modal/Modal.tsx
4083
- import React25 from "react";
4318
+ import React27 from "react";
4084
4319
  import {
4085
4320
  Modal as JoyModal,
4086
4321
  ModalDialog as JoyModalDialog,
4087
4322
  ModalClose as JoyModalClose,
4088
4323
  ModalOverflow as JoyModalOverflow,
4089
- styled as styled16
4324
+ styled as styled17
4090
4325
  } from "@mui/joy";
4091
4326
  import { motion as motion24 } from "framer-motion";
4092
4327
  var MotionModal = motion24(JoyModal);
4093
4328
  var Modal = MotionModal;
4094
4329
  Modal.displayName = "Modal";
4095
- var StyledModalDialog = styled16(JoyModalDialog)({
4330
+ var StyledModalDialog = styled17(JoyModalDialog)({
4096
4331
  padding: 0
4097
4332
  });
4098
4333
  var ModalDialog = StyledModalDialog;
@@ -4103,37 +4338,37 @@ var ModalOverflow = MotionModalOverflow;
4103
4338
  ModalOverflow.displayName = "ModalOverflow";
4104
4339
  function ModalFrame(props) {
4105
4340
  const { title, children, titleStartDecorator, onClose, ...innerProps } = props;
4106
- return /* @__PURE__ */ React25.createElement(StyledModalDialog, { ...innerProps }, /* @__PURE__ */ React25.createElement(ModalClose, { onClick: onClose }), /* @__PURE__ */ React25.createElement(DialogTitle_default, null, titleStartDecorator, title), /* @__PURE__ */ React25.createElement(DialogContent_default, null, children));
4341
+ return /* @__PURE__ */ React27.createElement(StyledModalDialog, { ...innerProps }, /* @__PURE__ */ React27.createElement(ModalClose, { onClick: onClose }), /* @__PURE__ */ React27.createElement(DialogTitle_default, null, titleStartDecorator, title), /* @__PURE__ */ React27.createElement(DialogContent_default, null, children));
4107
4342
  }
4108
4343
  ModalFrame.displayName = "ModalFrame";
4109
4344
 
4110
4345
  // src/components/DialogFrame/DialogFrame.tsx
4111
- import { styled as styled17 } from "@mui/joy";
4112
- var StyledDialogFrame = styled17(ModalDialog, {
4346
+ import { styled as styled18 } from "@mui/joy";
4347
+ var StyledDialogFrame = styled18(ModalDialog, {
4113
4348
  name: "Dialog",
4114
4349
  slot: "Root"
4115
4350
  })({
4116
4351
  padding: 0
4117
4352
  });
4118
- var DialogFrame = React26.forwardRef((props, ref) => {
4353
+ var DialogFrame = React28.forwardRef((props, ref) => {
4119
4354
  const { title, children, actions, fullscreen, ...innerProps } = props;
4120
- return /* @__PURE__ */ React26.createElement(StyledDialogFrame, { layout: fullscreen ? "fullscreen" : "center", ref, ...innerProps }, /* @__PURE__ */ React26.createElement(DialogTitle_default, null, title), /* @__PURE__ */ React26.createElement(DialogContent_default, null, children), /* @__PURE__ */ React26.createElement(DialogActions_default, null, actions));
4355
+ return /* @__PURE__ */ React28.createElement(StyledDialogFrame, { layout: fullscreen ? "fullscreen" : "center", ref, ...innerProps }, /* @__PURE__ */ React28.createElement(DialogTitle_default, null, title), /* @__PURE__ */ React28.createElement(DialogContent_default, null, children), /* @__PURE__ */ React28.createElement(DialogActions_default, null, actions));
4121
4356
  });
4122
4357
  DialogFrame.displayName = "DialogFrame";
4123
4358
 
4124
4359
  // src/components/Divider/Divider.tsx
4125
- import React27 from "react";
4360
+ import React29 from "react";
4126
4361
  import { Divider as JoyDivider } from "@mui/joy";
4127
4362
  import { motion as motion25 } from "framer-motion";
4128
4363
  var MotionDivider = motion25(JoyDivider);
4129
4364
  var Divider = (props) => {
4130
- return /* @__PURE__ */ React27.createElement(MotionDivider, { ...props });
4365
+ return /* @__PURE__ */ React29.createElement(MotionDivider, { ...props });
4131
4366
  };
4132
4367
  Divider.displayName = "Divider";
4133
4368
 
4134
4369
  // src/components/InsetDrawer/InsetDrawer.tsx
4135
- import { Drawer as JoyDrawer, styled as styled18, drawerClasses } from "@mui/joy";
4136
- var InsetDrawer = styled18(JoyDrawer)(({ theme }) => ({
4370
+ import { Drawer as JoyDrawer, styled as styled19, drawerClasses } from "@mui/joy";
4371
+ var InsetDrawer = styled19(JoyDrawer)(({ theme }) => ({
4137
4372
  [`& .${drawerClasses.content}`]: {
4138
4373
  backgroundColor: "transparent",
4139
4374
  boxShadow: "none",
@@ -4148,16 +4383,16 @@ var InsetDrawer = styled18(JoyDrawer)(({ theme }) => ({
4148
4383
  }));
4149
4384
 
4150
4385
  // src/components/FilterMenu/FilterMenu.tsx
4151
- import React37, { useCallback as useCallback19 } from "react";
4386
+ import React39, { useCallback as useCallback21 } from "react";
4152
4387
  import { Button as Button2, Stack as Stack10 } from "@mui/joy";
4153
4388
 
4154
4389
  // src/components/FilterMenu/components/CheckboxGroup.tsx
4155
- import React28, { useCallback as useCallback11 } from "react";
4390
+ import React30, { useCallback as useCallback13 } from "react";
4156
4391
  import { Stack as Stack2 } from "@mui/joy";
4157
4392
  function CheckboxGroup(props) {
4158
4393
  const { id, label, options, value, onChange, hidden } = props;
4159
4394
  const [internalValue, setInternalValue] = useControlledState(value, [], onChange);
4160
- const handleCheckboxChange = useCallback11(
4395
+ const handleCheckboxChange = useCallback13(
4161
4396
  (optionValue) => (event) => {
4162
4397
  const checked = event.target.checked;
4163
4398
  let newValue;
@@ -4173,7 +4408,7 @@ function CheckboxGroup(props) {
4173
4408
  if (hidden) {
4174
4409
  return null;
4175
4410
  }
4176
- return /* @__PURE__ */ React28.createElement(Stack2, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React28.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), options.map((option) => /* @__PURE__ */ React28.createElement(
4411
+ return /* @__PURE__ */ React30.createElement(Stack2, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React30.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), options.map((option) => /* @__PURE__ */ React30.createElement(
4177
4412
  Checkbox_default,
4178
4413
  {
4179
4414
  key: `${id}-${option.value}`,
@@ -4186,7 +4421,7 @@ function CheckboxGroup(props) {
4186
4421
  CheckboxGroup.displayName = "CheckboxGroup";
4187
4422
 
4188
4423
  // src/components/FilterMenu/components/RadioGroup.tsx
4189
- import React29, { useCallback as useCallback12 } from "react";
4424
+ import React31, { useCallback as useCallback14 } from "react";
4190
4425
 
4191
4426
  // src/components/Radio/Radio.tsx
4192
4427
  import { Radio as JoyRadio, RadioGroup as JoyRadioGroup } from "@mui/joy";
@@ -4203,7 +4438,7 @@ import { Stack as Stack3 } from "@mui/joy";
4203
4438
  function RadioGroup2(props) {
4204
4439
  const { id, label, options, value, onChange, hidden } = props;
4205
4440
  const [internalValue, setInternalValue] = useControlledState(value, value ?? "", onChange);
4206
- const handleRadioChange = useCallback12(
4441
+ const handleRadioChange = useCallback14(
4207
4442
  (event) => {
4208
4443
  const newValue = event.target.value;
4209
4444
  const option = options.find((opt) => opt.value.toString() === newValue);
@@ -4215,12 +4450,12 @@ function RadioGroup2(props) {
4215
4450
  if (hidden) {
4216
4451
  return null;
4217
4452
  }
4218
- return /* @__PURE__ */ React29.createElement(Stack3, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React29.createElement(Stack3, { spacing: 1 }, /* @__PURE__ */ React29.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label)), /* @__PURE__ */ React29.createElement(RadioGroup, { name: id, value: internalValue?.toString(), onChange: handleRadioChange }, options.map((option) => /* @__PURE__ */ React29.createElement(Radio, { key: `${id}-${option.value}`, value: option.value.toString(), label: option.label }))));
4453
+ return /* @__PURE__ */ React31.createElement(Stack3, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React31.createElement(Stack3, { spacing: 1 }, /* @__PURE__ */ React31.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label)), /* @__PURE__ */ React31.createElement(RadioGroup, { name: id, value: internalValue?.toString(), onChange: handleRadioChange }, options.map((option) => /* @__PURE__ */ React31.createElement(Radio, { key: `${id}-${option.value}`, value: option.value.toString(), label: option.label }))));
4219
4454
  }
4220
4455
  RadioGroup2.displayName = "RadioGroup";
4221
4456
 
4222
4457
  // src/components/FilterMenu/components/DateRange.tsx
4223
- import React30, { useCallback as useCallback13, useMemo as useMemo10, useState as useState8, useEffect as useEffect7 } from "react";
4458
+ import React32, { useCallback as useCallback15, useMemo as useMemo12, useState as useState9, useEffect as useEffect8 } from "react";
4224
4459
  import { Stack as Stack4 } from "@mui/joy";
4225
4460
  function DateRange(props) {
4226
4461
  const {
@@ -4239,8 +4474,8 @@ function DateRange(props) {
4239
4474
  hideClearButton
4240
4475
  } = props;
4241
4476
  const [internalValue, setInternalValue] = useControlledState(value, null, onChange);
4242
- const [selectedOption, setSelectedOption] = useState8("all-time");
4243
- const dateRangeOptions = useMemo10(
4477
+ const [selectedOption, setSelectedOption] = useState9("all-time");
4478
+ const dateRangeOptions = useMemo12(
4244
4479
  () => [
4245
4480
  { label: "All Time", value: "all-time" },
4246
4481
  { label: "This Month", value: "this-month" },
@@ -4250,7 +4485,7 @@ function DateRange(props) {
4250
4485
  ],
4251
4486
  []
4252
4487
  );
4253
- const getDateRangeForOption = useCallback13(
4488
+ const getDateRangeForOption = useCallback15(
4254
4489
  (option) => {
4255
4490
  const now = /* @__PURE__ */ new Date();
4256
4491
  const currentYear = now.getFullYear();
@@ -4289,7 +4524,7 @@ function DateRange(props) {
4289
4524
  },
4290
4525
  [internalValue]
4291
4526
  );
4292
- const determineOptionFromValue = useCallback13(
4527
+ const determineOptionFromValue = useCallback15(
4293
4528
  (value2) => {
4294
4529
  if (!value2) {
4295
4530
  return "all-time";
@@ -4305,17 +4540,17 @@ function DateRange(props) {
4305
4540
  },
4306
4541
  [getDateRangeForOption]
4307
4542
  );
4308
- const customDateRangeValue = useMemo10(() => {
4543
+ const customDateRangeValue = useMemo12(() => {
4309
4544
  if (selectedOption === "custom" && internalValue) {
4310
4545
  return `${internalValue[0]} - ${internalValue[1]}`;
4311
4546
  }
4312
4547
  return "";
4313
4548
  }, [selectedOption, internalValue]);
4314
- useEffect7(() => {
4549
+ useEffect8(() => {
4315
4550
  const newOption = determineOptionFromValue(internalValue);
4316
4551
  setSelectedOption(newOption);
4317
4552
  }, [internalValue, determineOptionFromValue]);
4318
- const handleOptionChange = useCallback13(
4553
+ const handleOptionChange = useCallback15(
4319
4554
  (event) => {
4320
4555
  const newOption = event.target.value;
4321
4556
  setSelectedOption(newOption);
@@ -4324,7 +4559,7 @@ function DateRange(props) {
4324
4559
  },
4325
4560
  [getDateRangeForOption, setInternalValue]
4326
4561
  );
4327
- const handleCustomDateChange = useCallback13(
4562
+ const handleCustomDateChange = useCallback15(
4328
4563
  (event) => {
4329
4564
  const dateRangeString = event.target.value;
4330
4565
  if (dateRangeString && dateRangeString.includes(" - ")) {
@@ -4342,7 +4577,7 @@ function DateRange(props) {
4342
4577
  if (hidden) {
4343
4578
  return null;
4344
4579
  }
4345
- return /* @__PURE__ */ React30.createElement(Stack4, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React30.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React30.createElement(RadioGroup, { name: `${id}-options`, value: selectedOption, onChange: handleOptionChange }, dateRangeOptions.map((option) => /* @__PURE__ */ React30.createElement(Radio, { key: `${id}-${option.value}`, value: option.value, label: option.label }))), selectedOption === "custom" && /* @__PURE__ */ React30.createElement(
4580
+ return /* @__PURE__ */ React32.createElement(Stack4, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React32.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React32.createElement(RadioGroup, { name: `${id}-options`, value: selectedOption, onChange: handleOptionChange }, dateRangeOptions.map((option) => /* @__PURE__ */ React32.createElement(Radio, { key: `${id}-${option.value}`, value: option.value, label: option.label }))), selectedOption === "custom" && /* @__PURE__ */ React32.createElement(
4346
4581
  DateRangePicker,
4347
4582
  {
4348
4583
  value: customDateRangeValue,
@@ -4361,12 +4596,12 @@ function DateRange(props) {
4361
4596
  DateRange.displayName = "DateRange";
4362
4597
 
4363
4598
  // src/components/FilterMenu/components/CurrencyInput.tsx
4364
- import React31, { useCallback as useCallback14 } from "react";
4599
+ import React33, { useCallback as useCallback16 } from "react";
4365
4600
  import { Stack as Stack5 } from "@mui/joy";
4366
4601
  function CurrencyInput3(props) {
4367
4602
  const { id, label, value, onChange, hidden, max, placeholder, useMinorUnit, currency = "USD" } = props;
4368
4603
  const [internalValue, setInternalValue] = useControlledState(value, value, onChange);
4369
- const handleCurrencyChange = useCallback14(
4604
+ const handleCurrencyChange = useCallback16(
4370
4605
  (event) => {
4371
4606
  const newValue = event.target.value;
4372
4607
  setInternalValue(newValue);
@@ -4376,7 +4611,7 @@ function CurrencyInput3(props) {
4376
4611
  if (hidden) {
4377
4612
  return null;
4378
4613
  }
4379
- return /* @__PURE__ */ React31.createElement(Stack5, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React31.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React31.createElement(
4614
+ return /* @__PURE__ */ React33.createElement(Stack5, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React33.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React33.createElement(
4380
4615
  CurrencyInput,
4381
4616
  {
4382
4617
  value: internalValue,
@@ -4392,14 +4627,14 @@ function CurrencyInput3(props) {
4392
4627
  CurrencyInput3.displayName = "CurrencyInput";
4393
4628
 
4394
4629
  // src/components/FilterMenu/components/CurrencyRange.tsx
4395
- import React32, { useCallback as useCallback15 } from "react";
4630
+ import React34, { useCallback as useCallback17 } from "react";
4396
4631
  import { Stack as Stack6 } from "@mui/joy";
4397
4632
  function CurrencyRange(props) {
4398
4633
  const { id, label, value, onChange, hidden, max, placeholder, useMinorUnit, currency = "USD" } = props;
4399
4634
  const [internalValue, setInternalValue] = useControlledState(value, null, onChange);
4400
4635
  const minValue = internalValue?.[0];
4401
4636
  const maxValue = internalValue?.[1];
4402
- const handleMinChange = useCallback15(
4637
+ const handleMinChange = useCallback17(
4403
4638
  (event) => {
4404
4639
  const newMinValue = event.target.value;
4405
4640
  const currentMaxValue = maxValue;
@@ -4413,7 +4648,7 @@ function CurrencyRange(props) {
4413
4648
  },
4414
4649
  [maxValue, setInternalValue]
4415
4650
  );
4416
- const handleMaxChange = useCallback15(
4651
+ const handleMaxChange = useCallback17(
4417
4652
  (event) => {
4418
4653
  const newMaxValue = event.target.value;
4419
4654
  const currentMinValue = minValue;
@@ -4430,7 +4665,7 @@ function CurrencyRange(props) {
4430
4665
  if (hidden) {
4431
4666
  return null;
4432
4667
  }
4433
- return /* @__PURE__ */ React32.createElement(Stack6, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React32.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React32.createElement(Stack6, { direction: "row", spacing: 2, alignItems: "flex-end" }, /* @__PURE__ */ React32.createElement(
4668
+ return /* @__PURE__ */ React34.createElement(Stack6, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React34.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React34.createElement(Stack6, { direction: "row", spacing: 2, alignItems: "flex-end" }, /* @__PURE__ */ React34.createElement(
4434
4669
  CurrencyInput,
4435
4670
  {
4436
4671
  label: "Minimum",
@@ -4443,7 +4678,7 @@ function CurrencyRange(props) {
4443
4678
  "aria-labelledby": label ? id : void 0,
4444
4679
  "aria-label": "Minimum amount"
4445
4680
  }
4446
- ), /* @__PURE__ */ React32.createElement(
4681
+ ), /* @__PURE__ */ React34.createElement(
4447
4682
  CurrencyInput,
4448
4683
  {
4449
4684
  label: "Maximum",
@@ -4461,20 +4696,20 @@ function CurrencyRange(props) {
4461
4696
  CurrencyRange.displayName = "CurrencyRange";
4462
4697
 
4463
4698
  // src/components/FilterMenu/components/PercentageInput.tsx
4464
- import React34 from "react";
4699
+ import React36 from "react";
4465
4700
  import { Stack as Stack7, Typography as Typography2 } from "@mui/joy";
4466
4701
 
4467
4702
  // src/components/PercentageInput/PercentageInput.tsx
4468
- import React33, { useCallback as useCallback16, useMemo as useMemo11, useState as useState9 } from "react";
4703
+ import React35, { useCallback as useCallback18, useMemo as useMemo13, useState as useState10 } from "react";
4469
4704
  import { NumericFormat as NumericFormat2 } from "react-number-format";
4470
- import { styled as styled19, useThemeProps as useThemeProps6 } from "@mui/joy";
4705
+ import { styled as styled20, useThemeProps as useThemeProps6 } from "@mui/joy";
4471
4706
  var padDecimal = (value, decimalScale) => {
4472
4707
  const [integer, decimal = ""] = `${value}`.split(".");
4473
4708
  return Number(`${integer}${decimal.padEnd(decimalScale, "0")}`);
4474
4709
  };
4475
- var TextMaskAdapter7 = React33.forwardRef(function TextMaskAdapter8(props, ref) {
4710
+ var TextMaskAdapter7 = React35.forwardRef(function TextMaskAdapter8(props, ref) {
4476
4711
  const { onChange, min, max, ...innerProps } = props;
4477
- return /* @__PURE__ */ React33.createElement(
4712
+ return /* @__PURE__ */ React35.createElement(
4478
4713
  NumericFormat2,
4479
4714
  {
4480
4715
  ...innerProps,
@@ -4494,12 +4729,12 @@ var TextMaskAdapter7 = React33.forwardRef(function TextMaskAdapter8(props, ref)
4494
4729
  }
4495
4730
  );
4496
4731
  });
4497
- var PercentageInputRoot = styled19(Input_default, {
4732
+ var PercentageInputRoot = styled20(Input_default, {
4498
4733
  name: "PercentageInput",
4499
4734
  slot: "Root",
4500
4735
  overridesResolver: (props, styles) => styles.root
4501
4736
  })({});
4502
- var PercentageInput = React33.forwardRef(
4737
+ var PercentageInput = React35.forwardRef(
4503
4738
  function PercentageInput2(inProps, ref) {
4504
4739
  const props = useThemeProps6({ props: inProps, name: "PercentageInput" });
4505
4740
  const {
@@ -4522,18 +4757,18 @@ var PercentageInput = React33.forwardRef(
4522
4757
  const [_value, setValue] = useControlledState(
4523
4758
  props.value,
4524
4759
  props.defaultValue,
4525
- useCallback16((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
4760
+ useCallback18((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
4526
4761
  );
4527
- const [internalError, setInternalError] = useState9(
4762
+ const [internalError, setInternalError] = useState10(
4528
4763
  max && _value && _value > max || min && _value && _value < min
4529
4764
  );
4530
- const value = useMemo11(() => {
4765
+ const value = useMemo13(() => {
4531
4766
  if (_value && useMinorUnit) {
4532
4767
  return _value / Math.pow(10, maxDecimalScale);
4533
4768
  }
4534
4769
  return _value;
4535
4770
  }, [_value, useMinorUnit, maxDecimalScale]);
4536
- const handleChange = useCallback16(
4771
+ const handleChange = useCallback18(
4537
4772
  (event) => {
4538
4773
  if (event.target.value === "") {
4539
4774
  setValue(void 0);
@@ -4550,7 +4785,7 @@ var PercentageInput = React33.forwardRef(
4550
4785
  },
4551
4786
  [setValue, useMinorUnit, maxDecimalScale, min, max]
4552
4787
  );
4553
- return /* @__PURE__ */ React33.createElement(
4788
+ return /* @__PURE__ */ React35.createElement(
4554
4789
  PercentageInputRoot,
4555
4790
  {
4556
4791
  ...innerProps,
@@ -4597,7 +4832,7 @@ var PercentageInput3 = ({
4597
4832
  if (hidden) {
4598
4833
  return null;
4599
4834
  }
4600
- return /* @__PURE__ */ React34.createElement(Stack7, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React34.createElement(Typography2, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React34.createElement(
4835
+ return /* @__PURE__ */ React36.createElement(Stack7, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React36.createElement(Typography2, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React36.createElement(
4601
4836
  PercentageInput,
4602
4837
  {
4603
4838
  value: _value,
@@ -4612,7 +4847,7 @@ var PercentageInput3 = ({
4612
4847
  };
4613
4848
 
4614
4849
  // src/components/FilterMenu/components/PercentageRange.tsx
4615
- import React35, { useCallback as useCallback17 } from "react";
4850
+ import React37, { useCallback as useCallback19 } from "react";
4616
4851
  import { Stack as Stack8 } from "@mui/joy";
4617
4852
  function PercentageRange(props) {
4618
4853
  const { id, label, value, onChange, hidden, useMinorUnit, maxDecimalScale, min, max } = props;
@@ -4623,7 +4858,7 @@ function PercentageRange(props) {
4623
4858
  );
4624
4859
  const minValue = internalValue?.[0];
4625
4860
  const maxValue = internalValue?.[1];
4626
- const handleMinChange = useCallback17(
4861
+ const handleMinChange = useCallback19(
4627
4862
  (event) => {
4628
4863
  const newMinValue = event.target.value;
4629
4864
  const currentMaxValue = maxValue;
@@ -4635,7 +4870,7 @@ function PercentageRange(props) {
4635
4870
  },
4636
4871
  [maxValue, setInternalValue]
4637
4872
  );
4638
- const handleMaxChange = useCallback17(
4873
+ const handleMaxChange = useCallback19(
4639
4874
  (event) => {
4640
4875
  const newMaxValue = event.target.value;
4641
4876
  const currentMinValue = minValue;
@@ -4650,7 +4885,7 @@ function PercentageRange(props) {
4650
4885
  if (hidden) {
4651
4886
  return null;
4652
4887
  }
4653
- return /* @__PURE__ */ React35.createElement(Stack8, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React35.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React35.createElement(Stack8, { direction: "row", spacing: 2, alignItems: "flex-end" }, /* @__PURE__ */ React35.createElement(
4888
+ return /* @__PURE__ */ React37.createElement(Stack8, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React37.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React37.createElement(Stack8, { direction: "row", spacing: 2, alignItems: "flex-end" }, /* @__PURE__ */ React37.createElement(
4654
4889
  PercentageInput,
4655
4890
  {
4656
4891
  label: "Minimum",
@@ -4664,7 +4899,7 @@ function PercentageRange(props) {
4664
4899
  "aria-label": "Minimum percentage",
4665
4900
  placeholder: "0%"
4666
4901
  }
4667
- ), /* @__PURE__ */ React35.createElement(
4902
+ ), /* @__PURE__ */ React37.createElement(
4668
4903
  PercentageInput,
4669
4904
  {
4670
4905
  label: "Maximum",
@@ -4683,13 +4918,13 @@ function PercentageRange(props) {
4683
4918
  PercentageRange.displayName = "PercentageRange";
4684
4919
 
4685
4920
  // src/components/FilterMenu/components/Autocomplete.tsx
4686
- import React36, { useCallback as useCallback18 } from "react";
4921
+ import React38, { useCallback as useCallback20 } from "react";
4687
4922
  import { Stack as Stack9 } from "@mui/joy";
4688
4923
  function Autocomplete2(props) {
4689
4924
  const { id, label, value, onChange, options, multiple, hidden, placeholder } = props;
4690
4925
  const [internalValue, setInternalValue] = useControlledState(value, void 0, onChange);
4691
4926
  const autocompleteValue = typeof internalValue === "string" || typeof internalValue === "number" ? String(internalValue) : void 0;
4692
- const handleChange = useCallback18(
4927
+ const handleChange = useCallback20(
4693
4928
  (event) => {
4694
4929
  const val = event.target.value;
4695
4930
  if (val) {
@@ -4704,7 +4939,7 @@ function Autocomplete2(props) {
4704
4939
  if (hidden) {
4705
4940
  return null;
4706
4941
  }
4707
- return /* @__PURE__ */ React36.createElement(Stack9, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React36.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React36.createElement(
4942
+ return /* @__PURE__ */ React38.createElement(Stack9, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React38.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React38.createElement(
4708
4943
  Autocomplete,
4709
4944
  {
4710
4945
  value: autocompleteValue,
@@ -4737,7 +4972,7 @@ function FilterMenu(props) {
4737
4972
  void 0
4738
4973
  // onChange는 Apply 버튼에서만 호출
4739
4974
  );
4740
- const handleFilterChange = useCallback19(
4975
+ const handleFilterChange = useCallback21(
4741
4976
  (filterId, value) => {
4742
4977
  setInternalValues((prev) => ({
4743
4978
  ...prev,
@@ -4746,17 +4981,17 @@ function FilterMenu(props) {
4746
4981
  },
4747
4982
  [setInternalValues]
4748
4983
  );
4749
- const handleApply = useCallback19(() => {
4984
+ const handleApply = useCallback21(() => {
4750
4985
  onChange?.(internalValues);
4751
4986
  onClose?.();
4752
4987
  }, [onChange, onClose, internalValues]);
4753
- const handleClear = useCallback19(() => {
4988
+ const handleClear = useCallback21(() => {
4754
4989
  const clearedValues = resetValues || {};
4755
4990
  setInternalValues(clearedValues);
4756
4991
  onChange?.(clearedValues);
4757
4992
  onClose?.();
4758
4993
  }, [resetValues, setInternalValues, onChange, onClose]);
4759
- return /* @__PURE__ */ React37.createElement(
4994
+ return /* @__PURE__ */ React39.createElement(
4760
4995
  ModalDialog,
4761
4996
  {
4762
4997
  sx: {
@@ -4766,9 +5001,9 @@ function FilterMenu(props) {
4766
5001
  top: "initial"
4767
5002
  }
4768
5003
  },
4769
- /* @__PURE__ */ React37.createElement(DialogContent, { sx: { paddingTop: 5 } }, /* @__PURE__ */ React37.createElement(Stack10, { spacing: 6 }, filters?.map((filter) => {
5004
+ /* @__PURE__ */ React39.createElement(DialogContent, { sx: { paddingTop: 5 } }, /* @__PURE__ */ React39.createElement(Stack10, { spacing: 6 }, filters?.map((filter) => {
4770
5005
  const FilterComponent = componentMap[filter.type];
4771
- return FilterComponent ? /* @__PURE__ */ React37.createElement(
5006
+ return FilterComponent ? /* @__PURE__ */ React39.createElement(
4772
5007
  FilterComponent,
4773
5008
  {
4774
5009
  key: filter.id,
@@ -4780,14 +5015,14 @@ function FilterMenu(props) {
4780
5015
  }
4781
5016
  ) : null;
4782
5017
  }))),
4783
- /* @__PURE__ */ React37.createElement(DialogActions, { sx: { justifyContent: "space-between" } }, useClear && filters?.length === 1 && /* @__PURE__ */ React37.createElement(Button2, { variant: "plain", color: "neutral", size: "md", onClick: handleClear }, "Clear"), useReset && !useClear && /* @__PURE__ */ React37.createElement(Button2, { variant: "plain", color: "neutral", size: "md", onClick: handleClear }, "Reset"), /* @__PURE__ */ React37.createElement(Button2, { variant: "solid", color: "primary", size: "md", onClick: handleApply }, "Apply"))
5018
+ /* @__PURE__ */ React39.createElement(DialogActions, { sx: { justifyContent: "space-between" } }, useClear && filters?.length === 1 && /* @__PURE__ */ React39.createElement(Button2, { variant: "plain", color: "neutral", size: "md", onClick: handleClear }, "Clear"), useReset && !useClear && /* @__PURE__ */ React39.createElement(Button2, { variant: "plain", color: "neutral", size: "md", onClick: handleClear }, "Reset"), /* @__PURE__ */ React39.createElement(Button2, { variant: "solid", color: "primary", size: "md", onClick: handleApply }, "Apply"))
4784
5019
  );
4785
5020
  }
4786
5021
  FilterMenu.displayName = "FilterMenu";
4787
5022
 
4788
5023
  // src/components/Uploader/Uploader.tsx
4789
- import React38, { useCallback as useCallback20, useEffect as useEffect8, useMemo as useMemo12, useRef as useRef6, useState as useState10 } from "react";
4790
- import { styled as styled20, Input as Input2 } from "@mui/joy";
5024
+ import React40, { useCallback as useCallback22, useEffect as useEffect9, useMemo as useMemo14, useRef as useRef8, useState as useState11 } from "react";
5025
+ import { styled as styled21, Input as Input2 } from "@mui/joy";
4791
5026
  import MuiFileUploadIcon from "@mui/icons-material/CloudUploadRounded";
4792
5027
  import MuiUploadFileIcon from "@mui/icons-material/UploadFileRounded";
4793
5028
  import MuiClearIcon from "@mui/icons-material/ClearRounded";
@@ -4809,7 +5044,7 @@ var esmFiles = {
4809
5044
  "@atlaskit/pragmatic-drag-and-drop/dist/esm/entry-point/prevent-unhandled.js"
4810
5045
  )
4811
5046
  };
4812
- var VisuallyHiddenInput = styled20(Input2)({
5047
+ var VisuallyHiddenInput = styled21(Input2)({
4813
5048
  width: "1px",
4814
5049
  height: "1px",
4815
5050
  overflow: "hidden",
@@ -4818,18 +5053,18 @@ var VisuallyHiddenInput = styled20(Input2)({
4818
5053
  clipPath: "inset(50%)",
4819
5054
  position: "absolute"
4820
5055
  });
4821
- var PreviewRoot = styled20(Stack_default, {
5056
+ var PreviewRoot = styled21(Stack_default, {
4822
5057
  name: "Uploader",
4823
5058
  slot: "PreviewRoot"
4824
5059
  })({});
4825
- var UploadCard = styled20(Card, {
5060
+ var UploadCard = styled21(Card, {
4826
5061
  name: "Uploader",
4827
5062
  slot: "UploadCard"
4828
5063
  })(({ theme }) => ({
4829
5064
  padding: theme.spacing(2.5),
4830
5065
  border: `1px solid ${theme.palette.neutral.outlinedBorder}`
4831
5066
  }));
4832
- var UploadFileIcon = styled20(MuiUploadFileIcon, {
5067
+ var UploadFileIcon = styled21(MuiUploadFileIcon, {
4833
5068
  name: "Uploader",
4834
5069
  slot: "UploadFileIcon"
4835
5070
  })(({ theme }) => ({
@@ -4837,7 +5072,7 @@ var UploadFileIcon = styled20(MuiUploadFileIcon, {
4837
5072
  width: "32px",
4838
5073
  height: "32px"
4839
5074
  }));
4840
- var ClearIcon2 = styled20(MuiClearIcon, {
5075
+ var ClearIcon2 = styled21(MuiClearIcon, {
4841
5076
  name: "Uploader",
4842
5077
  slot: "ClearIcon"
4843
5078
  })(({ theme }) => ({
@@ -4863,15 +5098,15 @@ var getFileSize = (n) => {
4863
5098
  };
4864
5099
  var Preview = (props) => {
4865
5100
  const { files, uploaded, onDelete } = props;
4866
- return /* @__PURE__ */ React38.createElement(PreviewRoot, { gap: 1 }, [...uploaded, ...files].map((file) => /* @__PURE__ */ React38.createElement(UploadCard, { key: file.name, size: "sm", color: "neutral" }, /* @__PURE__ */ React38.createElement(Stack_default, { direction: "row", alignItems: "center", gap: 2 }, /* @__PURE__ */ React38.createElement(UploadFileIcon, null), /* @__PURE__ */ React38.createElement(Stack_default, { flex: "1" }, /* @__PURE__ */ React38.createElement(Typography_default, { level: "body-sm", textColor: "common.black" }, file.name), !!file.size && /* @__PURE__ */ React38.createElement(Typography_default, { level: "body-xs", fontWeight: "300", lineHeight: "1.33", textColor: "text.tertiary" }, getFileSize(file.size))), /* @__PURE__ */ React38.createElement(IconButton_default, { onClick: () => onDelete?.(file) }, /* @__PURE__ */ React38.createElement(ClearIcon2, null))))));
5101
+ return /* @__PURE__ */ React40.createElement(PreviewRoot, { gap: 1 }, [...uploaded, ...files].map((file) => /* @__PURE__ */ React40.createElement(UploadCard, { key: file.name, size: "sm", color: "neutral" }, /* @__PURE__ */ React40.createElement(Stack_default, { direction: "row", alignItems: "center", gap: 2 }, /* @__PURE__ */ React40.createElement(UploadFileIcon, null), /* @__PURE__ */ React40.createElement(Stack_default, { flex: "1" }, /* @__PURE__ */ React40.createElement(Typography_default, { level: "body-sm", textColor: "common.black" }, file.name), !!file.size && /* @__PURE__ */ React40.createElement(Typography_default, { level: "body-xs", fontWeight: "300", lineHeight: "1.33", textColor: "text.tertiary" }, getFileSize(file.size))), /* @__PURE__ */ React40.createElement(IconButton_default, { onClick: () => onDelete?.(file) }, /* @__PURE__ */ React40.createElement(ClearIcon2, null))))));
4867
5102
  };
4868
- var UploaderRoot = styled20(Stack_default, {
5103
+ var UploaderRoot = styled21(Stack_default, {
4869
5104
  name: "Uploader",
4870
5105
  slot: "root"
4871
5106
  })(({ theme }) => ({
4872
5107
  gap: theme.spacing(2)
4873
5108
  }));
4874
- var FileDropZone = styled20(Sheet_default, {
5109
+ var FileDropZone = styled21(Sheet_default, {
4875
5110
  name: "Uploader",
4876
5111
  slot: "dropZone",
4877
5112
  shouldForwardProp: (prop) => prop !== "error"
@@ -4887,7 +5122,7 @@ var FileDropZone = styled20(Sheet_default, {
4887
5122
  backgroundColor: theme.palette.background.surface,
4888
5123
  border: error ? `1px solid ${theme.palette.danger.outlinedBorder}` : state === "idle" ? `1px solid ${theme.palette.neutral.outlinedBorder}` : `1px solid ${theme.palette.primary.outlinedBorder}`
4889
5124
  }));
4890
- var UploaderIcon = styled20(MuiFileUploadIcon, {
5125
+ var UploaderIcon = styled21(MuiFileUploadIcon, {
4891
5126
  name: "Uploader",
4892
5127
  slot: "iconContainer",
4893
5128
  shouldForwardProp: (prop) => prop !== "error"
@@ -4896,7 +5131,7 @@ var UploaderIcon = styled20(MuiFileUploadIcon, {
4896
5131
  width: "32px",
4897
5132
  height: "32px"
4898
5133
  }));
4899
- var Uploader = React38.memo(
5134
+ var Uploader = React40.memo(
4900
5135
  (props) => {
4901
5136
  const {
4902
5137
  accept,
@@ -4911,14 +5146,14 @@ var Uploader = React38.memo(
4911
5146
  disabled,
4912
5147
  onDelete
4913
5148
  } = props;
4914
- const dropZoneRef = useRef6(null);
4915
- const inputRef = useRef6(null);
4916
- const [errorText, setErrorText] = useState10();
4917
- const [files, setFiles] = useState10([]);
4918
- const [uploaded, setUploaded] = useState10(props.uploaded || []);
4919
- const [previewState, setPreviewState] = useState10("idle");
4920
- const accepts = useMemo12(() => accept.split(",").map((accept2) => accept2.trim()), [accept]);
4921
- const parsedAccepts = useMemo12(
5149
+ const dropZoneRef = useRef8(null);
5150
+ const inputRef = useRef8(null);
5151
+ const [errorText, setErrorText] = useState11();
5152
+ const [files, setFiles] = useState11([]);
5153
+ const [uploaded, setUploaded] = useState11(props.uploaded || []);
5154
+ const [previewState, setPreviewState] = useState11("idle");
5155
+ const accepts = useMemo14(() => accept.split(",").map((accept2) => accept2.trim()), [accept]);
5156
+ const parsedAccepts = useMemo14(
4922
5157
  () => accepts.flatMap((type) => {
4923
5158
  if (["image/*", "video/*", "audio/*"].includes(type)) {
4924
5159
  return ALL_EXTENSIONS_BY_TYPE[type];
@@ -4927,7 +5162,7 @@ var Uploader = React38.memo(
4927
5162
  }),
4928
5163
  [accepts]
4929
5164
  );
4930
- const helperText = useMemo12(() => {
5165
+ const helperText = useMemo14(() => {
4931
5166
  const [allAcceptedTypes, acceptedTypes] = [
4932
5167
  accepts.filter((accept2) => ["image/*", "video/*", "audio/*"].includes(accept2)).map((accept2) => {
4933
5168
  const [type] = accept2.split("/");
@@ -4954,12 +5189,12 @@ var Uploader = React38.memo(
4954
5189
  }
4955
5190
  return helperTexts.join(", ");
4956
5191
  }, [accepts, maxFileTotalSize, maxCount]);
4957
- const error = useMemo12(() => !!errorText || props.error, [props.error, errorText]);
4958
- const showDropZone = useMemo12(
5192
+ const error = useMemo14(() => !!errorText || props.error, [props.error, errorText]);
5193
+ const showDropZone = useMemo14(
4959
5194
  () => !maxCount || maxCount && [...uploaded, ...files].length !== maxCount,
4960
5195
  [files, maxCount, uploaded]
4961
5196
  );
4962
- const addFiles = useCallback20(
5197
+ const addFiles = useCallback22(
4963
5198
  (uploads) => {
4964
5199
  try {
4965
5200
  const types = parsedAccepts.map((type) => type.replace(".", "")) || [];
@@ -5004,7 +5239,7 @@ var Uploader = React38.memo(
5004
5239
  },
5005
5240
  [files, uploaded, maxCount, parsedAccepts, maxFileSize, maxFileTotalSize, name, onChange]
5006
5241
  );
5007
- useEffect8(() => {
5242
+ useEffect9(() => {
5008
5243
  if (!dropZoneRef.current || disabled) {
5009
5244
  return;
5010
5245
  }
@@ -5042,7 +5277,7 @@ var Uploader = React38.memo(
5042
5277
  );
5043
5278
  return () => cleanup?.();
5044
5279
  }, [disabled, addFiles]);
5045
- useEffect8(() => {
5280
+ useEffect9(() => {
5046
5281
  if (inputRef.current && minCount) {
5047
5282
  if (files.length < minCount) {
5048
5283
  inputRef.current.setCustomValidity(`At least ${minCount} files are required.`);
@@ -5051,14 +5286,14 @@ var Uploader = React38.memo(
5051
5286
  }
5052
5287
  }
5053
5288
  }, [inputRef, files, minCount]);
5054
- const handleFileChanged = useCallback20(
5289
+ const handleFileChanged = useCallback22(
5055
5290
  (event) => {
5056
5291
  const files2 = Array.from(event.target.files || []);
5057
5292
  addFiles(files2);
5058
5293
  },
5059
5294
  [addFiles]
5060
5295
  );
5061
- const handleDeleteFile = useCallback20(
5296
+ const handleDeleteFile = useCallback22(
5062
5297
  (deletedFile) => {
5063
5298
  if (deletedFile instanceof File) {
5064
5299
  setFiles((current) => {
@@ -5078,10 +5313,10 @@ var Uploader = React38.memo(
5078
5313
  },
5079
5314
  [name, onChange, onDelete]
5080
5315
  );
5081
- const handleUploaderButtonClick = useCallback20(() => {
5316
+ const handleUploaderButtonClick = useCallback22(() => {
5082
5317
  inputRef.current?.click();
5083
5318
  }, []);
5084
- const uploader = /* @__PURE__ */ React38.createElement(
5319
+ const uploader = /* @__PURE__ */ React40.createElement(
5085
5320
  FileDropZone,
5086
5321
  {
5087
5322
  state: previewState,
@@ -5089,8 +5324,8 @@ var Uploader = React38.memo(
5089
5324
  ref: dropZoneRef,
5090
5325
  onClick: handleUploaderButtonClick
5091
5326
  },
5092
- /* @__PURE__ */ React38.createElement(Stack_default, { alignItems: "center", gap: 1 }, /* @__PURE__ */ React38.createElement(UploaderIcon, { state: previewState, error: !!(error || errorText) })),
5093
- /* @__PURE__ */ React38.createElement(
5327
+ /* @__PURE__ */ React40.createElement(Stack_default, { alignItems: "center", gap: 1 }, /* @__PURE__ */ React40.createElement(UploaderIcon, { state: previewState, error: !!(error || errorText) })),
5328
+ /* @__PURE__ */ React40.createElement(
5094
5329
  VisuallyHiddenInput,
5095
5330
  {
5096
5331
  disabled,
@@ -5113,7 +5348,7 @@ var Uploader = React38.memo(
5113
5348
  }
5114
5349
  )
5115
5350
  );
5116
- return /* @__PURE__ */ React38.createElement(UploaderRoot, null, showDropZone && /* @__PURE__ */ React38.createElement(FormControl_default, { size, error: !!(error || errorText), disabled, required: !!minCount }, label && /* @__PURE__ */ React38.createElement(FormLabel_default, null, label), uploader, /* @__PURE__ */ React38.createElement(FormHelperText_default, null, /* @__PURE__ */ React38.createElement(Stack_default, null, errorText && /* @__PURE__ */ React38.createElement("div", null, errorText), /* @__PURE__ */ React38.createElement("div", null, helperText)))), [...uploaded, ...files].length > 0 && /* @__PURE__ */ React38.createElement(Preview, { files, uploaded, onDelete: handleDeleteFile }));
5351
+ return /* @__PURE__ */ React40.createElement(UploaderRoot, null, showDropZone && /* @__PURE__ */ React40.createElement(FormControl_default, { size, error: !!(error || errorText), disabled, required: !!minCount }, label && /* @__PURE__ */ React40.createElement(FormLabel_default, null, label), uploader, /* @__PURE__ */ React40.createElement(FormHelperText_default, null, /* @__PURE__ */ React40.createElement(Stack_default, null, errorText && /* @__PURE__ */ React40.createElement("div", null, errorText), /* @__PURE__ */ React40.createElement("div", null, helperText)))), [...uploaded, ...files].length > 0 && /* @__PURE__ */ React40.createElement(Preview, { files, uploaded, onDelete: handleDeleteFile }));
5117
5352
  }
5118
5353
  );
5119
5354
  Uploader.displayName = "Uploader";
@@ -5122,7 +5357,7 @@ Uploader.displayName = "Uploader";
5122
5357
  import { Grid } from "@mui/joy";
5123
5358
 
5124
5359
  // src/components/IconMenuButton/IconMenuButton.tsx
5125
- import React39 from "react";
5360
+ import React41 from "react";
5126
5361
  import { MenuButton as JoyMenuButton2, IconButton as JoyIconButton2 } from "@mui/joy";
5127
5362
  function IconMenuButton(props) {
5128
5363
  const {
@@ -5136,7 +5371,7 @@ function IconMenuButton(props) {
5136
5371
  placement = "bottom"
5137
5372
  } = props;
5138
5373
  if (!items.length) {
5139
- return /* @__PURE__ */ React39.createElement(
5374
+ return /* @__PURE__ */ React41.createElement(
5140
5375
  JoyIconButton2,
5141
5376
  {
5142
5377
  component: props.buttonComponent ?? "button",
@@ -5150,7 +5385,7 @@ function IconMenuButton(props) {
5150
5385
  icon
5151
5386
  );
5152
5387
  }
5153
- return /* @__PURE__ */ React39.createElement(Dropdown_default, null, /* @__PURE__ */ React39.createElement(
5388
+ return /* @__PURE__ */ React41.createElement(Dropdown_default, null, /* @__PURE__ */ React41.createElement(
5154
5389
  JoyMenuButton2,
5155
5390
  {
5156
5391
  slots: { root: JoyIconButton2 },
@@ -5167,19 +5402,19 @@ function IconMenuButton(props) {
5167
5402
  }
5168
5403
  },
5169
5404
  icon
5170
- ), /* @__PURE__ */ React39.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ React39.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
5405
+ ), /* @__PURE__ */ React41.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ React41.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
5171
5406
  }
5172
5407
  IconMenuButton.displayName = "IconMenuButton";
5173
5408
 
5174
5409
  // src/components/Markdown/Markdown.tsx
5175
- import React40, { lazy, Suspense, useEffect as useEffect9, useState as useState11 } from "react";
5410
+ import React42, { lazy, Suspense, useEffect as useEffect10, useState as useState12 } from "react";
5176
5411
  import { Skeleton } from "@mui/joy";
5177
5412
  import { Link as Link2 } from "@mui/joy";
5178
5413
  import remarkGfm from "remark-gfm";
5179
5414
  var LazyReactMarkdown = lazy(() => import("react-markdown"));
5180
5415
  var Markdown = (props) => {
5181
- const [rehypeAccent2, setRehypeAccent] = useState11(null);
5182
- useEffect9(() => {
5416
+ const [rehypeAccent2, setRehypeAccent] = useState12(null);
5417
+ useEffect10(() => {
5183
5418
  const loadRehypeAccent = async () => {
5184
5419
  const module = await Promise.resolve().then(() => (init_rehype_accent(), rehype_accent_exports));
5185
5420
  setRehypeAccent(() => module.rehypeAccent);
@@ -5201,12 +5436,12 @@ var Markdown = (props) => {
5201
5436
  if (!rehypeAccent2) {
5202
5437
  return null;
5203
5438
  }
5204
- return /* @__PURE__ */ React40.createElement(Typography, { component: "div", color, textColor, level: defaultLevel, ...innerProps }, /* @__PURE__ */ React40.createElement(
5439
+ return /* @__PURE__ */ React42.createElement(Typography, { component: "div", color, textColor, level: defaultLevel, ...innerProps }, /* @__PURE__ */ React42.createElement(
5205
5440
  Suspense,
5206
5441
  {
5207
- fallback: fallback || /* @__PURE__ */ React40.createElement(Typography, null, /* @__PURE__ */ React40.createElement(Skeleton, null, content || ""))
5442
+ fallback: fallback || /* @__PURE__ */ React42.createElement(Typography, null, /* @__PURE__ */ React42.createElement(Skeleton, null, content || ""))
5208
5443
  },
5209
- /* @__PURE__ */ React40.createElement(
5444
+ /* @__PURE__ */ React42.createElement(
5210
5445
  LazyReactMarkdown,
5211
5446
  {
5212
5447
  ...markdownOptions,
@@ -5214,15 +5449,15 @@ var Markdown = (props) => {
5214
5449
  rehypePlugins: [[rehypeAccent2, { accentColor }]],
5215
5450
  remarkPlugins: [remarkGfm],
5216
5451
  components: {
5217
- h1: ({ children }) => /* @__PURE__ */ React40.createElement(Typography, { color, textColor, level: "h1" }, children),
5218
- h2: ({ children }) => /* @__PURE__ */ React40.createElement(Typography, { color, textColor, level: "h2" }, children),
5219
- h3: ({ children }) => /* @__PURE__ */ React40.createElement(Typography, { color, textColor, level: "h3" }, children),
5220
- h4: ({ children }) => /* @__PURE__ */ React40.createElement(Typography, { color, textColor, level: "h4" }, children),
5221
- p: ({ children, node }) => /* @__PURE__ */ React40.createElement(Typography, { color, textColor, level: defaultLevel, ...node?.properties }, children),
5222
- a: ({ children, href }) => /* @__PURE__ */ React40.createElement(Link2, { href, target: defaultLinkAction }, children),
5223
- hr: () => /* @__PURE__ */ React40.createElement(Divider, null),
5224
- b: ({ children }) => /* @__PURE__ */ React40.createElement(Typography, { fontWeight: boldFontWeight }, children),
5225
- strong: ({ children }) => /* @__PURE__ */ React40.createElement(Typography, { fontWeight: boldFontWeight }, children),
5452
+ h1: ({ children }) => /* @__PURE__ */ React42.createElement(Typography, { color, textColor, level: "h1" }, children),
5453
+ h2: ({ children }) => /* @__PURE__ */ React42.createElement(Typography, { color, textColor, level: "h2" }, children),
5454
+ h3: ({ children }) => /* @__PURE__ */ React42.createElement(Typography, { color, textColor, level: "h3" }, children),
5455
+ h4: ({ children }) => /* @__PURE__ */ React42.createElement(Typography, { color, textColor, level: "h4" }, children),
5456
+ p: ({ children, node }) => /* @__PURE__ */ React42.createElement(Typography, { color, textColor, level: defaultLevel, ...node?.properties }, children),
5457
+ a: ({ children, href }) => /* @__PURE__ */ React42.createElement(Link2, { href, target: defaultLinkAction }, children),
5458
+ hr: () => /* @__PURE__ */ React42.createElement(Divider, null),
5459
+ b: ({ children }) => /* @__PURE__ */ React42.createElement(Typography, { fontWeight: boldFontWeight }, children),
5460
+ strong: ({ children }) => /* @__PURE__ */ React42.createElement(Typography, { fontWeight: boldFontWeight }, children),
5226
5461
  ...markdownOptions?.components
5227
5462
  }
5228
5463
  }
@@ -5232,7 +5467,7 @@ var Markdown = (props) => {
5232
5467
  Markdown.displayName = "Markdown";
5233
5468
 
5234
5469
  // src/components/MenuButton/MenuButton.tsx
5235
- import React41 from "react";
5470
+ import React43 from "react";
5236
5471
  import { MenuButton as JoyMenuButton3, Button as JoyButton2 } from "@mui/joy";
5237
5472
  import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
5238
5473
  function MenuButton(props) {
@@ -5250,7 +5485,7 @@ function MenuButton(props) {
5250
5485
  placement = "bottom"
5251
5486
  } = props;
5252
5487
  if (!items.length) {
5253
- return /* @__PURE__ */ React41.createElement(
5488
+ return /* @__PURE__ */ React43.createElement(
5254
5489
  JoyButton2,
5255
5490
  {
5256
5491
  component: props.buttonComponent ?? "button",
@@ -5261,12 +5496,12 @@ function MenuButton(props) {
5261
5496
  loading,
5262
5497
  startDecorator,
5263
5498
  ...props.buttonComponentProps ?? {},
5264
- endDecorator: showIcon ? /* @__PURE__ */ React41.createElement(React41.Fragment, null, endDecorator, /* @__PURE__ */ React41.createElement(ExpandMoreIcon, null)) : /* @__PURE__ */ React41.createElement(React41.Fragment, null, endDecorator)
5499
+ endDecorator: showIcon ? /* @__PURE__ */ React43.createElement(React43.Fragment, null, endDecorator, /* @__PURE__ */ React43.createElement(ExpandMoreIcon, null)) : /* @__PURE__ */ React43.createElement(React43.Fragment, null, endDecorator)
5265
5500
  },
5266
5501
  buttonText
5267
5502
  );
5268
5503
  }
5269
- return /* @__PURE__ */ React41.createElement(Dropdown_default, null, /* @__PURE__ */ React41.createElement(
5504
+ return /* @__PURE__ */ React43.createElement(Dropdown_default, null, /* @__PURE__ */ React43.createElement(
5270
5505
  JoyMenuButton3,
5271
5506
  {
5272
5507
  component: props.buttonComponent ?? "button",
@@ -5277,25 +5512,25 @@ function MenuButton(props) {
5277
5512
  loading,
5278
5513
  startDecorator,
5279
5514
  ...props.buttonComponentProps ?? {},
5280
- endDecorator: showIcon ? /* @__PURE__ */ React41.createElement(React41.Fragment, null, endDecorator, /* @__PURE__ */ React41.createElement(ExpandMoreIcon, null)) : /* @__PURE__ */ React41.createElement(React41.Fragment, null, endDecorator)
5515
+ endDecorator: showIcon ? /* @__PURE__ */ React43.createElement(React43.Fragment, null, endDecorator, /* @__PURE__ */ React43.createElement(ExpandMoreIcon, null)) : /* @__PURE__ */ React43.createElement(React43.Fragment, null, endDecorator)
5281
5516
  },
5282
5517
  buttonText
5283
- ), /* @__PURE__ */ React41.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ React41.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
5518
+ ), /* @__PURE__ */ React43.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ React43.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
5284
5519
  }
5285
5520
  MenuButton.displayName = "MenuButton";
5286
5521
 
5287
5522
  // src/components/MonthPicker/MonthPicker.tsx
5288
- import React42, { forwardRef as forwardRef9, useCallback as useCallback21, useEffect as useEffect10, useImperativeHandle as useImperativeHandle4, useRef as useRef7, useState as useState12 } from "react";
5523
+ import React44, { forwardRef as forwardRef9, useCallback as useCallback23, useEffect as useEffect11, useImperativeHandle as useImperativeHandle4, useRef as useRef9, useState as useState13 } from "react";
5289
5524
  import CalendarTodayIcon3 from "@mui/icons-material/CalendarToday";
5290
- import { styled as styled21, useThemeProps as useThemeProps7 } from "@mui/joy";
5525
+ import { styled as styled22, useThemeProps as useThemeProps7 } from "@mui/joy";
5291
5526
  import { FocusTrap as FocusTrap3, ClickAwayListener as ClickAwayListener3, Popper as Popper4 } from "@mui/base";
5292
- var StyledPopper3 = styled21(Popper4, {
5527
+ var StyledPopper3 = styled22(Popper4, {
5293
5528
  name: "MonthPicker",
5294
5529
  slot: "popper"
5295
5530
  })(({ theme }) => ({
5296
5531
  zIndex: theme.zIndex.tooltip
5297
5532
  }));
5298
- var CalendarSheet3 = styled21(Sheet_default, {
5533
+ var CalendarSheet3 = styled22(Sheet_default, {
5299
5534
  name: "MonthPicker",
5300
5535
  slot: "sheet",
5301
5536
  overridesResolver: (props, styles) => styles.root
@@ -5304,7 +5539,7 @@ var CalendarSheet3 = styled21(Sheet_default, {
5304
5539
  boxShadow: theme.shadow.md,
5305
5540
  borderRadius: theme.radius.md
5306
5541
  }));
5307
- var MonthPickerRoot = styled21("div", {
5542
+ var MonthPickerRoot = styled22("div", {
5308
5543
  name: "MonthPicker",
5309
5544
  slot: "root",
5310
5545
  overridesResolver: (props, styles) => styles.root
@@ -5367,14 +5602,14 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5367
5602
  locale,
5368
5603
  ...innerProps
5369
5604
  } = props;
5370
- const innerRef = useRef7(null);
5371
- const buttonRef = useRef7(null);
5605
+ const innerRef = useRef9(null);
5606
+ const buttonRef = useRef9(null);
5372
5607
  const [value, setValue, isControlled] = useControlledState(
5373
5608
  props.value,
5374
5609
  props.defaultValue || "",
5375
- useCallback21((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
5610
+ useCallback23((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
5376
5611
  );
5377
- const getFormattedDisplayValue = useCallback21(
5612
+ const getFormattedDisplayValue = useCallback23(
5378
5613
  (inputValue) => {
5379
5614
  if (!inputValue) return "";
5380
5615
  try {
@@ -5385,19 +5620,19 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5385
5620
  },
5386
5621
  [format, displayFormat, locale]
5387
5622
  );
5388
- const [displayValue, setDisplayValue] = useState12(() => getFormattedDisplayValue(value));
5389
- const [anchorEl, setAnchorEl] = useState12(null);
5623
+ const [displayValue, setDisplayValue] = useState13(() => getFormattedDisplayValue(value));
5624
+ const [anchorEl, setAnchorEl] = useState13(null);
5390
5625
  const open = Boolean(anchorEl);
5391
- useEffect10(() => {
5626
+ useEffect11(() => {
5392
5627
  if (!anchorEl) {
5393
5628
  innerRef.current?.blur();
5394
5629
  }
5395
5630
  }, [anchorEl, innerRef]);
5396
5631
  useImperativeHandle4(ref, () => innerRef.current, [innerRef]);
5397
- useEffect10(() => {
5632
+ useEffect11(() => {
5398
5633
  setDisplayValue(getFormattedDisplayValue(value));
5399
5634
  }, [value, getFormattedDisplayValue]);
5400
- const handleChange = useCallback21(
5635
+ const handleChange = useCallback23(
5401
5636
  (event) => {
5402
5637
  const newValue = event.target.value;
5403
5638
  setValue(newValue);
@@ -5407,21 +5642,21 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5407
5642
  },
5408
5643
  [setValue, getFormattedDisplayValue, isControlled]
5409
5644
  );
5410
- const handleCalendarToggle = useCallback21(
5645
+ const handleCalendarToggle = useCallback23(
5411
5646
  (event) => {
5412
5647
  setAnchorEl(anchorEl ? null : event.currentTarget);
5413
5648
  innerRef.current?.focus();
5414
5649
  },
5415
5650
  [anchorEl, setAnchorEl, innerRef]
5416
5651
  );
5417
- const handleInputMouseDown = useCallback21(
5652
+ const handleInputMouseDown = useCallback23(
5418
5653
  (event) => {
5419
5654
  event.preventDefault();
5420
5655
  buttonRef.current?.focus();
5421
5656
  },
5422
5657
  [buttonRef]
5423
5658
  );
5424
- return /* @__PURE__ */ React42.createElement(MonthPickerRoot, null, /* @__PURE__ */ React42.createElement(FocusTrap3, { open: true }, /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(
5659
+ return /* @__PURE__ */ React44.createElement(MonthPickerRoot, null, /* @__PURE__ */ React44.createElement(FocusTrap3, { open: true }, /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement(
5425
5660
  Input_default,
5426
5661
  {
5427
5662
  ...innerProps,
@@ -5451,7 +5686,7 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5451
5686
  // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
5452
5687
  fontFamily: "monospace"
5453
5688
  },
5454
- endDecorator: /* @__PURE__ */ React42.createElement(
5689
+ endDecorator: /* @__PURE__ */ React44.createElement(
5455
5690
  IconButton_default,
5456
5691
  {
5457
5692
  ref: buttonRef,
@@ -5463,12 +5698,12 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5463
5698
  "aria-expanded": open,
5464
5699
  disabled
5465
5700
  },
5466
- /* @__PURE__ */ React42.createElement(CalendarTodayIcon3, null)
5701
+ /* @__PURE__ */ React44.createElement(CalendarTodayIcon3, null)
5467
5702
  ),
5468
5703
  label,
5469
5704
  helperText
5470
5705
  }
5471
- ), open && /* @__PURE__ */ React42.createElement(ClickAwayListener3, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React42.createElement(
5706
+ ), open && /* @__PURE__ */ React44.createElement(ClickAwayListener3, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React44.createElement(
5472
5707
  StyledPopper3,
5473
5708
  {
5474
5709
  id: "month-picker-popper",
@@ -5487,7 +5722,7 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5487
5722
  "aria-label": "Calendar Tooltip",
5488
5723
  "aria-expanded": open
5489
5724
  },
5490
- /* @__PURE__ */ React42.createElement(CalendarSheet3, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React42.createElement(
5725
+ /* @__PURE__ */ React44.createElement(CalendarSheet3, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React44.createElement(
5491
5726
  Calendar_default,
5492
5727
  {
5493
5728
  view: "month",
@@ -5508,14 +5743,14 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5508
5743
  disablePast,
5509
5744
  locale
5510
5745
  }
5511
- ), /* @__PURE__ */ React42.createElement(
5746
+ ), /* @__PURE__ */ React44.createElement(
5512
5747
  DialogActions_default,
5513
5748
  {
5514
5749
  sx: {
5515
5750
  p: 1
5516
5751
  }
5517
5752
  },
5518
- /* @__PURE__ */ React42.createElement(
5753
+ /* @__PURE__ */ React44.createElement(
5519
5754
  Button_default,
5520
5755
  {
5521
5756
  size,
@@ -5538,18 +5773,18 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5538
5773
  });
5539
5774
 
5540
5775
  // src/components/MonthRangePicker/MonthRangePicker.tsx
5541
- import React43, { forwardRef as forwardRef10, useCallback as useCallback22, useEffect as useEffect11, useImperativeHandle as useImperativeHandle5, useMemo as useMemo13, useRef as useRef8, useState as useState13 } from "react";
5776
+ import React45, { forwardRef as forwardRef10, useCallback as useCallback24, useEffect as useEffect12, useImperativeHandle as useImperativeHandle5, useMemo as useMemo15, useRef as useRef10, useState as useState14 } from "react";
5542
5777
  import { IMaskInput as IMaskInput3, IMask as IMask3 } from "react-imask";
5543
5778
  import CalendarTodayIcon4 from "@mui/icons-material/CalendarToday";
5544
- import { styled as styled22, useThemeProps as useThemeProps8 } from "@mui/joy";
5779
+ import { styled as styled23, useThemeProps as useThemeProps8 } from "@mui/joy";
5545
5780
  import { FocusTrap as FocusTrap4, ClickAwayListener as ClickAwayListener4, Popper as Popper5 } from "@mui/base";
5546
- var StyledPopper4 = styled22(Popper5, {
5781
+ var StyledPopper4 = styled23(Popper5, {
5547
5782
  name: "MonthRangePicker",
5548
5783
  slot: "popper"
5549
5784
  })(({ theme }) => ({
5550
5785
  zIndex: theme.zIndex.tooltip
5551
5786
  }));
5552
- var CalendarSheet4 = styled22(Sheet_default, {
5787
+ var CalendarSheet4 = styled23(Sheet_default, {
5553
5788
  name: "MonthRangePicker",
5554
5789
  slot: "sheet",
5555
5790
  overridesResolver: (props, styles) => styles.root
@@ -5559,7 +5794,7 @@ var CalendarSheet4 = styled22(Sheet_default, {
5559
5794
  boxShadow: theme.shadow.md,
5560
5795
  borderRadius: theme.radius.md
5561
5796
  }));
5562
- var MonthRangePickerRoot = styled22("div", {
5797
+ var MonthRangePickerRoot = styled23("div", {
5563
5798
  name: "MonthRangePicker",
5564
5799
  slot: "root",
5565
5800
  overridesResolver: (props, styles) => styles.root
@@ -5596,9 +5831,9 @@ var parseDates2 = (str) => {
5596
5831
  var formatToPattern3 = (format) => {
5597
5832
  return `${format} - ${format}`.replace(/YYYY/g, "Y").replace(/MM/g, "m").replace(/[^YMm\s]/g, (match) => `${match}\``);
5598
5833
  };
5599
- var TextMaskAdapter9 = React43.forwardRef(function TextMaskAdapter10(props, ref) {
5834
+ var TextMaskAdapter9 = React45.forwardRef(function TextMaskAdapter10(props, ref) {
5600
5835
  const { onChange, format, ...other } = props;
5601
- return /* @__PURE__ */ React43.createElement(
5836
+ return /* @__PURE__ */ React45.createElement(
5602
5837
  IMaskInput3,
5603
5838
  {
5604
5839
  ...other,
@@ -5646,35 +5881,35 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
5646
5881
  size,
5647
5882
  ...innerProps
5648
5883
  } = props;
5649
- const innerRef = useRef8(null);
5884
+ const innerRef = useRef10(null);
5650
5885
  const [value, setValue] = useControlledState(
5651
5886
  props.value,
5652
5887
  props.defaultValue || "",
5653
- useCallback22((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
5888
+ useCallback24((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
5654
5889
  );
5655
- const [anchorEl, setAnchorEl] = useState13(null);
5890
+ const [anchorEl, setAnchorEl] = useState14(null);
5656
5891
  const open = Boolean(anchorEl);
5657
- const calendarValue = useMemo13(() => value ? parseDates2(value) : void 0, [value]);
5658
- useEffect11(() => {
5892
+ const calendarValue = useMemo15(() => value ? parseDates2(value) : void 0, [value]);
5893
+ useEffect12(() => {
5659
5894
  if (!anchorEl) {
5660
5895
  innerRef.current?.blur();
5661
5896
  }
5662
5897
  }, [anchorEl, innerRef]);
5663
5898
  useImperativeHandle5(ref, () => innerRef.current, [innerRef]);
5664
- const handleChange = useCallback22(
5899
+ const handleChange = useCallback24(
5665
5900
  (event) => {
5666
5901
  setValue(event.target.value);
5667
5902
  },
5668
5903
  [setValue]
5669
5904
  );
5670
- const handleCalendarToggle = useCallback22(
5905
+ const handleCalendarToggle = useCallback24(
5671
5906
  (event) => {
5672
5907
  setAnchorEl(anchorEl ? null : event.currentTarget);
5673
5908
  innerRef.current?.focus();
5674
5909
  },
5675
5910
  [anchorEl, setAnchorEl, innerRef]
5676
5911
  );
5677
- const handleCalendarChange = useCallback22(
5912
+ const handleCalendarChange = useCallback24(
5678
5913
  ([date1, date2]) => {
5679
5914
  if (!date1 || !date2) return;
5680
5915
  setValue(formatValueString4([date1, date2], format));
@@ -5682,7 +5917,7 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
5682
5917
  },
5683
5918
  [setValue, setAnchorEl, format]
5684
5919
  );
5685
- return /* @__PURE__ */ React43.createElement(MonthRangePickerRoot, null, /* @__PURE__ */ React43.createElement(FocusTrap4, { open: true }, /* @__PURE__ */ React43.createElement(React43.Fragment, null, /* @__PURE__ */ React43.createElement(
5920
+ return /* @__PURE__ */ React45.createElement(MonthRangePickerRoot, null, /* @__PURE__ */ React45.createElement(FocusTrap4, { open: true }, /* @__PURE__ */ React45.createElement(React45.Fragment, null, /* @__PURE__ */ React45.createElement(
5686
5921
  Input_default,
5687
5922
  {
5688
5923
  ...innerProps,
@@ -5704,7 +5939,7 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
5704
5939
  // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
5705
5940
  fontFamily: "monospace"
5706
5941
  },
5707
- endDecorator: /* @__PURE__ */ React43.createElement(
5942
+ endDecorator: /* @__PURE__ */ React45.createElement(
5708
5943
  IconButton_default,
5709
5944
  {
5710
5945
  variant: "plain",
@@ -5714,12 +5949,12 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
5714
5949
  "aria-haspopup": "dialog",
5715
5950
  "aria-expanded": open
5716
5951
  },
5717
- /* @__PURE__ */ React43.createElement(CalendarTodayIcon4, null)
5952
+ /* @__PURE__ */ React45.createElement(CalendarTodayIcon4, null)
5718
5953
  ),
5719
5954
  label,
5720
5955
  helperText
5721
5956
  }
5722
- ), open && /* @__PURE__ */ React43.createElement(ClickAwayListener4, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React43.createElement(
5957
+ ), open && /* @__PURE__ */ React45.createElement(ClickAwayListener4, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React45.createElement(
5723
5958
  StyledPopper4,
5724
5959
  {
5725
5960
  id: "month-range-picker-popper",
@@ -5738,7 +5973,7 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
5738
5973
  "aria-label": "Calendar Tooltip",
5739
5974
  "aria-expanded": open
5740
5975
  },
5741
- /* @__PURE__ */ React43.createElement(CalendarSheet4, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React43.createElement(
5976
+ /* @__PURE__ */ React45.createElement(CalendarSheet4, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React45.createElement(
5742
5977
  Calendar_default,
5743
5978
  {
5744
5979
  view: "month",
@@ -5751,14 +5986,14 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
5751
5986
  disableFuture,
5752
5987
  disablePast
5753
5988
  }
5754
- ), /* @__PURE__ */ React43.createElement(
5989
+ ), /* @__PURE__ */ React45.createElement(
5755
5990
  DialogActions_default,
5756
5991
  {
5757
5992
  sx: {
5758
5993
  p: 1
5759
5994
  }
5760
5995
  },
5761
- /* @__PURE__ */ React43.createElement(
5996
+ /* @__PURE__ */ React45.createElement(
5762
5997
  Button_default,
5763
5998
  {
5764
5999
  size,
@@ -5777,16 +6012,16 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
5777
6012
  MonthRangePicker.displayName = "MonthRangePicker";
5778
6013
 
5779
6014
  // src/components/NavigationGroup/NavigationGroup.tsx
5780
- import React44 from "react";
6015
+ import React46 from "react";
5781
6016
  import {
5782
6017
  Accordion as JoyAccordion2,
5783
6018
  AccordionSummary as JoyAccordionSummary2,
5784
6019
  AccordionDetails as JoyAccordionDetails2,
5785
- styled as styled23,
6020
+ styled as styled24,
5786
6021
  accordionSummaryClasses,
5787
6022
  Stack as Stack11
5788
6023
  } from "@mui/joy";
5789
- var AccordionSummary2 = styled23(JoyAccordionSummary2, {
6024
+ var AccordionSummary2 = styled24(JoyAccordionSummary2, {
5790
6025
  name: "NavigationGroup",
5791
6026
  slot: "Summary",
5792
6027
  shouldForwardProp: (prop) => prop !== "useIcon" && prop !== "level"
@@ -5799,7 +6034,7 @@ var AccordionSummary2 = styled23(JoyAccordionSummary2, {
5799
6034
  }
5800
6035
  }
5801
6036
  }));
5802
- var AccordionDetails2 = styled23(JoyAccordionDetails2, {
6037
+ var AccordionDetails2 = styled24(JoyAccordionDetails2, {
5803
6038
  name: "NavigationGroup",
5804
6039
  slot: "Details"
5805
6040
  })(({ theme }) => ({
@@ -5808,19 +6043,19 @@ var AccordionDetails2 = styled23(JoyAccordionDetails2, {
5808
6043
  }));
5809
6044
  function NavigationGroup(props) {
5810
6045
  const { title, children, startDecorator, level, ...rest } = props;
5811
- return /* @__PURE__ */ React44.createElement(JoyAccordion2, { ...rest }, /* @__PURE__ */ React44.createElement(AccordionSummary2, { useIcon: !!startDecorator, level }, /* @__PURE__ */ React44.createElement(Stack11, { direction: "row", gap: 4 }, startDecorator, title)), /* @__PURE__ */ React44.createElement(AccordionDetails2, null, children));
6046
+ return /* @__PURE__ */ React46.createElement(JoyAccordion2, { ...rest }, /* @__PURE__ */ React46.createElement(AccordionSummary2, { useIcon: !!startDecorator, level }, /* @__PURE__ */ React46.createElement(Stack11, { direction: "row", gap: 4 }, startDecorator, title)), /* @__PURE__ */ React46.createElement(AccordionDetails2, null, children));
5812
6047
  }
5813
6048
 
5814
6049
  // src/components/NavigationItem/NavigationItem.tsx
5815
- import React45 from "react";
6050
+ import React47 from "react";
5816
6051
  import {
5817
6052
  ListItem as JoyListItem,
5818
6053
  ListItemButton as JoyListItemButton,
5819
6054
  ListItemDecorator as JoyListItemDecorator,
5820
- styled as styled24,
6055
+ styled as styled25,
5821
6056
  listItemButtonClasses
5822
6057
  } from "@mui/joy";
5823
- var ListItemButton = styled24(JoyListItemButton, {
6058
+ var ListItemButton = styled25(JoyListItemButton, {
5824
6059
  name: "NavigationItem",
5825
6060
  slot: "Button",
5826
6061
  shouldForwardProp: (prop) => prop !== "useIcon" && prop !== "level"
@@ -5847,7 +6082,7 @@ function NavigationItem(props) {
5847
6082
  const handleClick = () => {
5848
6083
  onClick?.(id);
5849
6084
  };
5850
- return /* @__PURE__ */ React45.createElement(JoyListItem, { ...rest }, /* @__PURE__ */ React45.createElement(
6085
+ return /* @__PURE__ */ React47.createElement(JoyListItem, { ...rest }, /* @__PURE__ */ React47.createElement(
5851
6086
  ListItemButton,
5852
6087
  {
5853
6088
  level,
@@ -5856,21 +6091,21 @@ function NavigationItem(props) {
5856
6091
  "aria-current": selected,
5857
6092
  onClick: handleClick
5858
6093
  },
5859
- startDecorator && /* @__PURE__ */ React45.createElement(JoyListItemDecorator, null, startDecorator),
6094
+ startDecorator && /* @__PURE__ */ React47.createElement(JoyListItemDecorator, null, startDecorator),
5860
6095
  children
5861
6096
  ));
5862
6097
  }
5863
6098
 
5864
6099
  // src/components/Navigator/Navigator.tsx
5865
- import React46 from "react";
6100
+ import React48 from "react";
5866
6101
  function Navigator(props) {
5867
6102
  const { items, level = 0, onSelect } = props;
5868
6103
  const handleItemClick = (id) => {
5869
6104
  onSelect?.(id);
5870
6105
  };
5871
- return /* @__PURE__ */ React46.createElement("div", null, items.map((item, index) => {
6106
+ return /* @__PURE__ */ React48.createElement("div", null, items.map((item, index) => {
5872
6107
  if (item.type === "item") {
5873
- return /* @__PURE__ */ React46.createElement(
6108
+ return /* @__PURE__ */ React48.createElement(
5874
6109
  NavigationItem,
5875
6110
  {
5876
6111
  key: item.id,
@@ -5883,7 +6118,7 @@ function Navigator(props) {
5883
6118
  item.title
5884
6119
  );
5885
6120
  } else if (item.type === "group") {
5886
- return /* @__PURE__ */ React46.createElement(
6121
+ return /* @__PURE__ */ React48.createElement(
5887
6122
  NavigationGroup,
5888
6123
  {
5889
6124
  key: `${item.title}-${index}`,
@@ -5901,22 +6136,22 @@ function Navigator(props) {
5901
6136
  Navigator.displayName = "Navigator";
5902
6137
 
5903
6138
  // src/components/ProfileMenu/ProfileMenu.tsx
5904
- import React47, { useCallback as useCallback23, useMemo as useMemo14 } from "react";
5905
- import { Dropdown as Dropdown2, ListDivider, menuItemClasses, styled as styled25, MenuButton as MenuButton2 } from "@mui/joy";
6139
+ import React49, { useCallback as useCallback25, useMemo as useMemo16 } from "react";
6140
+ import { Dropdown as Dropdown2, ListDivider, menuItemClasses, styled as styled26, MenuButton as MenuButton2 } from "@mui/joy";
5906
6141
  import { ClickAwayListener as ClickAwayListener5 } from "@mui/base";
5907
6142
  import DropdownIcon from "@mui/icons-material/ArrowDropDown";
5908
- var StyledProfileCard = styled25(Stack, {
6143
+ var StyledProfileCard = styled26(Stack, {
5909
6144
  name: "ProfileMenu",
5910
6145
  slot: "item"
5911
6146
  })({});
5912
6147
  function ProfileCard(props) {
5913
6148
  const { children, chip, caption, size } = props;
5914
- const captionLevel = useMemo14(() => size === "sm" ? "body-xs" : "body-sm", [size]);
5915
- const nameLevel = useMemo14(() => size === "sm" ? "body-sm" : "body-md", [size]);
5916
- return /* @__PURE__ */ React47.createElement(StyledProfileCard, { px: 4, py: 2 }, /* @__PURE__ */ React47.createElement(Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React47.createElement(Typography, { level: nameLevel, fontWeight: "bold", textColor: "text.primary" }, children), chip && /* @__PURE__ */ React47.createElement(Chip, { size, color: "neutral", variant: "outlined" }, chip)), caption && /* @__PURE__ */ React47.createElement(Typography, { level: captionLevel, textColor: "text.tertiary" }, caption));
6149
+ const captionLevel = useMemo16(() => size === "sm" ? "body-xs" : "body-sm", [size]);
6150
+ const nameLevel = useMemo16(() => size === "sm" ? "body-sm" : "body-md", [size]);
6151
+ return /* @__PURE__ */ React49.createElement(StyledProfileCard, { px: 4, py: 2 }, /* @__PURE__ */ React49.createElement(Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React49.createElement(Typography, { level: nameLevel, fontWeight: "bold", textColor: "text.primary" }, children), chip && /* @__PURE__ */ React49.createElement(Chip, { size, color: "neutral", variant: "outlined" }, chip)), caption && /* @__PURE__ */ React49.createElement(Typography, { level: captionLevel, textColor: "text.tertiary" }, caption));
5917
6152
  }
5918
6153
  ProfileCard.displayName = "ProfileCard";
5919
- var StyledProfileMenuButton = styled25(MenuButton2, {
6154
+ var StyledProfileMenuButton = styled26(MenuButton2, {
5920
6155
  name: "ProfileMenu",
5921
6156
  slot: "button"
5922
6157
  })(({ theme }) => ({
@@ -5925,20 +6160,20 @@ var StyledProfileMenuButton = styled25(MenuButton2, {
5925
6160
  }));
5926
6161
  function ProfileMenuButton(props) {
5927
6162
  const { size = "md", src, alt, children, getInitial, ...innerProps } = props;
5928
- return /* @__PURE__ */ React47.createElement(
6163
+ return /* @__PURE__ */ React49.createElement(
5929
6164
  StyledProfileMenuButton,
5930
6165
  {
5931
6166
  variant: "plain",
5932
6167
  color: "neutral",
5933
6168
  size,
5934
- endDecorator: /* @__PURE__ */ React47.createElement(DropdownIcon, null),
6169
+ endDecorator: /* @__PURE__ */ React49.createElement(DropdownIcon, null),
5935
6170
  ...innerProps
5936
6171
  },
5937
- /* @__PURE__ */ React47.createElement(Avatar, { variant: "soft", color: "primary", size, src, alt, getInitial }, children)
6172
+ /* @__PURE__ */ React49.createElement(Avatar, { variant: "soft", color: "primary", size, src, alt, getInitial }, children)
5938
6173
  );
5939
6174
  }
5940
6175
  ProfileMenuButton.displayName = "ProfileMenuButton";
5941
- var ProfileMenuRoot = styled25(Menu, {
6176
+ var ProfileMenuRoot = styled26(Menu, {
5942
6177
  name: "ProfileMenu",
5943
6178
  slot: "root"
5944
6179
  })(({ theme }) => ({
@@ -5953,9 +6188,9 @@ function ProfileMenu(props) {
5953
6188
  const [open, setOpen] = useControlledState(
5954
6189
  _open,
5955
6190
  defaultOpen ?? false,
5956
- useCallback23((value) => onOpenChange?.(value), [onOpenChange])
6191
+ useCallback25((value) => onOpenChange?.(value), [onOpenChange])
5957
6192
  );
5958
- return /* @__PURE__ */ React47.createElement(ClickAwayListener5, { onClickAway: () => setOpen(false) }, /* @__PURE__ */ React47.createElement("div", null, /* @__PURE__ */ React47.createElement(Dropdown2, { open }, /* @__PURE__ */ React47.createElement(
6193
+ return /* @__PURE__ */ React49.createElement(ClickAwayListener5, { onClickAway: () => setOpen(false) }, /* @__PURE__ */ React49.createElement("div", null, /* @__PURE__ */ React49.createElement(Dropdown2, { open }, /* @__PURE__ */ React49.createElement(
5959
6194
  ProfileMenuButton,
5960
6195
  {
5961
6196
  size,
@@ -5965,7 +6200,7 @@ function ProfileMenu(props) {
5965
6200
  getInitial
5966
6201
  },
5967
6202
  profile.name
5968
- ), /* @__PURE__ */ React47.createElement(ProfileMenuRoot, { size, placement: "bottom-end", ...innerProps, onClose: () => setOpen(false) }, /* @__PURE__ */ React47.createElement(ProfileCard, { size, caption: profile.caption, chip: profile.chip }, profile.name), !!menuItems.length && /* @__PURE__ */ React47.createElement(ListDivider, null), menuItems.map(({ label, ...menuProps }) => /* @__PURE__ */ React47.createElement(
6203
+ ), /* @__PURE__ */ React49.createElement(ProfileMenuRoot, { size, placement: "bottom-end", ...innerProps, onClose: () => setOpen(false) }, /* @__PURE__ */ React49.createElement(ProfileCard, { size, caption: profile.caption, chip: profile.chip }, profile.name), !!menuItems.length && /* @__PURE__ */ React49.createElement(ListDivider, null), menuItems.map(({ label, ...menuProps }) => /* @__PURE__ */ React49.createElement(
5969
6204
  MenuItem,
5970
6205
  {
5971
6206
  key: label,
@@ -5981,30 +6216,30 @@ function ProfileMenu(props) {
5981
6216
  ProfileMenu.displayName = "ProfileMenu";
5982
6217
 
5983
6218
  // src/components/RadioList/RadioList.tsx
5984
- import React48 from "react";
6219
+ import React50 from "react";
5985
6220
  function RadioList(props) {
5986
6221
  const { items, ...innerProps } = props;
5987
- return /* @__PURE__ */ React48.createElement(RadioGroup, { ...innerProps }, items.map((item) => /* @__PURE__ */ React48.createElement(Radio, { key: `${item.value}`, value: item.value, label: item.label })));
6222
+ return /* @__PURE__ */ React50.createElement(RadioGroup, { ...innerProps }, items.map((item) => /* @__PURE__ */ React50.createElement(Radio, { key: `${item.value}`, value: item.value, label: item.label })));
5988
6223
  }
5989
6224
  RadioList.displayName = "RadioList";
5990
6225
 
5991
6226
  // src/components/Stepper/Stepper.tsx
5992
- import React49 from "react";
6227
+ import React51 from "react";
5993
6228
  import {
5994
6229
  Stepper as JoyStepper,
5995
6230
  Step as JoyStep,
5996
6231
  StepIndicator as JoyStepIndicator,
5997
6232
  stepClasses,
5998
6233
  stepIndicatorClasses,
5999
- styled as styled26
6234
+ styled as styled27
6000
6235
  } from "@mui/joy";
6001
6236
  import CheckIcon from "@mui/icons-material/Check";
6002
6237
  import { motion as motion27 } from "framer-motion";
6003
- var Step = styled26(JoyStep)({});
6238
+ var Step = styled27(JoyStep)({});
6004
6239
  Step.displayName = "Step";
6005
- var StepIndicator = styled26(JoyStepIndicator)({});
6240
+ var StepIndicator = styled27(JoyStepIndicator)({});
6006
6241
  StepIndicator.displayName = "StepIndicator";
6007
- var StyledStepper = styled26(JoyStepper)(({ theme }) => ({
6242
+ var StyledStepper = styled27(JoyStepper)(({ theme }) => ({
6008
6243
  "--StepIndicator-size": "24px",
6009
6244
  "--Step-gap": theme.spacing(2),
6010
6245
  "--joy-palette-success-solidBg": "var(--joy-palette-success-400)",
@@ -6022,7 +6257,7 @@ function Stepper(props) {
6022
6257
  inactiveLineColor = "neutral.300",
6023
6258
  activeStep
6024
6259
  } = props;
6025
- return /* @__PURE__ */ React49.createElement(
6260
+ return /* @__PURE__ */ React51.createElement(
6026
6261
  MotionStepper,
6027
6262
  {
6028
6263
  sx: (theme) => ({
@@ -6056,16 +6291,16 @@ function Stepper(props) {
6056
6291
  const completed = activeStep > i + 1;
6057
6292
  const disabled = activeStep < i + 1;
6058
6293
  const hasContent = step.label || step.extraContent;
6059
- return /* @__PURE__ */ React49.createElement(
6294
+ return /* @__PURE__ */ React51.createElement(
6060
6295
  Step,
6061
6296
  {
6062
6297
  key: `step-${i}`,
6063
- indicator: /* @__PURE__ */ React49.createElement(StepIndicator, { variant: "solid", color: "primary" }, completed ? /* @__PURE__ */ React49.createElement(CheckIcon, null) : step.indicatorContent),
6298
+ indicator: /* @__PURE__ */ React51.createElement(StepIndicator, { variant: "solid", color: "primary" }, completed ? /* @__PURE__ */ React51.createElement(CheckIcon, null) : step.indicatorContent),
6064
6299
  active,
6065
6300
  completed,
6066
6301
  disabled
6067
6302
  },
6068
- hasContent && /* @__PURE__ */ React49.createElement(Stack_default, null, step.label && /* @__PURE__ */ React49.createElement(Typography_default, { level: "title-sm" }, step.label), step.extraContent && /* @__PURE__ */ React49.createElement(Typography_default, { level: "body-xs" }, step.extraContent))
6303
+ hasContent && /* @__PURE__ */ React51.createElement(Stack_default, null, step.label && /* @__PURE__ */ React51.createElement(Typography_default, { level: "title-sm" }, step.label), step.extraContent && /* @__PURE__ */ React51.createElement(Typography_default, { level: "body-xs" }, step.extraContent))
6069
6304
  );
6070
6305
  })
6071
6306
  );
@@ -6073,11 +6308,11 @@ function Stepper(props) {
6073
6308
  Stepper.displayName = "Stepper";
6074
6309
 
6075
6310
  // src/components/Switch/Switch.tsx
6076
- import React50 from "react";
6077
- import { Switch as JoySwitch, styled as styled27, switchClasses } from "@mui/joy";
6311
+ import React52 from "react";
6312
+ import { Switch as JoySwitch, styled as styled28, switchClasses } from "@mui/joy";
6078
6313
  import { motion as motion28 } from "framer-motion";
6079
6314
  var MotionSwitch = motion28(JoySwitch);
6080
- var StyledThumb = styled27(motion28.div)({
6315
+ var StyledThumb = styled28(motion28.div)({
6081
6316
  "--Icon-fontSize": "calc(var(--Switch-thumbSize) * 0.75)",
6082
6317
  display: "inline-flex",
6083
6318
  justifyContent: "center",
@@ -6095,14 +6330,14 @@ var StyledThumb = styled27(motion28.div)({
6095
6330
  right: "var(--Switch-thumbOffset)"
6096
6331
  }
6097
6332
  });
6098
- var Thumb = (props) => /* @__PURE__ */ React50.createElement(StyledThumb, { ...props, layout: true, transition: spring });
6333
+ var Thumb = (props) => /* @__PURE__ */ React52.createElement(StyledThumb, { ...props, layout: true, transition: spring });
6099
6334
  var spring = {
6100
6335
  type: "spring",
6101
6336
  stiffness: 700,
6102
6337
  damping: 30
6103
6338
  };
6104
6339
  var Switch = (props) => {
6105
- return /* @__PURE__ */ React50.createElement(
6340
+ return /* @__PURE__ */ React52.createElement(
6106
6341
  MotionSwitch,
6107
6342
  {
6108
6343
  ...props,
@@ -6116,21 +6351,21 @@ var Switch = (props) => {
6116
6351
  Switch.displayName = "Switch";
6117
6352
 
6118
6353
  // src/components/Tabs/Tabs.tsx
6119
- import React51, { forwardRef as forwardRef11 } from "react";
6354
+ import React53, { forwardRef as forwardRef11 } from "react";
6120
6355
  import {
6121
6356
  Tabs as JoyTabs,
6122
6357
  Tab as JoyTab,
6123
6358
  TabList as JoyTabList,
6124
6359
  TabPanel as JoyTabPanel,
6125
- styled as styled28,
6360
+ styled as styled29,
6126
6361
  tabClasses
6127
6362
  } from "@mui/joy";
6128
- var StyledTabs = styled28(JoyTabs)(({ theme }) => ({
6363
+ var StyledTabs = styled29(JoyTabs)(({ theme }) => ({
6129
6364
  backgroundColor: theme.palette.background.body
6130
6365
  }));
6131
6366
  var Tabs = StyledTabs;
6132
6367
  Tabs.displayName = "Tabs";
6133
- var StyledTab = styled28(JoyTab)(({ theme }) => ({
6368
+ var StyledTab = styled29(JoyTab)(({ theme }) => ({
6134
6369
  gap: theme.spacing(2),
6135
6370
  [`&:not(.${tabClasses.selected})`]: {
6136
6371
  color: theme.palette.neutral[700]
@@ -6140,14 +6375,14 @@ var StyledTab = styled28(JoyTab)(({ theme }) => ({
6140
6375
  }
6141
6376
  }));
6142
6377
  var Tab = forwardRef11(function Tab2({ startDecorator, endDecorator, children, ...props }, ref) {
6143
- return /* @__PURE__ */ React51.createElement(StyledTab, { ...props, ref }, startDecorator, children, endDecorator);
6378
+ return /* @__PURE__ */ React53.createElement(StyledTab, { ...props, ref }, startDecorator, children, endDecorator);
6144
6379
  });
6145
6380
  Tab.displayName = "Tab";
6146
6381
  var TabList = JoyTabList;
6147
6382
  var TabPanel = JoyTabPanel;
6148
6383
 
6149
6384
  // src/components/ThemeProvider/ThemeProvider.tsx
6150
- import React52 from "react";
6385
+ import React54 from "react";
6151
6386
  import { CssBaseline, CssVarsProvider, checkboxClasses, extendTheme, inputClasses } from "@mui/joy";
6152
6387
  var colorScheme = {
6153
6388
  palette: {
@@ -6426,7 +6661,7 @@ var defaultTheme = extendTheme({
6426
6661
  });
6427
6662
  function ThemeProvider(props) {
6428
6663
  const theme = props.theme || defaultTheme;
6429
- return /* @__PURE__ */ React52.createElement(React52.Fragment, null, /* @__PURE__ */ React52.createElement(CssVarsProvider, { theme }, /* @__PURE__ */ React52.createElement(CssBaseline, null), props.children));
6664
+ return /* @__PURE__ */ React54.createElement(React54.Fragment, null, /* @__PURE__ */ React54.createElement(CssVarsProvider, { theme }, /* @__PURE__ */ React54.createElement(CssBaseline, null), props.children));
6430
6665
  }
6431
6666
  ThemeProvider.displayName = "ThemeProvider";
6432
6667
  export {
@@ -6592,7 +6827,7 @@ export {
6592
6827
  stepButtonClasses,
6593
6828
  stepClasses2 as stepClasses,
6594
6829
  stepperClasses,
6595
- styled29 as styled,
6830
+ styled30 as styled,
6596
6831
  switchClasses2 as switchClasses,
6597
6832
  tabListClasses,
6598
6833
  tabPanelClasses,