@ceed/ads 1.8.0 → 1.8.2

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.
@@ -1,6 +1,9 @@
1
1
  import React from "react";
2
2
  import Input from "../Input";
3
3
  interface BaseDateRangePickerProps {
4
+ /**
5
+ * props.format 의 형식을 따라야 한다.
6
+ */
4
7
  value?: string;
5
8
  defaultValue?: string;
6
9
  onChange?: (event: {
@@ -19,7 +22,14 @@ interface BaseDateRangePickerProps {
19
22
  maxDate?: string;
20
23
  disableFuture?: boolean;
21
24
  disablePast?: boolean;
25
+ /**
26
+ * value, onChange의 값은 해당 포맷을 따른다.
27
+ */
22
28
  format?: string;
29
+ /**
30
+ * Input 에 표시되는 값의 포맷을 지정한다.
31
+ */
32
+ displayFormat?: string;
23
33
  inputReadOnly?: boolean;
24
34
  hideClearButton?: boolean;
25
35
  }
@@ -4,6 +4,7 @@ interface FilterMenuProps {
4
4
  filters?: FilterItem[];
5
5
  values?: Record<string, any>;
6
6
  defaultValues?: Record<string, any>;
7
+ resetValues?: Record<string, any>;
7
8
  onChange?: (values: Record<string, any>) => void;
8
9
  onClose?: () => void;
9
10
  /**
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import { FilterPercentageRangeItem } from "../types";
3
3
  interface PercentageRangeProps extends FilterPercentageRangeItem {
4
- onChange?: (value: [number, number] | null) => void;
4
+ onChange?: (value: [number | null, number | null] | null) => void;
5
5
  }
6
6
  declare function PercentageRange(props: PercentageRangeProps): React.JSX.Element | null;
7
7
  declare namespace PercentageRange {
@@ -24,7 +24,7 @@ export interface FilterRadioGroupItem extends FilterBaseItem<string | number> {
24
24
  value: string | number;
25
25
  }[];
26
26
  }
27
- export interface FilterDateRangeItem extends FilterBaseItem<[DateTime, DateTime]>, Pick<DateRangePickerProps, "minDate" | "maxDate" | "disableFuture" | "disablePast" | "format" | "inputReadOnly" | "hideClearButton"> {
27
+ export interface FilterDateRangeItem extends FilterBaseItem<[DateTime, DateTime]>, Pick<DateRangePickerProps, "minDate" | "maxDate" | "disableFuture" | "disablePast" | "format" | "displayFormat" | "inputReadOnly" | "hideClearButton"> {
28
28
  type: "date-range";
29
29
  }
30
30
  export interface FilterCurrencyInputItem extends FilterBaseItem<number>, Pick<CurrencyInputProps, "max" | "placeholder" | "useMinorUnit" | "currency"> {
package/dist/index.cjs CHANGED
@@ -3575,6 +3575,8 @@ function useDataTableRenderer({
3575
3575
  isTotalSelected: _isTotalSelected,
3576
3576
  isRowSelectable
3577
3577
  }) {
3578
+ const onSelectionModelChangeRef = (0, import_react25.useRef)(onSelectionModelChange);
3579
+ onSelectionModelChangeRef.current = onSelectionModelChange;
3578
3580
  const [focusedRowId, setFocusedRowId] = (0, import_react25.useState)(null);
3579
3581
  const [sortModel, setSortModel] = useControlledState(
3580
3582
  controlledSortModel,
@@ -3764,7 +3766,7 @@ function useDataTableRenderer({
3764
3766
  }
3765
3767
  }, [page, rowCount, pageSize, handlePageChange]);
3766
3768
  (0, import_react25.useEffect)(() => {
3767
- onSelectionModelChange?.([]);
3769
+ onSelectionModelChangeRef.current?.([]);
3768
3770
  }, [page]);
3769
3771
  return {
3770
3772
  rowCount,
@@ -4157,7 +4159,9 @@ var CalendarButton2 = (0, import_joy34.styled)(IconButton_default, {
4157
4159
  "&:focus": {
4158
4160
  "--Icon-color": "currentColor",
4159
4161
  outlineOffset: `${theme.getCssVar("focus-thickness")}`,
4160
- outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar("palette-focusVisible")}`
4162
+ outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar(
4163
+ "palette-focusVisible"
4164
+ )}`
4161
4165
  }
4162
4166
  }));
4163
4167
  var StyledPopper2 = (0, import_joy34.styled)(import_base3.Popper, {
@@ -4183,6 +4187,32 @@ var DateRangePickerRoot = (0, import_joy34.styled)("div", {
4183
4187
  })({
4184
4188
  width: "100%"
4185
4189
  });
4190
+ var validValueFormat2 = (value, format) => {
4191
+ try {
4192
+ const [date1Str, date2Str] = value.split(" - ");
4193
+ if (!date1Str || !date2Str) {
4194
+ return false;
4195
+ }
4196
+ const parsedDate1 = parseDate2(date1Str, format);
4197
+ const parsedDate2 = parseDate2(date2Str, format);
4198
+ if (parsedDate1.toString() === "Invalid Date" || parsedDate2.toString() === "Invalid Date") {
4199
+ return false;
4200
+ }
4201
+ const formattedValue = formatValueString2(
4202
+ [parsedDate1, parsedDate2],
4203
+ format
4204
+ );
4205
+ if (value !== formattedValue) {
4206
+ return false;
4207
+ }
4208
+ const regex = new RegExp(
4209
+ `^${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")} - ${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")}$`
4210
+ );
4211
+ return regex.test(value);
4212
+ } catch (e) {
4213
+ return false;
4214
+ }
4215
+ };
4186
4216
  var formatValueString2 = ([date1, date2], format) => {
4187
4217
  const getStr = (date) => {
4188
4218
  let day = `${date.getDate()}`;
@@ -4279,6 +4309,7 @@ var DateRangePicker = (0, import_react26.forwardRef)(
4279
4309
  sx,
4280
4310
  className,
4281
4311
  format = "YYYY/MM/DD",
4312
+ displayFormat = "YYYY/MM/DD",
4282
4313
  size,
4283
4314
  inputReadOnly,
4284
4315
  hideClearButton,
@@ -4295,12 +4326,27 @@ var DateRangePicker = (0, import_react26.forwardRef)(
4295
4326
  [props.name, onChange]
4296
4327
  )
4297
4328
  );
4329
+ const [displayValue, setDisplayValue] = (0, import_react26.useState)(
4330
+ () => value ? formatValueString2(parseDates(value, format), displayFormat) : ""
4331
+ );
4298
4332
  const [anchorEl, setAnchorEl] = (0, import_react26.useState)(null);
4299
4333
  const open = Boolean(anchorEl);
4300
4334
  const calendarValue = (0, import_react26.useMemo)(
4301
4335
  () => value ? parseDates(value, format) : void 0,
4302
4336
  [value, format]
4303
4337
  );
4338
+ (0, import_react26.useEffect)(() => {
4339
+ if (value) {
4340
+ try {
4341
+ const dates = parseDates(value, format);
4342
+ const newDisplayValue = formatValueString2(dates, displayFormat);
4343
+ setDisplayValue(newDisplayValue);
4344
+ } catch (error2) {
4345
+ }
4346
+ } else {
4347
+ setDisplayValue("");
4348
+ }
4349
+ }, [displayFormat, value, format]);
4304
4350
  (0, import_react26.useEffect)(() => {
4305
4351
  if (!anchorEl) {
4306
4352
  innerRef.current?.blur();
@@ -4311,9 +4357,41 @@ var DateRangePicker = (0, import_react26.forwardRef)(
4311
4357
  ]);
4312
4358
  const handleChange = (0, import_react26.useCallback)(
4313
4359
  (event) => {
4314
- setValue(event.target.value);
4360
+ const value2 = event.target.value;
4361
+ setDisplayValue(
4362
+ value2 ? formatValueString2(parseDates(value2, format), displayFormat) : value2
4363
+ );
4364
+ setValue(value2);
4315
4365
  },
4316
- [setValue]
4366
+ [displayFormat, format, setValue]
4367
+ );
4368
+ const handleDisplayInputChange = (0, import_react26.useCallback)(
4369
+ (event) => {
4370
+ if (event.target.value === "") {
4371
+ handleChange({
4372
+ target: {
4373
+ name: props.name,
4374
+ value: ""
4375
+ }
4376
+ });
4377
+ return;
4378
+ }
4379
+ const isValidDisplayValue = validValueFormat2(
4380
+ event.target.value,
4381
+ displayFormat
4382
+ );
4383
+ if (isValidDisplayValue) {
4384
+ const dates = parseDates(event.target.value, displayFormat);
4385
+ const formattedValue = formatValueString2(dates, format);
4386
+ handleChange({
4387
+ target: {
4388
+ name: props.name,
4389
+ value: formattedValue
4390
+ }
4391
+ });
4392
+ }
4393
+ },
4394
+ [displayFormat, format, handleChange, props.name]
4317
4395
  );
4318
4396
  const handleCalendarToggle = (0, import_react26.useCallback)(
4319
4397
  (event) => {
@@ -4325,10 +4403,26 @@ var DateRangePicker = (0, import_react26.forwardRef)(
4325
4403
  const handleCalendarChange = (0, import_react26.useCallback)(
4326
4404
  ([date1, date2]) => {
4327
4405
  if (!date1 || !date2) return;
4328
- setValue(formatValueString2([date1, date2], format));
4406
+ const formattedValue = formatValueString2([date1, date2], format);
4407
+ if (props.value !== void 0) {
4408
+ onChange?.({ target: { name: props.name, value: formattedValue } });
4409
+ } else {
4410
+ setDisplayValue(
4411
+ formatValueString2([date1, date2], displayFormat)
4412
+ );
4413
+ setValue(formattedValue);
4414
+ }
4329
4415
  setAnchorEl(null);
4330
4416
  },
4331
- [setValue, setAnchorEl, format]
4417
+ [
4418
+ props.value,
4419
+ props.name,
4420
+ onChange,
4421
+ setValue,
4422
+ setAnchorEl,
4423
+ format,
4424
+ displayFormat
4425
+ ]
4332
4426
  );
4333
4427
  const handleInputMouseDown = (0, import_react26.useCallback)(
4334
4428
  (event) => {
@@ -4346,17 +4440,21 @@ var DateRangePicker = (0, import_react26.forwardRef)(
4346
4440
  color: error ? "danger" : innerProps.color,
4347
4441
  ref,
4348
4442
  size,
4349
- value,
4350
- onChange: handleChange,
4443
+ value: displayValue,
4444
+ onChange: handleDisplayInputChange,
4351
4445
  disabled,
4352
4446
  required,
4353
- placeholder: `${format} - ${format}`,
4447
+ placeholder: `${displayFormat} - ${displayFormat}`,
4354
4448
  slotProps: {
4355
4449
  input: {
4356
4450
  component: TextMaskAdapter5,
4357
4451
  ref: innerRef,
4358
- format,
4359
- sx: { "&:hover": { cursor: inputReadOnly || readOnly ? "default" : "text" } },
4452
+ format: displayFormat,
4453
+ sx: {
4454
+ "&:hover": {
4455
+ cursor: inputReadOnly || readOnly ? "default" : "text"
4456
+ }
4457
+ },
4360
4458
  onMouseDown: handleInputMouseDown
4361
4459
  }
4362
4460
  },
@@ -4426,6 +4524,7 @@ var DateRangePicker = (0, import_react26.forwardRef)(
4426
4524
  color: "neutral",
4427
4525
  onClick: () => {
4428
4526
  setValue("");
4527
+ setDisplayValue("");
4429
4528
  setAnchorEl(null);
4430
4529
  }
4431
4530
  },
@@ -4582,7 +4681,7 @@ function CheckboxGroup(props) {
4582
4681
  {
4583
4682
  key: `${id}-${option.value}`,
4584
4683
  label: option.label,
4585
- checked: internalValue.includes(option.value),
4684
+ checked: internalValue?.includes(option.value),
4586
4685
  onChange: handleCheckboxChange(option.value)
4587
4686
  }
4588
4687
  )));
@@ -4666,6 +4765,7 @@ function DateRange(props) {
4666
4765
  disableFuture,
4667
4766
  disablePast,
4668
4767
  format = "YYYY/MM/DD",
4768
+ displayFormat,
4669
4769
  inputReadOnly,
4670
4770
  hideClearButton
4671
4771
  } = props;
@@ -4820,6 +4920,7 @@ function DateRange(props) {
4820
4920
  disableFuture,
4821
4921
  disablePast,
4822
4922
  format,
4923
+ displayFormat,
4823
4924
  inputReadOnly,
4824
4925
  hideClearButton
4825
4926
  }
@@ -5151,21 +5252,15 @@ function PercentageRange(props) {
5151
5252
  min,
5152
5253
  max
5153
5254
  } = props;
5154
- const [internalValue, setInternalValue] = useControlledState(
5155
- value,
5156
- null,
5157
- onChange
5158
- );
5255
+ const [internalValue, setInternalValue] = useControlledState(value, null, onChange);
5159
5256
  const minValue = internalValue?.[0];
5160
5257
  const maxValue = internalValue?.[1];
5161
5258
  const handleMinChange = (0, import_react37.useCallback)(
5162
5259
  (event) => {
5163
5260
  const newMinValue = event.target.value;
5164
5261
  const currentMaxValue = maxValue;
5165
- if (newMinValue !== void 0 && currentMaxValue !== void 0) {
5166
- setInternalValue([newMinValue, currentMaxValue]);
5167
- } else if (newMinValue !== void 0) {
5168
- setInternalValue([newMinValue, newMinValue]);
5262
+ if (newMinValue !== void 0) {
5263
+ setInternalValue([newMinValue, currentMaxValue || null]);
5169
5264
  } else {
5170
5265
  setInternalValue(null);
5171
5266
  }
@@ -5176,10 +5271,8 @@ function PercentageRange(props) {
5176
5271
  (event) => {
5177
5272
  const newMaxValue = event.target.value;
5178
5273
  const currentMinValue = minValue;
5179
- if (currentMinValue !== void 0 && newMaxValue !== void 0) {
5180
- setInternalValue([currentMinValue, newMaxValue]);
5181
- } else if (newMaxValue !== void 0) {
5182
- setInternalValue([newMaxValue, newMaxValue]);
5274
+ if (newMaxValue !== void 0) {
5275
+ setInternalValue([currentMinValue || null, newMaxValue]);
5183
5276
  } else {
5184
5277
  setInternalValue(null);
5185
5278
  }
@@ -5202,7 +5295,7 @@ function PercentageRange(props) {
5202
5295
  PercentageInput,
5203
5296
  {
5204
5297
  label: "Minimum",
5205
- value: minValue,
5298
+ value: minValue ?? void 0,
5206
5299
  onChange: handleMinChange,
5207
5300
  useMinorUnit,
5208
5301
  maxDecimalScale,
@@ -5216,7 +5309,7 @@ function PercentageRange(props) {
5216
5309
  PercentageInput,
5217
5310
  {
5218
5311
  label: "Maximum",
5219
- value: maxValue,
5312
+ value: maxValue ?? void 0,
5220
5313
  onChange: handleMaxChange,
5221
5314
  useMinorUnit,
5222
5315
  maxDecimalScale,
@@ -5295,6 +5388,7 @@ function FilterMenu(props) {
5295
5388
  filters,
5296
5389
  values,
5297
5390
  defaultValues,
5391
+ resetValues = {},
5298
5392
  onChange,
5299
5393
  onClose,
5300
5394
  useClear,
@@ -5320,11 +5414,11 @@ function FilterMenu(props) {
5320
5414
  onClose?.();
5321
5415
  }, [onChange, onClose, internalValues]);
5322
5416
  const handleClear = (0, import_react39.useCallback)(() => {
5323
- const clearedValues = defaultValues || {};
5417
+ const clearedValues = resetValues || {};
5324
5418
  setInternalValues(clearedValues);
5325
5419
  onChange?.(clearedValues);
5326
5420
  onClose?.();
5327
- }, [defaultValues, setInternalValues, onChange, onClose]);
5421
+ }, [resetValues, setInternalValues, onChange, onClose]);
5328
5422
  return /* @__PURE__ */ import_react39.default.createElement(
5329
5423
  ModalDialog,
5330
5424
  {
package/dist/index.js CHANGED
@@ -3531,6 +3531,8 @@ function useDataTableRenderer({
3531
3531
  isTotalSelected: _isTotalSelected,
3532
3532
  isRowSelectable
3533
3533
  }) {
3534
+ const onSelectionModelChangeRef = useRef4(onSelectionModelChange);
3535
+ onSelectionModelChangeRef.current = onSelectionModelChange;
3534
3536
  const [focusedRowId, setFocusedRowId] = useState6(null);
3535
3537
  const [sortModel, setSortModel] = useControlledState(
3536
3538
  controlledSortModel,
@@ -3720,7 +3722,7 @@ function useDataTableRenderer({
3720
3722
  }
3721
3723
  }, [page, rowCount, pageSize, handlePageChange]);
3722
3724
  useEffect5(() => {
3723
- onSelectionModelChange?.([]);
3725
+ onSelectionModelChangeRef.current?.([]);
3724
3726
  }, [page]);
3725
3727
  return {
3726
3728
  rowCount,
@@ -4121,7 +4123,9 @@ var CalendarButton2 = styled13(IconButton_default, {
4121
4123
  "&:focus": {
4122
4124
  "--Icon-color": "currentColor",
4123
4125
  outlineOffset: `${theme.getCssVar("focus-thickness")}`,
4124
- outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar("palette-focusVisible")}`
4126
+ outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar(
4127
+ "palette-focusVisible"
4128
+ )}`
4125
4129
  }
4126
4130
  }));
4127
4131
  var StyledPopper2 = styled13(Popper3, {
@@ -4147,6 +4151,32 @@ var DateRangePickerRoot = styled13("div", {
4147
4151
  })({
4148
4152
  width: "100%"
4149
4153
  });
4154
+ var validValueFormat2 = (value, format) => {
4155
+ try {
4156
+ const [date1Str, date2Str] = value.split(" - ");
4157
+ if (!date1Str || !date2Str) {
4158
+ return false;
4159
+ }
4160
+ const parsedDate1 = parseDate2(date1Str, format);
4161
+ const parsedDate2 = parseDate2(date2Str, format);
4162
+ if (parsedDate1.toString() === "Invalid Date" || parsedDate2.toString() === "Invalid Date") {
4163
+ return false;
4164
+ }
4165
+ const formattedValue = formatValueString2(
4166
+ [parsedDate1, parsedDate2],
4167
+ format
4168
+ );
4169
+ if (value !== formattedValue) {
4170
+ return false;
4171
+ }
4172
+ const regex = new RegExp(
4173
+ `^${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")} - ${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")}$`
4174
+ );
4175
+ return regex.test(value);
4176
+ } catch (e) {
4177
+ return false;
4178
+ }
4179
+ };
4150
4180
  var formatValueString2 = ([date1, date2], format) => {
4151
4181
  const getStr = (date) => {
4152
4182
  let day = `${date.getDate()}`;
@@ -4243,6 +4273,7 @@ var DateRangePicker = forwardRef8(
4243
4273
  sx,
4244
4274
  className,
4245
4275
  format = "YYYY/MM/DD",
4276
+ displayFormat = "YYYY/MM/DD",
4246
4277
  size,
4247
4278
  inputReadOnly,
4248
4279
  hideClearButton,
@@ -4259,12 +4290,27 @@ var DateRangePicker = forwardRef8(
4259
4290
  [props.name, onChange]
4260
4291
  )
4261
4292
  );
4293
+ const [displayValue, setDisplayValue] = useState7(
4294
+ () => value ? formatValueString2(parseDates(value, format), displayFormat) : ""
4295
+ );
4262
4296
  const [anchorEl, setAnchorEl] = useState7(null);
4263
4297
  const open = Boolean(anchorEl);
4264
4298
  const calendarValue = useMemo9(
4265
4299
  () => value ? parseDates(value, format) : void 0,
4266
4300
  [value, format]
4267
4301
  );
4302
+ useEffect6(() => {
4303
+ if (value) {
4304
+ try {
4305
+ const dates = parseDates(value, format);
4306
+ const newDisplayValue = formatValueString2(dates, displayFormat);
4307
+ setDisplayValue(newDisplayValue);
4308
+ } catch (error2) {
4309
+ }
4310
+ } else {
4311
+ setDisplayValue("");
4312
+ }
4313
+ }, [displayFormat, value, format]);
4268
4314
  useEffect6(() => {
4269
4315
  if (!anchorEl) {
4270
4316
  innerRef.current?.blur();
@@ -4275,9 +4321,41 @@ var DateRangePicker = forwardRef8(
4275
4321
  ]);
4276
4322
  const handleChange = useCallback10(
4277
4323
  (event) => {
4278
- setValue(event.target.value);
4324
+ const value2 = event.target.value;
4325
+ setDisplayValue(
4326
+ value2 ? formatValueString2(parseDates(value2, format), displayFormat) : value2
4327
+ );
4328
+ setValue(value2);
4279
4329
  },
4280
- [setValue]
4330
+ [displayFormat, format, setValue]
4331
+ );
4332
+ const handleDisplayInputChange = useCallback10(
4333
+ (event) => {
4334
+ if (event.target.value === "") {
4335
+ handleChange({
4336
+ target: {
4337
+ name: props.name,
4338
+ value: ""
4339
+ }
4340
+ });
4341
+ return;
4342
+ }
4343
+ const isValidDisplayValue = validValueFormat2(
4344
+ event.target.value,
4345
+ displayFormat
4346
+ );
4347
+ if (isValidDisplayValue) {
4348
+ const dates = parseDates(event.target.value, displayFormat);
4349
+ const formattedValue = formatValueString2(dates, format);
4350
+ handleChange({
4351
+ target: {
4352
+ name: props.name,
4353
+ value: formattedValue
4354
+ }
4355
+ });
4356
+ }
4357
+ },
4358
+ [displayFormat, format, handleChange, props.name]
4281
4359
  );
4282
4360
  const handleCalendarToggle = useCallback10(
4283
4361
  (event) => {
@@ -4289,10 +4367,26 @@ var DateRangePicker = forwardRef8(
4289
4367
  const handleCalendarChange = useCallback10(
4290
4368
  ([date1, date2]) => {
4291
4369
  if (!date1 || !date2) return;
4292
- setValue(formatValueString2([date1, date2], format));
4370
+ const formattedValue = formatValueString2([date1, date2], format);
4371
+ if (props.value !== void 0) {
4372
+ onChange?.({ target: { name: props.name, value: formattedValue } });
4373
+ } else {
4374
+ setDisplayValue(
4375
+ formatValueString2([date1, date2], displayFormat)
4376
+ );
4377
+ setValue(formattedValue);
4378
+ }
4293
4379
  setAnchorEl(null);
4294
4380
  },
4295
- [setValue, setAnchorEl, format]
4381
+ [
4382
+ props.value,
4383
+ props.name,
4384
+ onChange,
4385
+ setValue,
4386
+ setAnchorEl,
4387
+ format,
4388
+ displayFormat
4389
+ ]
4296
4390
  );
4297
4391
  const handleInputMouseDown = useCallback10(
4298
4392
  (event) => {
@@ -4310,17 +4404,21 @@ var DateRangePicker = forwardRef8(
4310
4404
  color: error ? "danger" : innerProps.color,
4311
4405
  ref,
4312
4406
  size,
4313
- value,
4314
- onChange: handleChange,
4407
+ value: displayValue,
4408
+ onChange: handleDisplayInputChange,
4315
4409
  disabled,
4316
4410
  required,
4317
- placeholder: `${format} - ${format}`,
4411
+ placeholder: `${displayFormat} - ${displayFormat}`,
4318
4412
  slotProps: {
4319
4413
  input: {
4320
4414
  component: TextMaskAdapter5,
4321
4415
  ref: innerRef,
4322
- format,
4323
- sx: { "&:hover": { cursor: inputReadOnly || readOnly ? "default" : "text" } },
4416
+ format: displayFormat,
4417
+ sx: {
4418
+ "&:hover": {
4419
+ cursor: inputReadOnly || readOnly ? "default" : "text"
4420
+ }
4421
+ },
4324
4422
  onMouseDown: handleInputMouseDown
4325
4423
  }
4326
4424
  },
@@ -4390,6 +4488,7 @@ var DateRangePicker = forwardRef8(
4390
4488
  color: "neutral",
4391
4489
  onClick: () => {
4392
4490
  setValue("");
4491
+ setDisplayValue("");
4393
4492
  setAnchorEl(null);
4394
4493
  }
4395
4494
  },
@@ -4552,7 +4651,7 @@ function CheckboxGroup(props) {
4552
4651
  {
4553
4652
  key: `${id}-${option.value}`,
4554
4653
  label: option.label,
4555
- checked: internalValue.includes(option.value),
4654
+ checked: internalValue?.includes(option.value),
4556
4655
  onChange: handleCheckboxChange(option.value)
4557
4656
  }
4558
4657
  )));
@@ -4636,6 +4735,7 @@ function DateRange(props) {
4636
4735
  disableFuture,
4637
4736
  disablePast,
4638
4737
  format = "YYYY/MM/DD",
4738
+ displayFormat,
4639
4739
  inputReadOnly,
4640
4740
  hideClearButton
4641
4741
  } = props;
@@ -4790,6 +4890,7 @@ function DateRange(props) {
4790
4890
  disableFuture,
4791
4891
  disablePast,
4792
4892
  format,
4893
+ displayFormat,
4793
4894
  inputReadOnly,
4794
4895
  hideClearButton
4795
4896
  }
@@ -5121,21 +5222,15 @@ function PercentageRange(props) {
5121
5222
  min,
5122
5223
  max
5123
5224
  } = props;
5124
- const [internalValue, setInternalValue] = useControlledState(
5125
- value,
5126
- null,
5127
- onChange
5128
- );
5225
+ const [internalValue, setInternalValue] = useControlledState(value, null, onChange);
5129
5226
  const minValue = internalValue?.[0];
5130
5227
  const maxValue = internalValue?.[1];
5131
5228
  const handleMinChange = useCallback17(
5132
5229
  (event) => {
5133
5230
  const newMinValue = event.target.value;
5134
5231
  const currentMaxValue = maxValue;
5135
- if (newMinValue !== void 0 && currentMaxValue !== void 0) {
5136
- setInternalValue([newMinValue, currentMaxValue]);
5137
- } else if (newMinValue !== void 0) {
5138
- setInternalValue([newMinValue, newMinValue]);
5232
+ if (newMinValue !== void 0) {
5233
+ setInternalValue([newMinValue, currentMaxValue || null]);
5139
5234
  } else {
5140
5235
  setInternalValue(null);
5141
5236
  }
@@ -5146,10 +5241,8 @@ function PercentageRange(props) {
5146
5241
  (event) => {
5147
5242
  const newMaxValue = event.target.value;
5148
5243
  const currentMinValue = minValue;
5149
- if (currentMinValue !== void 0 && newMaxValue !== void 0) {
5150
- setInternalValue([currentMinValue, newMaxValue]);
5151
- } else if (newMaxValue !== void 0) {
5152
- setInternalValue([newMaxValue, newMaxValue]);
5244
+ if (newMaxValue !== void 0) {
5245
+ setInternalValue([currentMinValue || null, newMaxValue]);
5153
5246
  } else {
5154
5247
  setInternalValue(null);
5155
5248
  }
@@ -5172,7 +5265,7 @@ function PercentageRange(props) {
5172
5265
  PercentageInput,
5173
5266
  {
5174
5267
  label: "Minimum",
5175
- value: minValue,
5268
+ value: minValue ?? void 0,
5176
5269
  onChange: handleMinChange,
5177
5270
  useMinorUnit,
5178
5271
  maxDecimalScale,
@@ -5186,7 +5279,7 @@ function PercentageRange(props) {
5186
5279
  PercentageInput,
5187
5280
  {
5188
5281
  label: "Maximum",
5189
- value: maxValue,
5282
+ value: maxValue ?? void 0,
5190
5283
  onChange: handleMaxChange,
5191
5284
  useMinorUnit,
5192
5285
  maxDecimalScale,
@@ -5265,6 +5358,7 @@ function FilterMenu(props) {
5265
5358
  filters,
5266
5359
  values,
5267
5360
  defaultValues,
5361
+ resetValues = {},
5268
5362
  onChange,
5269
5363
  onClose,
5270
5364
  useClear,
@@ -5290,11 +5384,11 @@ function FilterMenu(props) {
5290
5384
  onClose?.();
5291
5385
  }, [onChange, onClose, internalValues]);
5292
5386
  const handleClear = useCallback19(() => {
5293
- const clearedValues = defaultValues || {};
5387
+ const clearedValues = resetValues || {};
5294
5388
  setInternalValues(clearedValues);
5295
5389
  onChange?.(clearedValues);
5296
5390
  onClose?.();
5297
- }, [defaultValues, setInternalValues, onChange, onClose]);
5391
+ }, [resetValues, setInternalValues, onChange, onClose]);
5298
5392
  return /* @__PURE__ */ React37.createElement(
5299
5393
  ModalDialog,
5300
5394
  {