@ceed/ads 1.25.1-next.3 → 1.27.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/chunks/rehype-accent-FZRUD7VI.js +39 -0
- package/dist/components/CurrencyInput/CurrencyInput.d.ts +1 -1
- package/dist/components/CurrencyInput/hooks/use-currency-setting.d.ts +2 -2
- package/dist/components/DataTable/components.d.ts +2 -1
- package/dist/components/DataTable/hooks.d.ts +1 -1
- package/dist/components/DataTable/styled.d.ts +3 -1
- package/dist/components/DataTable/types.d.ts +11 -0
- package/dist/components/DataTable/utils.d.ts +2 -2
- package/dist/components/ProfileMenu/ProfileMenu.d.ts +1 -1
- package/dist/components/data-display/Badge.md +71 -39
- package/dist/components/data-display/DataTable.md +177 -1
- package/dist/components/data-display/InfoSign.md +74 -98
- package/dist/components/data-display/Typography.md +363 -97
- package/dist/components/feedback/CircularProgress.md +257 -0
- package/dist/components/feedback/Dialog.md +76 -62
- package/dist/components/feedback/Modal.md +259 -44
- package/dist/components/feedback/Skeleton.md +280 -0
- package/dist/components/feedback/llms.txt +2 -0
- package/dist/components/inputs/Autocomplete.md +356 -107
- package/dist/components/inputs/ButtonGroup.md +115 -106
- package/dist/components/inputs/Calendar.md +98 -459
- package/dist/components/inputs/CurrencyInput.md +183 -5
- package/dist/components/inputs/DatePicker.md +108 -431
- package/dist/components/inputs/DateRangePicker.md +131 -492
- package/dist/components/inputs/FilterMenu.md +169 -19
- package/dist/components/inputs/FilterableCheckboxGroup.md +123 -23
- package/dist/components/inputs/FormControl.md +361 -0
- package/dist/components/inputs/IconButton.md +137 -88
- package/dist/components/inputs/Input.md +5 -0
- package/dist/components/inputs/MonthPicker.md +95 -422
- package/dist/components/inputs/MonthRangePicker.md +89 -466
- package/dist/components/inputs/PercentageInput.md +185 -16
- package/dist/components/inputs/RadioButton.md +163 -35
- package/dist/components/inputs/RadioList.md +241 -0
- package/dist/components/inputs/RadioTileGroup.md +150 -61
- package/dist/components/inputs/Select.md +222 -326
- package/dist/components/inputs/Slider.md +334 -0
- package/dist/components/inputs/Switch.md +136 -376
- package/dist/components/inputs/Textarea.md +213 -10
- package/dist/components/inputs/Uploader/Uploader.md +145 -66
- package/dist/components/inputs/llms.txt +3 -0
- package/dist/components/navigation/Breadcrumbs.md +80 -322
- package/dist/components/navigation/Dropdown.md +92 -221
- package/dist/components/navigation/IconMenuButton.md +40 -502
- package/dist/components/navigation/InsetDrawer.md +68 -738
- package/dist/components/navigation/Link.md +39 -298
- package/dist/components/navigation/Menu.md +92 -285
- package/dist/components/navigation/MenuButton.md +55 -448
- package/dist/components/navigation/Pagination.md +47 -338
- package/dist/components/navigation/ProfileMenu.md +45 -268
- package/dist/components/navigation/Stepper.md +160 -28
- package/dist/components/navigation/Tabs.md +57 -316
- package/dist/components/surfaces/Sheet.md +151 -334
- package/dist/guides/ThemeProvider.md +116 -0
- package/dist/guides/llms.txt +9 -0
- package/dist/index.browser.js +16 -18
- package/dist/index.browser.js.map +4 -4
- package/dist/index.cjs +381 -244
- package/dist/index.js +459 -378
- package/dist/llms.txt +8 -0
- package/framer/index.js +1 -166
- package/package.json +15 -16
package/dist/index.js
CHANGED
|
@@ -1,59 +1,3 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
-
var __esm = (fn, res) => function __init() {
|
|
4
|
-
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
5
|
-
};
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
// src/libs/rehype-accent/index.ts
|
|
12
|
-
var rehype_accent_exports = {};
|
|
13
|
-
__export(rehype_accent_exports, {
|
|
14
|
-
rehypeAccent: () => rehypeAccent
|
|
15
|
-
});
|
|
16
|
-
import { visit } from "unist-util-visit";
|
|
17
|
-
function rehypeAccent(options) {
|
|
18
|
-
const { accentColor } = options;
|
|
19
|
-
return (tree) => {
|
|
20
|
-
visit(tree, "text", (node, index, parent) => {
|
|
21
|
-
const value = node.value;
|
|
22
|
-
const regex = /\|\|.*?\|\|/g;
|
|
23
|
-
let match;
|
|
24
|
-
let lastIndex = 0;
|
|
25
|
-
const newNodes = [];
|
|
26
|
-
while ((match = regex.exec(value)) !== null) {
|
|
27
|
-
if (match.index > lastIndex) {
|
|
28
|
-
newNodes.push({
|
|
29
|
-
type: "text",
|
|
30
|
-
value: value.slice(lastIndex, match.index)
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
const innerText = match[0].split("||")[1];
|
|
34
|
-
newNodes.push({
|
|
35
|
-
type: "element",
|
|
36
|
-
tagName: "span",
|
|
37
|
-
properties: { textColor: accentColor },
|
|
38
|
-
children: [{ type: "text", value: innerText }]
|
|
39
|
-
});
|
|
40
|
-
lastIndex = match.index + match[0].length;
|
|
41
|
-
}
|
|
42
|
-
if (lastIndex < value.length) {
|
|
43
|
-
newNodes.push({ type: "text", value: value.slice(lastIndex) });
|
|
44
|
-
}
|
|
45
|
-
if (newNodes.length) {
|
|
46
|
-
parent.children.splice(index, 1, ...newNodes);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
var init_rehype_accent = __esm({
|
|
52
|
-
"src/libs/rehype-accent/index.ts"() {
|
|
53
|
-
"use strict";
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
|
|
57
1
|
// src/index.ts
|
|
58
2
|
import {
|
|
59
3
|
useTheme as useTheme2,
|
|
@@ -749,11 +693,24 @@ Button.displayName = "Button";
|
|
|
749
693
|
var Button_default = Button;
|
|
750
694
|
|
|
751
695
|
// src/components/Calendar/Calendar.tsx
|
|
752
|
-
import
|
|
696
|
+
import React12, { Fragment, forwardRef as forwardRef4, useCallback as useCallback5, useEffect as useEffect3, useMemo as useMemo4, useRef as useRef3, useState as useState4 } from "react";
|
|
753
697
|
import { styled as styled5 } from "@mui/joy";
|
|
754
698
|
import ChevronLeftIcon from "@mui/icons-material/ChevronLeft";
|
|
755
699
|
import ChevronRightIcon from "@mui/icons-material/ChevronRight";
|
|
756
|
-
import { AnimatePresence, motion as
|
|
700
|
+
import { AnimatePresence, motion as motion13 } from "framer-motion";
|
|
701
|
+
|
|
702
|
+
// src/components/Tooltip/Tooltip.tsx
|
|
703
|
+
import React10 from "react";
|
|
704
|
+
import { Tooltip as JoyTooltip } from "@mui/joy";
|
|
705
|
+
import { motion as motion12 } from "framer-motion";
|
|
706
|
+
var MotionTooltip = motion12(JoyTooltip);
|
|
707
|
+
var Tooltip = (props) => {
|
|
708
|
+
return /* @__PURE__ */ React10.createElement(MotionTooltip, { ...props });
|
|
709
|
+
};
|
|
710
|
+
Tooltip.displayName = "Tooltip";
|
|
711
|
+
|
|
712
|
+
// src/components/Tooltip/index.ts
|
|
713
|
+
var Tooltip_default = Tooltip;
|
|
757
714
|
|
|
758
715
|
// src/components/Calendar/utils/index.ts
|
|
759
716
|
var getCalendarDates = (date) => {
|
|
@@ -1112,6 +1069,12 @@ var useCalendar = (ownerState) => {
|
|
|
1112
1069
|
};
|
|
1113
1070
|
|
|
1114
1071
|
// src/components/Calendar/Calendar.tsx
|
|
1072
|
+
var MONTH_VIEW_HINT_MESSAGE = "Click the month title to view all months.";
|
|
1073
|
+
var MONTH_NAV_CLICK_WINDOW_MS = 1200;
|
|
1074
|
+
var MONTH_NAV_CLICK_THRESHOLD = 3;
|
|
1075
|
+
var MONTH_VIEW_HINT_DURATION_MS = 5e3;
|
|
1076
|
+
var MONTH_VIEW_HINT_COOLDOWN_MS = 3e4;
|
|
1077
|
+
var lastMonthViewAssistHintShownAt = 0;
|
|
1115
1078
|
var CalendarRoot = styled5("div", {
|
|
1116
1079
|
name: "Calendar",
|
|
1117
1080
|
slot: "root"
|
|
@@ -1138,7 +1101,7 @@ var CalendarViewContainer = styled5("div", {
|
|
|
1138
1101
|
overflow: "hidden",
|
|
1139
1102
|
minHeight: calendarType === "datePicker" ? "250px" : "unset"
|
|
1140
1103
|
}));
|
|
1141
|
-
var CalendarViewTable = styled5(
|
|
1104
|
+
var CalendarViewTable = styled5(motion13.table, {
|
|
1142
1105
|
name: "Calendar",
|
|
1143
1106
|
slot: "viewTable"
|
|
1144
1107
|
})(({ theme }) => ({
|
|
@@ -1318,7 +1281,7 @@ var PickerDays = (props) => {
|
|
|
1318
1281
|
const { getPickerDayProps, getDayCellProps } = useCalendar(ownerState);
|
|
1319
1282
|
const calendarDates = useMemo4(() => getCalendarDates(ownerState.viewMonth), [ownerState.viewMonth]);
|
|
1320
1283
|
const weekdayNames = useMemo4(() => getWeekdayNames(ownerState.locale || "default"), [ownerState.locale]);
|
|
1321
|
-
return /* @__PURE__ */
|
|
1284
|
+
return /* @__PURE__ */ React12.createElement(CalendarViewContainer, { calendarType: "datePicker" }, /* @__PURE__ */ React12.createElement(AnimatePresence, { initial: false, custom: ownerState.direction }, /* @__PURE__ */ React12.createElement(
|
|
1322
1285
|
CalendarViewTable,
|
|
1323
1286
|
{
|
|
1324
1287
|
key: `${ownerState.viewMonth.toString()}_${ownerState.direction}`,
|
|
@@ -1347,10 +1310,10 @@ var PickerDays = (props) => {
|
|
|
1347
1310
|
}
|
|
1348
1311
|
}
|
|
1349
1312
|
},
|
|
1350
|
-
/* @__PURE__ */
|
|
1351
|
-
/* @__PURE__ */
|
|
1352
|
-
(date, i) => date ? /* @__PURE__ */
|
|
1353
|
-
)), rowIndex < calendarDates.length - 1 && /* @__PURE__ */
|
|
1313
|
+
/* @__PURE__ */ React12.createElement(CalendarWeekHeaderContainer, null, /* @__PURE__ */ React12.createElement("tr", null, weekdayNames.map((name, i) => /* @__PURE__ */ React12.createElement(Fragment, { key: `${ownerState.viewMonth}_${name}_${i}` }, /* @__PURE__ */ React12.createElement("th", null, /* @__PURE__ */ React12.createElement(Typography_default, { level: "body-xs", textAlign: "center" }, name)), i < 6 && /* @__PURE__ */ React12.createElement("th", { style: { width: 4 }, "aria-hidden": "true", "aria-description": "cell-gap" }))))),
|
|
1314
|
+
/* @__PURE__ */ React12.createElement(CalendarDayPickerContainer, null, calendarDates.map((weekDates, rowIndex) => /* @__PURE__ */ React12.createElement(Fragment, { key: `${ownerState.viewMonth}_${rowIndex}` }, /* @__PURE__ */ React12.createElement("tr", null, weekDates.map(
|
|
1315
|
+
(date, i) => date ? /* @__PURE__ */ React12.createElement(Fragment, { key: `${ownerState.viewMonth}_${date}_${i}` }, /* @__PURE__ */ React12.createElement(CalendarDayCell, { ...getDayCellProps(date) }, /* @__PURE__ */ React12.createElement(CalendarDay, { size: "sm", variant: "plain", color: "neutral", ...getPickerDayProps(date) }, date)), i < 6 && /* @__PURE__ */ React12.createElement("td", { "aria-hidden": "true", "aria-description": "cell-gap" })) : /* @__PURE__ */ React12.createElement(Fragment, { key: `${ownerState.viewMonth}_${i}` }, /* @__PURE__ */ React12.createElement("td", null), i < 6 && /* @__PURE__ */ React12.createElement("td", { "aria-hidden": "true", "aria-description": "cell-gap" }))
|
|
1316
|
+
)), rowIndex < calendarDates.length - 1 && /* @__PURE__ */ React12.createElement("tr", { "aria-hidden": "true", "aria-description": "row-gap" }, /* @__PURE__ */ React12.createElement("td", { colSpan: 13, style: { height: 4 } })))))
|
|
1354
1317
|
)));
|
|
1355
1318
|
};
|
|
1356
1319
|
var PickerMonths = (props) => {
|
|
@@ -1367,7 +1330,7 @@ var PickerMonths = (props) => {
|
|
|
1367
1330
|
[[]]
|
|
1368
1331
|
);
|
|
1369
1332
|
const isMonthPicker = !ownerState.views?.find((view) => view === "day");
|
|
1370
|
-
return /* @__PURE__ */
|
|
1333
|
+
return /* @__PURE__ */ React12.createElement(CalendarViewContainer, { calendarType: isMonthPicker ? "monthPicker" : "datePicker" }, /* @__PURE__ */ React12.createElement(AnimatePresence, { initial: false, custom: ownerState.direction }, /* @__PURE__ */ React12.createElement(
|
|
1371
1334
|
CalendarViewTable,
|
|
1372
1335
|
{
|
|
1373
1336
|
key: `${ownerState.viewMonth.getFullYear()}_${ownerState.direction}`,
|
|
@@ -1396,7 +1359,7 @@ var PickerMonths = (props) => {
|
|
|
1396
1359
|
}
|
|
1397
1360
|
}
|
|
1398
1361
|
},
|
|
1399
|
-
/* @__PURE__ */
|
|
1362
|
+
/* @__PURE__ */ React12.createElement("tbody", null, chunkedMonths.map((months, i) => /* @__PURE__ */ React12.createElement(Fragment, { key: months.join("_") }, /* @__PURE__ */ React12.createElement("tr", null, months.map((monthIndex, j) => /* @__PURE__ */ React12.createElement(Fragment, { key: monthIndex }, /* @__PURE__ */ React12.createElement(CalendarMonthCell, { ...getMonthCellProps(monthIndex) }, /* @__PURE__ */ React12.createElement(CalendarMonth, { size: "sm", variant: "plain", color: "neutral", ...getPickerMonthProps(monthIndex) }, getMonthNameFromIndex(monthIndex, ownerState.locale))), j < 3 && /* @__PURE__ */ React12.createElement("td", { style: { width: 4 }, "aria-hidden": "true", "aria-description": "cell-gap" })))), i < chunkedMonths.length - 1 && /* @__PURE__ */ React12.createElement("tr", { "aria-hidden": "true", "aria-description": "row-gap" }, /* @__PURE__ */ React12.createElement("td", { colSpan: 7, style: { height: 4 } })))))
|
|
1400
1363
|
)));
|
|
1401
1364
|
};
|
|
1402
1365
|
var Calendar = forwardRef4((inProps, ref) => {
|
|
@@ -1418,17 +1381,96 @@ var Calendar = forwardRef4((inProps, ref) => {
|
|
|
1418
1381
|
...others
|
|
1419
1382
|
} = props;
|
|
1420
1383
|
const { calendarTitle, onPrev, onNext } = useCalendar(ownerState);
|
|
1421
|
-
|
|
1422
|
-
|
|
1384
|
+
const [isMonthViewAssistHintOpen, setIsMonthViewAssistHintOpen] = useState4(false);
|
|
1385
|
+
const monthNavClickTimestampsRef = useRef3([]);
|
|
1386
|
+
const monthViewAssistHintShownInSessionRef = useRef3(false);
|
|
1387
|
+
const monthViewAssistHintTimeoutRef = useRef3(null);
|
|
1388
|
+
const hasEndDate = Boolean(value?.[1]);
|
|
1389
|
+
const isRangeHintEligible = Boolean(rangeSelection && !hasEndDate);
|
|
1390
|
+
const isHintEligible = Boolean(view === "day" && (!rangeSelection || isRangeHintEligible));
|
|
1391
|
+
const monthViewHintMessage = MONTH_VIEW_HINT_MESSAGE;
|
|
1392
|
+
useEffect3(() => {
|
|
1393
|
+
if (!isHintEligible) {
|
|
1394
|
+
monthNavClickTimestampsRef.current = [];
|
|
1395
|
+
setIsMonthViewAssistHintOpen(false);
|
|
1396
|
+
}
|
|
1397
|
+
}, [isHintEligible]);
|
|
1398
|
+
useEffect3(() => {
|
|
1399
|
+
return () => {
|
|
1400
|
+
if (monthViewAssistHintTimeoutRef.current) {
|
|
1401
|
+
clearTimeout(monthViewAssistHintTimeoutRef.current);
|
|
1402
|
+
}
|
|
1403
|
+
};
|
|
1404
|
+
}, []);
|
|
1405
|
+
const closeMonthViewAssistHint = useCallback5(() => {
|
|
1406
|
+
if (monthViewAssistHintTimeoutRef.current) {
|
|
1407
|
+
clearTimeout(monthViewAssistHintTimeoutRef.current);
|
|
1408
|
+
monthViewAssistHintTimeoutRef.current = null;
|
|
1409
|
+
}
|
|
1410
|
+
setIsMonthViewAssistHintOpen(false);
|
|
1411
|
+
}, []);
|
|
1412
|
+
const showMonthViewAssistHint = useCallback5(() => {
|
|
1413
|
+
const now = Date.now();
|
|
1414
|
+
if (monthViewAssistHintShownInSessionRef.current) return;
|
|
1415
|
+
if (now - lastMonthViewAssistHintShownAt < MONTH_VIEW_HINT_COOLDOWN_MS) return;
|
|
1416
|
+
monthViewAssistHintShownInSessionRef.current = true;
|
|
1417
|
+
lastMonthViewAssistHintShownAt = now;
|
|
1418
|
+
setIsMonthViewAssistHintOpen(true);
|
|
1419
|
+
if (monthViewAssistHintTimeoutRef.current) {
|
|
1420
|
+
clearTimeout(monthViewAssistHintTimeoutRef.current);
|
|
1421
|
+
}
|
|
1422
|
+
monthViewAssistHintTimeoutRef.current = setTimeout(() => {
|
|
1423
|
+
setIsMonthViewAssistHintOpen(false);
|
|
1424
|
+
monthViewAssistHintTimeoutRef.current = null;
|
|
1425
|
+
}, MONTH_VIEW_HINT_DURATION_MS);
|
|
1426
|
+
}, []);
|
|
1427
|
+
const trackFastMonthNavigation = useCallback5(() => {
|
|
1428
|
+
if (!isHintEligible) return;
|
|
1429
|
+
const now = Date.now();
|
|
1430
|
+
monthNavClickTimestampsRef.current = [
|
|
1431
|
+
...monthNavClickTimestampsRef.current.filter((timestamp) => now - timestamp <= MONTH_NAV_CLICK_WINDOW_MS),
|
|
1432
|
+
now
|
|
1433
|
+
];
|
|
1434
|
+
if (monthNavClickTimestampsRef.current.length >= MONTH_NAV_CLICK_THRESHOLD) {
|
|
1435
|
+
showMonthViewAssistHint();
|
|
1436
|
+
}
|
|
1437
|
+
}, [isHintEligible, showMonthViewAssistHint]);
|
|
1438
|
+
const handlePrevClick = useCallback5(() => {
|
|
1439
|
+
onPrev();
|
|
1440
|
+
trackFastMonthNavigation();
|
|
1441
|
+
}, [onPrev, trackFastMonthNavigation]);
|
|
1442
|
+
const handleNextClick = useCallback5(() => {
|
|
1443
|
+
onNext();
|
|
1444
|
+
trackFastMonthNavigation();
|
|
1445
|
+
}, [onNext, trackFastMonthNavigation]);
|
|
1446
|
+
const handleSwitchViewClick = useCallback5(() => {
|
|
1447
|
+
closeMonthViewAssistHint();
|
|
1448
|
+
onViewChange?.();
|
|
1449
|
+
}, [closeMonthViewAssistHint, onViewChange]);
|
|
1450
|
+
return /* @__PURE__ */ React12.createElement(CalendarRoot, { ref, ...others }, /* @__PURE__ */ React12.createElement(CalendarHeader, null, /* @__PURE__ */ React12.createElement(IconButton_default, { size: "sm", onClick: handlePrevClick, "aria-label": `Previous ${view === "day" ? "Month" : "Year"}` }, /* @__PURE__ */ React12.createElement(ChevronLeftIcon, null)), /* @__PURE__ */ React12.createElement(
|
|
1451
|
+
Tooltip_default,
|
|
1423
1452
|
{
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1453
|
+
title: monthViewHintMessage,
|
|
1454
|
+
arrow: true,
|
|
1455
|
+
open: isMonthViewAssistHintOpen,
|
|
1456
|
+
placement: "bottom",
|
|
1457
|
+
disableFocusListener: true,
|
|
1458
|
+
disableHoverListener: true,
|
|
1459
|
+
disableTouchListener: true,
|
|
1460
|
+
variant: "solid"
|
|
1429
1461
|
},
|
|
1430
|
-
|
|
1431
|
-
|
|
1462
|
+
/* @__PURE__ */ React12.createElement(
|
|
1463
|
+
CalendarSwitchViewButton,
|
|
1464
|
+
{
|
|
1465
|
+
ownerState,
|
|
1466
|
+
variant: "plain",
|
|
1467
|
+
color: "neutral",
|
|
1468
|
+
onClick: handleSwitchViewClick,
|
|
1469
|
+
"aria-label": "Switch Calendar View"
|
|
1470
|
+
},
|
|
1471
|
+
calendarTitle
|
|
1472
|
+
)
|
|
1473
|
+
), /* @__PURE__ */ React12.createElement(IconButton_default, { size: "sm", onClick: handleNextClick, "aria-label": `Next ${view === "day" ? "Month" : "Year"}` }, /* @__PURE__ */ React12.createElement(ChevronRightIcon, null))), view === "day" && /* @__PURE__ */ React12.createElement(PickerDays, { ownerState }), view === "month" && /* @__PURE__ */ React12.createElement(PickerMonths, { ownerState }));
|
|
1432
1474
|
});
|
|
1433
1475
|
Calendar.displayName = "Calendar";
|
|
1434
1476
|
|
|
@@ -1443,30 +1485,30 @@ import {
|
|
|
1443
1485
|
CardActions as JoyCardActions,
|
|
1444
1486
|
CardOverflow as JoyCardOverflow
|
|
1445
1487
|
} from "@mui/joy";
|
|
1446
|
-
import { motion as
|
|
1447
|
-
var MotionCard =
|
|
1488
|
+
import { motion as motion14 } from "framer-motion";
|
|
1489
|
+
var MotionCard = motion14(JoyCard);
|
|
1448
1490
|
var Card = MotionCard;
|
|
1449
1491
|
Card.displayName = "Card";
|
|
1450
|
-
var MotionCardContent =
|
|
1492
|
+
var MotionCardContent = motion14(JoyCardContent);
|
|
1451
1493
|
var CardContent = MotionCardContent;
|
|
1452
1494
|
CardContent.displayName = "CardContent";
|
|
1453
|
-
var MotionCardCover =
|
|
1495
|
+
var MotionCardCover = motion14(JoyCardCover);
|
|
1454
1496
|
var CardCover = MotionCardCover;
|
|
1455
1497
|
CardCover.displayName = "CardCover";
|
|
1456
|
-
var MotionCardActions =
|
|
1498
|
+
var MotionCardActions = motion14(JoyCardActions);
|
|
1457
1499
|
var CardActions = MotionCardActions;
|
|
1458
1500
|
CardActions.displayName = "CardActions";
|
|
1459
|
-
var MotionCardOverflow =
|
|
1501
|
+
var MotionCardOverflow = motion14(JoyCardOverflow);
|
|
1460
1502
|
var CardOverflow = MotionCardOverflow;
|
|
1461
1503
|
CardOverflow.displayName = "CardOverflow";
|
|
1462
1504
|
|
|
1463
1505
|
// src/components/Checkbox/Checkbox.tsx
|
|
1464
|
-
import
|
|
1506
|
+
import React13 from "react";
|
|
1465
1507
|
import { Checkbox as JoyCheckbox } from "@mui/joy";
|
|
1466
|
-
import { motion as
|
|
1467
|
-
var MotionCheckbox =
|
|
1508
|
+
import { motion as motion15 } from "framer-motion";
|
|
1509
|
+
var MotionCheckbox = motion15(JoyCheckbox);
|
|
1468
1510
|
var Checkbox = (props) => {
|
|
1469
|
-
return /* @__PURE__ */
|
|
1511
|
+
return /* @__PURE__ */ React13.createElement(MotionCheckbox, { ...props });
|
|
1470
1512
|
};
|
|
1471
1513
|
Checkbox.displayName = "Checkbox";
|
|
1472
1514
|
|
|
@@ -1475,7 +1517,7 @@ var Checkbox_default = Checkbox;
|
|
|
1475
1517
|
|
|
1476
1518
|
// src/components/Container/Container.tsx
|
|
1477
1519
|
import { styled as styled6 } from "@mui/joy";
|
|
1478
|
-
import
|
|
1520
|
+
import React14, { forwardRef as forwardRef5 } from "react";
|
|
1479
1521
|
var ContainerRoot = styled6("div", {
|
|
1480
1522
|
name: "Container",
|
|
1481
1523
|
slot: "root",
|
|
@@ -1502,24 +1544,23 @@ var ContainerRoot = styled6("div", {
|
|
|
1502
1544
|
} : null
|
|
1503
1545
|
]);
|
|
1504
1546
|
var Container = forwardRef5(function Container2(props, ref) {
|
|
1505
|
-
return /* @__PURE__ */
|
|
1547
|
+
return /* @__PURE__ */ React14.createElement(ContainerRoot, { ref, ...props });
|
|
1506
1548
|
});
|
|
1507
1549
|
Container.displayName = "Container";
|
|
1508
1550
|
|
|
1509
1551
|
// src/components/CurrencyInput/CurrencyInput.tsx
|
|
1510
|
-
import
|
|
1511
|
-
import { IntlMessageFormat as IntlMessageFormat2 } from "intl-messageformat";
|
|
1552
|
+
import React16, { useCallback as useCallback7, useMemo as useMemo5, useState as useState6 } from "react";
|
|
1512
1553
|
import { NumericFormat } from "react-number-format";
|
|
1513
1554
|
|
|
1514
1555
|
// src/components/Input/Input.tsx
|
|
1515
|
-
import
|
|
1556
|
+
import React15, { useCallback as useCallback6, useState as useState5 } from "react";
|
|
1516
1557
|
import { Input as JoyInput } from "@mui/joy";
|
|
1517
|
-
import { motion as
|
|
1558
|
+
import { motion as motion16 } from "framer-motion";
|
|
1518
1559
|
import ClearIcon from "@mui/icons-material/Close";
|
|
1519
1560
|
import VisibilityIcon from "@mui/icons-material/Visibility";
|
|
1520
1561
|
import VisibilityOffIcon from "@mui/icons-material/VisibilityOff";
|
|
1521
|
-
var MotionInput =
|
|
1522
|
-
var Input =
|
|
1562
|
+
var MotionInput = motion16(JoyInput);
|
|
1563
|
+
var Input = React15.forwardRef((props, ref) => {
|
|
1523
1564
|
const {
|
|
1524
1565
|
label,
|
|
1525
1566
|
helperText,
|
|
@@ -1542,11 +1583,11 @@ var Input = React14.forwardRef((props, ref) => {
|
|
|
1542
1583
|
if (type === "password" && innerProps.endDecorator) {
|
|
1543
1584
|
console.warn('Input: endDecorator is not supported when type="password"');
|
|
1544
1585
|
}
|
|
1545
|
-
const [passwordVisible, setPasswordVisible] =
|
|
1586
|
+
const [passwordVisible, setPasswordVisible] = useState5(false);
|
|
1546
1587
|
const [value, setValue] = useControlledState(
|
|
1547
1588
|
props.value,
|
|
1548
1589
|
props.defaultValue,
|
|
1549
|
-
|
|
1590
|
+
useCallback6(
|
|
1550
1591
|
(value2) => {
|
|
1551
1592
|
onChange?.({
|
|
1552
1593
|
/**
|
|
@@ -1572,7 +1613,7 @@ var Input = React14.forwardRef((props, ref) => {
|
|
|
1572
1613
|
const actualType = type === "password" && passwordVisible ? "text" : type;
|
|
1573
1614
|
const isPasswordType = type === "password";
|
|
1574
1615
|
const showPasswordToggle = isPasswordType && !disableTogglePasswordButton;
|
|
1575
|
-
const input = /* @__PURE__ */
|
|
1616
|
+
const input = /* @__PURE__ */ React15.createElement(
|
|
1576
1617
|
MotionInput,
|
|
1577
1618
|
{
|
|
1578
1619
|
value,
|
|
@@ -1587,7 +1628,7 @@ var Input = React14.forwardRef((props, ref) => {
|
|
|
1587
1628
|
...innerProps.slotProps
|
|
1588
1629
|
},
|
|
1589
1630
|
...innerProps,
|
|
1590
|
-
endDecorator: isPasswordType ? showPasswordToggle ? /* @__PURE__ */
|
|
1631
|
+
endDecorator: isPasswordType ? showPasswordToggle ? /* @__PURE__ */ React15.createElement(Stack_default, { gap: 1, direction: "row" }, /* @__PURE__ */ React15.createElement(
|
|
1591
1632
|
IconButton_default,
|
|
1592
1633
|
{
|
|
1593
1634
|
onMouseDown: (e) => e.preventDefault(),
|
|
@@ -1595,19 +1636,19 @@ var Input = React14.forwardRef((props, ref) => {
|
|
|
1595
1636
|
disabled,
|
|
1596
1637
|
"aria-label": passwordVisible ? "Hide password" : "Show password"
|
|
1597
1638
|
},
|
|
1598
|
-
passwordVisible ? /* @__PURE__ */
|
|
1599
|
-
)) : null : enableClearable ? /* @__PURE__ */
|
|
1639
|
+
passwordVisible ? /* @__PURE__ */ React15.createElement(VisibilityOffIcon, null) : /* @__PURE__ */ React15.createElement(VisibilityIcon, null)
|
|
1640
|
+
)) : null : enableClearable ? /* @__PURE__ */ React15.createElement(Stack_default, { gap: 1, direction: "row" }, innerProps.endDecorator, value && /* @__PURE__ */ React15.createElement(
|
|
1600
1641
|
IconButton_default,
|
|
1601
1642
|
{
|
|
1602
1643
|
onMouseDown: (e) => e.preventDefault(),
|
|
1603
1644
|
onClick: handleClear,
|
|
1604
1645
|
"aria-label": "Clear"
|
|
1605
1646
|
},
|
|
1606
|
-
/* @__PURE__ */
|
|
1647
|
+
/* @__PURE__ */ React15.createElement(ClearIcon, null)
|
|
1607
1648
|
)) : innerProps.endDecorator
|
|
1608
1649
|
}
|
|
1609
1650
|
);
|
|
1610
|
-
return /* @__PURE__ */
|
|
1651
|
+
return /* @__PURE__ */ React15.createElement(
|
|
1611
1652
|
FormControl_default,
|
|
1612
1653
|
{
|
|
1613
1654
|
required,
|
|
@@ -1618,9 +1659,9 @@ var Input = React14.forwardRef((props, ref) => {
|
|
|
1618
1659
|
sx,
|
|
1619
1660
|
className
|
|
1620
1661
|
},
|
|
1621
|
-
label && /* @__PURE__ */
|
|
1662
|
+
label && /* @__PURE__ */ React15.createElement(FormLabel_default, null, label),
|
|
1622
1663
|
input,
|
|
1623
|
-
helperText && /* @__PURE__ */
|
|
1664
|
+
helperText && /* @__PURE__ */ React15.createElement(FormHelperText_default, null, helperText)
|
|
1624
1665
|
);
|
|
1625
1666
|
});
|
|
1626
1667
|
Input.displayName = "Input";
|
|
@@ -1632,7 +1673,6 @@ var Input_default = Input;
|
|
|
1632
1673
|
import { styled as styled7, useThemeProps as useThemeProps3 } from "@mui/joy";
|
|
1633
1674
|
|
|
1634
1675
|
// src/components/CurrencyInput/hooks/use-currency-setting.ts
|
|
1635
|
-
import IntlMessageFormat from "intl-messageformat";
|
|
1636
1676
|
var CURRENCY_DECIMAL_MAP = {
|
|
1637
1677
|
AED: 2,
|
|
1638
1678
|
ALL: 2,
|
|
@@ -1777,9 +1817,10 @@ var CURRENCY_DECIMAL_MAP = {
|
|
|
1777
1817
|
};
|
|
1778
1818
|
var useCurrencySetting = (props) => {
|
|
1779
1819
|
const { currency = "USD", placeholder } = props;
|
|
1780
|
-
const
|
|
1781
|
-
|
|
1782
|
-
|
|
1820
|
+
const parts = new Intl.NumberFormat("en-US", { style: "currency", currency }).formatToParts(1000.01);
|
|
1821
|
+
const symbol = parts.find((p) => p.type === "currency")?.value ?? "$";
|
|
1822
|
+
const thousandSeparator = parts.find((p) => p.type === "group")?.value ?? ",";
|
|
1823
|
+
const decimalSeparator = parts.find((p) => p.type === "decimal")?.value;
|
|
1783
1824
|
const decimalScale = CURRENCY_DECIMAL_MAP[currency];
|
|
1784
1825
|
return {
|
|
1785
1826
|
symbol: `${symbol} `,
|
|
@@ -1792,9 +1833,9 @@ var useCurrencySetting = (props) => {
|
|
|
1792
1833
|
};
|
|
1793
1834
|
|
|
1794
1835
|
// src/components/CurrencyInput/CurrencyInput.tsx
|
|
1795
|
-
var TextMaskAdapter =
|
|
1836
|
+
var TextMaskAdapter = React16.forwardRef(function TextMaskAdapter2(props, ref) {
|
|
1796
1837
|
const { onChange, ...innerProps } = props;
|
|
1797
|
-
return /* @__PURE__ */
|
|
1838
|
+
return /* @__PURE__ */ React16.createElement(
|
|
1798
1839
|
NumericFormat,
|
|
1799
1840
|
{
|
|
1800
1841
|
...innerProps,
|
|
@@ -1814,7 +1855,7 @@ var CurrencyInputRoot = styled7(Input_default, {
|
|
|
1814
1855
|
slot: "root",
|
|
1815
1856
|
overridesResolver: (props, styles) => styles.root
|
|
1816
1857
|
})({});
|
|
1817
|
-
var CurrencyInput =
|
|
1858
|
+
var CurrencyInput = React16.forwardRef(function CurrencyInput2(inProps, ref) {
|
|
1818
1859
|
const props = useThemeProps3({ props: inProps, name: "CurrencyInput" });
|
|
1819
1860
|
const {
|
|
1820
1861
|
currency = "USD",
|
|
@@ -1835,7 +1876,7 @@ var CurrencyInput = React15.forwardRef(function CurrencyInput2(inProps, ref) {
|
|
|
1835
1876
|
const [_value, setValue] = useControlledState(
|
|
1836
1877
|
props.value,
|
|
1837
1878
|
props.defaultValue,
|
|
1838
|
-
|
|
1879
|
+
useCallback7((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
|
|
1839
1880
|
);
|
|
1840
1881
|
const value = useMemo5(() => {
|
|
1841
1882
|
if (_value && useMinorUnit) {
|
|
@@ -1849,14 +1890,14 @@ var CurrencyInput = React15.forwardRef(function CurrencyInput2(inProps, ref) {
|
|
|
1849
1890
|
}
|
|
1850
1891
|
return props.max;
|
|
1851
1892
|
}, [props.max, useMinorUnit, decimalScale]);
|
|
1852
|
-
const [isOverLimit, setIsOverLimit] =
|
|
1853
|
-
const handleChange =
|
|
1893
|
+
const [isOverLimit, setIsOverLimit] = useState6(!!max && !!value && value > max);
|
|
1894
|
+
const handleChange = useCallback7(
|
|
1854
1895
|
(event) => {
|
|
1855
1896
|
if (event.target.value === "") {
|
|
1856
1897
|
setValue(void 0);
|
|
1857
1898
|
return;
|
|
1858
1899
|
}
|
|
1859
|
-
const amount = useMinorUnit ? Number(event.target.value?.replace(decimalSeparator, "")) : Number(event.target.value);
|
|
1900
|
+
const amount = useMinorUnit ? Number(decimalSeparator ? event.target.value?.replace(decimalSeparator, "") : event.target.value) : Number(event.target.value);
|
|
1860
1901
|
if (!!max && Number(event.target.value) > max) {
|
|
1861
1902
|
setIsOverLimit(true);
|
|
1862
1903
|
} else {
|
|
@@ -1866,7 +1907,7 @@ var CurrencyInput = React15.forwardRef(function CurrencyInput2(inProps, ref) {
|
|
|
1866
1907
|
},
|
|
1867
1908
|
[decimalSeparator, max, useMinorUnit, setValue]
|
|
1868
1909
|
);
|
|
1869
|
-
return /* @__PURE__ */
|
|
1910
|
+
return /* @__PURE__ */ React16.createElement(
|
|
1870
1911
|
CurrencyInputRoot,
|
|
1871
1912
|
{
|
|
1872
1913
|
...innerProps,
|
|
@@ -1879,9 +1920,7 @@ var CurrencyInput = React15.forwardRef(function CurrencyInput2(inProps, ref) {
|
|
|
1879
1920
|
required,
|
|
1880
1921
|
color: error || isOverLimit ? "danger" : props.color,
|
|
1881
1922
|
label,
|
|
1882
|
-
helperText: isOverLimit ?
|
|
1883
|
-
amount: max
|
|
1884
|
-
}) : helperText,
|
|
1923
|
+
helperText: isOverLimit ? `limit: ${new Intl.NumberFormat("en-US", { style: "currency", currency }).format(max)}` : helperText,
|
|
1885
1924
|
slotProps: {
|
|
1886
1925
|
input: {
|
|
1887
1926
|
component: TextMaskAdapter,
|
|
@@ -1906,9 +1945,9 @@ var CurrencyInput_default = CurrencyInput;
|
|
|
1906
1945
|
|
|
1907
1946
|
// src/components/DataTable/DataTable.tsx
|
|
1908
1947
|
import React25, {
|
|
1909
|
-
useCallback as
|
|
1948
|
+
useCallback as useCallback12,
|
|
1910
1949
|
useMemo as useMemo10,
|
|
1911
|
-
useRef as
|
|
1950
|
+
useRef as useRef7,
|
|
1912
1951
|
useId,
|
|
1913
1952
|
forwardRef as forwardRef7,
|
|
1914
1953
|
useImperativeHandle as useImperativeHandle2,
|
|
@@ -1961,14 +2000,15 @@ function reorderColumnsByGroupingModel(columns, columnGroupingModel) {
|
|
|
1961
2000
|
}
|
|
1962
2001
|
return reorderedColumns;
|
|
1963
2002
|
}
|
|
1964
|
-
function flattenColumnGroups(items, groupPath = [], columnIndex = { current: 0 }) {
|
|
2003
|
+
function flattenColumnGroups(items, groupPath = [], columnIndex = { current: 0 }, visibleFields) {
|
|
1965
2004
|
const result = [];
|
|
1966
2005
|
for (const item of items) {
|
|
1967
2006
|
if ("groupId" in item) {
|
|
1968
2007
|
const newPath = [...groupPath, item.groupId];
|
|
1969
2008
|
const children = Array.isArray(item.children) ? item.children : [item.children];
|
|
1970
|
-
result.push(...flattenColumnGroups(children, newPath, columnIndex));
|
|
2009
|
+
result.push(...flattenColumnGroups(children, newPath, columnIndex, visibleFields));
|
|
1971
2010
|
} else {
|
|
2011
|
+
if (visibleFields && !visibleFields.has(item.field)) continue;
|
|
1972
2012
|
result.push({
|
|
1973
2013
|
...item,
|
|
1974
2014
|
groupPath,
|
|
@@ -1978,9 +2018,9 @@ function flattenColumnGroups(items, groupPath = [], columnIndex = { current: 0 }
|
|
|
1978
2018
|
}
|
|
1979
2019
|
return result;
|
|
1980
2020
|
}
|
|
1981
|
-
function calculateColumnGroups(columnGroupingModel, columns) {
|
|
2021
|
+
function calculateColumnGroups(columnGroupingModel, columns, visibleFields) {
|
|
1982
2022
|
const fieldsInGroupingModel = extractFieldsFromGroupingModel(columnGroupingModel);
|
|
1983
|
-
const flattenedColumns = flattenColumnGroups(columnGroupingModel);
|
|
2023
|
+
const flattenedColumns = flattenColumnGroups(columnGroupingModel, [], { current: 0 }, visibleFields);
|
|
1984
2024
|
const columnIndexMap = new Map(flattenedColumns.map((col) => [col.field, col.columnIndex]));
|
|
1985
2025
|
const processedGroups = /* @__PURE__ */ new Map();
|
|
1986
2026
|
const groupsByLevel = [];
|
|
@@ -2028,7 +2068,9 @@ function calculateColumnGroups(columnGroupingModel, columns) {
|
|
|
2028
2068
|
groupsByLevel.forEach((level) => {
|
|
2029
2069
|
level.sort((a, b) => a.startIndex - b.startIndex);
|
|
2030
2070
|
});
|
|
2031
|
-
|
|
2071
|
+
const filteredGroupsByLevel = groupsByLevel.map((level) => level.filter((g) => g.colspan > 0)).filter((level) => level.length > 0);
|
|
2072
|
+
const correctedMaxLevel = filteredGroupsByLevel.length > 0 ? filteredGroupsByLevel.length - 1 : -1;
|
|
2073
|
+
return { groups: filteredGroupsByLevel, maxLevel: correctedMaxLevel, fieldsInGroupingModel };
|
|
2032
2074
|
}
|
|
2033
2075
|
function getTextAlign(props) {
|
|
2034
2076
|
return !props.editMode && ["number", "date", "currency"].includes(props.type || "") ? "end" : "start";
|
|
@@ -2036,18 +2078,28 @@ function getTextAlign(props) {
|
|
|
2036
2078
|
var numberFormatter = (value) => "Intl" in window ? new Intl.NumberFormat().format(value) : value;
|
|
2037
2079
|
|
|
2038
2080
|
// src/components/DataTable/styled.tsx
|
|
2039
|
-
import
|
|
2081
|
+
import React17 from "react";
|
|
2040
2082
|
import { styled as styled8, LinearProgress, buttonClasses, iconButtonClasses } from "@mui/joy";
|
|
2041
|
-
import { motion as
|
|
2083
|
+
import { motion as motion17 } from "framer-motion";
|
|
2042
2084
|
import SortIcon from "@mui/icons-material/ArrowUpwardRounded";
|
|
2043
2085
|
var EllipsisDiv = styled8("div", {
|
|
2044
2086
|
name: "DataTable",
|
|
2045
|
-
slot: "textEllipsis"
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2087
|
+
slot: "textEllipsis",
|
|
2088
|
+
shouldForwardProp: (prop) => prop !== "lineClamp"
|
|
2089
|
+
})(
|
|
2090
|
+
({ lineClamp }) => lineClamp && lineClamp > 1 ? {
|
|
2091
|
+
overflow: "hidden",
|
|
2092
|
+
display: "-webkit-box !important",
|
|
2093
|
+
WebkitBoxOrient: "vertical",
|
|
2094
|
+
WebkitLineClamp: lineClamp,
|
|
2095
|
+
whiteSpace: "normal",
|
|
2096
|
+
overflowWrap: "anywhere"
|
|
2097
|
+
} : {
|
|
2098
|
+
overflow: "hidden",
|
|
2099
|
+
textOverflow: "ellipsis",
|
|
2100
|
+
whiteSpace: "nowrap"
|
|
2101
|
+
}
|
|
2102
|
+
);
|
|
2051
2103
|
var OverlayWrapper = styled8("tr", {
|
|
2052
2104
|
name: "DataTable",
|
|
2053
2105
|
slot: "overlayWrapper"
|
|
@@ -2112,7 +2164,7 @@ var Asterisk = styled8("span", {
|
|
|
2112
2164
|
color: "var(--ceed-palette-danger-500)",
|
|
2113
2165
|
marginLeft: theme.spacing(0.5)
|
|
2114
2166
|
}));
|
|
2115
|
-
var StyledTh = styled8(
|
|
2167
|
+
var StyledTh = styled8(motion17.th)(({ theme }) => ({
|
|
2116
2168
|
boxShadow: "1px 0 var(--TableCell-borderColor)"
|
|
2117
2169
|
}));
|
|
2118
2170
|
var StyledTd = styled8("td")(({ theme }) => ({
|
|
@@ -2131,9 +2183,9 @@ var StyledTd = styled8("td")(({ theme }) => ({
|
|
|
2131
2183
|
}
|
|
2132
2184
|
}
|
|
2133
2185
|
}));
|
|
2134
|
-
var MotionSortIcon =
|
|
2135
|
-
var DefaultLoadingOverlay = () => /* @__PURE__ */
|
|
2136
|
-
var Resizer = (ref, targetRef = ref) => /* @__PURE__ */
|
|
2186
|
+
var MotionSortIcon = motion17(SortIcon);
|
|
2187
|
+
var DefaultLoadingOverlay = () => /* @__PURE__ */ React17.createElement(LinearProgress, { value: 8, variant: "plain" });
|
|
2188
|
+
var Resizer = (ref, targetRef = ref) => /* @__PURE__ */ React17.createElement(
|
|
2137
2189
|
Box_default,
|
|
2138
2190
|
{
|
|
2139
2191
|
sx: {
|
|
@@ -2166,12 +2218,12 @@ var Resizer = (ref, targetRef = ref) => /* @__PURE__ */ React16.createElement(
|
|
|
2166
2218
|
|
|
2167
2219
|
// src/components/DataTable/components.tsx
|
|
2168
2220
|
import React22, {
|
|
2169
|
-
useRef as
|
|
2170
|
-
useState as
|
|
2221
|
+
useRef as useRef5,
|
|
2222
|
+
useState as useState8,
|
|
2171
2223
|
useLayoutEffect,
|
|
2172
2224
|
useMemo as useMemo8,
|
|
2173
|
-
useCallback as
|
|
2174
|
-
useEffect as
|
|
2225
|
+
useCallback as useCallback9,
|
|
2226
|
+
useEffect as useEffect5,
|
|
2175
2227
|
memo,
|
|
2176
2228
|
createElement
|
|
2177
2229
|
} from "react";
|
|
@@ -2179,7 +2231,7 @@ import { styled as styled12, useTheme } from "@mui/joy";
|
|
|
2179
2231
|
import { AnimatePresence as AnimatePresence2 } from "framer-motion";
|
|
2180
2232
|
|
|
2181
2233
|
// src/components/DatePicker/DatePicker.tsx
|
|
2182
|
-
import
|
|
2234
|
+
import React18, { forwardRef as forwardRef6, useCallback as useCallback8, useEffect as useEffect4, useImperativeHandle, useRef as useRef4, useState as useState7 } from "react";
|
|
2183
2235
|
import { IMaskInput, IMask } from "react-imask";
|
|
2184
2236
|
import CalendarTodayIcon from "@mui/icons-material/CalendarToday";
|
|
2185
2237
|
import { styled as styled10, useThemeProps as useThemeProps4 } from "@mui/joy";
|
|
@@ -2194,8 +2246,8 @@ var Sheet_default = Sheet;
|
|
|
2194
2246
|
|
|
2195
2247
|
// src/components/DialogActions/DialogActions.tsx
|
|
2196
2248
|
import { DialogActions as JoyDialogActions, styled as styled9 } from "@mui/joy";
|
|
2197
|
-
import { motion as
|
|
2198
|
-
var MotionDialogActions =
|
|
2249
|
+
import { motion as motion18 } from "framer-motion";
|
|
2250
|
+
var MotionDialogActions = motion18(JoyDialogActions);
|
|
2199
2251
|
var StyledDialogActions = styled9(MotionDialogActions)(({ theme }) => ({
|
|
2200
2252
|
padding: theme.spacing(2),
|
|
2201
2253
|
gap: theme.spacing(2),
|
|
@@ -2291,9 +2343,9 @@ function parseDate(dateString, format) {
|
|
|
2291
2343
|
var formatToPattern = (format) => {
|
|
2292
2344
|
return format.replace(/YYYY/g, "Y").replace(/MM/g, "M").replace(/DD/g, "D").replace(/[^YMD\s]/g, (match) => `${match}\``);
|
|
2293
2345
|
};
|
|
2294
|
-
var TextMaskAdapter3 =
|
|
2346
|
+
var TextMaskAdapter3 = React18.forwardRef(function TextMaskAdapter4(props, ref) {
|
|
2295
2347
|
const { onChange, format, ...other } = props;
|
|
2296
|
-
return /* @__PURE__ */
|
|
2348
|
+
return /* @__PURE__ */ React18.createElement(
|
|
2297
2349
|
IMaskInput,
|
|
2298
2350
|
{
|
|
2299
2351
|
...other,
|
|
@@ -2353,24 +2405,24 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2353
2405
|
shouldDisableDate,
|
|
2354
2406
|
...innerProps
|
|
2355
2407
|
} = props;
|
|
2356
|
-
const innerRef =
|
|
2357
|
-
const buttonRef =
|
|
2408
|
+
const innerRef = useRef4(null);
|
|
2409
|
+
const buttonRef = useRef4(null);
|
|
2358
2410
|
const [value, setValue] = useControlledState(
|
|
2359
2411
|
props.value,
|
|
2360
2412
|
props.defaultValue || "",
|
|
2361
|
-
|
|
2413
|
+
useCallback8((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
|
|
2362
2414
|
);
|
|
2363
|
-
const [displayValue, setDisplayValue] =
|
|
2415
|
+
const [displayValue, setDisplayValue] = useState7(
|
|
2364
2416
|
() => value ? formatValueString(parseDate(value, format), displayFormat) : ""
|
|
2365
2417
|
);
|
|
2366
|
-
const [anchorEl, setAnchorEl] =
|
|
2418
|
+
const [anchorEl, setAnchorEl] = useState7(null);
|
|
2367
2419
|
const open = Boolean(anchorEl);
|
|
2368
|
-
|
|
2420
|
+
useEffect4(() => {
|
|
2369
2421
|
if (!anchorEl) {
|
|
2370
2422
|
innerRef.current?.blur();
|
|
2371
2423
|
}
|
|
2372
2424
|
}, [anchorEl, innerRef]);
|
|
2373
|
-
|
|
2425
|
+
useEffect4(() => {
|
|
2374
2426
|
if (value === "") {
|
|
2375
2427
|
setDisplayValue("");
|
|
2376
2428
|
return;
|
|
@@ -2381,7 +2433,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2381
2433
|
}
|
|
2382
2434
|
}, [displayFormat, displayValue, format, value]);
|
|
2383
2435
|
useImperativeHandle(ref, () => innerRef.current, [innerRef]);
|
|
2384
|
-
const handleChange =
|
|
2436
|
+
const handleChange = useCallback8(
|
|
2385
2437
|
(event) => {
|
|
2386
2438
|
const value2 = event.target.value;
|
|
2387
2439
|
setDisplayValue(value2 ? formatValueString(parseDate(value2, format), displayFormat) : value2);
|
|
@@ -2389,7 +2441,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2389
2441
|
},
|
|
2390
2442
|
[displayFormat, format, setValue]
|
|
2391
2443
|
);
|
|
2392
|
-
const handleDisplayInputChange =
|
|
2444
|
+
const handleDisplayInputChange = useCallback8(
|
|
2393
2445
|
(event) => {
|
|
2394
2446
|
if (event.target.value === "") {
|
|
2395
2447
|
handleChange({
|
|
@@ -2414,7 +2466,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2414
2466
|
},
|
|
2415
2467
|
[displayFormat, format, handleChange, props.name]
|
|
2416
2468
|
);
|
|
2417
|
-
const handleCalendarToggle =
|
|
2469
|
+
const handleCalendarToggle = useCallback8(
|
|
2418
2470
|
(event) => {
|
|
2419
2471
|
setAnchorEl(anchorEl ? null : event.currentTarget);
|
|
2420
2472
|
setTimeout(() => {
|
|
@@ -2423,7 +2475,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2423
2475
|
},
|
|
2424
2476
|
[anchorEl, setAnchorEl, innerRef]
|
|
2425
2477
|
);
|
|
2426
|
-
const handleInputMouseDown =
|
|
2478
|
+
const handleInputMouseDown = useCallback8(
|
|
2427
2479
|
(event) => {
|
|
2428
2480
|
if (inputReadOnly) {
|
|
2429
2481
|
event.preventDefault();
|
|
@@ -2432,7 +2484,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2432
2484
|
},
|
|
2433
2485
|
[inputReadOnly, buttonRef]
|
|
2434
2486
|
);
|
|
2435
|
-
return /* @__PURE__ */
|
|
2487
|
+
return /* @__PURE__ */ React18.createElement(DatePickerRoot, null, /* @__PURE__ */ React18.createElement(FocusTrap, { open: true }, /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(
|
|
2436
2488
|
Input_default,
|
|
2437
2489
|
{
|
|
2438
2490
|
...innerProps,
|
|
@@ -2460,7 +2512,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2460
2512
|
},
|
|
2461
2513
|
className,
|
|
2462
2514
|
sx,
|
|
2463
|
-
endDecorator: /* @__PURE__ */
|
|
2515
|
+
endDecorator: /* @__PURE__ */ React18.createElement(
|
|
2464
2516
|
CalendarButton,
|
|
2465
2517
|
{
|
|
2466
2518
|
ref: buttonRef,
|
|
@@ -2472,13 +2524,13 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2472
2524
|
"aria-expanded": open,
|
|
2473
2525
|
disabled
|
|
2474
2526
|
},
|
|
2475
|
-
/* @__PURE__ */
|
|
2527
|
+
/* @__PURE__ */ React18.createElement(CalendarTodayIcon, null)
|
|
2476
2528
|
),
|
|
2477
2529
|
label,
|
|
2478
2530
|
helperText,
|
|
2479
2531
|
readOnly: readOnly || inputReadOnly
|
|
2480
2532
|
}
|
|
2481
|
-
), open && /* @__PURE__ */
|
|
2533
|
+
), open && /* @__PURE__ */ React18.createElement(ClickAwayListener, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React18.createElement(
|
|
2482
2534
|
StyledPopper,
|
|
2483
2535
|
{
|
|
2484
2536
|
id: "date-picker-popper",
|
|
@@ -2497,7 +2549,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2497
2549
|
"aria-label": "Calendar Tooltip",
|
|
2498
2550
|
"aria-expanded": open
|
|
2499
2551
|
},
|
|
2500
|
-
/* @__PURE__ */
|
|
2552
|
+
/* @__PURE__ */ React18.createElement(CalendarSheet, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React18.createElement(
|
|
2501
2553
|
Calendar_default,
|
|
2502
2554
|
{
|
|
2503
2555
|
value: value && !Number.isNaN(parseDate(value, format).getTime()) ? [parseDate(value, format), void 0] : void 0,
|
|
@@ -2516,14 +2568,14 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2516
2568
|
disablePast,
|
|
2517
2569
|
shouldDisableDate: shouldDisableDate ? (date) => shouldDisableDate(formatValueString(date, format)) : void 0
|
|
2518
2570
|
}
|
|
2519
|
-
), !hideClearButton && /* @__PURE__ */
|
|
2571
|
+
), !hideClearButton && /* @__PURE__ */ React18.createElement(
|
|
2520
2572
|
DialogActions_default,
|
|
2521
2573
|
{
|
|
2522
2574
|
sx: {
|
|
2523
2575
|
p: 1
|
|
2524
2576
|
}
|
|
2525
2577
|
},
|
|
2526
|
-
/* @__PURE__ */
|
|
2578
|
+
/* @__PURE__ */ React18.createElement(
|
|
2527
2579
|
Button_default,
|
|
2528
2580
|
{
|
|
2529
2581
|
size,
|
|
@@ -2549,10 +2601,10 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2549
2601
|
var DatePicker_default = DatePicker;
|
|
2550
2602
|
|
|
2551
2603
|
// src/components/Textarea/Textarea.tsx
|
|
2552
|
-
import
|
|
2604
|
+
import React19 from "react";
|
|
2553
2605
|
import { Textarea as JoyTextarea } from "@mui/joy";
|
|
2554
|
-
import { motion as
|
|
2555
|
-
var MotionTextarea =
|
|
2606
|
+
import { motion as motion19 } from "framer-motion";
|
|
2607
|
+
var MotionTextarea = motion19(JoyTextarea);
|
|
2556
2608
|
var Textarea = (props) => {
|
|
2557
2609
|
const {
|
|
2558
2610
|
label,
|
|
@@ -2569,7 +2621,7 @@ var Textarea = (props) => {
|
|
|
2569
2621
|
className,
|
|
2570
2622
|
...innerProps
|
|
2571
2623
|
} = props;
|
|
2572
|
-
const textarea = /* @__PURE__ */
|
|
2624
|
+
const textarea = /* @__PURE__ */ React19.createElement(
|
|
2573
2625
|
MotionTextarea,
|
|
2574
2626
|
{
|
|
2575
2627
|
required,
|
|
@@ -2581,7 +2633,7 @@ var Textarea = (props) => {
|
|
|
2581
2633
|
...innerProps
|
|
2582
2634
|
}
|
|
2583
2635
|
);
|
|
2584
|
-
return /* @__PURE__ */
|
|
2636
|
+
return /* @__PURE__ */ React19.createElement(
|
|
2585
2637
|
FormControl_default,
|
|
2586
2638
|
{
|
|
2587
2639
|
required,
|
|
@@ -2592,9 +2644,9 @@ var Textarea = (props) => {
|
|
|
2592
2644
|
sx,
|
|
2593
2645
|
className
|
|
2594
2646
|
},
|
|
2595
|
-
label && /* @__PURE__ */
|
|
2647
|
+
label && /* @__PURE__ */ React19.createElement(FormLabel_default, null, label),
|
|
2596
2648
|
textarea,
|
|
2597
|
-
helperText && /* @__PURE__ */
|
|
2649
|
+
helperText && /* @__PURE__ */ React19.createElement(FormHelperText_default, null, helperText)
|
|
2598
2650
|
);
|
|
2599
2651
|
};
|
|
2600
2652
|
Textarea.displayName = "Textarea";
|
|
@@ -2603,10 +2655,10 @@ Textarea.displayName = "Textarea";
|
|
|
2603
2655
|
var Textarea_default = Textarea;
|
|
2604
2656
|
|
|
2605
2657
|
// src/components/Select/Select.tsx
|
|
2606
|
-
import
|
|
2658
|
+
import React20, { useMemo as useMemo7 } from "react";
|
|
2607
2659
|
import { Select as JoySelect, Option as JoyOption, ListItemContent as ListItemContent2, Typography as Typography3 } from "@mui/joy";
|
|
2608
|
-
import { motion as
|
|
2609
|
-
var MotionOption =
|
|
2660
|
+
import { motion as motion20 } from "framer-motion";
|
|
2661
|
+
var MotionOption = motion20(JoyOption);
|
|
2610
2662
|
var Option = MotionOption;
|
|
2611
2663
|
var secondaryTextLevelMap2 = {
|
|
2612
2664
|
sm: "body-xs",
|
|
@@ -2661,7 +2713,7 @@ function Select(props) {
|
|
|
2661
2713
|
});
|
|
2662
2714
|
return map;
|
|
2663
2715
|
}, [options]);
|
|
2664
|
-
const select = /* @__PURE__ */
|
|
2716
|
+
const select = /* @__PURE__ */ React20.createElement(
|
|
2665
2717
|
JoySelect,
|
|
2666
2718
|
{
|
|
2667
2719
|
...innerProps,
|
|
@@ -2678,9 +2730,9 @@ function Select(props) {
|
|
|
2678
2730
|
return optionMap.get(selected.value)?.label;
|
|
2679
2731
|
}
|
|
2680
2732
|
},
|
|
2681
|
-
options.map((option) => /* @__PURE__ */
|
|
2733
|
+
options.map((option) => /* @__PURE__ */ React20.createElement(Option, { key: option.value, value: option.value, disabled: option.disabled }, option.secondaryText ? /* @__PURE__ */ React20.createElement(ListItemContent2, { sx: { gap: 0.5 } }, /* @__PURE__ */ React20.createElement(Typography3, { level: "inherit" }, option.label), /* @__PURE__ */ React20.createElement(Typography3, { level: secondaryTextLevelMap2[size ?? "md"], textColor: "text.tertiary" }, option.secondaryText)) : option.label))
|
|
2682
2734
|
);
|
|
2683
|
-
return /* @__PURE__ */
|
|
2735
|
+
return /* @__PURE__ */ React20.createElement(
|
|
2684
2736
|
FormControl_default,
|
|
2685
2737
|
{
|
|
2686
2738
|
required,
|
|
@@ -2691,9 +2743,9 @@ function Select(props) {
|
|
|
2691
2743
|
sx,
|
|
2692
2744
|
className
|
|
2693
2745
|
},
|
|
2694
|
-
label && /* @__PURE__ */
|
|
2746
|
+
label && /* @__PURE__ */ React20.createElement(FormLabel_default, null, label),
|
|
2695
2747
|
select,
|
|
2696
|
-
helperText && /* @__PURE__ */
|
|
2748
|
+
helperText && /* @__PURE__ */ React20.createElement(FormHelperText_default, null, helperText)
|
|
2697
2749
|
);
|
|
2698
2750
|
}
|
|
2699
2751
|
Select.displayName = "Select";
|
|
@@ -2704,19 +2756,6 @@ var Select_default = Select;
|
|
|
2704
2756
|
// src/components/DataTable/components.tsx
|
|
2705
2757
|
import { Link } from "@mui/joy";
|
|
2706
2758
|
|
|
2707
|
-
// src/components/Tooltip/Tooltip.tsx
|
|
2708
|
-
import React20 from "react";
|
|
2709
|
-
import { Tooltip as JoyTooltip } from "@mui/joy";
|
|
2710
|
-
import { motion as motion20 } from "framer-motion";
|
|
2711
|
-
var MotionTooltip = motion20(JoyTooltip);
|
|
2712
|
-
var Tooltip = (props) => {
|
|
2713
|
-
return /* @__PURE__ */ React20.createElement(MotionTooltip, { ...props });
|
|
2714
|
-
};
|
|
2715
|
-
Tooltip.displayName = "Tooltip";
|
|
2716
|
-
|
|
2717
|
-
// src/components/Tooltip/index.ts
|
|
2718
|
-
var Tooltip_default = Tooltip;
|
|
2719
|
-
|
|
2720
2759
|
// src/components/InfoSign/InfoSign.tsx
|
|
2721
2760
|
import React21 from "react";
|
|
2722
2761
|
import { styled as styled11, tooltipClasses } from "@mui/joy";
|
|
@@ -2751,25 +2790,26 @@ function InfoSign(props) {
|
|
|
2751
2790
|
var InfoSign_default = InfoSign;
|
|
2752
2791
|
|
|
2753
2792
|
// src/components/DataTable/components.tsx
|
|
2754
|
-
var TextEllipsis = ({ children }) => {
|
|
2755
|
-
const textRef =
|
|
2756
|
-
const [showTooltip, setShowTooltip] =
|
|
2793
|
+
var TextEllipsis = ({ children, lineClamp }) => {
|
|
2794
|
+
const textRef = useRef5(null);
|
|
2795
|
+
const [showTooltip, setShowTooltip] = useState8(false);
|
|
2757
2796
|
useLayoutEffect(() => {
|
|
2758
2797
|
const element = textRef.current;
|
|
2759
|
-
if (element)
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2798
|
+
if (!element) return;
|
|
2799
|
+
const checkTruncation = () => {
|
|
2800
|
+
const isTruncated = lineClamp && lineClamp > 1 ? element.scrollHeight > element.clientHeight + 1 : element.scrollWidth > element.clientWidth;
|
|
2801
|
+
setShowTooltip(isTruncated);
|
|
2802
|
+
};
|
|
2803
|
+
checkTruncation();
|
|
2804
|
+
const ro = new ResizeObserver(checkTruncation);
|
|
2805
|
+
ro.observe(element);
|
|
2806
|
+
return () => ro.disconnect();
|
|
2807
|
+
}, [children, lineClamp]);
|
|
2808
|
+
return /* @__PURE__ */ React22.createElement(Tooltip_default, { title: showTooltip ? children : "", placement: "top", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React22.createElement(EllipsisDiv, { ref: textRef, lineClamp }, children));
|
|
2769
2809
|
};
|
|
2770
2810
|
var CellTextEllipsis = ({ children }) => {
|
|
2771
|
-
const textRef =
|
|
2772
|
-
const [showTooltip, setShowTooltip] =
|
|
2811
|
+
const textRef = useRef5(null);
|
|
2812
|
+
const [showTooltip, setShowTooltip] = useState8(false);
|
|
2773
2813
|
useLayoutEffect(() => {
|
|
2774
2814
|
const element = textRef.current;
|
|
2775
2815
|
if (element) {
|
|
@@ -2816,12 +2856,13 @@ var HeadCell = (props) => {
|
|
|
2816
2856
|
pinnedEndPosition,
|
|
2817
2857
|
headerRef,
|
|
2818
2858
|
tableColRef,
|
|
2819
|
-
headerClassName
|
|
2859
|
+
headerClassName,
|
|
2860
|
+
headerLineClamp
|
|
2820
2861
|
} = props;
|
|
2821
2862
|
const theme = useTheme();
|
|
2822
2863
|
const ref = headerRef;
|
|
2823
2864
|
const colRef = tableColRef;
|
|
2824
|
-
const [isHovered, setIsHovered] =
|
|
2865
|
+
const [isHovered, setIsHovered] = useState8(false);
|
|
2825
2866
|
const sortable = type === "actions" ? false : _sortable;
|
|
2826
2867
|
const headId = useMemo8(
|
|
2827
2868
|
() => `${tableId}_header_${headerName ?? field}`.trim(),
|
|
@@ -2900,7 +2941,7 @@ var HeadCell = (props) => {
|
|
|
2900
2941
|
ref,
|
|
2901
2942
|
key: field,
|
|
2902
2943
|
style,
|
|
2903
|
-
onClick:
|
|
2944
|
+
onClick: useCallback9(
|
|
2904
2945
|
(e) => sortable && onSortChange?.({ field, currentSort: sort, multiple: e.shiftKey }),
|
|
2905
2946
|
[field, onSortChange, sort, sortable]
|
|
2906
2947
|
),
|
|
@@ -2910,7 +2951,7 @@ var HeadCell = (props) => {
|
|
|
2910
2951
|
initial: "initial",
|
|
2911
2952
|
className: computedHeaderClassName
|
|
2912
2953
|
},
|
|
2913
|
-
/* @__PURE__ */ React22.createElement(Stack_default, { gap: 1, direction: "row", justifyContent: textAlign, alignItems: "center" }, textAlign === "end" && sortIcon, textAlign === "end" && infoSign, /* @__PURE__ */ React22.createElement(TextEllipsis,
|
|
2954
|
+
/* @__PURE__ */ React22.createElement(Stack_default, { gap: 1, direction: "row", justifyContent: textAlign, alignItems: "center", sx: { minWidth: 0 } }, textAlign === "end" && sortIcon, textAlign === "end" && infoSign, /* @__PURE__ */ React22.createElement(TextEllipsis, { lineClamp: headerLineClamp }, headerName ?? field, editMode && required && /* @__PURE__ */ React22.createElement(Asterisk, null, "*")), textAlign === "start" && infoSign, textAlign === "start" && sortIcon),
|
|
2914
2955
|
resizer
|
|
2915
2956
|
);
|
|
2916
2957
|
};
|
|
@@ -2935,8 +2976,8 @@ var BodyCell = (props) => {
|
|
|
2935
2976
|
onCellEditStop
|
|
2936
2977
|
} = props;
|
|
2937
2978
|
const theme = useTheme();
|
|
2938
|
-
const [value, setValue] =
|
|
2939
|
-
const cellRef =
|
|
2979
|
+
const [value, setValue] = useState8(row[field]);
|
|
2980
|
+
const cellRef = useRef5(null);
|
|
2940
2981
|
const params = useMemo8(
|
|
2941
2982
|
() => ({
|
|
2942
2983
|
row,
|
|
@@ -3081,7 +3122,7 @@ var BodyCell = (props) => {
|
|
|
3081
3122
|
() => (typeof cellClassName === "function" ? cellClassName(params) : cellClassName) || "",
|
|
3082
3123
|
[cellClassName, params]
|
|
3083
3124
|
);
|
|
3084
|
-
|
|
3125
|
+
useEffect5(() => {
|
|
3085
3126
|
setValue(row[field]);
|
|
3086
3127
|
}, [row, field]);
|
|
3087
3128
|
return /* @__PURE__ */ React22.createElement(
|
|
@@ -3151,10 +3192,10 @@ var VirtualizedTableRow = memo(StyledTableRow2, (prevProps, nextProps) => {
|
|
|
3151
3192
|
});
|
|
3152
3193
|
|
|
3153
3194
|
// src/components/DataTable/hooks.ts
|
|
3154
|
-
import { useState as
|
|
3195
|
+
import { useState as useState9, useLayoutEffect as useLayoutEffect2, useRef as useRef6, useMemo as useMemo9, useCallback as useCallback10, useEffect as useEffect6, createRef } from "react";
|
|
3155
3196
|
function useColumnWidths(columnsByField) {
|
|
3156
|
-
const [widths, setWidths] =
|
|
3157
|
-
const roRef =
|
|
3197
|
+
const [widths, setWidths] = useState9({});
|
|
3198
|
+
const roRef = useRef6();
|
|
3158
3199
|
useLayoutEffect2(() => {
|
|
3159
3200
|
if (roRef.current) roRef.current.disconnect();
|
|
3160
3201
|
roRef.current = new ResizeObserver((entries) => {
|
|
@@ -3202,28 +3243,53 @@ function useDataTableRenderer({
|
|
|
3202
3243
|
getId: _getId,
|
|
3203
3244
|
isTotalSelected: _isTotalSelected,
|
|
3204
3245
|
isRowSelectable,
|
|
3205
|
-
columnGroupingModel
|
|
3246
|
+
columnGroupingModel,
|
|
3247
|
+
columnVisibilityModel,
|
|
3248
|
+
onColumnVisibilityModelChange
|
|
3206
3249
|
}) {
|
|
3207
3250
|
if (pinnedColumns && columnGroupingModel) {
|
|
3208
3251
|
throw new Error(
|
|
3209
3252
|
"You cannot use both `pinnedColumns` and `columnGroupingModel` at the same time. Please choose one of them."
|
|
3210
3253
|
);
|
|
3211
3254
|
}
|
|
3212
|
-
const onSelectionModelChangeRef =
|
|
3255
|
+
const onSelectionModelChangeRef = useRef6(onSelectionModelChange);
|
|
3213
3256
|
onSelectionModelChangeRef.current = onSelectionModelChange;
|
|
3214
|
-
const [focusedRowId, setFocusedRowId] =
|
|
3215
|
-
const [selectionAnchor, setSelectionAnchor] =
|
|
3257
|
+
const [focusedRowId, setFocusedRowId] = useState9(null);
|
|
3258
|
+
const [selectionAnchor, setSelectionAnchor] = useState9(null);
|
|
3216
3259
|
const [sortModel, setSortModel] = useControlledState(
|
|
3217
3260
|
controlledSortModel,
|
|
3218
3261
|
initialState?.sorting?.sortModel ?? [],
|
|
3219
|
-
|
|
3262
|
+
useCallback10((sortModel2) => onSortModelChange?.(sortModel2), [onSortModelChange])
|
|
3263
|
+
);
|
|
3264
|
+
const [visibilityModel] = useControlledState(
|
|
3265
|
+
columnVisibilityModel,
|
|
3266
|
+
initialState?.columns?.columnVisibilityModel ?? {},
|
|
3267
|
+
useCallback10(
|
|
3268
|
+
(model) => onColumnVisibilityModelChange?.(model),
|
|
3269
|
+
[onColumnVisibilityModelChange]
|
|
3270
|
+
)
|
|
3220
3271
|
);
|
|
3221
3272
|
const reorderedColumns = useMemo9(() => {
|
|
3222
3273
|
if (!columnGroupingModel) return columnsProp;
|
|
3223
3274
|
return reorderColumnsByGroupingModel(columnsProp, columnGroupingModel);
|
|
3224
3275
|
}, [columnsProp, columnGroupingModel]);
|
|
3225
|
-
const
|
|
3276
|
+
const visibleColumns = useMemo9(
|
|
3277
|
+
() => reorderedColumns.filter((col) => visibilityModel[col.field] !== false),
|
|
3278
|
+
[reorderedColumns, visibilityModel]
|
|
3279
|
+
);
|
|
3280
|
+
const visibleFieldSet = useMemo9(() => new Set(visibleColumns.map((c) => c.field)), [visibleColumns]);
|
|
3281
|
+
const allColumnsByField = useMemo9(
|
|
3226
3282
|
() => reorderedColumns.reduce(
|
|
3283
|
+
(acc, curr) => ({
|
|
3284
|
+
...acc,
|
|
3285
|
+
[curr.field]: curr
|
|
3286
|
+
}),
|
|
3287
|
+
{}
|
|
3288
|
+
),
|
|
3289
|
+
[reorderedColumns]
|
|
3290
|
+
);
|
|
3291
|
+
const visibleColumnsByField = useMemo9(
|
|
3292
|
+
() => visibleColumns.reduce(
|
|
3227
3293
|
(acc, curr) => ({
|
|
3228
3294
|
...acc,
|
|
3229
3295
|
[curr.field]: {
|
|
@@ -3234,15 +3300,16 @@ function useDataTableRenderer({
|
|
|
3234
3300
|
}),
|
|
3235
3301
|
{}
|
|
3236
3302
|
),
|
|
3237
|
-
[
|
|
3303
|
+
[visibleColumns]
|
|
3238
3304
|
);
|
|
3239
|
-
const sortComparator =
|
|
3305
|
+
const sortComparator = useCallback10(
|
|
3240
3306
|
(rowA, rowB) => {
|
|
3241
3307
|
for (const sort of sortModel) {
|
|
3242
3308
|
const { field, sort: direction } = sort;
|
|
3243
3309
|
const a = rowA[field];
|
|
3244
3310
|
const b = rowB[field];
|
|
3245
|
-
const column =
|
|
3311
|
+
const column = allColumnsByField[field];
|
|
3312
|
+
if (!column) continue;
|
|
3246
3313
|
let comparison = 0;
|
|
3247
3314
|
if (column.sortComparator) {
|
|
3248
3315
|
comparison = column.sortComparator({
|
|
@@ -3262,7 +3329,7 @@ function useDataTableRenderer({
|
|
|
3262
3329
|
}
|
|
3263
3330
|
return 0;
|
|
3264
3331
|
},
|
|
3265
|
-
[sortModel,
|
|
3332
|
+
[sortModel, allColumnsByField]
|
|
3266
3333
|
);
|
|
3267
3334
|
const rows = useMemo9(
|
|
3268
3335
|
() => sortModel.length ? [..._rows].sort(sortComparator) : _rows,
|
|
@@ -3272,9 +3339,9 @@ function useDataTableRenderer({
|
|
|
3272
3339
|
() => Array.from(new Set(_sortOrder || ["asc", "desc", null])),
|
|
3273
3340
|
[_sortOrder]
|
|
3274
3341
|
);
|
|
3275
|
-
const [page, setPage] =
|
|
3342
|
+
const [page, setPage] = useState9(paginationModel?.page || 1);
|
|
3276
3343
|
const pageSize = paginationModel?.pageSize || 20;
|
|
3277
|
-
const getId =
|
|
3344
|
+
const getId = useCallback10(
|
|
3278
3345
|
(row, index) => _getId?.(row) ?? row.id ?? `${(index || 0) + (page - 1) * pageSize}`,
|
|
3279
3346
|
[_getId, page, pageSize]
|
|
3280
3347
|
);
|
|
@@ -3290,7 +3357,7 @@ function useDataTableRenderer({
|
|
|
3290
3357
|
}),
|
|
3291
3358
|
[dataInPage, isRowSelectable, getId]
|
|
3292
3359
|
);
|
|
3293
|
-
const handleRangeSelection =
|
|
3360
|
+
const handleRangeSelection = useCallback10(
|
|
3294
3361
|
(anchor, targetIndex) => {
|
|
3295
3362
|
const startIndex = Math.min(anchor.rowIndex, targetIndex);
|
|
3296
3363
|
const endIndex = Math.max(anchor.rowIndex, targetIndex);
|
|
@@ -3326,61 +3393,71 @@ function useDataTableRenderer({
|
|
|
3326
3393
|
() => _isTotalSelected ?? (selectableRowCount > 0 && (selectionModel?.length || 0) === selectableRowCount),
|
|
3327
3394
|
[_isTotalSelected, selectionModel, selectableRowCount]
|
|
3328
3395
|
);
|
|
3329
|
-
const columnWidths = useColumnWidths(
|
|
3330
|
-
const getWidth =
|
|
3331
|
-
(f) => columnWidths[f] ??
|
|
3332
|
-
|
|
3333
|
-
[columnWidths,
|
|
3396
|
+
const columnWidths = useColumnWidths(visibleColumnsByField);
|
|
3397
|
+
const getWidth = useCallback10(
|
|
3398
|
+
(f) => columnWidths[f] ?? allColumnsByField[f]?.width ?? // Column prop 으로 지정된 width
|
|
3399
|
+
allColumnsByField[f]?.minWidth ?? 0,
|
|
3400
|
+
[columnWidths, allColumnsByField]
|
|
3334
3401
|
);
|
|
3335
3402
|
const processedColumnGroups = useMemo9(() => {
|
|
3336
3403
|
if (!columnGroupingModel) return null;
|
|
3337
|
-
return calculateColumnGroups(columnGroupingModel,
|
|
3338
|
-
}, [columnGroupingModel,
|
|
3404
|
+
return calculateColumnGroups(columnGroupingModel, visibleColumns, visibleFieldSet);
|
|
3405
|
+
}, [columnGroupingModel, visibleColumns, visibleFieldSet]);
|
|
3406
|
+
const effectivePinnedLeft = useMemo9(
|
|
3407
|
+
() => pinnedColumns?.left?.filter((f) => visibleFieldSet.has(f)),
|
|
3408
|
+
[pinnedColumns?.left, visibleFieldSet]
|
|
3409
|
+
);
|
|
3410
|
+
const effectivePinnedRight = useMemo9(
|
|
3411
|
+
() => pinnedColumns?.right?.filter((f) => visibleFieldSet.has(f)),
|
|
3412
|
+
[pinnedColumns?.right, visibleFieldSet]
|
|
3413
|
+
);
|
|
3339
3414
|
const columns = useMemo9(() => {
|
|
3340
|
-
const baseColumns =
|
|
3415
|
+
const baseColumns = visibleColumns.length > 0 ? visibleColumns : reorderedColumns.length > 0 ? [] : Object.keys(rows[0] || {}).map((key) => ({
|
|
3341
3416
|
field: key
|
|
3342
3417
|
}));
|
|
3343
3418
|
return baseColumns.map((column) => {
|
|
3344
|
-
const isLeftPinned =
|
|
3345
|
-
const isRightPinned =
|
|
3419
|
+
const isLeftPinned = effectivePinnedLeft?.includes(column.field);
|
|
3420
|
+
const isRightPinned = effectivePinnedRight?.includes(column.field);
|
|
3346
3421
|
const isPinned = isLeftPinned || isRightPinned;
|
|
3347
3422
|
return {
|
|
3348
3423
|
...column,
|
|
3349
|
-
headerRef:
|
|
3350
|
-
tableColRef:
|
|
3424
|
+
headerRef: visibleColumnsByField[column.field]?.headerRef,
|
|
3425
|
+
tableColRef: visibleColumnsByField[column.field]?.tableColRef,
|
|
3351
3426
|
isCellEditable: editMode && (typeof column.isCellEditable === "function" ? column.isCellEditable : column.isCellEditable ?? true),
|
|
3352
3427
|
sort: sortModel.find((sort) => sort.field === column.field)?.sort,
|
|
3353
|
-
sortOrder:
|
|
3428
|
+
sortOrder: allColumnsByField[column.field]?.sortOrder || sortOrder,
|
|
3354
3429
|
isPinned,
|
|
3355
|
-
isLastStartPinnedColumn: isLeftPinned && [...
|
|
3356
|
-
isLastEndPinnedColumn: isRightPinned && (
|
|
3357
|
-
pinnedStartPosition:
|
|
3358
|
-
pinnedEndPosition:
|
|
3430
|
+
isLastStartPinnedColumn: isLeftPinned && [...effectivePinnedLeft || []].pop() === column.field,
|
|
3431
|
+
isLastEndPinnedColumn: isRightPinned && (effectivePinnedRight?.[0] ?? null) === column.field,
|
|
3432
|
+
pinnedStartPosition: effectivePinnedLeft?.slice(0, isLeftPinned ? effectivePinnedLeft.indexOf(column.field) : effectivePinnedLeft.length).reduce((acc, curr) => acc + getWidth(curr), 0),
|
|
3433
|
+
pinnedEndPosition: effectivePinnedRight?.slice(isRightPinned ? effectivePinnedRight.indexOf(column.field) + 1 : 0).reduce((acc, curr) => acc + getWidth(curr), 0)
|
|
3359
3434
|
};
|
|
3360
3435
|
});
|
|
3361
3436
|
}, [
|
|
3437
|
+
visibleColumns,
|
|
3362
3438
|
reorderedColumns,
|
|
3363
3439
|
rows,
|
|
3364
|
-
|
|
3365
|
-
|
|
3366
|
-
|
|
3440
|
+
effectivePinnedLeft,
|
|
3441
|
+
effectivePinnedRight,
|
|
3442
|
+
visibleColumnsByField,
|
|
3443
|
+
allColumnsByField,
|
|
3367
3444
|
editMode,
|
|
3368
3445
|
sortModel,
|
|
3369
3446
|
sortOrder,
|
|
3370
3447
|
getWidth
|
|
3371
3448
|
]);
|
|
3372
|
-
const handlePageChange =
|
|
3449
|
+
const handlePageChange = useCallback10(
|
|
3373
3450
|
(newPage) => {
|
|
3374
3451
|
setPage(newPage);
|
|
3375
3452
|
onPaginationModelChange?.({ page: newPage, pageSize });
|
|
3376
3453
|
},
|
|
3377
3454
|
[onPaginationModelChange, pageSize]
|
|
3378
3455
|
);
|
|
3379
|
-
const handleSortChange =
|
|
3456
|
+
const handleSortChange = useCallback10(
|
|
3380
3457
|
(props) => {
|
|
3381
3458
|
const { field, currentSort, multiple } = props;
|
|
3382
|
-
const column =
|
|
3383
|
-
const columnSortOrder = column
|
|
3459
|
+
const column = allColumnsByField[field];
|
|
3460
|
+
const columnSortOrder = column?.sortOrder || sortOrder;
|
|
3384
3461
|
if (currentSort !== void 0) {
|
|
3385
3462
|
const currentOrderIndex = columnSortOrder.indexOf(currentSort);
|
|
3386
3463
|
const nextSortOrderIndex = (currentOrderIndex + 1) % columnSortOrder.length;
|
|
@@ -3397,25 +3474,25 @@ function useDataTableRenderer({
|
|
|
3397
3474
|
setSortModel(newSortModel);
|
|
3398
3475
|
}
|
|
3399
3476
|
},
|
|
3400
|
-
[sortOrder,
|
|
3477
|
+
[sortOrder, allColumnsByField, sortModel, setSortModel]
|
|
3401
3478
|
);
|
|
3402
|
-
|
|
3479
|
+
useEffect6(() => {
|
|
3403
3480
|
if (!paginationModel) {
|
|
3404
3481
|
handlePageChange(1);
|
|
3405
3482
|
}
|
|
3406
3483
|
}, [rowCount, handlePageChange, paginationModel]);
|
|
3407
|
-
|
|
3484
|
+
useEffect6(() => {
|
|
3408
3485
|
const lastPage = Math.max(1, Math.ceil(rowCount / pageSize));
|
|
3409
3486
|
if (page > lastPage) {
|
|
3410
3487
|
handlePageChange(lastPage);
|
|
3411
3488
|
}
|
|
3412
3489
|
}, [page, rowCount, pageSize, handlePageChange]);
|
|
3413
|
-
|
|
3490
|
+
useEffect6(() => {
|
|
3414
3491
|
onSelectionModelChangeRef.current?.([]);
|
|
3415
3492
|
setSelectionAnchor(null);
|
|
3416
3493
|
}, [page]);
|
|
3417
|
-
const prevRowsRef =
|
|
3418
|
-
|
|
3494
|
+
const prevRowsRef = useRef6(_rows);
|
|
3495
|
+
useEffect6(() => {
|
|
3419
3496
|
if (prevRowsRef.current !== _rows) {
|
|
3420
3497
|
setSelectionAnchor(null);
|
|
3421
3498
|
prevRowsRef.current = _rows;
|
|
@@ -3434,8 +3511,8 @@ function useDataTableRenderer({
|
|
|
3434
3511
|
handleSortChange,
|
|
3435
3512
|
isAllSelected,
|
|
3436
3513
|
isTotalSelected,
|
|
3437
|
-
isSelectedRow:
|
|
3438
|
-
isRowSelectable:
|
|
3514
|
+
isSelectedRow: useCallback10((model) => selectedModelSet.has(model), [selectedModelSet]),
|
|
3515
|
+
isRowSelectable: useCallback10(
|
|
3439
3516
|
(rowId, row) => {
|
|
3440
3517
|
if (!isRowSelectable) return true;
|
|
3441
3518
|
return isRowSelectable({ row, id: rowId });
|
|
@@ -3443,13 +3520,13 @@ function useDataTableRenderer({
|
|
|
3443
3520
|
[isRowSelectable]
|
|
3444
3521
|
),
|
|
3445
3522
|
focusedRowId,
|
|
3446
|
-
onRowFocus:
|
|
3523
|
+
onRowFocus: useCallback10((rowId) => {
|
|
3447
3524
|
setFocusedRowId(rowId);
|
|
3448
3525
|
}, []),
|
|
3449
|
-
onAllCheckboxChange:
|
|
3526
|
+
onAllCheckboxChange: useCallback10(() => {
|
|
3450
3527
|
onSelectionModelChange?.(isAllSelected ? [] : selectableDataInPage.map(getId));
|
|
3451
3528
|
}, [isAllSelected, selectableDataInPage, onSelectionModelChange, getId]),
|
|
3452
|
-
onCheckboxChange:
|
|
3529
|
+
onCheckboxChange: useCallback10(
|
|
3453
3530
|
(event, selectedModel) => {
|
|
3454
3531
|
const isShiftClick = "shiftKey" in event && event.shiftKey;
|
|
3455
3532
|
const rowIndex = dataInPage.findIndex((row, i) => getId(row, i) === selectedModel);
|
|
@@ -3482,7 +3559,7 @@ function useDataTableRenderer({
|
|
|
3482
3559
|
),
|
|
3483
3560
|
columns,
|
|
3484
3561
|
processedColumnGroups,
|
|
3485
|
-
onTotalSelect:
|
|
3562
|
+
onTotalSelect: useCallback10(() => {
|
|
3486
3563
|
const selectableRows = rows.filter((row, i) => {
|
|
3487
3564
|
if (!isRowSelectable) return true;
|
|
3488
3565
|
return isRowSelectable({ row, id: getId(row, i) });
|
|
@@ -3567,7 +3644,7 @@ function TableBody(props) {
|
|
|
3567
3644
|
TableBody.displayName = "TableBody";
|
|
3568
3645
|
|
|
3569
3646
|
// src/components/Pagination/Pagination.tsx
|
|
3570
|
-
import React24, { useCallback as
|
|
3647
|
+
import React24, { useCallback as useCallback11, useEffect as useEffect7 } from "react";
|
|
3571
3648
|
import PreviousIcon from "@mui/icons-material/ChevronLeftRounded";
|
|
3572
3649
|
import NextIcon from "@mui/icons-material/ChevronRightRounded";
|
|
3573
3650
|
import FirstPageIcon from "@mui/icons-material/FirstPageRounded";
|
|
@@ -3636,7 +3713,7 @@ function Pagination(props) {
|
|
|
3636
3713
|
const [paginationModel, setPaginationModel] = useControlledState(
|
|
3637
3714
|
_paginationModel,
|
|
3638
3715
|
defaultPaginationModel,
|
|
3639
|
-
|
|
3716
|
+
useCallback11(
|
|
3640
3717
|
(newPage) => {
|
|
3641
3718
|
onPageChange(newPage.page);
|
|
3642
3719
|
},
|
|
@@ -3652,7 +3729,7 @@ function Pagination(props) {
|
|
|
3652
3729
|
const afterPages = [paginationModel.page + 1, paginationModel.page + 2].filter((p) => p <= lastPage - 1);
|
|
3653
3730
|
const isMoreAfterPages = lastPage > 1 && paginationModel.page < lastPage - 3;
|
|
3654
3731
|
const isMoreBeforePages = lastPage > 1 && paginationModel.page > 4;
|
|
3655
|
-
|
|
3732
|
+
useEffect7(() => {
|
|
3656
3733
|
if (paginationModel.page > lastPage) {
|
|
3657
3734
|
setPaginationModel({ ...paginationModel, page: lastPage });
|
|
3658
3735
|
}
|
|
@@ -3823,6 +3900,10 @@ function Component(props, apiRef) {
|
|
|
3823
3900
|
loading,
|
|
3824
3901
|
columnGroupingModel: _________________,
|
|
3825
3902
|
// columnGroupingModel is used in useDataTableRenderer
|
|
3903
|
+
columnVisibilityModel: __________________,
|
|
3904
|
+
// columnVisibilityModel is used in useDataTableRenderer
|
|
3905
|
+
onColumnVisibilityModelChange: ___________________,
|
|
3906
|
+
// onColumnVisibilityModelChange is used in useDataTableRenderer
|
|
3826
3907
|
slots: {
|
|
3827
3908
|
checkbox: RenderCheckbox = Checkbox_default,
|
|
3828
3909
|
toolbar: Toolbar,
|
|
@@ -3835,8 +3916,8 @@ function Component(props, apiRef) {
|
|
|
3835
3916
|
...innerProps
|
|
3836
3917
|
} = props;
|
|
3837
3918
|
const tableId = useId();
|
|
3838
|
-
const parentRef =
|
|
3839
|
-
const tableBodyRef =
|
|
3919
|
+
const parentRef = useRef7(null);
|
|
3920
|
+
const tableBodyRef = useRef7(null);
|
|
3840
3921
|
const {
|
|
3841
3922
|
columns,
|
|
3842
3923
|
processedColumnGroups,
|
|
@@ -3873,20 +3954,20 @@ function Component(props, apiRef) {
|
|
|
3873
3954
|
const paginationModel = useMemo10(() => ({ page, pageSize }), [page, pageSize]);
|
|
3874
3955
|
const totalSize = virtualizer.getTotalSize();
|
|
3875
3956
|
const virtualizedItems = virtualizer.getVirtualItems();
|
|
3876
|
-
const getRowClickHandler =
|
|
3957
|
+
const getRowClickHandler = useCallback12(
|
|
3877
3958
|
(row, rowId) => (e) => {
|
|
3878
3959
|
onRowClick?.({ row, rowId }, e);
|
|
3879
3960
|
checkboxSelection && !disableSelectionOnClick && isRowSelectableCheck(rowId, row) && onCheckboxChange(e, rowId);
|
|
3880
3961
|
},
|
|
3881
3962
|
[onRowClick, checkboxSelection, disableSelectionOnClick, onCheckboxChange, isRowSelectableCheck]
|
|
3882
3963
|
);
|
|
3883
|
-
const getRowFocusHandler =
|
|
3964
|
+
const getRowFocusHandler = useCallback12(
|
|
3884
3965
|
(rowId) => () => {
|
|
3885
3966
|
onRowFocus(rowId);
|
|
3886
3967
|
},
|
|
3887
3968
|
[onRowFocus]
|
|
3888
3969
|
);
|
|
3889
|
-
const getCheckboxClickHandler =
|
|
3970
|
+
const getCheckboxClickHandler = useCallback12(
|
|
3890
3971
|
(rowId, row) => (e) => {
|
|
3891
3972
|
e.stopPropagation();
|
|
3892
3973
|
if (isRowSelectableCheck(rowId, row)) {
|
|
@@ -3896,7 +3977,7 @@ function Component(props, apiRef) {
|
|
|
3896
3977
|
},
|
|
3897
3978
|
[onCheckboxChange, isRowSelectableCheck, onRowFocus]
|
|
3898
3979
|
);
|
|
3899
|
-
const handleTableKeyDown =
|
|
3980
|
+
const handleTableKeyDown = useCallback12(
|
|
3900
3981
|
(e) => {
|
|
3901
3982
|
const supportedKeys = ["ArrowUp", "ArrowDown", " ", "Home", "End", "PageUp", "PageDown"];
|
|
3902
3983
|
if (!supportedKeys.includes(e.key)) return;
|
|
@@ -4062,7 +4143,7 @@ function Component(props, apiRef) {
|
|
|
4062
4143
|
width: c.width
|
|
4063
4144
|
}
|
|
4064
4145
|
}
|
|
4065
|
-
))), /* @__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(
|
|
4146
|
+
))), /* @__PURE__ */ React25.createElement("thead", null, processedColumnGroups && processedColumnGroups.groups.length > 0 && processedColumnGroups.groups.map((levelGroups, level) => /* @__PURE__ */ React25.createElement("tr", { key: `group-level-${level}` }, checkboxSelection && level === 0 && /* @__PURE__ */ React25.createElement(
|
|
4066
4147
|
"th",
|
|
4067
4148
|
{
|
|
4068
4149
|
rowSpan: processedColumnGroups.maxLevel + 2,
|
|
@@ -4082,7 +4163,7 @@ function Component(props, apiRef) {
|
|
|
4082
4163
|
...checkboxProps
|
|
4083
4164
|
}
|
|
4084
4165
|
)
|
|
4085
|
-
), level > 0 && Array.from({ length: levelGroups[0]?.startIndex || 0 }).map((_2, i) => /* @__PURE__ */ React25.createElement("th", { key: `empty-${level}-${i}` })), levelGroups.map((group, groupIndex) => {
|
|
4166
|
+
), level > 0 && Array.from({ length: levelGroups[0]?.startIndex || 0 }).map((_2, i) => /* @__PURE__ */ React25.createElement("th", { key: `empty-${level}-${i}` })), levelGroups.filter((g) => g.colspan > 0).map((group, groupIndex) => {
|
|
4086
4167
|
const nextGroup = levelGroups[groupIndex + 1];
|
|
4087
4168
|
const emptyCells = nextGroup ? nextGroup.startIndex - (group.startIndex + group.colspan) : columns.length - (group.startIndex + group.colspan);
|
|
4088
4169
|
const params = { groupId: group.groupId };
|
|
@@ -4100,7 +4181,7 @@ function Component(props, apiRef) {
|
|
|
4100
4181
|
},
|
|
4101
4182
|
group.headerName ?? group.groupId
|
|
4102
4183
|
), emptyCells > 0 && Array.from({ length: emptyCells }).map((_2, i) => /* @__PURE__ */ React25.createElement("th", { key: `empty-between-${level}-${groupIndex}-${i}`, colSpan: 1 })));
|
|
4103
|
-
}))), /* @__PURE__ */ React25.createElement("tr", null, !processedColumnGroups && checkboxSelection && /* @__PURE__ */ React25.createElement(
|
|
4184
|
+
}))), /* @__PURE__ */ React25.createElement("tr", null, (!processedColumnGroups || processedColumnGroups.groups.length === 0) && checkboxSelection && /* @__PURE__ */ React25.createElement(
|
|
4104
4185
|
"th",
|
|
4105
4186
|
{
|
|
4106
4187
|
style: {
|
|
@@ -4238,7 +4319,7 @@ var DataTable = forwardRef7(Component);
|
|
|
4238
4319
|
DataTable.displayName = "DataTable";
|
|
4239
4320
|
|
|
4240
4321
|
// src/components/DateRangePicker/DateRangePicker.tsx
|
|
4241
|
-
import React26, { forwardRef as forwardRef8, useCallback as
|
|
4322
|
+
import React26, { forwardRef as forwardRef8, useCallback as useCallback13, useEffect as useEffect8, useImperativeHandle as useImperativeHandle3, useMemo as useMemo11, useRef as useRef8, useState as useState10 } from "react";
|
|
4242
4323
|
import { IMaskInput as IMaskInput2, IMask as IMask2 } from "react-imask";
|
|
4243
4324
|
import CalendarTodayIcon2 from "@mui/icons-material/CalendarToday";
|
|
4244
4325
|
import { styled as styled14, useThemeProps as useThemeProps5 } from "@mui/joy";
|
|
@@ -4399,23 +4480,23 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
4399
4480
|
readOnly,
|
|
4400
4481
|
...innerProps
|
|
4401
4482
|
} = props;
|
|
4402
|
-
const innerRef =
|
|
4403
|
-
const buttonRef =
|
|
4483
|
+
const innerRef = useRef8(null);
|
|
4484
|
+
const buttonRef = useRef8(null);
|
|
4404
4485
|
const [value, setValue] = useControlledState(
|
|
4405
4486
|
props.value,
|
|
4406
4487
|
props.defaultValue || "",
|
|
4407
|
-
|
|
4488
|
+
useCallback13((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
|
|
4408
4489
|
);
|
|
4409
|
-
const [displayValue, setDisplayValue] =
|
|
4490
|
+
const [displayValue, setDisplayValue] = useState10(
|
|
4410
4491
|
() => value ? formatValueString2(parseDates(value, format), displayFormat) : ""
|
|
4411
4492
|
);
|
|
4412
|
-
const [anchorEl, setAnchorEl] =
|
|
4493
|
+
const [anchorEl, setAnchorEl] = useState10(null);
|
|
4413
4494
|
const open = Boolean(anchorEl);
|
|
4414
4495
|
const calendarValue = useMemo11(
|
|
4415
4496
|
() => value ? parseDates(value, format) : void 0,
|
|
4416
4497
|
[value, format]
|
|
4417
4498
|
);
|
|
4418
|
-
|
|
4499
|
+
useEffect8(() => {
|
|
4419
4500
|
if (value) {
|
|
4420
4501
|
try {
|
|
4421
4502
|
const dates = parseDates(value, format);
|
|
@@ -4427,13 +4508,13 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
4427
4508
|
setDisplayValue("");
|
|
4428
4509
|
}
|
|
4429
4510
|
}, [displayFormat, value, format]);
|
|
4430
|
-
|
|
4511
|
+
useEffect8(() => {
|
|
4431
4512
|
if (!anchorEl) {
|
|
4432
4513
|
innerRef.current?.blur();
|
|
4433
4514
|
}
|
|
4434
4515
|
}, [anchorEl, innerRef]);
|
|
4435
4516
|
useImperativeHandle3(ref, () => innerRef.current, [innerRef]);
|
|
4436
|
-
const handleChange =
|
|
4517
|
+
const handleChange = useCallback13(
|
|
4437
4518
|
(event) => {
|
|
4438
4519
|
const value2 = event.target.value;
|
|
4439
4520
|
setDisplayValue(value2 ? formatValueString2(parseDates(value2, format), displayFormat) : value2);
|
|
@@ -4441,7 +4522,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
4441
4522
|
},
|
|
4442
4523
|
[displayFormat, format, setValue]
|
|
4443
4524
|
);
|
|
4444
|
-
const handleDisplayInputChange =
|
|
4525
|
+
const handleDisplayInputChange = useCallback13(
|
|
4445
4526
|
(event) => {
|
|
4446
4527
|
if (event.target.value === "") {
|
|
4447
4528
|
handleChange({
|
|
@@ -4466,14 +4547,14 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
4466
4547
|
},
|
|
4467
4548
|
[displayFormat, format, handleChange, props.name]
|
|
4468
4549
|
);
|
|
4469
|
-
const handleCalendarToggle =
|
|
4550
|
+
const handleCalendarToggle = useCallback13(
|
|
4470
4551
|
(event) => {
|
|
4471
4552
|
setAnchorEl(anchorEl ? null : event.currentTarget);
|
|
4472
4553
|
innerRef.current?.focus();
|
|
4473
4554
|
},
|
|
4474
4555
|
[anchorEl, setAnchorEl, innerRef]
|
|
4475
4556
|
);
|
|
4476
|
-
const handleCalendarChange =
|
|
4557
|
+
const handleCalendarChange = useCallback13(
|
|
4477
4558
|
([date1, date2]) => {
|
|
4478
4559
|
if (!date1 || !date2) return;
|
|
4479
4560
|
const formattedValue = formatValueString2([date1, date2], format);
|
|
@@ -4487,7 +4568,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
4487
4568
|
},
|
|
4488
4569
|
[props.value, props.name, onChange, setValue, setAnchorEl, format, displayFormat]
|
|
4489
4570
|
);
|
|
4490
|
-
const handleInputMouseDown =
|
|
4571
|
+
const handleInputMouseDown = useCallback13(
|
|
4491
4572
|
(event) => {
|
|
4492
4573
|
if (inputReadOnly) {
|
|
4493
4574
|
event.preventDefault();
|
|
@@ -4696,13 +4777,13 @@ var InsetDrawer = styled19(JoyDrawer)(({ theme }) => ({
|
|
|
4696
4777
|
}));
|
|
4697
4778
|
|
|
4698
4779
|
// src/components/FilterableCheckboxGroup/FilterableCheckboxGroup.tsx
|
|
4699
|
-
import React30, { useCallback as
|
|
4780
|
+
import React30, { useCallback as useCallback14, useEffect as useEffect9, useMemo as useMemo12, useRef as useRef9, useState as useState11 } from "react";
|
|
4700
4781
|
import SearchIcon from "@mui/icons-material/Search";
|
|
4701
4782
|
import { useVirtualizer as useVirtualizer3 } from "@tanstack/react-virtual";
|
|
4702
4783
|
function LabelWithTooltip(props) {
|
|
4703
4784
|
const { label, size } = props;
|
|
4704
|
-
const labelContentRef =
|
|
4705
|
-
const [isOverflowing, setIsOverflowing] =
|
|
4785
|
+
const labelContentRef = useRef9(null);
|
|
4786
|
+
const [isOverflowing, setIsOverflowing] = useState11(false);
|
|
4706
4787
|
const labelContent = /* @__PURE__ */ React30.createElement(
|
|
4707
4788
|
"span",
|
|
4708
4789
|
{
|
|
@@ -4719,7 +4800,7 @@ function LabelWithTooltip(props) {
|
|
|
4719
4800
|
},
|
|
4720
4801
|
label
|
|
4721
4802
|
);
|
|
4722
|
-
|
|
4803
|
+
useEffect9(() => {
|
|
4723
4804
|
const element = labelContentRef.current;
|
|
4724
4805
|
if (element) {
|
|
4725
4806
|
setIsOverflowing(element.scrollWidth > element.clientWidth);
|
|
@@ -4743,16 +4824,16 @@ function FilterableCheckboxGroup(props) {
|
|
|
4743
4824
|
maxHeight = 300,
|
|
4744
4825
|
disabled
|
|
4745
4826
|
} = props;
|
|
4746
|
-
const [searchTerm, setSearchTerm] =
|
|
4747
|
-
const [sortedOptions, setSortedOptions] =
|
|
4827
|
+
const [searchTerm, setSearchTerm] = useState11("");
|
|
4828
|
+
const [sortedOptions, setSortedOptions] = useState11(options);
|
|
4748
4829
|
const [internalValue, setInternalValue] = useControlledState(
|
|
4749
4830
|
value,
|
|
4750
4831
|
value ?? [],
|
|
4751
|
-
|
|
4832
|
+
useCallback14((newValue) => onChange?.(newValue), [onChange])
|
|
4752
4833
|
);
|
|
4753
|
-
const parentRef =
|
|
4754
|
-
const isInitialSortRef =
|
|
4755
|
-
const prevOptionsRef =
|
|
4834
|
+
const parentRef = useRef9(null);
|
|
4835
|
+
const isInitialSortRef = useRef9(false);
|
|
4836
|
+
const prevOptionsRef = useRef9([...options]);
|
|
4756
4837
|
const filteredOptions = useMemo12(() => {
|
|
4757
4838
|
if (!searchTerm) return sortedOptions;
|
|
4758
4839
|
return sortedOptions.filter((option) => option.label.toLowerCase().includes(searchTerm.toLowerCase()));
|
|
@@ -4775,7 +4856,7 @@ function FilterableCheckboxGroup(props) {
|
|
|
4775
4856
|
overscan: 5
|
|
4776
4857
|
});
|
|
4777
4858
|
const items = virtualizer.getVirtualItems();
|
|
4778
|
-
|
|
4859
|
+
useEffect9(() => {
|
|
4779
4860
|
const optionsChanged = prevOptionsRef.current.length !== options.length || prevOptionsRef.current.some(
|
|
4780
4861
|
(prevOption, index) => prevOption.value !== options[index]?.value || prevOption.label !== options[index]?.label || prevOption.disabled !== options[index]?.disabled
|
|
4781
4862
|
);
|
|
@@ -4801,13 +4882,13 @@ function FilterableCheckboxGroup(props) {
|
|
|
4801
4882
|
}
|
|
4802
4883
|
}
|
|
4803
4884
|
}, [options, value]);
|
|
4804
|
-
|
|
4885
|
+
useEffect9(() => {
|
|
4805
4886
|
virtualizer.measure();
|
|
4806
4887
|
}, [virtualizer, filteredOptions, size]);
|
|
4807
|
-
const handleSearchChange =
|
|
4888
|
+
const handleSearchChange = useCallback14((event) => {
|
|
4808
4889
|
setSearchTerm(event.target.value);
|
|
4809
4890
|
}, []);
|
|
4810
|
-
const handleCheckboxChange =
|
|
4891
|
+
const handleCheckboxChange = useCallback14(
|
|
4811
4892
|
(optionValue) => (event) => {
|
|
4812
4893
|
const checked = event.target.checked;
|
|
4813
4894
|
const newValue = checked ? [...internalValue, optionValue] : internalValue.filter((v) => v !== optionValue);
|
|
@@ -4815,7 +4896,7 @@ function FilterableCheckboxGroup(props) {
|
|
|
4815
4896
|
},
|
|
4816
4897
|
[internalValue, setInternalValue]
|
|
4817
4898
|
);
|
|
4818
|
-
const handleSelectAll =
|
|
4899
|
+
const handleSelectAll = useCallback14(
|
|
4819
4900
|
(event) => {
|
|
4820
4901
|
const checked = event.target.checked;
|
|
4821
4902
|
const enabledOptions = filteredOptions.filter((option) => !option.disabled);
|
|
@@ -4919,16 +5000,16 @@ function FilterableCheckboxGroup(props) {
|
|
|
4919
5000
|
FilterableCheckboxGroup.displayName = "FilterableCheckboxGroup";
|
|
4920
5001
|
|
|
4921
5002
|
// src/components/FilterMenu/FilterMenu.tsx
|
|
4922
|
-
import React41, { useCallback as
|
|
5003
|
+
import React41, { useCallback as useCallback24 } from "react";
|
|
4923
5004
|
import { Button as Button2, Stack as Stack11 } from "@mui/joy";
|
|
4924
5005
|
|
|
4925
5006
|
// src/components/FilterMenu/components/CheckboxGroup.tsx
|
|
4926
|
-
import React31, { useCallback as
|
|
5007
|
+
import React31, { useCallback as useCallback15 } from "react";
|
|
4927
5008
|
import { Stack as Stack2 } from "@mui/joy";
|
|
4928
5009
|
function CheckboxGroup(props) {
|
|
4929
5010
|
const { id, label, options, value, onChange, hidden } = props;
|
|
4930
5011
|
const [internalValue, setInternalValue] = useControlledState(value, [], onChange);
|
|
4931
|
-
const handleCheckboxChange =
|
|
5012
|
+
const handleCheckboxChange = useCallback15(
|
|
4932
5013
|
(optionValue) => (event) => {
|
|
4933
5014
|
const checked = event.target.checked;
|
|
4934
5015
|
let newValue;
|
|
@@ -4957,12 +5038,12 @@ function CheckboxGroup(props) {
|
|
|
4957
5038
|
CheckboxGroup.displayName = "CheckboxGroup";
|
|
4958
5039
|
|
|
4959
5040
|
// src/components/FilterMenu/components/FilterableCheckboxGroup.tsx
|
|
4960
|
-
import React32, { useCallback as
|
|
5041
|
+
import React32, { useCallback as useCallback16 } from "react";
|
|
4961
5042
|
import { Stack as Stack3 } from "@mui/joy";
|
|
4962
5043
|
function FilterableCheckboxGroup2(props) {
|
|
4963
5044
|
const { id, label, options, value, onChange, hidden, placeholder, maxHeight } = props;
|
|
4964
5045
|
const [internalValue, setInternalValue] = useControlledState(value, [], onChange);
|
|
4965
|
-
const handleChange =
|
|
5046
|
+
const handleChange = useCallback16(
|
|
4966
5047
|
(newValue) => {
|
|
4967
5048
|
setInternalValue(newValue);
|
|
4968
5049
|
},
|
|
@@ -4986,7 +5067,7 @@ function FilterableCheckboxGroup2(props) {
|
|
|
4986
5067
|
FilterableCheckboxGroup2.displayName = "FilterableCheckboxGroup";
|
|
4987
5068
|
|
|
4988
5069
|
// src/components/FilterMenu/components/RadioGroup.tsx
|
|
4989
|
-
import React33, { useCallback as
|
|
5070
|
+
import React33, { useCallback as useCallback17 } from "react";
|
|
4990
5071
|
|
|
4991
5072
|
// src/components/Radio/Radio.tsx
|
|
4992
5073
|
import { Radio as JoyRadio, RadioGroup as JoyRadioGroup } from "@mui/joy";
|
|
@@ -5003,7 +5084,7 @@ import { Stack as Stack4 } from "@mui/joy";
|
|
|
5003
5084
|
function RadioGroup2(props) {
|
|
5004
5085
|
const { id, label, options, value, onChange, hidden } = props;
|
|
5005
5086
|
const [internalValue, setInternalValue] = useControlledState(value, value ?? "", onChange);
|
|
5006
|
-
const handleRadioChange =
|
|
5087
|
+
const handleRadioChange = useCallback17(
|
|
5007
5088
|
(event) => {
|
|
5008
5089
|
const newValue = event.target.value;
|
|
5009
5090
|
const option = options.find((opt) => opt.value.toString() === newValue);
|
|
@@ -5020,7 +5101,7 @@ function RadioGroup2(props) {
|
|
|
5020
5101
|
RadioGroup2.displayName = "RadioGroup";
|
|
5021
5102
|
|
|
5022
5103
|
// src/components/FilterMenu/components/DateRange.tsx
|
|
5023
|
-
import React34, { useCallback as
|
|
5104
|
+
import React34, { useCallback as useCallback18, useMemo as useMemo13, useState as useState12, useEffect as useEffect10 } from "react";
|
|
5024
5105
|
import { Stack as Stack5 } from "@mui/joy";
|
|
5025
5106
|
function DateRange(props) {
|
|
5026
5107
|
const {
|
|
@@ -5038,7 +5119,7 @@ function DateRange(props) {
|
|
|
5038
5119
|
hideClearButton
|
|
5039
5120
|
} = props;
|
|
5040
5121
|
const [internalValue, setInternalValue] = useControlledState(value, null, onChange);
|
|
5041
|
-
const [selectedOption, setSelectedOption] =
|
|
5122
|
+
const [selectedOption, setSelectedOption] = useState12("all-time");
|
|
5042
5123
|
const dateRangeOptions = useMemo13(
|
|
5043
5124
|
() => [
|
|
5044
5125
|
{ label: "All Time", value: "all-time" },
|
|
@@ -5049,7 +5130,7 @@ function DateRange(props) {
|
|
|
5049
5130
|
],
|
|
5050
5131
|
[]
|
|
5051
5132
|
);
|
|
5052
|
-
const getDateRangeForOption =
|
|
5133
|
+
const getDateRangeForOption = useCallback18(
|
|
5053
5134
|
(option) => {
|
|
5054
5135
|
const now = /* @__PURE__ */ new Date();
|
|
5055
5136
|
const currentYear = now.getFullYear();
|
|
@@ -5088,7 +5169,7 @@ function DateRange(props) {
|
|
|
5088
5169
|
},
|
|
5089
5170
|
[internalValue]
|
|
5090
5171
|
);
|
|
5091
|
-
const determineOptionFromValue =
|
|
5172
|
+
const determineOptionFromValue = useCallback18(
|
|
5092
5173
|
(value2) => {
|
|
5093
5174
|
if (!value2) {
|
|
5094
5175
|
return "all-time";
|
|
@@ -5110,11 +5191,11 @@ function DateRange(props) {
|
|
|
5110
5191
|
}
|
|
5111
5192
|
return "";
|
|
5112
5193
|
}, [selectedOption, internalValue]);
|
|
5113
|
-
|
|
5194
|
+
useEffect10(() => {
|
|
5114
5195
|
const newOption = determineOptionFromValue(internalValue);
|
|
5115
5196
|
setSelectedOption(newOption);
|
|
5116
5197
|
}, [internalValue, determineOptionFromValue]);
|
|
5117
|
-
const handleOptionChange =
|
|
5198
|
+
const handleOptionChange = useCallback18(
|
|
5118
5199
|
(event) => {
|
|
5119
5200
|
const newOption = event.target.value;
|
|
5120
5201
|
setSelectedOption(newOption);
|
|
@@ -5123,7 +5204,7 @@ function DateRange(props) {
|
|
|
5123
5204
|
},
|
|
5124
5205
|
[getDateRangeForOption, setInternalValue]
|
|
5125
5206
|
);
|
|
5126
|
-
const handleCustomDateChange =
|
|
5207
|
+
const handleCustomDateChange = useCallback18(
|
|
5127
5208
|
(event) => {
|
|
5128
5209
|
const dateRangeString = event.target.value;
|
|
5129
5210
|
if (dateRangeString && dateRangeString.includes(" - ")) {
|
|
@@ -5163,12 +5244,12 @@ function DateRange(props) {
|
|
|
5163
5244
|
DateRange.displayName = "DateRange";
|
|
5164
5245
|
|
|
5165
5246
|
// src/components/FilterMenu/components/CurrencyInput.tsx
|
|
5166
|
-
import React35, { useCallback as
|
|
5247
|
+
import React35, { useCallback as useCallback19 } from "react";
|
|
5167
5248
|
import { Stack as Stack6 } from "@mui/joy";
|
|
5168
5249
|
function CurrencyInput3(props) {
|
|
5169
5250
|
const { id, label, value, onChange, hidden, max, placeholder, useMinorUnit, currency = "USD" } = props;
|
|
5170
5251
|
const [internalValue, setInternalValue] = useControlledState(value, value, onChange);
|
|
5171
|
-
const handleCurrencyChange =
|
|
5252
|
+
const handleCurrencyChange = useCallback19(
|
|
5172
5253
|
(event) => {
|
|
5173
5254
|
const newValue = event.target.value;
|
|
5174
5255
|
setInternalValue(newValue);
|
|
@@ -5194,14 +5275,14 @@ function CurrencyInput3(props) {
|
|
|
5194
5275
|
CurrencyInput3.displayName = "CurrencyInput";
|
|
5195
5276
|
|
|
5196
5277
|
// src/components/FilterMenu/components/CurrencyRange.tsx
|
|
5197
|
-
import React36, { useCallback as
|
|
5278
|
+
import React36, { useCallback as useCallback20 } from "react";
|
|
5198
5279
|
import { Stack as Stack7 } from "@mui/joy";
|
|
5199
5280
|
function CurrencyRange(props) {
|
|
5200
5281
|
const { id, label, value, onChange, hidden, max, placeholder, useMinorUnit, currency = "USD" } = props;
|
|
5201
5282
|
const [internalValue, setInternalValue] = useControlledState(value, null, onChange);
|
|
5202
5283
|
const minValue = internalValue?.[0];
|
|
5203
5284
|
const maxValue = internalValue?.[1];
|
|
5204
|
-
const handleMinChange =
|
|
5285
|
+
const handleMinChange = useCallback20(
|
|
5205
5286
|
(event) => {
|
|
5206
5287
|
const newMinValue = event.target.value;
|
|
5207
5288
|
const currentMaxValue = maxValue;
|
|
@@ -5215,7 +5296,7 @@ function CurrencyRange(props) {
|
|
|
5215
5296
|
},
|
|
5216
5297
|
[maxValue, setInternalValue]
|
|
5217
5298
|
);
|
|
5218
|
-
const handleMaxChange =
|
|
5299
|
+
const handleMaxChange = useCallback20(
|
|
5219
5300
|
(event) => {
|
|
5220
5301
|
const newMaxValue = event.target.value;
|
|
5221
5302
|
const currentMinValue = minValue;
|
|
@@ -5267,7 +5348,7 @@ import React38 from "react";
|
|
|
5267
5348
|
import { Stack as Stack8, Typography as Typography4 } from "@mui/joy";
|
|
5268
5349
|
|
|
5269
5350
|
// src/components/PercentageInput/PercentageInput.tsx
|
|
5270
|
-
import React37, { useCallback as
|
|
5351
|
+
import React37, { useCallback as useCallback21, useMemo as useMemo14, useState as useState13 } from "react";
|
|
5271
5352
|
import { NumericFormat as NumericFormat2 } from "react-number-format";
|
|
5272
5353
|
import { styled as styled20, useThemeProps as useThemeProps6 } from "@mui/joy";
|
|
5273
5354
|
var padDecimal = (value, decimalScale) => {
|
|
@@ -5324,9 +5405,9 @@ var PercentageInput = React37.forwardRef(
|
|
|
5324
5405
|
const [_value, setValue] = useControlledState(
|
|
5325
5406
|
props.value,
|
|
5326
5407
|
props.defaultValue,
|
|
5327
|
-
|
|
5408
|
+
useCallback21((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
|
|
5328
5409
|
);
|
|
5329
|
-
const [internalError, setInternalError] =
|
|
5410
|
+
const [internalError, setInternalError] = useState13(
|
|
5330
5411
|
max && _value && _value > max || min && _value && _value < min
|
|
5331
5412
|
);
|
|
5332
5413
|
const value = useMemo14(() => {
|
|
@@ -5335,7 +5416,7 @@ var PercentageInput = React37.forwardRef(
|
|
|
5335
5416
|
}
|
|
5336
5417
|
return _value;
|
|
5337
5418
|
}, [_value, useMinorUnit, maxDecimalScale]);
|
|
5338
|
-
const handleChange =
|
|
5419
|
+
const handleChange = useCallback21(
|
|
5339
5420
|
(event) => {
|
|
5340
5421
|
if (event.target.value === "") {
|
|
5341
5422
|
setValue(void 0);
|
|
@@ -5414,7 +5495,7 @@ var PercentageInput3 = ({
|
|
|
5414
5495
|
};
|
|
5415
5496
|
|
|
5416
5497
|
// src/components/FilterMenu/components/PercentageRange.tsx
|
|
5417
|
-
import React39, { useCallback as
|
|
5498
|
+
import React39, { useCallback as useCallback22 } from "react";
|
|
5418
5499
|
import { Stack as Stack9 } from "@mui/joy";
|
|
5419
5500
|
function PercentageRange(props) {
|
|
5420
5501
|
const { id, label, value, onChange, hidden, useMinorUnit, maxDecimalScale, min, max } = props;
|
|
@@ -5425,7 +5506,7 @@ function PercentageRange(props) {
|
|
|
5425
5506
|
);
|
|
5426
5507
|
const minValue = internalValue?.[0];
|
|
5427
5508
|
const maxValue = internalValue?.[1];
|
|
5428
|
-
const handleMinChange =
|
|
5509
|
+
const handleMinChange = useCallback22(
|
|
5429
5510
|
(event) => {
|
|
5430
5511
|
const newMinValue = event.target.value;
|
|
5431
5512
|
const currentMaxValue = maxValue;
|
|
@@ -5437,7 +5518,7 @@ function PercentageRange(props) {
|
|
|
5437
5518
|
},
|
|
5438
5519
|
[maxValue, setInternalValue]
|
|
5439
5520
|
);
|
|
5440
|
-
const handleMaxChange =
|
|
5521
|
+
const handleMaxChange = useCallback22(
|
|
5441
5522
|
(event) => {
|
|
5442
5523
|
const newMaxValue = event.target.value;
|
|
5443
5524
|
const currentMinValue = minValue;
|
|
@@ -5485,13 +5566,13 @@ function PercentageRange(props) {
|
|
|
5485
5566
|
PercentageRange.displayName = "PercentageRange";
|
|
5486
5567
|
|
|
5487
5568
|
// src/components/FilterMenu/components/Autocomplete.tsx
|
|
5488
|
-
import React40, { useCallback as
|
|
5569
|
+
import React40, { useCallback as useCallback23 } from "react";
|
|
5489
5570
|
import { Stack as Stack10 } from "@mui/joy";
|
|
5490
5571
|
function Autocomplete2(props) {
|
|
5491
5572
|
const { id, label, value, onChange, options, multiple, hidden, placeholder } = props;
|
|
5492
5573
|
const [internalValue, setInternalValue] = useControlledState(value, void 0, onChange);
|
|
5493
5574
|
const autocompleteValue = typeof internalValue === "string" || typeof internalValue === "number" ? String(internalValue) : void 0;
|
|
5494
|
-
const handleChange =
|
|
5575
|
+
const handleChange = useCallback23(
|
|
5495
5576
|
(event) => {
|
|
5496
5577
|
const val = event.target.value;
|
|
5497
5578
|
if (val) {
|
|
@@ -5540,7 +5621,7 @@ function FilterMenu(props) {
|
|
|
5540
5621
|
void 0
|
|
5541
5622
|
// onChange는 Apply 버튼에서만 호출
|
|
5542
5623
|
);
|
|
5543
|
-
const handleFilterChange =
|
|
5624
|
+
const handleFilterChange = useCallback24(
|
|
5544
5625
|
(filterId, value) => {
|
|
5545
5626
|
setInternalValues((prev) => ({
|
|
5546
5627
|
...prev,
|
|
@@ -5549,11 +5630,11 @@ function FilterMenu(props) {
|
|
|
5549
5630
|
},
|
|
5550
5631
|
[setInternalValues]
|
|
5551
5632
|
);
|
|
5552
|
-
const handleApply =
|
|
5633
|
+
const handleApply = useCallback24(() => {
|
|
5553
5634
|
onChange?.(internalValues);
|
|
5554
5635
|
onClose?.();
|
|
5555
5636
|
}, [onChange, onClose, internalValues]);
|
|
5556
|
-
const handleClear =
|
|
5637
|
+
const handleClear = useCallback24(() => {
|
|
5557
5638
|
const clearedValues = resetValues || {};
|
|
5558
5639
|
setInternalValues(clearedValues);
|
|
5559
5640
|
onChange?.(clearedValues);
|
|
@@ -5589,7 +5670,7 @@ function FilterMenu(props) {
|
|
|
5589
5670
|
FilterMenu.displayName = "FilterMenu";
|
|
5590
5671
|
|
|
5591
5672
|
// src/components/Uploader/Uploader.tsx
|
|
5592
|
-
import React42, { useCallback as
|
|
5673
|
+
import React42, { useCallback as useCallback25, useEffect as useEffect11, useMemo as useMemo15, useRef as useRef10, useState as useState14 } from "react";
|
|
5593
5674
|
import { styled as styled21, Input as Input2 } from "@mui/joy";
|
|
5594
5675
|
import MuiFileUploadIcon from "@mui/icons-material/CloudUploadRounded";
|
|
5595
5676
|
import MuiUploadFileIcon from "@mui/icons-material/UploadFileRounded";
|
|
@@ -5738,12 +5819,12 @@ var Uploader = React42.memo(
|
|
|
5738
5819
|
error: errorProp,
|
|
5739
5820
|
helperText: helperTextProp
|
|
5740
5821
|
} = props;
|
|
5741
|
-
const dropZoneRef =
|
|
5742
|
-
const inputRef =
|
|
5743
|
-
const [errorText, setErrorText] =
|
|
5744
|
-
const [files, setFiles] =
|
|
5745
|
-
const [uploaded, setUploaded] =
|
|
5746
|
-
const [previewState, setPreviewState] =
|
|
5822
|
+
const dropZoneRef = useRef10(null);
|
|
5823
|
+
const inputRef = useRef10(null);
|
|
5824
|
+
const [errorText, setErrorText] = useState14();
|
|
5825
|
+
const [files, setFiles] = useState14([]);
|
|
5826
|
+
const [uploaded, setUploaded] = useState14(props.uploaded || []);
|
|
5827
|
+
const [previewState, setPreviewState] = useState14("idle");
|
|
5747
5828
|
const accepts = useMemo15(() => accept.split(",").map((accept2) => accept2.trim()), [accept]);
|
|
5748
5829
|
const parsedAccepts = useMemo15(
|
|
5749
5830
|
() => accepts.flatMap((type) => {
|
|
@@ -5789,7 +5870,7 @@ var Uploader = React42.memo(
|
|
|
5789
5870
|
() => !maxCount || maxCount && [...uploaded, ...files].length !== maxCount,
|
|
5790
5871
|
[files, maxCount, uploaded]
|
|
5791
5872
|
);
|
|
5792
|
-
const addFiles =
|
|
5873
|
+
const addFiles = useCallback25(
|
|
5793
5874
|
(uploads) => {
|
|
5794
5875
|
try {
|
|
5795
5876
|
const types = parsedAccepts.map((type) => type.replace(".", "")) || [];
|
|
@@ -5834,7 +5915,7 @@ var Uploader = React42.memo(
|
|
|
5834
5915
|
},
|
|
5835
5916
|
[files, uploaded, maxCount, parsedAccepts, maxFileSize, maxFileTotalSize, name, onChange]
|
|
5836
5917
|
);
|
|
5837
|
-
|
|
5918
|
+
useEffect11(() => {
|
|
5838
5919
|
if (!dropZoneRef.current || disabled) {
|
|
5839
5920
|
return;
|
|
5840
5921
|
}
|
|
@@ -5872,7 +5953,7 @@ var Uploader = React42.memo(
|
|
|
5872
5953
|
);
|
|
5873
5954
|
return () => cleanup?.();
|
|
5874
5955
|
}, [disabled, addFiles]);
|
|
5875
|
-
|
|
5956
|
+
useEffect11(() => {
|
|
5876
5957
|
if (inputRef.current && minCount) {
|
|
5877
5958
|
if (files.length < minCount) {
|
|
5878
5959
|
inputRef.current.setCustomValidity(`At least ${minCount} files are required.`);
|
|
@@ -5881,14 +5962,14 @@ var Uploader = React42.memo(
|
|
|
5881
5962
|
}
|
|
5882
5963
|
}
|
|
5883
5964
|
}, [inputRef, files, minCount]);
|
|
5884
|
-
const handleFileChanged =
|
|
5965
|
+
const handleFileChanged = useCallback25(
|
|
5885
5966
|
(event) => {
|
|
5886
5967
|
const files2 = Array.from(event.target.files || []);
|
|
5887
5968
|
addFiles(files2);
|
|
5888
5969
|
},
|
|
5889
5970
|
[addFiles]
|
|
5890
5971
|
);
|
|
5891
|
-
const handleDeleteFile =
|
|
5972
|
+
const handleDeleteFile = useCallback25(
|
|
5892
5973
|
(deletedFile) => {
|
|
5893
5974
|
if (deletedFile instanceof File) {
|
|
5894
5975
|
setFiles((current) => {
|
|
@@ -5908,7 +5989,7 @@ var Uploader = React42.memo(
|
|
|
5908
5989
|
},
|
|
5909
5990
|
[name, onChange, onDelete]
|
|
5910
5991
|
);
|
|
5911
|
-
const handleUploaderButtonClick =
|
|
5992
|
+
const handleUploaderButtonClick = useCallback25(() => {
|
|
5912
5993
|
inputRef.current?.click();
|
|
5913
5994
|
}, []);
|
|
5914
5995
|
const uploader = /* @__PURE__ */ React42.createElement(
|
|
@@ -6003,16 +6084,16 @@ function IconMenuButton(props) {
|
|
|
6003
6084
|
IconMenuButton.displayName = "IconMenuButton";
|
|
6004
6085
|
|
|
6005
6086
|
// src/components/Markdown/Markdown.tsx
|
|
6006
|
-
import React44, { lazy, Suspense, useEffect as
|
|
6087
|
+
import React44, { lazy, Suspense, useEffect as useEffect12, useState as useState15 } from "react";
|
|
6007
6088
|
import { Skeleton } from "@mui/joy";
|
|
6008
6089
|
import { Link as Link2 } from "@mui/joy";
|
|
6009
6090
|
import remarkGfm from "remark-gfm";
|
|
6010
6091
|
var LazyReactMarkdown = lazy(() => import("react-markdown"));
|
|
6011
6092
|
var Markdown = (props) => {
|
|
6012
|
-
const [
|
|
6013
|
-
|
|
6093
|
+
const [rehypeAccent, setRehypeAccent] = useState15(null);
|
|
6094
|
+
useEffect12(() => {
|
|
6014
6095
|
const loadRehypeAccent = async () => {
|
|
6015
|
-
const module = await
|
|
6096
|
+
const module = await import("./chunks/rehype-accent-FZRUD7VI.js");
|
|
6016
6097
|
setRehypeAccent(() => module.rehypeAccent);
|
|
6017
6098
|
};
|
|
6018
6099
|
loadRehypeAccent();
|
|
@@ -6029,7 +6110,7 @@ var Markdown = (props) => {
|
|
|
6029
6110
|
fallback,
|
|
6030
6111
|
...innerProps
|
|
6031
6112
|
} = props;
|
|
6032
|
-
if (!
|
|
6113
|
+
if (!rehypeAccent) {
|
|
6033
6114
|
return null;
|
|
6034
6115
|
}
|
|
6035
6116
|
return /* @__PURE__ */ React44.createElement(Typography, { component: "div", color, textColor, level: defaultLevel, ...innerProps }, /* @__PURE__ */ React44.createElement(
|
|
@@ -6042,7 +6123,7 @@ var Markdown = (props) => {
|
|
|
6042
6123
|
{
|
|
6043
6124
|
...markdownOptions,
|
|
6044
6125
|
children: content,
|
|
6045
|
-
rehypePlugins: [[
|
|
6126
|
+
rehypePlugins: [[rehypeAccent, { accentColor }]],
|
|
6046
6127
|
remarkPlugins: [remarkGfm],
|
|
6047
6128
|
components: {
|
|
6048
6129
|
a: ({ children, href }) => /* @__PURE__ */ React44.createElement(Link2, { href, target: defaultLinkAction }, children),
|
|
@@ -6184,7 +6265,7 @@ function MenuButton(props) {
|
|
|
6184
6265
|
MenuButton.displayName = "MenuButton";
|
|
6185
6266
|
|
|
6186
6267
|
// src/components/MonthPicker/MonthPicker.tsx
|
|
6187
|
-
import React46, { forwardRef as forwardRef9, useCallback as
|
|
6268
|
+
import React46, { forwardRef as forwardRef9, useCallback as useCallback26, useEffect as useEffect13, useImperativeHandle as useImperativeHandle4, useRef as useRef11, useState as useState16 } from "react";
|
|
6188
6269
|
import CalendarTodayIcon3 from "@mui/icons-material/CalendarToday";
|
|
6189
6270
|
import { styled as styled22, useThemeProps as useThemeProps7 } from "@mui/joy";
|
|
6190
6271
|
import { FocusTrap as FocusTrap3, ClickAwayListener as ClickAwayListener3, Popper as Popper4 } from "@mui/base";
|
|
@@ -6266,14 +6347,14 @@ var MonthPicker = forwardRef9((inProps, ref) => {
|
|
|
6266
6347
|
locale,
|
|
6267
6348
|
...innerProps
|
|
6268
6349
|
} = props;
|
|
6269
|
-
const innerRef =
|
|
6270
|
-
const buttonRef =
|
|
6350
|
+
const innerRef = useRef11(null);
|
|
6351
|
+
const buttonRef = useRef11(null);
|
|
6271
6352
|
const [value, setValue, isControlled] = useControlledState(
|
|
6272
6353
|
props.value,
|
|
6273
6354
|
props.defaultValue || "",
|
|
6274
|
-
|
|
6355
|
+
useCallback26((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
|
|
6275
6356
|
);
|
|
6276
|
-
const getFormattedDisplayValue =
|
|
6357
|
+
const getFormattedDisplayValue = useCallback26(
|
|
6277
6358
|
(inputValue) => {
|
|
6278
6359
|
if (!inputValue) return "";
|
|
6279
6360
|
try {
|
|
@@ -6284,19 +6365,19 @@ var MonthPicker = forwardRef9((inProps, ref) => {
|
|
|
6284
6365
|
},
|
|
6285
6366
|
[format, displayFormat, locale]
|
|
6286
6367
|
);
|
|
6287
|
-
const [displayValue, setDisplayValue] =
|
|
6288
|
-
const [anchorEl, setAnchorEl] =
|
|
6368
|
+
const [displayValue, setDisplayValue] = useState16(() => getFormattedDisplayValue(value));
|
|
6369
|
+
const [anchorEl, setAnchorEl] = useState16(null);
|
|
6289
6370
|
const open = Boolean(anchorEl);
|
|
6290
|
-
|
|
6371
|
+
useEffect13(() => {
|
|
6291
6372
|
if (!anchorEl) {
|
|
6292
6373
|
innerRef.current?.blur();
|
|
6293
6374
|
}
|
|
6294
6375
|
}, [anchorEl, innerRef]);
|
|
6295
6376
|
useImperativeHandle4(ref, () => innerRef.current, [innerRef]);
|
|
6296
|
-
|
|
6377
|
+
useEffect13(() => {
|
|
6297
6378
|
setDisplayValue(getFormattedDisplayValue(value));
|
|
6298
6379
|
}, [value, getFormattedDisplayValue]);
|
|
6299
|
-
const handleChange =
|
|
6380
|
+
const handleChange = useCallback26(
|
|
6300
6381
|
(event) => {
|
|
6301
6382
|
const newValue = event.target.value;
|
|
6302
6383
|
setValue(newValue);
|
|
@@ -6306,14 +6387,14 @@ var MonthPicker = forwardRef9((inProps, ref) => {
|
|
|
6306
6387
|
},
|
|
6307
6388
|
[setValue, getFormattedDisplayValue, isControlled]
|
|
6308
6389
|
);
|
|
6309
|
-
const handleCalendarToggle =
|
|
6390
|
+
const handleCalendarToggle = useCallback26(
|
|
6310
6391
|
(event) => {
|
|
6311
6392
|
setAnchorEl(anchorEl ? null : event.currentTarget);
|
|
6312
6393
|
innerRef.current?.focus();
|
|
6313
6394
|
},
|
|
6314
6395
|
[anchorEl, setAnchorEl, innerRef]
|
|
6315
6396
|
);
|
|
6316
|
-
const handleInputMouseDown =
|
|
6397
|
+
const handleInputMouseDown = useCallback26(
|
|
6317
6398
|
(event) => {
|
|
6318
6399
|
event.preventDefault();
|
|
6319
6400
|
buttonRef.current?.focus();
|
|
@@ -6437,7 +6518,7 @@ var MonthPicker = forwardRef9((inProps, ref) => {
|
|
|
6437
6518
|
});
|
|
6438
6519
|
|
|
6439
6520
|
// src/components/MonthRangePicker/MonthRangePicker.tsx
|
|
6440
|
-
import React47, { forwardRef as forwardRef10, useCallback as
|
|
6521
|
+
import React47, { forwardRef as forwardRef10, useCallback as useCallback27, useEffect as useEffect14, useImperativeHandle as useImperativeHandle5, useMemo as useMemo16, useRef as useRef12, useState as useState17 } from "react";
|
|
6441
6522
|
import { IMaskInput as IMaskInput3, IMask as IMask3 } from "react-imask";
|
|
6442
6523
|
import CalendarTodayIcon4 from "@mui/icons-material/CalendarToday";
|
|
6443
6524
|
import { styled as styled23, useThemeProps as useThemeProps8 } from "@mui/joy";
|
|
@@ -6545,35 +6626,35 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
|
|
|
6545
6626
|
size,
|
|
6546
6627
|
...innerProps
|
|
6547
6628
|
} = props;
|
|
6548
|
-
const innerRef =
|
|
6629
|
+
const innerRef = useRef12(null);
|
|
6549
6630
|
const [value, setValue] = useControlledState(
|
|
6550
6631
|
props.value,
|
|
6551
6632
|
props.defaultValue || "",
|
|
6552
|
-
|
|
6633
|
+
useCallback27((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
|
|
6553
6634
|
);
|
|
6554
|
-
const [anchorEl, setAnchorEl] =
|
|
6635
|
+
const [anchorEl, setAnchorEl] = useState17(null);
|
|
6555
6636
|
const open = Boolean(anchorEl);
|
|
6556
6637
|
const calendarValue = useMemo16(() => value ? parseDates2(value) : void 0, [value]);
|
|
6557
|
-
|
|
6638
|
+
useEffect14(() => {
|
|
6558
6639
|
if (!anchorEl) {
|
|
6559
6640
|
innerRef.current?.blur();
|
|
6560
6641
|
}
|
|
6561
6642
|
}, [anchorEl, innerRef]);
|
|
6562
6643
|
useImperativeHandle5(ref, () => innerRef.current, [innerRef]);
|
|
6563
|
-
const handleChange =
|
|
6644
|
+
const handleChange = useCallback27(
|
|
6564
6645
|
(event) => {
|
|
6565
6646
|
setValue(event.target.value);
|
|
6566
6647
|
},
|
|
6567
6648
|
[setValue]
|
|
6568
6649
|
);
|
|
6569
|
-
const handleCalendarToggle =
|
|
6650
|
+
const handleCalendarToggle = useCallback27(
|
|
6570
6651
|
(event) => {
|
|
6571
6652
|
setAnchorEl(anchorEl ? null : event.currentTarget);
|
|
6572
6653
|
innerRef.current?.focus();
|
|
6573
6654
|
},
|
|
6574
6655
|
[anchorEl, setAnchorEl, innerRef]
|
|
6575
6656
|
);
|
|
6576
|
-
const handleCalendarChange =
|
|
6657
|
+
const handleCalendarChange = useCallback27(
|
|
6577
6658
|
([date1, date2]) => {
|
|
6578
6659
|
if (!date1 || !date2) return;
|
|
6579
6660
|
setValue(formatValueString4([date1, date2], format));
|
|
@@ -6800,7 +6881,7 @@ function Navigator(props) {
|
|
|
6800
6881
|
Navigator.displayName = "Navigator";
|
|
6801
6882
|
|
|
6802
6883
|
// src/components/ProfileMenu/ProfileMenu.tsx
|
|
6803
|
-
import React51, { useCallback as
|
|
6884
|
+
import React51, { useCallback as useCallback28, useMemo as useMemo17 } from "react";
|
|
6804
6885
|
import { Dropdown as Dropdown2, ListDivider, menuItemClasses, styled as styled26, MenuButton as MenuButton2 } from "@mui/joy";
|
|
6805
6886
|
import { ClickAwayListener as ClickAwayListener5 } from "@mui/base";
|
|
6806
6887
|
import DropdownIcon from "@mui/icons-material/ArrowDropDown";
|
|
@@ -6852,7 +6933,7 @@ function ProfileMenu(props) {
|
|
|
6852
6933
|
const [open, setOpen] = useControlledState(
|
|
6853
6934
|
_open,
|
|
6854
6935
|
defaultOpen ?? false,
|
|
6855
|
-
|
|
6936
|
+
useCallback28((value) => onOpenChange?.(value), [onOpenChange])
|
|
6856
6937
|
);
|
|
6857
6938
|
return /* @__PURE__ */ React51.createElement(ClickAwayListener5, { onClickAway: () => setOpen(false) }, /* @__PURE__ */ React51.createElement("div", null, /* @__PURE__ */ React51.createElement(Dropdown2, { open }, /* @__PURE__ */ React51.createElement(
|
|
6858
6939
|
ProfileMenuButton,
|