@ceed/ads 1.29.1 → 1.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/Overview.md +5 -5
  2. package/dist/components/DatePicker/DatePicker.d.ts +10 -0
  3. package/dist/components/DateRangePicker/DateRangePicker.d.ts +10 -0
  4. package/dist/components/data-display/Avatar.md +85 -74
  5. package/dist/components/data-display/Badge.md +23 -5
  6. package/dist/components/data-display/Chip.md +49 -35
  7. package/dist/components/data-display/DataTable.md +93 -0
  8. package/dist/components/data-display/InfoSign.md +15 -5
  9. package/dist/components/data-display/Markdown.md +22 -26
  10. package/dist/components/data-display/Table.md +63 -53
  11. package/dist/components/data-display/Tooltip.md +70 -58
  12. package/dist/components/data-display/Typography.md +28 -11
  13. package/dist/components/feedback/Alert.md +86 -74
  14. package/dist/components/feedback/CircularProgress.md +20 -5
  15. package/dist/components/feedback/Dialog.md +8 -12
  16. package/dist/components/feedback/Modal.md +12 -16
  17. package/dist/components/feedback/Skeleton.md +20 -5
  18. package/dist/components/inputs/Autocomplete.md +8 -10
  19. package/dist/components/inputs/Button.md +107 -87
  20. package/dist/components/inputs/ButtonGroup.md +20 -5
  21. package/dist/components/inputs/Calendar.md +25 -5
  22. package/dist/components/inputs/Checkbox.md +171 -450
  23. package/dist/components/inputs/CurrencyInput.md +25 -5
  24. package/dist/components/inputs/DatePicker.md +87 -5
  25. package/dist/components/inputs/DateRangePicker.md +91 -5
  26. package/dist/components/inputs/FilterMenu.md +85 -9
  27. package/dist/components/inputs/FilterableCheckboxGroup.md +23 -8
  28. package/dist/components/inputs/FormControl.md +34 -6
  29. package/dist/components/inputs/IconButton.md +21 -5
  30. package/dist/components/inputs/Input.md +254 -68
  31. package/dist/components/inputs/MonthPicker.md +28 -5
  32. package/dist/components/inputs/MonthRangePicker.md +26 -5
  33. package/dist/components/inputs/PercentageInput.md +28 -5
  34. package/dist/components/inputs/RadioButton.md +26 -5
  35. package/dist/components/inputs/RadioList.md +23 -6
  36. package/dist/components/inputs/RadioTileGroup.md +40 -8
  37. package/dist/components/inputs/Select.md +59 -5
  38. package/dist/components/inputs/Slider.md +26 -5
  39. package/dist/components/inputs/Switch.md +23 -5
  40. package/dist/components/inputs/Textarea.md +27 -5
  41. package/dist/components/inputs/Uploader/Uploader.md +24 -5
  42. package/dist/components/layout/Box.md +66 -58
  43. package/dist/components/layout/Container.md +9 -13
  44. package/dist/components/layout/Grid.md +91 -75
  45. package/dist/components/layout/Stack.md +85 -70
  46. package/dist/components/navigation/Breadcrumbs.md +23 -14
  47. package/dist/components/navigation/Dropdown.md +29 -20
  48. package/dist/components/navigation/IconMenuButton.md +24 -11
  49. package/dist/components/navigation/InsetDrawer.md +16 -5
  50. package/dist/components/navigation/Link.md +30 -14
  51. package/dist/components/navigation/Menu.md +33 -20
  52. package/dist/components/navigation/MenuButton.md +26 -12
  53. package/dist/components/navigation/NavigationGroup.md +7 -11
  54. package/dist/components/navigation/NavigationItem.md +8 -12
  55. package/dist/components/navigation/Navigator.md +5 -9
  56. package/dist/components/navigation/Pagination.md +21 -12
  57. package/dist/components/navigation/ProfileMenu.md +17 -5
  58. package/dist/components/navigation/Stepper.md +18 -5
  59. package/dist/components/navigation/Tabs.md +37 -14
  60. package/dist/components/surfaces/Accordions.md +12 -16
  61. package/dist/components/surfaces/Card.md +59 -47
  62. package/dist/components/surfaces/Divider.md +70 -61
  63. package/dist/components/surfaces/Sheet.md +18 -5
  64. package/dist/index.browser.js +2 -2
  65. package/dist/index.browser.js.map +3 -3
  66. package/dist/index.cjs +173 -6
  67. package/dist/index.js +173 -6
  68. package/framer/index.js +1 -1
  69. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -2557,10 +2557,47 @@ var CalendarSheet = (0, import_joy28.styled)(Sheet_default, {
2557
2557
  slot: "sheet",
2558
2558
  overridesResolver: (props, styles) => styles.root
2559
2559
  })(({ theme }) => ({
2560
- width: "264px",
2561
2560
  boxShadow: theme.shadow.md,
2562
2561
  borderRadius: theme.radius.md
2563
2562
  }));
