@ceed/cds 1.28.0 → 1.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/DataTable/hooks.d.ts +2 -1
- package/dist/components/DataTable/utils.d.ts +1 -0
- package/dist/components/DatePicker/DatePicker.d.ts +10 -0
- package/dist/components/DateRangePicker/DateRangePicker.d.ts +10 -0
- package/dist/components/inputs/DatePicker.md +48 -0
- package/dist/components/inputs/DateRangePicker.md +62 -0
- package/dist/index.browser.js +2 -2
- package/dist/index.browser.js.map +3 -3
- package/dist/index.cjs +197 -9
- package/dist/index.js +197 -9
- package/framer/index.js +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -2238,6 +2238,15 @@ function calculateColumnGroups(columnGroupingModel, columns, visibleFields) {
|
|
|
2238
2238
|
const correctedMaxLevel = filteredGroupsByLevel.length > 0 ? filteredGroupsByLevel.length - 1 : -1;
|
|
2239
2239
|
return { groups: filteredGroupsByLevel, maxLevel: correctedMaxLevel, fieldsInGroupingModel };
|
|
2240
2240
|
}
|
|
2241
|
+
function parsePxValue(value) {
|
|
2242
|
+
if (!value) return null;
|
|
2243
|
+
const trimmed = value.trim();
|
|
2244
|
+
if (trimmed.endsWith("px")) {
|
|
2245
|
+
const num = parseFloat(trimmed);
|
|
2246
|
+
return isNaN(num) ? null : num;
|
|
2247
|
+
}
|
|
2248
|
+
return null;
|
|
2249
|
+
}
|
|
2241
2250
|
function getTextAlign(props) {
|
|
2242
2251
|
return !props.editMode && ["number", "date", "currency"].includes(props.type || "") ? "end" : "start";
|
|
2243
2252
|
}
|
|
@@ -2550,10 +2559,47 @@ var CalendarSheet = (0, import_joy28.styled)(Sheet_default, {
|
|
|
2550
2559
|
slot: "sheet",
|
|
2551
2560
|
overridesResolver: (props, styles) => styles.root
|
|
2552
2561
|
})(({ theme }) => ({
|
|
2553
|
-
width: "264px",
|
|
2554
2562
|
boxShadow: theme.shadow.md,
|
|
2555
2563
|
borderRadius: theme.radius.md
|
|
2556
2564
|
}));
|
|
2565
|
+
var CalendarSheetContent = (0, import_joy28.styled)("div", {
|
|
2566
|
+
name: "DatePicker",
|
|
2567
|
+
slot: "sheetContent"
|
|
2568
|
+
})({
|
|
2569
|
+
display: "flex",
|
|
2570
|
+
flexDirection: "row"
|
|
2571
|
+
});
|
|
2572
|
+
var CalendarSection = (0, import_joy28.styled)("div", {
|
|
2573
|
+
name: "DatePicker",
|
|
2574
|
+
slot: "calendarSection"
|
|
2575
|
+
})({
|
|
2576
|
+
width: "264px"
|
|
2577
|
+
});
|
|
2578
|
+
var PresetPanel = (0, import_joy28.styled)("div", {
|
|
2579
|
+
name: "DatePicker",
|
|
2580
|
+
slot: "presetPanel"
|
|
2581
|
+
})(({ theme }) => ({
|
|
2582
|
+
display: "flex",
|
|
2583
|
+
flexDirection: "column",
|
|
2584
|
+
borderLeft: `1px solid ${theme.vars.palette.divider}`,
|
|
2585
|
+
padding: theme.spacing(1),
|
|
2586
|
+
minWidth: "120px",
|
|
2587
|
+
overflowY: "auto"
|
|
2588
|
+
}));
|
|
2589
|
+
var PresetItem = (0, import_joy28.styled)(Button_default, {
|
|
2590
|
+
name: "DatePicker",
|
|
2591
|
+
slot: "presetItem",
|
|
2592
|
+
shouldForwardProp: (prop) => prop !== "active"
|
|
2593
|
+
})(({ active }) => [
|
|
2594
|
+
{
|
|
2595
|
+
width: "100%",
|
|
2596
|
+
justifyContent: "flex-start",
|
|
2597
|
+
whiteSpace: "nowrap"
|
|
2598
|
+
},
|
|
2599
|
+
active && {
|
|
2600
|
+
fontWeight: "bold"
|
|
2601
|
+
}
|
|
2602
|
+
]);
|
|
2557
2603
|
var DatePickerRoot = (0, import_joy28.styled)("div", {
|
|
2558
2604
|
name: "DatePicker",
|
|
2559
2605
|
slot: "root",
|
|
@@ -2671,6 +2717,7 @@ var DatePicker = (0, import_react20.forwardRef)((inProps, ref) => {
|
|
|
2671
2717
|
hideClearButton,
|
|
2672
2718
|
readOnly,
|
|
2673
2719
|
shouldDisableDate,
|
|
2720
|
+
presets,
|
|
2674
2721
|
...innerProps
|
|
2675
2722
|
} = props;
|
|
2676
2723
|
const innerRef = (0, import_react20.useRef)(null);
|
|
@@ -2752,6 +2799,35 @@ var DatePicker = (0, import_react20.forwardRef)((inProps, ref) => {
|
|
|
2752
2799
|
},
|
|
2753
2800
|
[inputReadOnly, buttonRef]
|
|
2754
2801
|
);
|
|
2802
|
+
const handlePresetClick = (0, import_react20.useCallback)(
|
|
2803
|
+
(presetValue) => {
|
|
2804
|
+
handleChange({
|
|
2805
|
+
target: {
|
|
2806
|
+
name: props.name,
|
|
2807
|
+
value: presetValue
|
|
2808
|
+
}
|
|
2809
|
+
});
|
|
2810
|
+
setAnchorEl(null);
|
|
2811
|
+
},
|
|
2812
|
+
[handleChange, props.name]
|
|
2813
|
+
);
|
|
2814
|
+
const isPresetDisabled = (0, import_react20.useCallback)(
|
|
2815
|
+
(presetValue) => {
|
|
2816
|
+
try {
|
|
2817
|
+
const date = parseDate(presetValue, format);
|
|
2818
|
+
if (Number.isNaN(date.getTime())) return true;
|
|
2819
|
+
if (minDate && date < new Date(minDate)) return true;
|
|
2820
|
+
if (maxDate && date > new Date(maxDate)) return true;
|
|
2821
|
+
if (disableFuture && date > new Date((/* @__PURE__ */ new Date()).toDateString())) return true;
|
|
2822
|
+
if (disablePast && date < new Date((/* @__PURE__ */ new Date()).toDateString())) return true;
|
|
2823
|
+
if (shouldDisableDate?.(presetValue)) return true;
|
|
2824
|
+
return false;
|
|
2825
|
+
} catch {
|
|
2826
|
+
return true;
|
|
2827
|
+
}
|
|
2828
|
+
},
|
|
2829
|
+
[format, minDate, maxDate, disableFuture, disablePast, shouldDisableDate]
|
|
2830
|
+
);
|
|
2755
2831
|
return /* @__PURE__ */ import_react20.default.createElement(DatePickerRoot, null, /* @__PURE__ */ import_react20.default.createElement(import_base3.FocusTrap, { open: true }, /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, /* @__PURE__ */ import_react20.default.createElement(
|
|
2756
2832
|
Input_default,
|
|
2757
2833
|
{
|
|
@@ -2817,7 +2893,7 @@ var DatePicker = (0, import_react20.forwardRef)((inProps, ref) => {
|
|
|
2817
2893
|
"aria-label": "Calendar Tooltip",
|
|
2818
2894
|
"aria-expanded": open
|
|
2819
2895
|
},
|
|
2820
|
-
/* @__PURE__ */ import_react20.default.createElement(CalendarSheet, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react20.default.createElement(
|
|
2896
|
+
/* @__PURE__ */ import_react20.default.createElement(CalendarSheet, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react20.default.createElement(CalendarSheetContent, null, /* @__PURE__ */ import_react20.default.createElement(CalendarSection, null, /* @__PURE__ */ import_react20.default.createElement(
|
|
2821
2897
|
Calendar_default,
|
|
2822
2898
|
{
|
|
2823
2899
|
value: value && !Number.isNaN(parseDate(value, format).getTime()) ? [parseDate(value, format), void 0] : void 0,
|
|
@@ -2861,7 +2937,22 @@ var DatePicker = (0, import_react20.forwardRef)((inProps, ref) => {
|
|
|
2861
2937
|
},
|
|
2862
2938
|
"Clear"
|
|
2863
2939
|
)
|
|
2864
|
-
))
|
|
2940
|
+
)), presets && presets.length > 0 && /* @__PURE__ */ import_react20.default.createElement(PresetPanel, null, presets.map((preset) => {
|
|
2941
|
+
const disabled2 = isPresetDisabled(preset.value);
|
|
2942
|
+
return /* @__PURE__ */ import_react20.default.createElement(
|
|
2943
|
+
PresetItem,
|
|
2944
|
+
{
|
|
2945
|
+
key: preset.label,
|
|
2946
|
+
size: "sm",
|
|
2947
|
+
variant: value === preset.value ? "soft" : "plain",
|
|
2948
|
+
color: value === preset.value ? "primary" : "neutral",
|
|
2949
|
+
active: value === preset.value,
|
|
2950
|
+
disabled: disabled2,
|
|
2951
|
+
onClick: () => handlePresetClick(preset.value)
|
|
2952
|
+
},
|
|
2953
|
+
preset.label
|
|
2954
|
+
);
|
|
2955
|
+
}))))
|
|
2865
2956
|
)))));
|
|
2866
2957
|
});
|
|
2867
2958
|
|
|
@@ -3537,7 +3628,8 @@ function useDataTableRenderer({
|
|
|
3537
3628
|
isRowSelectable,
|
|
3538
3629
|
columnGroupingModel,
|
|
3539
3630
|
columnVisibilityModel,
|
|
3540
|
-
onColumnVisibilityModelChange
|
|
3631
|
+
onColumnVisibilityModelChange,
|
|
3632
|
+
checkboxSelection
|
|
3541
3633
|
}) {
|
|
3542
3634
|
if (pinnedColumns && columnGroupingModel) {
|
|
3543
3635
|
throw new Error(
|
|
@@ -3570,6 +3662,14 @@ function useDataTableRenderer({
|
|
|
3570
3662
|
[reorderedColumns, visibilityModel]
|
|
3571
3663
|
);
|
|
3572
3664
|
const visibleFieldSet = (0, import_react25.useMemo)(() => new Set(visibleColumns.map((c) => c.field)), [visibleColumns]);
|
|
3665
|
+
const tableMinWidth = (0, import_react25.useMemo)(() => {
|
|
3666
|
+
const DEFAULT_MIN = 50;
|
|
3667
|
+
let total = checkboxSelection ? 40 : 0;
|
|
3668
|
+
for (const col of visibleColumns) {
|
|
3669
|
+
total += parsePxValue(col.minWidth) ?? parsePxValue(col.width) ?? DEFAULT_MIN;
|
|
3670
|
+
}
|
|
3671
|
+
return total;
|
|
3672
|
+
}, [visibleColumns, checkboxSelection]);
|
|
3573
3673
|
const allColumnsByField = (0, import_react25.useMemo)(
|
|
3574
3674
|
() => reorderedColumns.reduce(
|
|
3575
3675
|
(acc, curr) => ({
|
|
@@ -3870,6 +3970,7 @@ function useDataTableRenderer({
|
|
|
3870
3970
|
]
|
|
3871
3971
|
),
|
|
3872
3972
|
columns,
|
|
3973
|
+
tableMinWidth,
|
|
3873
3974
|
processedColumnGroups,
|
|
3874
3975
|
onTotalSelect: (0, import_react25.useCallback)(() => {
|
|
3875
3976
|
const selectableRows = rows.filter((row, i) => {
|
|
@@ -4259,6 +4360,7 @@ function Component(props, apiRef) {
|
|
|
4259
4360
|
onTotalSelect,
|
|
4260
4361
|
HeadCell: HeadCell2,
|
|
4261
4362
|
BodyRow: BodyRow2,
|
|
4363
|
+
tableMinWidth,
|
|
4262
4364
|
// For keyboard selection
|
|
4263
4365
|
selectionAnchor,
|
|
4264
4366
|
setSelectionAnchor
|
|
@@ -4448,7 +4550,7 @@ function Component(props, apiRef) {
|
|
|
4448
4550
|
ref: parentRef,
|
|
4449
4551
|
...backgroundProps
|
|
4450
4552
|
},
|
|
4451
|
-
/* @__PURE__ */ import_react28.default.createElement(Table, { ...innerProps }, /* @__PURE__ */ import_react28.default.createElement("colgroup", null, checkboxSelection && /* @__PURE__ */ import_react28.default.createElement(
|
|
4553
|
+
/* @__PURE__ */ import_react28.default.createElement(Table, { ...innerProps, sx: { ...innerProps.sx, minWidth: tableMinWidth } }, /* @__PURE__ */ import_react28.default.createElement("colgroup", null, checkboxSelection && /* @__PURE__ */ import_react28.default.createElement(
|
|
4452
4554
|
"col",
|
|
4453
4555
|
{
|
|
4454
4556
|
style: {
|
|
@@ -4461,7 +4563,8 @@ function Component(props, apiRef) {
|
|
|
4461
4563
|
ref: c.tableColRef,
|
|
4462
4564
|
key: `${c.field.toString()}_${c.width}`,
|
|
4463
4565
|
style: {
|
|
4464
|
-
width: c.width
|
|
4566
|
+
width: c.width,
|
|
4567
|
+
minWidth: c.minWidth ?? "50px"
|
|
4465
4568
|
}
|
|
4466
4569
|
}
|
|
4467
4570
|
))), /* @__PURE__ */ import_react28.default.createElement("thead", null, processedColumnGroups && processedColumnGroups.groups.length > 0 && processedColumnGroups.groups.map((levelGroups, level) => /* @__PURE__ */ import_react28.default.createElement("tr", { key: `group-level-${level}` }, checkboxSelection && level === 0 && /* @__PURE__ */ import_react28.default.createElement(
|
|
@@ -4680,10 +4783,47 @@ var CalendarSheet2 = (0, import_joy36.styled)(Sheet_default, {
|
|
|
4680
4783
|
overridesResolver: (props, styles) => styles.root
|
|
4681
4784
|
})(({ theme }) => ({
|
|
4682
4785
|
zIndex: theme.zIndex.tooltip,
|
|
4683
|
-
width: "264px",
|
|
4684
4786
|
boxShadow: theme.shadow.md,
|
|
4685
4787
|
borderRadius: theme.radius.md
|
|
4686
4788
|
}));
|
|
4789
|
+
var CalendarSheetContent2 = (0, import_joy36.styled)("div", {
|
|
4790
|
+
name: "DateRangePicker",
|
|
4791
|
+
slot: "sheetContent"
|
|
4792
|
+
})({
|
|
4793
|
+
display: "flex",
|
|
4794
|
+
flexDirection: "row"
|
|
4795
|
+
});
|
|
4796
|
+
var CalendarSection2 = (0, import_joy36.styled)("div", {
|
|
4797
|
+
name: "DateRangePicker",
|
|
4798
|
+
slot: "calendarSection"
|
|
4799
|
+
})({
|
|
4800
|
+
width: "264px"
|
|
4801
|
+
});
|
|
4802
|
+
var PresetPanel2 = (0, import_joy36.styled)("div", {
|
|
4803
|
+
name: "DateRangePicker",
|
|
4804
|
+
slot: "presetPanel"
|
|
4805
|
+
})(({ theme }) => ({
|
|
4806
|
+
display: "flex",
|
|
4807
|
+
flexDirection: "column",
|
|
4808
|
+
borderLeft: `1px solid ${theme.vars.palette.divider}`,
|
|
4809
|
+
padding: theme.spacing(1),
|
|
4810
|
+
minWidth: "120px",
|
|
4811
|
+
overflowY: "auto"
|
|
4812
|
+
}));
|
|
4813
|
+
var PresetItem2 = (0, import_joy36.styled)(Button_default, {
|
|
4814
|
+
name: "DateRangePicker",
|
|
4815
|
+
slot: "presetItem",
|
|
4816
|
+
shouldForwardProp: (prop) => prop !== "active"
|
|
4817
|
+
})(({ active }) => [
|
|
4818
|
+
{
|
|
4819
|
+
width: "100%",
|
|
4820
|
+
justifyContent: "flex-start",
|
|
4821
|
+
whiteSpace: "nowrap"
|
|
4822
|
+
},
|
|
4823
|
+
active && {
|
|
4824
|
+
fontWeight: "bold"
|
|
4825
|
+
}
|
|
4826
|
+
]);
|
|
4687
4827
|
var DateRangePickerRoot = (0, import_joy36.styled)("div", {
|
|
4688
4828
|
name: "DateRangePicker",
|
|
4689
4829
|
slot: "root",
|
|
@@ -4812,6 +4952,7 @@ var DateRangePicker = (0, import_react29.forwardRef)((inProps, ref) => {
|
|
|
4812
4952
|
inputReadOnly,
|
|
4813
4953
|
hideClearButton,
|
|
4814
4954
|
readOnly,
|
|
4955
|
+
presets,
|
|
4815
4956
|
...innerProps
|
|
4816
4957
|
} = props;
|
|
4817
4958
|
const innerRef = (0, import_react29.useRef)(null);
|
|
@@ -4911,6 +5052,38 @@ var DateRangePicker = (0, import_react29.forwardRef)((inProps, ref) => {
|
|
|
4911
5052
|
},
|
|
4912
5053
|
[inputReadOnly, buttonRef]
|
|
4913
5054
|
);
|
|
5055
|
+
const handlePresetClick = (0, import_react29.useCallback)(
|
|
5056
|
+
(presetValue) => {
|
|
5057
|
+
if (props.value !== void 0) {
|
|
5058
|
+
onChange?.({ target: { name: props.name, value: presetValue } });
|
|
5059
|
+
} else {
|
|
5060
|
+
const dates = parseDates(presetValue, format);
|
|
5061
|
+
setDisplayValue(formatValueString2(dates, displayFormat));
|
|
5062
|
+
setValue(presetValue);
|
|
5063
|
+
}
|
|
5064
|
+
setAnchorEl(null);
|
|
5065
|
+
},
|
|
5066
|
+
[props.value, props.name, onChange, setValue, setAnchorEl, format, displayFormat]
|
|
5067
|
+
);
|
|
5068
|
+
const isPresetDisabled = (0, import_react29.useCallback)(
|
|
5069
|
+
(presetValue) => {
|
|
5070
|
+
try {
|
|
5071
|
+
const dates = parseDates(presetValue, format);
|
|
5072
|
+
if (dates.some((d) => Number.isNaN(d.getTime()))) return true;
|
|
5073
|
+
const today = new Date((/* @__PURE__ */ new Date()).toDateString());
|
|
5074
|
+
for (const date of dates) {
|
|
5075
|
+
if (minDate && date < new Date(minDate)) return true;
|
|
5076
|
+
if (maxDate && date > new Date(maxDate)) return true;
|
|
5077
|
+
if (disableFuture && date > today) return true;
|
|
5078
|
+
if (disablePast && date < today) return true;
|
|
5079
|
+
}
|
|
5080
|
+
return false;
|
|
5081
|
+
} catch {
|
|
5082
|
+
return true;
|
|
5083
|
+
}
|
|
5084
|
+
},
|
|
5085
|
+
[format, minDate, maxDate, disableFuture, disablePast]
|
|
5086
|
+
);
|
|
4914
5087
|
return /* @__PURE__ */ import_react29.default.createElement(DateRangePickerRoot, null, /* @__PURE__ */ import_react29.default.createElement(import_base4.FocusTrap, { open: true }, /* @__PURE__ */ import_react29.default.createElement(import_react29.default.Fragment, null, /* @__PURE__ */ import_react29.default.createElement(
|
|
4915
5088
|
Input_default,
|
|
4916
5089
|
{
|
|
@@ -4976,7 +5149,7 @@ var DateRangePicker = (0, import_react29.forwardRef)((inProps, ref) => {
|
|
|
4976
5149
|
"aria-label": "Calendar Tooltip",
|
|
4977
5150
|
"aria-expanded": open
|
|
4978
5151
|
},
|
|
4979
|
-
/* @__PURE__ */ import_react29.default.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
5152
|
+
/* @__PURE__ */ import_react29.default.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react29.default.createElement(CalendarSheetContent2, null, /* @__PURE__ */ import_react29.default.createElement(CalendarSection2, null, /* @__PURE__ */ import_react29.default.createElement(
|
|
4980
5153
|
Calendar_default,
|
|
4981
5154
|
{
|
|
4982
5155
|
rangeSelection: true,
|
|
@@ -5008,7 +5181,22 @@ var DateRangePicker = (0, import_react29.forwardRef)((inProps, ref) => {
|
|
|
5008
5181
|
},
|
|
5009
5182
|
"Clear"
|
|
5010
5183
|
)
|
|
5011
|
-
))
|
|
5184
|
+
)), presets && presets.length > 0 && /* @__PURE__ */ import_react29.default.createElement(PresetPanel2, null, presets.map((preset) => {
|
|
5185
|
+
const disabled2 = isPresetDisabled(preset.value);
|
|
5186
|
+
return /* @__PURE__ */ import_react29.default.createElement(
|
|
5187
|
+
PresetItem2,
|
|
5188
|
+
{
|
|
5189
|
+
key: preset.label,
|
|
5190
|
+
size: "sm",
|
|
5191
|
+
variant: value === preset.value ? "soft" : "plain",
|
|
5192
|
+
color: value === preset.value ? "primary" : "neutral",
|
|
5193
|
+
active: value === preset.value,
|
|
5194
|
+
disabled: disabled2,
|
|
5195
|
+
onClick: () => handlePresetClick(preset.value)
|
|
5196
|
+
},
|
|
5197
|
+
preset.label
|
|
5198
|
+
);
|
|
5199
|
+
}))))
|
|
5012
5200
|
)))));
|
|
5013
5201
|
});
|
|
5014
5202
|
DateRangePicker.displayName = "DateRangePicker";
|
package/dist/index.js
CHANGED
|
@@ -2112,6 +2112,15 @@ function calculateColumnGroups(columnGroupingModel, columns, visibleFields) {
|
|
|
2112
2112
|
const correctedMaxLevel = filteredGroupsByLevel.length > 0 ? filteredGroupsByLevel.length - 1 : -1;
|
|
2113
2113
|
return { groups: filteredGroupsByLevel, maxLevel: correctedMaxLevel, fieldsInGroupingModel };
|
|
2114
2114
|
}
|
|
2115
|
+
function parsePxValue(value) {
|
|
2116
|
+
if (!value) return null;
|
|
2117
|
+
const trimmed = value.trim();
|
|
2118
|
+
if (trimmed.endsWith("px")) {
|
|
2119
|
+
const num = parseFloat(trimmed);
|
|
2120
|
+
return isNaN(num) ? null : num;
|
|
2121
|
+
}
|
|
2122
|
+
return null;
|
|
2123
|
+
}
|
|
2115
2124
|
function getTextAlign(props) {
|
|
2116
2125
|
return !props.editMode && ["number", "date", "currency"].includes(props.type || "") ? "end" : "start";
|
|
2117
2126
|
}
|
|
@@ -2433,10 +2442,47 @@ var CalendarSheet = styled10(Sheet_default, {
|
|
|
2433
2442
|
slot: "sheet",
|
|
2434
2443
|
overridesResolver: (props, styles) => styles.root
|
|
2435
2444
|
})(({ theme }) => ({
|
|
2436
|
-
width: "264px",
|
|
2437
2445
|
boxShadow: theme.shadow.md,
|
|
2438
2446
|
borderRadius: theme.radius.md
|
|
2439
2447
|
}));
|
|
2448
|
+
var CalendarSheetContent = styled10("div", {
|
|
2449
|
+
name: "DatePicker",
|
|
2450
|
+
slot: "sheetContent"
|
|
2451
|
+
})({
|
|
2452
|
+
display: "flex",
|
|
2453
|
+
flexDirection: "row"
|
|
2454
|
+
});
|
|
2455
|
+
var CalendarSection = styled10("div", {
|
|
2456
|
+
name: "DatePicker",
|
|
2457
|
+
slot: "calendarSection"
|
|
2458
|
+
})({
|
|
2459
|
+
width: "264px"
|
|
2460
|
+
});
|
|
2461
|
+
var PresetPanel = styled10("div", {
|
|
2462
|
+
name: "DatePicker",
|
|
2463
|
+
slot: "presetPanel"
|
|
2464
|
+
})(({ theme }) => ({
|
|
2465
|
+
display: "flex",
|
|
2466
|
+
flexDirection: "column",
|
|
2467
|
+
borderLeft: `1px solid ${theme.vars.palette.divider}`,
|
|
2468
|
+
padding: theme.spacing(1),
|
|
2469
|
+
minWidth: "120px",
|
|
2470
|
+
overflowY: "auto"
|
|
2471
|
+
}));
|
|
2472
|
+
var PresetItem = styled10(Button_default, {
|
|
2473
|
+
name: "DatePicker",
|
|
2474
|
+
slot: "presetItem",
|
|
2475
|
+
shouldForwardProp: (prop) => prop !== "active"
|
|
2476
|
+
})(({ active }) => [
|
|
2477
|
+
{
|
|
2478
|
+
width: "100%",
|
|
2479
|
+
justifyContent: "flex-start",
|
|
2480
|
+
whiteSpace: "nowrap"
|
|
2481
|
+
},
|
|
2482
|
+
active && {
|
|
2483
|
+
fontWeight: "bold"
|
|
2484
|
+
}
|
|
2485
|
+
]);
|
|
2440
2486
|
var DatePickerRoot = styled10("div", {
|
|
2441
2487
|
name: "DatePicker",
|
|
2442
2488
|
slot: "root",
|
|
@@ -2554,6 +2600,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2554
2600
|
hideClearButton,
|
|
2555
2601
|
readOnly,
|
|
2556
2602
|
shouldDisableDate,
|
|
2603
|
+
presets,
|
|
2557
2604
|
...innerProps
|
|
2558
2605
|
} = props;
|
|
2559
2606
|
const innerRef = useRef4(null);
|
|
@@ -2635,6 +2682,35 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2635
2682
|
},
|
|
2636
2683
|
[inputReadOnly, buttonRef]
|
|
2637
2684
|
);
|
|
2685
|
+
const handlePresetClick = useCallback8(
|
|
2686
|
+
(presetValue) => {
|
|
2687
|
+
handleChange({
|
|
2688
|
+
target: {
|
|
2689
|
+
name: props.name,
|
|
2690
|
+
value: presetValue
|
|
2691
|
+
}
|
|
2692
|
+
});
|
|
2693
|
+
setAnchorEl(null);
|
|
2694
|
+
},
|
|
2695
|
+
[handleChange, props.name]
|
|
2696
|
+
);
|
|
2697
|
+
const isPresetDisabled = useCallback8(
|
|
2698
|
+
(presetValue) => {
|
|
2699
|
+
try {
|
|
2700
|
+
const date = parseDate(presetValue, format);
|
|
2701
|
+
if (Number.isNaN(date.getTime())) return true;
|
|
2702
|
+
if (minDate && date < new Date(minDate)) return true;
|
|
2703
|
+
if (maxDate && date > new Date(maxDate)) return true;
|
|
2704
|
+
if (disableFuture && date > new Date((/* @__PURE__ */ new Date()).toDateString())) return true;
|
|
2705
|
+
if (disablePast && date < new Date((/* @__PURE__ */ new Date()).toDateString())) return true;
|
|
2706
|
+
if (shouldDisableDate?.(presetValue)) return true;
|
|
2707
|
+
return false;
|
|
2708
|
+
} catch {
|
|
2709
|
+
return true;
|
|
2710
|
+
}
|
|
2711
|
+
},
|
|
2712
|
+
[format, minDate, maxDate, disableFuture, disablePast, shouldDisableDate]
|
|
2713
|
+
);
|
|
2638
2714
|
return /* @__PURE__ */ React18.createElement(DatePickerRoot, null, /* @__PURE__ */ React18.createElement(FocusTrap, { open: true }, /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(
|
|
2639
2715
|
Input_default,
|
|
2640
2716
|
{
|
|
@@ -2700,7 +2776,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2700
2776
|
"aria-label": "Calendar Tooltip",
|
|
2701
2777
|
"aria-expanded": open
|
|
2702
2778
|
},
|
|
2703
|
-
/* @__PURE__ */ React18.createElement(CalendarSheet, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React18.createElement(
|
|
2779
|
+
/* @__PURE__ */ React18.createElement(CalendarSheet, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React18.createElement(CalendarSheetContent, null, /* @__PURE__ */ React18.createElement(CalendarSection, null, /* @__PURE__ */ React18.createElement(
|
|
2704
2780
|
Calendar_default,
|
|
2705
2781
|
{
|
|
2706
2782
|
value: value && !Number.isNaN(parseDate(value, format).getTime()) ? [parseDate(value, format), void 0] : void 0,
|
|
@@ -2744,7 +2820,22 @@ var DatePicker = forwardRef6((inProps, ref) => {
|
|
|
2744
2820
|
},
|
|
2745
2821
|
"Clear"
|
|
2746
2822
|
)
|
|
2747
|
-
))
|
|
2823
|
+
)), presets && presets.length > 0 && /* @__PURE__ */ React18.createElement(PresetPanel, null, presets.map((preset) => {
|
|
2824
|
+
const disabled2 = isPresetDisabled(preset.value);
|
|
2825
|
+
return /* @__PURE__ */ React18.createElement(
|
|
2826
|
+
PresetItem,
|
|
2827
|
+
{
|
|
2828
|
+
key: preset.label,
|
|
2829
|
+
size: "sm",
|
|
2830
|
+
variant: value === preset.value ? "soft" : "plain",
|
|
2831
|
+
color: value === preset.value ? "primary" : "neutral",
|
|
2832
|
+
active: value === preset.value,
|
|
2833
|
+
disabled: disabled2,
|
|
2834
|
+
onClick: () => handlePresetClick(preset.value)
|
|
2835
|
+
},
|
|
2836
|
+
preset.label
|
|
2837
|
+
);
|
|
2838
|
+
}))))
|
|
2748
2839
|
)))));
|
|
2749
2840
|
});
|
|
2750
2841
|
|
|
@@ -3420,7 +3511,8 @@ function useDataTableRenderer({
|
|
|
3420
3511
|
isRowSelectable,
|
|
3421
3512
|
columnGroupingModel,
|
|
3422
3513
|
columnVisibilityModel,
|
|
3423
|
-
onColumnVisibilityModelChange
|
|
3514
|
+
onColumnVisibilityModelChange,
|
|
3515
|
+
checkboxSelection
|
|
3424
3516
|
}) {
|
|
3425
3517
|
if (pinnedColumns && columnGroupingModel) {
|
|
3426
3518
|
throw new Error(
|
|
@@ -3453,6 +3545,14 @@ function useDataTableRenderer({
|
|
|
3453
3545
|
[reorderedColumns, visibilityModel]
|
|
3454
3546
|
);
|
|
3455
3547
|
const visibleFieldSet = useMemo9(() => new Set(visibleColumns.map((c) => c.field)), [visibleColumns]);
|
|
3548
|
+
const tableMinWidth = useMemo9(() => {
|
|
3549
|
+
const DEFAULT_MIN = 50;
|
|
3550
|
+
let total = checkboxSelection ? 40 : 0;
|
|
3551
|
+
for (const col of visibleColumns) {
|
|
3552
|
+
total += parsePxValue(col.minWidth) ?? parsePxValue(col.width) ?? DEFAULT_MIN;
|
|
3553
|
+
}
|
|
3554
|
+
return total;
|
|
3555
|
+
}, [visibleColumns, checkboxSelection]);
|
|
3456
3556
|
const allColumnsByField = useMemo9(
|
|
3457
3557
|
() => reorderedColumns.reduce(
|
|
3458
3558
|
(acc, curr) => ({
|
|
@@ -3753,6 +3853,7 @@ function useDataTableRenderer({
|
|
|
3753
3853
|
]
|
|
3754
3854
|
),
|
|
3755
3855
|
columns,
|
|
3856
|
+
tableMinWidth,
|
|
3756
3857
|
processedColumnGroups,
|
|
3757
3858
|
onTotalSelect: useCallback10(() => {
|
|
3758
3859
|
const selectableRows = rows.filter((row, i) => {
|
|
@@ -4142,6 +4243,7 @@ function Component(props, apiRef) {
|
|
|
4142
4243
|
onTotalSelect,
|
|
4143
4244
|
HeadCell: HeadCell2,
|
|
4144
4245
|
BodyRow: BodyRow2,
|
|
4246
|
+
tableMinWidth,
|
|
4145
4247
|
// For keyboard selection
|
|
4146
4248
|
selectionAnchor,
|
|
4147
4249
|
setSelectionAnchor
|
|
@@ -4331,7 +4433,7 @@ function Component(props, apiRef) {
|
|
|
4331
4433
|
ref: parentRef,
|
|
4332
4434
|
...backgroundProps
|
|
4333
4435
|
},
|
|
4334
|
-
/* @__PURE__ */ React25.createElement(Table, { ...innerProps }, /* @__PURE__ */ React25.createElement("colgroup", null, checkboxSelection && /* @__PURE__ */ React25.createElement(
|
|
4436
|
+
/* @__PURE__ */ React25.createElement(Table, { ...innerProps, sx: { ...innerProps.sx, minWidth: tableMinWidth } }, /* @__PURE__ */ React25.createElement("colgroup", null, checkboxSelection && /* @__PURE__ */ React25.createElement(
|
|
4335
4437
|
"col",
|
|
4336
4438
|
{
|
|
4337
4439
|
style: {
|
|
@@ -4344,7 +4446,8 @@ function Component(props, apiRef) {
|
|
|
4344
4446
|
ref: c.tableColRef,
|
|
4345
4447
|
key: `${c.field.toString()}_${c.width}`,
|
|
4346
4448
|
style: {
|
|
4347
|
-
width: c.width
|
|
4449
|
+
width: c.width,
|
|
4450
|
+
minWidth: c.minWidth ?? "50px"
|
|
4348
4451
|
}
|
|
4349
4452
|
}
|
|
4350
4453
|
))), /* @__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(
|
|
@@ -4563,10 +4666,47 @@ var CalendarSheet2 = styled14(Sheet_default, {
|
|
|
4563
4666
|
overridesResolver: (props, styles) => styles.root
|
|
4564
4667
|
})(({ theme }) => ({
|
|
4565
4668
|
zIndex: theme.zIndex.tooltip,
|
|
4566
|
-
width: "264px",
|
|
4567
4669
|
boxShadow: theme.shadow.md,
|
|
4568
4670
|
borderRadius: theme.radius.md
|
|
4569
4671
|
}));
|
|
4672
|
+
var CalendarSheetContent2 = styled14("div", {
|
|
4673
|
+
name: "DateRangePicker",
|
|
4674
|
+
slot: "sheetContent"
|
|
4675
|
+
})({
|
|
4676
|
+
display: "flex",
|
|
4677
|
+
flexDirection: "row"
|
|
4678
|
+
});
|
|
4679
|
+
var CalendarSection2 = styled14("div", {
|
|
4680
|
+
name: "DateRangePicker",
|
|
4681
|
+
slot: "calendarSection"
|
|
4682
|
+
})({
|
|
4683
|
+
width: "264px"
|
|
4684
|
+
});
|
|
4685
|
+
var PresetPanel2 = styled14("div", {
|
|
4686
|
+
name: "DateRangePicker",
|
|
4687
|
+
slot: "presetPanel"
|
|
4688
|
+
})(({ theme }) => ({
|
|
4689
|
+
display: "flex",
|
|
4690
|
+
flexDirection: "column",
|
|
4691
|
+
borderLeft: `1px solid ${theme.vars.palette.divider}`,
|
|
4692
|
+
padding: theme.spacing(1),
|
|
4693
|
+
minWidth: "120px",
|
|
4694
|
+
overflowY: "auto"
|
|
4695
|
+
}));
|
|
4696
|
+
var PresetItem2 = styled14(Button_default, {
|
|
4697
|
+
name: "DateRangePicker",
|
|
4698
|
+
slot: "presetItem",
|
|
4699
|
+
shouldForwardProp: (prop) => prop !== "active"
|
|
4700
|
+
})(({ active }) => [
|
|
4701
|
+
{
|
|
4702
|
+
width: "100%",
|
|
4703
|
+
justifyContent: "flex-start",
|
|
4704
|
+
whiteSpace: "nowrap"
|
|
4705
|
+
},
|
|
4706
|
+
active && {
|
|
4707
|
+
fontWeight: "bold"
|
|
4708
|
+
}
|
|
4709
|
+
]);
|
|
4570
4710
|
var DateRangePickerRoot = styled14("div", {
|
|
4571
4711
|
name: "DateRangePicker",
|
|
4572
4712
|
slot: "root",
|
|
@@ -4695,6 +4835,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
4695
4835
|
inputReadOnly,
|
|
4696
4836
|
hideClearButton,
|
|
4697
4837
|
readOnly,
|
|
4838
|
+
presets,
|
|
4698
4839
|
...innerProps
|
|
4699
4840
|
} = props;
|
|
4700
4841
|
const innerRef = useRef8(null);
|
|
@@ -4794,6 +4935,38 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
4794
4935
|
},
|
|
4795
4936
|
[inputReadOnly, buttonRef]
|
|
4796
4937
|
);
|
|
4938
|
+
const handlePresetClick = useCallback13(
|
|
4939
|
+
(presetValue) => {
|
|
4940
|
+
if (props.value !== void 0) {
|
|
4941
|
+
onChange?.({ target: { name: props.name, value: presetValue } });
|
|
4942
|
+
} else {
|
|
4943
|
+
const dates = parseDates(presetValue, format);
|
|
4944
|
+
setDisplayValue(formatValueString2(dates, displayFormat));
|
|
4945
|
+
setValue(presetValue);
|
|
4946
|
+
}
|
|
4947
|
+
setAnchorEl(null);
|
|
4948
|
+
},
|
|
4949
|
+
[props.value, props.name, onChange, setValue, setAnchorEl, format, displayFormat]
|
|
4950
|
+
);
|
|
4951
|
+
const isPresetDisabled = useCallback13(
|
|
4952
|
+
(presetValue) => {
|
|
4953
|
+
try {
|
|
4954
|
+
const dates = parseDates(presetValue, format);
|
|
4955
|
+
if (dates.some((d) => Number.isNaN(d.getTime()))) return true;
|
|
4956
|
+
const today = new Date((/* @__PURE__ */ new Date()).toDateString());
|
|
4957
|
+
for (const date of dates) {
|
|
4958
|
+
if (minDate && date < new Date(minDate)) return true;
|
|
4959
|
+
if (maxDate && date > new Date(maxDate)) return true;
|
|
4960
|
+
if (disableFuture && date > today) return true;
|
|
4961
|
+
if (disablePast && date < today) return true;
|
|
4962
|
+
}
|
|
4963
|
+
return false;
|
|
4964
|
+
} catch {
|
|
4965
|
+
return true;
|
|
4966
|
+
}
|
|
4967
|
+
},
|
|
4968
|
+
[format, minDate, maxDate, disableFuture, disablePast]
|
|
4969
|
+
);
|
|
4797
4970
|
return /* @__PURE__ */ React26.createElement(DateRangePickerRoot, null, /* @__PURE__ */ React26.createElement(FocusTrap2, { open: true }, /* @__PURE__ */ React26.createElement(React26.Fragment, null, /* @__PURE__ */ React26.createElement(
|
|
4798
4971
|
Input_default,
|
|
4799
4972
|
{
|
|
@@ -4859,7 +5032,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
4859
5032
|
"aria-label": "Calendar Tooltip",
|
|
4860
5033
|
"aria-expanded": open
|
|
4861
5034
|
},
|
|
4862
|
-
/* @__PURE__ */ React26.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React26.createElement(
|
|
5035
|
+
/* @__PURE__ */ React26.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React26.createElement(CalendarSheetContent2, null, /* @__PURE__ */ React26.createElement(CalendarSection2, null, /* @__PURE__ */ React26.createElement(
|
|
4863
5036
|
Calendar_default,
|
|
4864
5037
|
{
|
|
4865
5038
|
rangeSelection: true,
|
|
@@ -4891,7 +5064,22 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
|
|
|
4891
5064
|
},
|
|
4892
5065
|
"Clear"
|
|
4893
5066
|
)
|
|
4894
|
-
))
|
|
5067
|
+
)), presets && presets.length > 0 && /* @__PURE__ */ React26.createElement(PresetPanel2, null, presets.map((preset) => {
|
|
5068
|
+
const disabled2 = isPresetDisabled(preset.value);
|
|
5069
|
+
return /* @__PURE__ */ React26.createElement(
|
|
5070
|
+
PresetItem2,
|
|
5071
|
+
{
|
|
5072
|
+
key: preset.label,
|
|
5073
|
+
size: "sm",
|
|
5074
|
+
variant: value === preset.value ? "soft" : "plain",
|
|
5075
|
+
color: value === preset.value ? "primary" : "neutral",
|
|
5076
|
+
active: value === preset.value,
|
|
5077
|
+
disabled: disabled2,
|
|
5078
|
+
onClick: () => handlePresetClick(preset.value)
|
|
5079
|
+
},
|
|
5080
|
+
preset.label
|
|
5081
|
+
);
|
|
5082
|
+
}))))
|
|
4895
5083
|
)))));
|
|
4896
5084
|
});
|
|
4897
5085
|
DateRangePicker.displayName = "DateRangePicker";
|