@ceed/cds 1.5.4 → 1.5.5

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,8 @@
1
1
  export declare const getCalendarDates: (date: Date) => (number | undefined)[][];
2
2
  export declare const getYearName: (date: Date, locale: string) => string;
3
- export declare const getMonthName: (date: Date, locale: string) => string;
3
+ export declare const getMonthName: (date: Date, locale: string, options?: {
4
+ hideYear?: boolean;
5
+ }) => string;
4
6
  export declare const getMonthNameFromIndex: (index: number, locale: string) => string;
5
7
  /**
6
8
  * 일~토 / Sun ~ Sat 같은 요일 이름을 가져옵니다.
@@ -20,6 +20,8 @@ interface BaseMonthPickerProps {
20
20
  disableFuture?: boolean;
21
21
  disablePast?: boolean;
22
22
  format?: string;
23
+ displayFormat?: string;
24
+ locale?: string;
23
25
  }
24
26
  export type MonthPickerProps = BaseMonthPickerProps & Omit<React.ComponentProps<typeof Input>, "onChange" | "value" | "defaultValue">;
25
27
  declare const MonthPicker: React.ForwardRefExoticComponent<Omit<MonthPickerProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
package/dist/index.cjs CHANGED
@@ -851,8 +851,11 @@ var getCalendarDates = (date) => {
851
851
  var getYearName = (date, locale) => {
852
852
  return date.toLocaleString(locale, { year: "numeric" });
853
853
  };
854
- var getMonthName = (date, locale) => {
855
- return date.toLocaleString(locale, { year: "numeric", month: "long" });
854
+ var getMonthName = (date, locale, options) => {
855
+ return date.toLocaleString(locale, {
856
+ month: "long",
857
+ ...options?.hideYear ? {} : { year: "numeric" }
858
+ });
856
859
  };
857
860
  var getMonthNameFromIndex = (index, locale) => {
858
861
  return new Date(0, index).toLocaleString(locale, { month: "short" });
@@ -4538,7 +4541,6 @@ MenuButton.displayName = "MenuButton";
4538
4541
 
4539
4542
  // src/components/MonthPicker/MonthPicker.tsx
4540
4543
  var import_react33 = __toESM(require("react"));
4541
- var import_react_imask3 = require("react-imask");
4542
4544
  var import_CalendarToday3 = __toESM(require("@mui/icons-material/CalendarToday"));
4543
4545
  var import_joy46 = require("@mui/joy");
4544
4546
  var import_base4 = require("@mui/base");
@@ -4564,60 +4566,35 @@ var MonthPickerRoot = (0, import_joy46.styled)("div", {
4564
4566
  })({
4565
4567
  width: "100%"
4566
4568
  });
4567
- var formatValueString3 = (date, format) => {
4568
- let month = `${date.getMonth() + 1}`;
4569
- const year = date.getFullYear();
4570
- if (Number(month) < 10) month = "0" + month;
4571
- return format.replace(/YYYY/g, year.toString()).replace(/MM/g, month);
4572
- };
4573
- var formatToPattern3 = (format) => {
4574
- return format.replace(/YYYY/g, "Y").replace(/MM/g, "M").replace(/[^YM\s]/g, (match) => `${match}\``);
4569
+ var formatValueString3 = (date, format, locale = "default") => {
4570
+ const year = date.getFullYear().toString();
4571
+ const month = (date.getMonth() + 1).toString().padStart(2, "0");
4572
+ const monthName = getMonthName(date, locale, { hideYear: true });
4573
+ const day = "01";
4574
+ return format.replace(/MMMM/g, monthName).replace(/MM/g, month).replace(/DD/g, day).replace(/YYYY/g, year);
4575
4575
  };
4576
- function parseDate3(dateString) {
4576
+ function parseDate3(dateString, format) {
4577
+ const dateParts = dateString.split(/[-./\s]/);
4578
+ const formatParts = format.split(/[-./\s]/);
4579
+ if (formatParts.length !== dateParts.length) {
4580
+ throw new Error("Invalid date string or format");
4581
+ }
4577
4582
  let month, year;
4578
- const cleanDateString = dateString.replace(/[^\d]/g, "");
4579
- if (dateString.match(/\d{1,2}.\d{4}/)) {
4580
- month = cleanDateString.slice(0, 2);
4581
- year = cleanDateString.slice(2);
4582
- } else if (dateString.match(/\d{4}.\d{1,2}/)) {
4583
- year = cleanDateString.slice(0, 4);
4584
- month = cleanDateString.slice(4);
4583
+ const day = 1;
4584
+ for (let i = 0; i < formatParts.length; i++) {
4585
+ const value = parseInt(dateParts[i], 10);
4586
+ switch (formatParts[i]) {
4587
+ case "MM":
4588
+ month = value - 1;
4589
+ break;
4590
+ case "YYYY":
4591
+ year = value;
4592
+ break;
4593
+ }
4585
4594
  }
4586
- const date = /* @__PURE__ */ new Date(`${year}/${month}`);
4587
- return date;
4595
+ const result = new Date(year, month, day);
4596
+ return result;
4588
4597
  }