2563
+ var CalendarSheetContent = (0, import_joy28.styled)("div", {
2564
+ name: "DatePicker",
2565
+ slot: "sheetContent"
2566
+ })({
2567
+ display: "flex",
2568
+ flexDirection: "row"
2569
+ });
2570
+ var CalendarSection = (0, import_joy28.styled)("div", {
2571
+ name: "DatePicker",
2572
+ slot: "calendarSection"
2573
+ })({
2574
+ width: "264px"
2575
+ });
2576
+ var PresetPanel = (0, import_joy28.styled)("div", {
2577
+ name: "DatePicker",
2578
+ slot: "presetPanel"
2579
+ })(({ theme }) => ({
2580
+ display: "flex",
2581
+ flexDirection: "column",
2582
+ borderLeft: `1px solid ${theme.vars.palette.divider}`,
2583
+ padding: theme.spacing(1),
2584
+ minWidth: "120px",
2585
+ overflowY: "auto"
2586
+ }));
2587
+ var PresetItem = (0, import_joy28.styled)(Button_default, {
2588
+ name: "DatePicker",
2589
+ slot: "presetItem",
2590
+ shouldForwardProp: (prop) => prop !== "active"
2591
+ })(({ active }) => [
2592
+ {
2593
+ width: "100%",
2594
+ justifyContent: "flex-start",
2595
+ whiteSpace: "nowrap"
2596
+ },
2597
+ active && {
2598
+ fontWeight: "bold"
2599
+ }
2600
+ ]);
2564
2601
  var DatePickerRoot = (0, import_joy28.styled)("div", {
2565
2602
  name: "DatePicker",
2566
2603
  slot: "root",
@@ -2678,6 +2715,7 @@ var DatePicker = (0, import_react20.forwardRef)((inProps, ref) => {
2678
2715
  hideClearButton,
2679
2716
  readOnly,
2680
2717
  shouldDisableDate,
2718
+ presets,
2681
2719
  ...innerProps
2682
2720
  } = props;
2683
2721
  const innerRef = (0, import_react20.useRef)(null);
@@ -2759,6 +2797,35 @@ var DatePicker = (0, import_react20.forwardRef)((inProps, ref) => {
2759
2797
  },
2760
2798
  [inputReadOnly, buttonRef]
2761
2799
  );
2800
+ const handlePresetClick = (0, import_react20.useCallback)(
2801
+ (presetValue) => {
2802
+ handleChange({
2803
+ target: {
2804
+ name: props.name,
2805
+ value: presetValue
2806
+ }
2807
+ });
2808
+ setAnchorEl(null);
2809
+ },
2810
+ [handleChange, props.name]
2811
+ );
2812
+ const isPresetDisabled = (0, import_react20.useCallback)(
2813
+ (presetValue) => {
2814
+ try {
2815
+ const date = parseDate(presetValue, format);
2816
+ if (Number.isNaN(date.getTime())) return true;
2817
+ if (minDate && date < new Date(minDate)) return true;
2818
+ if (maxDate && date > new Date(maxDate)) return true;
2819
+ if (disableFuture && date > new Date((/* @__PURE__ */ new Date()).toDateString())) return true;
2820
+ if (disablePast && date < new Date((/* @__PURE__ */ new Date()).toDateString())) return true;
2821
+ if (shouldDisableDate?.(presetValue)) return true;
2822
+ return false;
2823
+ } catch {
2824
+ return true;
2825
+ }
2826
+ },
2827
+ [format, minDate, maxDate, disableFuture, disablePast, shouldDisableDate]
2828
+ );
2762
2829
  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(
2763
2830
  Input_default,
2764
2831
  {
@@ -2824,7 +2891,7 @@ var DatePicker = (0, import_react20.forwardRef)((inProps, ref) => {
2824
2891
  "aria-label": "Calendar Tooltip",
2825
2892
  "aria-expanded": open
2826
2893
  },
2827
- /* @__PURE__ */ import_react20.default.createElement(CalendarSheet, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react20.default.createElement(
2894
+ /* @__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(
2828
2895
  Calendar_default,
2829
2896
  {
2830
2897
  value: value && !Number.isNaN(parseDate(value, format).getTime()) ? [parseDate(value, format), void 0] : void 0,
@@ -2868,7 +2935,22 @@ var DatePicker = (0, import_react20.forwardRef)((inProps, ref) => {
2868
2935
  },
2869
2936
  "Clear"
2870
2937
  )
2871
- ))
2938
+ )), presets && presets.length > 0 && /* @__PURE__ */ import_react20.default.createElement(PresetPanel, null, presets.map((preset) => {
2939
+ const disabled2 = isPresetDisabled(preset.value);
2940
+ return /* @__PURE__ */ import_react20.default.createElement(
2941
+ PresetItem,
2942
+ {
2943
+ key: preset.label,
2944
+ size: "sm",
2945
+ variant: value === preset.value ? "soft" : "plain",
2946
+ color: value === preset.value ? "primary" : "neutral",
2947
+ active: value === preset.value,
2948
+ disabled: disabled2,
2949
+ onClick: () => handlePresetClick(preset.value)
2950
+ },
2951
+ preset.label
2952
+ );
2953
+ }))))
2872
2954
  )))));
2873
2955
  });
