@ceed/ads 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
@@ -865,8 +865,11 @@ var getCalendarDates = (date) => {
865
865
  var getYearName = (date, locale) => {
866
866
  return date.toLocaleString(locale, { year: "numeric" });
867
867
  };
868
- var getMonthName = (date, locale) => {
869
- return date.toLocaleString(locale, { year: "numeric", month: "long" });
868
+ var getMonthName = (date, locale, options) => {
869
+ return date.toLocaleString(locale, {
870
+ month: "long",
871
+ ...options?.hideYear ? {} : { year: "numeric" }
872
+ });
870
873
  };
871
874
  var getMonthNameFromIndex = (index, locale) => {
872
875
  return new Date(0, index).toLocaleString(locale, { month: "short" });
@@ -4976,7 +4979,6 @@ MenuButton.displayName = "MenuButton";
4976
4979
 
4977
4980
  // src/components/MonthPicker/MonthPicker.tsx
4978
4981
  var import_react33 = __toESM(require("react"));
4979
- var import_react_imask3 = require("react-imask");
4980
4982
  var import_CalendarToday3 = __toESM(require("@mui/icons-material/CalendarToday"));
4981
4983
  var import_joy46 = require("@mui/joy");
4982
4984
  var import_base4 = require("@mui/base");
@@ -5002,60 +5004,35 @@ var MonthPickerRoot = (0, import_joy46.styled)("div", {
5002
5004
  })({
5003
5005
  width: "100%"
5004
5006
  });
5005
- var formatValueString3 = (date, format) => {
5006
- let month = `${date.getMonth() + 1}`;
5007
- const year = date.getFullYear();
5008
- if (Number(month) < 10) month = "0" + month;
5009
- return format.replace(/YYYY/g, year.toString()).replace(/MM/g, month);
5010
- };
5011
- var formatToPattern3 = (format) => {
5012
- return format.replace(/YYYY/g, "Y").replace(/MM/g, "M").replace(/[^YM\s]/g, (match) => `${match}\``);
5007
+ var formatValueString3 = (date, format, locale = "default") => {
5008
+ const year = date.getFullYear().toString();
5009
+ const month = (date.getMonth() + 1).toString().padStart(2, "0");
5010
+ const monthName = getMonthName(date, locale, { hideYear: true });
5011
+ const day = "01";
5012
+ return format.replace(/MMMM/g, monthName).replace(/MM/g, month).replace(/DD/g, day).replace(/YYYY/g, year);
5013
5013
  };
5014
- function parseDate3(dateString) {
5014
+ function parseDate3(dateString, format) {
5015
+ const dateParts = dateString.split(/[-./\s]/);
5016
+ const formatParts = format.split(/[-./\s]/);
5017
+ if (formatParts.length !== dateParts.length) {
5018
+ throw new Error("Invalid date string or format");
5019
+ }
5015
5020
  let month, year;
5016
- const cleanDateString = dateString.replace(/[^\d]/g, "");
5017
- if (dateString.match(/\d{1,2}.\d{4}/)) {
5018
- month = cleanDateString.slice(0, 2);
5019
- year = cleanDateString.slice(2);
5020
- } else if (dateString.match(/\d{4}.\d{1,2}/)) {
5021
- year = cleanDateString.slice(0, 4);
5022
- month = cleanDateString.slice(4);
5021
+ const day = 1;
5022
+ for (let i = 0; i < formatParts.length; i++) {
5023
+ const value = parseInt(dateParts[i], 10);
5024
+ switch (formatParts[i]) {
5025
+ case "MM":
5026
+ month = value - 1;
5027
+ break;
5028
+ case "YYYY":
5029
+ year = value;
5030
+ break;
5031
+ }
5023
5032
  }
5024
- const date = /* @__PURE__ */ new Date(`${year}/${month}`);
5025
- return date;
5033
+ const result = new Date(year, month, day);
5034
+ return result;
5026
5035
  }
5027
- var TextMaskAdapter7 = import_react33.default.forwardRef(
5028
- function TextMaskAdapter8(props, ref) {
5029
- const { onChange, format, ...other } = props;
5030
- return /* @__PURE__ */ import_react33.default.createElement(
5031
- import_react_imask3.IMaskInput,
5032
- {
5033
- ...other,
5034
- inputRef: ref,
5035
- onAccept: (value) => onChange({ target: { name: props.name, value } }),
5036
- mask: Date,
5037
- pattern: formatToPattern3(format),
5038
- blocks: {
5039
- M: {
5040
- mask: import_react_imask3.IMask.MaskedRange,
5041
- from: 1,
5042
- to: 12,
5043
- maxLength: 2
5044
- },
5045
- Y: {
5046
- mask: import_react_imask3.IMask.MaskedRange,
5047
- from: 1900,
5048
- to: 9999
5049
- }
5050
- },
5051
- format: (date) => formatValueString3(date, format),
5052
- parse: parseDate3,
5053
- autofix: "pad",
5054
- overwrite: true
5055
- }
5056
- );
5057
- }
5058
- );
5059
5036
  var MonthPicker = (0, import_react33.forwardRef)(
5060
5037
  (inProps, ref) => {
5061
5038
  const props = (0, import_joy46.useThemeProps)({ props: inProps, name: "MonthPicker" });
@@ -5073,11 +5050,20 @@ var MonthPicker = (0, import_react33.forwardRef)(
5073
5050
  // NOTE: 스타일 관련된 props는 최상위 엘리먼트에 적용한다.
5074
5051
  sx,
5075
5052
  className,
5076
- format = "YYYY/MM",
5053
+ /**
5054
+ * NOTE: 현재 CalendarDate는 YYYY-MM-DD로 개발하고 있어 date를 포함하여 value를 관리한다.
5055
+ * @see https://ecubelabs.atlassian.net/wiki/spaces/SW/pages/1938784349/Date#CalendarDate
5056
+ * @see https://github.com/Ecube-Labs/hds/pull/145
5057
+ *
5058
+ */
5059
+ format = "YYYY/MM/DD",
5060
+ displayFormat = "YYYY/MM",
5077
5061
  size,
5062
+ locale,
5078
5063
  ...innerProps
5079
5064
  } = props;
5080
5065
  const innerRef = (0, import_react33.useRef)(null);
5066
+ const buttonRef = (0, import_react33.useRef)(null);
5081
5067
  const [value, setValue] = useControlledState(
5082
5068
  props.value,
5083
5069
  props.defaultValue || "",
@@ -5087,6 +5073,9 @@ var MonthPicker = (0, import_react33.forwardRef)(
5087
5073
  ),
5088
5074
  { disableStrict: true }
5089
5075
  );
5076
+ const [displayValue, setDisplayValue] = (0, import_react33.useState)(
5077
+ () => value ? formatValueString3(parseDate3(value, format), displayFormat, locale) : ""
5078
+ );
5090
5079
  const [anchorEl, setAnchorEl] = (0, import_react33.useState)(null);
5091
5080
  const open = Boolean(anchorEl);
5092
5081
  (0, import_react33.useEffect)(() => {
@@ -5097,11 +5086,27 @@ var MonthPicker = (0, import_react33.forwardRef)(
5097
5086
  (0, import_react33.useImperativeHandle)(ref, () => innerRef.current, [
5098
5087
  innerRef
5099
5088
  ]);
5089
+ (0, import_react33.useEffect)(() => {
5090
+ if (value === "") {
5091
+ setDisplayValue("");
5092
+ return;
5093
+ }
5094
+ const formattedValue = formatValueString3(
5095
+ parseDate3(value, format),
5096
+ displayFormat,
5097
+ locale
5098
+ );
5099
+ setDisplayValue(formattedValue);
5100
+ }, [displayFormat, format, value]);
5100
5101
  const handleChange = (0, import_react33.useCallback)(
5101
5102
  (event) => {
5102
- setValue(event.target.value);
5103
+ const value2 = event.target.value;
5104
+ setDisplayValue(
5105
+ value2 ? formatValueString3(parseDate3(value2, format), displayFormat, locale) : value2
5106
+ );
5107
+ setValue(value2);
5103
5108
  },
5104
- [setValue]
5109
+ [displayFormat, format, setValue, locale]
5105
5110
  );
5106
5111
  const handleCalendarToggle = (0, import_react33.useCallback)(
5107
5112
  (event) => {
@@ -5110,6 +5115,13 @@ var MonthPicker = (0, import_react33.forwardRef)(
5110
5115
  },
5111
5116
  [anchorEl, setAnchorEl, innerRef]
5112
5117
  );
5118
+ const handleInputMouseDown = (0, import_react33.useCallback)(
5119
+ (event) => {
5120
+ event.preventDefault();
5121
+ buttonRef.current?.focus();
5122
+ },
5123
+ [buttonRef]
5124
+ );
5113
5125
  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(
5114
5126
  Input_default,
5115
5127
  {
@@ -5117,13 +5129,21 @@ var MonthPicker = (0, import_react33.forwardRef)(
5117
5129
  color: error ? "danger" : innerProps.color,
5118
5130
  ref: innerRef,
5119
5131
  size,
5120
- value,
5121
- onChange: handleChange,
5122
- placeholder: format,
5132
+ value: displayValue,
5133
+ placeholder: displayFormat,
5123
5134
  disabled,
5124
5135
  required,
5125
5136
  slotProps: {
5126
- input: { component: TextMaskAdapter7, ref: innerRef, format }
5137
+ input: {
5138
+ ref: innerRef,
5139
+ format: displayFormat,
5140
+ sx: {
5141
+ "&:hover": {
5142
+ cursor: "default"
5143
+ }
5144
+ },
5145
+ onMouseDown: handleInputMouseDown
5146
+ }
5127
5147
  },
5128
5148
  error,
5129
5149
  className,
@@ -5135,12 +5155,14 @@ var MonthPicker = (0, import_react33.forwardRef)(
5135
5155
  endDecorator: /* @__PURE__ */ import_react33.default.createElement(
5136
5156
  IconButton_default,
5137
5157
  {
5158
+ ref: buttonRef,
5138
5159
  variant: "plain",
5139
5160
  onClick: handleCalendarToggle,
5140
5161
  "aria-label": "Toggle Calendar",
5141
5162
  "aria-controls": "month-picker-popper",
5142
5163
  "aria-haspopup": "dialog",
5143
- "aria-expanded": open
5164
+ "aria-expanded": open,
5165
+ disabled
5144
5166
  },
5145
5167
  /* @__PURE__ */ import_react33.default.createElement(import_CalendarToday3.default, null)
5146
5168
  ),
@@ -5176,7 +5198,7 @@ var MonthPicker = (0, import_react33.forwardRef)(
5176
5198
  handleChange({
5177
5199
  target: {
5178
5200
  name: props.name,
5179
- value: formatValueString3(date, format)
5201
+ value: formatValueString3(date, format, locale)
5180
5202
  }
5181
5203
  });
5182
5204
  setAnchorEl(null);
@@ -5184,7 +5206,8 @@ var MonthPicker = (0, import_react33.forwardRef)(
5184
5206
  minDate: minDate ? new Date(minDate) : void 0,
5185
5207
  maxDate: maxDate ? new Date(maxDate) : void 0,
5186
5208
  disableFuture,
5187
- disablePast
5209
+ disablePast,
5210
+ locale
5188
5211
  }
5189
5212
  ), /* @__PURE__ */ import_react33.default.createElement(
5190
5213
  DialogActions_default,
@@ -5218,7 +5241,7 @@ var MonthPicker = (0, import_react33.forwardRef)(
5218
5241
 
5219
5242
  // src/components/MonthRangePicker/MonthRangePicker.tsx
5220
5243
  var import_react34 = __toESM(require("react"));
5221
- var import_react_imask4 = require("react-imask");
5244
+ var import_react_imask3 = require("react-imask");
5222
5245
  var import_CalendarToday4 = __toESM(require("@mui/icons-material/CalendarToday"));
5223
5246
  var import_joy47 = require("@mui/joy");
5224
5247
  var import_base5 = require("@mui/base");
@@ -5272,29 +5295,29 @@ var parseDates2 = (str) => {
5272
5295
  const date2 = str.split(" - ")[1] || "";
5273
5296
  return [parseDate4(date1), parseDate4(date2)];
5274
5297
  };
5275
- var formatToPattern4 = (format) => {
5298
+ var formatToPattern3 = (format) => {
5276
5299
  return `${format} - ${format}`.replace(/YYYY/g, "Y").replace(/MM/g, "m").replace(/[^YMm\s]/g, (match) => `${match}\``);
5277
5300
  };
5278
- var TextMaskAdapter9 = import_react34.default.forwardRef(
5279
- function TextMaskAdapter10(props, ref) {
5301
+ var TextMaskAdapter7 = import_react34.default.forwardRef(
5302
+ function TextMaskAdapter8(props, ref) {
5280
5303
  const { onChange, format, ...other } = props;
5281
5304
  return /* @__PURE__ */ import_react34.default.createElement(
5282
- import_react_imask4.IMaskInput,
5305
+ import_react_imask3.IMaskInput,
5283
5306
  {
5284
5307
  ...other,
5285
5308
  inputRef: ref,
5286
5309
  onAccept: (value) => onChange({ target: { name: props.name, value } }),
5287
5310
  mask: Date,
5288
- pattern: formatToPattern4(format),
5311
+ pattern: formatToPattern3(format),
5289
5312
  blocks: {
5290
5313
  m: {
5291
- mask: import_react_imask4.IMask.MaskedRange,
5314
+ mask: import_react_imask3.IMask.MaskedRange,
5292
5315
  from: 1,
5293
5316
  to: 12,
5294
5317
  maxLength: 2
5295
5318
  },
5296
5319
  Y: {
5297
- mask: import_react_imask4.IMask.MaskedRange,
5320
+ mask: import_react_imask3.IMask.MaskedRange,
5298
5321
  from: 1900,
5299
5322
  to: 9999
5300
5323
  }
@@ -5386,7 +5409,7 @@ var MonthRangePicker = (0, import_react34.forwardRef)(
5386
5409
  required,
5387
5410
  placeholder: `${format} - ${format}`,
5388
5411
  slotProps: {
5389
- input: { component: TextMaskAdapter9, ref: innerRef, format }
5412
+ input: { component: TextMaskAdapter7, ref: innerRef, format }
5390
5413
  },
5391
5414
  error,
5392
5415
  className,
@@ -5587,8 +5610,8 @@ var padDecimal = (value, decimalScale) => {
5587
5610
  const [integer, decimal = ""] = `${value}`.split(".");
5588
5611
  return Number(`${integer}${decimal.padEnd(decimalScale, "0")}`);
5589
5612
  };
5590
- var TextMaskAdapter11 = import_react38.default.forwardRef(
5591
- function TextMaskAdapter12(props, ref) {
5613
+ var TextMaskAdapter9 = import_react38.default.forwardRef(
5614
+ function TextMaskAdapter10(props, ref) {
5592
5615
  const { onChange, min, max, ...innerProps } = props;
5593
5616
  return /* @__PURE__ */ import_react38.default.createElement(
5594
5617
  import_react_number_format2.NumericFormat,
@@ -5684,7 +5707,7 @@ var PercentageInput = import_react38.default.forwardRef(function PercentageInput
5684
5707
  helperText,
5685
5708
  slotProps: {
5686
5709
  input: {
5687
- component: TextMaskAdapter11,
5710
+ component: TextMaskAdapter9,
5688
5711
  "aria-label": innerProps["aria-label"],
5689
5712
  decimalScale: maxDecimalScale
5690
5713
  }
package/dist/index.js CHANGED
@@ -785,8 +785,11 @@ var getCalendarDates = (date) => {
785
785
  var getYearName = (date, locale) => {
786
786
  return date.toLocaleString(locale, { year: "numeric" });
787
787
  };
788
- var getMonthName = (date, locale) => {
789
- return date.toLocaleString(locale, { year: "numeric", month: "long" });
788
+ var getMonthName = (date, locale, options) => {
789
+ return date.toLocaleString(locale, {
790
+ month: "long",
791
+ ...options?.hideYear ? {} : { year: "numeric" }
792
+ });
790
793
  };
791
794
  var getMonthNameFromIndex = (index, locale) => {
792
795
  return new Date(0, index).toLocaleString(locale, { month: "short" });
@@ -4963,7 +4966,6 @@ import React31, {
4963
4966
  useRef as useRef7,
4964
4967
  useState as useState10
4965
4968
  } from "react";
4966
- import { IMaskInput as IMaskInput3, IMask as IMask3 } from "react-imask";
4967
4969
  import CalendarTodayIcon3 from "@mui/icons-material/CalendarToday";
4968
4970
  import { styled as styled20, useThemeProps as useThemeProps6 } from "@mui/joy";
4969
4971
  import { FocusTrap as FocusTrap3, ClickAwayListener as ClickAwayListener3, Popper as Popper4 } from "@mui/base";
@@ -4989,60 +4991,35 @@ var MonthPickerRoot = styled20("div", {
4989
4991
  })({
4990
4992
  width: "100%"
4991
4993
  });
4992
- var formatValueString3 = (date, format) => {
4993
- let month = `${date.getMonth() + 1}`;
4994
- const year = date.getFullYear();
4995
- if (Number(month) < 10) month = "0" + month;
4996
- return format.replace(/YYYY/g, year.toString()).replace(/MM/g, month);
4997
- };
4998
- var formatToPattern3 = (format) => {
4999
- return format.replace(/YYYY/g, "Y").replace(/MM/g, "M").replace(/[^YM\s]/g, (match) => `${match}\``);
4994
+ var formatValueString3 = (date, format, locale = "default") => {
4995
+ const year = date.getFullYear().toString();
4996
+ const month = (date.getMonth() + 1).toString().padStart(2, "0");
4997
+ const monthName = getMonthName(date, locale, { hideYear: true });
4998
+ const day = "01";
4999
+ return format.replace(/MMMM/g, monthName).replace(/MM/g, month).replace(/DD/g, day).replace(/YYYY/g, year);
5000
5000
  };
5001
- function parseDate3(dateString) {
5001
+ function parseDate3(dateString, format) {
5002
+ const dateParts = dateString.split(/[-./\s]/);
5003
+ const formatParts = format.split(/[-./\s]/);
5004
+ if (formatParts.length !== dateParts.length) {
5005
+ throw new Error("Invalid date string or format");
5006
+ }
5002
5007
  let month, year;
5003
- const cleanDateString = dateString.replace(/[^\d]/g, "");
5004
- if (dateString.match(/\d{1,2}.\d{4}/)) {
5005
- month = cleanDateString.slice(0, 2);
5006
- year = cleanDateString.slice(2);
5007
- } else if (dateString.match(/\d{4}.\d{1,2}/)) {
5008
- year = cleanDateString.slice(0, 4);
5009
- month = cleanDateString.slice(4);
5008
+ const day = 1;
5009
+ for (let i = 0; i < formatParts.length; i++) {
5010
+ const value = parseInt(dateParts[i], 10);
5011
+ switch (formatParts[i]) {
5012
+ case "MM":
5013
+ month = value - 1;
5014
+ break;
5015
+ case "YYYY":
5016
+ year = value;
5017
+ break;
5018
+ }
5010
5019
  }
5011
- const date = /* @__PURE__ */ new Date(`${year}/${month}`);
5012
- return date;
5020
+ const result = new Date(year, month, day);
5021
+ return result;
5013
5022
  }
5014
- var TextMaskAdapter7 = React31.forwardRef(
5015
- function TextMaskAdapter8(props, ref) {
5016
- const { onChange, format, ...other } = props;
5017
- return /* @__PURE__ */ React31.createElement(
5018
- IMaskInput3,
5019
- {
5020
- ...other,
5021
- inputRef: ref,
5022
- onAccept: (value) => onChange({ target: { name: props.name, value } }),
5023
- mask: Date,
5024
- pattern: formatToPattern3(format),
5025
- blocks: {
5026
- M: {
5027
- mask: IMask3.MaskedRange,
5028
- from: 1,
5029
- to: 12,
5030
- maxLength: 2
5031
- },
5032
- Y: {
5033
- mask: IMask3.MaskedRange,
5034
- from: 1900,
5035
- to: 9999
5036
- }
5037
- },
5038
- format: (date) => formatValueString3(date, format),
5039
- parse: parseDate3,
5040
- autofix: "pad",
5041
- overwrite: true
5042
- }
5043
- );
5044
- }
5045
- );
5046
5023
  var MonthPicker = forwardRef9(
5047
5024
  (inProps, ref) => {
5048
5025
  const props = useThemeProps6({ props: inProps, name: "MonthPicker" });
@@ -5060,11 +5037,20 @@ var MonthPicker = forwardRef9(
5060
5037
  // NOTE: 스타일 관련된 props는 최상위 엘리먼트에 적용한다.
5061
5038
  sx,
5062
5039
  className,
5063
- format = "YYYY/MM",
5040
+ /**
5041
+ * NOTE: 현재 CalendarDate는 YYYY-MM-DD로 개발하고 있어 date를 포함하여 value를 관리한다.
5042
+ * @see https://ecubelabs.atlassian.net/wiki/spaces/SW/pages/1938784349/Date#CalendarDate
5043
+ * @see https://github.com/Ecube-Labs/hds/pull/145
5044
+ *
5045
+ */
5046
+ format = "YYYY/MM/DD",
5047
+ displayFormat = "YYYY/MM",
5064
5048
  size,
5049
+ locale,
5065
5050
  ...innerProps
5066
5051
  } = props;
5067
5052
  const innerRef = useRef7(null);
5053
+ const buttonRef = useRef7(null);
5068
5054
  const [value, setValue] = useControlledState(
5069
5055
  props.value,
5070
5056
  props.defaultValue || "",
@@ -5074,6 +5060,9 @@ var MonthPicker = forwardRef9(
5074
5060
  ),
5075
5061
  { disableStrict: true }
5076
5062
  );
5063
+ const [displayValue, setDisplayValue] = useState10(
5064
+ () => value ? formatValueString3(parseDate3(value, format), displayFormat, locale) : ""
5065
+ );
5077
5066
  const [anchorEl, setAnchorEl] = useState10(null);
5078
5067
  const open = Boolean(anchorEl);
5079
5068
  useEffect9(() => {
@@ -5084,11 +5073,27 @@ var MonthPicker = forwardRef9(
5084
5073
  useImperativeHandle4(ref, () => innerRef.current, [
5085
5074
  innerRef
5086
5075
  ]);
5076
+ useEffect9(() => {
5077
+ if (value === "") {
5078
+ setDisplayValue("");
5079
+ return;
5080
+ }
5081
+ const formattedValue = formatValueString3(
5082
+ parseDate3(value, format),
5083
+ displayFormat,
5084
+ locale
5085
+ );
5086
+ setDisplayValue(formattedValue);
5087
+ }, [displayFormat, format, value]);
5087
5088
  const handleChange = useCallback12(
5088
5089
  (event) => {
5089
- setValue(event.target.value);
5090
+ const value2 = event.target.value;
5091
+ setDisplayValue(
5092
+ value2 ? formatValueString3(parseDate3(value2, format), displayFormat, locale) : value2
5093
+ );
5094
+ setValue(value2);
5090
5095
  },
5091
- [setValue]
5096
+ [displayFormat, format, setValue, locale]
5092
5097
  );
5093
5098
  const handleCalendarToggle = useCallback12(
5094
5099
  (event) => {
@@ -5097,6 +5102,13 @@ var MonthPicker = forwardRef9(
5097
5102
  },
5098
5103
  [anchorEl, setAnchorEl, innerRef]
5099
5104
  );
5105
+ const handleInputMouseDown = useCallback12(
5106
+ (event) => {
5107
+ event.preventDefault();
5108
+ buttonRef.current?.focus();
5109
+ },
5110
+ [buttonRef]
5111
+ );
5100
5112
  return /* @__PURE__ */ React31.createElement(MonthPickerRoot, null, /* @__PURE__ */ React31.createElement(FocusTrap3, { open: true }, /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement(
5101
5113
  Input_default,
5102
5114
  {
@@ -5104,13 +5116,21 @@ var MonthPicker = forwardRef9(
5104
5116
  color: error ? "danger" : innerProps.color,
5105
5117
  ref: innerRef,
5106
5118
  size,
5107
- value,
5108
- onChange: handleChange,
5109
- placeholder: format,
5119
+ value: displayValue,
5120
+ placeholder: displayFormat,
5110
5121
  disabled,
5111
5122
  required,
5112
5123
  slotProps: {
5113
- input: { component: TextMaskAdapter7, ref: innerRef, format }
5124
+ input: {
5125
+ ref: innerRef,
5126
+ format: displayFormat,
5127
+ sx: {
5128
+ "&:hover": {
5129
+ cursor: "default"
5130
+ }
5131
+ },
5132
+ onMouseDown: handleInputMouseDown
5133
+ }
5114
5134
  },
5115
5135
  error,
5116
5136
  className,
@@ -5122,12 +5142,14 @@ var MonthPicker = forwardRef9(
5122
5142
  endDecorator: /* @__PURE__ */ React31.createElement(
5123
5143
  IconButton_default,
5124
5144
  {
5145
+ ref: buttonRef,
5125
5146
  variant: "plain",
5126
5147
  onClick: handleCalendarToggle,
5127
5148
  "aria-label": "Toggle Calendar",
5128
5149
  "aria-controls": "month-picker-popper",
5129
5150
  "aria-haspopup": "dialog",
5130
- "aria-expanded": open
5151
+ "aria-expanded": open,
5152
+ disabled
5131
5153
  },
5132
5154
  /* @__PURE__ */ React31.createElement(CalendarTodayIcon3, null)
5133
5155
  ),
@@ -5163,7 +5185,7 @@ var MonthPicker = forwardRef9(
5163
5185
  handleChange({
5164
5186
  target: {
5165
5187
  name: props.name,
5166
- value: formatValueString3(date, format)
5188
+ value: formatValueString3(date, format, locale)
5167
5189
  }
5168
5190
  });
5169
5191
  setAnchorEl(null);
@@ -5171,7 +5193,8 @@ var MonthPicker = forwardRef9(
5171
5193
  minDate: minDate ? new Date(minDate) : void 0,
5172
5194
  maxDate: maxDate ? new Date(maxDate) : void 0,
5173
5195
  disableFuture,
5174
- disablePast
5196
+ disablePast,
5197
+ locale
5175
5198
  }
5176
5199
  ), /* @__PURE__ */ React31.createElement(
5177
5200
  DialogActions_default,
@@ -5213,7 +5236,7 @@ import React32, {
5213
5236
  useRef as useRef8,
5214
5237
  useState as useState11
5215
5238
  } from "react";
5216
- import { IMaskInput as IMaskInput4, IMask as IMask4 } from "react-imask";
5239
+ import { IMaskInput as IMaskInput3, IMask as IMask3 } from "react-imask";
5217
5240
  import CalendarTodayIcon4 from "@mui/icons-material/CalendarToday";
5218
5241
  import { styled as styled21, useThemeProps as useThemeProps7 } from "@mui/joy";
5219
5242
  import { FocusTrap as FocusTrap4, ClickAwayListener as ClickAwayListener4, Popper as Popper5 } from "@mui/base";
@@ -5267,29 +5290,29 @@ var parseDates2 = (str) => {
5267
5290
  const date2 = str.split(" - ")[1] || "";
5268
5291
  return [parseDate4(date1), parseDate4(date2)];
5269
5292
  };
5270
- var formatToPattern4 = (format) => {
5293
+ var formatToPattern3 = (format) => {
5271
5294
  return `${format} - ${format}`.replace(/YYYY/g, "Y").replace(/MM/g, "m").replace(/[^YMm\s]/g, (match) => `${match}\``);
5272
5295
  };
5273
- var TextMaskAdapter9 = React32.forwardRef(
5274
- function TextMaskAdapter10(props, ref) {
5296
+ var TextMaskAdapter7 = React32.forwardRef(
5297
+ function TextMaskAdapter8(props, ref) {
5275
5298
  const { onChange, format, ...other } = props;
5276
5299
  return /* @__PURE__ */ React32.createElement(
5277
- IMaskInput4,
5300
+ IMaskInput3,
5278
5301
  {
5279
5302
  ...other,
5280
5303
  inputRef: ref,
5281
5304
  onAccept: (value) => onChange({ target: { name: props.name, value } }),
5282
5305
  mask: Date,
5283
- pattern: formatToPattern4(format),
5306
+ pattern: formatToPattern3(format),
5284
5307
  blocks: {
5285
5308
  m: {
5286
- mask: IMask4.MaskedRange,
5309
+ mask: IMask3.MaskedRange,
5287
5310
  from: 1,
5288
5311
  to: 12,
5289
5312
  maxLength: 2
5290
5313
  },
5291
5314
  Y: {
5292
- mask: IMask4.MaskedRange,
5315
+ mask: IMask3.MaskedRange,
5293
5316
  from: 1900,
5294
5317
  to: 9999
5295
5318
  }
@@ -5381,7 +5404,7 @@ var MonthRangePicker = forwardRef10(
5381
5404
  required,
5382
5405
  placeholder: `${format} - ${format}`,
5383
5406
  slotProps: {
5384
- input: { component: TextMaskAdapter9, ref: innerRef, format }
5407
+ input: { component: TextMaskAdapter7, ref: innerRef, format }
5385
5408
  },
5386
5409
  error,
5387
5410
  className,
@@ -5595,8 +5618,8 @@ var padDecimal = (value, decimalScale) => {
5595
5618
  const [integer, decimal = ""] = `${value}`.split(".");
5596
5619
  return Number(`${integer}${decimal.padEnd(decimalScale, "0")}`);
5597
5620
  };
5598
- var TextMaskAdapter11 = React36.forwardRef(
5599
- function TextMaskAdapter12(props, ref) {
5621
+ var TextMaskAdapter9 = React36.forwardRef(
5622
+ function TextMaskAdapter10(props, ref) {
5600
5623
  const { onChange, min, max, ...innerProps } = props;
5601
5624
  return /* @__PURE__ */ React36.createElement(
5602
5625
  NumericFormat2,
@@ -5692,7 +5715,7 @@ var PercentageInput = React36.forwardRef(function PercentageInput2(inProps, ref)
5692
5715
  helperText,
5693
5716
  slotProps: {
5694
5717
  input: {
5695
- component: TextMaskAdapter11,
5718
+ component: TextMaskAdapter9,
5696
5719
  "aria-label": innerProps["aria-label"],
5697
5720
  decimalScale: maxDecimalScale
5698
5721
  }