@x-plat/design-system 0.12.0 → 0.14.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/{breakpoints-DsXkJgdl.d.cts → breakpoints-CKkNxA-y.d.cts} +1 -1
- package/dist/{breakpoints-DsXkJgdl.d.ts → breakpoints-CKkNxA-y.d.ts} +1 -1
- package/dist/components/AutoResizeTextArea/index.cjs +2 -2
- package/dist/components/AutoResizeTextArea/index.js +2 -2
- package/dist/components/Badge/index.d.cts +1 -1
- package/dist/components/Badge/index.d.ts +1 -1
- 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/ToggleChip/index.cjs +69 -0
- package/dist/components/ToggleChip/index.css +102 -0
- package/dist/components/ToggleChip/index.d.cts +37 -0
- package/dist/components/ToggleChip/index.d.ts +37 -0
- package/dist/components/ToggleChip/index.js +42 -0
- package/dist/components/index.cjs +184 -119
- package/dist/components/index.css +40 -0
- package/dist/components/index.d.cts +2 -1
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.js +174 -110
- package/dist/index.cjs +203 -138
- package/dist/index.css +40 -0
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +191 -127
- package/dist/layout/Grid/Item/index.d.cts +1 -1
- package/dist/layout/Grid/Item/index.d.ts +1 -1
- package/dist/layout/Grid/index.d.cts +1 -1
- package/dist/layout/Grid/index.d.ts +1 -1
- package/dist/layout/index.d.cts +1 -1
- package/dist/layout/index.d.ts +1 -1
- package/dist/tokens/index.d.cts +1 -1
- package/dist/tokens/index.d.ts +1 -1
- package/guidelines/Guidelines.md +13 -1
- package/guidelines/MIGRATION.md +297 -0
- package/guidelines/components/chip-tag.md +75 -2
- package/guidelines/components/datepicker.md +26 -0
- package/guidelines/components/file-media.md +21 -4
- package/package.json +1 -1
|
@@ -89,6 +89,7 @@ __export(components_exports, {
|
|
|
89
89
|
TextArea: () => TextArea_default,
|
|
90
90
|
TimePicker: () => TimePicker_default,
|
|
91
91
|
ToastProvider: () => ToastProvider,
|
|
92
|
+
ToggleChip: () => ToggleChip_default,
|
|
92
93
|
Tooltip: () => Tooltip_default,
|
|
93
94
|
Video: () => Video_default,
|
|
94
95
|
hasError: () => hasError,
|
|
@@ -1633,11 +1634,11 @@ var FieldMessage = (props) => {
|
|
|
1633
1634
|
FieldMessage.displayName = "FieldMessage";
|
|
1634
1635
|
var FieldMessage_default = FieldMessage;
|
|
1635
1636
|
var Field = (props) => {
|
|
1636
|
-
const { label, required = false, htmlFor, validations, children } = props;
|
|
1637
|
+
const { label, required = false, htmlFor, labelId, validations, children } = props;
|
|
1637
1638
|
const hasMessages = !!validations && validations.length > 0;
|
|
1638
1639
|
if (!label && !hasMessages) return /* @__PURE__ */ (0, import_jsx_runtime297.jsx)(import_jsx_runtime297.Fragment, { children });
|
|
1639
1640
|
return /* @__PURE__ */ (0, import_jsx_runtime297.jsxs)("div", { className: "lib-xplat-field", children: [
|
|
1640
|
-
label && /* @__PURE__ */ (0, import_jsx_runtime297.jsxs)("label", { className: "lib-xplat-field-label", htmlFor, children: [
|
|
1641
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime297.jsxs)("label", { className: "lib-xplat-field-label", id: labelId, htmlFor, children: [
|
|
1641
1642
|
label,
|
|
1642
1643
|
required && /* @__PURE__ */ (0, import_jsx_runtime297.jsx)("span", { className: "required", "aria-hidden": "true", children: "*" })
|
|
1643
1644
|
] }),
|
|
@@ -3404,8 +3405,12 @@ var SingleDatePicker = (props) => {
|
|
|
3404
3405
|
highlightDates = [],
|
|
3405
3406
|
locale = "ko",
|
|
3406
3407
|
rangeStart,
|
|
3407
|
-
rangeEnd
|
|
3408
|
+
rangeEnd,
|
|
3409
|
+
label,
|
|
3410
|
+
required,
|
|
3411
|
+
validations
|
|
3408
3412
|
} = props;
|
|
3413
|
+
const labelId = import_react12.default.useId();
|
|
3409
3414
|
const initialYear = value?.getFullYear();
|
|
3410
3415
|
const initialMonth = value?.getMonth();
|
|
3411
3416
|
const { year, month, days, goToPrevMonth, goToNextMonth, setYear, setMonth } = useCalendar(
|
|
@@ -3468,10 +3473,12 @@ var SingleDatePicker = (props) => {
|
|
|
3468
3473
|
const monthLabels = MONTH_LABELS[locale];
|
|
3469
3474
|
const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
|
|
3470
3475
|
const hasRange = rangeStart != null && rangeEnd != null;
|
|
3471
|
-
|
|
3476
|
+
const calendar = /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(
|
|
3472
3477
|
"div",
|
|
3473
3478
|
{
|
|
3474
3479
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
3480
|
+
role: "group",
|
|
3481
|
+
"aria-labelledby": label ? labelId : void 0,
|
|
3475
3482
|
children: [
|
|
3476
3483
|
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "datepicker-header", children: [
|
|
3477
3484
|
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(ChevronLeftIcon_default, {}) }),
|
|
@@ -3492,18 +3499,18 @@ var SingleDatePicker = (props) => {
|
|
|
3492
3499
|
y
|
|
3493
3500
|
);
|
|
3494
3501
|
}) }),
|
|
3495
|
-
pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((
|
|
3502
|
+
pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label2, i) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3496
3503
|
"button",
|
|
3497
3504
|
{
|
|
3498
3505
|
type: "button",
|
|
3499
3506
|
className: clsx_default("datepicker-picker-cell", i === month && "active"),
|
|
3500
3507
|
onClick: () => handleMonthSelect(i),
|
|
3501
|
-
children:
|
|
3508
|
+
children: label2
|
|
3502
3509
|
},
|
|
3503
3510
|
i
|
|
3504
3511
|
)) }),
|
|
3505
3512
|
pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(import_jsx_runtime314.Fragment, { children: [
|
|
3506
|
-
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((
|
|
3513
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label2, i) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3507
3514
|
"div",
|
|
3508
3515
|
{
|
|
3509
3516
|
className: clsx_default(
|
|
@@ -3511,9 +3518,9 @@ var SingleDatePicker = (props) => {
|
|
|
3511
3518
|
i === 0 && "sunday",
|
|
3512
3519
|
i === 6 && "saturday"
|
|
3513
3520
|
),
|
|
3514
|
-
children:
|
|
3521
|
+
children: label2
|
|
3515
3522
|
},
|
|
3516
|
-
|
|
3523
|
+
label2
|
|
3517
3524
|
)) }),
|
|
3518
3525
|
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
3519
3526
|
const t = day.date.getTime();
|
|
@@ -3545,6 +3552,7 @@ var SingleDatePicker = (props) => {
|
|
|
3545
3552
|
]
|
|
3546
3553
|
}
|
|
3547
3554
|
);
|
|
3555
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(Field, { label, required, labelId, validations, children: calendar });
|
|
3548
3556
|
};
|
|
3549
3557
|
SingleDatePicker.displayName = "SingleDatePicker";
|
|
3550
3558
|
var SingleDatePicker_default = SingleDatePicker;
|
|
@@ -3559,7 +3567,18 @@ var formatDate = (date) => {
|
|
|
3559
3567
|
return `${y}/${m}/${d}`;
|
|
3560
3568
|
};
|
|
3561
3569
|
var InputDatePicker = (props) => {
|
|
3562
|
-
const {
|
|
3570
|
+
const {
|
|
3571
|
+
value,
|
|
3572
|
+
onChange,
|
|
3573
|
+
minDate,
|
|
3574
|
+
maxDate,
|
|
3575
|
+
disabled,
|
|
3576
|
+
locale = "ko",
|
|
3577
|
+
placeholder,
|
|
3578
|
+
label,
|
|
3579
|
+
required,
|
|
3580
|
+
validations
|
|
3581
|
+
} = props;
|
|
3563
3582
|
const [isOpen, setIsOpen] = import_react13.default.useState(false);
|
|
3564
3583
|
const [tempDate, setTempDate] = import_react13.default.useState(value ?? /* @__PURE__ */ new Date());
|
|
3565
3584
|
const handleOpen = () => {
|
|
@@ -3585,6 +3604,9 @@ var InputDatePicker = (props) => {
|
|
|
3585
3604
|
placeholder,
|
|
3586
3605
|
suffix: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(CalenderIcon_default, {}),
|
|
3587
3606
|
disabled,
|
|
3607
|
+
label,
|
|
3608
|
+
required,
|
|
3609
|
+
validations,
|
|
3588
3610
|
readOnly: true
|
|
3589
3611
|
}
|
|
3590
3612
|
) }),
|
|
@@ -3716,8 +3738,12 @@ var RangePicker = (props) => {
|
|
|
3716
3738
|
onChange,
|
|
3717
3739
|
minDate,
|
|
3718
3740
|
maxDate,
|
|
3719
|
-
locale = "ko"
|
|
3741
|
+
locale = "ko",
|
|
3742
|
+
label,
|
|
3743
|
+
required,
|
|
3744
|
+
validations
|
|
3720
3745
|
} = props;
|
|
3746
|
+
const labelId = import_react16.default.useId();
|
|
3721
3747
|
const [activeTab, setActiveTab] = import_react16.default.useState("start");
|
|
3722
3748
|
const handleStartChange = (date) => {
|
|
3723
3749
|
if (!date) return;
|
|
@@ -3731,70 +3757,79 @@ var RangePicker = (props) => {
|
|
|
3731
3757
|
};
|
|
3732
3758
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
3733
3759
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
3734
|
-
|
|
3735
|
-
|
|
3736
|
-
|
|
3737
|
-
|
|
3738
|
-
|
|
3739
|
-
|
|
3740
|
-
|
|
3741
|
-
|
|
3742
|
-
|
|
3743
|
-
|
|
3744
|
-
|
|
3745
|
-
|
|
3746
|
-
|
|
3747
|
-
|
|
3748
|
-
|
|
3749
|
-
|
|
3750
|
-
|
|
3751
|
-
|
|
3752
|
-
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
|
|
3778
|
-
|
|
3779
|
-
|
|
3780
|
-
|
|
3781
|
-
|
|
3782
|
-
|
|
3783
|
-
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3789
|
-
|
|
3790
|
-
|
|
3791
|
-
|
|
3792
|
-
|
|
3793
|
-
|
|
3794
|
-
|
|
3795
|
-
|
|
3796
|
-
|
|
3797
|
-
|
|
3760
|
+
const calendar = /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)(
|
|
3761
|
+
"div",
|
|
3762
|
+
{
|
|
3763
|
+
className: clsx_default("lib-xplat-datepicker", "range"),
|
|
3764
|
+
role: "group",
|
|
3765
|
+
"aria-labelledby": label ? labelId : void 0,
|
|
3766
|
+
children: [
|
|
3767
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3768
|
+
Tab_default,
|
|
3769
|
+
{
|
|
3770
|
+
activeIndex: activeTab === "start" ? 0 : 1,
|
|
3771
|
+
tabs: [
|
|
3772
|
+
{ value: "start", title: locale === "ko" ? "\uC2DC\uC791\uC77C" : "Start" },
|
|
3773
|
+
{ value: "end", title: locale === "ko" ? "\uC885\uB8CC\uC77C" : "End" }
|
|
3774
|
+
],
|
|
3775
|
+
onChange: (tab) => setActiveTab(tab.value),
|
|
3776
|
+
type: "toggle",
|
|
3777
|
+
size: "sm"
|
|
3778
|
+
}
|
|
3779
|
+
) }),
|
|
3780
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "datepicker-range-panels", children: [
|
|
3781
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3782
|
+
SingleDatePicker_default,
|
|
3783
|
+
{
|
|
3784
|
+
value: startDate,
|
|
3785
|
+
onChange: handleStartChange,
|
|
3786
|
+
minDate,
|
|
3787
|
+
maxDate: startMaxDate,
|
|
3788
|
+
rangeStart: startDate,
|
|
3789
|
+
rangeEnd: endDate,
|
|
3790
|
+
locale
|
|
3791
|
+
}
|
|
3792
|
+
),
|
|
3793
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3794
|
+
SingleDatePicker_default,
|
|
3795
|
+
{
|
|
3796
|
+
value: endDate,
|
|
3797
|
+
onChange: handleEndChange,
|
|
3798
|
+
minDate: endMinDate,
|
|
3799
|
+
maxDate,
|
|
3800
|
+
rangeStart: startDate,
|
|
3801
|
+
rangeEnd: endDate,
|
|
3802
|
+
locale
|
|
3803
|
+
}
|
|
3804
|
+
)
|
|
3805
|
+
] }),
|
|
3806
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3807
|
+
SingleDatePicker_default,
|
|
3808
|
+
{
|
|
3809
|
+
value: startDate,
|
|
3810
|
+
onChange: handleStartChange,
|
|
3811
|
+
minDate,
|
|
3812
|
+
maxDate: startMaxDate,
|
|
3813
|
+
rangeStart: startDate,
|
|
3814
|
+
rangeEnd: endDate,
|
|
3815
|
+
locale
|
|
3816
|
+
}
|
|
3817
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3818
|
+
SingleDatePicker_default,
|
|
3819
|
+
{
|
|
3820
|
+
value: endDate,
|
|
3821
|
+
onChange: handleEndChange,
|
|
3822
|
+
minDate: endMinDate,
|
|
3823
|
+
maxDate,
|
|
3824
|
+
rangeStart: startDate,
|
|
3825
|
+
rangeEnd: endDate,
|
|
3826
|
+
locale
|
|
3827
|
+
}
|
|
3828
|
+
) })
|
|
3829
|
+
]
|
|
3830
|
+
}
|
|
3831
|
+
);
|
|
3832
|
+
return /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(Field, { label, required, labelId, validations, children: calendar });
|
|
3798
3833
|
};
|
|
3799
3834
|
RangePicker.displayName = "RangePicker";
|
|
3800
3835
|
var RangePicker_default = RangePicker;
|
|
@@ -5567,10 +5602,13 @@ var FileUpload = (props) => {
|
|
|
5567
5602
|
multiple = false,
|
|
5568
5603
|
maxSize,
|
|
5569
5604
|
onChange,
|
|
5570
|
-
|
|
5605
|
+
placeholder = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
5571
5606
|
description,
|
|
5572
|
-
validations
|
|
5607
|
+
validations,
|
|
5608
|
+
label,
|
|
5609
|
+
required
|
|
5573
5610
|
} = props;
|
|
5611
|
+
const fieldId = import_react23.default.useId();
|
|
5574
5612
|
const [isDragOver, setIsDragOver] = import_react23.default.useState(false);
|
|
5575
5613
|
const inputRef = import_react23.default.useRef(null);
|
|
5576
5614
|
const handleFiles = (fileList) => {
|
|
@@ -5615,6 +5653,7 @@ var FileUpload = (props) => {
|
|
|
5615
5653
|
"input",
|
|
5616
5654
|
{
|
|
5617
5655
|
ref: inputRef,
|
|
5656
|
+
id: fieldId,
|
|
5618
5657
|
type: "file",
|
|
5619
5658
|
accept,
|
|
5620
5659
|
multiple,
|
|
@@ -5623,12 +5662,12 @@ var FileUpload = (props) => {
|
|
|
5623
5662
|
}
|
|
5624
5663
|
),
|
|
5625
5664
|
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(UploadIcon_default, {}) }),
|
|
5626
|
-
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("p", { className: "upload-label", children:
|
|
5665
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("p", { className: "upload-label", children: placeholder }),
|
|
5627
5666
|
description && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("p", { className: "upload-description", children: description })
|
|
5628
5667
|
]
|
|
5629
5668
|
}
|
|
5630
5669
|
);
|
|
5631
|
-
return /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(Field, { validations, children: control });
|
|
5670
|
+
return /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(Field, { label, required, htmlFor: fieldId, validations, children: control });
|
|
5632
5671
|
};
|
|
5633
5672
|
FileUpload.displayName = "FileUpload";
|
|
5634
5673
|
var FileUpload_default = FileUpload;
|
|
@@ -5771,7 +5810,8 @@ var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
|
5771
5810
|
var import_react26 = __toESM(require("react"), 1);
|
|
5772
5811
|
var import_jsx_runtime327 = require("react/jsx-runtime");
|
|
5773
5812
|
var ImageSelector = (props) => {
|
|
5774
|
-
const { value,
|
|
5813
|
+
const { value, placeholder, onChange, validations, label, required } = props;
|
|
5814
|
+
const fieldId = import_react26.default.useId();
|
|
5775
5815
|
const [previewUrl, setPreviewUrl] = import_react26.default.useState();
|
|
5776
5816
|
import_react26.default.useEffect(() => {
|
|
5777
5817
|
if (!value) {
|
|
@@ -5801,7 +5841,7 @@ var ImageSelector = (props) => {
|
|
|
5801
5841
|
{
|
|
5802
5842
|
type: "file",
|
|
5803
5843
|
accept: "image/*",
|
|
5804
|
-
id:
|
|
5844
|
+
id: fieldId,
|
|
5805
5845
|
onChange: handleFileChange,
|
|
5806
5846
|
ref: inputRef,
|
|
5807
5847
|
"aria-invalid": hasError(validations) || void 0
|
|
@@ -5813,10 +5853,10 @@ var ImageSelector = (props) => {
|
|
|
5813
5853
|
] }),
|
|
5814
5854
|
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "content", children: previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime327.jsx)("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
|
|
5815
5855
|
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(ImageIcon_default, {}) }),
|
|
5816
|
-
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "label", children:
|
|
5856
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "label", children: placeholder || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
5817
5857
|
] }) })
|
|
5818
5858
|
] });
|
|
5819
|
-
return /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(Field, { validations, children: control });
|
|
5859
|
+
return /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(Field, { label, required, htmlFor: fieldId, validations, children: control });
|
|
5820
5860
|
};
|
|
5821
5861
|
ImageSelector.displayName = "ImageSelector";
|
|
5822
5862
|
var ImageSelector_default = ImageSelector;
|
|
@@ -7368,9 +7408,33 @@ var ToastProvider = ({
|
|
|
7368
7408
|
};
|
|
7369
7409
|
ToastProvider.displayName = "ToastProvider";
|
|
7370
7410
|
|
|
7411
|
+
// src/components/ToggleChip/ToggleChip.tsx
|
|
7412
|
+
var import_jsx_runtime353 = require("react/jsx-runtime");
|
|
7413
|
+
var ToggleChip = (props) => {
|
|
7414
|
+
const { children, selected = false, onClick, disabled = false, size = "md" } = props;
|
|
7415
|
+
return /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
|
|
7416
|
+
"button",
|
|
7417
|
+
{
|
|
7418
|
+
type: "button",
|
|
7419
|
+
className: clsx_default(
|
|
7420
|
+
"lib-xplat-chip",
|
|
7421
|
+
"lib-xplat-toggle-chip",
|
|
7422
|
+
size,
|
|
7423
|
+
selected ? "selected" : "unselected"
|
|
7424
|
+
),
|
|
7425
|
+
"aria-pressed": selected,
|
|
7426
|
+
disabled,
|
|
7427
|
+
onClick,
|
|
7428
|
+
children
|
|
7429
|
+
}
|
|
7430
|
+
);
|
|
7431
|
+
};
|
|
7432
|
+
ToggleChip.displayName = "ToggleChip";
|
|
7433
|
+
var ToggleChip_default = ToggleChip;
|
|
7434
|
+
|
|
7371
7435
|
// src/components/Tooltip/Tooltip.tsx
|
|
7372
7436
|
var import_react42 = __toESM(require("react"), 1);
|
|
7373
|
-
var
|
|
7437
|
+
var import_jsx_runtime354 = require("react/jsx-runtime");
|
|
7374
7438
|
var OFFSET = 12;
|
|
7375
7439
|
var GAP = 8;
|
|
7376
7440
|
var SHOW_DELAY = 300;
|
|
@@ -7475,8 +7539,8 @@ var Tooltip = (props) => {
|
|
|
7475
7539
|
window.clearTimeout(delayTimer.current);
|
|
7476
7540
|
cancelAnimationFrame(rafRef.current);
|
|
7477
7541
|
}, []);
|
|
7478
|
-
if (!title && !description) return /* @__PURE__ */ (0,
|
|
7479
|
-
return /* @__PURE__ */ (0,
|
|
7542
|
+
if (!title && !description) return /* @__PURE__ */ (0, import_jsx_runtime354.jsx)(import_jsx_runtime354.Fragment, { children });
|
|
7543
|
+
return /* @__PURE__ */ (0, import_jsx_runtime354.jsxs)(
|
|
7480
7544
|
"div",
|
|
7481
7545
|
{
|
|
7482
7546
|
ref: triggerRef,
|
|
@@ -7489,7 +7553,7 @@ var Tooltip = (props) => {
|
|
|
7489
7553
|
onBlur: close,
|
|
7490
7554
|
children: [
|
|
7491
7555
|
children,
|
|
7492
|
-
visible && /* @__PURE__ */ (0,
|
|
7556
|
+
visible && /* @__PURE__ */ (0, import_jsx_runtime354.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime354.jsxs)(
|
|
7493
7557
|
"div",
|
|
7494
7558
|
{
|
|
7495
7559
|
ref: tooltipRef,
|
|
@@ -7497,8 +7561,8 @@ var Tooltip = (props) => {
|
|
|
7497
7561
|
className: clsx_default("lib-xplat-tooltip", shape),
|
|
7498
7562
|
style: { position: "fixed", left: pos.left, top: pos.top },
|
|
7499
7563
|
children: [
|
|
7500
|
-
title && /* @__PURE__ */ (0,
|
|
7501
|
-
description && /* @__PURE__ */ (0,
|
|
7564
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime354.jsx)("div", { className: "tooltip-title", children: title }),
|
|
7565
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime354.jsx)("div", { className: "tooltip-desc", children: description })
|
|
7502
7566
|
]
|
|
7503
7567
|
}
|
|
7504
7568
|
) })
|
|
@@ -7511,10 +7575,10 @@ var Tooltip_default = Tooltip;
|
|
|
7511
7575
|
|
|
7512
7576
|
// src/components/Video/Video.tsx
|
|
7513
7577
|
var import_react43 = __toESM(require("react"), 1);
|
|
7514
|
-
var
|
|
7515
|
-
var PipIcon = () => /* @__PURE__ */ (0,
|
|
7516
|
-
/* @__PURE__ */ (0,
|
|
7517
|
-
/* @__PURE__ */ (0,
|
|
7578
|
+
var import_jsx_runtime355 = require("react/jsx-runtime");
|
|
7579
|
+
var PipIcon = () => /* @__PURE__ */ (0, import_jsx_runtime355.jsxs)("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
7580
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsx)("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
7581
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsx)("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
|
|
7518
7582
|
] });
|
|
7519
7583
|
var formatTime = (sec) => {
|
|
7520
7584
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -7689,13 +7753,13 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
7689
7753
|
const volumePct = (isMuted ? 0 : volume) * 100;
|
|
7690
7754
|
const VolumeGlyph = isMuted || volume === 0 ? VolumeXIcon_default : volume < 0.5 ? VolumeIcon_default : Volume2Icon_default;
|
|
7691
7755
|
const pipSupported = typeof document !== "undefined" && "pictureInPictureEnabled" in document && document.pictureInPictureEnabled;
|
|
7692
|
-
return /* @__PURE__ */ (0,
|
|
7756
|
+
return /* @__PURE__ */ (0, import_jsx_runtime355.jsxs)(
|
|
7693
7757
|
"div",
|
|
7694
7758
|
{
|
|
7695
7759
|
ref: containerRef,
|
|
7696
7760
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
7697
7761
|
children: [
|
|
7698
|
-
/* @__PURE__ */ (0,
|
|
7762
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsx)(
|
|
7699
7763
|
"video",
|
|
7700
7764
|
{
|
|
7701
7765
|
ref: setRefs,
|
|
@@ -7716,7 +7780,7 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
7716
7780
|
children
|
|
7717
7781
|
}
|
|
7718
7782
|
),
|
|
7719
|
-
showCenterPlay && /* @__PURE__ */ (0,
|
|
7783
|
+
showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(
|
|
7720
7784
|
"button",
|
|
7721
7785
|
{
|
|
7722
7786
|
type: "button",
|
|
@@ -7728,11 +7792,11 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
7728
7792
|
onClick: togglePlay,
|
|
7729
7793
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
7730
7794
|
tabIndex: -1,
|
|
7731
|
-
children: /* @__PURE__ */ (0,
|
|
7795
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime355.jsx)("span", { className: "center-play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(PlayCircleIcon_default, {}) })
|
|
7732
7796
|
}
|
|
7733
7797
|
),
|
|
7734
|
-
showControls && /* @__PURE__ */ (0,
|
|
7735
|
-
/* @__PURE__ */ (0,
|
|
7798
|
+
showControls && /* @__PURE__ */ (0, import_jsx_runtime355.jsxs)("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
|
|
7799
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsx)(
|
|
7736
7800
|
"input",
|
|
7737
7801
|
{
|
|
7738
7802
|
type: "range",
|
|
@@ -7749,29 +7813,29 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
7749
7813
|
}
|
|
7750
7814
|
}
|
|
7751
7815
|
),
|
|
7752
|
-
/* @__PURE__ */ (0,
|
|
7753
|
-
/* @__PURE__ */ (0,
|
|
7816
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsxs)("div", { className: "controls-row", children: [
|
|
7817
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsx)(
|
|
7754
7818
|
"button",
|
|
7755
7819
|
{
|
|
7756
7820
|
type: "button",
|
|
7757
7821
|
className: "control-btn",
|
|
7758
7822
|
onClick: togglePlay,
|
|
7759
7823
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
7760
|
-
children: isPlaying ? /* @__PURE__ */ (0,
|
|
7824
|
+
children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(PlayIcon_default, {})
|
|
7761
7825
|
}
|
|
7762
7826
|
),
|
|
7763
|
-
/* @__PURE__ */ (0,
|
|
7764
|
-
/* @__PURE__ */ (0,
|
|
7827
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsxs)("div", { className: "volume-group", children: [
|
|
7828
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsx)(
|
|
7765
7829
|
"button",
|
|
7766
7830
|
{
|
|
7767
7831
|
type: "button",
|
|
7768
7832
|
className: "control-btn",
|
|
7769
7833
|
onClick: toggleMute,
|
|
7770
7834
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
7771
|
-
children: /* @__PURE__ */ (0,
|
|
7835
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(VolumeGlyph, {})
|
|
7772
7836
|
}
|
|
7773
7837
|
),
|
|
7774
|
-
/* @__PURE__ */ (0,
|
|
7838
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsx)(
|
|
7775
7839
|
"input",
|
|
7776
7840
|
{
|
|
7777
7841
|
type: "range",
|
|
@@ -7786,14 +7850,14 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
7786
7850
|
}
|
|
7787
7851
|
)
|
|
7788
7852
|
] }),
|
|
7789
|
-
/* @__PURE__ */ (0,
|
|
7853
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsxs)("span", { className: "time", children: [
|
|
7790
7854
|
formatTime(currentTime),
|
|
7791
7855
|
" / ",
|
|
7792
7856
|
formatTime(duration)
|
|
7793
7857
|
] }),
|
|
7794
|
-
/* @__PURE__ */ (0,
|
|
7795
|
-
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0,
|
|
7796
|
-
/* @__PURE__ */ (0,
|
|
7858
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsx)("div", { className: "controls-spacer" }),
|
|
7859
|
+
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime355.jsxs)("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
|
|
7860
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsxs)(
|
|
7797
7861
|
"button",
|
|
7798
7862
|
{
|
|
7799
7863
|
type: "button",
|
|
@@ -7807,7 +7871,7 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
7807
7871
|
]
|
|
7808
7872
|
}
|
|
7809
7873
|
),
|
|
7810
|
-
rateMenuOpen && /* @__PURE__ */ (0,
|
|
7874
|
+
rateMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime355.jsx)("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ (0, import_jsx_runtime355.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime355.jsxs)(
|
|
7811
7875
|
"button",
|
|
7812
7876
|
{
|
|
7813
7877
|
type: "button",
|
|
@@ -7821,7 +7885,7 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
7821
7885
|
}
|
|
7822
7886
|
) }, r2)) })
|
|
7823
7887
|
] }),
|
|
7824
|
-
showCaptions && /* @__PURE__ */ (0,
|
|
7888
|
+
showCaptions && /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(
|
|
7825
7889
|
"button",
|
|
7826
7890
|
{
|
|
7827
7891
|
type: "button",
|
|
@@ -7829,37 +7893,37 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
7829
7893
|
onClick: toggleCaptions,
|
|
7830
7894
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
7831
7895
|
"aria-pressed": captionsOn,
|
|
7832
|
-
children: /* @__PURE__ */ (0,
|
|
7896
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(TypeIcon_default, {})
|
|
7833
7897
|
}
|
|
7834
7898
|
),
|
|
7835
|
-
showPip && pipSupported && /* @__PURE__ */ (0,
|
|
7899
|
+
showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(
|
|
7836
7900
|
"button",
|
|
7837
7901
|
{
|
|
7838
7902
|
type: "button",
|
|
7839
7903
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
7840
7904
|
onClick: togglePip,
|
|
7841
7905
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
7842
|
-
children: /* @__PURE__ */ (0,
|
|
7906
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(PipIcon, {})
|
|
7843
7907
|
}
|
|
7844
7908
|
),
|
|
7845
|
-
showDownload && /* @__PURE__ */ (0,
|
|
7909
|
+
showDownload && /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(
|
|
7846
7910
|
"a",
|
|
7847
7911
|
{
|
|
7848
7912
|
className: "control-btn",
|
|
7849
7913
|
href: src,
|
|
7850
7914
|
download: downloadFileName ?? true,
|
|
7851
7915
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
7852
|
-
children: /* @__PURE__ */ (0,
|
|
7916
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(DownloadIcon_default, {})
|
|
7853
7917
|
}
|
|
7854
7918
|
),
|
|
7855
|
-
/* @__PURE__ */ (0,
|
|
7919
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsx)(
|
|
7856
7920
|
"button",
|
|
7857
7921
|
{
|
|
7858
7922
|
type: "button",
|
|
7859
7923
|
className: "control-btn",
|
|
7860
7924
|
onClick: toggleFullscreen,
|
|
7861
7925
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
7862
|
-
children: isFullscreen ? /* @__PURE__ */ (0,
|
|
7926
|
+
children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime355.jsx)(MaximizeIcon_default, {})
|
|
7863
7927
|
}
|
|
7864
7928
|
)
|
|
7865
7929
|
] })
|
|
@@ -7931,6 +7995,7 @@ var Video_default = Video;
|
|
|
7931
7995
|
TextArea,
|
|
7932
7996
|
TimePicker,
|
|
7933
7997
|
ToastProvider,
|
|
7998
|
+
ToggleChip,
|
|
7934
7999
|
Tooltip,
|
|
7935
8000
|
Video,
|
|
7936
8001
|
hasError,
|
|
@@ -3612,6 +3612,9 @@
|
|
|
3612
3612
|
color: var(--semantic-text-inverse);
|
|
3613
3613
|
border-color: var(--semantic-surface-brand-default);
|
|
3614
3614
|
}
|
|
3615
|
+
.lib-xplat-editor.readonly .lib-xplat-editor__editable ul.checklist > li::before {
|
|
3616
|
+
cursor: default;
|
|
3617
|
+
}
|
|
3615
3618
|
.lib-xplat-editor__editable .align-center {
|
|
3616
3619
|
text-align: center;
|
|
3617
3620
|
}
|
|
@@ -5803,6 +5806,43 @@
|
|
|
5803
5806
|
}
|
|
5804
5807
|
}
|
|
5805
5808
|
|
|
5809
|
+
/* src/components/ToggleChip/togglechip.scss */
|
|
5810
|
+
.lib-xplat-toggle-chip {
|
|
5811
|
+
cursor: pointer;
|
|
5812
|
+
font-family: inherit;
|
|
5813
|
+
transition:
|
|
5814
|
+
background-color 0.28s cubic-bezier(0.25, 0.46, 0.45, 0.94),
|
|
5815
|
+
border-color 0.28s cubic-bezier(0.25, 0.46, 0.45, 0.94),
|
|
5816
|
+
color 0.28s cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
|
5817
|
+
}
|
|
5818
|
+
.lib-xplat-toggle-chip.unselected {
|
|
5819
|
+
color: var(--semantic-text-secondary);
|
|
5820
|
+
background-color: var(--semantic-surface-neutral-primary);
|
|
5821
|
+
border: 1px solid var(--semantic-border-primary);
|
|
5822
|
+
}
|
|
5823
|
+
.lib-xplat-toggle-chip.unselected:hover:not(:disabled) {
|
|
5824
|
+
color: var(--semantic-text-primary);
|
|
5825
|
+
background-color: var(--semantic-surface-neutral-secondary);
|
|
5826
|
+
}
|
|
5827
|
+
.lib-xplat-toggle-chip {
|
|
5828
|
+
}
|
|
5829
|
+
.lib-xplat-toggle-chip.selected {
|
|
5830
|
+
color: var(--semantic-text-brand-primary);
|
|
5831
|
+
background-color: var(--semantic-surface-brand-subtle);
|
|
5832
|
+
border: 1px solid var(--semantic-border-brand-primary);
|
|
5833
|
+
}
|
|
5834
|
+
.lib-xplat-toggle-chip.selected:hover:not(:disabled) {
|
|
5835
|
+
background-color: var(--semantic-surface-brand-secondary);
|
|
5836
|
+
}
|
|
5837
|
+
.lib-xplat-toggle-chip:focus-visible {
|
|
5838
|
+
outline: 2px solid var(--semantic-interaction-focus-ring);
|
|
5839
|
+
outline-offset: 2px;
|
|
5840
|
+
}
|
|
5841
|
+
.lib-xplat-toggle-chip:disabled {
|
|
5842
|
+
cursor: not-allowed;
|
|
5843
|
+
opacity: 0.4;
|
|
5844
|
+
}
|
|
5845
|
+
|
|
5806
5846
|
/* src/components/Video/video.scss */
|
|
5807
5847
|
.lib-xplat-video {
|
|
5808
5848
|
position: relative;
|