2874
2956
 
@@ -4699,10 +4781,47 @@ var CalendarSheet2 = (0, import_joy36.styled)(Sheet_default, {
4699
4781
  overridesResolver: (props, styles) => styles.root
4700
4782
  })(({ theme }) => ({
4701
4783
  zIndex: theme.zIndex.tooltip,
4702
- width: "264px",
4703
4784
  boxShadow: theme.shadow.md,
4704
4785
  borderRadius: theme.radius.md
4705
4786
  }));
4787
+ var CalendarSheetContent2 = (0, import_joy36.styled)("div", {
4788
+ name: "DateRangePicker",
4789
+ slot: "sheetContent"
4790
+ })({
4791
+ display: "flex",
4792
+ flexDirection: "row"
4793
+ });
4794
+ var CalendarSection2 = (0, import_joy36.styled)("div", {
4795
+ name: "DateRangePicker",
4796
+ slot: "calendarSection"
4797
+ })({
4798
+ width: "264px"
4799
+ });
4800
+ var PresetPanel2 = (0, import_joy36.styled)("div", {
4801
+ name: "DateRangePicker",
4802
+ slot: "presetPanel"
4803
+ })(({ theme }) => ({
4804
+ display: "flex",
4805
+ flexDirection: "column",
4806
+ borderLeft: `1px solid ${theme.vars.palette.divider}`,
4807
+ padding: theme.spacing(1),
4808
+ minWidth: "120px",
4809
+ overflowY: "auto"
4810
+ }));
4811
+ var PresetItem2 = (0, import_joy36.styled)(Button_default, {
4812
+ name: "DateRangePicker",
4813
+ slot: "presetItem",
4814
+ shouldForwardProp: (prop) => prop !== "active"
4815
+ })(({ active }) => [
4816
+ {
4817
+ width: "100%",
4818
+ justifyContent: "flex-start",
4819
+ whiteSpace: "nowrap"
4820
+ },
4821
+ active && {
4822
+ fontWeight: "bold"
4823
+ }
4824
+ ]);
4706
4825
  var DateRangePickerRoot = (0, import_joy36.styled)("div", {
4707
4826
  name: "DateRangePicker",
4708
4827
  slot: "root",
@@ -4831,6 +4950,7 @@ var DateRangePicker = (0, import_react29.forwardRef)((inProps, ref) => {
4831
4950
  inputReadOnly,
4832
4951
  hideClearButton,
4833
4952
  readOnly,
4953
+ presets,
4834
4954
  ...innerProps
4835
4955
  } = props;
4836
4956
  const innerRef = (0, import_react29.useRef)(null);
@@ -4930,6 +5050,38 @@ var DateRangePicker = (0, import_react29.forwardRef)((inProps, ref) => {
4930
5050
  },
4931
5051
  [inputReadOnly, buttonRef]
4932
5052
  );
5053
+ const handlePresetClick = (0, import_react29.useCallback)(
5054
+ (presetValue) => {
5055
+ if (props.value !== void 0) {
5056
+ onChange?.({ target: { name: props.name, value: presetValue } });
5057
+ } else {
5058
+ const dates = parseDates(presetValue, format);
5059
+ setDisplayValue(formatValueString2(dates, displayFormat));
5060
+ setValue(presetValue);
5061
+ }
5062
+ setAnchorEl(null);
5063
+ },
5064
+ [props.value, props.name, onChange, setValue, setAnchorEl, format, displayFormat]
5065
+ );
5066
+ const isPresetDisabled = (0, import_react29.useCallback)(
5067
+ (presetValue) => {
5068
+ try {
5069
+ const dates = parseDates(presetValue, format);
5070
+ if (dates.some((d) => Number.isNaN(d.getTime()))) return true;
5071
+ const today = new Date((/* @__PURE__ */ new Date()).toDateString());
5072
+ for (const date of dates) {
5073
+ if (minDate && date < new Date(minDate)) return true;
5074
+ if (maxDate && date > new Date(maxDate)) return true;
5075
+ if (disableFuture && date > today) return true;
5076
+ if (disablePast && date < today) return true;
5077
+ }
5078
+ return false;
5079
+ } catch {
5080
+ return true;
5081
+ }
5082
+ },
5083
+ [format, minDate, maxDate, disableFuture, disablePast]
5084
+ );
4933
5085
  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(
4934
5086
  Input_default,
4935
5087
  {
@@ -4995,7 +5147,7 @@ var DateRangePicker = (0, import_react29.forwardRef)((inProps, ref) => {
4995
5147
  "aria-label": "Calendar Tooltip",
4996
5148
  "aria-expanded": open
4997
5149
  },
4998
- /* @__PURE__ */ import_react29.default.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ import_react29.default.createElement(
5150
+ /* @__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(
4999
5151
  Calendar_default,
5000
5152
  {
5001
5153
  rangeSelection: true,
@@ -5027,7 +5179,22 @@ var DateRangePicker = (0, import_react29.forwardRef)((inProps, ref) => {
5027
5179
  },
5028
5180
  "Clear"
5029
5181
  )
5030
- ))
5182
+ )), presets && presets.length > 0 && /* @__PURE__ */ import_react29.default.createElement(PresetPanel2, null, presets.map((preset) => {
5183
+ const disabled2 = isPresetDisabled(preset.value);
5184
+ return /* @__PURE__ */ import_react29.default.createElement(
5185
+ PresetItem2,
5186
+ {
5187
+ key: preset.label,
5188
+ size: "sm",
5189
+ variant: value === preset.value ? "soft" : "plain",
5190
+ color: value === preset.value ? "primary" : "neutral",
5191
+ active: value === preset.value,
5192
+ disabled: disabled2,
5193
+ onClick: () => handlePresetClick(preset.value)
5194
+ },
5195
+ preset.label
5196
+ );
5197
+ }))))
5031
5198
  )))));
