@ceed/cds 1.8.0 → 1.8.1
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/DateRangePicker/DateRangePicker.d.ts +10 -0
- package/dist/index.cjs +107 -10
- package/dist/index.js +107 -10
- package/framer/index.js +38 -38
- package/package.json +1 -1
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import Input from "../Input";
|
|
3
3
|
interface BaseDateRangePickerProps {
|
|
4
|
+
/**
|
|
5
|
+
* props.format 의 형식을 따라야 한다.
|
|
6
|
+
*/
|
|
4
7
|
value?: string;
|
|
5
8
|
defaultValue?: string;
|
|
6
9
|
onChange?: (event: {
|
|
@@ -19,7 +22,14 @@ interface BaseDateRangePickerProps {
|
|
|
19
22
|
maxDate?: string;
|
|
20
23
|
disableFuture?: boolean;
|
|
21
24
|
disablePast?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* value, onChange의 값은 해당 포맷을 따른다.
|
|
27
|
+
*/
|
|
22
28
|
format?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Input 에 표시되는 값의 포맷을 지정한다.
|
|
31
|
+
*/
|
|
32
|
+
displayFormat?: string;
|
|
23
33
|
inputReadOnly?: boolean;
|
|
24
34
|
hideClearButton?: boolean;
|
|
25
35
|
}
|
package/dist/index.cjs
CHANGED
|
@@ -4112,7 +4112,9 @@ var CalendarButton2 = (0, import_joy34.styled)(IconButton_default, {
|
|
|
4112
4112
|
"&:focus": {
|
|
4113
4113
|
"--Icon-color": "currentColor",
|
|
4114
4114
|
outlineOffset: `${theme.getCssVar("focus-thickness")}`,
|
|
4115
|
-
outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar(
|
|
4115
|
+
outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar(
|
|
4116
|
+
"palette-focusVisible"
|
|
4117
|
+
)}`
|
|
4116
4118
|
}
|
|
4117
4119
|
}));
|
|
4118
4120
|
var StyledPopper2 = (0, import_joy34.styled)(import_base3.Popper, {
|
|
@@ -4138,6 +4140,32 @@ var DateRangePickerRoot = (0, import_joy34.styled)("div", {
|
|
|
4138
4140
|
})({
|
|
4139
4141
|
width: "100%"
|
|
4140
4142
|
});
|
|
4143
|
+
var validValueFormat2 = (value, format) => {
|
|
4144
|
+
try {
|
|
4145
|
+
const [date1Str, date2Str] = value.split(" - ");
|
|
4146
|
+
if (!date1Str || !date2Str) {
|
|
4147
|
+
return false;
|
|
4148
|
+
}
|
|
4149
|
+
const parsedDate1 = parseDate2(date1Str, format);
|
|
4150
|
+
const parsedDate2 = parseDate2(date2Str, format);
|
|
4151
|
+
if (parsedDate1.toString() === "Invalid Date" || parsedDate2.toString() === "Invalid Date") {
|
|
4152
|
+
return false;
|
|
4153
|
+
}
|
|
4154
|
+
const formattedValue = formatValueString2(
|
|
4155
|
+
[parsedDate1, parsedDate2],
|
|
4156
|
+
format
|
|
4157
|
+
);
|
|
4158
|
+
if (value !== formattedValue) {
|
|
4159
|
+
return false;
|
|
4160
|
+
}
|
|
4161
|
+
const regex = new RegExp(
|
|
4162
|
+
`^${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")} - ${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")}$`
|
|
4163
|
+
);
|
|
4164
|
+
return regex.test(value);
|
|
4165
|
+
} catch (e) {
|
|
4166
|
+
return false;
|
|
4167
|
+
}
|
|
4168
|
+
};
|
|
4141
4169
|
var formatValueString2 = ([date1, date2], format) => {
|
|
4142
4170
|
const getStr = (date) => {
|
|
4143
4171
|
let day = `${date.getDate()}`;
|
|
@@ -4234,6 +4262,7 @@ var DateRangePicker = (0, import_react26.forwardRef)(
|
|
|
4234
4262
|
sx,
|
|
4235
4263
|
className,
|
|
4236
4264
|
format = "YYYY/MM/DD",
|
|
4265
|
+
displayFormat = "YYYY/MM/DD",
|
|
4237
4266
|
size,
|
|
4238
4267
|
inputReadOnly,
|
|
4239
4268
|
hideClearButton,
|
|
@@ -4250,12 +4279,27 @@ var DateRangePicker = (0, import_react26.forwardRef)(
|
|
|
4250
4279
|
[props.name, onChange]
|
|
4251
4280
|
)
|
|
4252
4281
|
);
|
|
4282
|
+
const [displayValue, setDisplayValue] = (0, import_react26.useState)(
|
|
4283
|
+
() => value ? formatValueString2(parseDates(value, format), displayFormat) : ""
|
|
4284
|
+
);
|
|
4253
4285
|
const [anchorEl, setAnchorEl] = (0, import_react26.useState)(null);
|
|
4254
4286
|
const open = Boolean(anchorEl);
|
|
4255
4287
|
const calendarValue = (0, import_react26.useMemo)(
|
|
4256
4288
|
() => value ? parseDates(value, format) : void 0,
|
|
4257
4289
|
[value, format]
|
|
4258
4290
|
);
|
|
4291
|
+
(0, import_react26.useEffect)(() => {
|
|
4292
|
+
if (value) {
|
|
4293
|
+
try {
|
|
4294
|
+
const dates = parseDates(value, format);
|
|
4295
|
+
const newDisplayValue = formatValueString2(dates, displayFormat);
|
|
4296
|
+
setDisplayValue(newDisplayValue);
|
|
4297
|
+
} catch (error2) {
|
|
4298
|
+
}
|
|
4299
|
+
} else {
|
|
4300
|
+
setDisplayValue("");
|
|
4301
|
+
}
|
|
4302
|
+
}, [displayFormat, value, format]);
|
|
4259
4303
|
(0, import_react26.useEffect)(() => {
|
|
4260
4304
|
if (!anchorEl) {
|
|
4261
4305
|
innerRef.current?.blur();
|
|
@@ -4266,9 +4310,41 @@ var DateRangePicker = (0, import_react26.forwardRef)(
|
|
|
4266
4310
|
]);
|
|
4267
4311
|
const handleChange = (0, import_react26.useCallback)(
|
|
4268
4312
|
(event) => {
|
|
4269
|
-
|
|
4313
|
+
const value2 = event.target.value;
|
|
4314
|
+
setDisplayValue(
|
|
4315
|
+
value2 ? formatValueString2(parseDates(value2, format), displayFormat) : value2
|
|
4316
|
+
);
|
|
4317
|
+
setValue(value2);
|
|
4270
4318
|
},
|
|
4271
|
-
[setValue]
|
|
4319
|
+
[displayFormat, format, setValue]
|
|
4320
|
+
);
|
|
4321
|
+
const handleDisplayInputChange = (0, import_react26.useCallback)(
|
|
4322
|
+
(event) => {
|
|
4323
|
+
if (event.target.value === "") {
|
|
4324
|
+
handleChange({
|
|
4325
|
+
target: {
|
|
4326
|
+
name: props.name,
|
|
4327
|
+
value: ""
|
|
4328
|
+
}
|
|
4329
|
+
});
|
|
4330
|
+
return;
|
|
4331
|
+
}
|
|
4332
|
+
const isValidDisplayValue = validValueFormat2(
|
|
4333
|
+
event.target.value,
|
|
4334
|
+
displayFormat
|
|
4335
|
+
);
|
|
4336
|
+
if (isValidDisplayValue) {
|
|
4337
|
+
const dates = parseDates(event.target.value, displayFormat);
|
|
4338
|
+
const formattedValue = formatValueString2(dates, format);
|
|
4339
|
+
handleChange({
|
|
4340
|
+
target: {
|
|
4341
|
+
name: props.name,
|
|
4342
|
+
value: formattedValue
|
|
4343
|
+
}
|
|
4344
|
+
});
|
|
4345
|
+
}
|
|
4346
|
+
},
|
|
4347
|
+
[displayFormat, format, handleChange, props.name]
|
|
4272
4348
|
);
|
|
4273
4349
|
const handleCalendarToggle = (0, import_react26.useCallback)(
|
|
4274
4350
|
(event) => {
|
|
@@ -4280,10 +4356,26 @@ var DateRangePicker = (0, import_react26.forwardRef)(
|
|
|
4280
4356
|
const handleCalendarChange = (0, import_react26.useCallback)(
|
|
4281
4357
|
([date1, date2]) => {
|
|
4282
4358
|
if (!date1 || !date2) return;
|
|
4283
|
-
|
|
4359
|
+
const formattedValue = formatValueString2([date1, date2], format);
|
|
4360
|
+
if (props.value !== void 0) {
|
|
4361
|
+
onChange?.({ target: { name: props.name, value: formattedValue } });
|
|
4362
|
+
} else {
|
|
4363
|
+
setDisplayValue(
|
|
4364
|
+
formatValueString2([date1, date2], displayFormat)
|
|
4365
|
+
);
|
|
4366
|
+
setValue(formattedValue);
|
|
4367
|
+
}
|
|
4284
4368
|
setAnchorEl(null);
|
|
4285
4369
|
},
|
|
4286
|
-
[
|
|
4370
|
+
[
|
|
4371
|
+
props.value,
|
|
4372
|
+
props.name,
|
|
4373
|
+
onChange,
|
|
4374
|
+
setValue,
|
|
4375
|
+
setAnchorEl,
|
|
4376
|
+
format,
|
|
4377
|
+
displayFormat
|
|
4378
|
+
]
|
|
4287
4379
|
);
|
|
4288
4380
|
const handleInputMouseDown = (0, import_react26.useCallback)(
|
|
4289
4381
|
(event) => {
|
|
@@ -4301,17 +4393,21 @@ var DateRangePicker = (0, import_react26.forwardRef)(
|
|
|
4301
4393
|
color: error ? "danger" : innerProps.color,
|
|
4302
4394
|
ref,
|
|
4303
4395
|
size,
|
|
4304
|
-
value,
|
|
4305
|
-
onChange:
|
|
4396
|
+
value: displayValue,
|
|
4397
|
+
onChange: handleDisplayInputChange,
|
|
4306
4398
|
disabled,
|
|
4307
4399
|
required,
|
|
4308
|
-
placeholder: `${
|
|
4400
|
+
placeholder: `${displayFormat} - ${displayFormat}`,
|
|
4309
4401
|
slotProps: {
|
|
4310
4402
|
input: {
|
|
4311
4403
|
component: TextMaskAdapter5,
|
|
4312
4404
|
ref: innerRef,
|
|
4313
|
-
format,
|
|
4314
|
-
sx: {
|
|
4405
|
+
format: displayFormat,
|
|
4406
|
+
sx: {
|
|
4407
|
+
"&:hover": {
|
|
4408
|
+
cursor: inputReadOnly || readOnly ? "default" : "text"
|
|
4409
|
+
}
|
|
4410
|
+
},
|
|
4315
4411
|
onMouseDown: handleInputMouseDown
|
|
4316
4412
|
}
|
|
4317
4413
|
},
|
|
@@ -4381,6 +4477,7 @@ var DateRangePicker = (0, import_react26.forwardRef)(
|
|
|
4381
4477
|
color: "neutral",
|
|
4382
4478
|
onClick: () => {
|
|
4383
4479
|
setValue("");
|
|
4480
|
+
setDisplayValue("");
|
|
4384
4481
|
setAnchorEl(null);
|
|
4385
4482
|
}
|
|
4386
4483
|
},
|
package/dist/index.js
CHANGED
|
@@ -4088,7 +4088,9 @@ var CalendarButton2 = styled13(IconButton_default, {
|
|
|
4088
4088
|
"&:focus": {
|
|
4089
4089
|
"--Icon-color": "currentColor",
|
|
4090
4090
|
outlineOffset: `${theme.getCssVar("focus-thickness")}`,
|
|
4091
|
-
outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar(
|
|
4091
|
+
outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar(
|
|
4092
|
+
"palette-focusVisible"
|
|
4093
|
+
)}`
|
|
4092
4094
|
}
|
|
4093
4095
|
}));
|
|
4094
4096
|
var StyledPopper2 = styled13(Popper3, {
|
|
@@ -4114,6 +4116,32 @@ var DateRangePickerRoot = styled13("div", {
|
|
|
4114
4116
|
})({
|
|
4115
4117
|
width: "100%"
|
|
4116
4118
|
});
|
|
4119
|
+
var validValueFormat2 = (value, format) => {
|
|
4120
|
+
try {
|
|
4121
|
+
const [date1Str, date2Str] = value.split(" - ");
|
|
4122
|
+
if (!date1Str || !date2Str) {
|
|
4123
|
+
return false;
|
|
4124
|
+
}
|
|
4125
|
+
const parsedDate1 = parseDate2(date1Str, format);
|
|
4126
|
+
const parsedDate2 = parseDate2(date2Str, format);
|
|
4127
|
+
if (parsedDate1.toString() === "Invalid Date" || parsedDate2.toString() === "Invalid Date") {
|
|
4128
|
+
return false;
|
|
4129
|
+
}
|
|
4130
|
+
const formattedValue = formatValueString2(
|
|
4131
|
+
[parsedDate1, parsedDate2],
|
|
4132
|
+
format
|
|
4133
|
+
);
|
|
4134
|
+
if (value !== formattedValue) {
|
|
4135
|
+
return false;
|
|
4136
|
+
}
|
|
4137
|
+
const regex = new RegExp(
|
|
4138
|
+
`^${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")} - ${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")}$`
|
|
4139
|
+
);
|
|
4140
|
+
return regex.test(value);
|
|
4141
|
+
} catch (e) {
|
|
4142
|
+
return false;
|
|
4143
|
+
}
|
|
4144
|
+
};
|
|
4117
4145
|
var formatValueString2 = ([date1, date2], format) => {
|
|
4118
4146
|
const getStr = (date) => {
|
|
4119
4147
|
let day = `${date.getDate()}`;
|
|
@@ -4210,6 +4238,7 @@ var DateRangePicker = forwardRef8(
|
|
|
4210
4238
|
sx,
|
|
4211
4239
|
className,
|
|
4212
4240
|
format = "YYYY/MM/DD",
|
|
4241
|
+
displayFormat = "YYYY/MM/DD",
|
|
4213
4242
|
size,
|
|
4214
4243
|
inputReadOnly,
|
|
4215
4244
|
hideClearButton,
|
|
@@ -4226,12 +4255,27 @@ var DateRangePicker = forwardRef8(
|
|
|
4226
4255
|
[props.name, onChange]
|
|
4227
4256
|
)
|
|
4228
4257
|
);
|
|
4258
|
+
const [displayValue, setDisplayValue] = useState7(
|
|
4259
|
+
() => value ? formatValueString2(parseDates(value, format), displayFormat) : ""
|
|
4260
|
+
);
|
|
4229
4261
|
const [anchorEl, setAnchorEl] = useState7(null);
|
|
4230
4262
|
const open = Boolean(anchorEl);
|
|
4231
4263
|
const calendarValue = useMemo9(
|
|
4232
4264
|
() => value ? parseDates(value, format) : void 0,
|
|
4233
4265
|
[value, format]
|
|
4234
4266
|
);
|
|
4267
|
+
useEffect6(() => {
|
|
4268
|
+
if (value) {
|
|
4269
|
+
try {
|
|
4270
|
+
const dates = parseDates(value, format);
|
|
4271
|
+
const newDisplayValue = formatValueString2(dates, displayFormat);
|
|
4272
|
+
setDisplayValue(newDisplayValue);
|
|
4273
|
+
} catch (error2) {
|
|
4274
|
+
}
|
|
4275
|
+
} else {
|
|
4276
|
+
setDisplayValue("");
|
|
4277
|
+
}
|
|
4278
|
+
}, [displayFormat, value, format]);
|
|
4235
4279
|
useEffect6(() => {
|
|
4236
4280
|
if (!anchorEl) {
|
|
4237
4281
|
innerRef.current?.blur();
|
|
@@ -4242,9 +4286,41 @@ var DateRangePicker = forwardRef8(
|
|
|
4242
4286
|
]);
|
|
4243
4287
|
const handleChange = useCallback10(
|
|
4244
4288
|
(event) => {
|
|
4245
|
-
|
|
4289
|
+
const value2 = event.target.value;
|
|
4290
|
+
setDisplayValue(
|
|
4291
|
+
value2 ? formatValueString2(parseDates(value2, format), displayFormat) : value2
|
|
4292
|
+
);
|
|
4293
|
+
setValue(value2);
|
|
4246
4294
|
},
|
|
4247
|
-
[setValue]
|
|
4295
|
+
[displayFormat, format, setValue]
|
|
4296
|
+
);
|
|
4297
|
+
const handleDisplayInputChange = useCallback10(
|
|
4298
|
+
(event) => {
|
|
4299
|
+
if (event.target.value === "") {
|
|
4300
|
+
handleChange({
|
|
4301
|
+
target: {
|
|
4302
|
+
name: props.name,
|
|
4303
|
+
value: ""
|
|
4304
|
+
}
|
|
4305
|
+
});
|
|
4306
|
+
return;
|
|
4307
|
+
}
|
|
4308
|
+
const isValidDisplayValue = validValueFormat2(
|
|
4309
|
+
event.target.value,
|
|
4310
|
+
displayFormat
|
|
4311
|
+
);
|
|
4312
|
+
if (isValidDisplayValue) {
|
|
4313
|
+
const dates = parseDates(event.target.value, displayFormat);
|
|
4314
|
+
const formattedValue = formatValueString2(dates, format);
|
|
4315
|
+
handleChange({
|
|
4316
|
+
target: {
|
|
4317
|
+
name: props.name,
|
|
4318
|
+
value: formattedValue
|
|
4319
|
+
}
|
|
4320
|
+
});
|
|
4321
|
+
}
|
|
4322
|
+
},
|
|
4323
|
+
[displayFormat, format, handleChange, props.name]
|
|
4248
4324
|
);
|
|
4249
4325
|
const handleCalendarToggle = useCallback10(
|
|
4250
4326
|
(event) => {
|
|
@@ -4256,10 +4332,26 @@ var DateRangePicker = forwardRef8(
|
|
|
4256
4332
|
const handleCalendarChange = useCallback10(
|
|
4257
4333
|
([date1, date2]) => {
|
|
4258
4334
|
if (!date1 || !date2) return;
|
|
4259
|
-
|
|
4335
|
+
const formattedValue = formatValueString2([date1, date2], format);
|
|
4336
|
+
if (props.value !== void 0) {
|
|
4337
|
+
onChange?.({ target: { name: props.name, value: formattedValue } });
|
|
4338
|
+
} else {
|
|
4339
|
+
setDisplayValue(
|
|
4340
|
+
formatValueString2([date1, date2], displayFormat)
|
|
4341
|
+
);
|
|
4342
|
+
setValue(formattedValue);
|
|
4343
|
+
}
|
|
4260
4344
|
setAnchorEl(null);
|
|
4261
4345
|
},
|
|
4262
|
-
[
|
|
4346
|
+
[
|
|
4347
|
+
props.value,
|
|
4348
|
+
props.name,
|
|
4349
|
+
onChange,
|
|
4350
|
+
setValue,
|
|
4351
|
+
setAnchorEl,
|
|
4352
|
+
format,
|
|
4353
|
+
displayFormat
|
|
4354
|
+
]
|
|
4263
4355
|
);
|
|
4264
4356
|
const handleInputMouseDown = useCallback10(
|
|
4265
4357
|
(event) => {
|
|
@@ -4277,17 +4369,21 @@ var DateRangePicker = forwardRef8(
|
|
|
4277
4369
|
color: error ? "danger" : innerProps.color,
|
|
4278
4370
|
ref,
|
|
4279
4371
|
size,
|
|
4280
|
-
value,
|
|
4281
|
-
onChange:
|
|
4372
|
+
value: displayValue,
|
|
4373
|
+
onChange: handleDisplayInputChange,
|
|
4282
4374
|
disabled,
|
|
4283
4375
|
required,
|
|
4284
|
-
placeholder: `${
|
|
4376
|
+
placeholder: `${displayFormat} - ${displayFormat}`,
|
|
4285
4377
|
slotProps: {
|
|
4286
4378
|
input: {
|
|
4287
4379
|
component: TextMaskAdapter5,
|
|
4288
4380
|
ref: innerRef,
|
|
4289
|
-
format,
|
|
4290
|
-
sx: {
|
|
4381
|
+
format: displayFormat,
|
|
4382
|
+
sx: {
|
|
4383
|
+
"&:hover": {
|
|
4384
|
+
cursor: inputReadOnly || readOnly ? "default" : "text"
|
|
4385
|
+
}
|
|
4386
|
+
},
|
|
4291
4387
|
onMouseDown: handleInputMouseDown
|
|
4292
4388
|
}
|
|
4293
4389
|
},
|
|
@@ -4357,6 +4453,7 @@ var DateRangePicker = forwardRef8(
|
|
|
4357
4453
|
color: "neutral",
|
|
4358
4454
|
onClick: () => {
|
|
4359
4455
|
setValue("");
|
|
4456
|
+
setDisplayValue("");
|
|
4360
4457
|
setAnchorEl(null);
|
|
4361
4458
|
}
|
|
4362
4459
|
},
|