@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.
- 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 +39 -39
- 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
|
@@ -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, {
|
|
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
|
-
|
|
5007
|
-
const
|
|
5008
|
-
|
|
5009
|
-
|
|
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
|
|
5017
|
-
|
|
5018
|
-
|
|
5019
|
-
|
|
5020
|
-
|
|
5021
|
-
|
|
5022
|
-
|
|
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
|
|
5025
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5122
|
-
placeholder: format,
|
|
5132
|
+
value: displayValue,
|
|
5133
|
+
placeholder: displayFormat,
|
|
5123
5134
|
disabled,
|
|
5124
5135
|
required,
|
|
5125
5136
|
slotProps: {
|
|
5126
|
-
input: {
|
|
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
|
|
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
|
|
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
|
|
5279
|
-
function
|
|
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
|
-
|
|
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:
|
|
5311
|
+
pattern: formatToPattern3(format),
|
|
5289
5312
|
blocks: {
|
|
5290
5313
|
m: {
|
|
5291
|
-
mask:
|
|
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:
|
|
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:
|
|
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
|
|
5591
|
-
function
|
|
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:
|
|
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, {
|
|
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
|
-
|
|
4994
|
-
const
|
|
4995
|
-
|
|
4996
|
-
|
|
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
|
|
5004
|
-
|
|
5005
|
-
|
|
5006
|
-
|
|
5007
|
-
|
|
5008
|
-
|
|
5009
|
-
|
|
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
|
|
5012
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5109
|
-
placeholder: format,
|
|
5119
|
+
value: displayValue,
|
|
5120
|
+
placeholder: displayFormat,
|
|
5110
5121
|
disabled,
|
|
5111
5122
|
required,
|
|
5112
5123
|
slotProps: {
|
|
5113
|
-
input: {
|
|
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
|
|
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
|
|
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
|
|
5274
|
-
function
|
|
5296
|
+
var TextMaskAdapter7 = React32.forwardRef(
|
|
5297
|
+
function TextMaskAdapter8(props, ref) {
|
|
5275
5298
|
const { onChange, format, ...other } = props;
|
|
5276
5299
|
return /* @__PURE__ */ React32.createElement(
|
|
5277
|
-
|
|
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:
|
|
5306
|
+
pattern: formatToPattern3(format),
|
|
5284
5307
|
blocks: {
|
|
5285
5308
|
m: {
|
|
5286
|
-
mask:
|
|
5309
|
+
mask: IMask3.MaskedRange,
|
|
5287
5310
|
from: 1,
|
|
5288
5311
|
to: 12,
|
|
5289
5312
|
maxLength: 2
|
|
5290
5313
|
},
|
|
5291
5314
|
Y: {
|
|
5292
|
-
mask:
|
|
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:
|
|
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
|
|
5599
|
-
function
|
|
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:
|
|
5718
|
+
component: TextMaskAdapter9,
|
|
5696
5719
|
"aria-label": innerProps["aria-label"],
|
|
5697
5720
|
decimalScale: maxDecimalScale
|
|
5698
5721
|
}
|