5032
5199
  });
5033
5200
  DateRangePicker.displayName = "DateRangePicker";
package/dist/index.js CHANGED
@@ -2432,10 +2432,47 @@ var CalendarSheet = styled10(Sheet_default, {
2432
2432
  slot: "sheet",
2433
2433
  overridesResolver: (props, styles) => styles.root
2434
2434
  })(({ theme }) => ({
2435
- width: "264px",
2436
2435
  boxShadow: theme.shadow.md,
2437
2436
  borderRadius: theme.radius.md
2438
2437
  }));
2438
+ var CalendarSheetContent = styled10("div", {
2439
+ name: "DatePicker",
2440
+ slot: "sheetContent"
2441
+ })({
2442
+ display: "flex",
2443
+ flexDirection: "row"
2444
+ });
2445
+ var CalendarSection = styled10("div", {
2446
+ name: "DatePicker",
2447
+ slot: "calendarSection"
2448
+ })({
2449
+ width: "264px"
2450
+ });
2451
+ var PresetPanel = styled10("div", {
2452
+ name: "DatePicker",
2453
+ slot: "presetPanel"
2454
+ })(({ theme }) => ({
2455
+ display: "flex",
2456
+ flexDirection: "column",
2457
+ borderLeft: `1px solid ${theme.vars.palette.divider}`,
2458
+ padding: theme.spacing(1),
2459
+ minWidth: "120px",
2460
+ overflowY: "auto"
2461
+ }));
2462
+ var PresetItem = styled10(Button_default, {
2463
+ name: "DatePicker",
2464
+ slot: "presetItem",
2465
+ shouldForwardProp: (prop) => prop !== "active"
2466
+ })(({ active }) => [
2467
+ {
2468
+ width: "100%",
2469
+ justifyContent: "flex-start",
2470
+ whiteSpace: "nowrap"
2471
+ },
2472
+ active && {
2473
+ fontWeight: "bold"
2474
+ }
2475
+ ]);
2439
2476
  var DatePickerRoot = styled10("div", {
2440
2477
  name: "DatePicker",
2441
2478
  slot: "root",
@@ -2553,6 +2590,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
2553
2590
  hideClearButton,
2554
2591
  readOnly,
2555
2592
  shouldDisableDate,
2593
+ presets,
2556
2594
  ...innerProps
2557
2595
  } = props;
2558
2596
  const innerRef = useRef4(null);
@@ -2634,6 +2672,35 @@ var DatePicker = forwardRef6((inProps, ref) => {
2634
2672
  },
2635
2673
  [inputReadOnly, buttonRef]
2636
2674
  );
2675
+ const handlePresetClick = useCallback8(
2676
+ (presetValue) => {
2677
+ handleChange({
2678
+ target: {
2679
+ name: props.name,
2680
+ value: presetValue
2681
+ }
2682
+ });
2683
+ setAnchorEl(null);
2684
+ },
2685
+ [handleChange, props.name]
2686
+ );
2687
+ const isPresetDisabled = useCallback8(
2688
+ (presetValue) => {
2689
+ try {
2690
+ const date = parseDate(presetValue, format);
2691
+ if (Number.isNaN(date.getTime())) return true;
2692
+ if (minDate && date < new Date(minDate)) return true;
2693
+ if (maxDate && date > new Date(maxDate)) return true;
2694
+ if (disableFuture && date > new Date((/* @__PURE__ */ new Date()).toDateString())) return true;
2695
+ if (disablePast && date < new Date((/* @__PURE__ */ new Date()).toDateString())) return true;
2696
+ if (shouldDisableDate?.(presetValue)) return true;
2697
+ return false;
2698
+ } catch {
2699
+ return true;
2700
+ }
2701
+ },
2702
+ [format, minDate, maxDate, disableFuture, disablePast, shouldDisableDate]
2703
+ );
2637
2704
  return /* @__PURE__ */ React18.createElement(DatePickerRoot, null, /* @__PURE__ */ React18.createElement(FocusTrap, { open: true }, /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(
2638
2705
  Input_default,
2639
2706
  {
@@ -2699,7 +2766,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
2699
2766
  "aria-label": "Calendar Tooltip",
2700
2767
  "aria-expanded": open
2701
2768
  },
2702
- /* @__PURE__ */ React18.createElement(CalendarSheet, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React18.createElement(
2769
+ /* @__PURE__ */ React18.createElement(CalendarSheet, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React18.createElement(CalendarSheetContent, null, /* @__PURE__ */ React18.createElement(CalendarSection, null, /* @__PURE__ */ React18.createElement(
2703
2770
  Calendar_default,
2704
2771
  {
2705
2772
  value: value && !Number.isNaN(parseDate(value, format).getTime()) ? [parseDate(value, format), void 0] : void 0,
@@ -2743,7 +2810,22 @@ var DatePicker = forwardRef6((inProps, ref) => {
2743
2810
  },
2744
2811
  "Clear"
2745
2812
  )
2746
- ))
2813
+ )), presets && presets.length > 0 && /* @__PURE__ */ React18.createElement(PresetPanel, null, presets.map((preset) => {
2814
+ const disabled2 = isPresetDisabled(preset.value);
2815
+ return /* @__PURE__ */ React18.createElement(
2816
+ PresetItem,
2817
+ {
2818
+ key: preset.label,
2819
+ size: "sm",
2820
+ variant: value === preset.value ? "soft" : "plain",
2821
+ color: value === preset.value ? "primary" : "neutral",
2822
+ active: value === preset.value,
2823
+ disabled: disabled2,
2824
+ onClick: () => handlePresetClick(preset.value)
2825
+ },
2826
+ preset.label
2827
+ );
2828
+ }))))
2747
2829
  )))));