4589
- var TextMaskAdapter7 = import_react33.default.forwardRef(
4590
- function TextMaskAdapter8(props, ref) {
4591
- const { onChange, format, ...other } = props;
4592
- return /* @__PURE__ */ import_react33.default.createElement(
4593
- import_react_imask3.IMaskInput,
4594
- {
4595
- ...other,
4596
- inputRef: ref,
4597
- onAccept: (value) => onChange({ target: { name: props.name, value } }),
4598
- mask: Date,
4599
- pattern: formatToPattern3(format),
4600
- blocks: {
4601
- M: {
4602
- mask: import_react_imask3.IMask.MaskedRange,
4603
- from: 1,
4604
- to: 12,
4605
- maxLength: 2
4606
- },
4607
- Y: {
4608
- mask: import_react_imask3.IMask.MaskedRange,
4609
- from: 1900,
4610
- to: 9999
4611
- }
4612
- },
4613
- format: (date) => formatValueString3(date, format),
4614
- parse: parseDate3,
4615
- autofix: "pad",
4616
- overwrite: true
4617
- }
4618
- );
4619
- }
4620
- );
4621
4598
  var MonthPicker = (0, import_react33.forwardRef)(
4622
4599
  (inProps, ref) => {
4623
4600
  const props = (0, import_joy46.useThemeProps)({ props: inProps, name: "MonthPicker" });
@@ -4635,11 +4612,20 @@ var MonthPicker = (0, import_react33.forwardRef)(
4635
4612
  // NOTE: 스타일 관련된 props는 최상위 엘리먼트에 적용한다.
4636
4613
  sx,
4637
4614
  className,
4638
- format = "YYYY/MM",
4615
+ /**
4616
+ * NOTE: 현재 CalendarDate는 YYYY-MM-DD로 개발하고 있어 date를 포함하여 value를 관리한다.
4617
+ * @see https://ecubelabs.atlassian.net/wiki/spaces/SW/pages/1938784349/Date#CalendarDate
4618
+ * @see https://github.com/Ecube-Labs/hds/pull/145
4619
+ *
4620
+ */
4621
+ format = "YYYY/MM/DD",
4622
+ displayFormat = "YYYY/MM",
4639
4623
  size,
4624
+ locale,
4640
4625
  ...innerProps
4641
4626
  } = props;
4642
4627
  const innerRef = (0, import_react33.useRef)(null);
4628
+ const buttonRef = (0, import_react33.useRef)(null);
4643
4629
  const [value, setValue] = useControlledState(
4644
4630
  props.value,
4645
4631
  props.defaultValue || "",
@@ -4649,6 +4635,9 @@ var MonthPicker = (0, import_react33.forwardRef)(
4649
4635
  ),
4650
4636
  { disableStrict: true }
4651
4637
  );
4638
+ const [displayValue, setDisplayValue] = (0, import_react33.useState)(
4639
+ () => value ? formatValueString3(parseDate3(value, format), displayFormat, locale) : ""
4640
+ );
4652
4641
  const [anchorEl, setAnchorEl] = (0, import_react33.useState)(null);
4653
4642
  const open = Boolean(anchorEl);
4654
4643
  (0, import_react33.useEffect)(() => {
@@ -4659,11 +4648,27 @@ var MonthPicker = (0, import_react33.forwardRef)(
4659
4648
  (0, import_react33.useImperativeHandle)(ref, () => innerRef.current, [
4660
4649
  innerRef
4661
4650
  ]);
4651
+ (0, import_react33.useEffect)(() => {
4652
+ if (value === "") {
4653
+ setDisplayValue("");
4654
+ return;
4655
+ }
4656
+ const formattedValue = formatValueString3(
4657
+ parseDate3(value, format),
4658
+ displayFormat,
4659
+ locale
4660
+ );
4661
+ setDisplayValue(formattedValue);
4662
+ }, [displayFormat, format, value]);
4662
4663
  const handleChange = (0, import_react33.useCallback)(
4663
4664
  (event) => {
4664
- setValue(event.target.value);
4665
+ const value2 = event.target.value;
4666
+ setDisplayValue(
4667
+ value2 ? formatValueString3(parseDate3(value2, format), displayFormat, locale) : value2
4668
+ );
4669
+ setValue(value2);
4665
4670
  },
4666
- [setValue]
4671
+ [displayFormat, format, setValue, locale]
4667
4672
  );
4668
4673
  const handleCalendarToggle = (0, import_react33.useCallback)(
4669
4674
  (event) => {
@@ -4672,6 +4677,13 @@ var MonthPicker = (0, import_react33.forwardRef)(
4672
4677
  },
4673
4678
  [anchorEl, setAnchorEl, innerRef]
4674
4679
  );
4680
+ const handleInputMouseDown = (0, import_react33.useCallback)(
4681
+ (event) => {
4682
+ event.preventDefault();
4683
+ buttonRef.current?.focus();
4684
+ },
4685
+ [buttonRef]
4686
+ );
4675
4687
  return /* @__PURE__ */ import_react33.default.createElement(MonthPickerRoot, null, /* @__PURE__ */ import_react33.default.createElement(import_base4.FocusTrap, { open: true }, /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, /* @__PURE__ */ import_react33.default.createElement(
4676
4688
  Input_default,
4677
4689
  {
@@ -4679,13 +4691,21 @@ var MonthPicker = (0, import_react33.forwardRef)(
4679
4691
  color: error ? "danger" : innerProps.color,
4680
4692
  ref: innerRef,
4681
4693
  size,
4682
- value,
4683
- onChange: handleChange,
4684
- placeholder: format,
4694
+ value: displayValue,
4695
+ placeholder: displayFormat,
4685
4696
  disabled,
4686
4697
  required,
4687
4698
  slotProps: {
4688
- input: { component: TextMaskAdapter7, ref: innerRef, format }
4699
+ input: {
4700
+ ref: innerRef,
4701
+ format: displayFormat,
4702
+ sx: {
4703
+ "&:hover": {
4704
+ cursor: "default"
4705
+ }
4706
+ },
4707
+ onMouseDown: handleInputMouseDown
4708
+ }
4689
4709
  },
4690
4710
  error,
4691
4711
  className,
@@ -4697,12 +4717,14 @@ var MonthPicker = (0, import_react33.forwardRef)(
4697
4717
  endDecorator: /* @__PURE__ */ import_react33.default.createElement(
4698
4718
  IconButton_default,
4699
4719
  {
4720
+ ref: buttonRef,
4700
4721
  variant: "plain",
4701
4722
  onClick: handleCalendarToggle,
4702
4723
  "aria-label": "Toggle Calendar",
4703
4724
  "aria-controls": "month-picker-popper",
4704
4725
  "aria-haspopup": "dialog",
4705
- "aria-expanded": open
4726
+ "aria-expanded": open,
4727
+ disabled
4706
4728
  },
4707
4729
  /* @__PURE__ */ import_react33.default.createElement(import_CalendarToday3.default, null)
4708
4730
  ),
@@ -4738,7 +4760,7 @@ var MonthPicker = (0, import_react33.forwardRef)(
4738
4760
  handleChange({
4739
4761
  target: {
4740
4762
  name: props.name,
4741
- value: formatValueString3(date, format)
4763
+ value: formatValueString3(date, format, locale)
4742
4764
  }
4743
4765
  });
4744
4766
  setAnchorEl(null);
@@ -4746,7 +4768,8 @@ var MonthPicker = (0, import_react33.forwardRef)(
4746
4768
  minDate: minDate ? new Date(minDate) : void 0,
4747
4769
  maxDate: maxDate ? new Date(maxDate) : void 0,
4748
4770
  disableFuture,
4749
- disablePast
4771
+ disablePast,
4772
+ locale
4750
4773
  }
4751
4774
  ), /* @__PURE__ */ import_react33.default.createElement(
4752
4775
  DialogActions_default,
@@ -4780,7 +4803,7 @@ var MonthPicker = (0, import_react33.forwardRef)(
4780
4803
 
4781
4804
  // src/components/MonthRangePicker/MonthRangePicker.tsx
4782
4805
  var import_react34 = __toESM(require("react"));
4783
- var import_react_imask4 = require("react-imask");
4806
+ var import_react_imask3 = require("react-imask");
4784
4807
  var import_CalendarToday4 = __toESM(require("@mui/icons-material/CalendarToday"));
4785
4808
  var import_joy47 = require("@mui/joy");
4786
4809
  var import_base5 = require("@mui/base");
@@ -4834,29 +4857,29 @@ var parseDates2 = (str) => {
4834
4857
  const date2 = str.split(" - ")[1] || "";
4835
4858
  return [parseDate4(date1), parseDate4(date2)];
4836
4859
  };
4837
- var formatToPattern4 = (format) => {
4860
+ var formatToPattern3 = (format) => {
4838
4861
  return `${format} - ${format}`.replace(/YYYY/g, "Y").replace(/MM/g, "m").replace(/[^YMm\s]/g, (match) => `${match}\``);
4839
4862
  };
4840
- var TextMaskAdapter9 = import_react34.default.forwardRef(
4841
- function TextMaskAdapter10(props, ref) {
4863
+ var TextMaskAdapter7 = import_react34.default.forwardRef(
4864
+ function TextMaskAdapter8(props, ref) {
4842
4865
  const { onChange, format, ...other } = props;
4843
4866
  return /* @__PURE__ */ import_react34.default.createElement(
4844
- import_react_imask4.IMaskInput,
4867
+ import_react_imask3.IMaskInput,
4845
4868
  {
4846
4869
  ...other,
4847
4870
  inputRef: ref,
4848
4871
  onAccept: (value) => onChange({ target: { name: props.name, value } }),
4849
4872
  mask: Date,
4850
- pattern: formatToPattern4(format),
4873
+ pattern: formatToPattern3(format),
4851
4874
  blocks: {
4852
4875
  m: {
4853
- mask: import_react_imask4.IMask.MaskedRange,
4876
+ mask: import_react_imask3.IMask.MaskedRange,
4854
4877
  from: 1,
4855
4878
  to: 12,
4856
4879
  maxLength: 2
4857
4880
  },
4858
4881
  Y: {
4859
- mask: import_react_imask4.IMask.MaskedRange,
4882
+ mask: import_react_imask3.IMask.MaskedRange,
4860
4883
  from: 1900,
4861
4884
  to: 9999
4862
4885
  }
@@ -4948,7 +4971,7 @@ var MonthRangePicker = (0, import_react34.forwardRef)(
4948
4971
  required,
4949
4972
  placeholder: `${format} - ${format}`,
4950
4973
  slotProps: {
4951
- input: { component: TextMaskAdapter9, ref: innerRef, format }
4974
+ input: { component: TextMaskAdapter7, ref: innerRef, format }
4952
4975
  },
4953
4976
  error,
4954
4977
  className,
@@ -5149,8 +5172,8 @@ var padDecimal = (value, decimalScale) => {
5149
5172
  const [integer, decimal = ""] = `${value}`.split(".");
5150
5173
  return Number(`${integer}${decimal.padEnd(decimalScale, "0")}`);
5151
5174
  };
5152
- var TextMaskAdapter11 = import_react38.default.forwardRef(
5153
- function TextMaskAdapter12(props, ref) {
5175
+ var TextMaskAdapter9 = import_react38.default.forwardRef(
5176
+ function TextMaskAdapter10(props, ref) {
5154
5177
  const { onChange, min, max, ...innerProps } = props;
5155
5178
  return /* @__PURE__ */ import_react38.default.createElement(
5156
5179
  import_react_number_format2.NumericFormat,
@@ -5246,7 +5269,7 @@ var PercentageInput = import_react38.default.forwardRef(function PercentageInput
5246
5269
  helperText,
5247
5270
  slotProps: {
5248
5271
  input: {
5249
- component: TextMaskAdapter11,
5272
+ component: TextMaskAdapter9,
5250
5273
  "aria-label": innerProps["aria-label"],
5251
5274
  decimalScale: maxDecimalScale
5252
5275
  }
package/dist/index.js CHANGED
@@ -782,8 +782,11 @@ var getCalendarDates = (date) => {
782
782
  var getYearName = (date, locale) => {
783
783
  return date.toLocaleString(locale, { year: "numeric" });
784
784
  };
785
- var getMonthName = (date, locale) => {
786
- return date.toLocaleString(locale, { year: "numeric", month: "long" });
785
+ var getMonthName = (date, locale, options) => {
786
+ return date.toLocaleString(locale, {
787
+ month: "long",
788
+ ...options?.hideYear ? {} : { year: "numeric" }
789
+ });
787
790
  };
788
791
  var getMonthNameFromIndex = (index, locale) => {
789
792
  return new Date(0, index).toLocaleString(locale, { month: "short" });
@@ -4534,7 +4537,6 @@ import React31, {
4534
4537
  useRef as useRef6,
4535
4538
  useState as useState9
4536
4539
  } from "react";
4537
- import { IMaskInput as IMaskInput3, IMask as IMask3 } from "react-imask";
4538
4540
  import CalendarTodayIcon3 from "@mui/icons-material/CalendarToday";
4539
4541
  import { styled as styled20, useThemeProps as useThemeProps6 } from "@mui/joy";
4540
4542
  import { FocusTrap as FocusTrap3, ClickAwayListener as ClickAwayListener3, Popper as Popper4 } from "@mui/base";
@@ -4560,60 +4562,35 @@ var MonthPickerRoot = styled20("div", {
4560
4562
  })({
4561
4563
  width: "100%"
4562
4564
  });
4563
- var formatValueString3 = (date, format) => {
4564
- let month = `${date.getMonth() + 1}`;
4565
- const year = date.getFullYear();
4566
- if (Number(month) < 10) month = "0" + month;
4567
- return format.replace(/YYYY/g, year.toString()).replace(/MM/g, month);
4568
- };
4569
- var formatToPattern3 = (format) => {
4570
- return format.replace(/YYYY/g, "Y").replace(/MM/g, "M").replace(/[^YM\s]/g, (match) => `${match}\``);
4565
+ var formatValueString3 = (date, format, locale = "default") => {
4566
+ const year = date.getFullYear().toString();
4567
+ const month = (date.getMonth() + 1).toString().padStart(2, "0");
4568
+ const monthName = getMonthName(date, locale, { hideYear: true });
4569
+ const day = "01";
4570
+ return format.replace(/MMMM/g, monthName).replace(/MM/g, month).replace(/DD/g, day).replace(/YYYY/g, year);
4571
4571
  };
4572
- function parseDate3(dateString) {
4572
+ function parseDate3(dateString, format) {
4573
+ const dateParts = dateString.split(/[-./\s]/);
4574
+ const formatParts = format.split(/[-./\s]/);
4575
+ if (formatParts.length !== dateParts.length) {
4576
+ throw new Error("Invalid date string or format");
4577
+ }
4573
4578
  let month, year;
4574
- const cleanDateString = dateString.replace(/[^\d]/g, "");
4575
- if (dateString.match(/\d{1,2}.\d{4}/)) {
4576
- month = cleanDateString.slice(0, 2);
4577
- year = cleanDateString.slice(2);
4578
- } else if (dateString.match(/\d{4}.\d{1,2}/)) {
4579
- year = cleanDateString.slice(0, 4);
4580
- month = cleanDateString.slice(4);
4579
+ const day = 1;
4580
+ for (let i = 0; i < formatParts.length; i++) {
4581
+ const value = parseInt(dateParts[i], 10);
4582
+ switch (formatParts[i]) {
4583
+ case "MM":
4584
+ month = value - 1;
4585
+ break;
4586
+ case "YYYY":
4587
+ year = value;
4588
+ break;
4589
+ }
4581
4590
  }
4582
- const date = /* @__PURE__ */ new Date(`${year}/${month}`);
4583
- return date;
4591
+ const result = new Date(year, month, day);
4592
+ return result;
4584
4593
  }
4585
- var TextMaskAdapter7 = React31.forwardRef(
4586
- function TextMaskAdapter8(props, ref) {
4587
- const { onChange, format, ...other } = props;
4588
- return /* @__PURE__ */ React31.createElement(
4589
- IMaskInput3,
4590
- {
4591
- ...other,
4592
- inputRef: ref,
4593
- onAccept: (value) => onChange({ target: { name: props.name, value } }),
4594
- mask: Date,
4595
- pattern: formatToPattern3(format),
4596
- blocks: {
4597
- M: {
4598
- mask: IMask3.MaskedRange,
4599
- from: 1,
4600
- to: 12,
4601
- maxLength: 2
4602
- },
4603
- Y: {
4604
- mask: IMask3.MaskedRange,
4605
- from: 1900,
4606
- to: 9999
4607
- }
4608
- },
4609
- format: (date) => formatValueString3(date, format),
4610
- parse: parseDate3,
4611
- autofix: "pad",
4612
- overwrite: true
4613
- }
4614
- );
4615
- }
4616
- );
4617
4594
  var MonthPicker = forwardRef9(
4618
4595
  (inProps, ref) => {
4619
4596
  const props = useThemeProps6({ props: inProps, name: "MonthPicker" });
@@ -4631,11 +4608,20 @@ var MonthPicker = forwardRef9(
4631
4608
  // NOTE: 스타일 관련된 props는 최상위 엘리먼트에 적용한다.
4632
4609
  sx,
4633
4610
  className,
4634
- format = "YYYY/MM",
4611
+ /**
4612
+ * NOTE: 현재 CalendarDate는 YYYY-MM-DD로 개발하고 있어 date를 포함하여 value를 관리한다.
4613
+ * @see https://ecubelabs.atlassian.net/wiki/spaces/SW/pages/1938784349/Date#CalendarDate
4614
+ * @see https://github.com/Ecube-Labs/hds/pull/145
4615
+ *
4616
+ */
4617
+ format = "YYYY/MM/DD",
4618
+ displayFormat = "YYYY/MM",
4635
4619
  size,
4620
+ locale,
4636
4621
  ...innerProps
4637
4622
  } = props;
4638
4623
  const innerRef = useRef6(null);
4624
+ const buttonRef = useRef6(null);
4639
4625
  const [value, setValue] = useControlledState(
4640
4626
  props.value,
4641
4627
  props.defaultValue || "",
@@ -4645,6 +4631,9 @@ var MonthPicker = forwardRef9(
4645
4631
  ),
4646
4632
  { disableStrict: true }
4647
4633
  );
4634
+ const [displayValue, setDisplayValue] = useState9(
4635
+ () => value ? formatValueString3(parseDate3(value, format), displayFormat, locale) : ""
4636
+ );
4648
4637
  const [anchorEl, setAnchorEl] = useState9(null);
4649
4638
  const open = Boolean(anchorEl);
4650
4639
  useEffect8(() => {
@@ -4655,11 +4644,27 @@ var MonthPicker = forwardRef9(
4655
4644
  useImperativeHandle4(ref, () => innerRef.current, [
4656
4645
  innerRef
4657
4646
  ]);
4647
+ useEffect8(() => {
4648
+ if (value === "") {
4649
+ setDisplayValue("");
4650
+ return;
4651
+ }
4652
+ const formattedValue = formatValueString3(
4653
+ parseDate3(value, format),
4654
+ displayFormat,
4655
+ locale
4656
+ );
4657
+ setDisplayValue(formattedValue);
4658
+ }, [displayFormat, format, value]);
4658
4659
  const handleChange = useCallback11(
4659
4660
  (event) => {
4660
- setValue(event.target.value);
4661
+ const value2 = event.target.value;
4662
+ setDisplayValue(
4663
+ value2 ? formatValueString3(parseDate3(value2, format), displayFormat, locale) : value2
4664
+ );
4665
+ setValue(value2);
4661
4666
  },
4662
- [setValue]
4667
+ [displayFormat, format, setValue, locale]
4663
4668
  );
4664
4669
  const handleCalendarToggle = useCallback11(
4665
4670
  (event) => {
@@ -4668,6 +4673,13 @@ var MonthPicker = forwardRef9(
4668
4673
  },
4669
4674
  [anchorEl, setAnchorEl, innerRef]
4670
4675
  );
4676
+ const handleInputMouseDown = useCallback11(
4677
+ (event) => {
4678
+ event.preventDefault();
4679
+ buttonRef.current?.focus();
4680
+ },
4681
+ [buttonRef]
4682
+ );
4671
4683
  return /* @__PURE__ */ React31.createElement(MonthPickerRoot, null, /* @__PURE__ */ React31.createElement(FocusTrap3, { open: true }, /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement(
4672
4684
  Input_default,
4673
4685
  {
@@ -4675,13 +4687,21 @@ var MonthPicker = forwardRef9(
4675
4687
  color: error ? "danger" : innerProps.color,
4676
4688
  ref: innerRef,
4677
4689
  size,
4678
- value,
4679
- onChange: handleChange,
4680
- placeholder: format,
4690
+ value: displayValue,
4691
+ placeholder: displayFormat,
4681
4692
  disabled,
4682
4693
  required,
4683
4694
  slotProps: {
4684
- input: { component: TextMaskAdapter7, ref: innerRef, format }
4695
+ input: {
4696
+ ref: innerRef,
4697
+ format: displayFormat,
4698
+ sx: {
4699
+ "&:hover": {
4700
+ cursor: "default"
4701
+ }
4702
+ },
4703
+ onMouseDown: handleInputMouseDown
4704
+ }
4685
4705
  },
4686
4706
  error,
4687
4707
  className,
@@ -4693,12 +4713,14 @@ var MonthPicker = forwardRef9(
4693
4713
  endDecorator: /* @__PURE__ */ React31.createElement(
4694
4714
  IconButton_default,
4695
4715
  {
4716
+ ref: buttonRef,
4696
4717
  variant: "plain",
4697
4718
  onClick: handleCalendarToggle,
4698
4719
  "aria-label": "Toggle Calendar",
4699
4720
  "aria-controls": "month-picker-popper",
4700
4721
  "aria-haspopup": "dialog",
4701
- "aria-expanded": open
4722
+ "aria-expanded": open,
4723
+ disabled
4702
4724
  },
4703
4725
  /* @__PURE__ */ React31.createElement(CalendarTodayIcon3, null)
4704
4726
  ),
@@ -4734,7 +4756,7 @@ var MonthPicker = forwardRef9(
4734
4756
  handleChange({
4735
4757
  target: {
4736
4758
  name: props.name,
4737
- value: formatValueString3(date, format)
4759
+ value: formatValueString3(date, format, locale)
4738
4760
  }
4739
4761
  });
4740
4762
  setAnchorEl(null);
@@ -4742,7 +4764,8 @@ var MonthPicker = forwardRef9(
4742
4764
  minDate: minDate ? new Date(minDate) : void 0,
4743
4765
  maxDate: maxDate ? new Date(maxDate) : void 0,
4744
4766
  disableFuture,
4745
- disablePast
4767
+ disablePast,
4768
+ locale
4746
4769
  }
4747
4770
  ), /* @__PURE__ */ React31.createElement(
4748
4771
  DialogActions_default,
@@ -4784,7 +4807,7 @@ import React32, {
4784
4807
  useRef as useRef7,
4785
4808
  useState as useState10
4786
4809
  } from "react";
4787
- import { IMaskInput as IMaskInput4, IMask as IMask4 } from "react-imask";
4810
+ import { IMaskInput as IMaskInput3, IMask as IMask3 } from "react-imask";
4788
4811
  import CalendarTodayIcon4 from "@mui/icons-material/CalendarToday";
4789
4812
  import { styled as styled21, useThemeProps as useThemeProps7 } from "@mui/joy";
4790
4813
  import { FocusTrap as FocusTrap4, ClickAwayListener as ClickAwayListener4, Popper as Popper5 } from "@mui/base";
@@ -4838,29 +4861,29 @@ var parseDates2 = (str) => {
4838
4861
  const date2 = str.split(" - ")[1] || "";
4839
4862
  return [parseDate4(date1), parseDate4(date2)];
4840
4863
  };
4841
- var formatToPattern4 = (format) => {
4864
+ var formatToPattern3 = (format) => {
4842
4865
  return `${format} - ${format}`.replace(/YYYY/g, "Y").replace(/MM/g, "m").replace(/[^YMm\s]/g, (match) => `${match}\``);
4843
4866
  };
4844
- var TextMaskAdapter9 = React32.forwardRef(
4845
- function TextMaskAdapter10(props, ref) {
4867
+ var TextMaskAdapter7 = React32.forwardRef(
4868
+ function TextMaskAdapter8(props, ref) {
4846
4869
  const { onChange, format, ...other } = props;
4847
4870
  return /* @__PURE__ */ React32.createElement(
4848
- IMaskInput4,
4871
+ IMaskInput3,
4849
4872
  {
4850
4873
  ...other,
4851
4874
  inputRef: ref,
4852
4875
  onAccept: (value) => onChange({ target: { name: props.name, value } }),
4853
4876
  mask: Date,
4854
- pattern: formatToPattern4(format),
4877
+ pattern: formatToPattern3(format),
4855
4878
  blocks: {
4856
4879
  m: {
4857
- mask: IMask4.MaskedRange,
4880
+ mask: IMask3.MaskedRange,
4858
4881
  from: 1,
4859
4882
  to: 12,
4860
4883
  maxLength: 2
4861
4884
  },
4862
4885
  Y: {
4863
- mask: IMask4.MaskedRange,
4886
+ mask: IMask3.MaskedRange,
4864
4887
  from: 1900,
4865
4888
  to: 9999
4866
4889
  }
@@ -4952,7 +4975,7 @@ var MonthRangePicker = forwardRef10(
4952
4975
  required,
4953
4976
  placeholder: `${format} - ${format}`,
4954
4977
  slotProps: {
4955
- input: { component: TextMaskAdapter9, ref: innerRef, format }
4978
+ input: { component: TextMaskAdapter7, ref: innerRef, format }
4956
4979
  },
4957
4980
  error,
4958
4981
  className,
@@ -5166,8 +5189,8 @@ var padDecimal = (value, decimalScale) => {
5166
5189
  const [integer, decimal = ""] = `${value}`.split(".");
5167
5190
  return Number(`${integer}${decimal.padEnd(decimalScale, "0")}`);
5168
5191
  };
5169
- var TextMaskAdapter11 = React36.forwardRef(
5170
- function TextMaskAdapter12(props, ref) {
5192
+ var TextMaskAdapter9 = React36.forwardRef(
5193
+ function TextMaskAdapter10(props, ref) {
5171
5194
  const { onChange, min, max, ...innerProps } = props;
5172
5195
  return /* @__PURE__ */ React36.createElement(
5173
5196
  NumericFormat2,
@@ -5263,7 +5286,7 @@ var PercentageInput = React36.forwardRef(function PercentageInput2(inProps, ref)
5263
5286
  helperText,
5264
5287
  slotProps: {
5265
5288
  input: {
5266
- component: TextMaskAdapter11,
5289
+ component: TextMaskAdapter9,
5267
5290
  "aria-label": innerProps["aria-label"],
5268
5291
  decimalScale: maxDecimalScale
5269
5292
  }