@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.
- package/dist/components/Calendar/utils/index.d.ts +3 -1
- package/dist/components/MonthPicker/MonthPicker.d.ts +2 -0
- package/dist/index.cjs +98 -75
- package/dist/index.js +98 -75
- package/framer/index.js +37 -37
- package/package.json +1 -1
|
@@ -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
|
|
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, {
|
|
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
|
-
|
|
4569
|
-
const
|
|
4570
|
-
|
|
4571
|
-
|
|
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
|
|
4579
|
-
|
|
4580
|
-
|
|
4581
|
-
|
|
4582
|
-
|
|
4583
|
-
|
|
4584
|
-
|
|
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
|
|
4587
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4684
|
-
placeholder: format,
|
|
4694
|
+
value: displayValue,
|
|
4695
|
+
placeholder: displayFormat,
|
|
4685
4696
|
disabled,
|
|
4686
4697
|
required,
|
|
4687
4698
|
slotProps: {
|
|
4688
|
-
input: {
|
|
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
|
|
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
|
|
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
|
|
4841
|
-
function
|
|
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
|
-
|
|
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:
|
|
4873
|
+
pattern: formatToPattern3(format),
|
|
4851
4874
|
blocks: {
|
|
4852
4875
|
m: {
|
|
4853
|
-
mask:
|
|
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:
|
|
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:
|
|
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
|
|
5153
|
-
function
|
|
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:
|
|
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, {
|
|
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
|
-
|
|
4565
|
-
const
|
|
4566
|
-
|
|
4567
|
-
|
|
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
|
|
4575
|
-
|
|
4576
|
-
|
|
4577
|
-
|
|
4578
|
-
|
|
4579
|
-
|
|
4580
|
-
|
|
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
|
|
4583
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4680
|
-
placeholder: format,
|
|
4690
|
+
value: displayValue,
|
|
4691
|
+
placeholder: displayFormat,
|
|
4681
4692
|
disabled,
|
|
4682
4693
|
required,
|
|
4683
4694
|
slotProps: {
|
|
4684
|
-
input: {
|
|
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
|
|
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
|
|
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
|
|
4845
|
-
function
|
|
4867
|
+
var TextMaskAdapter7 = React32.forwardRef(
|
|
4868
|
+
function TextMaskAdapter8(props, ref) {
|
|
4846
4869
|
const { onChange, format, ...other } = props;
|
|
4847
4870
|
return /* @__PURE__ */ React32.createElement(
|
|
4848
|
-
|
|
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:
|
|
4877
|
+
pattern: formatToPattern3(format),
|
|
4855
4878
|
blocks: {
|
|
4856
4879
|
m: {
|
|
4857
|
-
mask:
|
|
4880
|
+
mask: IMask3.MaskedRange,
|
|
4858
4881
|
from: 1,
|
|
4859
4882
|
to: 12,
|
|
4860
4883
|
maxLength: 2
|
|
4861
4884
|
},
|
|
4862
4885
|
Y: {
|
|
4863
|
-
mask:
|
|
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:
|
|
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
|
|
5170
|
-
function
|
|
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:
|
|
5289
|
+
component: TextMaskAdapter9,
|
|
5267
5290
|
"aria-label": innerProps["aria-label"],
|
|
5268
5291
|
decimalScale: maxDecimalScale
|
|
5269
5292
|
}
|