2748
2830
  });
2749
2831
 
@@ -4574,10 +4656,47 @@ var CalendarSheet2 = styled14(Sheet_default, {
4574
4656
  overridesResolver: (props, styles) => styles.root
4575
4657
  })(({ theme }) => ({
4576
4658
  zIndex: theme.zIndex.tooltip,
4577
- width: "264px",
4578
4659
  boxShadow: theme.shadow.md,
4579
4660
  borderRadius: theme.radius.md
4580
4661
  }));
4662
+ var CalendarSheetContent2 = styled14("div", {
4663
+ name: "DateRangePicker",
4664
+ slot: "sheetContent"
4665
+ })({
4666
+ display: "flex",
4667
+ flexDirection: "row"
4668
+ });
4669
+ var CalendarSection2 = styled14("div", {
4670
+ name: "DateRangePicker",
4671
+ slot: "calendarSection"
4672
+ })({
4673
+ width: "264px"
4674
+ });
4675
+ var PresetPanel2 = styled14("div", {
4676
+ name: "DateRangePicker",
4677
+ slot: "presetPanel"
4678
+ })(({ theme }) => ({
4679
+ display: "flex",
4680
+ flexDirection: "column",
4681
+ borderLeft: `1px solid ${theme.vars.palette.divider}`,
4682
+ padding: theme.spacing(1),
4683
+ minWidth: "120px",
4684
+ overflowY: "auto"
4685
+ }));
4686
+ var PresetItem2 = styled14(Button_default, {
4687
+ name: "DateRangePicker",
4688
+ slot: "presetItem",
4689
+ shouldForwardProp: (prop) => prop !== "active"
4690
+ })(({ active }) => [
4691
+ {
4692
+ width: "100%",
4693
+ justifyContent: "flex-start",
4694
+ whiteSpace: "nowrap"
4695
+ },
4696
+ active && {
4697
+ fontWeight: "bold"
4698
+ }
4699
+ ]);
4581
4700
  var DateRangePickerRoot = styled14("div", {
4582
4701
  name: "DateRangePicker",
4583
4702
  slot: "root",
@@ -4706,6 +4825,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
4706
4825
  inputReadOnly,
4707
4826
  hideClearButton,
4708
4827
  readOnly,
4828
+ presets,
4709
4829
  ...innerProps
4710
4830
  } = props;
4711
4831
  const innerRef = useRef8(null);
@@ -4805,6 +4925,38 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
4805
4925
  },
