@ceed/cds 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/components/DataTable/components.d.ts +38 -0
- package/dist/components/DataTable/hooks.d.ts +56 -0
- package/dist/components/DataTable/styled.d.ts +281 -0
- package/dist/components/DataTable/types.d.ts +31 -3
- package/dist/components/DataTable/utils.d.ts +16 -0
- package/dist/index.cjs +1120 -890
- package/dist/index.js +956 -721
- package/framer/index.js +39 -39
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -152,7 +152,7 @@ import {
|
|
|
152
152
|
stepperClasses,
|
|
153
153
|
Skeleton as Skeleton2,
|
|
154
154
|
skeletonClasses,
|
|
155
|
-
styled as
|
|
155
|
+
styled as styled30
|
|
156
156
|
} from "@mui/joy";
|
|
157
157
|
|
|
158
158
|
// src/components/Accordions/Accordions.tsx
|
|
@@ -1846,116 +1846,301 @@ var CurrencyInput = React15.forwardRef(function CurrencyInput2(inProps, ref) {
|
|
|
1846
1846
|
var CurrencyInput_default = CurrencyInput;
|
|
1847
1847
|
|
|
1848
1848
|
// src/components/DataTable/DataTable.tsx
|
|
1849
|
-
import
|
|
1850
|
-
useCallback as
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
useRef as useRef4,
|
|
1854
|
-
useState as useState6,
|
|
1849
|
+
import React25, {
|
|
1850
|
+
useCallback as useCallback11,
|
|
1851
|
+
useMemo as useMemo10,
|
|
1852
|
+
useRef as useRef6,
|
|
1855
1853
|
useId,
|
|
1856
1854
|
forwardRef as forwardRef7,
|
|
1857
1855
|
useImperativeHandle as useImperativeHandle2,
|
|
1858
|
-
|
|
1859
|
-
memo,
|
|
1860
|
-
useLayoutEffect
|
|
1856
|
+
Fragment as Fragment2
|
|
1861
1857
|
} from "react";
|
|
1862
1858
|
import { useVirtualizer as useVirtualizer2 } from "@tanstack/react-virtual";
|
|
1863
|
-
import { styled as styled12, LinearProgress, Link, useTheme, buttonClasses, iconButtonClasses } from "@mui/joy";
|
|
1864
|
-
import SortIcon from "@mui/icons-material/ArrowUpwardRounded";
|
|
1865
|
-
|
|
1866
|
-
// src/components/Sheet/Sheet.tsx
|
|
1867
|
-
import { Sheet as JoySheet } from "@mui/joy";
|
|
1868
|
-
import { motion as motion16 } from "framer-motion";
|
|
1869
|
-
var MotionSheet = motion16(JoySheet);
|
|
1870
|
-
var Sheet = MotionSheet;
|
|
1871
|
-
Sheet.displayName = "Sheet";
|
|
1872
|
-
|
|
1873
|
-
// src/components/Sheet/index.ts
|
|
1874
|
-
var Sheet_default = Sheet;
|
|
1875
1859
|
|
|
1876
|
-
// src/components/
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
|
|
1890
|
-
slotProps: { checkbox: checkboxProps = {} } = {}
|
|
1891
|
-
} = props;
|
|
1892
|
-
return /* @__PURE__ */ React16.createElement("thead", null, /* @__PURE__ */ React16.createElement("tr", null, showCheckbox && /* @__PURE__ */ React16.createElement(
|
|
1893
|
-
"th",
|
|
1894
|
-
{
|
|
1895
|
-
style: {
|
|
1896
|
-
width: "40px",
|
|
1897
|
-
textAlign: "center"
|
|
1898
|
-
}
|
|
1899
|
-
},
|
|
1900
|
-
/* @__PURE__ */ React16.createElement(RenderCheckbox, { onChange: onCheckboxChange, ...checkboxProps })
|
|
1901
|
-
), headCells.map((headCell) => /* @__PURE__ */ React16.createElement(
|
|
1902
|
-
"th",
|
|
1903
|
-
{
|
|
1904
|
-
key: headCell.label,
|
|
1905
|
-
style: {
|
|
1906
|
-
width: headCell.width,
|
|
1907
|
-
minWidth: headCell.minWidth,
|
|
1908
|
-
maxWidth: headCell.maxWidth,
|
|
1909
|
-
textAlign: headCell.numeric ? "right" : "left"
|
|
1910
|
-
}
|
|
1911
|
-
},
|
|
1912
|
-
headCell.label
|
|
1913
|
-
))));
|
|
1860
|
+
// src/components/DataTable/utils.ts
|
|
1861
|
+
function extractFieldsFromGroupingModel(items) {
|
|
1862
|
+
const fields = /* @__PURE__ */ new Set();
|
|
1863
|
+
for (const item of items) {
|
|
1864
|
+
if ("groupId" in item) {
|
|
1865
|
+
const children = Array.isArray(item.children) ? item.children : [item.children];
|
|
1866
|
+
const childFields = extractFieldsFromGroupingModel(children);
|
|
1867
|
+
childFields.forEach((field) => fields.add(field));
|
|
1868
|
+
} else {
|
|
1869
|
+
fields.add(item.field);
|
|
1870
|
+
}
|
|
1871
|
+
}
|
|
1872
|
+
return fields;
|
|
1914
1873
|
}
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
const
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
"td",
|
|
1928
|
-
{
|
|
1929
|
-
style: {
|
|
1930
|
-
textAlign: "center"
|
|
1874
|
+
function reorderColumnsByGroupingModel(columns, columnGroupingModel) {
|
|
1875
|
+
const fieldsInGroupingModel = extractFieldsFromGroupingModel(columnGroupingModel);
|
|
1876
|
+
const orderedFields = [];
|
|
1877
|
+
function collectFieldsInOrder(items) {
|
|
1878
|
+
for (const item of items) {
|
|
1879
|
+
if ("groupId" in item) {
|
|
1880
|
+
const children = Array.isArray(item.children) ? item.children : [item.children];
|
|
1881
|
+
collectFieldsInOrder(children);
|
|
1882
|
+
} else {
|
|
1883
|
+
if (!orderedFields.includes(item.field)) {
|
|
1884
|
+
orderedFields.push(item.field);
|
|
1885
|
+
}
|
|
1931
1886
|
}
|
|
1932
|
-
}
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1887
|
+
}
|
|
1888
|
+
}
|
|
1889
|
+
collectFieldsInOrder(columnGroupingModel);
|
|
1890
|
+
const columnMap = new Map(columns.map((col) => [col.field, col]));
|
|
1891
|
+
const reorderedColumns = [];
|
|
1892
|
+
for (const field of orderedFields) {
|
|
1893
|
+
const column = columnMap.get(field);
|
|
1894
|
+
if (column) {
|
|
1895
|
+
reorderedColumns.push(column);
|
|
1896
|
+
}
|
|
1897
|
+
}
|
|
1898
|
+
for (const column of columns) {
|
|
1899
|
+
if (!fieldsInGroupingModel.has(column.field)) {
|
|
1900
|
+
reorderedColumns.push(column);
|
|
1901
|
+
}
|
|
1902
|
+
}
|
|
1903
|
+
return reorderedColumns;
|
|
1904
|
+
}
|
|
1905
|
+
function flattenColumnGroups(items, groupPath = [], columnIndex = { current: 0 }) {
|
|
1906
|
+
const result = [];
|
|
1907
|
+
for (const item of items) {
|
|
1908
|
+
if ("groupId" in item) {
|
|
1909
|
+
const newPath = [...groupPath, item.groupId];
|
|
1910
|
+
const children = Array.isArray(item.children) ? item.children : [item.children];
|
|
1911
|
+
result.push(...flattenColumnGroups(children, newPath, columnIndex));
|
|
1912
|
+
} else {
|
|
1913
|
+
result.push({
|
|
1914
|
+
...item,
|
|
1915
|
+
groupPath,
|
|
1916
|
+
columnIndex: columnIndex.current++
|
|
1917
|
+
});
|
|
1918
|
+
}
|
|
1919
|
+
}
|
|
1920
|
+
return result;
|
|
1921
|
+
}
|
|
1922
|
+
function calculateColumnGroups(columnGroupingModel, columns) {
|
|
1923
|
+
const fieldsInGroupingModel = extractFieldsFromGroupingModel(columnGroupingModel);
|
|
1924
|
+
const flattenedColumns = flattenColumnGroups(columnGroupingModel);
|
|
1925
|
+
const columnIndexMap = new Map(flattenedColumns.map((col) => [col.field, col.columnIndex]));
|
|
1926
|
+
const processedGroups = /* @__PURE__ */ new Map();
|
|
1927
|
+
const groupsByLevel = [];
|
|
1928
|
+
let maxLevel = 0;
|
|
1929
|
+
function processGroup(items, level, parentGroupId) {
|
|
1930
|
+
let minIndex = Infinity;
|
|
1931
|
+
let maxIndex = -Infinity;
|
|
1932
|
+
for (const item of items) {
|
|
1933
|
+
if ("groupId" in item) {
|
|
1934
|
+
const groupKey = parentGroupId ? `${parentGroupId}.${item.groupId}` : item.groupId;
|
|
1935
|
+
if (!processedGroups.has(groupKey)) {
|
|
1936
|
+
const children = Array.isArray(item.children) ? item.children : [item.children];
|
|
1937
|
+
const { startIndex, colspan } = processGroup(children, level + 1, groupKey);
|
|
1938
|
+
const group = {
|
|
1939
|
+
groupId: item.groupId,
|
|
1940
|
+
headerName: item.headerName,
|
|
1941
|
+
headerClassName: item.headerClassName,
|
|
1942
|
+
colspan,
|
|
1943
|
+
level,
|
|
1944
|
+
startIndex
|
|
1945
|
+
};
|
|
1946
|
+
processedGroups.set(groupKey, group);
|
|
1947
|
+
if (!groupsByLevel[level]) {
|
|
1948
|
+
groupsByLevel[level] = [];
|
|
1949
|
+
}
|
|
1950
|
+
groupsByLevel[level].push(group);
|
|
1951
|
+
maxLevel = Math.max(maxLevel, level);
|
|
1952
|
+
minIndex = Math.min(minIndex, startIndex);
|
|
1953
|
+
maxIndex = Math.max(maxIndex, startIndex + colspan - 1);
|
|
1954
|
+
}
|
|
1955
|
+
} else {
|
|
1956
|
+
const columnIndex = columnIndexMap.get(item.field);
|
|
1957
|
+
if (columnIndex !== void 0) {
|
|
1958
|
+
minIndex = Math.min(minIndex, columnIndex);
|
|
1959
|
+
maxIndex = Math.max(maxIndex, columnIndex);
|
|
1960
|
+
}
|
|
1940
1961
|
}
|
|
1941
|
-
}
|
|
1942
|
-
|
|
1943
|
-
|
|
1962
|
+
}
|
|
1963
|
+
return {
|
|
1964
|
+
startIndex: minIndex === Infinity ? 0 : minIndex,
|
|
1965
|
+
colspan: maxIndex === -Infinity ? 0 : maxIndex - minIndex + 1
|
|
1966
|
+
};
|
|
1967
|
+
}
|
|
1968
|
+
processGroup(columnGroupingModel, 0);
|
|
1969
|
+
groupsByLevel.forEach((level) => {
|
|
1970
|
+
level.sort((a, b) => a.startIndex - b.startIndex);
|
|
1971
|
+
});
|
|
1972
|
+
return { groups: groupsByLevel, maxLevel, fieldsInGroupingModel };
|
|
1944
1973
|
}
|
|
1945
|
-
|
|
1974
|
+
function getTextAlign(props) {
|
|
1975
|
+
return !props.editMode && ["number", "date", "currency"].includes(props.type || "") ? "end" : "start";
|
|
1976
|
+
}
|
|
1977
|
+
var numberFormatter = (value) => "Intl" in window ? new Intl.NumberFormat().format(value) : value;
|
|
1978
|
+
|
|
1979
|
+
// src/components/DataTable/styled.tsx
|
|
1980
|
+
import React16 from "react";
|
|
1981
|
+
import { styled as styled8, LinearProgress, buttonClasses, iconButtonClasses } from "@mui/joy";
|
|
1982
|
+
import { motion as motion16 } from "framer-motion";
|
|
1983
|
+
import SortIcon from "@mui/icons-material/ArrowUpwardRounded";
|
|
1984
|
+
var EllipsisDiv = styled8("div", {
|
|
1985
|
+
name: "DataTable",
|
|
1986
|
+
slot: "textEllipsis"
|
|
1987
|
+
})({
|
|
1988
|
+
overflow: "hidden",
|
|
1989
|
+
textOverflow: "ellipsis",
|
|
1990
|
+
whiteSpace: "nowrap"
|
|
1991
|
+
});
|
|
1992
|
+
var OverlayWrapper = styled8("tr", {
|
|
1993
|
+
name: "DataTable",
|
|
1994
|
+
slot: "overlayWrapper"
|
|
1995
|
+
})({
|
|
1996
|
+
position: "sticky",
|
|
1997
|
+
top: `calc(var(--unstable_TableCell-height, 32px))`,
|
|
1998
|
+
left: 0,
|
|
1999
|
+
right: 0,
|
|
2000
|
+
zIndex: 1,
|
|
2001
|
+
"& > td": {
|
|
2002
|
+
height: 0,
|
|
2003
|
+
padding: 0,
|
|
2004
|
+
border: "none !important"
|
|
2005
|
+
}
|
|
2006
|
+
});
|
|
2007
|
+
var VirtualizedTableBody = styled8("tbody", {
|
|
2008
|
+
name: "DataTable",
|
|
2009
|
+
slot: "tableBody"
|
|
2010
|
+
})({
|
|
2011
|
+
"&::after": {
|
|
2012
|
+
content: "''",
|
|
2013
|
+
display: "block",
|
|
2014
|
+
height: "0.01em"
|
|
2015
|
+
},
|
|
2016
|
+
[`& .${buttonClasses.root}`]: {
|
|
2017
|
+
"--Button-minHeight": "26px",
|
|
2018
|
+
"--Button-paddingBlock": "0.25rem",
|
|
2019
|
+
lineHeight: 1,
|
|
2020
|
+
marginTop: "-2px",
|
|
2021
|
+
marginBottom: "-2px"
|
|
2022
|
+
},
|
|
2023
|
+
[`& .${iconButtonClasses.root}`]: {
|
|
2024
|
+
"--IconButton-size": "26px",
|
|
2025
|
+
verticalAlign: "middle",
|
|
2026
|
+
marginTop: "-2px",
|
|
2027
|
+
marginBottom: "-2px"
|
|
2028
|
+
}
|
|
2029
|
+
});
|
|
2030
|
+
var StyledTableRow = styled8("tr", {
|
|
2031
|
+
name: "DataTable",
|
|
2032
|
+
slot: "tableRow",
|
|
2033
|
+
shouldForwardProp: (prop) => prop !== "striped"
|
|
2034
|
+
})(({ striped }) => ({
|
|
2035
|
+
...striped && {
|
|
2036
|
+
backgroundColor: "var(--TableRow-stripeBackground, var(--ceed-palette-background-level2))",
|
|
2037
|
+
color: "var(--ceed-palette-text-primary)",
|
|
2038
|
+
"& td": {
|
|
2039
|
+
backgroundColor: "background.surface"
|
|
2040
|
+
}
|
|
2041
|
+
},
|
|
2042
|
+
"&:hover": {
|
|
2043
|
+
backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))",
|
|
2044
|
+
"& td": {
|
|
2045
|
+
backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))"
|
|
2046
|
+
}
|
|
2047
|
+
}
|
|
2048
|
+
}));
|
|
2049
|
+
var Asterisk = styled8("span", {
|
|
2050
|
+
name: "DataTable",
|
|
2051
|
+
slot: "headCellAsterisk"
|
|
2052
|
+
})(({ theme }) => ({
|
|
2053
|
+
color: "var(--ceed-palette-danger-500)",
|
|
2054
|
+
marginLeft: theme.spacing(0.5)
|
|
2055
|
+
}));
|
|
2056
|
+
var StyledTh = styled8(motion16.th)(({ theme }) => ({
|
|
2057
|
+
boxShadow: "1px 0 var(--TableCell-borderColor)"
|
|
2058
|
+
}));
|
|
2059
|
+
var StyledTd = styled8("td")(({ theme }) => ({
|
|
2060
|
+
transition: `box-shadow 0.3s`,
|
|
2061
|
+
"&:not(.is-last-left):not(.is-last-right)": {
|
|
2062
|
+
boxShadow: "1px 0 var(--TableCell-borderColor)"
|
|
2063
|
+
},
|
|
2064
|
+
".ScrollableRight &": {
|
|
2065
|
+
"&.is-last-left": {
|
|
2066
|
+
boxShadow: `1px 0 var(--TableCell-borderColor), ${theme.shadow.md}`
|
|
2067
|
+
}
|
|
2068
|
+
},
|
|
2069
|
+
".ScrollableLeft &": {
|
|
2070
|
+
"&.is-last-right": {
|
|
2071
|
+
boxShadow: `1px 0 var(--TableCell-borderColor), ${theme.shadow.md}`
|
|
2072
|
+
}
|
|
2073
|
+
}
|
|
2074
|
+
}));
|
|
2075
|
+
var MotionSortIcon = motion16(SortIcon);
|
|
2076
|
+
var DefaultLoadingOverlay = () => /* @__PURE__ */ React16.createElement(LinearProgress, { value: 8, variant: "plain" });
|
|
2077
|
+
var Resizer = (ref, targetRef = ref) => /* @__PURE__ */ React16.createElement(
|
|
2078
|
+
Box_default,
|
|
2079
|
+
{
|
|
2080
|
+
sx: {
|
|
2081
|
+
position: "absolute",
|
|
2082
|
+
top: 0,
|
|
2083
|
+
right: 0,
|
|
2084
|
+
bottom: 0,
|
|
2085
|
+
width: "4px",
|
|
2086
|
+
cursor: "col-resize"
|
|
2087
|
+
},
|
|
2088
|
+
onClick: (e) => e.stopPropagation(),
|
|
2089
|
+
onMouseDown: (e) => {
|
|
2090
|
+
const initialX = e.clientX;
|
|
2091
|
+
const initialWidth = ref.current?.getBoundingClientRect().width;
|
|
2092
|
+
const onMouseMove = (e2) => {
|
|
2093
|
+
if (initialWidth && initialX) {
|
|
2094
|
+
ref.current.style.width = `${initialWidth + (e2.clientX - initialX)}px`;
|
|
2095
|
+
targetRef.current.style.width = `${initialWidth + (e2.clientX - initialX)}px`;
|
|
2096
|
+
}
|
|
2097
|
+
};
|
|
2098
|
+
const onMouseUp = () => {
|
|
2099
|
+
document.removeEventListener("mousemove", onMouseMove);
|
|
2100
|
+
document.removeEventListener("mouseup", onMouseUp);
|
|
2101
|
+
};
|
|
2102
|
+
document.addEventListener("mousemove", onMouseMove);
|
|
2103
|
+
document.addEventListener("mouseup", onMouseUp);
|
|
2104
|
+
}
|
|
2105
|
+
}
|
|
2106
|
+
);
|
|
2107
|
+
|
|
2108
|
+
// src/components/DataTable/components.tsx
|
|
2109
|
+
import React22, {
|
|
2110
|
+
useRef as useRef4,
|
|
2111
|
+
useState as useState6,
|
|
2112
|
+
useLayoutEffect,
|
|
2113
|
+
useMemo as useMemo8,
|
|
2114
|
+
useCallback as useCallback8,
|
|
2115
|
+
useEffect as useEffect4,
|
|
2116
|
+
memo,
|
|
2117
|
+
createElement
|
|
2118
|
+
} from "react";
|
|
2119
|
+
import { styled as styled12, useTheme } from "@mui/joy";
|
|
2120
|
+
import { AnimatePresence as AnimatePresence2 } from "framer-motion";
|
|
1946
2121
|
|
|
1947
2122
|
// src/components/DatePicker/DatePicker.tsx
|
|
1948
2123
|
import React17, { forwardRef as forwardRef6, useCallback as useCallback7, useEffect as useEffect3, useImperativeHandle, useRef as useRef3, useState as useState5 } from "react";
|
|
1949
2124
|
import { IMaskInput, IMask } from "react-imask";
|
|
1950
2125
|
import CalendarTodayIcon from "@mui/icons-material/CalendarToday";
|
|
1951
|
-
import { styled as
|
|
2126
|
+
import { styled as styled10, useThemeProps as useThemeProps4 } from "@mui/joy";
|
|
1952
2127
|
import { FocusTrap, ClickAwayListener, Popper as Popper2 } from "@mui/base";
|
|
1953
2128
|
|
|
1954
|
-
// src/components/
|
|
1955
|
-
import {
|
|
2129
|
+
// src/components/Sheet/Sheet.tsx
|
|
2130
|
+
import { Sheet as JoySheet } from "@mui/joy";
|
|
1956
2131
|
import { motion as motion17 } from "framer-motion";
|
|
1957
|
-
var
|
|
1958
|
-
var
|
|
2132
|
+
var MotionSheet = motion17(JoySheet);
|
|
2133
|
+
var Sheet = MotionSheet;
|
|
2134
|
+
Sheet.displayName = "Sheet";
|
|
2135
|
+
|
|
2136
|
+
// src/components/Sheet/index.ts
|
|
2137
|
+
var Sheet_default = Sheet;
|
|
2138
|
+
|
|
2139
|
+
// src/components/DialogActions/DialogActions.tsx
|
|
2140
|
+
import { DialogActions as JoyDialogActions, styled as styled9 } from "@mui/joy";
|
|
2141
|
+
import { motion as motion18 } from "framer-motion";
|
|
2142
|
+
var MotionDialogActions = motion18(JoyDialogActions);
|
|
2143
|
+
var StyledDialogActions = styled9(MotionDialogActions)(({ theme }) => ({
|
|
1959
2144
|
padding: theme.spacing(2),
|
|
1960
2145
|
gap: theme.spacing(2),
|
|
1961
2146
|
flexDirection: "row",
|
|
@@ -1968,7 +2153,7 @@ DialogActions.displayName = "DialogActions";
|
|
|
1968
2153
|
var DialogActions_default = DialogActions;
|
|
1969
2154
|
|
|
1970
2155
|
// src/components/DatePicker/DatePicker.tsx
|
|
1971
|
-
var CalendarButton =
|
|
2156
|
+
var CalendarButton = styled10(IconButton_default, {
|
|
1972
2157
|
name: "DatePicker",
|
|
1973
2158
|
slot: "calendarButton"
|
|
1974
2159
|
})(({ theme }) => ({
|
|
@@ -1978,13 +2163,13 @@ var CalendarButton = styled9(IconButton_default, {
|
|
|
1978
2163
|
outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar("palette-focusVisible")}`
|
|
1979
2164
|
}
|
|
1980
2165
|
}));
|
|
1981
|
-
var StyledPopper =
|
|
2166
|
+
var StyledPopper = styled10(Popper2, {
|
|
1982
2167
|
name: "DatePicker",
|
|
1983
2168
|
slot: "popper"
|
|
1984
2169
|
})(({ theme }) => ({
|
|
1985
2170
|
zIndex: theme.zIndex.tooltip
|
|
1986
2171
|
}));
|
|
1987
|
-
var CalendarSheet =
|
|
2172
|
+
var CalendarSheet = styled10(Sheet_default, {
|
|
1988
2173
|
name: "DatePicker",
|
|
1989
2174
|
slot: "sheet",
|
|
1990
2175
|
overridesResolver: (props, styles) => styles.root
|
|
@@ -1993,7 +2178,7 @@ var CalendarSheet = styled9(Sheet_default, {
|
|
|
1993
2178
|
boxShadow: theme.shadow.md,
|
|
1994
2179
|
borderRadius: theme.radius.md
|
|
1995
2180
|
}));
|
|
1996
|
-
var DatePickerRoot =
|
|
2181
|
+
var DatePickerRoot = styled10("div", {
|
|
1997
2182
|
name: "DatePicker",
|
|
1998
2183
|
slot: "root",
|
|
1999
2184
|
overridesResolver: (props, styles) => styles.root
|
|
@@ -2310,8 +2495,8 @@ var DatePicker_default = DatePicker;
|
|
|
2310
2495
|
// src/components/Textarea/Textarea.tsx
|
|
2311
2496
|
import React18 from "react";
|
|
2312
2497
|
import { Textarea as JoyTextarea } from "@mui/joy";
|
|
2313
|
-
import { motion as
|
|
2314
|
-
var MotionTextarea =
|
|
2498
|
+
import { motion as motion19 } from "framer-motion";
|
|
2499
|
+
var MotionTextarea = motion19(JoyTextarea);
|
|
2315
2500
|
var Textarea = (props) => {
|
|
2316
2501
|
const {
|
|
2317
2502
|
label,
|
|
@@ -2364,8 +2549,8 @@ var Textarea_default = Textarea;
|
|
|
2364
2549
|
// src/components/Select/Select.tsx
|
|
2365
2550
|
import React19, { useMemo as useMemo7 } from "react";
|
|
2366
2551
|
import { Select as JoySelect, Option as JoyOption } from "@mui/joy";
|
|
2367
|
-
import { motion as
|
|
2368
|
-
var MotionOption =
|
|
2552
|
+
import { motion as motion20 } from "framer-motion";
|
|
2553
|
+
var MotionOption = motion20(JoyOption);
|
|
2369
2554
|
var Option = MotionOption;
|
|
2370
2555
|
Option.displayName = "Option";
|
|
2371
2556
|
function Select(props) {
|
|
@@ -2441,11 +2626,14 @@ Select.displayName = "Select";
|
|
|
2441
2626
|
// src/components/Select/index.ts
|
|
2442
2627
|
var Select_default = Select;
|
|
2443
2628
|
|
|
2629
|
+
// src/components/DataTable/components.tsx
|
|
2630
|
+
import { Link } from "@mui/joy";
|
|
2631
|
+
|
|
2444
2632
|
// src/components/Tooltip/Tooltip.tsx
|
|
2445
2633
|
import React20 from "react";
|
|
2446
2634
|
import { Tooltip as JoyTooltip } from "@mui/joy";
|
|
2447
|
-
import { motion as
|
|
2448
|
-
var MotionTooltip =
|
|
2635
|
+
import { motion as motion21 } from "framer-motion";
|
|
2636
|
+
var MotionTooltip = motion21(JoyTooltip);
|
|
2449
2637
|
var Tooltip = (props) => {
|
|
2450
2638
|
return /* @__PURE__ */ React20.createElement(MotionTooltip, { ...props });
|
|
2451
2639
|
};
|
|
@@ -2454,148 +2642,8 @@ Tooltip.displayName = "Tooltip";
|
|
|
2454
2642
|
// src/components/Tooltip/index.ts
|
|
2455
2643
|
var Tooltip_default = Tooltip;
|
|
2456
2644
|
|
|
2457
|
-
// src/components/DataTable/DataTable.tsx
|
|
2458
|
-
import { motion as motion21, AnimatePresence as AnimatePresence2 } from "framer-motion";
|
|
2459
|
-
|
|
2460
|
-
// src/components/Pagination/Pagination.tsx
|
|
2461
|
-
import React21, { useCallback as useCallback8, useEffect as useEffect4 } from "react";
|
|
2462
|
-
import PreviousIcon from "@mui/icons-material/ChevronLeft";
|
|
2463
|
-
import NextIcon from "@mui/icons-material/ChevronRight";
|
|
2464
|
-
import { styled as styled10 } from "@mui/joy";
|
|
2465
|
-
var PaginationButton = styled10(Button_default, {
|
|
2466
|
-
name: "Pagination",
|
|
2467
|
-
slot: "button"
|
|
2468
|
-
})(({ theme, active, size }) => ({
|
|
2469
|
-
"--Button-size": {
|
|
2470
|
-
sm: "32px",
|
|
2471
|
-
md: "40px",
|
|
2472
|
-
lg: "48px"
|
|
2473
|
-
}[size],
|
|
2474
|
-
width: "var(--Button-size)",
|
|
2475
|
-
height: "var(--Button-size)",
|
|
2476
|
-
backgroundColor: active ? theme.vars.palette.primary.softHoverBg : "transparent",
|
|
2477
|
-
color: active ? theme.vars.palette.primary.softColor : theme.vars.palette.neutral.plainColor,
|
|
2478
|
-
"&:hover": {
|
|
2479
|
-
color: active ? theme.vars.palette.primary.softColor : theme.vars.palette.neutral.softColor,
|
|
2480
|
-
backgroundColor: active ? theme.vars.palette.primary.softActiveBg : theme.vars.palette.neutral.softHoverBg
|
|
2481
|
-
}
|
|
2482
|
-
}));
|
|
2483
|
-
var PaginationIconButton = styled10(IconButton_default, {
|
|
2484
|
-
name: "Pagination",
|
|
2485
|
-
slot: "button"
|
|
2486
|
-
})(({ theme, size }) => ({
|
|
2487
|
-
"--IconButton-size": {
|
|
2488
|
-
sm: "32px",
|
|
2489
|
-
md: "40px",
|
|
2490
|
-
lg: "48px"
|
|
2491
|
-
}[size],
|
|
2492
|
-
"--Icon-fontSize": "20px",
|
|
2493
|
-
width: "var(--IconButton-size)",
|
|
2494
|
-
height: "var(--IconButton-size)",
|
|
2495
|
-
color: theme.vars.palette.neutral.plainColor,
|
|
2496
|
-
"&:hover": {
|
|
2497
|
-
color: theme.vars.palette.neutral.softColor,
|
|
2498
|
-
backgroundColor: theme.vars.palette.neutral.softHoverBg
|
|
2499
|
-
}
|
|
2500
|
-
}));
|
|
2501
|
-
var PaginationRoot = styled10(Stack_default, {
|
|
2502
|
-
name: "Pagination",
|
|
2503
|
-
slot: "root"
|
|
2504
|
-
})({});
|
|
2505
|
-
var PaginationContainer = styled10(Stack_default, {
|
|
2506
|
-
name: "Pagination",
|
|
2507
|
-
slot: "container"
|
|
2508
|
-
})(({ theme, size }) => ({
|
|
2509
|
-
gap: {
|
|
2510
|
-
sm: theme.spacing(1),
|
|
2511
|
-
md: theme.spacing(1.5),
|
|
2512
|
-
lg: theme.spacing(2)
|
|
2513
|
-
}[size]
|
|
2514
|
-
}));
|
|
2515
|
-
function Pagination(props) {
|
|
2516
|
-
const {
|
|
2517
|
-
paginationModel: _paginationModel,
|
|
2518
|
-
defaultPaginationModel = { page: 1, pageSize: 25 },
|
|
2519
|
-
onPageChange,
|
|
2520
|
-
rowCount,
|
|
2521
|
-
size = "md",
|
|
2522
|
-
...innerProps
|
|
2523
|
-
} = props;
|
|
2524
|
-
const [paginationModel, setPaginationModel] = useControlledState(
|
|
2525
|
-
_paginationModel,
|
|
2526
|
-
defaultPaginationModel,
|
|
2527
|
-
useCallback8(
|
|
2528
|
-
(newPage) => {
|
|
2529
|
-
onPageChange(newPage.page);
|
|
2530
|
-
},
|
|
2531
|
-
[onPageChange]
|
|
2532
|
-
)
|
|
2533
|
-
);
|
|
2534
|
-
const handlePageChange = (newPage) => {
|
|
2535
|
-
setPaginationModel({ ...paginationModel, page: newPage });
|
|
2536
|
-
};
|
|
2537
|
-
const firstPage = 1;
|
|
2538
|
-
const lastPage = Math.max(firstPage, Math.ceil(rowCount / paginationModel.pageSize));
|
|
2539
|
-
const beforePages = [paginationModel.page - 2, paginationModel.page - 1].filter((p) => p > 1);
|
|
2540
|
-
const afterPages = [paginationModel.page + 1, paginationModel.page + 2].filter((p) => p <= lastPage - 1);
|
|
2541
|
-
const isMoreAfterPages = lastPage > 1 && paginationModel.page < lastPage - 3;
|
|
2542
|
-
const isMoreBeforePages = lastPage > 1 && paginationModel.page > 4;
|
|
2543
|
-
useEffect4(() => {
|
|
2544
|
-
if (paginationModel.page > lastPage) {
|
|
2545
|
-
setPaginationModel({ ...paginationModel, page: lastPage });
|
|
2546
|
-
}
|
|
2547
|
-
}, [rowCount, paginationModel, lastPage, setPaginationModel]);
|
|
2548
|
-
return /* @__PURE__ */ React21.createElement(PaginationRoot, { ...innerProps }, /* @__PURE__ */ React21.createElement(PaginationContainer, { direction: "row", size, alignItems: "center" }, /* @__PURE__ */ React21.createElement(
|
|
2549
|
-
PaginationIconButton,
|
|
2550
|
-
{
|
|
2551
|
-
size,
|
|
2552
|
-
variant: "plain",
|
|
2553
|
-
color: "neutral",
|
|
2554
|
-
onClick: () => handlePageChange(paginationModel.page - 1),
|
|
2555
|
-
disabled: paginationModel.page === firstPage,
|
|
2556
|
-
"aria-label": "Previous page"
|
|
2557
|
-
},
|
|
2558
|
-
/* @__PURE__ */ React21.createElement(PreviousIcon, null)
|
|
2559
|
-
), paginationModel.page !== firstPage && /* @__PURE__ */ React21.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(firstPage) }, firstPage), isMoreBeforePages && /* @__PURE__ */ React21.createElement(
|
|
2560
|
-
PaginationButton,
|
|
2561
|
-
{
|
|
2562
|
-
size,
|
|
2563
|
-
variant: "plain",
|
|
2564
|
-
color: "neutral",
|
|
2565
|
-
onClick: () => handlePageChange(paginationModel.page - 3),
|
|
2566
|
-
"aria-label": "More previous pages"
|
|
2567
|
-
},
|
|
2568
|
-
"..."
|
|
2569
|
-
), beforePages.map((p) => /* @__PURE__ */ React21.createElement(PaginationButton, { key: p, size, variant: "plain", color: "neutral", onClick: () => handlePageChange(p) }, p)), /* @__PURE__ */ React21.createElement(PaginationButton, { active: "active", 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(
|
|
2570
|
-
PaginationButton,
|
|
2571
|
-
{
|
|
2572
|
-
size,
|
|
2573
|
-
variant: "plain",
|
|
2574
|
-
color: "neutral",
|
|
2575
|
-
"aria-label": "More next pages",
|
|
2576
|
-
onClick: () => handlePageChange(paginationModel.page + 3)
|
|
2577
|
-
},
|
|
2578
|
-
"..."
|
|
2579
|
-
), paginationModel.page !== lastPage && /* @__PURE__ */ React21.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(lastPage) }, lastPage), /* @__PURE__ */ React21.createElement(
|
|
2580
|
-
PaginationIconButton,
|
|
2581
|
-
{
|
|
2582
|
-
size,
|
|
2583
|
-
variant: "plain",
|
|
2584
|
-
color: "neutral",
|
|
2585
|
-
onClick: () => handlePageChange(paginationModel.page + 1),
|
|
2586
|
-
disabled: paginationModel.page === lastPage,
|
|
2587
|
-
"aria-label": "Next page"
|
|
2588
|
-
},
|
|
2589
|
-
/* @__PURE__ */ React21.createElement(NextIcon, null)
|
|
2590
|
-
)));
|
|
2591
|
-
}
|
|
2592
|
-
Pagination.displayName = "Pagination";
|
|
2593
|
-
|
|
2594
|
-
// src/components/Pagination/index.ts
|
|
2595
|
-
var Pagination_default = Pagination;
|
|
2596
|
-
|
|
2597
2645
|
// src/components/InfoSign/InfoSign.tsx
|
|
2598
|
-
import
|
|
2646
|
+
import React21 from "react";
|
|
2599
2647
|
import { styled as styled11, tooltipClasses } from "@mui/joy";
|
|
2600
2648
|
import MuiInfoIcon from "@mui/icons-material/Info";
|
|
2601
2649
|
var InfoIcon = styled11(MuiInfoIcon, {
|
|
@@ -2608,7 +2656,7 @@ var InfoIcon = styled11(MuiInfoIcon, {
|
|
|
2608
2656
|
}));
|
|
2609
2657
|
function InfoSign(props) {
|
|
2610
2658
|
const { message, placement } = props;
|
|
2611
|
-
return /* @__PURE__ */
|
|
2659
|
+
return /* @__PURE__ */ React21.createElement(
|
|
2612
2660
|
Tooltip_default,
|
|
2613
2661
|
{
|
|
2614
2662
|
arrow: true,
|
|
@@ -2618,28 +2666,16 @@ function InfoSign(props) {
|
|
|
2618
2666
|
maxWidth: "320px"
|
|
2619
2667
|
}
|
|
2620
2668
|
},
|
|
2621
|
-
title: message?.split("\n").map((line, i) => /* @__PURE__ */
|
|
2669
|
+
title: message?.split("\n").map((line, i) => /* @__PURE__ */ React21.createElement("div", { key: `info-sign-${i}` }, line))
|
|
2622
2670
|
},
|
|
2623
|
-
/* @__PURE__ */
|
|
2671
|
+
/* @__PURE__ */ React21.createElement(InfoIcon, null)
|
|
2624
2672
|
);
|
|
2625
2673
|
}
|
|
2626
2674
|
|
|
2627
2675
|
// src/components/InfoSign/index.ts
|
|
2628
|
-
var InfoSign_default = InfoSign;
|
|
2629
|
-
|
|
2630
|
-
// src/components/DataTable/
|
|
2631
|
-
function getTextAlign(props) {
|
|
2632
|
-
return !props.editMode && ["number", "date", "currency"].includes(props.type || "") ? "end" : "start";
|
|
2633
|
-
}
|
|
2634
|
-
var DefaultLoadingOverlay = () => /* @__PURE__ */ React23.createElement(LinearProgress, { value: 8, variant: "plain" });
|
|
2635
|
-
var EllipsisDiv = styled12("div", {
|
|
2636
|
-
name: "DataTable",
|
|
2637
|
-
slot: "textEllipsis"
|
|
2638
|
-
})({
|
|
2639
|
-
overflow: "hidden",
|
|
2640
|
-
textOverflow: "ellipsis",
|
|
2641
|
-
whiteSpace: "nowrap"
|
|
2642
|
-
});
|
|
2676
|
+
var InfoSign_default = InfoSign;
|
|
2677
|
+
|
|
2678
|
+
// src/components/DataTable/components.tsx
|
|
2643
2679
|
var TextEllipsis = ({ children }) => {
|
|
2644
2680
|
const textRef = useRef4(null);
|
|
2645
2681
|
const [showTooltip, setShowTooltip] = useState6(false);
|
|
@@ -2650,9 +2686,9 @@ var TextEllipsis = ({ children }) => {
|
|
|
2650
2686
|
setShowTooltip(isTextTruncated);
|
|
2651
2687
|
}
|
|
2652
2688
|
}, [children]);
|
|
2653
|
-
const content = /* @__PURE__ */
|
|
2689
|
+
const content = /* @__PURE__ */ React22.createElement(EllipsisDiv, { ref: textRef }, children);
|
|
2654
2690
|
if (showTooltip) {
|
|
2655
|
-
return /* @__PURE__ */
|
|
2691
|
+
return /* @__PURE__ */ React22.createElement(Tooltip_default, { title: children, placement: "top", onClick: (e) => e.stopPropagation() }, content);
|
|
2656
2692
|
}
|
|
2657
2693
|
return content;
|
|
2658
2694
|
};
|
|
@@ -2666,9 +2702,9 @@ var CellTextEllipsis = ({ children }) => {
|
|
|
2666
2702
|
setShowTooltip(isTextTruncated);
|
|
2667
2703
|
}
|
|
2668
2704
|
}, [children]);
|
|
2669
|
-
const content = /* @__PURE__ */
|
|
2705
|
+
const content = /* @__PURE__ */ React22.createElement(EllipsisDiv, { ref: textRef }, children);
|
|
2670
2706
|
if (showTooltip) {
|
|
2671
|
-
return /* @__PURE__ */
|
|
2707
|
+
return /* @__PURE__ */ React22.createElement(
|
|
2672
2708
|
Tooltip_default,
|
|
2673
2709
|
{
|
|
2674
2710
|
title: children,
|
|
@@ -2682,129 +2718,6 @@ var CellTextEllipsis = ({ children }) => {
|
|
|
2682
2718
|
}
|
|
2683
2719
|
return content;
|
|
2684
2720
|
};
|
|
2685
|
-
var OverlayWrapper = styled12("tr", {
|
|
2686
|
-
name: "DataTable",
|
|
2687
|
-
slot: "overlayWrapper"
|
|
2688
|
-
})({
|
|
2689
|
-
position: "sticky",
|
|
2690
|
-
top: `calc(var(--unstable_TableCell-height, 32px))`,
|
|
2691
|
-
left: 0,
|
|
2692
|
-
right: 0,
|
|
2693
|
-
zIndex: 1,
|
|
2694
|
-
"& > td": {
|
|
2695
|
-
height: 0,
|
|
2696
|
-
padding: 0,
|
|
2697
|
-
border: "none !important"
|
|
2698
|
-
}
|
|
2699
|
-
});
|
|
2700
|
-
var numberFormatter = (value) => "Intl" in window ? new Intl.NumberFormat().format(value) : value;
|
|
2701
|
-
var Resizer = (ref) => /* @__PURE__ */ React23.createElement(
|
|
2702
|
-
Box_default,
|
|
2703
|
-
{
|
|
2704
|
-
sx: {
|
|
2705
|
-
position: "absolute",
|
|
2706
|
-
top: 0,
|
|
2707
|
-
right: 0,
|
|
2708
|
-
bottom: 0,
|
|
2709
|
-
width: "4px",
|
|
2710
|
-
cursor: "col-resize"
|
|
2711
|
-
},
|
|
2712
|
-
onClick: (e) => e.stopPropagation(),
|
|
2713
|
-
onMouseDown: (e) => {
|
|
2714
|
-
const initialX = e.clientX;
|
|
2715
|
-
const initialWidth = ref.current?.getBoundingClientRect().width;
|
|
2716
|
-
const onMouseMove = (e2) => {
|
|
2717
|
-
if (initialWidth && initialX) {
|
|
2718
|
-
ref.current.style.width = `${initialWidth + (e2.clientX - initialX)}px`;
|
|
2719
|
-
}
|
|
2720
|
-
};
|
|
2721
|
-
const onMouseUp = () => {
|
|
2722
|
-
document.removeEventListener("mousemove", onMouseMove);
|
|
2723
|
-
document.removeEventListener("mouseup", onMouseUp);
|
|
2724
|
-
};
|
|
2725
|
-
document.addEventListener("mousemove", onMouseMove);
|
|
2726
|
-
document.addEventListener("mouseup", onMouseUp);
|
|
2727
|
-
}
|
|
2728
|
-
}
|
|
2729
|
-
);
|
|
2730
|
-
var VirtualizedTableBody = styled12("tbody", {
|
|
2731
|
-
name: "DataTable",
|
|
2732
|
-
slot: "tableBody"
|
|
2733
|
-
})({
|
|
2734
|
-
// HACK: for virtualization: tbody의 height를 렌더링 된 tr의 총 높이 보다 높은 값으로 지정하고도 tr의 size를 유지하기 위한 꼼수
|
|
2735
|
-
"&::after": {
|
|
2736
|
-
content: "''",
|
|
2737
|
-
display: "block",
|
|
2738
|
-
height: "0.01em"
|
|
2739
|
-
},
|
|
2740
|
-
// NOTE: 테이블 안에 버튼을 넣을 때 버튼의 높이가 테이블의 높이를 넘어가지 않도록 설정
|
|
2741
|
-
[`& .${buttonClasses.root}`]: {
|
|
2742
|
-
"--Button-minHeight": "26px",
|
|
2743
|
-
"--Button-paddingBlock": "0.25rem",
|
|
2744
|
-
lineHeight: 1,
|
|
2745
|
-
marginTop: "-2px",
|
|
2746
|
-
marginBottom: "-2px"
|
|
2747
|
-
},
|
|
2748
|
-
[`& .${iconButtonClasses.root}`]: {
|
|
2749
|
-
"--IconButton-size": "26px",
|
|
2750
|
-
verticalAlign: "middle",
|
|
2751
|
-
marginTop: "-2px",
|
|
2752
|
-
marginBottom: "-2px"
|
|
2753
|
-
}
|
|
2754
|
-
});
|
|
2755
|
-
var StyledTableRow = styled12("tr", {
|
|
2756
|
-
name: "DataTable",
|
|
2757
|
-
slot: "tableRow",
|
|
2758
|
-
shouldForwardProp: (prop) => prop !== "striped"
|
|
2759
|
-
})(({ striped }) => ({
|
|
2760
|
-
...striped && {
|
|
2761
|
-
backgroundColor: "var(--TableRow-stripeBackground, var(--ceed-palette-background-level2))",
|
|
2762
|
-
color: "var(--ceed-palette-text-primary)",
|
|
2763
|
-
"& td": {
|
|
2764
|
-
backgroundColor: "background.surface"
|
|
2765
|
-
}
|
|
2766
|
-
},
|
|
2767
|
-
"&:hover": {
|
|
2768
|
-
backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))",
|
|
2769
|
-
"& td": {
|
|
2770
|
-
backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))"
|
|
2771
|
-
}
|
|
2772
|
-
}
|
|
2773
|
-
}));
|
|
2774
|
-
var VirtualizedTableRow = memo(StyledTableRow, (prevProps, nextProps) => {
|
|
2775
|
-
return prevProps.striped === nextProps.striped && prevProps.style?.height === nextProps.style?.height && prevProps.style?.transform === nextProps.style?.transform && // @ts-ignore
|
|
2776
|
-
prevProps["data-row-id"] === nextProps["data-row-id"] && // @ts-ignore
|
|
2777
|
-
prevProps["data-index"] === nextProps["data-index"] && prevProps.tabIndex === nextProps.tabIndex && prevProps["aria-checked"] === nextProps["aria-checked"] && // Include children check to handle isCellEditable changes
|
|
2778
|
-
prevProps.children === nextProps.children;
|
|
2779
|
-
});
|
|
2780
|
-
var Asterisk = styled12("span", {
|
|
2781
|
-
name: "DataTable",
|
|
2782
|
-
slot: "headCellAsterisk"
|
|
2783
|
-
})(({ theme }) => ({
|
|
2784
|
-
color: "var(--ceed-palette-danger-500)",
|
|
2785
|
-
marginLeft: theme.spacing(0.5)
|
|
2786
|
-
}));
|
|
2787
|
-
var StyledTh = styled12(motion21.th)(({ theme }) => ({
|
|
2788
|
-
boxShadow: "1px 0 var(--TableCell-borderColor)"
|
|
2789
|
-
// border 대신 box-shadow를 사용하여 stickyHeader와 함께 사용할 때 border가 겹치는 문제를 해결
|
|
2790
|
-
}));
|
|
2791
|
-
var StyledTd = styled12("td")(({ theme }) => ({
|
|
2792
|
-
transition: `box-shadow 0.3s`,
|
|
2793
|
-
"&:not(.is-last-left):not(.is-last-right)": {
|
|
2794
|
-
boxShadow: "1px 0 var(--TableCell-borderColor)"
|
|
2795
|
-
},
|
|
2796
|
-
".ScrollableRight &": {
|
|
2797
|
-
"&.is-last-left": {
|
|
2798
|
-
boxShadow: `1px 0 var(--TableCell-borderColor), ${theme.shadow.md}`
|
|
2799
|
-
}
|
|
2800
|
-
},
|
|
2801
|
-
".ScrollableLeft &": {
|
|
2802
|
-
"&.is-last-right": {
|
|
2803
|
-
boxShadow: `1px 0 var(--TableCell-borderColor), ${theme.shadow.md}`
|
|
2804
|
-
}
|
|
2805
|
-
}
|
|
2806
|
-
}));
|
|
2807
|
-
var MotionSortIcon = motion21(SortIcon);
|
|
2808
2721
|
var HeadCell = (props) => {
|
|
2809
2722
|
const {
|
|
2810
2723
|
width,
|
|
@@ -2826,17 +2739,20 @@ var HeadCell = (props) => {
|
|
|
2826
2739
|
isPinned,
|
|
2827
2740
|
pinnedStartPosition,
|
|
2828
2741
|
pinnedEndPosition,
|
|
2829
|
-
headerRef
|
|
2742
|
+
headerRef,
|
|
2743
|
+
tableColRef,
|
|
2744
|
+
headerClassName
|
|
2830
2745
|
} = props;
|
|
2831
2746
|
const theme = useTheme();
|
|
2832
2747
|
const ref = headerRef;
|
|
2748
|
+
const colRef = tableColRef;
|
|
2833
2749
|
const [isHovered, setIsHovered] = useState6(false);
|
|
2834
2750
|
const sortable = type === "actions" ? false : _sortable;
|
|
2835
2751
|
const headId = useMemo8(
|
|
2836
2752
|
() => `${tableId}_header_${headerName ?? field}`.trim(),
|
|
2837
2753
|
[tableId, headerName, field]
|
|
2838
2754
|
);
|
|
2839
|
-
const resizer = useMemo8(() => resizable ?? true ? Resizer(ref) : null, [resizable, ref]);
|
|
2755
|
+
const resizer = useMemo8(() => resizable ?? true ? Resizer(ref, colRef) : null, [resizable, ref, colRef]);
|
|
2840
2756
|
const style = useMemo8(
|
|
2841
2757
|
() => ({
|
|
2842
2758
|
width,
|
|
@@ -2858,7 +2774,7 @@ var HeadCell = (props) => {
|
|
|
2858
2774
|
const sortIcon = useMemo8(() => {
|
|
2859
2775
|
const isSorted = !!sort;
|
|
2860
2776
|
const isVisible = sortable && (isSorted || isHovered);
|
|
2861
|
-
return /* @__PURE__ */
|
|
2777
|
+
return /* @__PURE__ */ React22.createElement(AnimatePresence2, { mode: "wait" }, isVisible && /* @__PURE__ */ React22.createElement(
|
|
2862
2778
|
MotionSortIcon,
|
|
2863
2779
|
{
|
|
2864
2780
|
key: "sort-icon",
|
|
@@ -2887,10 +2803,20 @@ var HeadCell = (props) => {
|
|
|
2887
2803
|
));
|
|
2888
2804
|
}, [headId, initialSort, sort, sortable, isHovered]);
|
|
2889
2805
|
const infoSign = useMemo8(
|
|
2890
|
-
() => description ? /* @__PURE__ */
|
|
2806
|
+
() => description ? /* @__PURE__ */ React22.createElement(InfoSign_default, { message: description, placement: "bottom" }) : null,
|
|
2891
2807
|
[description]
|
|
2892
2808
|
);
|
|
2893
|
-
|
|
2809
|
+
const params = useMemo8(
|
|
2810
|
+
() => ({
|
|
2811
|
+
field
|
|
2812
|
+
}),
|
|
2813
|
+
[field]
|
|
2814
|
+
);
|
|
2815
|
+
const computedHeaderClassName = useMemo8(
|
|
2816
|
+
() => (typeof headerClassName === "function" ? headerClassName(params) : headerClassName) || void 0,
|
|
2817
|
+
[headerClassName, params]
|
|
2818
|
+
);
|
|
2819
|
+
return /* @__PURE__ */ React22.createElement(
|
|
2894
2820
|
StyledTh,
|
|
2895
2821
|
{
|
|
2896
2822
|
id: headId,
|
|
@@ -2899,16 +2825,17 @@ var HeadCell = (props) => {
|
|
|
2899
2825
|
ref,
|
|
2900
2826
|
key: field,
|
|
2901
2827
|
style,
|
|
2902
|
-
onClick:
|
|
2828
|
+
onClick: useCallback8(
|
|
2903
2829
|
(e) => sortable && onSortChange?.({ field, currentSort: sort, multiple: e.shiftKey }),
|
|
2904
2830
|
[field, onSortChange, sort, sortable]
|
|
2905
2831
|
),
|
|
2906
2832
|
onMouseEnter: () => setIsHovered(true),
|
|
2907
2833
|
onMouseLeave: () => setIsHovered(false),
|
|
2908
2834
|
whileHover: "hover",
|
|
2909
|
-
initial: "initial"
|
|
2835
|
+
initial: "initial",
|
|
2836
|
+
className: computedHeaderClassName
|
|
2910
2837
|
},
|
|
2911
|
-
/* @__PURE__ */
|
|
2838
|
+
/* @__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),
|
|
2912
2839
|
resizer
|
|
2913
2840
|
);
|
|
2914
2841
|
};
|
|
@@ -3023,18 +2950,18 @@ var BodyCell = (props) => {
|
|
|
3023
2950
|
return createElement(memo(renderEditCell), params);
|
|
3024
2951
|
}
|
|
3025
2952
|
return {
|
|
3026
|
-
date: /* @__PURE__ */
|
|
3027
|
-
currency: /* @__PURE__ */
|
|
2953
|
+
date: /* @__PURE__ */ React22.createElement(DatePicker_default, { value, ...editModeComponentProps }),
|
|
2954
|
+
currency: /* @__PURE__ */ React22.createElement(
|
|
3028
2955
|
CurrencyInput_default,
|
|
3029
2956
|
{
|
|
3030
2957
|
value,
|
|
3031
2958
|
...editModeComponentProps
|
|
3032
2959
|
}
|
|
3033
2960
|
),
|
|
3034
|
-
number: /* @__PURE__ */
|
|
3035
|
-
text: /* @__PURE__ */
|
|
3036
|
-
longText: /* @__PURE__ */
|
|
3037
|
-
autocomplete: /* @__PURE__ */
|
|
2961
|
+
number: /* @__PURE__ */ React22.createElement(Input_default, { value, type: "number", ...editModeComponentProps }),
|
|
2962
|
+
text: /* @__PURE__ */ React22.createElement(Input_default, { value, type: "text", ...editModeComponentProps }),
|
|
2963
|
+
longText: /* @__PURE__ */ React22.createElement(Textarea_default, { value, ...editModeComponentProps }),
|
|
2964
|
+
autocomplete: /* @__PURE__ */ React22.createElement(
|
|
3038
2965
|
Autocomplete_default,
|
|
3039
2966
|
{
|
|
3040
2967
|
value,
|
|
@@ -3042,7 +2969,7 @@ var BodyCell = (props) => {
|
|
|
3042
2969
|
...editModeComponentProps
|
|
3043
2970
|
}
|
|
3044
2971
|
),
|
|
3045
|
-
select: /* @__PURE__ */
|
|
2972
|
+
select: /* @__PURE__ */ React22.createElement(
|
|
3046
2973
|
Select_default,
|
|
3047
2974
|
{
|
|
3048
2975
|
value,
|
|
@@ -3059,7 +2986,7 @@ var BodyCell = (props) => {
|
|
|
3059
2986
|
}
|
|
3060
2987
|
const innerText = value;
|
|
3061
2988
|
const typedComponent = {
|
|
3062
|
-
link:
|
|
2989
|
+
link: React22.createElement(linkComponentFromProps || Link, {
|
|
3063
2990
|
children: innerText,
|
|
3064
2991
|
...componentProps
|
|
3065
2992
|
})
|
|
@@ -3069,7 +2996,7 @@ var BodyCell = (props) => {
|
|
|
3069
2996
|
const getActions = props.getActions;
|
|
3070
2997
|
const CellComponent = useMemo8(() => {
|
|
3071
2998
|
if (type === "actions") {
|
|
3072
|
-
return /* @__PURE__ */
|
|
2999
|
+
return /* @__PURE__ */ React22.createElement(Stack_default, { direction: "row", gap: 1, justifyContent: "center", alignItems: "center" }, getActions?.(params));
|
|
3073
3000
|
}
|
|
3074
3001
|
return editMode && EditModeComponent ? EditModeComponent : ReadModeComponent;
|
|
3075
3002
|
}, [type, getActions, params, editMode, EditModeComponent, ReadModeComponent]);
|
|
@@ -3079,10 +3006,10 @@ var BodyCell = (props) => {
|
|
|
3079
3006
|
() => (typeof cellClassName === "function" ? cellClassName(params) : cellClassName) || "",
|
|
3080
3007
|
[cellClassName, params]
|
|
3081
3008
|
);
|
|
3082
|
-
|
|
3009
|
+
useEffect4(() => {
|
|
3083
3010
|
setValue(row[field]);
|
|
3084
3011
|
}, [row, field]);
|
|
3085
|
-
return /* @__PURE__ */
|
|
3012
|
+
return /* @__PURE__ */ React22.createElement(
|
|
3086
3013
|
StyledTd,
|
|
3087
3014
|
{
|
|
3088
3015
|
ref: cellRef,
|
|
@@ -3100,7 +3027,7 @@ var BodyCell = (props) => {
|
|
|
3100
3027
|
className: [isLastStartPinnedColumn && "is-last-left", isLastEndPinnedColumn && "is-last-right", computedCellClassName].filter(Boolean).join(" ") || ""
|
|
3101
3028
|
},
|
|
3102
3029
|
useMemo8(
|
|
3103
|
-
() => showTooltip ? /* @__PURE__ */
|
|
3030
|
+
() => showTooltip ? /* @__PURE__ */ React22.createElement(CellTextEllipsis, null, CellComponent) : CellComponent,
|
|
3104
3031
|
[CellComponent, showTooltip]
|
|
3105
3032
|
)
|
|
3106
3033
|
);
|
|
@@ -3108,7 +3035,7 @@ var BodyCell = (props) => {
|
|
|
3108
3035
|
var BodyRow = memo(
|
|
3109
3036
|
(props) => {
|
|
3110
3037
|
const { tableId, columns, rowId, editMode, noWrap, row } = props;
|
|
3111
|
-
return /* @__PURE__ */
|
|
3038
|
+
return /* @__PURE__ */ React22.createElement(React22.Fragment, null, columns.map((column, i) => /* @__PURE__ */ React22.createElement(
|
|
3112
3039
|
BodyCell,
|
|
3113
3040
|
{
|
|
3114
3041
|
key: `${rowId}_${column.field.toString()}_${i}`,
|
|
@@ -3122,10 +3049,38 @@ var BodyRow = memo(
|
|
|
3122
3049
|
)));
|
|
3123
3050
|
}
|
|
3124
3051
|
);
|
|
3052
|
+
var StyledTableRow2 = styled12("tr", {
|
|
3053
|
+
name: "DataTable",
|
|
3054
|
+
slot: "tableRow",
|
|
3055
|
+
shouldForwardProp: (prop) => prop !== "striped"
|
|
3056
|
+
})(({ striped }) => ({
|
|
3057
|
+
...striped && {
|
|
3058
|
+
backgroundColor: "var(--TableRow-stripeBackground, var(--ceed-palette-background-level2))",
|
|
3059
|
+
color: "var(--ceed-palette-text-primary)",
|
|
3060
|
+
"& td": {
|
|
3061
|
+
backgroundColor: "background.surface"
|
|
3062
|
+
}
|
|
3063
|
+
},
|
|
3064
|
+
"&:hover": {
|
|
3065
|
+
backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))",
|
|
3066
|
+
"& td": {
|
|
3067
|
+
backgroundColor: "var(--TableRow-hoverBackground, var(--ceed-palette-background-level3))"
|
|
3068
|
+
}
|
|
3069
|
+
}
|
|
3070
|
+
}));
|
|
3071
|
+
var VirtualizedTableRow = memo(StyledTableRow2, (prevProps, nextProps) => {
|
|
3072
|
+
return prevProps.striped === nextProps.striped && prevProps.style?.height === nextProps.style?.height && prevProps.style?.transform === nextProps.style?.transform && // @ts-ignore
|
|
3073
|
+
prevProps["data-row-id"] === nextProps["data-row-id"] && // @ts-ignore
|
|
3074
|
+
prevProps["data-index"] === nextProps["data-index"] && prevProps.tabIndex === nextProps.tabIndex && prevProps["aria-checked"] === nextProps["aria-checked"] && // Include children check to handle isCellEditable changes
|
|
3075
|
+
prevProps.children === nextProps.children;
|
|
3076
|
+
});
|
|
3077
|
+
|
|
3078
|
+
// src/components/DataTable/hooks.ts
|
|
3079
|
+
import { useState as useState7, useLayoutEffect as useLayoutEffect2, useRef as useRef5, useMemo as useMemo9, useCallback as useCallback9, useEffect as useEffect5, createRef } from "react";
|
|
3125
3080
|
function useColumnWidths(columnsByField) {
|
|
3126
|
-
const [widths, setWidths] =
|
|
3127
|
-
const roRef =
|
|
3128
|
-
|
|
3081
|
+
const [widths, setWidths] = useState7({});
|
|
3082
|
+
const roRef = useRef5();
|
|
3083
|
+
useLayoutEffect2(() => {
|
|
3129
3084
|
if (roRef.current) roRef.current.disconnect();
|
|
3130
3085
|
roRef.current = new ResizeObserver((entries) => {
|
|
3131
3086
|
let changed = false;
|
|
@@ -3171,28 +3126,39 @@ function useDataTableRenderer({
|
|
|
3171
3126
|
editMode,
|
|
3172
3127
|
getId: _getId,
|
|
3173
3128
|
isTotalSelected: _isTotalSelected,
|
|
3174
|
-
isRowSelectable
|
|
3129
|
+
isRowSelectable,
|
|
3130
|
+
columnGroupingModel
|
|
3175
3131
|
}) {
|
|
3176
|
-
|
|
3132
|
+
if (pinnedColumns && columnGroupingModel) {
|
|
3133
|
+
throw new Error(
|
|
3134
|
+
"You cannot use both `pinnedColumns` and `columnGroupingModel` at the same time. Please choose one of them."
|
|
3135
|
+
);
|
|
3136
|
+
}
|
|
3137
|
+
const onSelectionModelChangeRef = useRef5(onSelectionModelChange);
|
|
3177
3138
|
onSelectionModelChangeRef.current = onSelectionModelChange;
|
|
3178
|
-
const [focusedRowId, setFocusedRowId] =
|
|
3139
|
+
const [focusedRowId, setFocusedRowId] = useState7(null);
|
|
3179
3140
|
const [sortModel, setSortModel] = useControlledState(
|
|
3180
3141
|
controlledSortModel,
|
|
3181
3142
|
initialState?.sorting?.sortModel ?? [],
|
|
3182
3143
|
useCallback9((sortModel2) => onSortModelChange?.(sortModel2), [onSortModelChange])
|
|
3183
3144
|
);
|
|
3184
|
-
const
|
|
3185
|
-
()
|
|
3145
|
+
const reorderedColumns = useMemo9(() => {
|
|
3146
|
+
if (!columnGroupingModel) return columnsProp;
|
|
3147
|
+
return reorderColumnsByGroupingModel(columnsProp, columnGroupingModel);
|
|
3148
|
+
}, [columnsProp, columnGroupingModel]);
|
|
3149
|
+
const columnsByField = useMemo9(
|
|
3150
|
+
() => reorderedColumns.reduce(
|
|
3186
3151
|
(acc, curr) => ({
|
|
3187
3152
|
...acc,
|
|
3188
3153
|
[curr.field]: {
|
|
3189
3154
|
...curr,
|
|
3190
|
-
headerRef:
|
|
3155
|
+
headerRef: createRef(),
|
|
3156
|
+
tableColRef: createRef()
|
|
3191
3157
|
}
|
|
3192
3158
|
}),
|
|
3193
3159
|
{}
|
|
3194
3160
|
),
|
|
3195
|
-
[
|
|
3161
|
+
[reorderedColumns]
|
|
3196
3162
|
);
|
|
3197
3163
|
const sortComparator = useCallback9(
|
|
3198
3164
|
(rowA, rowB) => {
|
|
@@ -3222,47 +3188,42 @@ function useDataTableRenderer({
|
|
|
3222
3188
|
},
|
|
3223
3189
|
[sortModel, columnsByField]
|
|
3224
3190
|
);
|
|
3225
|
-
const rows =
|
|
3191
|
+
const rows = useMemo9(
|
|
3226
3192
|
() => sortModel.length ? [..._rows].sort(sortComparator) : _rows,
|
|
3227
3193
|
[_rows, sortModel, sortComparator]
|
|
3228
3194
|
);
|
|
3229
|
-
const sortOrder =
|
|
3230
|
-
// NOTE: default value를 props destructuring에서 할당하면 렌더링 시점에 초기화가 되어버린다.
|
|
3195
|
+
const sortOrder = useMemo9(
|
|
3231
3196
|
() => Array.from(new Set(_sortOrder || ["asc", "desc", null])),
|
|
3232
3197
|
[_sortOrder]
|
|
3233
3198
|
);
|
|
3234
|
-
const [page, setPage] =
|
|
3199
|
+
const [page, setPage] = useState7(paginationModel?.page || 1);
|
|
3235
3200
|
const pageSize = paginationModel?.pageSize || 20;
|
|
3236
3201
|
const getId = useCallback9(
|
|
3237
3202
|
(row, index) => _getId?.(row) ?? row.id ?? `${(index || 0) + (page - 1) * pageSize}`,
|
|
3238
3203
|
[_getId, page, pageSize]
|
|
3239
3204
|
);
|
|
3240
|
-
const selectedModelSet =
|
|
3241
|
-
|
|
3242
|
-
() => new Set(selectionModel || []),
|
|
3243
|
-
[selectionModel]
|
|
3244
|
-
);
|
|
3245
|
-
const dataInPage = useMemo8(
|
|
3205
|
+
const selectedModelSet = useMemo9(() => new Set(selectionModel || []), [selectionModel]);
|
|
3206
|
+
const dataInPage = useMemo9(
|
|
3246
3207
|
() => !pagination || paginationMode === "server" ? rows : rows.slice((page - 1) * pageSize, (page - 1) * pageSize + pageSize),
|
|
3247
3208
|
[rows, page, pageSize, paginationMode, pagination]
|
|
3248
3209
|
);
|
|
3249
|
-
const selectableDataInPage =
|
|
3210
|
+
const selectableDataInPage = useMemo9(
|
|
3250
3211
|
() => dataInPage.filter((row, i) => {
|
|
3251
3212
|
if (!isRowSelectable) return true;
|
|
3252
3213
|
return isRowSelectable({ row, id: getId(row, i) });
|
|
3253
3214
|
}),
|
|
3254
3215
|
[dataInPage, isRowSelectable, getId]
|
|
3255
3216
|
);
|
|
3256
|
-
const isAllSelected =
|
|
3217
|
+
const isAllSelected = useMemo9(
|
|
3257
3218
|
() => selectableDataInPage.length > 0 && selectableDataInPage.every((row, i) => selectedModelSet.has(getId(row, i))),
|
|
3258
3219
|
[selectableDataInPage, selectedModelSet, getId]
|
|
3259
3220
|
);
|
|
3260
3221
|
const rowCount = totalRowsProp || rows.length;
|
|
3261
|
-
const selectableRowCount =
|
|
3222
|
+
const selectableRowCount = useMemo9(() => {
|
|
3262
3223
|
if (!isRowSelectable) return rowCount;
|
|
3263
3224
|
return rows.filter((row, i) => isRowSelectable({ row, id: getId(row, i) })).length;
|
|
3264
3225
|
}, [rows, isRowSelectable, getId, rowCount]);
|
|
3265
|
-
const isTotalSelected =
|
|
3226
|
+
const isTotalSelected = useMemo9(
|
|
3266
3227
|
() => _isTotalSelected ?? (selectableRowCount > 0 && (selectionModel?.length || 0) === selectableRowCount),
|
|
3267
3228
|
[_isTotalSelected, selectionModel, selectableRowCount]
|
|
3268
3229
|
);
|
|
@@ -3272,9 +3233,12 @@ function useDataTableRenderer({
|
|
|
3272
3233
|
columnsByField[f].minWidth ?? 0,
|
|
3273
3234
|
[columnWidths, columnsByField]
|
|
3274
3235
|
);
|
|
3275
|
-
const
|
|
3276
|
-
|
|
3277
|
-
|
|
3236
|
+
const processedColumnGroups = useMemo9(() => {
|
|
3237
|
+
if (!columnGroupingModel) return null;
|
|
3238
|
+
return calculateColumnGroups(columnGroupingModel, reorderedColumns);
|
|
3239
|
+
}, [columnGroupingModel, reorderedColumns]);
|
|
3240
|
+
const columns = useMemo9(() => {
|
|
3241
|
+
const baseColumns = reorderedColumns.length > 0 ? reorderedColumns : Object.keys(rows[0] || {}).map((key) => ({
|
|
3278
3242
|
field: key
|
|
3279
3243
|
}));
|
|
3280
3244
|
return baseColumns.map((column) => {
|
|
@@ -3284,19 +3248,19 @@ function useDataTableRenderer({
|
|
|
3284
3248
|
return {
|
|
3285
3249
|
...column,
|
|
3286
3250
|
headerRef: columnsByField[column.field].headerRef,
|
|
3251
|
+
tableColRef: columnsByField[column.field].tableColRef,
|
|
3287
3252
|
isCellEditable: editMode && (typeof column.isCellEditable === "function" ? column.isCellEditable : column.isCellEditable ?? true),
|
|
3288
3253
|
sort: sortModel.find((sort) => sort.field === column.field)?.sort,
|
|
3289
3254
|
sortOrder: columnsByField[column.field]?.sortOrder || sortOrder,
|
|
3290
3255
|
isPinned,
|
|
3291
3256
|
isLastStartPinnedColumn: isLeftPinned && [...pinnedColumns?.left || []].pop() === column.field,
|
|
3292
3257
|
isLastEndPinnedColumn: isRightPinned && (pinnedColumns?.right?.[0] ?? null) === column.field,
|
|
3293
|
-
// pinned 관련 계산부
|
|
3294
3258
|
pinnedStartPosition: pinnedColumns?.left?.slice(0, isLeftPinned ? pinnedColumns.left.indexOf(column.field) : pinnedColumns.left.length).reduce((acc, curr) => acc + getWidth(curr), 0),
|
|
3295
3259
|
pinnedEndPosition: pinnedColumns?.right?.slice(isRightPinned ? pinnedColumns.right.indexOf(column.field) + 1 : 0).reduce((acc, curr) => acc + getWidth(curr), 0)
|
|
3296
3260
|
};
|
|
3297
3261
|
});
|
|
3298
3262
|
}, [
|
|
3299
|
-
|
|
3263
|
+
reorderedColumns,
|
|
3300
3264
|
rows,
|
|
3301
3265
|
pinnedColumns?.left,
|
|
3302
3266
|
pinnedColumns?.right,
|
|
@@ -3352,55 +3316,265 @@ function useDataTableRenderer({
|
|
|
3352
3316
|
}, [page]);
|
|
3353
3317
|
return {
|
|
3354
3318
|
rowCount,
|
|
3355
|
-
selectableRowCount,
|
|
3356
|
-
page,
|
|
3357
|
-
pageSize,
|
|
3358
|
-
onPaginationModelChange: handlePageChange,
|
|
3359
|
-
getId,
|
|
3360
|
-
HeadCell,
|
|
3361
|
-
BodyRow,
|
|
3362
|
-
dataInPage,
|
|
3363
|
-
handleSortChange,
|
|
3364
|
-
isAllSelected,
|
|
3365
|
-
|
|
3366
|
-
|
|
3367
|
-
|
|
3368
|
-
|
|
3369
|
-
|
|
3370
|
-
|
|
3371
|
-
|
|
3372
|
-
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
|
|
3381
|
-
|
|
3382
|
-
|
|
3383
|
-
|
|
3384
|
-
|
|
3385
|
-
|
|
3386
|
-
|
|
3387
|
-
|
|
3388
|
-
|
|
3389
|
-
|
|
3390
|
-
|
|
3319
|
+
selectableRowCount,
|
|
3320
|
+
page,
|
|
3321
|
+
pageSize,
|
|
3322
|
+
onPaginationModelChange: handlePageChange,
|
|
3323
|
+
getId,
|
|
3324
|
+
HeadCell,
|
|
3325
|
+
BodyRow,
|
|
3326
|
+
dataInPage,
|
|
3327
|
+
handleSortChange,
|
|
3328
|
+
isAllSelected,
|
|
3329
|
+
isTotalSelected,
|
|
3330
|
+
isSelectedRow: useCallback9((model) => selectedModelSet.has(model), [selectedModelSet]),
|
|
3331
|
+
isRowSelectable: useCallback9(
|
|
3332
|
+
(rowId, row) => {
|
|
3333
|
+
if (!isRowSelectable) return true;
|
|
3334
|
+
return isRowSelectable({ row, id: rowId });
|
|
3335
|
+
},
|
|
3336
|
+
[isRowSelectable]
|
|
3337
|
+
),
|
|
3338
|
+
focusedRowId,
|
|
3339
|
+
onRowFocus: useCallback9((rowId) => {
|
|
3340
|
+
setFocusedRowId(rowId);
|
|
3341
|
+
}, []),
|
|
3342
|
+
onAllCheckboxChange: useCallback9(() => {
|
|
3343
|
+
onSelectionModelChange?.(isAllSelected ? [] : selectableDataInPage.map(getId));
|
|
3344
|
+
}, [isAllSelected, selectableDataInPage, onSelectionModelChange, getId]),
|
|
3345
|
+
onCheckboxChange: useCallback9(
|
|
3346
|
+
(event, selectedModel) => {
|
|
3347
|
+
if (selectedModelSet.has(selectedModel)) {
|
|
3348
|
+
const newSelectionModel = (selectionModel || []).filter((model) => model !== selectedModel);
|
|
3349
|
+
onSelectionModelChange?.(newSelectionModel);
|
|
3350
|
+
} else {
|
|
3351
|
+
const newSelectionModel = [...selectionModel || [], selectedModel];
|
|
3352
|
+
onSelectionModelChange?.(newSelectionModel);
|
|
3353
|
+
}
|
|
3354
|
+
},
|
|
3355
|
+
[selectionModel, onSelectionModelChange, selectedModelSet]
|
|
3356
|
+
),
|
|
3357
|
+
columns,
|
|
3358
|
+
processedColumnGroups,
|
|
3359
|
+
onTotalSelect: useCallback9(() => {
|
|
3360
|
+
const selectableRows = rows.filter((row, i) => {
|
|
3361
|
+
if (!isRowSelectable) return true;
|
|
3362
|
+
return isRowSelectable({ row, id: getId(row, i) });
|
|
3363
|
+
});
|
|
3364
|
+
onSelectionModelChange?.(isTotalSelected ? [] : selectableRows.map(getId), !isTotalSelected);
|
|
3365
|
+
}, [isTotalSelected, rows, onSelectionModelChange, getId, isRowSelectable])
|
|
3366
|
+
};
|
|
3367
|
+
}
|
|
3368
|
+
|
|
3369
|
+
// src/components/Table/Table.tsx
|
|
3370
|
+
import React23 from "react";
|
|
3371
|
+
import { Table as JoyTable } from "@mui/joy";
|
|
3372
|
+
var Table = (props) => {
|
|
3373
|
+
const { children, ...inheritProps } = props;
|
|
3374
|
+
return /* @__PURE__ */ React23.createElement(JoyTable, { ...inheritProps }, children);
|
|
3375
|
+
};
|
|
3376
|
+
Table.displayName = "Table";
|
|
3377
|
+
function TableHead(props) {
|
|
3378
|
+
const {
|
|
3379
|
+
headCells,
|
|
3380
|
+
showCheckbox,
|
|
3381
|
+
onCheckboxChange,
|
|
3382
|
+
slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
|
|
3383
|
+
slotProps: { checkbox: checkboxProps = {} } = {}
|
|
3384
|
+
} = props;
|
|
3385
|
+
return /* @__PURE__ */ React23.createElement("thead", null, /* @__PURE__ */ React23.createElement("tr", null, showCheckbox && /* @__PURE__ */ React23.createElement(
|
|
3386
|
+
"th",
|
|
3387
|
+
{
|
|
3388
|
+
style: {
|
|
3389
|
+
width: "40px",
|
|
3390
|
+
textAlign: "center"
|
|
3391
|
+
}
|
|
3392
|
+
},
|
|
3393
|
+
/* @__PURE__ */ React23.createElement(RenderCheckbox, { onChange: onCheckboxChange, ...checkboxProps })
|
|
3394
|
+
), headCells.map((headCell) => /* @__PURE__ */ React23.createElement(
|
|
3395
|
+
"th",
|
|
3396
|
+
{
|
|
3397
|
+
key: headCell.label,
|
|
3398
|
+
style: {
|
|
3399
|
+
width: headCell.width,
|
|
3400
|
+
minWidth: headCell.minWidth,
|
|
3401
|
+
maxWidth: headCell.maxWidth,
|
|
3402
|
+
textAlign: headCell.numeric ? "right" : "left"
|
|
3403
|
+
}
|
|
3404
|
+
},
|
|
3405
|
+
headCell.label
|
|
3406
|
+
))));
|
|
3407
|
+
}
|
|
3408
|
+
TableHead.displayName = "TableHead";
|
|
3409
|
+
function TableBody(props) {
|
|
3410
|
+
const {
|
|
3411
|
+
rows,
|
|
3412
|
+
cellOrder,
|
|
3413
|
+
rowOptions,
|
|
3414
|
+
showCheckbox,
|
|
3415
|
+
onCheckboxChange,
|
|
3416
|
+
slots: { checkbox: RenderCheckbox = Checkbox_default } = {},
|
|
3417
|
+
slotProps: { checkbox: checkboxProps = {} } = {}
|
|
3418
|
+
} = props;
|
|
3419
|
+
return /* @__PURE__ */ React23.createElement("tbody", null, rows.map((row, rowIndex) => /* @__PURE__ */ React23.createElement("tr", { key: `table-row-${rowIndex}` }, showCheckbox && /* @__PURE__ */ React23.createElement(
|
|
3420
|
+
"td",
|
|
3421
|
+
{
|
|
3422
|
+
style: {
|
|
3423
|
+
textAlign: "center"
|
|
3424
|
+
}
|
|
3425
|
+
},
|
|
3426
|
+
/* @__PURE__ */ React23.createElement(RenderCheckbox, { onChange: (event) => onCheckboxChange?.(event, rowIndex), ...checkboxProps })
|
|
3427
|
+
), cellOrder.map((cellKey) => /* @__PURE__ */ React23.createElement(
|
|
3428
|
+
"td",
|
|
3429
|
+
{
|
|
3430
|
+
key: cellKey,
|
|
3431
|
+
style: {
|
|
3432
|
+
textAlign: rowOptions?.[cellKey]?.numeric ? "right" : "left"
|
|
3433
|
+
}
|
|
3434
|
+
},
|
|
3435
|
+
row[cellKey]
|
|
3436
|
+
)))));
|
|
3437
|
+
}
|
|
3438
|
+
TableBody.displayName = "TableBody";
|
|
3439
|
+
|
|
3440
|
+
// src/components/Pagination/Pagination.tsx
|
|
3441
|
+
import React24, { useCallback as useCallback10, useEffect as useEffect6 } from "react";
|
|
3442
|
+
import PreviousIcon from "@mui/icons-material/ChevronLeft";
|
|
3443
|
+
import NextIcon from "@mui/icons-material/ChevronRight";
|
|
3444
|
+
import { styled as styled13 } from "@mui/joy";
|
|
3445
|
+
var PaginationButton = styled13(Button_default, {
|
|
3446
|
+
name: "Pagination",
|
|
3447
|
+
slot: "button"
|
|
3448
|
+
})(({ theme, active, size }) => ({
|
|
3449
|
+
"--Button-size": {
|
|
3450
|
+
sm: "32px",
|
|
3451
|
+
md: "40px",
|
|
3452
|
+
lg: "48px"
|
|
3453
|
+
}[size],
|
|
3454
|
+
width: "var(--Button-size)",
|
|
3455
|
+
height: "var(--Button-size)",
|
|
3456
|
+
backgroundColor: active ? theme.vars.palette.primary.softHoverBg : "transparent",
|
|
3457
|
+
color: active ? theme.vars.palette.primary.softColor : theme.vars.palette.neutral.plainColor,
|
|
3458
|
+
"&:hover": {
|
|
3459
|
+
color: active ? theme.vars.palette.primary.softColor : theme.vars.palette.neutral.softColor,
|
|
3460
|
+
backgroundColor: active ? theme.vars.palette.primary.softActiveBg : theme.vars.palette.neutral.softHoverBg
|
|
3461
|
+
}
|
|
3462
|
+
}));
|
|
3463
|
+
var PaginationIconButton = styled13(IconButton_default, {
|
|
3464
|
+
name: "Pagination",
|
|
3465
|
+
slot: "button"
|
|
3466
|
+
})(({ theme, size }) => ({
|
|
3467
|
+
"--IconButton-size": {
|
|
3468
|
+
sm: "32px",
|
|
3469
|
+
md: "40px",
|
|
3470
|
+
lg: "48px"
|
|
3471
|
+
}[size],
|
|
3472
|
+
"--Icon-fontSize": "20px",
|
|
3473
|
+
width: "var(--IconButton-size)",
|
|
3474
|
+
height: "var(--IconButton-size)",
|
|
3475
|
+
color: theme.vars.palette.neutral.plainColor,
|
|
3476
|
+
"&:hover": {
|
|
3477
|
+
color: theme.vars.palette.neutral.softColor,
|
|
3478
|
+
backgroundColor: theme.vars.palette.neutral.softHoverBg
|
|
3479
|
+
}
|
|
3480
|
+
}));
|
|
3481
|
+
var PaginationRoot = styled13(Stack_default, {
|
|
3482
|
+
name: "Pagination",
|
|
3483
|
+
slot: "root"
|
|
3484
|
+
})({});
|
|
3485
|
+
var PaginationContainer = styled13(Stack_default, {
|
|
3486
|
+
name: "Pagination",
|
|
3487
|
+
slot: "container"
|
|
3488
|
+
})(({ theme, size }) => ({
|
|
3489
|
+
gap: {
|
|
3490
|
+
sm: theme.spacing(1),
|
|
3491
|
+
md: theme.spacing(1.5),
|
|
3492
|
+
lg: theme.spacing(2)
|
|
3493
|
+
}[size]
|
|
3494
|
+
}));
|
|
3495
|
+
function Pagination(props) {
|
|
3496
|
+
const {
|
|
3497
|
+
paginationModel: _paginationModel,
|
|
3498
|
+
defaultPaginationModel = { page: 1, pageSize: 25 },
|
|
3499
|
+
onPageChange,
|
|
3500
|
+
rowCount,
|
|
3501
|
+
size = "md",
|
|
3502
|
+
...innerProps
|
|
3503
|
+
} = props;
|
|
3504
|
+
const [paginationModel, setPaginationModel] = useControlledState(
|
|
3505
|
+
_paginationModel,
|
|
3506
|
+
defaultPaginationModel,
|
|
3507
|
+
useCallback10(
|
|
3508
|
+
(newPage) => {
|
|
3509
|
+
onPageChange(newPage.page);
|
|
3391
3510
|
},
|
|
3392
|
-
[
|
|
3393
|
-
)
|
|
3394
|
-
|
|
3395
|
-
|
|
3396
|
-
|
|
3397
|
-
if (!isRowSelectable) return true;
|
|
3398
|
-
return isRowSelectable({ row, id: getId(row, i) });
|
|
3399
|
-
});
|
|
3400
|
-
onSelectionModelChange?.(isTotalSelected ? [] : selectableRows.map(getId), !isTotalSelected);
|
|
3401
|
-
}, [isTotalSelected, rows, onSelectionModelChange, getId, isRowSelectable])
|
|
3511
|
+
[onPageChange]
|
|
3512
|
+
)
|
|
3513
|
+
);
|
|
3514
|
+
const handlePageChange = (newPage) => {
|
|
3515
|
+
setPaginationModel({ ...paginationModel, page: newPage });
|
|
3402
3516
|
};
|
|
3517
|
+
const firstPage = 1;
|
|
3518
|
+
const lastPage = Math.max(firstPage, Math.ceil(rowCount / paginationModel.pageSize));
|
|
3519
|
+
const beforePages = [paginationModel.page - 2, paginationModel.page - 1].filter((p) => p > 1);
|
|
3520
|
+
const afterPages = [paginationModel.page + 1, paginationModel.page + 2].filter((p) => p <= lastPage - 1);
|
|
3521
|
+
const isMoreAfterPages = lastPage > 1 && paginationModel.page < lastPage - 3;
|
|
3522
|
+
const isMoreBeforePages = lastPage > 1 && paginationModel.page > 4;
|
|
3523
|
+
useEffect6(() => {
|
|
3524
|
+
if (paginationModel.page > lastPage) {
|
|
3525
|
+
setPaginationModel({ ...paginationModel, page: lastPage });
|
|
3526
|
+
}
|
|
3527
|
+
}, [rowCount, paginationModel, lastPage, setPaginationModel]);
|
|
3528
|
+
return /* @__PURE__ */ React24.createElement(PaginationRoot, { ...innerProps }, /* @__PURE__ */ React24.createElement(PaginationContainer, { direction: "row", size, alignItems: "center" }, /* @__PURE__ */ React24.createElement(
|
|
3529
|
+
PaginationIconButton,
|
|
3530
|
+
{
|
|
3531
|
+
size,
|
|
3532
|
+
variant: "plain",
|
|
3533
|
+
color: "neutral",
|
|
3534
|
+
onClick: () => handlePageChange(paginationModel.page - 1),
|
|
3535
|
+
disabled: paginationModel.page === firstPage,
|
|
3536
|
+
"aria-label": "Previous page"
|
|
3537
|
+
},
|
|
3538
|
+
/* @__PURE__ */ React24.createElement(PreviousIcon, null)
|
|
3539
|
+
), paginationModel.page !== firstPage && /* @__PURE__ */ React24.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(firstPage) }, firstPage), isMoreBeforePages && /* @__PURE__ */ React24.createElement(
|
|
3540
|
+
PaginationButton,
|
|
3541
|
+
{
|
|
3542
|
+
size,
|
|
3543
|
+
variant: "plain",
|
|
3544
|
+
color: "neutral",
|
|
3545
|
+
onClick: () => handlePageChange(paginationModel.page - 3),
|
|
3546
|
+
"aria-label": "More previous pages"
|
|
3547
|
+
},
|
|
3548
|
+
"..."
|
|
3549
|
+
), beforePages.map((p) => /* @__PURE__ */ React24.createElement(PaginationButton, { key: p, size, variant: "plain", color: "neutral", onClick: () => handlePageChange(p) }, p)), /* @__PURE__ */ React24.createElement(PaginationButton, { active: "active", 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(
|
|
3550
|
+
PaginationButton,
|
|
3551
|
+
{
|
|
3552
|
+
size,
|
|
3553
|
+
variant: "plain",
|
|
3554
|
+
color: "neutral",
|
|
3555
|
+
"aria-label": "More next pages",
|
|
3556
|
+
onClick: () => handlePageChange(paginationModel.page + 3)
|
|
3557
|
+
},
|
|
3558
|
+
"..."
|
|
3559
|
+
), paginationModel.page !== lastPage && /* @__PURE__ */ React24.createElement(PaginationButton, { size, variant: "plain", color: "neutral", onClick: () => handlePageChange(lastPage) }, lastPage), /* @__PURE__ */ React24.createElement(
|
|
3560
|
+
PaginationIconButton,
|
|
3561
|
+
{
|
|
3562
|
+
size,
|
|
3563
|
+
variant: "plain",
|
|
3564
|
+
color: "neutral",
|
|
3565
|
+
onClick: () => handlePageChange(paginationModel.page + 1),
|
|
3566
|
+
disabled: paginationModel.page === lastPage,
|
|
3567
|
+
"aria-label": "Next page"
|
|
3568
|
+
},
|
|
3569
|
+
/* @__PURE__ */ React24.createElement(NextIcon, null)
|
|
3570
|
+
)));
|
|
3403
3571
|
}
|
|
3572
|
+
Pagination.displayName = "Pagination";
|
|
3573
|
+
|
|
3574
|
+
// src/components/Pagination/index.ts
|
|
3575
|
+
var Pagination_default = Pagination;
|
|
3576
|
+
|
|
3577
|
+
// src/components/DataTable/DataTable.tsx
|
|
3404
3578
|
function Component(props, apiRef) {
|
|
3405
3579
|
const {
|
|
3406
3580
|
rows,
|
|
@@ -3434,6 +3608,8 @@ function Component(props, apiRef) {
|
|
|
3434
3608
|
getId: ____________,
|
|
3435
3609
|
// getId is used in useDataTableRenderer
|
|
3436
3610
|
loading,
|
|
3611
|
+
columnGroupingModel: _________________,
|
|
3612
|
+
// columnGroupingModel is used in useDataTableRenderer
|
|
3437
3613
|
slots: {
|
|
3438
3614
|
checkbox: RenderCheckbox = Checkbox_default,
|
|
3439
3615
|
toolbar: Toolbar,
|
|
@@ -3446,10 +3622,11 @@ function Component(props, apiRef) {
|
|
|
3446
3622
|
...innerProps
|
|
3447
3623
|
} = props;
|
|
3448
3624
|
const tableId = useId();
|
|
3449
|
-
const parentRef =
|
|
3450
|
-
const tableBodyRef =
|
|
3625
|
+
const parentRef = useRef6(null);
|
|
3626
|
+
const tableBodyRef = useRef6(null);
|
|
3451
3627
|
const {
|
|
3452
3628
|
columns,
|
|
3629
|
+
processedColumnGroups,
|
|
3453
3630
|
isAllSelected,
|
|
3454
3631
|
isSelectedRow,
|
|
3455
3632
|
isRowSelectable: isRowSelectableCheck,
|
|
@@ -3477,29 +3654,29 @@ function Component(props, apiRef) {
|
|
|
3477
3654
|
measureElement: (element) => element.clientHeight,
|
|
3478
3655
|
overscan: 10
|
|
3479
3656
|
});
|
|
3480
|
-
const paginationModel =
|
|
3657
|
+
const paginationModel = useMemo10(() => ({ page, pageSize }), [page, pageSize]);
|
|
3481
3658
|
const totalSize = virtualizer.getTotalSize();
|
|
3482
3659
|
const virtualizedItems = virtualizer.getVirtualItems();
|
|
3483
|
-
const getRowClickHandler =
|
|
3660
|
+
const getRowClickHandler = useCallback11(
|
|
3484
3661
|
(row, rowId) => (e) => {
|
|
3485
3662
|
onRowClick?.({ row, rowId }, e);
|
|
3486
3663
|
checkboxSelection && !disableSelectionOnClick && isRowSelectableCheck(rowId, row) && onCheckboxChange(e, rowId);
|
|
3487
3664
|
},
|
|
3488
3665
|
[onRowClick, checkboxSelection, disableSelectionOnClick, onCheckboxChange, isRowSelectableCheck]
|
|
3489
3666
|
);
|
|
3490
|
-
const getRowFocusHandler =
|
|
3667
|
+
const getRowFocusHandler = useCallback11(
|
|
3491
3668
|
(rowId) => () => {
|
|
3492
3669
|
onRowFocus(rowId);
|
|
3493
3670
|
},
|
|
3494
3671
|
[onRowFocus]
|
|
3495
3672
|
);
|
|
3496
|
-
const getCheckboxClickHandler =
|
|
3673
|
+
const getCheckboxClickHandler = useCallback11(
|
|
3497
3674
|
() => (e) => {
|
|
3498
3675
|
e.stopPropagation();
|
|
3499
3676
|
},
|
|
3500
3677
|
[]
|
|
3501
3678
|
);
|
|
3502
|
-
const getCheckboxChangeHandler =
|
|
3679
|
+
const getCheckboxChangeHandler = useCallback11(
|
|
3503
3680
|
(rowId, row) => (e) => {
|
|
3504
3681
|
if (isRowSelectableCheck(rowId, row)) {
|
|
3505
3682
|
onCheckboxChange(e, rowId);
|
|
@@ -3523,7 +3700,7 @@ function Component(props, apiRef) {
|
|
|
3523
3700
|
});
|
|
3524
3701
|
}
|
|
3525
3702
|
}));
|
|
3526
|
-
return /* @__PURE__ */
|
|
3703
|
+
return /* @__PURE__ */ React25.createElement(
|
|
3527
3704
|
Box_default,
|
|
3528
3705
|
{
|
|
3529
3706
|
sx: {
|
|
@@ -3533,7 +3710,7 @@ function Component(props, apiRef) {
|
|
|
3533
3710
|
flexDirection: "column"
|
|
3534
3711
|
}
|
|
3535
3712
|
},
|
|
3536
|
-
(!!checkboxSelection || !!Toolbar) && /* @__PURE__ */
|
|
3713
|
+
(!!checkboxSelection || !!Toolbar) && /* @__PURE__ */ React25.createElement(
|
|
3537
3714
|
Stack_default,
|
|
3538
3715
|
{
|
|
3539
3716
|
direction: "row",
|
|
@@ -3543,10 +3720,10 @@ function Component(props, apiRef) {
|
|
|
3543
3720
|
justifyContent: "space-between",
|
|
3544
3721
|
alignItems: "center"
|
|
3545
3722
|
},
|
|
3546
|
-
!!checkboxSelection && /* @__PURE__ */
|
|
3547
|
-
Toolbar && /* @__PURE__ */
|
|
3723
|
+
!!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"))),
|
|
3724
|
+
Toolbar && /* @__PURE__ */ React25.createElement(Toolbar, { ...toolbarProps || {} })
|
|
3548
3725
|
),
|
|
3549
|
-
/* @__PURE__ */
|
|
3726
|
+
/* @__PURE__ */ React25.createElement(
|
|
3550
3727
|
Sheet_default,
|
|
3551
3728
|
{
|
|
3552
3729
|
variant: "outlined",
|
|
@@ -3557,7 +3734,8 @@ function Component(props, apiRef) {
|
|
|
3557
3734
|
boxShadow: "sm",
|
|
3558
3735
|
borderRadius: "sm",
|
|
3559
3736
|
"--DataTableSheet-width": parentRef.current?.clientWidth + "px",
|
|
3560
|
-
backgroundColor: "white"
|
|
3737
|
+
backgroundColor: "white",
|
|
3738
|
+
"--TableCell-cornerRadius": "0px"
|
|
3561
3739
|
},
|
|
3562
3740
|
className: [
|
|
3563
3741
|
...(parentRef.current?.scrollLeft || 0) > 0 ? ["ScrollableRight"] : [],
|
|
@@ -3566,15 +3744,33 @@ function Component(props, apiRef) {
|
|
|
3566
3744
|
ref: parentRef,
|
|
3567
3745
|
...backgroundProps
|
|
3568
3746
|
},
|
|
3569
|
-
/* @__PURE__ */
|
|
3747
|
+
/* @__PURE__ */ React25.createElement(Table, { ...innerProps }, /* @__PURE__ */ React25.createElement("colgroup", null, checkboxSelection && /* @__PURE__ */ React25.createElement(
|
|
3748
|
+
"col",
|
|
3749
|
+
{
|
|
3750
|
+
style: {
|
|
3751
|
+
width: "40px"
|
|
3752
|
+
}
|
|
3753
|
+
}
|
|
3754
|
+
), columns.map((c) => /* @__PURE__ */ React25.createElement(
|
|
3755
|
+
"col",
|
|
3756
|
+
{
|
|
3757
|
+
ref: c.tableColRef,
|
|
3758
|
+
key: `${c.field.toString()}_${c.width}`,
|
|
3759
|
+
style: {
|
|
3760
|
+
width: c.width
|
|
3761
|
+
}
|
|
3762
|
+
}
|
|
3763
|
+
))), /* @__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(
|
|
3570
3764
|
"th",
|
|
3571
3765
|
{
|
|
3766
|
+
rowSpan: processedColumnGroups.maxLevel + 2,
|
|
3572
3767
|
style: {
|
|
3573
3768
|
width: "40px",
|
|
3574
|
-
textAlign: "center"
|
|
3769
|
+
textAlign: "center",
|
|
3770
|
+
verticalAlign: "middle"
|
|
3575
3771
|
}
|
|
3576
3772
|
},
|
|
3577
|
-
/* @__PURE__ */
|
|
3773
|
+
/* @__PURE__ */ React25.createElement(
|
|
3578
3774
|
RenderCheckbox,
|
|
3579
3775
|
{
|
|
3580
3776
|
onChange: onAllCheckboxChange,
|
|
@@ -3584,17 +3780,56 @@ function Component(props, apiRef) {
|
|
|
3584
3780
|
...checkboxProps
|
|
3585
3781
|
}
|
|
3586
3782
|
)
|
|
3587
|
-
),
|
|
3588
|
-
|
|
3783
|
+
), level > 0 && Array.from({ length: levelGroups[0]?.startIndex || 0 }).map((_2, i) => /* @__PURE__ */ React25.createElement("th", { key: `empty-${level}-${i}` })), levelGroups.map((group, groupIndex) => {
|
|
3784
|
+
const nextGroup = levelGroups[groupIndex + 1];
|
|
3785
|
+
const emptyCells = nextGroup ? nextGroup.startIndex - (group.startIndex + group.colspan) : columns.length - (group.startIndex + group.colspan);
|
|
3786
|
+
const params = { groupId: group.groupId };
|
|
3787
|
+
const computedHeaderClassName = group.headerClassName ? typeof group.headerClassName === "function" ? group.headerClassName(params) : group.headerClassName : void 0;
|
|
3788
|
+
return /* @__PURE__ */ React25.createElement(Fragment2, { key: group.groupId }, /* @__PURE__ */ React25.createElement(
|
|
3789
|
+
"th",
|
|
3790
|
+
{
|
|
3791
|
+
colSpan: group.colspan,
|
|
3792
|
+
style: {
|
|
3793
|
+
textAlign: "center",
|
|
3794
|
+
fontWeight: "bold",
|
|
3795
|
+
verticalAlign: "middle"
|
|
3796
|
+
},
|
|
3797
|
+
className: computedHeaderClassName
|
|
3798
|
+
},
|
|
3799
|
+
group.headerName ?? group.groupId
|
|
3800
|
+
), emptyCells > 0 && Array.from({ length: emptyCells }).map((_2, i) => /* @__PURE__ */ React25.createElement("th", { key: `empty-between-${level}-${groupIndex}-${i}`, colSpan: 1 })));
|
|
3801
|
+
}))), /* @__PURE__ */ React25.createElement("tr", null, !processedColumnGroups && checkboxSelection && /* @__PURE__ */ React25.createElement(
|
|
3802
|
+
"th",
|
|
3589
3803
|
{
|
|
3590
|
-
|
|
3591
|
-
|
|
3592
|
-
|
|
3593
|
-
|
|
3594
|
-
|
|
3595
|
-
|
|
3596
|
-
|
|
3597
|
-
|
|
3804
|
+
style: {
|
|
3805
|
+
width: "40px",
|
|
3806
|
+
textAlign: "center"
|
|
3807
|
+
}
|
|
3808
|
+
},
|
|
3809
|
+
/* @__PURE__ */ React25.createElement(
|
|
3810
|
+
RenderCheckbox,
|
|
3811
|
+
{
|
|
3812
|
+
onChange: onAllCheckboxChange,
|
|
3813
|
+
checked: isAllSelected,
|
|
3814
|
+
indeterminate: (selectionModel || []).length > 0 && !isAllSelected,
|
|
3815
|
+
disabled: dataInPage.length > 0 && !selectableRowCount,
|
|
3816
|
+
...checkboxProps
|
|
3817
|
+
}
|
|
3818
|
+
)
|
|
3819
|
+
), columns.map((c, i) => (
|
|
3820
|
+
// @ts-ignore
|
|
3821
|
+
/* @__PURE__ */ React25.createElement(
|
|
3822
|
+
HeadCell2,
|
|
3823
|
+
{
|
|
3824
|
+
tableId,
|
|
3825
|
+
key: `${c.field.toString()}_${i}`,
|
|
3826
|
+
stickyHeader: props.stickyHeader,
|
|
3827
|
+
editMode: !!c.isCellEditable,
|
|
3828
|
+
onSortChange: handleSortChange,
|
|
3829
|
+
...c
|
|
3830
|
+
}
|
|
3831
|
+
)
|
|
3832
|
+
)))), /* @__PURE__ */ React25.createElement(
|
|
3598
3833
|
VirtualizedTableBody,
|
|
3599
3834
|
{
|
|
3600
3835
|
ref: tableBodyRef,
|
|
@@ -3604,7 +3839,7 @@ function Component(props, apiRef) {
|
|
|
3604
3839
|
role: "rowgroup",
|
|
3605
3840
|
"aria-label": "DataTableBody"
|
|
3606
3841
|
},
|
|
3607
|
-
!!loading && /* @__PURE__ */
|
|
3842
|
+
!!loading && /* @__PURE__ */ React25.createElement(OverlayWrapper, null, /* @__PURE__ */ React25.createElement(
|
|
3608
3843
|
"td",
|
|
3609
3844
|
{
|
|
3610
3845
|
style: {
|
|
@@ -3613,7 +3848,7 @@ function Component(props, apiRef) {
|
|
|
3613
3848
|
overflow: "visible"
|
|
3614
3849
|
}
|
|
3615
3850
|
},
|
|
3616
|
-
/* @__PURE__ */
|
|
3851
|
+
/* @__PURE__ */ React25.createElement(
|
|
3617
3852
|
Box_default,
|
|
3618
3853
|
{
|
|
3619
3854
|
sx: {
|
|
@@ -3623,7 +3858,7 @@ function Component(props, apiRef) {
|
|
|
3623
3858
|
right: 0
|
|
3624
3859
|
}
|
|
3625
3860
|
},
|
|
3626
|
-
/* @__PURE__ */
|
|
3861
|
+
/* @__PURE__ */ React25.createElement(LoadingOverlay, null)
|
|
3627
3862
|
)
|
|
3628
3863
|
)),
|
|
3629
3864
|
virtualizedItems.map((virtualizedRow, index) => {
|
|
@@ -3631,7 +3866,7 @@ function Component(props, apiRef) {
|
|
|
3631
3866
|
const row = dataInPage[rowIndex];
|
|
3632
3867
|
const rowId = getId(row, rowIndex);
|
|
3633
3868
|
const striped = stripe && (stripe === "even" && (rowIndex + 1) % 2 === 0 || stripe === "odd" && (rowIndex + 1) % 2 === 1);
|
|
3634
|
-
return /* @__PURE__ */
|
|
3869
|
+
return /* @__PURE__ */ React25.createElement(
|
|
3635
3870
|
VirtualizedTableRow,
|
|
3636
3871
|
{
|
|
3637
3872
|
key: virtualizedRow.key,
|
|
@@ -3649,7 +3884,7 @@ function Component(props, apiRef) {
|
|
|
3649
3884
|
transform: `translateY(${virtualizedRow.start - index * virtualizedRow.size}px)`
|
|
3650
3885
|
}
|
|
3651
3886
|
},
|
|
3652
|
-
checkboxSelection && /* @__PURE__ */
|
|
3887
|
+
checkboxSelection && /* @__PURE__ */ React25.createElement(
|
|
3653
3888
|
"th",
|
|
3654
3889
|
{
|
|
3655
3890
|
scope: "row",
|
|
@@ -3657,7 +3892,7 @@ function Component(props, apiRef) {
|
|
|
3657
3892
|
textAlign: "center"
|
|
3658
3893
|
}
|
|
3659
3894
|
},
|
|
3660
|
-
/* @__PURE__ */
|
|
3895
|
+
/* @__PURE__ */ React25.createElement(
|
|
3661
3896
|
RenderCheckbox,
|
|
3662
3897
|
{
|
|
3663
3898
|
onClick: getCheckboxClickHandler(),
|
|
@@ -3668,7 +3903,7 @@ function Component(props, apiRef) {
|
|
|
3668
3903
|
}
|
|
3669
3904
|
)
|
|
3670
3905
|
),
|
|
3671
|
-
/* @__PURE__ */
|
|
3906
|
+
/* @__PURE__ */ React25.createElement(
|
|
3672
3907
|
BodyRow2,
|
|
3673
3908
|
{
|
|
3674
3909
|
tableId,
|
|
@@ -3681,9 +3916,9 @@ function Component(props, apiRef) {
|
|
|
3681
3916
|
)
|
|
3682
3917
|
);
|
|
3683
3918
|
})
|
|
3684
|
-
), Footer && /* @__PURE__ */
|
|
3919
|
+
), Footer && /* @__PURE__ */ React25.createElement(Footer, null))
|
|
3685
3920
|
),
|
|
3686
|
-
pagination && /* @__PURE__ */
|
|
3921
|
+
pagination && /* @__PURE__ */ React25.createElement(
|
|
3687
3922
|
Pagination_default,
|
|
3688
3923
|
{
|
|
3689
3924
|
pt: 2,
|
|
@@ -3700,12 +3935,12 @@ var DataTable = forwardRef7(Component);
|
|
|
3700
3935
|
DataTable.displayName = "DataTable";
|
|
3701
3936
|
|
|
3702
3937
|
// src/components/DateRangePicker/DateRangePicker.tsx
|
|
3703
|
-
import
|
|
3938
|
+
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";
|
|
3704
3939
|
import { IMaskInput as IMaskInput2, IMask as IMask2 } from "react-imask";
|
|
3705
3940
|
import CalendarTodayIcon2 from "@mui/icons-material/CalendarToday";
|
|
3706
|
-
import { styled as
|
|
3941
|
+
import { styled as styled14, useThemeProps as useThemeProps5 } from "@mui/joy";
|
|
3707
3942
|
import { FocusTrap as FocusTrap2, ClickAwayListener as ClickAwayListener2, Popper as Popper3 } from "@mui/base";
|
|
3708
|
-
var CalendarButton2 =
|
|
3943
|
+
var CalendarButton2 = styled14(IconButton_default, {
|
|
3709
3944
|
name: "DateRangePicker",
|
|
3710
3945
|
slot: "calendarButton"
|
|
3711
3946
|
})(({ theme }) => ({
|
|
@@ -3715,13 +3950,13 @@ var CalendarButton2 = styled13(IconButton_default, {
|
|
|
3715
3950
|
outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar("palette-focusVisible")}`
|
|
3716
3951
|
}
|
|
3717
3952
|
}));
|
|
3718
|
-
var StyledPopper2 =
|
|
3953
|
+
var StyledPopper2 = styled14(Popper3, {
|
|
3719
3954
|
name: "DateRangePicker",
|
|
3720
3955
|
slot: "popper"
|
|
3721
3956
|
})(({ theme }) => ({
|
|
3722
3957
|
zIndex: theme.zIndex.tooltip
|
|
3723
3958
|
}));
|
|
3724
|
-
var CalendarSheet2 =
|
|
3959
|
+
var CalendarSheet2 = styled14(Sheet_default, {
|
|
3725
3960
|
name: "DateRangePicker",
|
|
3726
3961
|
slot: "sheet",
|
|
3727
3962
|
overridesResolver: (props, styles) => styles.root
|
|
@@ -3731,7 +3966,7 @@ var CalendarSheet2 = styled13(Sheet_default, {
|
|
|
3731
3966
|
boxShadow: theme.shadow.md,
|
|
3732
3967
|
borderRadius: theme.radius.md
|
|
3733
3968
|
}));
|
|
3734
|
-
var DateRangePickerRoot =
|
|
3969
|
+
var DateRangePickerRoot = styled14("div", {
|
|
3735
3970
|
name: "DateRangePicker",
|
|
3736
3971
|
slot: "root",
|
|
3737
3972
|
overridesResolver: (props, styles) => styles.root
|
|
@@ -3801,9 +4036,9 @@ var parseDates = (str, format) => {
|
|
|
3801
4036
|
var formatToPattern2 = (format) => {
|
|
3802
4037
|
return `${format} - ${format}`.replace(/YYYY/g, "Y").replace(/MM/g, "M").replace(/DD/g, "D").replace(/[^YMD\s]/g, (match) => `${match}\``);
|
|
3803
4038
|
};
|
|
3804
|
-
var TextMaskAdapter5 =
|
|
4039
|
+
var TextMaskAdapter5 = React26.forwardRef(function TextMaskAdapter6(props, ref) {
|
|
3805
4040
|
const { onChange, format, ...other } = props;
|
|
3806
|
-
return /* @__PURE__ */
|
|
4041
|
+
return /* @__PURE__ */ React26.createElement(
|
|
3807
4042
|
IMaskInput2,
|
|
3808
4043
|
{
|
|
3809
4044
|
...other,
|
|
@@ -3861,23 +4096,23 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
3861
4096
|
readOnly,
|
|
3862
4097
|
...innerProps
|
|
3863
4098
|
} = props;
|
|
3864
|
-
const innerRef =
|
|
3865
|
-
const buttonRef =
|
|
4099
|
+
const innerRef = useRef7(null);
|
|
4100
|
+
const buttonRef = useRef7(null);
|
|
3866
4101
|
const [value, setValue] = useControlledState(
|
|
3867
4102
|
props.value,
|
|
3868
4103
|
props.defaultValue || "",
|
|
3869
|
-
|
|
4104
|
+
useCallback12((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
|
|
3870
4105
|
);
|
|
3871
|
-
const [displayValue, setDisplayValue] =
|
|
4106
|
+
const [displayValue, setDisplayValue] = useState8(
|
|
3872
4107
|
() => value ? formatValueString2(parseDates(value, format), displayFormat) : ""
|
|
3873
4108
|
);
|
|
3874
|
-
const [anchorEl, setAnchorEl] =
|
|
4109
|
+
const [anchorEl, setAnchorEl] = useState8(null);
|
|
3875
4110
|
const open = Boolean(anchorEl);
|
|
3876
|
-
const calendarValue =
|
|
4111
|
+
const calendarValue = useMemo11(
|
|
3877
4112
|
() => value ? parseDates(value, format) : void 0,
|
|
3878
4113
|
[value, format]
|
|
3879
4114
|
);
|
|
3880
|
-
|
|
4115
|
+
useEffect7(() => {
|
|
3881
4116
|
if (value) {
|
|
3882
4117
|
try {
|
|
3883
4118
|
const dates = parseDates(value, format);
|
|
@@ -3889,13 +4124,13 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
3889
4124
|
setDisplayValue("");
|
|
3890
4125
|
}
|
|
3891
4126
|
}, [displayFormat, value, format]);
|
|
3892
|
-
|
|
4127
|
+
useEffect7(() => {
|
|
3893
4128
|
if (!anchorEl) {
|
|
3894
4129
|
innerRef.current?.blur();
|
|
3895
4130
|
}
|
|
3896
4131
|
}, [anchorEl, innerRef]);
|
|
3897
4132
|
useImperativeHandle3(ref, () => innerRef.current, [innerRef]);
|
|
3898
|
-
const handleChange =
|
|
4133
|
+
const handleChange = useCallback12(
|
|
3899
4134
|
(event) => {
|
|
3900
4135
|
const value2 = event.target.value;
|
|
3901
4136
|
setDisplayValue(value2 ? formatValueString2(parseDates(value2, format), displayFormat) : value2);
|
|
@@ -3903,7 +4138,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
3903
4138
|
},
|
|
3904
4139
|
[displayFormat, format, setValue]
|
|
3905
4140
|
);
|
|
3906
|
-
const handleDisplayInputChange =
|
|
4141
|
+
const handleDisplayInputChange = useCallback12(
|
|
3907
4142
|
(event) => {
|
|
3908
4143
|
if (event.target.value === "") {
|
|
3909
4144
|
handleChange({
|
|
@@ -3928,14 +4163,14 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
3928
4163
|
},
|
|
3929
4164
|
[displayFormat, format, handleChange, props.name]
|
|
3930
4165
|
);
|
|
3931
|
-
const handleCalendarToggle =
|
|
4166
|
+
const handleCalendarToggle = useCallback12(
|
|
3932
4167
|
(event) => {
|
|
3933
4168
|
setAnchorEl(anchorEl ? null : event.currentTarget);
|
|
3934
4169
|
innerRef.current?.focus();
|
|
3935
4170
|
},
|
|
3936
4171
|
[anchorEl, setAnchorEl, innerRef]
|
|
3937
4172
|
);
|
|
3938
|
-
const handleCalendarChange =
|
|
4173
|
+
const handleCalendarChange = useCallback12(
|
|
3939
4174
|
([date1, date2]) => {
|
|
3940
4175
|
if (!date1 || !date2) return;
|
|
3941
4176
|
const formattedValue = formatValueString2([date1, date2], format);
|
|
@@ -3949,7 +4184,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
3949
4184
|
},
|
|
3950
4185
|
[props.value, props.name, onChange, setValue, setAnchorEl, format, displayFormat]
|
|
3951
4186
|
);
|
|
3952
|
-
const handleInputMouseDown =
|
|
4187
|
+
const handleInputMouseDown = useCallback12(
|
|
3953
4188
|
(event) => {
|
|
3954
4189
|
if (inputReadOnly) {
|
|
3955
4190
|
event.preventDefault();
|
|
@@ -3958,7 +4193,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
3958
4193
|
},
|
|
3959
4194
|
[inputReadOnly, buttonRef]
|
|
3960
4195
|
);
|
|
3961
|
-
return /* @__PURE__ */
|
|
4196
|
+
return /* @__PURE__ */ React26.createElement(DateRangePickerRoot, null, /* @__PURE__ */ React26.createElement(FocusTrap2, { open: true }, /* @__PURE__ */ React26.createElement(React26.Fragment, null, /* @__PURE__ */ React26.createElement(
|
|
3962
4197
|
Input_default,
|
|
3963
4198
|
{
|
|
3964
4199
|
...innerProps,
|
|
@@ -3986,7 +4221,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
3986
4221
|
error,
|
|
3987
4222
|
className,
|
|
3988
4223
|
sx,
|
|
3989
|
-
endDecorator: /* @__PURE__ */
|
|
4224
|
+
endDecorator: /* @__PURE__ */ React26.createElement(
|
|
3990
4225
|
CalendarButton2,
|
|
3991
4226
|
{
|
|
3992
4227
|
ref: buttonRef,
|
|
@@ -3998,13 +4233,13 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
3998
4233
|
"aria-expanded": open,
|
|
3999
4234
|
disabled
|
|
4000
4235
|
},
|
|
4001
|
-
/* @__PURE__ */
|
|
4236
|
+
/* @__PURE__ */ React26.createElement(CalendarTodayIcon2, null)
|
|
4002
4237
|
),
|
|
4003
4238
|
label,
|
|
4004
4239
|
helperText,
|
|
4005
4240
|
readOnly: readOnly || inputReadOnly
|
|
4006
4241
|
}
|
|
4007
|
-
), open && /* @__PURE__ */
|
|
4242
|
+
), open && /* @__PURE__ */ React26.createElement(ClickAwayListener2, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React26.createElement(
|
|
4008
4243
|
StyledPopper2,
|
|
4009
4244
|
{
|
|
4010
4245
|
id: "date-range-picker-popper",
|
|
@@ -4023,7 +4258,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
4023
4258
|
"aria-label": "Calendar Tooltip",
|
|
4024
4259
|
"aria-expanded": open
|
|
4025
4260
|
},
|
|
4026
|
-
/* @__PURE__ */
|
|
4261
|
+
/* @__PURE__ */ React26.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React26.createElement(
|
|
4027
4262
|
Calendar_default,
|
|
4028
4263
|
{
|
|
4029
4264
|
rangeSelection: true,
|
|
@@ -4034,14 +4269,14 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
4034
4269
|
disableFuture,
|
|
4035
4270
|
disablePast
|
|
4036
4271
|
}
|
|
4037
|
-
), !hideClearButton && /* @__PURE__ */
|
|
4272
|
+
), !hideClearButton && /* @__PURE__ */ React26.createElement(
|
|
4038
4273
|
DialogActions_default,
|
|
4039
4274
|
{
|
|
4040
4275
|
sx: {
|
|
4041
4276
|
p: 1
|
|
4042
4277
|
}
|
|
4043
4278
|
},
|
|
4044
|
-
/* @__PURE__ */
|
|
4279
|
+
/* @__PURE__ */ React26.createElement(
|
|
4045
4280
|
Button_default,
|
|
4046
4281
|
{
|
|
4047
4282
|
size,
|
|
@@ -4061,11 +4296,11 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
4061
4296
|
DateRangePicker.displayName = "DateRangePicker";
|
|
4062
4297
|
|
|
4063
4298
|
// src/components/Drawer/Drawer.tsx
|
|
4064
|
-
import
|
|
4065
|
-
import { Drawer as JoyDrawer, styled as
|
|
4299
|
+
import React27 from "react";
|
|
4300
|
+
import { Drawer as JoyDrawer, styled as styled15, drawerClasses } from "@mui/joy";
|
|
4066
4301
|
import { motion as motion22 } from "framer-motion";
|
|
4067
4302
|
var MotionDrawer = motion22(JoyDrawer);
|
|
4068
|
-
var StyledDrawer =
|
|
4303
|
+
var StyledDrawer = styled15(MotionDrawer)(({ theme, size = "md" }) => ({
|
|
4069
4304
|
"--Drawer-horizontalSize": {
|
|
4070
4305
|
sm: "360px",
|
|
4071
4306
|
md: "600px",
|
|
@@ -4079,15 +4314,15 @@ var StyledDrawer = styled14(MotionDrawer)(({ theme, size = "md" }) => ({
|
|
|
4079
4314
|
}));
|
|
4080
4315
|
var Drawer = (props) => {
|
|
4081
4316
|
const { children, ...innerProps } = props;
|
|
4082
|
-
return /* @__PURE__ */
|
|
4317
|
+
return /* @__PURE__ */ React27.createElement(StyledDrawer, { ...innerProps }, children);
|
|
4083
4318
|
};
|
|
4084
4319
|
Drawer.displayName = "Drawer";
|
|
4085
4320
|
|
|
4086
4321
|
// src/components/DialogContent/DialogContent.tsx
|
|
4087
|
-
import { DialogContent as JoyDialogContent, styled as
|
|
4322
|
+
import { DialogContent as JoyDialogContent, styled as styled16 } from "@mui/joy";
|
|
4088
4323
|
import { motion as motion23 } from "framer-motion";
|
|
4089
4324
|
var MotionDialogContent = motion23(JoyDialogContent);
|
|
4090
|
-
var StyledDialogContent =
|
|
4325
|
+
var StyledDialogContent = styled16(MotionDialogContent)(({ theme }) => ({
|
|
4091
4326
|
padding: theme.spacing(0, 6, 5)
|
|
4092
4327
|
}));
|
|
4093
4328
|
var DialogContent = StyledDialogContent;
|
|
@@ -4097,10 +4332,10 @@ DialogContent.displayName = "DialogContent";
|
|
|
4097
4332
|
var DialogContent_default = DialogContent;
|
|
4098
4333
|
|
|
4099
4334
|
// src/components/DialogTitle/DialogTitle.tsx
|
|
4100
|
-
import { DialogTitle as JoyDialogTitle, styled as
|
|
4335
|
+
import { DialogTitle as JoyDialogTitle, styled as styled17 } from "@mui/joy";
|
|
4101
4336
|
import { motion as motion24 } from "framer-motion";
|
|
4102
4337
|
var MotionDialogTitle = motion24(JoyDialogTitle);
|
|
4103
|
-
var StyledDialogTitle =
|
|
4338
|
+
var StyledDialogTitle = styled17(MotionDialogTitle)(({ theme }) => ({
|
|
4104
4339
|
padding: theme.spacing(4, 6)
|
|
4105
4340
|
}));
|
|
4106
4341
|
var DialogTitle = StyledDialogTitle;
|
|
@@ -4110,22 +4345,22 @@ DialogTitle.displayName = "DialogTitle";
|
|
|
4110
4345
|
var DialogTitle_default = DialogTitle;
|
|
4111
4346
|
|
|
4112
4347
|
// src/components/DialogFrame/DialogFrame.tsx
|
|
4113
|
-
import
|
|
4348
|
+
import React29 from "react";
|
|
4114
4349
|
|
|
4115
4350
|
// src/components/Modal/Modal.tsx
|
|
4116
|
-
import
|
|
4351
|
+
import React28 from "react";
|
|
4117
4352
|
import {
|
|
4118
4353
|
Modal as JoyModal,
|
|
4119
4354
|
ModalDialog as JoyModalDialog,
|
|
4120
4355
|
ModalClose as JoyModalClose,
|
|
4121
4356
|
ModalOverflow as JoyModalOverflow,
|
|
4122
|
-
styled as
|
|
4357
|
+
styled as styled18
|
|
4123
4358
|
} from "@mui/joy";
|
|
4124
4359
|
import { motion as motion25 } from "framer-motion";
|
|
4125
4360
|
var MotionModal = motion25(JoyModal);
|
|
4126
4361
|
var Modal = MotionModal;
|
|
4127
4362
|
Modal.displayName = "Modal";
|
|
4128
|
-
var StyledModalDialog =
|
|
4363
|
+
var StyledModalDialog = styled18(JoyModalDialog)({
|
|
4129
4364
|
padding: 0
|
|
4130
4365
|
});
|
|
4131
4366
|
var ModalDialog = StyledModalDialog;
|
|
@@ -4136,37 +4371,37 @@ var ModalOverflow = MotionModalOverflow;
|
|
|
4136
4371
|
ModalOverflow.displayName = "ModalOverflow";
|
|
4137
4372
|
function ModalFrame(props) {
|
|
4138
4373
|
const { title, children, titleStartDecorator, onClose, ...innerProps } = props;
|
|
4139
|
-
return /* @__PURE__ */
|
|
4374
|
+
return /* @__PURE__ */ React28.createElement(StyledModalDialog, { ...innerProps }, /* @__PURE__ */ React28.createElement(ModalClose, { onClick: onClose }), /* @__PURE__ */ React28.createElement(DialogTitle_default, null, titleStartDecorator, title), /* @__PURE__ */ React28.createElement(DialogContent_default, null, children));
|
|
4140
4375
|
}
|
|
4141
4376
|
ModalFrame.displayName = "ModalFrame";
|
|
4142
4377
|
|
|
4143
4378
|
// src/components/DialogFrame/DialogFrame.tsx
|
|
4144
|
-
import { styled as
|
|
4145
|
-
var StyledDialogFrame =
|
|
4379
|
+
import { styled as styled19 } from "@mui/joy";
|
|
4380
|
+
var StyledDialogFrame = styled19(ModalDialog, {
|
|
4146
4381
|
name: "Dialog",
|
|
4147
4382
|
slot: "Root"
|
|
4148
4383
|
})({
|
|
4149
4384
|
padding: 0
|
|
4150
4385
|
});
|
|
4151
|
-
var DialogFrame =
|
|
4386
|
+
var DialogFrame = React29.forwardRef((props, ref) => {
|
|
4152
4387
|
const { title, children, actions, fullscreen, ...innerProps } = props;
|
|
4153
|
-
return /* @__PURE__ */
|
|
4388
|
+
return /* @__PURE__ */ React29.createElement(StyledDialogFrame, { layout: fullscreen ? "fullscreen" : "center", ref, ...innerProps }, /* @__PURE__ */ React29.createElement(DialogTitle_default, null, title), /* @__PURE__ */ React29.createElement(DialogContent_default, null, children), /* @__PURE__ */ React29.createElement(DialogActions_default, null, actions));
|
|
4154
4389
|
});
|
|
4155
4390
|
DialogFrame.displayName = "DialogFrame";
|
|
4156
4391
|
|
|
4157
4392
|
// src/components/Divider/Divider.tsx
|
|
4158
|
-
import
|
|
4393
|
+
import React30 from "react";
|
|
4159
4394
|
import { Divider as JoyDivider } from "@mui/joy";
|
|
4160
4395
|
import { motion as motion26 } from "framer-motion";
|
|
4161
4396
|
var MotionDivider = motion26(JoyDivider);
|
|
4162
4397
|
var Divider = (props) => {
|
|
4163
|
-
return /* @__PURE__ */
|
|
4398
|
+
return /* @__PURE__ */ React30.createElement(MotionDivider, { ...props });
|
|
4164
4399
|
};
|
|
4165
4400
|
Divider.displayName = "Divider";
|
|
4166
4401
|
|
|
4167
4402
|
// src/components/InsetDrawer/InsetDrawer.tsx
|
|
4168
|
-
import { Drawer as JoyDrawer2, styled as
|
|
4169
|
-
var InsetDrawer =
|
|
4403
|
+
import { Drawer as JoyDrawer2, styled as styled20, drawerClasses as drawerClasses2 } from "@mui/joy";
|
|
4404
|
+
var InsetDrawer = styled20(JoyDrawer2)(({ theme }) => ({
|
|
4170
4405
|
[`& .${drawerClasses2.content}`]: {
|
|
4171
4406
|
backgroundColor: "transparent",
|
|
4172
4407
|
boxShadow: "none",
|
|
@@ -4184,7 +4419,7 @@ var InsetDrawer = styled19(JoyDrawer2)(({ theme }) => ({
|
|
|
4184
4419
|
import { Grid } from "@mui/joy";
|
|
4185
4420
|
|
|
4186
4421
|
// src/components/IconMenuButton/IconMenuButton.tsx
|
|
4187
|
-
import
|
|
4422
|
+
import React31 from "react";
|
|
4188
4423
|
import { MenuButton as JoyMenuButton2, IconButton as JoyIconButton2 } from "@mui/joy";
|
|
4189
4424
|
function IconMenuButton(props) {
|
|
4190
4425
|
const {
|
|
@@ -4198,7 +4433,7 @@ function IconMenuButton(props) {
|
|
|
4198
4433
|
placement = "bottom"
|
|
4199
4434
|
} = props;
|
|
4200
4435
|
if (!items.length) {
|
|
4201
|
-
return /* @__PURE__ */
|
|
4436
|
+
return /* @__PURE__ */ React31.createElement(
|
|
4202
4437
|
JoyIconButton2,
|
|
4203
4438
|
{
|
|
4204
4439
|
component: props.buttonComponent ?? "button",
|
|
@@ -4212,7 +4447,7 @@ function IconMenuButton(props) {
|
|
|
4212
4447
|
icon
|
|
4213
4448
|
);
|
|
4214
4449
|
}
|
|
4215
|
-
return /* @__PURE__ */
|
|
4450
|
+
return /* @__PURE__ */ React31.createElement(Dropdown_default, null, /* @__PURE__ */ React31.createElement(
|
|
4216
4451
|
JoyMenuButton2,
|
|
4217
4452
|
{
|
|
4218
4453
|
slots: { root: JoyIconButton2 },
|
|
@@ -4229,19 +4464,19 @@ function IconMenuButton(props) {
|
|
|
4229
4464
|
}
|
|
4230
4465
|
},
|
|
4231
4466
|
icon
|
|
4232
|
-
), /* @__PURE__ */
|
|
4467
|
+
), /* @__PURE__ */ React31.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ React31.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
|
|
4233
4468
|
}
|
|
4234
4469
|
IconMenuButton.displayName = "IconMenuButton";
|
|
4235
4470
|
|
|
4236
4471
|
// src/components/Markdown/Markdown.tsx
|
|
4237
|
-
import
|
|
4472
|
+
import React32, { lazy, Suspense, useEffect as useEffect8, useState as useState9 } from "react";
|
|
4238
4473
|
import { Skeleton } from "@mui/joy";
|
|
4239
4474
|
import { Link as Link2 } from "@mui/joy";
|
|
4240
4475
|
import remarkGfm from "remark-gfm";
|
|
4241
4476
|
var LazyReactMarkdown = lazy(() => import("react-markdown"));
|
|
4242
4477
|
var Markdown = (props) => {
|
|
4243
|
-
const [rehypeAccent2, setRehypeAccent] =
|
|
4244
|
-
|
|
4478
|
+
const [rehypeAccent2, setRehypeAccent] = useState9(null);
|
|
4479
|
+
useEffect8(() => {
|
|
4245
4480
|
const loadRehypeAccent = async () => {
|
|
4246
4481
|
const module = await Promise.resolve().then(() => (init_rehype_accent(), rehype_accent_exports));
|
|
4247
4482
|
setRehypeAccent(() => module.rehypeAccent);
|
|
@@ -4263,12 +4498,12 @@ var Markdown = (props) => {
|
|
|
4263
4498
|
if (!rehypeAccent2) {
|
|
4264
4499
|
return null;
|
|
4265
4500
|
}
|
|
4266
|
-
return /* @__PURE__ */
|
|
4501
|
+
return /* @__PURE__ */ React32.createElement(Typography, { component: "div", color, textColor, level: defaultLevel, ...innerProps }, /* @__PURE__ */ React32.createElement(
|
|
4267
4502
|
Suspense,
|
|
4268
4503
|
{
|
|
4269
|
-
fallback: fallback || /* @__PURE__ */
|
|
4504
|
+
fallback: fallback || /* @__PURE__ */ React32.createElement(Typography, null, /* @__PURE__ */ React32.createElement(Skeleton, null, content || ""))
|
|
4270
4505
|
},
|
|
4271
|
-
/* @__PURE__ */
|
|
4506
|
+
/* @__PURE__ */ React32.createElement(
|
|
4272
4507
|
LazyReactMarkdown,
|
|
4273
4508
|
{
|
|
4274
4509
|
...markdownOptions,
|
|
@@ -4276,15 +4511,15 @@ var Markdown = (props) => {
|
|
|
4276
4511
|
rehypePlugins: [[rehypeAccent2, { accentColor }]],
|
|
4277
4512
|
remarkPlugins: [remarkGfm],
|
|
4278
4513
|
components: {
|
|
4279
|
-
h1: ({ children }) => /* @__PURE__ */
|
|
4280
|
-
h2: ({ children }) => /* @__PURE__ */
|
|
4281
|
-
h3: ({ children }) => /* @__PURE__ */
|
|
4282
|
-
h4: ({ children }) => /* @__PURE__ */
|
|
4283
|
-
p: ({ children, node }) => /* @__PURE__ */
|
|
4284
|
-
a: ({ children, href }) => /* @__PURE__ */
|
|
4285
|
-
hr: () => /* @__PURE__ */
|
|
4286
|
-
b: ({ children }) => /* @__PURE__ */
|
|
4287
|
-
strong: ({ children }) => /* @__PURE__ */
|
|
4514
|
+
h1: ({ children }) => /* @__PURE__ */ React32.createElement(Typography, { color, textColor, level: "h1" }, children),
|
|
4515
|
+
h2: ({ children }) => /* @__PURE__ */ React32.createElement(Typography, { color, textColor, level: "h2" }, children),
|
|
4516
|
+
h3: ({ children }) => /* @__PURE__ */ React32.createElement(Typography, { color, textColor, level: "h3" }, children),
|
|
4517
|
+
h4: ({ children }) => /* @__PURE__ */ React32.createElement(Typography, { color, textColor, level: "h4" }, children),
|
|
4518
|
+
p: ({ children, node }) => /* @__PURE__ */ React32.createElement(Typography, { color, textColor, level: defaultLevel, ...node?.properties }, children),
|
|
4519
|
+
a: ({ children, href }) => /* @__PURE__ */ React32.createElement(Link2, { href, target: defaultLinkAction }, children),
|
|
4520
|
+
hr: () => /* @__PURE__ */ React32.createElement(Divider, null),
|
|
4521
|
+
b: ({ children }) => /* @__PURE__ */ React32.createElement(Typography, { fontWeight: boldFontWeight }, children),
|
|
4522
|
+
strong: ({ children }) => /* @__PURE__ */ React32.createElement(Typography, { fontWeight: boldFontWeight }, children),
|
|
4288
4523
|
...markdownOptions?.components
|
|
4289
4524
|
}
|
|
4290
4525
|
}
|
|
@@ -4294,7 +4529,7 @@ var Markdown = (props) => {
|
|
|
4294
4529
|
Markdown.displayName = "Markdown";
|
|
4295
4530
|
|
|
4296
4531
|
// src/components/MenuButton/MenuButton.tsx
|
|
4297
|
-
import
|
|
4532
|
+
import React33 from "react";
|
|
4298
4533
|
import { MenuButton as JoyMenuButton3, Button as JoyButton2 } from "@mui/joy";
|
|
4299
4534
|
import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
|
|
4300
4535
|
function MenuButton(props) {
|
|
@@ -4312,7 +4547,7 @@ function MenuButton(props) {
|
|
|
4312
4547
|
placement = "bottom"
|
|
4313
4548
|
} = props;
|
|
4314
4549
|
if (!items.length) {
|
|
4315
|
-
return /* @__PURE__ */
|
|
4550
|
+
return /* @__PURE__ */ React33.createElement(
|
|
4316
4551
|
JoyButton2,
|
|
4317
4552
|
{
|
|
4318
4553
|
component: props.buttonComponent ?? "button",
|
|
@@ -4323,12 +4558,12 @@ function MenuButton(props) {
|
|
|
4323
4558
|
loading,
|
|
4324
4559
|
startDecorator,
|
|
4325
4560
|
...props.buttonComponentProps ?? {},
|
|
4326
|
-
endDecorator: showIcon ? /* @__PURE__ */
|
|
4561
|
+
endDecorator: showIcon ? /* @__PURE__ */ React33.createElement(React33.Fragment, null, endDecorator, /* @__PURE__ */ React33.createElement(ExpandMoreIcon, null)) : /* @__PURE__ */ React33.createElement(React33.Fragment, null, endDecorator)
|
|
4327
4562
|
},
|
|
4328
4563
|
buttonText
|
|
4329
4564
|
);
|
|
4330
4565
|
}
|
|
4331
|
-
return /* @__PURE__ */
|
|
4566
|
+
return /* @__PURE__ */ React33.createElement(Dropdown_default, null, /* @__PURE__ */ React33.createElement(
|
|
4332
4567
|
JoyMenuButton3,
|
|
4333
4568
|
{
|
|
4334
4569
|
component: props.buttonComponent ?? "button",
|
|
@@ -4339,25 +4574,25 @@ function MenuButton(props) {
|
|
|
4339
4574
|
loading,
|
|
4340
4575
|
startDecorator,
|
|
4341
4576
|
...props.buttonComponentProps ?? {},
|
|
4342
|
-
endDecorator: showIcon ? /* @__PURE__ */
|
|
4577
|
+
endDecorator: showIcon ? /* @__PURE__ */ React33.createElement(React33.Fragment, null, endDecorator, /* @__PURE__ */ React33.createElement(ExpandMoreIcon, null)) : /* @__PURE__ */ React33.createElement(React33.Fragment, null, endDecorator)
|
|
4343
4578
|
},
|
|
4344
4579
|
buttonText
|
|
4345
|
-
), /* @__PURE__ */
|
|
4580
|
+
), /* @__PURE__ */ React33.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ React33.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
|
|
4346
4581
|
}
|
|
4347
4582
|
MenuButton.displayName = "MenuButton";
|
|
4348
4583
|
|
|
4349
4584
|
// src/components/MonthPicker/MonthPicker.tsx
|
|
4350
|
-
import
|
|
4585
|
+
import React34, { forwardRef as forwardRef9, useCallback as useCallback13, useEffect as useEffect9, useImperativeHandle as useImperativeHandle4, useRef as useRef8, useState as useState10 } from "react";
|
|
4351
4586
|
import CalendarTodayIcon3 from "@mui/icons-material/CalendarToday";
|
|
4352
|
-
import { styled as
|
|
4587
|
+
import { styled as styled21, useThemeProps as useThemeProps6 } from "@mui/joy";
|
|
4353
4588
|
import { FocusTrap as FocusTrap3, ClickAwayListener as ClickAwayListener3, Popper as Popper4 } from "@mui/base";
|
|
4354
|
-
var StyledPopper3 =
|
|
4589
|
+
var StyledPopper3 = styled21(Popper4, {
|
|
4355
4590
|
name: "MonthPicker",
|
|
4356
4591
|
slot: "popper"
|
|
4357
4592
|
})(({ theme }) => ({
|
|
4358
4593
|
zIndex: theme.zIndex.tooltip
|
|
4359
4594
|
}));
|
|
4360
|
-
var CalendarSheet3 =
|
|
4595
|
+
var CalendarSheet3 = styled21(Sheet_default, {
|
|
4361
4596
|
name: "MonthPicker",
|
|
4362
4597
|
slot: "sheet",
|
|
4363
4598
|
overridesResolver: (props, styles) => styles.root
|
|
@@ -4366,7 +4601,7 @@ var CalendarSheet3 = styled20(Sheet_default, {
|
|
|
4366
4601
|
boxShadow: theme.shadow.md,
|
|
4367
4602
|
borderRadius: theme.radius.md
|
|
4368
4603
|
}));
|
|
4369
|
-
var MonthPickerRoot =
|
|
4604
|
+
var MonthPickerRoot = styled21("div", {
|
|
4370
4605
|
name: "MonthPicker",
|
|
4371
4606
|
slot: "root",
|
|
4372
4607
|
overridesResolver: (props, styles) => styles.root
|
|
@@ -4429,14 +4664,14 @@ var MonthPicker = forwardRef9((inProps, ref) => {
|
|
|
4429
4664
|
locale,
|
|
4430
4665
|
...innerProps
|
|
4431
4666
|
} = props;
|
|
4432
|
-
const innerRef =
|
|
4433
|
-
const buttonRef =
|
|
4667
|
+
const innerRef = useRef8(null);
|
|
4668
|
+
const buttonRef = useRef8(null);
|
|
4434
4669
|
const [value, setValue, isControlled] = useControlledState(
|
|
4435
4670
|
props.value,
|
|
4436
4671
|
props.defaultValue || "",
|
|
4437
|
-
|
|
4672
|
+
useCallback13((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
|
|
4438
4673
|
);
|
|
4439
|
-
const getFormattedDisplayValue =
|
|
4674
|
+
const getFormattedDisplayValue = useCallback13(
|
|
4440
4675
|
(inputValue) => {
|
|
4441
4676
|
if (!inputValue) return "";
|
|
4442
4677
|
try {
|
|
@@ -4447,19 +4682,19 @@ var MonthPicker = forwardRef9((inProps, ref) => {
|
|
|
4447
4682
|
},
|
|
4448
4683
|
[format, displayFormat, locale]
|
|
4449
4684
|
);
|
|
4450
|
-
const [displayValue, setDisplayValue] =
|
|
4451
|
-
const [anchorEl, setAnchorEl] =
|
|
4685
|
+
const [displayValue, setDisplayValue] = useState10(() => getFormattedDisplayValue(value));
|
|
4686
|
+
const [anchorEl, setAnchorEl] = useState10(null);
|
|
4452
4687
|
const open = Boolean(anchorEl);
|
|
4453
|
-
|
|
4688
|
+
useEffect9(() => {
|
|
4454
4689
|
if (!anchorEl) {
|
|
4455
4690
|
innerRef.current?.blur();
|
|
4456
4691
|
}
|
|
4457
4692
|
}, [anchorEl, innerRef]);
|
|
4458
4693
|
useImperativeHandle4(ref, () => innerRef.current, [innerRef]);
|
|
4459
|
-
|
|
4694
|
+
useEffect9(() => {
|
|
4460
4695
|
setDisplayValue(getFormattedDisplayValue(value));
|
|
4461
4696
|
}, [value, getFormattedDisplayValue]);
|
|
4462
|
-
const handleChange =
|
|
4697
|
+
const handleChange = useCallback13(
|
|
4463
4698
|
(event) => {
|
|
4464
4699
|
const newValue = event.target.value;
|
|
4465
4700
|
setValue(newValue);
|
|
@@ -4469,21 +4704,21 @@ var MonthPicker = forwardRef9((inProps, ref) => {
|
|
|
4469
4704
|
},
|
|
4470
4705
|
[setValue, getFormattedDisplayValue, isControlled]
|
|
4471
4706
|
);
|
|
4472
|
-
const handleCalendarToggle =
|
|
4707
|
+
const handleCalendarToggle = useCallback13(
|
|
4473
4708
|
(event) => {
|
|
4474
4709
|
setAnchorEl(anchorEl ? null : event.currentTarget);
|
|
4475
4710
|
innerRef.current?.focus();
|
|
4476
4711
|
},
|
|
4477
4712
|
[anchorEl, setAnchorEl, innerRef]
|
|
4478
4713
|
);
|
|
4479
|
-
const handleInputMouseDown =
|
|
4714
|
+
const handleInputMouseDown = useCallback13(
|
|
4480
4715
|
(event) => {
|
|
4481
4716
|
event.preventDefault();
|
|
4482
4717
|
buttonRef.current?.focus();
|
|
4483
4718
|
},
|
|
4484
4719
|
[buttonRef]
|
|
4485
4720
|
);
|
|
4486
|
-
return /* @__PURE__ */
|
|
4721
|
+
return /* @__PURE__ */ React34.createElement(MonthPickerRoot, null, /* @__PURE__ */ React34.createElement(FocusTrap3, { open: true }, /* @__PURE__ */ React34.createElement(React34.Fragment, null, /* @__PURE__ */ React34.createElement(
|
|
4487
4722
|
Input_default,
|
|
4488
4723
|
{
|
|
4489
4724
|
...innerProps,
|
|
@@ -4513,7 +4748,7 @@ var MonthPicker = forwardRef9((inProps, ref) => {
|
|
|
4513
4748
|
// NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
|
|
4514
4749
|
fontFamily: "monospace"
|
|
4515
4750
|
},
|
|
4516
|
-
endDecorator: /* @__PURE__ */
|
|
4751
|
+
endDecorator: /* @__PURE__ */ React34.createElement(
|
|
4517
4752
|
IconButton_default,
|
|
4518
4753
|
{
|
|
4519
4754
|
ref: buttonRef,
|
|
@@ -4525,12 +4760,12 @@ var MonthPicker = forwardRef9((inProps, ref) => {
|
|
|
4525
4760
|
"aria-expanded": open,
|
|
4526
4761
|
disabled
|
|
4527
4762
|
},
|
|
4528
|
-
/* @__PURE__ */
|
|
4763
|
+
/* @__PURE__ */ React34.createElement(CalendarTodayIcon3, null)
|
|
4529
4764
|
),
|
|
4530
4765
|
label,
|
|
4531
4766
|
helperText
|
|
4532
4767
|
}
|
|
4533
|
-
), open && /* @__PURE__ */
|
|
4768
|
+
), open && /* @__PURE__ */ React34.createElement(ClickAwayListener3, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React34.createElement(
|
|
4534
4769
|
StyledPopper3,
|
|
4535
4770
|
{
|
|
4536
4771
|
id: "month-picker-popper",
|
|
@@ -4549,7 +4784,7 @@ var MonthPicker = forwardRef9((inProps, ref) => {
|
|
|
4549
4784
|
"aria-label": "Calendar Tooltip",
|
|
4550
4785
|
"aria-expanded": open
|
|
4551
4786
|
},
|
|
4552
|
-
/* @__PURE__ */
|
|
4787
|
+
/* @__PURE__ */ React34.createElement(CalendarSheet3, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React34.createElement(
|
|
4553
4788
|
Calendar_default,
|
|
4554
4789
|
{
|
|
4555
4790
|
view: "month",
|
|
@@ -4570,14 +4805,14 @@ var MonthPicker = forwardRef9((inProps, ref) => {
|
|
|
4570
4805
|
disablePast,
|
|
4571
4806
|
locale
|
|
4572
4807
|
}
|
|
4573
|
-
), /* @__PURE__ */
|
|
4808
|
+
), /* @__PURE__ */ React34.createElement(
|
|
4574
4809
|
DialogActions_default,
|
|
4575
4810
|
{
|
|
4576
4811
|
sx: {
|
|
4577
4812
|
p: 1
|
|
4578
4813
|
}
|
|
4579
4814
|
},
|
|
4580
|
-
/* @__PURE__ */
|
|
4815
|
+
/* @__PURE__ */ React34.createElement(
|
|
4581
4816
|
Button_default,
|
|
4582
4817
|
{
|
|
4583
4818
|
size,
|
|
@@ -4600,18 +4835,18 @@ var MonthPicker = forwardRef9((inProps, ref) => {
|
|
|
4600
4835
|
});
|
|
4601
4836
|
|
|
4602
4837
|
// src/components/MonthRangePicker/MonthRangePicker.tsx
|
|
4603
|
-
import
|
|
4838
|
+
import React35, { forwardRef as forwardRef10, useCallback as useCallback14, useEffect as useEffect10, useImperativeHandle as useImperativeHandle5, useMemo as useMemo12, useRef as useRef9, useState as useState11 } from "react";
|
|
4604
4839
|
import { IMaskInput as IMaskInput3, IMask as IMask3 } from "react-imask";
|
|
4605
4840
|
import CalendarTodayIcon4 from "@mui/icons-material/CalendarToday";
|
|
4606
|
-
import { styled as
|
|
4841
|
+
import { styled as styled22, useThemeProps as useThemeProps7 } from "@mui/joy";
|
|
4607
4842
|
import { FocusTrap as FocusTrap4, ClickAwayListener as ClickAwayListener4, Popper as Popper5 } from "@mui/base";
|
|
4608
|
-
var StyledPopper4 =
|
|
4843
|
+
var StyledPopper4 = styled22(Popper5, {
|
|
4609
4844
|
name: "MonthRangePicker",
|
|
4610
4845
|
slot: "popper"
|
|
4611
4846
|
})(({ theme }) => ({
|
|
4612
4847
|
zIndex: theme.zIndex.tooltip
|
|
4613
4848
|
}));
|
|
4614
|
-
var CalendarSheet4 =
|
|
4849
|
+
var CalendarSheet4 = styled22(Sheet_default, {
|
|
4615
4850
|
name: "MonthRangePicker",
|
|
4616
4851
|
slot: "sheet",
|
|
4617
4852
|
overridesResolver: (props, styles) => styles.root
|
|
@@ -4621,7 +4856,7 @@ var CalendarSheet4 = styled21(Sheet_default, {
|
|
|
4621
4856
|
boxShadow: theme.shadow.md,
|
|
4622
4857
|
borderRadius: theme.radius.md
|
|
4623
4858
|
}));
|
|
4624
|
-
var MonthRangePickerRoot =
|
|
4859
|
+
var MonthRangePickerRoot = styled22("div", {
|
|
4625
4860
|
name: "MonthRangePicker",
|
|
4626
4861
|
slot: "root",
|
|
4627
4862
|
overridesResolver: (props, styles) => styles.root
|
|
@@ -4658,9 +4893,9 @@ var parseDates2 = (str) => {
|
|
|
4658
4893
|
var formatToPattern3 = (format) => {
|
|
4659
4894
|
return `${format} - ${format}`.replace(/YYYY/g, "Y").replace(/MM/g, "m").replace(/[^YMm\s]/g, (match) => `${match}\``);
|
|
4660
4895
|
};
|
|
4661
|
-
var TextMaskAdapter7 =
|
|
4896
|
+
var TextMaskAdapter7 = React35.forwardRef(function TextMaskAdapter8(props, ref) {
|
|
4662
4897
|
const { onChange, format, ...other } = props;
|
|
4663
|
-
return /* @__PURE__ */
|
|
4898
|
+
return /* @__PURE__ */ React35.createElement(
|
|
4664
4899
|
IMaskInput3,
|
|
4665
4900
|
{
|
|
4666
4901
|
...other,
|
|
@@ -4708,35 +4943,35 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
|
|
|
4708
4943
|
size,
|
|
4709
4944
|
...innerProps
|
|
4710
4945
|
} = props;
|
|
4711
|
-
const innerRef =
|
|
4946
|
+
const innerRef = useRef9(null);
|
|
4712
4947
|
const [value, setValue] = useControlledState(
|
|
4713
4948
|
props.value,
|
|
4714
4949
|
props.defaultValue || "",
|
|
4715
|
-
|
|
4950
|
+
useCallback14((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
|
|
4716
4951
|
);
|
|
4717
|
-
const [anchorEl, setAnchorEl] =
|
|
4952
|
+
const [anchorEl, setAnchorEl] = useState11(null);
|
|
4718
4953
|
const open = Boolean(anchorEl);
|
|
4719
|
-
const calendarValue =
|
|
4720
|
-
|
|
4954
|
+
const calendarValue = useMemo12(() => value ? parseDates2(value) : void 0, [value]);
|
|
4955
|
+
useEffect10(() => {
|
|
4721
4956
|
if (!anchorEl) {
|
|
4722
4957
|
innerRef.current?.blur();
|
|
4723
4958
|
}
|
|
4724
4959
|
}, [anchorEl, innerRef]);
|
|
4725
4960
|
useImperativeHandle5(ref, () => innerRef.current, [innerRef]);
|
|
4726
|
-
const handleChange =
|
|
4961
|
+
const handleChange = useCallback14(
|
|
4727
4962
|
(event) => {
|
|
4728
4963
|
setValue(event.target.value);
|
|
4729
4964
|
},
|
|
4730
4965
|
[setValue]
|
|
4731
4966
|
);
|
|
4732
|
-
const handleCalendarToggle =
|
|
4967
|
+
const handleCalendarToggle = useCallback14(
|
|
4733
4968
|
(event) => {
|
|
4734
4969
|
setAnchorEl(anchorEl ? null : event.currentTarget);
|
|
4735
4970
|
innerRef.current?.focus();
|
|
4736
4971
|
},
|
|
4737
4972
|
[anchorEl, setAnchorEl, innerRef]
|
|
4738
4973
|
);
|
|
4739
|
-
const handleCalendarChange =
|
|
4974
|
+
const handleCalendarChange = useCallback14(
|
|
4740
4975
|
([date1, date2]) => {
|
|
4741
4976
|
if (!date1 || !date2) return;
|
|
4742
4977
|
setValue(formatValueString4([date1, date2], format));
|
|
@@ -4744,7 +4979,7 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
|
|
|
4744
4979
|
},
|
|
4745
4980
|
[setValue, setAnchorEl, format]
|
|
4746
4981
|
);
|
|
4747
|
-
return /* @__PURE__ */
|
|
4982
|
+
return /* @__PURE__ */ React35.createElement(MonthRangePickerRoot, null, /* @__PURE__ */ React35.createElement(FocusTrap4, { open: true }, /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement(
|
|
4748
4983
|
Input_default,
|
|
4749
4984
|
{
|
|
4750
4985
|
...innerProps,
|
|
@@ -4766,7 +5001,7 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
|
|
|
4766
5001
|
// NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
|
|
4767
5002
|
fontFamily: "monospace"
|
|
4768
5003
|
},
|
|
4769
|
-
endDecorator: /* @__PURE__ */
|
|
5004
|
+
endDecorator: /* @__PURE__ */ React35.createElement(
|
|
4770
5005
|
IconButton_default,
|
|
4771
5006
|
{
|
|
4772
5007
|
variant: "plain",
|
|
@@ -4776,12 +5011,12 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
|
|
|
4776
5011
|
"aria-haspopup": "dialog",
|
|
4777
5012
|
"aria-expanded": open
|
|
4778
5013
|
},
|
|
4779
|
-
/* @__PURE__ */
|
|
5014
|
+
/* @__PURE__ */ React35.createElement(CalendarTodayIcon4, null)
|
|
4780
5015
|
),
|
|
4781
5016
|
label,
|
|
4782
5017
|
helperText
|
|
4783
5018
|
}
|
|
4784
|
-
), open && /* @__PURE__ */
|
|
5019
|
+
), open && /* @__PURE__ */ React35.createElement(ClickAwayListener4, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React35.createElement(
|
|
4785
5020
|
StyledPopper4,
|
|
4786
5021
|
{
|
|
4787
5022
|
id: "month-range-picker-popper",
|
|
@@ -4800,7 +5035,7 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
|
|
|
4800
5035
|
"aria-label": "Calendar Tooltip",
|
|
4801
5036
|
"aria-expanded": open
|
|
4802
5037
|
},
|
|
4803
|
-
/* @__PURE__ */
|
|
5038
|
+
/* @__PURE__ */ React35.createElement(CalendarSheet4, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React35.createElement(
|
|
4804
5039
|
Calendar_default,
|
|
4805
5040
|
{
|
|
4806
5041
|
view: "month",
|
|
@@ -4813,14 +5048,14 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
|
|
|
4813
5048
|
disableFuture,
|
|
4814
5049
|
disablePast
|
|
4815
5050
|
}
|
|
4816
|
-
), /* @__PURE__ */
|
|
5051
|
+
), /* @__PURE__ */ React35.createElement(
|
|
4817
5052
|
DialogActions_default,
|
|
4818
5053
|
{
|
|
4819
5054
|
sx: {
|
|
4820
5055
|
p: 1
|
|
4821
5056
|
}
|
|
4822
5057
|
},
|
|
4823
|
-
/* @__PURE__ */
|
|
5058
|
+
/* @__PURE__ */ React35.createElement(
|
|
4824
5059
|
Button_default,
|
|
4825
5060
|
{
|
|
4826
5061
|
size,
|
|
@@ -4839,16 +5074,16 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
|
|
|
4839
5074
|
MonthRangePicker.displayName = "MonthRangePicker";
|
|
4840
5075
|
|
|
4841
5076
|
// src/components/NavigationGroup/NavigationGroup.tsx
|
|
4842
|
-
import
|
|
5077
|
+
import React36 from "react";
|
|
4843
5078
|
import {
|
|
4844
5079
|
Accordion as JoyAccordion2,
|
|
4845
5080
|
AccordionSummary as JoyAccordionSummary2,
|
|
4846
5081
|
AccordionDetails as JoyAccordionDetails2,
|
|
4847
|
-
styled as
|
|
5082
|
+
styled as styled23,
|
|
4848
5083
|
accordionSummaryClasses,
|
|
4849
5084
|
Stack as Stack2
|
|
4850
5085
|
} from "@mui/joy";
|
|
4851
|
-
var AccordionSummary2 =
|
|
5086
|
+
var AccordionSummary2 = styled23(JoyAccordionSummary2, {
|
|
4852
5087
|
name: "NavigationGroup",
|
|
4853
5088
|
slot: "Summary",
|
|
4854
5089
|
shouldForwardProp: (prop) => prop !== "useIcon" && prop !== "level"
|
|
@@ -4861,7 +5096,7 @@ var AccordionSummary2 = styled22(JoyAccordionSummary2, {
|
|
|
4861
5096
|
}
|
|
4862
5097
|
}
|
|
4863
5098
|
}));
|
|
4864
|
-
var AccordionDetails2 =
|
|
5099
|
+
var AccordionDetails2 = styled23(JoyAccordionDetails2, {
|
|
4865
5100
|
name: "NavigationGroup",
|
|
4866
5101
|
slot: "Details"
|
|
4867
5102
|
})(({ theme }) => ({
|
|
@@ -4870,19 +5105,19 @@ var AccordionDetails2 = styled22(JoyAccordionDetails2, {
|
|
|
4870
5105
|
}));
|
|
4871
5106
|
function NavigationGroup(props) {
|
|
4872
5107
|
const { title, children, startDecorator, level, ...rest } = props;
|
|
4873
|
-
return /* @__PURE__ */
|
|
5108
|
+
return /* @__PURE__ */ React36.createElement(JoyAccordion2, { ...rest }, /* @__PURE__ */ React36.createElement(AccordionSummary2, { useIcon: !!startDecorator, level }, /* @__PURE__ */ React36.createElement(Stack2, { direction: "row", gap: 4 }, startDecorator, title)), /* @__PURE__ */ React36.createElement(AccordionDetails2, null, children));
|
|
4874
5109
|
}
|
|
4875
5110
|
|
|
4876
5111
|
// src/components/NavigationItem/NavigationItem.tsx
|
|
4877
|
-
import
|
|
5112
|
+
import React37 from "react";
|
|
4878
5113
|
import {
|
|
4879
5114
|
ListItem as JoyListItem,
|
|
4880
5115
|
ListItemButton as JoyListItemButton,
|
|
4881
5116
|
ListItemDecorator as JoyListItemDecorator,
|
|
4882
|
-
styled as
|
|
5117
|
+
styled as styled24,
|
|
4883
5118
|
listItemButtonClasses
|
|
4884
5119
|
} from "@mui/joy";
|
|
4885
|
-
var ListItemButton =
|
|
5120
|
+
var ListItemButton = styled24(JoyListItemButton, {
|
|
4886
5121
|
name: "NavigationItem",
|
|
4887
5122
|
slot: "Button",
|
|
4888
5123
|
shouldForwardProp: (prop) => prop !== "useIcon" && prop !== "level"
|
|
@@ -4909,7 +5144,7 @@ function NavigationItem(props) {
|
|
|
4909
5144
|
const handleClick = () => {
|
|
4910
5145
|
onClick?.(id);
|
|
4911
5146
|
};
|
|
4912
|
-
return /* @__PURE__ */
|
|
5147
|
+
return /* @__PURE__ */ React37.createElement(JoyListItem, { ...rest }, /* @__PURE__ */ React37.createElement(
|
|
4913
5148
|
ListItemButton,
|
|
4914
5149
|
{
|
|
4915
5150
|
level,
|
|
@@ -4918,21 +5153,21 @@ function NavigationItem(props) {
|
|
|
4918
5153
|
"aria-current": selected,
|
|
4919
5154
|
onClick: handleClick
|
|
4920
5155
|
},
|
|
4921
|
-
startDecorator && /* @__PURE__ */
|
|
5156
|
+
startDecorator && /* @__PURE__ */ React37.createElement(JoyListItemDecorator, null, startDecorator),
|
|
4922
5157
|
children
|
|
4923
5158
|
));
|
|
4924
5159
|
}
|
|
4925
5160
|
|
|
4926
5161
|
// src/components/Navigator/Navigator.tsx
|
|
4927
|
-
import
|
|
5162
|
+
import React38 from "react";
|
|
4928
5163
|
function Navigator(props) {
|
|
4929
5164
|
const { items, level = 0, onSelect } = props;
|
|
4930
5165
|
const handleItemClick = (id) => {
|
|
4931
5166
|
onSelect?.(id);
|
|
4932
5167
|
};
|
|
4933
|
-
return /* @__PURE__ */
|
|
5168
|
+
return /* @__PURE__ */ React38.createElement("div", null, items.map((item, index) => {
|
|
4934
5169
|
if (item.type === "item") {
|
|
4935
|
-
return /* @__PURE__ */
|
|
5170
|
+
return /* @__PURE__ */ React38.createElement(
|
|
4936
5171
|
NavigationItem,
|
|
4937
5172
|
{
|
|
4938
5173
|
key: item.id,
|
|
@@ -4945,7 +5180,7 @@ function Navigator(props) {
|
|
|
4945
5180
|
item.title
|
|
4946
5181
|
);
|
|
4947
5182
|
} else if (item.type === "group") {
|
|
4948
|
-
return /* @__PURE__ */
|
|
5183
|
+
return /* @__PURE__ */ React38.createElement(
|
|
4949
5184
|
NavigationGroup,
|
|
4950
5185
|
{
|
|
4951
5186
|
key: `${item.title}-${index}`,
|
|
@@ -4963,16 +5198,16 @@ function Navigator(props) {
|
|
|
4963
5198
|
Navigator.displayName = "Navigator";
|
|
4964
5199
|
|
|
4965
5200
|
// src/components/PercentageInput/PercentageInput.tsx
|
|
4966
|
-
import
|
|
5201
|
+
import React39, { useCallback as useCallback15, useMemo as useMemo13, useState as useState12 } from "react";
|
|
4967
5202
|
import { NumericFormat as NumericFormat2 } from "react-number-format";
|
|
4968
|
-
import { styled as
|
|
5203
|
+
import { styled as styled25, useThemeProps as useThemeProps8 } from "@mui/joy";
|
|
4969
5204
|
var padDecimal = (value, decimalScale) => {
|
|
4970
5205
|
const [integer, decimal = ""] = `${value}`.split(".");
|
|
4971
5206
|
return Number(`${integer}${decimal.padEnd(decimalScale, "0")}`);
|
|
4972
5207
|
};
|
|
4973
|
-
var TextMaskAdapter9 =
|
|
5208
|
+
var TextMaskAdapter9 = React39.forwardRef(function TextMaskAdapter10(props, ref) {
|
|
4974
5209
|
const { onChange, min, max, ...innerProps } = props;
|
|
4975
|
-
return /* @__PURE__ */
|
|
5210
|
+
return /* @__PURE__ */ React39.createElement(
|
|
4976
5211
|
NumericFormat2,
|
|
4977
5212
|
{
|
|
4978
5213
|
...innerProps,
|
|
@@ -4992,12 +5227,12 @@ var TextMaskAdapter9 = React37.forwardRef(function TextMaskAdapter10(props, ref)
|
|
|
4992
5227
|
}
|
|
4993
5228
|
);
|
|
4994
5229
|
});
|
|
4995
|
-
var PercentageInputRoot =
|
|
5230
|
+
var PercentageInputRoot = styled25(Input_default, {
|
|
4996
5231
|
name: "PercentageInput",
|
|
4997
5232
|
slot: "Root",
|
|
4998
5233
|
overridesResolver: (props, styles) => styles.root
|
|
4999
5234
|
})({});
|
|
5000
|
-
var PercentageInput =
|
|
5235
|
+
var PercentageInput = React39.forwardRef(
|
|
5001
5236
|
function PercentageInput2(inProps, ref) {
|
|
5002
5237
|
const props = useThemeProps8({ props: inProps, name: "PercentageInput" });
|
|
5003
5238
|
const {
|
|
@@ -5020,18 +5255,18 @@ var PercentageInput = React37.forwardRef(
|
|
|
5020
5255
|
const [_value, setValue] = useControlledState(
|
|
5021
5256
|
props.value,
|
|
5022
5257
|
props.defaultValue,
|
|
5023
|
-
|
|
5258
|
+
useCallback15((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
|
|
5024
5259
|
);
|
|
5025
|
-
const [internalError, setInternalError] =
|
|
5260
|
+
const [internalError, setInternalError] = useState12(
|
|
5026
5261
|
max && _value && _value > max || min && _value && _value < min
|
|
5027
5262
|
);
|
|
5028
|
-
const value =
|
|
5263
|
+
const value = useMemo13(() => {
|
|
5029
5264
|
if (_value && useMinorUnit) {
|
|
5030
5265
|
return _value / Math.pow(10, maxDecimalScale);
|
|
5031
5266
|
}
|
|
5032
5267
|
return _value;
|
|
5033
5268
|
}, [_value, useMinorUnit, maxDecimalScale]);
|
|
5034
|
-
const handleChange =
|
|
5269
|
+
const handleChange = useCallback15(
|
|
5035
5270
|
(event) => {
|
|
5036
5271
|
if (event.target.value === "") {
|
|
5037
5272
|
setValue(void 0);
|
|
@@ -5048,7 +5283,7 @@ var PercentageInput = React37.forwardRef(
|
|
|
5048
5283
|
},
|
|
5049
5284
|
[setValue, useMinorUnit, maxDecimalScale, min, max]
|
|
5050
5285
|
);
|
|
5051
|
-
return /* @__PURE__ */
|
|
5286
|
+
return /* @__PURE__ */ React39.createElement(
|
|
5052
5287
|
PercentageInputRoot,
|
|
5053
5288
|
{
|
|
5054
5289
|
...innerProps,
|
|
@@ -5089,30 +5324,30 @@ var RadioGroup = MotionRadioGroup;
|
|
|
5089
5324
|
RadioGroup.displayName = "RadioGroup";
|
|
5090
5325
|
|
|
5091
5326
|
// src/components/RadioList/RadioList.tsx
|
|
5092
|
-
import
|
|
5327
|
+
import React40 from "react";
|
|
5093
5328
|
function RadioList(props) {
|
|
5094
5329
|
const { items, ...innerProps } = props;
|
|
5095
|
-
return /* @__PURE__ */
|
|
5330
|
+
return /* @__PURE__ */ React40.createElement(RadioGroup, { ...innerProps }, items.map((item) => /* @__PURE__ */ React40.createElement(Radio, { key: `${item.value}`, value: item.value, label: item.label })));
|
|
5096
5331
|
}
|
|
5097
5332
|
RadioList.displayName = "RadioList";
|
|
5098
5333
|
|
|
5099
5334
|
// src/components/Stepper/Stepper.tsx
|
|
5100
|
-
import
|
|
5335
|
+
import React41 from "react";
|
|
5101
5336
|
import {
|
|
5102
5337
|
Stepper as JoyStepper,
|
|
5103
5338
|
Step as JoyStep,
|
|
5104
5339
|
StepIndicator as JoyStepIndicator,
|
|
5105
5340
|
stepClasses,
|
|
5106
5341
|
stepIndicatorClasses,
|
|
5107
|
-
styled as
|
|
5342
|
+
styled as styled26
|
|
5108
5343
|
} from "@mui/joy";
|
|
5109
5344
|
import CheckIcon from "@mui/icons-material/Check";
|
|
5110
5345
|
import { motion as motion28 } from "framer-motion";
|
|
5111
|
-
var Step =
|
|
5346
|
+
var Step = styled26(JoyStep)({});
|
|
5112
5347
|
Step.displayName = "Step";
|
|
5113
|
-
var StepIndicator =
|
|
5348
|
+
var StepIndicator = styled26(JoyStepIndicator)({});
|
|
5114
5349
|
StepIndicator.displayName = "StepIndicator";
|
|
5115
|
-
var StyledStepper =
|
|
5350
|
+
var StyledStepper = styled26(JoyStepper)(({ theme }) => ({
|
|
5116
5351
|
"--StepIndicator-size": "24px",
|
|
5117
5352
|
"--Step-gap": theme.spacing(2),
|
|
5118
5353
|
"--joy-palette-success-solidBg": "var(--joy-palette-success-400)",
|
|
@@ -5130,7 +5365,7 @@ function Stepper(props) {
|
|
|
5130
5365
|
inactiveLineColor = "neutral.300",
|
|
5131
5366
|
activeStep
|
|
5132
5367
|
} = props;
|
|
5133
|
-
return /* @__PURE__ */
|
|
5368
|
+
return /* @__PURE__ */ React41.createElement(
|
|
5134
5369
|
MotionStepper,
|
|
5135
5370
|
{
|
|
5136
5371
|
sx: (theme) => ({
|
|
@@ -5164,16 +5399,16 @@ function Stepper(props) {
|
|
|
5164
5399
|
const completed = activeStep > i + 1;
|
|
5165
5400
|
const disabled = activeStep < i + 1;
|
|
5166
5401
|
const hasContent = step.label || step.extraContent;
|
|
5167
|
-
return /* @__PURE__ */
|
|
5402
|
+
return /* @__PURE__ */ React41.createElement(
|
|
5168
5403
|
Step,
|
|
5169
5404
|
{
|
|
5170
5405
|
key: `step-${i}`,
|
|
5171
|
-
indicator: /* @__PURE__ */
|
|
5406
|
+
indicator: /* @__PURE__ */ React41.createElement(StepIndicator, { variant: "solid", color: "primary" }, completed ? /* @__PURE__ */ React41.createElement(CheckIcon, null) : step.indicatorContent),
|
|
5172
5407
|
active,
|
|
5173
5408
|
completed,
|
|
5174
5409
|
disabled
|
|
5175
5410
|
},
|
|
5176
|
-
hasContent && /* @__PURE__ */
|
|
5411
|
+
hasContent && /* @__PURE__ */ React41.createElement(Stack_default, null, step.label && /* @__PURE__ */ React41.createElement(Typography_default, { level: "title-sm" }, step.label), step.extraContent && /* @__PURE__ */ React41.createElement(Typography_default, { level: "body-xs" }, step.extraContent))
|
|
5177
5412
|
);
|
|
5178
5413
|
})
|
|
5179
5414
|
);
|
|
@@ -5181,11 +5416,11 @@ function Stepper(props) {
|
|
|
5181
5416
|
Stepper.displayName = "Stepper";
|
|
5182
5417
|
|
|
5183
5418
|
// src/components/Switch/Switch.tsx
|
|
5184
|
-
import
|
|
5185
|
-
import { Switch as JoySwitch, styled as
|
|
5419
|
+
import React42 from "react";
|
|
5420
|
+
import { Switch as JoySwitch, styled as styled27, switchClasses } from "@mui/joy";
|
|
5186
5421
|
import { motion as motion29 } from "framer-motion";
|
|
5187
5422
|
var MotionSwitch = motion29(JoySwitch);
|
|
5188
|
-
var StyledThumb =
|
|
5423
|
+
var StyledThumb = styled27(motion29.div)({
|
|
5189
5424
|
"--Icon-fontSize": "calc(var(--Switch-thumbSize) * 0.75)",
|
|
5190
5425
|
display: "inline-flex",
|
|
5191
5426
|
justifyContent: "center",
|
|
@@ -5203,14 +5438,14 @@ var StyledThumb = styled26(motion29.div)({
|
|
|
5203
5438
|
right: "var(--Switch-thumbOffset)"
|
|
5204
5439
|
}
|
|
5205
5440
|
});
|
|
5206
|
-
var Thumb = (props) => /* @__PURE__ */
|
|
5441
|
+
var Thumb = (props) => /* @__PURE__ */ React42.createElement(StyledThumb, { ...props, layout: true, transition: spring });
|
|
5207
5442
|
var spring = {
|
|
5208
5443
|
type: "spring",
|
|
5209
5444
|
stiffness: 700,
|
|
5210
5445
|
damping: 30
|
|
5211
5446
|
};
|
|
5212
5447
|
var Switch = (props) => {
|
|
5213
|
-
return /* @__PURE__ */
|
|
5448
|
+
return /* @__PURE__ */ React42.createElement(
|
|
5214
5449
|
MotionSwitch,
|
|
5215
5450
|
{
|
|
5216
5451
|
...props,
|
|
@@ -5224,21 +5459,21 @@ var Switch = (props) => {
|
|
|
5224
5459
|
Switch.displayName = "Switch";
|
|
5225
5460
|
|
|
5226
5461
|
// src/components/Tabs/Tabs.tsx
|
|
5227
|
-
import
|
|
5462
|
+
import React43, { forwardRef as forwardRef11 } from "react";
|
|
5228
5463
|
import {
|
|
5229
5464
|
Tabs as JoyTabs,
|
|
5230
5465
|
Tab as JoyTab,
|
|
5231
5466
|
TabList as JoyTabList,
|
|
5232
5467
|
TabPanel as JoyTabPanel,
|
|
5233
|
-
styled as
|
|
5468
|
+
styled as styled28,
|
|
5234
5469
|
tabClasses
|
|
5235
5470
|
} from "@mui/joy";
|
|
5236
|
-
var StyledTabs =
|
|
5471
|
+
var StyledTabs = styled28(JoyTabs)(({ theme }) => ({
|
|
5237
5472
|
backgroundColor: theme.palette.background.body
|
|
5238
5473
|
}));
|
|
5239
5474
|
var Tabs = StyledTabs;
|
|
5240
5475
|
Tabs.displayName = "Tabs";
|
|
5241
|
-
var StyledTab =
|
|
5476
|
+
var StyledTab = styled28(JoyTab)(({ theme }) => ({
|
|
5242
5477
|
gap: theme.spacing(2),
|
|
5243
5478
|
[`&:not(.${tabClasses.selected})`]: {
|
|
5244
5479
|
color: theme.palette.neutral[700]
|
|
@@ -5248,14 +5483,14 @@ var StyledTab = styled27(JoyTab)(({ theme }) => ({
|
|
|
5248
5483
|
}
|
|
5249
5484
|
}));
|
|
5250
5485
|
var Tab = forwardRef11(function Tab2({ startDecorator, endDecorator, children, ...props }, ref) {
|
|
5251
|
-
return /* @__PURE__ */
|
|
5486
|
+
return /* @__PURE__ */ React43.createElement(StyledTab, { ...props, ref }, startDecorator, children, endDecorator);
|
|
5252
5487
|
});
|
|
5253
5488
|
Tab.displayName = "Tab";
|
|
5254
5489
|
var TabList = JoyTabList;
|
|
5255
5490
|
var TabPanel = JoyTabPanel;
|
|
5256
5491
|
|
|
5257
5492
|
// src/components/ThemeProvider/ThemeProvider.tsx
|
|
5258
|
-
import
|
|
5493
|
+
import React44 from "react";
|
|
5259
5494
|
import {
|
|
5260
5495
|
CssBaseline,
|
|
5261
5496
|
CssVarsProvider,
|
|
@@ -5511,13 +5746,13 @@ var defaultTheme = extendTheme({
|
|
|
5511
5746
|
});
|
|
5512
5747
|
function ThemeProvider(props) {
|
|
5513
5748
|
const theme = props.theme || defaultTheme;
|
|
5514
|
-
return /* @__PURE__ */
|
|
5749
|
+
return /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement(CssVarsProvider, { theme }, /* @__PURE__ */ React44.createElement(CssBaseline, null), props.children));
|
|
5515
5750
|
}
|
|
5516
5751
|
ThemeProvider.displayName = "ThemeProvider";
|
|
5517
5752
|
|
|
5518
5753
|
// src/components/Uploader/Uploader.tsx
|
|
5519
|
-
import
|
|
5520
|
-
import { styled as
|
|
5754
|
+
import React45, { useCallback as useCallback16, useEffect as useEffect11, useMemo as useMemo14, useRef as useRef10, useState as useState13 } from "react";
|
|
5755
|
+
import { styled as styled29, Input as Input2 } from "@mui/joy";
|
|
5521
5756
|
import MuiFileUploadIcon from "@mui/icons-material/CloudUploadRounded";
|
|
5522
5757
|
import MuiUploadFileIcon from "@mui/icons-material/UploadFileRounded";
|
|
5523
5758
|
import MuiClearIcon from "@mui/icons-material/ClearRounded";
|
|
@@ -5539,7 +5774,7 @@ var esmFiles = {
|
|
|
5539
5774
|
"@atlaskit/pragmatic-drag-and-drop/dist/esm/entry-point/prevent-unhandled.js"
|
|
5540
5775
|
)
|
|
5541
5776
|
};
|
|
5542
|
-
var VisuallyHiddenInput =
|
|
5777
|
+
var VisuallyHiddenInput = styled29(Input2)({
|
|
5543
5778
|
width: "1px",
|
|
5544
5779
|
height: "1px",
|
|
5545
5780
|
overflow: "hidden",
|
|
@@ -5548,18 +5783,18 @@ var VisuallyHiddenInput = styled28(Input2)({
|
|
|
5548
5783
|
clipPath: "inset(50%)",
|
|
5549
5784
|
position: "absolute"
|
|
5550
5785
|
});
|
|
5551
|
-
var PreviewRoot =
|
|
5786
|
+
var PreviewRoot = styled29(Stack_default, {
|
|
5552
5787
|
name: "Uploader",
|
|
5553
5788
|
slot: "PreviewRoot"
|
|
5554
5789
|
})({});
|
|
5555
|
-
var UploadCard =
|
|
5790
|
+
var UploadCard = styled29(Card, {
|
|
5556
5791
|
name: "Uploader",
|
|
5557
5792
|
slot: "UploadCard"
|
|
5558
5793
|
})(({ theme }) => ({
|
|
5559
5794
|
padding: theme.spacing(2.5),
|
|
5560
5795
|
border: `1px solid ${theme.palette.neutral.outlinedBorder}`
|
|
5561
5796
|
}));
|
|
5562
|
-
var UploadFileIcon =
|
|
5797
|
+
var UploadFileIcon = styled29(MuiUploadFileIcon, {
|
|
5563
5798
|
name: "Uploader",
|
|
5564
5799
|
slot: "UploadFileIcon"
|
|
5565
5800
|
})(({ theme }) => ({
|
|
@@ -5567,7 +5802,7 @@ var UploadFileIcon = styled28(MuiUploadFileIcon, {
|
|
|
5567
5802
|
width: "32px",
|
|
5568
5803
|
height: "32px"
|
|
5569
5804
|
}));
|
|
5570
|
-
var ClearIcon2 =
|
|
5805
|
+
var ClearIcon2 = styled29(MuiClearIcon, {
|
|
5571
5806
|
name: "Uploader",
|
|
5572
5807
|
slot: "ClearIcon"
|
|
5573
5808
|
})(({ theme }) => ({
|
|
@@ -5593,15 +5828,15 @@ var getFileSize = (n) => {
|
|
|
5593
5828
|
};
|
|
5594
5829
|
var Preview = (props) => {
|
|
5595
5830
|
const { files, uploaded, onDelete } = props;
|
|
5596
|
-
return /* @__PURE__ */
|
|
5831
|
+
return /* @__PURE__ */ React45.createElement(PreviewRoot, { gap: 1 }, [...uploaded, ...files].map((file) => /* @__PURE__ */ React45.createElement(UploadCard, { key: file.name, size: "sm", color: "neutral" }, /* @__PURE__ */ React45.createElement(Stack_default, { direction: "row", alignItems: "center", gap: 2 }, /* @__PURE__ */ React45.createElement(UploadFileIcon, null), /* @__PURE__ */ React45.createElement(Stack_default, { flex: "1" }, /* @__PURE__ */ React45.createElement(Typography_default, { level: "body-sm", textColor: "common.black" }, file.name), !!file.size && /* @__PURE__ */ React45.createElement(Typography_default, { level: "body-xs", fontWeight: "300", lineHeight: "1.33", textColor: "text.tertiary" }, getFileSize(file.size))), /* @__PURE__ */ React45.createElement(IconButton_default, { onClick: () => onDelete?.(file) }, /* @__PURE__ */ React45.createElement(ClearIcon2, null))))));
|
|
5597
5832
|
};
|
|
5598
|
-
var UploaderRoot =
|
|
5833
|
+
var UploaderRoot = styled29(Stack_default, {
|
|
5599
5834
|
name: "Uploader",
|
|
5600
5835
|
slot: "root"
|
|
5601
5836
|
})(({ theme }) => ({
|
|
5602
5837
|
gap: theme.spacing(2)
|
|
5603
5838
|
}));
|
|
5604
|
-
var FileDropZone =
|
|
5839
|
+
var FileDropZone = styled29(Sheet_default, {
|
|
5605
5840
|
name: "Uploader",
|
|
5606
5841
|
slot: "dropZone",
|
|
5607
5842
|
shouldForwardProp: (prop) => prop !== "error"
|
|
@@ -5617,7 +5852,7 @@ var FileDropZone = styled28(Sheet_default, {
|
|
|
5617
5852
|
backgroundColor: theme.palette.background.surface,
|
|
5618
5853
|
border: error ? `1px solid ${theme.palette.danger.outlinedBorder}` : state === "idle" ? `1px solid ${theme.palette.neutral.outlinedBorder}` : `1px solid ${theme.palette.primary.outlinedBorder}`
|
|
5619
5854
|
}));
|
|
5620
|
-
var UploaderIcon =
|
|
5855
|
+
var UploaderIcon = styled29(MuiFileUploadIcon, {
|
|
5621
5856
|
name: "Uploader",
|
|
5622
5857
|
slot: "iconContainer",
|
|
5623
5858
|
shouldForwardProp: (prop) => prop !== "error"
|
|
@@ -5626,7 +5861,7 @@ var UploaderIcon = styled28(MuiFileUploadIcon, {
|
|
|
5626
5861
|
width: "32px",
|
|
5627
5862
|
height: "32px"
|
|
5628
5863
|
}));
|
|
5629
|
-
var Uploader =
|
|
5864
|
+
var Uploader = React45.memo(
|
|
5630
5865
|
(props) => {
|
|
5631
5866
|
const {
|
|
5632
5867
|
accept,
|
|
@@ -5641,14 +5876,14 @@ var Uploader = React43.memo(
|
|
|
5641
5876
|
disabled,
|
|
5642
5877
|
onDelete
|
|
5643
5878
|
} = props;
|
|
5644
|
-
const dropZoneRef =
|
|
5645
|
-
const inputRef =
|
|
5646
|
-
const [errorText, setErrorText] =
|
|
5647
|
-
const [files, setFiles] =
|
|
5648
|
-
const [uploaded, setUploaded] =
|
|
5649
|
-
const [previewState, setPreviewState] =
|
|
5650
|
-
const accepts =
|
|
5651
|
-
const parsedAccepts =
|
|
5879
|
+
const dropZoneRef = useRef10(null);
|
|
5880
|
+
const inputRef = useRef10(null);
|
|
5881
|
+
const [errorText, setErrorText] = useState13();
|
|
5882
|
+
const [files, setFiles] = useState13([]);
|
|
5883
|
+
const [uploaded, setUploaded] = useState13(props.uploaded || []);
|
|
5884
|
+
const [previewState, setPreviewState] = useState13("idle");
|
|
5885
|
+
const accepts = useMemo14(() => accept.split(",").map((accept2) => accept2.trim()), [accept]);
|
|
5886
|
+
const parsedAccepts = useMemo14(
|
|
5652
5887
|
() => accepts.flatMap((type) => {
|
|
5653
5888
|
if (["image/*", "video/*", "audio/*"].includes(type)) {
|
|
5654
5889
|
return ALL_EXTENSIONS_BY_TYPE[type];
|
|
@@ -5657,7 +5892,7 @@ var Uploader = React43.memo(
|
|
|
5657
5892
|
}),
|
|
5658
5893
|
[accepts]
|
|
5659
5894
|
);
|
|
5660
|
-
const helperText =
|
|
5895
|
+
const helperText = useMemo14(() => {
|
|
5661
5896
|
const [allAcceptedTypes, acceptedTypes] = [
|
|
5662
5897
|
accepts.filter((accept2) => ["image/*", "video/*", "audio/*"].includes(accept2)).map((accept2) => {
|
|
5663
5898
|
const [type] = accept2.split("/");
|
|
@@ -5684,12 +5919,12 @@ var Uploader = React43.memo(
|
|
|
5684
5919
|
}
|
|
5685
5920
|
return helperTexts.join(", ");
|
|
5686
5921
|
}, [accepts, maxFileTotalSize, maxCount]);
|
|
5687
|
-
const error =
|
|
5688
|
-
const showDropZone =
|
|
5922
|
+
const error = useMemo14(() => !!errorText || props.error, [props.error, errorText]);
|
|
5923
|
+
const showDropZone = useMemo14(
|
|
5689
5924
|
() => !maxCount || maxCount && [...uploaded, ...files].length !== maxCount,
|
|
5690
5925
|
[files, maxCount, uploaded]
|
|
5691
5926
|
);
|
|
5692
|
-
const addFiles =
|
|
5927
|
+
const addFiles = useCallback16(
|
|
5693
5928
|
(uploads) => {
|
|
5694
5929
|
try {
|
|
5695
5930
|
const types = parsedAccepts.map((type) => type.replace(".", "")) || [];
|
|
@@ -5734,7 +5969,7 @@ var Uploader = React43.memo(
|
|
|
5734
5969
|
},
|
|
5735
5970
|
[files, uploaded, maxCount, parsedAccepts, maxFileSize, maxFileTotalSize, name, onChange]
|
|
5736
5971
|
);
|
|
5737
|
-
|
|
5972
|
+
useEffect11(() => {
|
|
5738
5973
|
if (!dropZoneRef.current || disabled) {
|
|
5739
5974
|
return;
|
|
5740
5975
|
}
|
|
@@ -5772,7 +6007,7 @@ var Uploader = React43.memo(
|
|
|
5772
6007
|
);
|
|
5773
6008
|
return () => cleanup?.();
|
|
5774
6009
|
}, [disabled, addFiles]);
|
|
5775
|
-
|
|
6010
|
+
useEffect11(() => {
|
|
5776
6011
|
if (inputRef.current && minCount) {
|
|
5777
6012
|
if (files.length < minCount) {
|
|
5778
6013
|
inputRef.current.setCustomValidity(`At least ${minCount} files are required.`);
|
|
@@ -5781,14 +6016,14 @@ var Uploader = React43.memo(
|
|
|
5781
6016
|
}
|
|
5782
6017
|
}
|
|
5783
6018
|
}, [inputRef, files, minCount]);
|
|
5784
|
-
const handleFileChanged =
|
|
6019
|
+
const handleFileChanged = useCallback16(
|
|
5785
6020
|
(event) => {
|
|
5786
6021
|
const files2 = Array.from(event.target.files || []);
|
|
5787
6022
|
addFiles(files2);
|
|
5788
6023
|
},
|
|
5789
6024
|
[addFiles]
|
|
5790
6025
|
);
|
|
5791
|
-
const handleDeleteFile =
|
|
6026
|
+
const handleDeleteFile = useCallback16(
|
|
5792
6027
|
(deletedFile) => {
|
|
5793
6028
|
if (deletedFile instanceof File) {
|
|
5794
6029
|
setFiles((current) => {
|
|
@@ -5808,10 +6043,10 @@ var Uploader = React43.memo(
|
|
|
5808
6043
|
},
|
|
5809
6044
|
[name, onChange, onDelete]
|
|
5810
6045
|
);
|
|
5811
|
-
const handleUploaderButtonClick =
|
|
6046
|
+
const handleUploaderButtonClick = useCallback16(() => {
|
|
5812
6047
|
inputRef.current?.click();
|
|
5813
6048
|
}, []);
|
|
5814
|
-
const uploader = /* @__PURE__ */
|
|
6049
|
+
const uploader = /* @__PURE__ */ React45.createElement(
|
|
5815
6050
|
FileDropZone,
|
|
5816
6051
|
{
|
|
5817
6052
|
state: previewState,
|
|
@@ -5819,8 +6054,8 @@ var Uploader = React43.memo(
|
|
|
5819
6054
|
ref: dropZoneRef,
|
|
5820
6055
|
onClick: handleUploaderButtonClick
|
|
5821
6056
|
},
|
|
5822
|
-
/* @__PURE__ */
|
|
5823
|
-
/* @__PURE__ */
|
|
6057
|
+
/* @__PURE__ */ React45.createElement(Stack_default, { alignItems: "center", gap: 1 }, /* @__PURE__ */ React45.createElement(UploaderIcon, { state: previewState, error: !!(error || errorText) })),
|
|
6058
|
+
/* @__PURE__ */ React45.createElement(
|
|
5824
6059
|
VisuallyHiddenInput,
|
|
5825
6060
|
{
|
|
5826
6061
|
disabled,
|
|
@@ -5843,7 +6078,7 @@ var Uploader = React43.memo(
|
|
|
5843
6078
|
}
|
|
5844
6079
|
)
|
|
5845
6080
|
);
|
|
5846
|
-
return /* @__PURE__ */
|
|
6081
|
+
return /* @__PURE__ */ React45.createElement(UploaderRoot, null, showDropZone && /* @__PURE__ */ React45.createElement(FormControl_default, { size, error: !!(error || errorText), disabled, required: !!minCount }, label && /* @__PURE__ */ React45.createElement(FormLabel_default, null, label), uploader, /* @__PURE__ */ React45.createElement(FormHelperText_default, null, /* @__PURE__ */ React45.createElement(Stack_default, null, errorText && /* @__PURE__ */ React45.createElement("div", null, errorText), /* @__PURE__ */ React45.createElement("div", null, helperText)))), [...uploaded, ...files].length > 0 && /* @__PURE__ */ React45.createElement(Preview, { files, uploaded, onDelete: handleDeleteFile }));
|
|
5847
6082
|
}
|
|
5848
6083
|
);
|
|
5849
6084
|
Uploader.displayName = "Uploader";
|
|
@@ -6007,7 +6242,7 @@ export {
|
|
|
6007
6242
|
stepButtonClasses,
|
|
6008
6243
|
stepClasses2 as stepClasses,
|
|
6009
6244
|
stepperClasses,
|
|
6010
|
-
|
|
6245
|
+
styled30 as styled,
|
|
6011
6246
|
switchClasses2 as switchClasses,
|
|
6012
6247
|
tabListClasses,
|
|
6013
6248
|
tabPanelClasses,
|