@x-plat/design-system 0.12.0 → 0.13.0
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/AutoResizeTextArea/index.cjs +2 -2
- package/dist/components/AutoResizeTextArea/index.js +2 -2
- package/dist/components/ChatInput/index.cjs +2 -2
- package/dist/components/ChatInput/index.js +2 -2
- package/dist/components/CheckBox/index.cjs +2 -2
- package/dist/components/CheckBox/index.js +2 -2
- package/dist/components/DatePicker/index.cjs +109 -75
- package/dist/components/DatePicker/index.d.cts +19 -0
- package/dist/components/DatePicker/index.d.ts +19 -0
- package/dist/components/DatePicker/index.js +109 -75
- package/dist/components/Editor/index.css +3 -0
- package/dist/components/FieldMessage/index.cjs +2 -2
- package/dist/components/FieldMessage/index.d.cts +8 -0
- package/dist/components/FieldMessage/index.d.ts +8 -0
- package/dist/components/FieldMessage/index.js +2 -2
- package/dist/components/FileUpload/index.cjs +10 -6
- package/dist/components/FileUpload/index.d.cts +15 -2
- package/dist/components/FileUpload/index.d.ts +15 -2
- package/dist/components/FileUpload/index.js +10 -6
- package/dist/components/ImageSelector/index.cjs +7 -6
- package/dist/components/ImageSelector/index.d.cts +15 -2
- package/dist/components/ImageSelector/index.d.ts +15 -2
- package/dist/components/ImageSelector/index.js +7 -6
- package/dist/components/Input/index.cjs +2 -2
- package/dist/components/Input/index.d.cts +4 -0
- package/dist/components/Input/index.d.ts +4 -0
- package/dist/components/Input/index.js +2 -2
- package/dist/components/Radio/index.cjs +2 -2
- package/dist/components/Radio/index.js +2 -2
- package/dist/components/Select/index.cjs +2 -2
- package/dist/components/Select/index.d.cts +1 -2
- package/dist/components/Select/index.d.ts +1 -2
- package/dist/components/Select/index.js +2 -2
- package/dist/components/Switch/index.cjs +2 -2
- package/dist/components/Switch/index.js +2 -2
- package/dist/components/TextArea/index.cjs +2 -2
- package/dist/components/TextArea/index.js +2 -2
- package/dist/components/TimePicker/index.cjs +2 -2
- package/dist/components/TimePicker/index.js +2 -2
- package/dist/components/index.cjs +122 -83
- package/dist/components/index.css +3 -0
- package/dist/components/index.js +122 -83
- package/dist/index.cjs +122 -83
- package/dist/index.css +3 -0
- package/dist/index.js +122 -83
- package/guidelines/Guidelines.md +12 -0
- package/guidelines/MIGRATION.md +270 -0
- package/guidelines/components/datepicker.md +26 -0
- package/guidelines/components/file-media.md +21 -4
- package/package.json +1 -1
package/dist/components/index.js
CHANGED
|
@@ -1532,11 +1532,11 @@ var FieldMessage = (props) => {
|
|
|
1532
1532
|
FieldMessage.displayName = "FieldMessage";
|
|
1533
1533
|
var FieldMessage_default = FieldMessage;
|
|
1534
1534
|
var Field = (props) => {
|
|
1535
|
-
const { label, required = false, htmlFor, validations, children } = props;
|
|
1535
|
+
const { label, required = false, htmlFor, labelId, validations, children } = props;
|
|
1536
1536
|
const hasMessages = !!validations && validations.length > 0;
|
|
1537
1537
|
if (!label && !hasMessages) return /* @__PURE__ */ jsx297(Fragment, { children });
|
|
1538
1538
|
return /* @__PURE__ */ jsxs191("div", { className: "lib-xplat-field", children: [
|
|
1539
|
-
label && /* @__PURE__ */ jsxs191("label", { className: "lib-xplat-field-label", htmlFor, children: [
|
|
1539
|
+
label && /* @__PURE__ */ jsxs191("label", { className: "lib-xplat-field-label", id: labelId, htmlFor, children: [
|
|
1540
1540
|
label,
|
|
1541
1541
|
required && /* @__PURE__ */ jsx297("span", { className: "required", "aria-hidden": "true", children: "*" })
|
|
1542
1542
|
] }),
|
|
@@ -3303,8 +3303,12 @@ var SingleDatePicker = (props) => {
|
|
|
3303
3303
|
highlightDates = [],
|
|
3304
3304
|
locale = "ko",
|
|
3305
3305
|
rangeStart,
|
|
3306
|
-
rangeEnd
|
|
3306
|
+
rangeEnd,
|
|
3307
|
+
label,
|
|
3308
|
+
required,
|
|
3309
|
+
validations
|
|
3307
3310
|
} = props;
|
|
3311
|
+
const labelId = React12.useId();
|
|
3308
3312
|
const initialYear = value?.getFullYear();
|
|
3309
3313
|
const initialMonth = value?.getMonth();
|
|
3310
3314
|
const { year, month, days, goToPrevMonth, goToNextMonth, setYear, setMonth } = useCalendar(
|
|
@@ -3367,10 +3371,12 @@ var SingleDatePicker = (props) => {
|
|
|
3367
3371
|
const monthLabels = MONTH_LABELS[locale];
|
|
3368
3372
|
const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
|
|
3369
3373
|
const hasRange = rangeStart != null && rangeEnd != null;
|
|
3370
|
-
|
|
3374
|
+
const calendar = /* @__PURE__ */ jsxs200(
|
|
3371
3375
|
"div",
|
|
3372
3376
|
{
|
|
3373
3377
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
3378
|
+
role: "group",
|
|
3379
|
+
"aria-labelledby": label ? labelId : void 0,
|
|
3374
3380
|
children: [
|
|
3375
3381
|
/* @__PURE__ */ jsxs200("div", { className: "datepicker-header", children: [
|
|
3376
3382
|
/* @__PURE__ */ jsx314("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ jsx314(ChevronLeftIcon_default, {}) }),
|
|
@@ -3391,18 +3397,18 @@ var SingleDatePicker = (props) => {
|
|
|
3391
3397
|
y
|
|
3392
3398
|
);
|
|
3393
3399
|
}) }),
|
|
3394
|
-
pickerMode === "months" && /* @__PURE__ */ jsx314("div", { className: "datepicker-picker-grid", children: monthLabels.map((
|
|
3400
|
+
pickerMode === "months" && /* @__PURE__ */ jsx314("div", { className: "datepicker-picker-grid", children: monthLabels.map((label2, i) => /* @__PURE__ */ jsx314(
|
|
3395
3401
|
"button",
|
|
3396
3402
|
{
|
|
3397
3403
|
type: "button",
|
|
3398
3404
|
className: clsx_default("datepicker-picker-cell", i === month && "active"),
|
|
3399
3405
|
onClick: () => handleMonthSelect(i),
|
|
3400
|
-
children:
|
|
3406
|
+
children: label2
|
|
3401
3407
|
},
|
|
3402
3408
|
i
|
|
3403
3409
|
)) }),
|
|
3404
3410
|
pickerMode === "days" && /* @__PURE__ */ jsxs200(Fragment4, { children: [
|
|
3405
|
-
/* @__PURE__ */ jsx314("div", { className: "datepicker-weekdays", children: weekdays.map((
|
|
3411
|
+
/* @__PURE__ */ jsx314("div", { className: "datepicker-weekdays", children: weekdays.map((label2, i) => /* @__PURE__ */ jsx314(
|
|
3406
3412
|
"div",
|
|
3407
3413
|
{
|
|
3408
3414
|
className: clsx_default(
|
|
@@ -3410,9 +3416,9 @@ var SingleDatePicker = (props) => {
|
|
|
3410
3416
|
i === 0 && "sunday",
|
|
3411
3417
|
i === 6 && "saturday"
|
|
3412
3418
|
),
|
|
3413
|
-
children:
|
|
3419
|
+
children: label2
|
|
3414
3420
|
},
|
|
3415
|
-
|
|
3421
|
+
label2
|
|
3416
3422
|
)) }),
|
|
3417
3423
|
/* @__PURE__ */ jsx314("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
3418
3424
|
const t = day.date.getTime();
|
|
@@ -3444,6 +3450,7 @@ var SingleDatePicker = (props) => {
|
|
|
3444
3450
|
]
|
|
3445
3451
|
}
|
|
3446
3452
|
);
|
|
3453
|
+
return /* @__PURE__ */ jsx314(Field, { label, required, labelId, validations, children: calendar });
|
|
3447
3454
|
};
|
|
3448
3455
|
SingleDatePicker.displayName = "SingleDatePicker";
|
|
3449
3456
|
var SingleDatePicker_default = SingleDatePicker;
|
|
@@ -3458,7 +3465,18 @@ var formatDate = (date) => {
|
|
|
3458
3465
|
return `${y}/${m}/${d}`;
|
|
3459
3466
|
};
|
|
3460
3467
|
var InputDatePicker = (props) => {
|
|
3461
|
-
const {
|
|
3468
|
+
const {
|
|
3469
|
+
value,
|
|
3470
|
+
onChange,
|
|
3471
|
+
minDate,
|
|
3472
|
+
maxDate,
|
|
3473
|
+
disabled,
|
|
3474
|
+
locale = "ko",
|
|
3475
|
+
placeholder,
|
|
3476
|
+
label,
|
|
3477
|
+
required,
|
|
3478
|
+
validations
|
|
3479
|
+
} = props;
|
|
3462
3480
|
const [isOpen, setIsOpen] = React13.useState(false);
|
|
3463
3481
|
const [tempDate, setTempDate] = React13.useState(value ?? /* @__PURE__ */ new Date());
|
|
3464
3482
|
const handleOpen = () => {
|
|
@@ -3484,6 +3502,9 @@ var InputDatePicker = (props) => {
|
|
|
3484
3502
|
placeholder,
|
|
3485
3503
|
suffix: /* @__PURE__ */ jsx315(CalenderIcon_default, {}),
|
|
3486
3504
|
disabled,
|
|
3505
|
+
label,
|
|
3506
|
+
required,
|
|
3507
|
+
validations,
|
|
3487
3508
|
readOnly: true
|
|
3488
3509
|
}
|
|
3489
3510
|
) }),
|
|
@@ -3615,8 +3636,12 @@ var RangePicker = (props) => {
|
|
|
3615
3636
|
onChange,
|
|
3616
3637
|
minDate,
|
|
3617
3638
|
maxDate,
|
|
3618
|
-
locale = "ko"
|
|
3639
|
+
locale = "ko",
|
|
3640
|
+
label,
|
|
3641
|
+
required,
|
|
3642
|
+
validations
|
|
3619
3643
|
} = props;
|
|
3644
|
+
const labelId = React16.useId();
|
|
3620
3645
|
const [activeTab, setActiveTab] = React16.useState("start");
|
|
3621
3646
|
const handleStartChange = (date) => {
|
|
3622
3647
|
if (!date) return;
|
|
@@ -3630,70 +3655,79 @@ var RangePicker = (props) => {
|
|
|
3630
3655
|
};
|
|
3631
3656
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
3632
3657
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
|
|
3643
|
-
|
|
3644
|
-
|
|
3645
|
-
|
|
3646
|
-
|
|
3647
|
-
|
|
3648
|
-
|
|
3649
|
-
|
|
3650
|
-
|
|
3651
|
-
|
|
3652
|
-
|
|
3653
|
-
|
|
3654
|
-
|
|
3655
|
-
|
|
3656
|
-
|
|
3657
|
-
|
|
3658
|
-
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
3662
|
-
|
|
3663
|
-
|
|
3664
|
-
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
|
|
3668
|
-
|
|
3669
|
-
|
|
3670
|
-
|
|
3671
|
-
|
|
3672
|
-
|
|
3673
|
-
|
|
3674
|
-
|
|
3675
|
-
|
|
3676
|
-
|
|
3677
|
-
|
|
3678
|
-
|
|
3679
|
-
|
|
3680
|
-
|
|
3681
|
-
|
|
3682
|
-
|
|
3683
|
-
|
|
3684
|
-
|
|
3685
|
-
|
|
3686
|
-
|
|
3687
|
-
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
|
|
3691
|
-
|
|
3692
|
-
|
|
3693
|
-
|
|
3694
|
-
|
|
3695
|
-
|
|
3696
|
-
|
|
3658
|
+
const calendar = /* @__PURE__ */ jsxs203(
|
|
3659
|
+
"div",
|
|
3660
|
+
{
|
|
3661
|
+
className: clsx_default("lib-xplat-datepicker", "range"),
|
|
3662
|
+
role: "group",
|
|
3663
|
+
"aria-labelledby": label ? labelId : void 0,
|
|
3664
|
+
children: [
|
|
3665
|
+
/* @__PURE__ */ jsx318("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ jsx318(
|
|
3666
|
+
Tab_default,
|
|
3667
|
+
{
|
|
3668
|
+
activeIndex: activeTab === "start" ? 0 : 1,
|
|
3669
|
+
tabs: [
|
|
3670
|
+
{ value: "start", title: locale === "ko" ? "\uC2DC\uC791\uC77C" : "Start" },
|
|
3671
|
+
{ value: "end", title: locale === "ko" ? "\uC885\uB8CC\uC77C" : "End" }
|
|
3672
|
+
],
|
|
3673
|
+
onChange: (tab) => setActiveTab(tab.value),
|
|
3674
|
+
type: "toggle",
|
|
3675
|
+
size: "sm"
|
|
3676
|
+
}
|
|
3677
|
+
) }),
|
|
3678
|
+
/* @__PURE__ */ jsxs203("div", { className: "datepicker-range-panels", children: [
|
|
3679
|
+
/* @__PURE__ */ jsx318(
|
|
3680
|
+
SingleDatePicker_default,
|
|
3681
|
+
{
|
|
3682
|
+
value: startDate,
|
|
3683
|
+
onChange: handleStartChange,
|
|
3684
|
+
minDate,
|
|
3685
|
+
maxDate: startMaxDate,
|
|
3686
|
+
rangeStart: startDate,
|
|
3687
|
+
rangeEnd: endDate,
|
|
3688
|
+
locale
|
|
3689
|
+
}
|
|
3690
|
+
),
|
|
3691
|
+
/* @__PURE__ */ jsx318(
|
|
3692
|
+
SingleDatePicker_default,
|
|
3693
|
+
{
|
|
3694
|
+
value: endDate,
|
|
3695
|
+
onChange: handleEndChange,
|
|
3696
|
+
minDate: endMinDate,
|
|
3697
|
+
maxDate,
|
|
3698
|
+
rangeStart: startDate,
|
|
3699
|
+
rangeEnd: endDate,
|
|
3700
|
+
locale
|
|
3701
|
+
}
|
|
3702
|
+
)
|
|
3703
|
+
] }),
|
|
3704
|
+
/* @__PURE__ */ jsx318("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ jsx318(
|
|
3705
|
+
SingleDatePicker_default,
|
|
3706
|
+
{
|
|
3707
|
+
value: startDate,
|
|
3708
|
+
onChange: handleStartChange,
|
|
3709
|
+
minDate,
|
|
3710
|
+
maxDate: startMaxDate,
|
|
3711
|
+
rangeStart: startDate,
|
|
3712
|
+
rangeEnd: endDate,
|
|
3713
|
+
locale
|
|
3714
|
+
}
|
|
3715
|
+
) : /* @__PURE__ */ jsx318(
|
|
3716
|
+
SingleDatePicker_default,
|
|
3717
|
+
{
|
|
3718
|
+
value: endDate,
|
|
3719
|
+
onChange: handleEndChange,
|
|
3720
|
+
minDate: endMinDate,
|
|
3721
|
+
maxDate,
|
|
3722
|
+
rangeStart: startDate,
|
|
3723
|
+
rangeEnd: endDate,
|
|
3724
|
+
locale
|
|
3725
|
+
}
|
|
3726
|
+
) })
|
|
3727
|
+
]
|
|
3728
|
+
}
|
|
3729
|
+
);
|
|
3730
|
+
return /* @__PURE__ */ jsx318(Field, { label, required, labelId, validations, children: calendar });
|
|
3697
3731
|
};
|
|
3698
3732
|
RangePicker.displayName = "RangePicker";
|
|
3699
3733
|
var RangePicker_default = RangePicker;
|
|
@@ -5466,10 +5500,13 @@ var FileUpload = (props) => {
|
|
|
5466
5500
|
multiple = false,
|
|
5467
5501
|
maxSize,
|
|
5468
5502
|
onChange,
|
|
5469
|
-
|
|
5503
|
+
placeholder = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
5470
5504
|
description,
|
|
5471
|
-
validations
|
|
5505
|
+
validations,
|
|
5506
|
+
label,
|
|
5507
|
+
required
|
|
5472
5508
|
} = props;
|
|
5509
|
+
const fieldId = React23.useId();
|
|
5473
5510
|
const [isDragOver, setIsDragOver] = React23.useState(false);
|
|
5474
5511
|
const inputRef = React23.useRef(null);
|
|
5475
5512
|
const handleFiles = (fileList) => {
|
|
@@ -5514,6 +5551,7 @@ var FileUpload = (props) => {
|
|
|
5514
5551
|
"input",
|
|
5515
5552
|
{
|
|
5516
5553
|
ref: inputRef,
|
|
5554
|
+
id: fieldId,
|
|
5517
5555
|
type: "file",
|
|
5518
5556
|
accept,
|
|
5519
5557
|
multiple,
|
|
@@ -5522,12 +5560,12 @@ var FileUpload = (props) => {
|
|
|
5522
5560
|
}
|
|
5523
5561
|
),
|
|
5524
5562
|
/* @__PURE__ */ jsx325("div", { className: "upload-icon", children: /* @__PURE__ */ jsx325(UploadIcon_default, {}) }),
|
|
5525
|
-
/* @__PURE__ */ jsx325("p", { className: "upload-label", children:
|
|
5563
|
+
/* @__PURE__ */ jsx325("p", { className: "upload-label", children: placeholder }),
|
|
5526
5564
|
description && /* @__PURE__ */ jsx325("p", { className: "upload-description", children: description })
|
|
5527
5565
|
]
|
|
5528
5566
|
}
|
|
5529
5567
|
);
|
|
5530
|
-
return /* @__PURE__ */ jsx325(Field, { validations, children: control });
|
|
5568
|
+
return /* @__PURE__ */ jsx325(Field, { label, required, htmlFor: fieldId, validations, children: control });
|
|
5531
5569
|
};
|
|
5532
5570
|
FileUpload.displayName = "FileUpload";
|
|
5533
5571
|
var FileUpload_default = FileUpload;
|
|
@@ -5670,7 +5708,8 @@ var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
|
5670
5708
|
import React26 from "react";
|
|
5671
5709
|
import { jsx as jsx327, jsxs as jsxs210 } from "react/jsx-runtime";
|
|
5672
5710
|
var ImageSelector = (props) => {
|
|
5673
|
-
const { value,
|
|
5711
|
+
const { value, placeholder, onChange, validations, label, required } = props;
|
|
5712
|
+
const fieldId = React26.useId();
|
|
5674
5713
|
const [previewUrl, setPreviewUrl] = React26.useState();
|
|
5675
5714
|
React26.useEffect(() => {
|
|
5676
5715
|
if (!value) {
|
|
@@ -5700,7 +5739,7 @@ var ImageSelector = (props) => {
|
|
|
5700
5739
|
{
|
|
5701
5740
|
type: "file",
|
|
5702
5741
|
accept: "image/*",
|
|
5703
|
-
id:
|
|
5742
|
+
id: fieldId,
|
|
5704
5743
|
onChange: handleFileChange,
|
|
5705
5744
|
ref: inputRef,
|
|
5706
5745
|
"aria-invalid": hasError(validations) || void 0
|
|
@@ -5712,10 +5751,10 @@ var ImageSelector = (props) => {
|
|
|
5712
5751
|
] }),
|
|
5713
5752
|
/* @__PURE__ */ jsx327("div", { className: "content", children: previewUrl ? /* @__PURE__ */ jsx327("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ jsxs210("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
|
|
5714
5753
|
/* @__PURE__ */ jsx327("div", { className: "icon-wrapper", children: /* @__PURE__ */ jsx327(ImageIcon_default, {}) }),
|
|
5715
|
-
/* @__PURE__ */ jsx327("div", { className: "label", children:
|
|
5754
|
+
/* @__PURE__ */ jsx327("div", { className: "label", children: placeholder || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
5716
5755
|
] }) })
|
|
5717
5756
|
] });
|
|
5718
|
-
return /* @__PURE__ */ jsx327(Field, { validations, children: control });
|
|
5757
|
+
return /* @__PURE__ */ jsx327(Field, { label, required, htmlFor: fieldId, validations, children: control });
|
|
5719
5758
|
};
|
|
5720
5759
|
ImageSelector.displayName = "ImageSelector";
|
|
5721
5760
|
var ImageSelector_default = ImageSelector;
|