4806
4926
  [inputReadOnly, buttonRef]
4807
4927
  );
4928
+ const handlePresetClick = useCallback13(
4929
+ (presetValue) => {
4930
+ if (props.value !== void 0) {
4931
+ onChange?.({ target: { name: props.name, value: presetValue } });
4932
+ } else {
4933
+ const dates = parseDates(presetValue, format);
4934
+ setDisplayValue(formatValueString2(dates, displayFormat));
4935
+ setValue(presetValue);
4936
+ }
4937
+ setAnchorEl(null);
4938
+ },
4939
+ [props.value, props.name, onChange, setValue, setAnchorEl, format, displayFormat]
4940
+ );
4941
+ const isPresetDisabled = useCallback13(
4942
+ (presetValue) => {
4943
+ try {
4944
+ const dates = parseDates(presetValue, format);
4945
+ if (dates.some((d) => Number.isNaN(d.getTime()))) return true;
4946
+ const today = new Date((/* @__PURE__ */ new Date()).toDateString());
4947
+ for (const date of dates) {
4948
+ if (minDate && date < new Date(minDate)) return true;
4949
+ if (maxDate && date > new Date(maxDate)) return true;
4950
+ if (disableFuture && date > today) return true;
4951
+ if (disablePast && date < today) return true;
4952
+ }
4953
+ return false;
4954
+ } catch {
4955
+ return true;
4956
+ }
4957
+ },
4958
+ [format, minDate, maxDate, disableFuture, disablePast]
4959
+ );
4808
4960
  return /* @__PURE__ */ React26.createElement(DateRangePickerRoot, null, /* @__PURE__ */ React26.createElement(FocusTrap2, { open: true }, /* @__PURE__ */ React26.createElement(React26.Fragment, null, /* @__PURE__ */ React26.createElement(
4809
4961
  Input_default,
4810
4962
  {
@@ -4870,7 +5022,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
4870
5022
  "aria-label": "Calendar Tooltip",
4871
5023
  "aria-expanded": open
4872
5024
  },
4873
- /* @__PURE__ */ React26.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React26.createElement(
5025
+ /* @__PURE__ */ React26.createElement(CalendarSheet2, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React26.createElement(CalendarSheetContent2, null, /* @__PURE__ */ React26.createElement(CalendarSection2, null, /* @__PURE__ */ React26.createElement(
4874
5026
  Calendar_default,
4875
5027
  {
4876
5028
  rangeSelection: true,
@@ -4902,7 +5054,22 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
4902
5054
  },
4903
5055
  "Clear"
4904
5056
  )
4905
- ))
5057
+ )), presets && presets.length > 0 && /* @__PURE__ */ React26.createElement(PresetPanel2, null, presets.map((preset) => {
5058
+ const disabled2 = isPresetDisabled(preset.value);
5059
+ return /* @__PURE__ */ React26.createElement(
5060
+ PresetItem2,
5061
+ {
5062
+ key: preset.label,
5063
+ size: "sm",
5064
+ variant: value === preset.value ? "soft" : "plain",
5065
+ color: value === preset.value ? "primary" : "neutral",
5066
+ active: value === preset.value,
5067
+ disabled: disabled2,
5068
+ onClick: () => handlePresetClick(preset.value)
5069
+ },
5070
+ preset.label
5071
+ );
5072
+ }))))
4906
5073
  )))));
4907
5074
  });
4908
5075
  DateRangePicker.displayName = "DateRangePicker";