@x-plat/design-system 0.8.0 → 0.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/DatePicker/index.cjs +388 -400
- package/dist/components/DatePicker/index.css +3 -0
- package/dist/components/DatePicker/index.js +375 -387
- package/dist/components/Dropdown/index.cjs +21 -26
- package/dist/components/Dropdown/index.js +20 -25
- package/dist/components/Modal/index.cjs +18 -28
- package/dist/components/Modal/index.css +3 -0
- package/dist/components/Modal/index.js +17 -27
- package/dist/components/PopOver/index.cjs +18 -23
- package/dist/components/PopOver/index.js +17 -22
- package/dist/components/Select/index.cjs +337 -342
- package/dist/components/Select/index.js +336 -341
- package/dist/components/Tooltip/index.cjs +27 -32
- package/dist/components/Tooltip/index.js +26 -31
- package/dist/components/index.cjs +467 -471
- package/dist/components/index.css +3 -0
- package/dist/components/index.js +418 -422
- package/dist/index.cjs +491 -495
- package/dist/index.css +3 -0
- package/dist/index.js +440 -444
- package/package.json +1 -1
|
@@ -2982,7 +2982,7 @@ Chip.displayName = "Chip";
|
|
|
2982
2982
|
var Chip_default = Chip;
|
|
2983
2983
|
|
|
2984
2984
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
2985
|
-
var
|
|
2985
|
+
var import_react13 = __toESM(require("react"), 1);
|
|
2986
2986
|
|
|
2987
2987
|
// src/components/Input/Input.tsx
|
|
2988
2988
|
var import_react8 = __toESM(require("react"), 1);
|
|
@@ -3173,38 +3173,26 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
3173
3173
|
var PasswordInput_default = PasswordInput;
|
|
3174
3174
|
|
|
3175
3175
|
// src/components/Modal/Modal.tsx
|
|
3176
|
-
var import_react12 = __toESM(require("react"), 1);
|
|
3177
|
-
var import_react_dom2 = require("react-dom");
|
|
3178
|
-
|
|
3179
|
-
// src/tokens/hooks/Portal.tsx
|
|
3180
3176
|
var import_react11 = __toESM(require("react"), 1);
|
|
3181
|
-
var import_react_dom =
|
|
3177
|
+
var import_react_dom = require("react-dom");
|
|
3182
3178
|
var import_jsx_runtime313 = require("react/jsx-runtime");
|
|
3183
|
-
var PortalContainerContext = import_react11.default.createContext(null);
|
|
3184
|
-
var PortalProvider = ({ container, children }) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(PortalContainerContext.Provider, { value: container, children });
|
|
3185
|
-
var Portal = ({ children }) => {
|
|
3186
|
-
const contextContainer = import_react11.default.useContext(PortalContainerContext);
|
|
3187
|
-
if (typeof document === "undefined") return null;
|
|
3188
|
-
const container = contextContainer ?? document.body;
|
|
3189
|
-
return import_react_dom.default.createPortal(children, container);
|
|
3190
|
-
};
|
|
3191
|
-
Portal.displayName = "Portal";
|
|
3192
|
-
var Portal_default = Portal;
|
|
3193
|
-
|
|
3194
|
-
// src/components/Modal/Modal.tsx
|
|
3195
|
-
var import_jsx_runtime314 = require("react/jsx-runtime");
|
|
3196
3179
|
var ANIMATION_DURATION_MS = 200;
|
|
3197
3180
|
var Modal = (props) => {
|
|
3198
3181
|
const { isOpen, onClose, children } = props;
|
|
3199
|
-
const [mounted, setMounted] =
|
|
3200
|
-
const [visible, setVisible] =
|
|
3201
|
-
const
|
|
3202
|
-
|
|
3182
|
+
const [mounted, setMounted] = import_react11.default.useState(false);
|
|
3183
|
+
const [visible, setVisible] = import_react11.default.useState(false);
|
|
3184
|
+
const [settled, setSettled] = import_react11.default.useState(false);
|
|
3185
|
+
import_react11.default.useEffect(() => {
|
|
3203
3186
|
if (isOpen) {
|
|
3204
3187
|
setMounted(true);
|
|
3205
|
-
const
|
|
3206
|
-
|
|
3188
|
+
const show = setTimeout(() => setVisible(true), 1);
|
|
3189
|
+
const settle = setTimeout(() => setSettled(true), ANIMATION_DURATION_MS + 50);
|
|
3190
|
+
return () => {
|
|
3191
|
+
clearTimeout(show);
|
|
3192
|
+
clearTimeout(settle);
|
|
3193
|
+
};
|
|
3207
3194
|
}
|
|
3195
|
+
setSettled(false);
|
|
3208
3196
|
setVisible(false);
|
|
3209
3197
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS);
|
|
3210
3198
|
return () => clearTimeout(t);
|
|
@@ -3212,21 +3200,20 @@ var Modal = (props) => {
|
|
|
3212
3200
|
if (typeof document === "undefined") return null;
|
|
3213
3201
|
if (!mounted) return null;
|
|
3214
3202
|
const stateClass = visible ? "enter" : "exit";
|
|
3215
|
-
return (0,
|
|
3216
|
-
/* @__PURE__ */ (0,
|
|
3203
|
+
return (0, import_react_dom.createPortal)(
|
|
3204
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
3217
3205
|
"div",
|
|
3218
3206
|
{
|
|
3219
3207
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
3220
3208
|
onClick: onClose,
|
|
3221
|
-
children: /* @__PURE__ */ (0,
|
|
3209
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
3222
3210
|
"div",
|
|
3223
3211
|
{
|
|
3224
|
-
|
|
3225
|
-
className: clsx_default("lib-xplat-modal", "modal-box", stateClass),
|
|
3212
|
+
className: clsx_default("lib-xplat-modal", "modal-box", stateClass, settled && "settled"),
|
|
3226
3213
|
role: "dialog",
|
|
3227
3214
|
"aria-modal": "true",
|
|
3228
3215
|
onClick: (e) => e.stopPropagation(),
|
|
3229
|
-
children
|
|
3216
|
+
children
|
|
3230
3217
|
}
|
|
3231
3218
|
)
|
|
3232
3219
|
}
|
|
@@ -3238,9 +3225,9 @@ Modal.displayName = "Modal";
|
|
|
3238
3225
|
var Modal_default = Modal;
|
|
3239
3226
|
|
|
3240
3227
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
3241
|
-
var
|
|
3242
|
-
var
|
|
3243
|
-
var DayCell2 =
|
|
3228
|
+
var import_react12 = __toESM(require("react"), 1);
|
|
3229
|
+
var import_jsx_runtime314 = require("react/jsx-runtime");
|
|
3230
|
+
var DayCell2 = import_react12.default.memo(
|
|
3244
3231
|
({
|
|
3245
3232
|
day,
|
|
3246
3233
|
disabled,
|
|
@@ -3250,7 +3237,7 @@ var DayCell2 = import_react13.default.memo(
|
|
|
3250
3237
|
isEnd,
|
|
3251
3238
|
inRange,
|
|
3252
3239
|
onSelect
|
|
3253
|
-
}) => /* @__PURE__ */ (0,
|
|
3240
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3254
3241
|
"button",
|
|
3255
3242
|
{
|
|
3256
3243
|
type: "button",
|
|
@@ -3292,26 +3279,26 @@ var SingleDatePicker = (props) => {
|
|
|
3292
3279
|
initialYear,
|
|
3293
3280
|
initialMonth
|
|
3294
3281
|
);
|
|
3295
|
-
const [pickerMode, setPickerMode] =
|
|
3296
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
3282
|
+
const [pickerMode, setPickerMode] = import_react12.default.useState("days");
|
|
3283
|
+
const [yearRangeStart, setYearRangeStart] = import_react12.default.useState(
|
|
3297
3284
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
3298
3285
|
);
|
|
3299
|
-
const minTime =
|
|
3286
|
+
const minTime = import_react12.default.useMemo(
|
|
3300
3287
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
3301
3288
|
[minDate]
|
|
3302
3289
|
);
|
|
3303
|
-
const maxTime =
|
|
3290
|
+
const maxTime = import_react12.default.useMemo(
|
|
3304
3291
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
3305
3292
|
[maxDate]
|
|
3306
3293
|
);
|
|
3307
|
-
const highlightSet =
|
|
3294
|
+
const highlightSet = import_react12.default.useMemo(() => {
|
|
3308
3295
|
const set = /* @__PURE__ */ new Set();
|
|
3309
3296
|
for (const h of highlightDates) {
|
|
3310
3297
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
3311
3298
|
}
|
|
3312
3299
|
return set;
|
|
3313
3300
|
}, [highlightDates]);
|
|
3314
|
-
const handleSelect =
|
|
3301
|
+
const handleSelect = import_react12.default.useCallback(
|
|
3315
3302
|
(date) => {
|
|
3316
3303
|
onChange?.(date);
|
|
3317
3304
|
},
|
|
@@ -3348,20 +3335,20 @@ var SingleDatePicker = (props) => {
|
|
|
3348
3335
|
const monthLabels = MONTH_LABELS[locale];
|
|
3349
3336
|
const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
|
|
3350
3337
|
const hasRange = rangeStart != null && rangeEnd != null;
|
|
3351
|
-
return /* @__PURE__ */ (0,
|
|
3338
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(
|
|
3352
3339
|
"div",
|
|
3353
3340
|
{
|
|
3354
3341
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
3355
3342
|
children: [
|
|
3356
|
-
/* @__PURE__ */ (0,
|
|
3357
|
-
/* @__PURE__ */ (0,
|
|
3358
|
-
/* @__PURE__ */ (0,
|
|
3359
|
-
/* @__PURE__ */ (0,
|
|
3343
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "datepicker-header", children: [
|
|
3344
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(ChevronLeftIcon_default, {}) }),
|
|
3345
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
3346
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(ChevronRightIcon_default, {}) })
|
|
3360
3347
|
] }),
|
|
3361
|
-
/* @__PURE__ */ (0,
|
|
3362
|
-
pickerMode === "years" && /* @__PURE__ */ (0,
|
|
3348
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "datepicker-body", children: [
|
|
3349
|
+
pickerMode === "years" && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
3363
3350
|
const y = yearRangeStart + i;
|
|
3364
|
-
return /* @__PURE__ */ (0,
|
|
3351
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3365
3352
|
"button",
|
|
3366
3353
|
{
|
|
3367
3354
|
type: "button",
|
|
@@ -3372,7 +3359,7 @@ var SingleDatePicker = (props) => {
|
|
|
3372
3359
|
y
|
|
3373
3360
|
);
|
|
3374
3361
|
}) }),
|
|
3375
|
-
pickerMode === "months" && /* @__PURE__ */ (0,
|
|
3362
|
+
pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3376
3363
|
"button",
|
|
3377
3364
|
{
|
|
3378
3365
|
type: "button",
|
|
@@ -3382,8 +3369,8 @@ var SingleDatePicker = (props) => {
|
|
|
3382
3369
|
},
|
|
3383
3370
|
i
|
|
3384
3371
|
)) }),
|
|
3385
|
-
pickerMode === "days" && /* @__PURE__ */ (0,
|
|
3386
|
-
/* @__PURE__ */ (0,
|
|
3372
|
+
pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(import_jsx_runtime314.Fragment, { children: [
|
|
3373
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3387
3374
|
"div",
|
|
3388
3375
|
{
|
|
3389
3376
|
className: clsx_default(
|
|
@@ -3395,7 +3382,7 @@ var SingleDatePicker = (props) => {
|
|
|
3395
3382
|
},
|
|
3396
3383
|
label
|
|
3397
3384
|
)) }),
|
|
3398
|
-
/* @__PURE__ */ (0,
|
|
3385
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
3399
3386
|
const t = day.date.getTime();
|
|
3400
3387
|
const disabled = t < minTime || t > maxTime;
|
|
3401
3388
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -3405,7 +3392,7 @@ var SingleDatePicker = (props) => {
|
|
|
3405
3392
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
3406
3393
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
3407
3394
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
3408
|
-
return /* @__PURE__ */ (0,
|
|
3395
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3409
3396
|
DayCell2,
|
|
3410
3397
|
{
|
|
3411
3398
|
day,
|
|
@@ -3430,7 +3417,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
3430
3417
|
var SingleDatePicker_default = SingleDatePicker;
|
|
3431
3418
|
|
|
3432
3419
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
3433
|
-
var
|
|
3420
|
+
var import_jsx_runtime315 = require("react/jsx-runtime");
|
|
3434
3421
|
var formatDate = (date) => {
|
|
3435
3422
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
3436
3423
|
const y = date.getFullYear();
|
|
@@ -3440,8 +3427,8 @@ var formatDate = (date) => {
|
|
|
3440
3427
|
};
|
|
3441
3428
|
var InputDatePicker = (props) => {
|
|
3442
3429
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
3443
|
-
const [isOpen, setIsOpen] =
|
|
3444
|
-
const [tempDate, setTempDate] =
|
|
3430
|
+
const [isOpen, setIsOpen] = import_react13.default.useState(false);
|
|
3431
|
+
const [tempDate, setTempDate] = import_react13.default.useState(value ?? /* @__PURE__ */ new Date());
|
|
3445
3432
|
const handleOpen = () => {
|
|
3446
3433
|
if (disabled) return;
|
|
3447
3434
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -3457,19 +3444,19 @@ var InputDatePicker = (props) => {
|
|
|
3457
3444
|
const handleClose = () => {
|
|
3458
3445
|
setIsOpen(false);
|
|
3459
3446
|
};
|
|
3460
|
-
return /* @__PURE__ */ (0,
|
|
3461
|
-
/* @__PURE__ */ (0,
|
|
3447
|
+
return /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
|
|
3448
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
3462
3449
|
Input_default,
|
|
3463
3450
|
{
|
|
3464
3451
|
value: formatDate(value),
|
|
3465
3452
|
placeholder,
|
|
3466
|
-
suffix: /* @__PURE__ */ (0,
|
|
3453
|
+
suffix: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(CalenderIcon_default, {}),
|
|
3467
3454
|
disabled,
|
|
3468
3455
|
readOnly: true
|
|
3469
3456
|
}
|
|
3470
3457
|
) }),
|
|
3471
|
-
/* @__PURE__ */ (0,
|
|
3472
|
-
/* @__PURE__ */ (0,
|
|
3458
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: "lib-xplat-popup-datepicker-card", children: [
|
|
3459
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
3473
3460
|
SingleDatePicker_default,
|
|
3474
3461
|
{
|
|
3475
3462
|
value: tempDate,
|
|
@@ -3479,9 +3466,9 @@ var InputDatePicker = (props) => {
|
|
|
3479
3466
|
locale
|
|
3480
3467
|
}
|
|
3481
3468
|
) }),
|
|
3482
|
-
/* @__PURE__ */ (0,
|
|
3483
|
-
/* @__PURE__ */ (0,
|
|
3484
|
-
/* @__PURE__ */ (0,
|
|
3469
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
3470
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
|
|
3471
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
3485
3472
|
] })
|
|
3486
3473
|
] }) })
|
|
3487
3474
|
] });
|
|
@@ -3490,20 +3477,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
3490
3477
|
var InputDatePicker_default = InputDatePicker;
|
|
3491
3478
|
|
|
3492
3479
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
3493
|
-
var
|
|
3480
|
+
var import_react17 = __toESM(require("react"), 1);
|
|
3494
3481
|
|
|
3495
3482
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
3496
|
-
var
|
|
3483
|
+
var import_react16 = __toESM(require("react"), 1);
|
|
3497
3484
|
|
|
3498
3485
|
// src/components/Tab/Tab.tsx
|
|
3499
|
-
var
|
|
3486
|
+
var import_react15 = __toESM(require("react"), 1);
|
|
3500
3487
|
|
|
3501
3488
|
// src/components/Tab/TabItem.tsx
|
|
3502
|
-
var
|
|
3503
|
-
var
|
|
3504
|
-
var TabItem =
|
|
3489
|
+
var import_react14 = __toESM(require("react"), 1);
|
|
3490
|
+
var import_jsx_runtime316 = require("react/jsx-runtime");
|
|
3491
|
+
var TabItem = import_react14.default.forwardRef((props, ref) => {
|
|
3505
3492
|
const { isActive: isActive2, title, onClick } = props;
|
|
3506
|
-
return /* @__PURE__ */ (0,
|
|
3493
|
+
return /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
3507
3494
|
"div",
|
|
3508
3495
|
{
|
|
3509
3496
|
ref,
|
|
@@ -3517,25 +3504,25 @@ TabItem.displayName = "TabItem";
|
|
|
3517
3504
|
var TabItem_default = TabItem;
|
|
3518
3505
|
|
|
3519
3506
|
// src/components/Tab/Tab.tsx
|
|
3520
|
-
var
|
|
3507
|
+
var import_jsx_runtime317 = require("react/jsx-runtime");
|
|
3521
3508
|
var Tab = (props) => {
|
|
3522
3509
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
3523
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
3510
|
+
const [underlineStyle, setUnderlineStyle] = import_react15.default.useState({
|
|
3524
3511
|
left: 0,
|
|
3525
3512
|
width: 0
|
|
3526
3513
|
});
|
|
3527
|
-
const itemRefs =
|
|
3514
|
+
const itemRefs = import_react15.default.useRef([]);
|
|
3528
3515
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
3529
3516
|
onChange(tabItem, tabIdx);
|
|
3530
3517
|
};
|
|
3531
|
-
|
|
3518
|
+
import_react15.default.useEffect(() => {
|
|
3532
3519
|
const el = itemRefs.current[activeIndex];
|
|
3533
3520
|
if (el) {
|
|
3534
3521
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
3535
3522
|
}
|
|
3536
3523
|
}, [activeIndex, tabs.length]);
|
|
3537
|
-
return /* @__PURE__ */ (0,
|
|
3538
|
-
tabs.map((tab, idx) => /* @__PURE__ */ (0,
|
|
3524
|
+
return /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
|
|
3525
|
+
tabs.map((tab, idx) => /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
3539
3526
|
TabItem_default,
|
|
3540
3527
|
{
|
|
3541
3528
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -3547,7 +3534,7 @@ var Tab = (props) => {
|
|
|
3547
3534
|
},
|
|
3548
3535
|
`${tab.value}_${idx}`
|
|
3549
3536
|
)),
|
|
3550
|
-
type === "toggle" && /* @__PURE__ */ (0,
|
|
3537
|
+
type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
3551
3538
|
"div",
|
|
3552
3539
|
{
|
|
3553
3540
|
className: "tab-toggle-underline",
|
|
@@ -3563,7 +3550,7 @@ Tab.displayName = "Tab";
|
|
|
3563
3550
|
var Tab_default = Tab;
|
|
3564
3551
|
|
|
3565
3552
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
3566
|
-
var
|
|
3553
|
+
var import_jsx_runtime318 = require("react/jsx-runtime");
|
|
3567
3554
|
var RangePicker = (props) => {
|
|
3568
3555
|
const {
|
|
3569
3556
|
startDate,
|
|
@@ -3573,7 +3560,7 @@ var RangePicker = (props) => {
|
|
|
3573
3560
|
maxDate,
|
|
3574
3561
|
locale = "ko"
|
|
3575
3562
|
} = props;
|
|
3576
|
-
const [activeTab, setActiveTab] =
|
|
3563
|
+
const [activeTab, setActiveTab] = import_react16.default.useState("start");
|
|
3577
3564
|
const handleStartChange = (date) => {
|
|
3578
3565
|
if (!date) return;
|
|
3579
3566
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -3586,8 +3573,8 @@ var RangePicker = (props) => {
|
|
|
3586
3573
|
};
|
|
3587
3574
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
3588
3575
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
3589
|
-
return /* @__PURE__ */ (0,
|
|
3590
|
-
/* @__PURE__ */ (0,
|
|
3576
|
+
return /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
|
|
3577
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3591
3578
|
Tab_default,
|
|
3592
3579
|
{
|
|
3593
3580
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -3600,8 +3587,8 @@ var RangePicker = (props) => {
|
|
|
3600
3587
|
size: "sm"
|
|
3601
3588
|
}
|
|
3602
3589
|
) }),
|
|
3603
|
-
/* @__PURE__ */ (0,
|
|
3604
|
-
/* @__PURE__ */ (0,
|
|
3590
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "datepicker-range-panels", children: [
|
|
3591
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3605
3592
|
SingleDatePicker_default,
|
|
3606
3593
|
{
|
|
3607
3594
|
value: startDate,
|
|
@@ -3613,7 +3600,7 @@ var RangePicker = (props) => {
|
|
|
3613
3600
|
locale
|
|
3614
3601
|
}
|
|
3615
3602
|
),
|
|
3616
|
-
/* @__PURE__ */ (0,
|
|
3603
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3617
3604
|
SingleDatePicker_default,
|
|
3618
3605
|
{
|
|
3619
3606
|
value: endDate,
|
|
@@ -3626,7 +3613,7 @@ var RangePicker = (props) => {
|
|
|
3626
3613
|
}
|
|
3627
3614
|
)
|
|
3628
3615
|
] }),
|
|
3629
|
-
/* @__PURE__ */ (0,
|
|
3616
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3630
3617
|
SingleDatePicker_default,
|
|
3631
3618
|
{
|
|
3632
3619
|
value: startDate,
|
|
@@ -3637,7 +3624,7 @@ var RangePicker = (props) => {
|
|
|
3637
3624
|
rangeEnd: endDate,
|
|
3638
3625
|
locale
|
|
3639
3626
|
}
|
|
3640
|
-
) : /* @__PURE__ */ (0,
|
|
3627
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3641
3628
|
SingleDatePicker_default,
|
|
3642
3629
|
{
|
|
3643
3630
|
value: endDate,
|
|
@@ -3655,10 +3642,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
3655
3642
|
var RangePicker_default = RangePicker;
|
|
3656
3643
|
|
|
3657
3644
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
3658
|
-
var
|
|
3645
|
+
var import_jsx_runtime319 = require("react/jsx-runtime");
|
|
3659
3646
|
var PopupPicker = (props) => {
|
|
3660
3647
|
const { component, type, locale } = props;
|
|
3661
|
-
const [isOpen, setIsOpen] =
|
|
3648
|
+
const [isOpen, setIsOpen] = import_react17.default.useState(false);
|
|
3662
3649
|
const handleClick = () => setIsOpen(true);
|
|
3663
3650
|
const handleClose = () => setIsOpen(false);
|
|
3664
3651
|
const handleSingleChange = (date) => {
|
|
@@ -3666,11 +3653,11 @@ var PopupPicker = (props) => {
|
|
|
3666
3653
|
props.onChange?.(date);
|
|
3667
3654
|
handleClose();
|
|
3668
3655
|
};
|
|
3669
|
-
return /* @__PURE__ */ (0,
|
|
3670
|
-
|
|
3671
|
-
/* @__PURE__ */ (0,
|
|
3672
|
-
/* @__PURE__ */ (0,
|
|
3673
|
-
type === "single" && /* @__PURE__ */ (0,
|
|
3656
|
+
return /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "lib-xplat-popup-datepicker", children: [
|
|
3657
|
+
import_react17.default.cloneElement(component, { onClick: handleClick }),
|
|
3658
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
|
|
3659
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "popup-datepicker-content", children: [
|
|
3660
|
+
type === "single" && /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
3674
3661
|
SingleDatePicker_default,
|
|
3675
3662
|
{
|
|
3676
3663
|
value: props.value,
|
|
@@ -3680,7 +3667,7 @@ var PopupPicker = (props) => {
|
|
|
3680
3667
|
locale
|
|
3681
3668
|
}
|
|
3682
3669
|
),
|
|
3683
|
-
type === "range" && /* @__PURE__ */ (0,
|
|
3670
|
+
type === "range" && /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
3684
3671
|
RangePicker_default,
|
|
3685
3672
|
{
|
|
3686
3673
|
startDate: props.startDate,
|
|
@@ -3692,8 +3679,8 @@ var PopupPicker = (props) => {
|
|
|
3692
3679
|
}
|
|
3693
3680
|
)
|
|
3694
3681
|
] }),
|
|
3695
|
-
/* @__PURE__ */ (0,
|
|
3696
|
-
/* @__PURE__ */ (0,
|
|
3682
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
3683
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
3697
3684
|
Button_default,
|
|
3698
3685
|
{
|
|
3699
3686
|
type: "secondary",
|
|
@@ -3701,7 +3688,7 @@ var PopupPicker = (props) => {
|
|
|
3701
3688
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
3702
3689
|
}
|
|
3703
3690
|
),
|
|
3704
|
-
/* @__PURE__ */ (0,
|
|
3691
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
3705
3692
|
] })
|
|
3706
3693
|
] }) })
|
|
3707
3694
|
] });
|
|
@@ -3710,10 +3697,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
3710
3697
|
var PopupPicker_default = PopupPicker;
|
|
3711
3698
|
|
|
3712
3699
|
// src/components/Divider/Divider.tsx
|
|
3713
|
-
var
|
|
3700
|
+
var import_jsx_runtime320 = require("react/jsx-runtime");
|
|
3714
3701
|
var Divider = (props) => {
|
|
3715
3702
|
const { orientation = "horizontal" } = props;
|
|
3716
|
-
return /* @__PURE__ */ (0,
|
|
3703
|
+
return /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
3717
3704
|
"div",
|
|
3718
3705
|
{
|
|
3719
3706
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -3726,15 +3713,15 @@ Divider.displayName = "Divider";
|
|
|
3726
3713
|
var Divider_default = Divider;
|
|
3727
3714
|
|
|
3728
3715
|
// src/components/Drawer/Drawer.tsx
|
|
3729
|
-
var
|
|
3730
|
-
var
|
|
3731
|
-
var
|
|
3716
|
+
var import_react18 = __toESM(require("react"), 1);
|
|
3717
|
+
var import_react_dom2 = require("react-dom");
|
|
3718
|
+
var import_jsx_runtime321 = require("react/jsx-runtime");
|
|
3732
3719
|
var ANIMATION_DURATION_MS2 = 250;
|
|
3733
3720
|
var Drawer = (props) => {
|
|
3734
3721
|
const { isOpen, onClose, placement = "right", size = "md", title, children } = props;
|
|
3735
|
-
const [mounted, setMounted] =
|
|
3736
|
-
const [visible, setVisible] =
|
|
3737
|
-
|
|
3722
|
+
const [mounted, setMounted] = import_react18.default.useState(false);
|
|
3723
|
+
const [visible, setVisible] = import_react18.default.useState(false);
|
|
3724
|
+
import_react18.default.useEffect(() => {
|
|
3738
3725
|
if (isOpen) {
|
|
3739
3726
|
setMounted(true);
|
|
3740
3727
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3747,13 +3734,13 @@ var Drawer = (props) => {
|
|
|
3747
3734
|
if (typeof document === "undefined") return null;
|
|
3748
3735
|
if (!mounted) return null;
|
|
3749
3736
|
const stateClass = visible ? "enter" : "exit";
|
|
3750
|
-
return (0,
|
|
3751
|
-
/* @__PURE__ */ (0,
|
|
3737
|
+
return (0, import_react_dom2.createPortal)(
|
|
3738
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
3752
3739
|
"div",
|
|
3753
3740
|
{
|
|
3754
3741
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
3755
3742
|
onClick: onClose,
|
|
3756
|
-
children: /* @__PURE__ */ (0,
|
|
3743
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)(
|
|
3757
3744
|
"div",
|
|
3758
3745
|
{
|
|
3759
3746
|
className: clsx_default("lib-xplat-drawer", placement, size, stateClass),
|
|
@@ -3761,11 +3748,11 @@ var Drawer = (props) => {
|
|
|
3761
3748
|
"aria-modal": "true",
|
|
3762
3749
|
onClick: (e) => e.stopPropagation(),
|
|
3763
3750
|
children: [
|
|
3764
|
-
title && /* @__PURE__ */ (0,
|
|
3765
|
-
/* @__PURE__ */ (0,
|
|
3766
|
-
/* @__PURE__ */ (0,
|
|
3751
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: "drawer-header", children: [
|
|
3752
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)("span", { className: "drawer-title", children: title }),
|
|
3753
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
3767
3754
|
] }),
|
|
3768
|
-
/* @__PURE__ */ (0,
|
|
3755
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)("div", { className: "drawer-body", children })
|
|
3769
3756
|
]
|
|
3770
3757
|
}
|
|
3771
3758
|
)
|
|
@@ -3778,16 +3765,25 @@ Drawer.displayName = "Drawer";
|
|
|
3778
3765
|
var Drawer_default = Drawer;
|
|
3779
3766
|
|
|
3780
3767
|
// src/components/Dropdown/Dropdown.tsx
|
|
3781
|
-
var
|
|
3768
|
+
var import_react21 = __toESM(require("react"), 1);
|
|
3769
|
+
|
|
3770
|
+
// src/tokens/hooks/Portal.tsx
|
|
3771
|
+
var import_react_dom3 = __toESM(require("react-dom"), 1);
|
|
3772
|
+
var Portal = ({ children }) => {
|
|
3773
|
+
if (typeof document === "undefined") return null;
|
|
3774
|
+
return import_react_dom3.default.createPortal(children, document.body);
|
|
3775
|
+
};
|
|
3776
|
+
Portal.displayName = "Portal";
|
|
3777
|
+
var Portal_default = Portal;
|
|
3782
3778
|
|
|
3783
3779
|
// src/tokens/hooks/useAutoPosition.ts
|
|
3784
|
-
var
|
|
3780
|
+
var import_react19 = __toESM(require("react"), 1);
|
|
3785
3781
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
3786
|
-
const [position, setPosition] =
|
|
3782
|
+
const [position, setPosition] = import_react19.default.useState({
|
|
3787
3783
|
position: {},
|
|
3788
3784
|
direction: "bottom"
|
|
3789
3785
|
});
|
|
3790
|
-
const calculatePosition =
|
|
3786
|
+
const calculatePosition = import_react19.default.useCallback(() => {
|
|
3791
3787
|
if (!triggerRef.current || !popRef.current) return;
|
|
3792
3788
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
3793
3789
|
const popW = popRef.current.offsetWidth;
|
|
@@ -3814,13 +3810,13 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3814
3810
|
direction
|
|
3815
3811
|
});
|
|
3816
3812
|
}, [triggerRef, popRef]);
|
|
3817
|
-
|
|
3813
|
+
import_react19.default.useLayoutEffect(() => {
|
|
3818
3814
|
if (!enabled) return;
|
|
3819
3815
|
calculatePosition();
|
|
3820
3816
|
const raf = requestAnimationFrame(calculatePosition);
|
|
3821
3817
|
return () => cancelAnimationFrame(raf);
|
|
3822
3818
|
}, [calculatePosition, enabled]);
|
|
3823
|
-
|
|
3819
|
+
import_react19.default.useEffect(() => {
|
|
3824
3820
|
if (!enabled || !popRef.current) return;
|
|
3825
3821
|
const observer = new ResizeObserver(() => {
|
|
3826
3822
|
calculatePosition();
|
|
@@ -3828,7 +3824,7 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3828
3824
|
observer.observe(popRef.current);
|
|
3829
3825
|
return () => observer.disconnect();
|
|
3830
3826
|
}, [calculatePosition, enabled, popRef]);
|
|
3831
|
-
|
|
3827
|
+
import_react19.default.useEffect(() => {
|
|
3832
3828
|
if (!enabled) return;
|
|
3833
3829
|
window.addEventListener("resize", calculatePosition);
|
|
3834
3830
|
window.addEventListener("scroll", calculatePosition, true);
|
|
@@ -3842,9 +3838,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3842
3838
|
var useAutoPosition_default = useAutoPosition;
|
|
3843
3839
|
|
|
3844
3840
|
// src/tokens/hooks/useClickOutside.ts
|
|
3845
|
-
var
|
|
3841
|
+
var import_react20 = __toESM(require("react"), 1);
|
|
3846
3842
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
3847
|
-
|
|
3843
|
+
import_react20.default.useEffect(() => {
|
|
3848
3844
|
if (!enabled) return;
|
|
3849
3845
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
3850
3846
|
const listener = (event) => {
|
|
@@ -3867,17 +3863,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
3867
3863
|
var useClickOutside_default = useClickOutside;
|
|
3868
3864
|
|
|
3869
3865
|
// src/components/Dropdown/Dropdown.tsx
|
|
3870
|
-
var
|
|
3866
|
+
var import_jsx_runtime322 = require("react/jsx-runtime");
|
|
3871
3867
|
var Dropdown = (props) => {
|
|
3872
3868
|
const { items, children } = props;
|
|
3873
|
-
const [isOpen, setIsOpen] =
|
|
3874
|
-
const [mounted, setMounted] =
|
|
3875
|
-
const [visible, setVisible] =
|
|
3876
|
-
const triggerRef =
|
|
3877
|
-
const menuRef =
|
|
3869
|
+
const [isOpen, setIsOpen] = import_react21.default.useState(false);
|
|
3870
|
+
const [mounted, setMounted] = import_react21.default.useState(false);
|
|
3871
|
+
const [visible, setVisible] = import_react21.default.useState(false);
|
|
3872
|
+
const triggerRef = import_react21.default.useRef(null);
|
|
3873
|
+
const menuRef = import_react21.default.useRef(null);
|
|
3878
3874
|
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
3879
3875
|
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
3880
|
-
|
|
3876
|
+
import_react21.default.useEffect(() => {
|
|
3881
3877
|
if (isOpen) {
|
|
3882
3878
|
setMounted(true);
|
|
3883
3879
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3892,8 +3888,8 @@ var Dropdown = (props) => {
|
|
|
3892
3888
|
item.onClick?.();
|
|
3893
3889
|
setIsOpen(false);
|
|
3894
3890
|
};
|
|
3895
|
-
return /* @__PURE__ */ (0,
|
|
3896
|
-
/* @__PURE__ */ (0,
|
|
3891
|
+
return /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)("div", { className: "lib-xplat-dropdown", children: [
|
|
3892
|
+
/* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
|
|
3897
3893
|
"div",
|
|
3898
3894
|
{
|
|
3899
3895
|
ref: triggerRef,
|
|
@@ -3902,14 +3898,14 @@ var Dropdown = (props) => {
|
|
|
3902
3898
|
children
|
|
3903
3899
|
}
|
|
3904
3900
|
),
|
|
3905
|
-
mounted && /* @__PURE__ */ (0,
|
|
3901
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
|
|
3906
3902
|
"div",
|
|
3907
3903
|
{
|
|
3908
3904
|
ref: menuRef,
|
|
3909
3905
|
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
3910
3906
|
style: { top: position.top, left: position.left },
|
|
3911
3907
|
role: "menu",
|
|
3912
|
-
children: items.map((item) => /* @__PURE__ */ (0,
|
|
3908
|
+
children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
|
|
3913
3909
|
"button",
|
|
3914
3910
|
{
|
|
3915
3911
|
className: clsx_default("dropdown-item", {
|
|
@@ -3931,8 +3927,8 @@ Dropdown.displayName = "Dropdown";
|
|
|
3931
3927
|
var Dropdown_default = Dropdown;
|
|
3932
3928
|
|
|
3933
3929
|
// src/components/Editor/Editor.tsx
|
|
3934
|
-
var
|
|
3935
|
-
var
|
|
3930
|
+
var import_react22 = __toESM(require("react"), 1);
|
|
3931
|
+
var import_jsx_runtime323 = require("react/jsx-runtime");
|
|
3936
3932
|
var DEFAULT_TOOLBAR = [
|
|
3937
3933
|
"bold",
|
|
3938
3934
|
"italic",
|
|
@@ -4039,21 +4035,21 @@ var Editor = (props) => {
|
|
|
4039
4035
|
onImageUpload,
|
|
4040
4036
|
minHeight = 200
|
|
4041
4037
|
} = props;
|
|
4042
|
-
const editorRef =
|
|
4043
|
-
const lastRangeRef =
|
|
4044
|
-
const composingRef =
|
|
4045
|
-
const [isFocused, setIsFocused] =
|
|
4046
|
-
const [isEmpty, setIsEmpty] =
|
|
4047
|
-
const [activeFormats, setActiveFormats] =
|
|
4048
|
-
const [slashOpen, setSlashOpen] =
|
|
4049
|
-
const [slashFilter, setSlashFilter] =
|
|
4050
|
-
const [slashIdx, setSlashIdx] =
|
|
4051
|
-
const [slashPos, setSlashPos] =
|
|
4052
|
-
const slashStartRangeRef =
|
|
4053
|
-
const [linkOpen, setLinkOpen] =
|
|
4054
|
-
const [linkValue, setLinkValue] =
|
|
4055
|
-
const [linkPos, setLinkPos] =
|
|
4056
|
-
|
|
4038
|
+
const editorRef = import_react22.default.useRef(null);
|
|
4039
|
+
const lastRangeRef = import_react22.default.useRef(null);
|
|
4040
|
+
const composingRef = import_react22.default.useRef(false);
|
|
4041
|
+
const [isFocused, setIsFocused] = import_react22.default.useState(false);
|
|
4042
|
+
const [isEmpty, setIsEmpty] = import_react22.default.useState(!value);
|
|
4043
|
+
const [activeFormats, setActiveFormats] = import_react22.default.useState(/* @__PURE__ */ new Set());
|
|
4044
|
+
const [slashOpen, setSlashOpen] = import_react22.default.useState(false);
|
|
4045
|
+
const [slashFilter, setSlashFilter] = import_react22.default.useState("");
|
|
4046
|
+
const [slashIdx, setSlashIdx] = import_react22.default.useState(0);
|
|
4047
|
+
const [slashPos, setSlashPos] = import_react22.default.useState({ top: 0, left: 0 });
|
|
4048
|
+
const slashStartRangeRef = import_react22.default.useRef(null);
|
|
4049
|
+
const [linkOpen, setLinkOpen] = import_react22.default.useState(false);
|
|
4050
|
+
const [linkValue, setLinkValue] = import_react22.default.useState("");
|
|
4051
|
+
const [linkPos, setLinkPos] = import_react22.default.useState({ top: 0, left: 0 });
|
|
4052
|
+
import_react22.default.useEffect(() => {
|
|
4057
4053
|
if (!editorRef.current) return;
|
|
4058
4054
|
if (editorRef.current.innerHTML !== value) {
|
|
4059
4055
|
editorRef.current.innerHTML = sanitizeHtml(value || "");
|
|
@@ -4167,7 +4163,7 @@ var Editor = (props) => {
|
|
|
4167
4163
|
setSlashIdx(0);
|
|
4168
4164
|
slashStartRangeRef.current = null;
|
|
4169
4165
|
};
|
|
4170
|
-
const filteredSlashItems =
|
|
4166
|
+
const filteredSlashItems = import_react22.default.useMemo(() => {
|
|
4171
4167
|
if (!slashFilter) return SLASH_ITEMS;
|
|
4172
4168
|
const f = slashFilter.toLowerCase();
|
|
4173
4169
|
return SLASH_ITEMS.filter((it) => it.label.toLowerCase().includes(f) || it.key.includes(f));
|
|
@@ -4452,8 +4448,8 @@ var Editor = (props) => {
|
|
|
4452
4448
|
break;
|
|
4453
4449
|
}
|
|
4454
4450
|
};
|
|
4455
|
-
return /* @__PURE__ */ (0,
|
|
4456
|
-
!readOnly && /* @__PURE__ */ (0,
|
|
4451
|
+
return /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)("div", { className: clsx_default("lib-xplat-editor", isFocused && "focused", readOnly && "readonly"), children: [
|
|
4452
|
+
!readOnly && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
4457
4453
|
EditorToolbar,
|
|
4458
4454
|
{
|
|
4459
4455
|
items: toolbar,
|
|
@@ -4461,9 +4457,9 @@ var Editor = (props) => {
|
|
|
4461
4457
|
onAction: onToolbarAction
|
|
4462
4458
|
}
|
|
4463
4459
|
),
|
|
4464
|
-
/* @__PURE__ */ (0,
|
|
4465
|
-
isEmpty && !isFocused && /* @__PURE__ */ (0,
|
|
4466
|
-
/* @__PURE__ */ (0,
|
|
4460
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsxs)("div", { className: "lib-xplat-editor__content", style: { minHeight }, children: [
|
|
4461
|
+
isEmpty && !isFocused && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "lib-xplat-editor__placeholder", children: placeholder }),
|
|
4462
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
4467
4463
|
"div",
|
|
4468
4464
|
{
|
|
4469
4465
|
ref: editorRef,
|
|
@@ -4482,7 +4478,7 @@ var Editor = (props) => {
|
|
|
4482
4478
|
spellCheck: true
|
|
4483
4479
|
}
|
|
4484
4480
|
),
|
|
4485
|
-
slashOpen && filteredSlashItems.length > 0 && /* @__PURE__ */ (0,
|
|
4481
|
+
slashOpen && filteredSlashItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
4486
4482
|
SlashMenu,
|
|
4487
4483
|
{
|
|
4488
4484
|
position: slashPos,
|
|
@@ -4492,7 +4488,7 @@ var Editor = (props) => {
|
|
|
4492
4488
|
onClose: closeSlashMenu
|
|
4493
4489
|
}
|
|
4494
4490
|
),
|
|
4495
|
-
linkOpen && /* @__PURE__ */ (0,
|
|
4491
|
+
linkOpen && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
4496
4492
|
LinkPopover,
|
|
4497
4493
|
{
|
|
4498
4494
|
position: linkPos,
|
|
@@ -4544,7 +4540,7 @@ var isActive = (item, active) => {
|
|
|
4544
4540
|
return active.has(item);
|
|
4545
4541
|
};
|
|
4546
4542
|
var EditorToolbar = ({ items, active, onAction }) => {
|
|
4547
|
-
return /* @__PURE__ */ (0,
|
|
4543
|
+
return /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "lib-xplat-editor__toolbar", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
4548
4544
|
"button",
|
|
4549
4545
|
{
|
|
4550
4546
|
type: "button",
|
|
@@ -4560,7 +4556,7 @@ var EditorToolbar = ({ items, active, onAction }) => {
|
|
|
4560
4556
|
)) });
|
|
4561
4557
|
};
|
|
4562
4558
|
var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
4563
|
-
|
|
4559
|
+
import_react22.default.useEffect(() => {
|
|
4564
4560
|
const handleClickOutside = (e) => {
|
|
4565
4561
|
const target = e.target;
|
|
4566
4562
|
const menu = document.querySelector(".lib-xplat-editor__slash-menu");
|
|
@@ -4569,12 +4565,12 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
4569
4565
|
window.addEventListener("mousedown", handleClickOutside);
|
|
4570
4566
|
return () => window.removeEventListener("mousedown", handleClickOutside);
|
|
4571
4567
|
}, [onClose]);
|
|
4572
|
-
return /* @__PURE__ */ (0,
|
|
4568
|
+
return /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
4573
4569
|
"div",
|
|
4574
4570
|
{
|
|
4575
4571
|
className: "lib-xplat-editor__slash-menu",
|
|
4576
4572
|
style: { top: position.top, left: position.left },
|
|
4577
|
-
children: items.map((item, i) => /* @__PURE__ */ (0,
|
|
4573
|
+
children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)(
|
|
4578
4574
|
"button",
|
|
4579
4575
|
{
|
|
4580
4576
|
type: "button",
|
|
@@ -4584,8 +4580,8 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
4584
4580
|
onSelect(item);
|
|
4585
4581
|
},
|
|
4586
4582
|
children: [
|
|
4587
|
-
/* @__PURE__ */ (0,
|
|
4588
|
-
item.hint && /* @__PURE__ */ (0,
|
|
4583
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)("span", { className: "label", children: item.label }),
|
|
4584
|
+
item.hint && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("span", { className: "hint", children: item.hint })
|
|
4589
4585
|
]
|
|
4590
4586
|
},
|
|
4591
4587
|
item.key
|
|
@@ -4594,17 +4590,17 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
4594
4590
|
);
|
|
4595
4591
|
};
|
|
4596
4592
|
var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
4597
|
-
const inputRef =
|
|
4598
|
-
|
|
4593
|
+
const inputRef = import_react22.default.useRef(null);
|
|
4594
|
+
import_react22.default.useEffect(() => {
|
|
4599
4595
|
inputRef.current?.focus();
|
|
4600
4596
|
}, []);
|
|
4601
|
-
return /* @__PURE__ */ (0,
|
|
4597
|
+
return /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)(
|
|
4602
4598
|
"div",
|
|
4603
4599
|
{
|
|
4604
4600
|
className: "lib-xplat-editor__link-popover",
|
|
4605
4601
|
style: { top: position.top, left: position.left },
|
|
4606
4602
|
children: [
|
|
4607
|
-
/* @__PURE__ */ (0,
|
|
4603
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
4608
4604
|
"input",
|
|
4609
4605
|
{
|
|
4610
4606
|
ref: inputRef,
|
|
@@ -4624,11 +4620,11 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
4624
4620
|
}
|
|
4625
4621
|
}
|
|
4626
4622
|
),
|
|
4627
|
-
/* @__PURE__ */ (0,
|
|
4623
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)("button", { type: "button", onMouseDown: (e) => {
|
|
4628
4624
|
e.preventDefault();
|
|
4629
4625
|
onConfirm();
|
|
4630
4626
|
}, children: "\uC801\uC6A9" }),
|
|
4631
|
-
/* @__PURE__ */ (0,
|
|
4627
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)("button", { type: "button", onMouseDown: (e) => {
|
|
4632
4628
|
e.preventDefault();
|
|
4633
4629
|
onClose();
|
|
4634
4630
|
}, children: "\uCDE8\uC18C" })
|
|
@@ -4638,23 +4634,23 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
4638
4634
|
};
|
|
4639
4635
|
|
|
4640
4636
|
// src/components/EmptyState/EmptyState.tsx
|
|
4641
|
-
var
|
|
4637
|
+
var import_jsx_runtime324 = require("react/jsx-runtime");
|
|
4642
4638
|
var EmptyState = (props) => {
|
|
4643
4639
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
4644
|
-
return /* @__PURE__ */ (0,
|
|
4645
|
-
icon && /* @__PURE__ */ (0,
|
|
4646
|
-
!icon && /* @__PURE__ */ (0,
|
|
4647
|
-
/* @__PURE__ */ (0,
|
|
4648
|
-
description && /* @__PURE__ */ (0,
|
|
4649
|
-
action && /* @__PURE__ */ (0,
|
|
4640
|
+
return /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)("div", { className: "lib-xplat-empty-state", children: [
|
|
4641
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "empty-icon", children: icon }),
|
|
4642
|
+
!icon && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "empty-icon", children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("path", { d: "M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" }) }) }),
|
|
4643
|
+
/* @__PURE__ */ (0, import_jsx_runtime324.jsx)("p", { className: "empty-title", children: title }),
|
|
4644
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("p", { className: "empty-description", children: description }),
|
|
4645
|
+
action && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "empty-action", children: action })
|
|
4650
4646
|
] });
|
|
4651
4647
|
};
|
|
4652
4648
|
EmptyState.displayName = "EmptyState";
|
|
4653
4649
|
var EmptyState_default = EmptyState;
|
|
4654
4650
|
|
|
4655
4651
|
// src/components/FileUpload/FileUpload.tsx
|
|
4656
|
-
var
|
|
4657
|
-
var
|
|
4652
|
+
var import_react23 = __toESM(require("react"), 1);
|
|
4653
|
+
var import_jsx_runtime325 = require("react/jsx-runtime");
|
|
4658
4654
|
var FileUpload = (props) => {
|
|
4659
4655
|
const {
|
|
4660
4656
|
accept,
|
|
@@ -4664,8 +4660,8 @@ var FileUpload = (props) => {
|
|
|
4664
4660
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
4665
4661
|
description
|
|
4666
4662
|
} = props;
|
|
4667
|
-
const [isDragOver, setIsDragOver] =
|
|
4668
|
-
const inputRef =
|
|
4663
|
+
const [isDragOver, setIsDragOver] = import_react23.default.useState(false);
|
|
4664
|
+
const inputRef = import_react23.default.useRef(null);
|
|
4669
4665
|
const handleFiles = (fileList) => {
|
|
4670
4666
|
let files = Array.from(fileList);
|
|
4671
4667
|
if (maxSize) {
|
|
@@ -4695,7 +4691,7 @@ var FileUpload = (props) => {
|
|
|
4695
4691
|
handleFiles(e.target.files);
|
|
4696
4692
|
}
|
|
4697
4693
|
};
|
|
4698
|
-
return /* @__PURE__ */ (0,
|
|
4694
|
+
return /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)(
|
|
4699
4695
|
"div",
|
|
4700
4696
|
{
|
|
4701
4697
|
className: clsx_default("lib-xplat-file-upload", { "drag-over": isDragOver }),
|
|
@@ -4704,7 +4700,7 @@ var FileUpload = (props) => {
|
|
|
4704
4700
|
onDragLeave: handleDragLeave,
|
|
4705
4701
|
onClick: () => inputRef.current?.click(),
|
|
4706
4702
|
children: [
|
|
4707
|
-
/* @__PURE__ */ (0,
|
|
4703
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
|
|
4708
4704
|
"input",
|
|
4709
4705
|
{
|
|
4710
4706
|
ref: inputRef,
|
|
@@ -4714,9 +4710,9 @@ var FileUpload = (props) => {
|
|
|
4714
4710
|
onChange: handleChange
|
|
4715
4711
|
}
|
|
4716
4712
|
),
|
|
4717
|
-
/* @__PURE__ */ (0,
|
|
4718
|
-
/* @__PURE__ */ (0,
|
|
4719
|
-
description && /* @__PURE__ */ (0,
|
|
4713
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(UploadIcon_default, {}) }),
|
|
4714
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("p", { className: "upload-label", children: label }),
|
|
4715
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("p", { className: "upload-description", children: description })
|
|
4720
4716
|
]
|
|
4721
4717
|
}
|
|
4722
4718
|
);
|
|
@@ -4725,10 +4721,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
4725
4721
|
var FileUpload_default = FileUpload;
|
|
4726
4722
|
|
|
4727
4723
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
4728
|
-
var
|
|
4724
|
+
var import_react25 = __toESM(require("react"), 1);
|
|
4729
4725
|
|
|
4730
4726
|
// src/components/HtmlTypeWriter/utils.ts
|
|
4731
|
-
var
|
|
4727
|
+
var import_react24 = __toESM(require("react"), 1);
|
|
4732
4728
|
var voidTags = /* @__PURE__ */ new Set([
|
|
4733
4729
|
"br",
|
|
4734
4730
|
"img",
|
|
@@ -4796,41 +4792,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
4796
4792
|
props[attr.name] = attr.value;
|
|
4797
4793
|
});
|
|
4798
4794
|
if (voidTags.has(tag)) {
|
|
4799
|
-
return
|
|
4795
|
+
return import_react24.default.createElement(tag, props);
|
|
4800
4796
|
}
|
|
4801
4797
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
4802
|
-
return
|
|
4798
|
+
return import_react24.default.createElement(tag, props, ...children);
|
|
4803
4799
|
};
|
|
4804
4800
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
4805
4801
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
4806
4802
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
4807
|
-
return node == null ? null :
|
|
4803
|
+
return node == null ? null : import_react24.default.createElement(import_react24.default.Fragment, { key: idx }, node);
|
|
4808
4804
|
}).filter(Boolean);
|
|
4809
4805
|
return nodes.length === 0 ? null : nodes;
|
|
4810
4806
|
};
|
|
4811
4807
|
|
|
4812
4808
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
4813
|
-
var
|
|
4809
|
+
var import_jsx_runtime326 = require("react/jsx-runtime");
|
|
4814
4810
|
var HtmlTypeWriter = ({
|
|
4815
4811
|
html,
|
|
4816
4812
|
duration = 20,
|
|
4817
4813
|
onDone,
|
|
4818
4814
|
onChange
|
|
4819
4815
|
}) => {
|
|
4820
|
-
const [typedLen, setTypedLen] =
|
|
4821
|
-
const doneCalledRef =
|
|
4822
|
-
const { doc, rangeMap, totalLength } =
|
|
4816
|
+
const [typedLen, setTypedLen] = import_react25.default.useState(0);
|
|
4817
|
+
const doneCalledRef = import_react25.default.useRef(false);
|
|
4818
|
+
const { doc, rangeMap, totalLength } = import_react25.default.useMemo(() => {
|
|
4823
4819
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
4824
4820
|
const decoded = decodeHtmlEntities(html);
|
|
4825
4821
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
4826
4822
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
4827
4823
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
4828
4824
|
}, [html]);
|
|
4829
|
-
|
|
4825
|
+
import_react25.default.useEffect(() => {
|
|
4830
4826
|
setTypedLen(0);
|
|
4831
4827
|
doneCalledRef.current = false;
|
|
4832
4828
|
}, [html]);
|
|
4833
|
-
|
|
4829
|
+
import_react25.default.useEffect(() => {
|
|
4834
4830
|
if (!totalLength) return;
|
|
4835
4831
|
if (typedLen >= totalLength) return;
|
|
4836
4832
|
const timer = window.setInterval(() => {
|
|
@@ -4838,33 +4834,33 @@ var HtmlTypeWriter = ({
|
|
|
4838
4834
|
}, duration);
|
|
4839
4835
|
return () => window.clearInterval(timer);
|
|
4840
4836
|
}, [typedLen, totalLength, duration]);
|
|
4841
|
-
|
|
4837
|
+
import_react25.default.useEffect(() => {
|
|
4842
4838
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
4843
4839
|
onChange?.();
|
|
4844
4840
|
}
|
|
4845
4841
|
}, [typedLen, totalLength, onChange]);
|
|
4846
|
-
|
|
4842
|
+
import_react25.default.useEffect(() => {
|
|
4847
4843
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
4848
4844
|
doneCalledRef.current = true;
|
|
4849
4845
|
onDone?.();
|
|
4850
4846
|
}
|
|
4851
4847
|
}, [typedLen, totalLength, onDone]);
|
|
4852
|
-
const parsed =
|
|
4848
|
+
const parsed = import_react25.default.useMemo(
|
|
4853
4849
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
4854
4850
|
[doc, typedLen, rangeMap]
|
|
4855
4851
|
);
|
|
4856
|
-
return /* @__PURE__ */ (0,
|
|
4852
|
+
return /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
4857
4853
|
};
|
|
4858
4854
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
4859
4855
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
4860
4856
|
|
|
4861
4857
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
4862
|
-
var
|
|
4863
|
-
var
|
|
4858
|
+
var import_react26 = __toESM(require("react"), 1);
|
|
4859
|
+
var import_jsx_runtime327 = require("react/jsx-runtime");
|
|
4864
4860
|
var ImageSelector = (props) => {
|
|
4865
4861
|
const { value, label, onChange } = props;
|
|
4866
|
-
const [previewUrl, setPreviewUrl] =
|
|
4867
|
-
|
|
4862
|
+
const [previewUrl, setPreviewUrl] = import_react26.default.useState();
|
|
4863
|
+
import_react26.default.useEffect(() => {
|
|
4868
4864
|
if (!value) {
|
|
4869
4865
|
setPreviewUrl(void 0);
|
|
4870
4866
|
return;
|
|
@@ -4873,7 +4869,7 @@ var ImageSelector = (props) => {
|
|
|
4873
4869
|
setPreviewUrl(url);
|
|
4874
4870
|
return () => URL.revokeObjectURL(url);
|
|
4875
4871
|
}, [value]);
|
|
4876
|
-
const inputRef =
|
|
4872
|
+
const inputRef = import_react26.default.useRef(null);
|
|
4877
4873
|
const handleFileChange = (e) => {
|
|
4878
4874
|
const selectedFile = e.target.files?.[0];
|
|
4879
4875
|
if (selectedFile) {
|
|
@@ -4886,8 +4882,8 @@ var ImageSelector = (props) => {
|
|
|
4886
4882
|
const handleOpenFileDialog = () => {
|
|
4887
4883
|
inputRef.current?.click();
|
|
4888
4884
|
};
|
|
4889
|
-
return /* @__PURE__ */ (0,
|
|
4890
|
-
/* @__PURE__ */ (0,
|
|
4885
|
+
return /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
4886
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
|
|
4891
4887
|
"input",
|
|
4892
4888
|
{
|
|
4893
4889
|
type: "file",
|
|
@@ -4897,13 +4893,13 @@ var ImageSelector = (props) => {
|
|
|
4897
4893
|
ref: inputRef
|
|
4898
4894
|
}
|
|
4899
4895
|
),
|
|
4900
|
-
value && /* @__PURE__ */ (0,
|
|
4901
|
-
/* @__PURE__ */ (0,
|
|
4902
|
-
/* @__PURE__ */ (0,
|
|
4896
|
+
value && /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("div", { className: "action-bar", children: [
|
|
4897
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(UploadIcon_default, {}) }),
|
|
4898
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(DeleteIcon_default, {}) })
|
|
4903
4899
|
] }),
|
|
4904
|
-
/* @__PURE__ */ (0,
|
|
4905
|
-
/* @__PURE__ */ (0,
|
|
4906
|
-
/* @__PURE__ */ (0,
|
|
4900
|
+
/* @__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: [
|
|
4901
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(ImageIcon_default, {}) }),
|
|
4902
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
4907
4903
|
] }) })
|
|
4908
4904
|
] });
|
|
4909
4905
|
};
|
|
@@ -4911,10 +4907,10 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
4911
4907
|
var ImageSelector_default = ImageSelector;
|
|
4912
4908
|
|
|
4913
4909
|
// src/components/Link/Link.tsx
|
|
4914
|
-
var
|
|
4910
|
+
var import_jsx_runtime328 = require("react/jsx-runtime");
|
|
4915
4911
|
var Link = (props) => {
|
|
4916
4912
|
const { children, href, underline = "always", target, rel, ...rest } = props;
|
|
4917
|
-
return /* @__PURE__ */ (0,
|
|
4913
|
+
return /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
|
|
4918
4914
|
"a",
|
|
4919
4915
|
{
|
|
4920
4916
|
className: clsx_default("lib-xplat-link", `underline-${underline}`),
|
|
@@ -4930,10 +4926,10 @@ Link.displayName = "Link";
|
|
|
4930
4926
|
var Link_default = Link;
|
|
4931
4927
|
|
|
4932
4928
|
// src/components/LinkButton/LinkButton.tsx
|
|
4933
|
-
var
|
|
4929
|
+
var import_jsx_runtime329 = require("react/jsx-runtime");
|
|
4934
4930
|
var LinkButton = (props) => {
|
|
4935
4931
|
const { children, href, type = "primary", size = "md", target, rel, ...rest } = props;
|
|
4936
|
-
return /* @__PURE__ */ (0,
|
|
4932
|
+
return /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(
|
|
4937
4933
|
"a",
|
|
4938
4934
|
{
|
|
4939
4935
|
className: clsx_default("lib-xplat-button", type, size),
|
|
@@ -4949,7 +4945,7 @@ LinkButton.displayName = "LinkButton";
|
|
|
4949
4945
|
var LinkButton_default = LinkButton;
|
|
4950
4946
|
|
|
4951
4947
|
// src/components/NotificationBadge/NotificationBadge.tsx
|
|
4952
|
-
var
|
|
4948
|
+
var import_jsx_runtime330 = require("react/jsx-runtime");
|
|
4953
4949
|
var NotificationBadge = (props) => {
|
|
4954
4950
|
const {
|
|
4955
4951
|
children,
|
|
@@ -4961,16 +4957,16 @@ var NotificationBadge = (props) => {
|
|
|
4961
4957
|
} = props;
|
|
4962
4958
|
const showBadge = dot || count !== void 0 && count > 0;
|
|
4963
4959
|
const displayCount = count !== void 0 && count > maxCount ? `${maxCount}+` : count;
|
|
4964
|
-
return /* @__PURE__ */ (0,
|
|
4960
|
+
return /* @__PURE__ */ (0, import_jsx_runtime330.jsxs)("div", { className: clsx_default("lib-xplat-notification-badge", size), children: [
|
|
4965
4961
|
children,
|
|
4966
|
-
showBadge && /* @__PURE__ */ (0,
|
|
4962
|
+
showBadge && /* @__PURE__ */ (0, import_jsx_runtime330.jsx)("span", { className: clsx_default("badge-indicator", type, { dot }), children: !dot && displayCount })
|
|
4967
4963
|
] });
|
|
4968
4964
|
};
|
|
4969
4965
|
NotificationBadge.displayName = "NotificationBadge";
|
|
4970
4966
|
var NotificationBadge_default = NotificationBadge;
|
|
4971
4967
|
|
|
4972
4968
|
// src/components/Pagination/Pagination.tsx
|
|
4973
|
-
var
|
|
4969
|
+
var import_jsx_runtime331 = require("react/jsx-runtime");
|
|
4974
4970
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
4975
4971
|
const totalNumbers = siblingCount * 2 + 5;
|
|
4976
4972
|
if (totalPages <= totalNumbers) {
|
|
@@ -5013,19 +5009,19 @@ var Pagination = (props) => {
|
|
|
5013
5009
|
onChange?.(page);
|
|
5014
5010
|
}
|
|
5015
5011
|
};
|
|
5016
|
-
return /* @__PURE__ */ (0,
|
|
5017
|
-
/* @__PURE__ */ (0,
|
|
5012
|
+
return /* @__PURE__ */ (0, import_jsx_runtime331.jsxs)("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
5013
|
+
/* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
|
|
5018
5014
|
"button",
|
|
5019
5015
|
{
|
|
5020
5016
|
className: "page-btn prev",
|
|
5021
5017
|
disabled: current <= 1,
|
|
5022
5018
|
onClick: () => handleClick(current - 1),
|
|
5023
5019
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
5024
|
-
children: /* @__PURE__ */ (0,
|
|
5020
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(ChevronLeftIcon_default, {})
|
|
5025
5021
|
}
|
|
5026
5022
|
),
|
|
5027
5023
|
pages.map(
|
|
5028
|
-
(page, i) => page === "..." ? /* @__PURE__ */ (0,
|
|
5024
|
+
(page, i) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime331.jsx)("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
|
|
5029
5025
|
"button",
|
|
5030
5026
|
{
|
|
5031
5027
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -5036,14 +5032,14 @@ var Pagination = (props) => {
|
|
|
5036
5032
|
page
|
|
5037
5033
|
)
|
|
5038
5034
|
),
|
|
5039
|
-
/* @__PURE__ */ (0,
|
|
5035
|
+
/* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
|
|
5040
5036
|
"button",
|
|
5041
5037
|
{
|
|
5042
5038
|
className: "page-btn next",
|
|
5043
5039
|
disabled: current >= totalPages,
|
|
5044
5040
|
onClick: () => handleClick(current + 1),
|
|
5045
5041
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
5046
|
-
children: /* @__PURE__ */ (0,
|
|
5042
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(ChevronRightIcon_default, {})
|
|
5047
5043
|
}
|
|
5048
5044
|
)
|
|
5049
5045
|
] });
|
|
@@ -5052,17 +5048,17 @@ Pagination.displayName = "Pagination";
|
|
|
5052
5048
|
var Pagination_default = Pagination;
|
|
5053
5049
|
|
|
5054
5050
|
// src/components/PopOver/PopOver.tsx
|
|
5055
|
-
var
|
|
5056
|
-
var
|
|
5051
|
+
var import_react27 = __toESM(require("react"), 1);
|
|
5052
|
+
var import_jsx_runtime332 = require("react/jsx-runtime");
|
|
5057
5053
|
var PopOver = (props) => {
|
|
5058
5054
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
5059
|
-
const popRef =
|
|
5060
|
-
const triggerRef =
|
|
5061
|
-
const [localOpen, setLocalOpen] =
|
|
5062
|
-
const [eventTrigger, setEventTrigger] =
|
|
5055
|
+
const popRef = import_react27.default.useRef(null);
|
|
5056
|
+
const triggerRef = import_react27.default.useRef(null);
|
|
5057
|
+
const [localOpen, setLocalOpen] = import_react27.default.useState(false);
|
|
5058
|
+
const [eventTrigger, setEventTrigger] = import_react27.default.useState(false);
|
|
5063
5059
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
5064
5060
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
5065
|
-
|
|
5061
|
+
import_react27.default.useEffect(() => {
|
|
5066
5062
|
if (isOpen) {
|
|
5067
5063
|
setLocalOpen(isOpen);
|
|
5068
5064
|
setTimeout(() => {
|
|
@@ -5075,7 +5071,7 @@ var PopOver = (props) => {
|
|
|
5075
5071
|
}, 200);
|
|
5076
5072
|
}
|
|
5077
5073
|
}, [isOpen]);
|
|
5078
|
-
return /* @__PURE__ */ (0,
|
|
5074
|
+
return /* @__PURE__ */ (0, import_jsx_runtime332.jsxs)(
|
|
5079
5075
|
"div",
|
|
5080
5076
|
{
|
|
5081
5077
|
className: "lib-xplat-pop-over",
|
|
@@ -5085,7 +5081,7 @@ var PopOver = (props) => {
|
|
|
5085
5081
|
},
|
|
5086
5082
|
children: [
|
|
5087
5083
|
children,
|
|
5088
|
-
localOpen && /* @__PURE__ */ (0,
|
|
5084
|
+
localOpen && /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
|
|
5089
5085
|
"div",
|
|
5090
5086
|
{
|
|
5091
5087
|
className: clsx_default(
|
|
@@ -5108,7 +5104,7 @@ PopOver.displayName = "PopOver";
|
|
|
5108
5104
|
var PopOver_default = PopOver;
|
|
5109
5105
|
|
|
5110
5106
|
// src/components/Progress/Progress.tsx
|
|
5111
|
-
var
|
|
5107
|
+
var import_jsx_runtime333 = require("react/jsx-runtime");
|
|
5112
5108
|
var Progress = (props) => {
|
|
5113
5109
|
const {
|
|
5114
5110
|
value,
|
|
@@ -5118,8 +5114,8 @@ var Progress = (props) => {
|
|
|
5118
5114
|
showLabel = false
|
|
5119
5115
|
} = props;
|
|
5120
5116
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
5121
|
-
return /* @__PURE__ */ (0,
|
|
5122
|
-
/* @__PURE__ */ (0,
|
|
5117
|
+
return /* @__PURE__ */ (0, import_jsx_runtime333.jsxs)("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
5118
|
+
/* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
|
|
5123
5119
|
"div",
|
|
5124
5120
|
{
|
|
5125
5121
|
className: "track",
|
|
@@ -5127,7 +5123,7 @@ var Progress = (props) => {
|
|
|
5127
5123
|
"aria-valuenow": value,
|
|
5128
5124
|
"aria-valuemin": 0,
|
|
5129
5125
|
"aria-valuemax": max,
|
|
5130
|
-
children: /* @__PURE__ */ (0,
|
|
5126
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
|
|
5131
5127
|
"div",
|
|
5132
5128
|
{
|
|
5133
5129
|
className: "bar",
|
|
@@ -5136,7 +5132,7 @@ var Progress = (props) => {
|
|
|
5136
5132
|
)
|
|
5137
5133
|
}
|
|
5138
5134
|
),
|
|
5139
|
-
showLabel && /* @__PURE__ */ (0,
|
|
5135
|
+
showLabel && /* @__PURE__ */ (0, import_jsx_runtime333.jsxs)("span", { className: "label", children: [
|
|
5140
5136
|
Math.round(percentage),
|
|
5141
5137
|
"%"
|
|
5142
5138
|
] })
|
|
@@ -5146,17 +5142,17 @@ Progress.displayName = "Progress";
|
|
|
5146
5142
|
var Progress_default = Progress;
|
|
5147
5143
|
|
|
5148
5144
|
// src/components/Radio/RadioGroupContext.tsx
|
|
5149
|
-
var
|
|
5150
|
-
var RadioGroupContext =
|
|
5145
|
+
var import_react28 = __toESM(require("react"), 1);
|
|
5146
|
+
var RadioGroupContext = import_react28.default.createContext(
|
|
5151
5147
|
null
|
|
5152
5148
|
);
|
|
5153
5149
|
var useRadioGroupContext = () => {
|
|
5154
|
-
return
|
|
5150
|
+
return import_react28.default.useContext(RadioGroupContext);
|
|
5155
5151
|
};
|
|
5156
5152
|
var RadioGroupContext_default = RadioGroupContext;
|
|
5157
5153
|
|
|
5158
5154
|
// src/components/Radio/Radio.tsx
|
|
5159
|
-
var
|
|
5155
|
+
var import_jsx_runtime334 = require("react/jsx-runtime");
|
|
5160
5156
|
var Radio = (props) => {
|
|
5161
5157
|
const {
|
|
5162
5158
|
label,
|
|
@@ -5175,7 +5171,7 @@ var Radio = (props) => {
|
|
|
5175
5171
|
value,
|
|
5176
5172
|
onChange: rest.onChange
|
|
5177
5173
|
};
|
|
5178
|
-
return /* @__PURE__ */ (0,
|
|
5174
|
+
return /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)(
|
|
5179
5175
|
"label",
|
|
5180
5176
|
{
|
|
5181
5177
|
className: clsx_default(
|
|
@@ -5186,18 +5182,18 @@ var Radio = (props) => {
|
|
|
5186
5182
|
className
|
|
5187
5183
|
),
|
|
5188
5184
|
children: [
|
|
5189
|
-
/* @__PURE__ */ (0,
|
|
5190
|
-
/* @__PURE__ */ (0,
|
|
5185
|
+
/* @__PURE__ */ (0, import_jsx_runtime334.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
5186
|
+
/* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
5191
5187
|
"div",
|
|
5192
5188
|
{
|
|
5193
5189
|
className: clsx_default(
|
|
5194
5190
|
"circle",
|
|
5195
5191
|
localChecked ? "checked" : void 0
|
|
5196
5192
|
),
|
|
5197
|
-
children: localChecked && /* @__PURE__ */ (0,
|
|
5193
|
+
children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("div", { className: "inner-circle" })
|
|
5198
5194
|
}
|
|
5199
5195
|
),
|
|
5200
|
-
label && /* @__PURE__ */ (0,
|
|
5196
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("span", { children: label })
|
|
5201
5197
|
]
|
|
5202
5198
|
}
|
|
5203
5199
|
);
|
|
@@ -5206,28 +5202,28 @@ Radio.displayName = "Radio";
|
|
|
5206
5202
|
var Radio_default = Radio;
|
|
5207
5203
|
|
|
5208
5204
|
// src/components/Radio/RadioGroup.tsx
|
|
5209
|
-
var
|
|
5205
|
+
var import_jsx_runtime335 = require("react/jsx-runtime");
|
|
5210
5206
|
var RadioGroup = (props) => {
|
|
5211
5207
|
const { children, ...rest } = props;
|
|
5212
|
-
return /* @__PURE__ */ (0,
|
|
5208
|
+
return /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(import_jsx_runtime335.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
5213
5209
|
};
|
|
5214
5210
|
RadioGroup.displayName = "RadioGroup";
|
|
5215
5211
|
var RadioGroup_default = RadioGroup;
|
|
5216
5212
|
|
|
5217
5213
|
// src/components/Select/Select.tsx
|
|
5218
|
-
var
|
|
5214
|
+
var import_react31 = __toESM(require("react"), 1);
|
|
5219
5215
|
|
|
5220
5216
|
// src/components/Select/context.ts
|
|
5221
|
-
var
|
|
5222
|
-
var SelectContext =
|
|
5217
|
+
var import_react29 = __toESM(require("react"), 1);
|
|
5218
|
+
var SelectContext = import_react29.default.createContext(null);
|
|
5223
5219
|
var context_default = SelectContext;
|
|
5224
5220
|
|
|
5225
5221
|
// src/components/Select/SelectItem.tsx
|
|
5226
|
-
var
|
|
5227
|
-
var
|
|
5222
|
+
var import_react30 = __toESM(require("react"), 1);
|
|
5223
|
+
var import_jsx_runtime336 = require("react/jsx-runtime");
|
|
5228
5224
|
var SelectItem = (props) => {
|
|
5229
5225
|
const { children, value, onClick, disabled = false } = props;
|
|
5230
|
-
const ctx =
|
|
5226
|
+
const ctx = import_react30.default.useContext(context_default);
|
|
5231
5227
|
const handleClick = (e) => {
|
|
5232
5228
|
e.preventDefault();
|
|
5233
5229
|
e.stopPropagation();
|
|
@@ -5237,7 +5233,7 @@ var SelectItem = (props) => {
|
|
|
5237
5233
|
onClick?.();
|
|
5238
5234
|
};
|
|
5239
5235
|
const isSelected = value !== void 0 ? ctx?.selectedValue === value : ctx?.selectedLabel === children;
|
|
5240
|
-
return /* @__PURE__ */ (0,
|
|
5236
|
+
return /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
5241
5237
|
"div",
|
|
5242
5238
|
{
|
|
5243
5239
|
className: clsx_default("select-item", disabled && "disabled", isSelected && "is-selected"),
|
|
@@ -5258,7 +5254,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
5258
5254
|
var SelectItem_default = SelectItem;
|
|
5259
5255
|
|
|
5260
5256
|
// src/components/Select/Select.tsx
|
|
5261
|
-
var
|
|
5257
|
+
var import_jsx_runtime337 = require("react/jsx-runtime");
|
|
5262
5258
|
var ANIMATION_DURATION_MS3 = 200;
|
|
5263
5259
|
var SelectRoot = (props) => {
|
|
5264
5260
|
const {
|
|
@@ -5270,28 +5266,28 @@ var SelectRoot = (props) => {
|
|
|
5270
5266
|
error = false,
|
|
5271
5267
|
size = "md"
|
|
5272
5268
|
} = props;
|
|
5273
|
-
const itemChildren =
|
|
5274
|
-
(child) =>
|
|
5269
|
+
const itemChildren = import_react31.default.Children.toArray(children).filter(
|
|
5270
|
+
(child) => import_react31.default.isValidElement(child) && child.type === SelectItem_default
|
|
5275
5271
|
);
|
|
5276
5272
|
const isControlled = valueProp !== void 0;
|
|
5277
|
-
const [isOpen, setOpen] =
|
|
5278
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
5279
|
-
const [uncontrolledValue, setUncontrolledValue] =
|
|
5280
|
-
const controlledLabel =
|
|
5273
|
+
const [isOpen, setOpen] = import_react31.default.useState(false);
|
|
5274
|
+
const [uncontrolledLabel, setUncontrolledLabel] = import_react31.default.useState(null);
|
|
5275
|
+
const [uncontrolledValue, setUncontrolledValue] = import_react31.default.useState(void 0);
|
|
5276
|
+
const controlledLabel = import_react31.default.useMemo(() => {
|
|
5281
5277
|
if (!isControlled) return null;
|
|
5282
5278
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
5283
5279
|
return match ? match.props.children : null;
|
|
5284
5280
|
}, [isControlled, valueProp, itemChildren]);
|
|
5285
5281
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
5286
5282
|
const selectedValue = isControlled ? valueProp : uncontrolledValue;
|
|
5287
|
-
const triggerRef =
|
|
5288
|
-
const contentRef =
|
|
5289
|
-
const [mounted, setMounted] =
|
|
5290
|
-
const [visible, setVisible] =
|
|
5291
|
-
|
|
5283
|
+
const triggerRef = import_react31.default.useRef(null);
|
|
5284
|
+
const contentRef = import_react31.default.useRef(null);
|
|
5285
|
+
const [mounted, setMounted] = import_react31.default.useState(false);
|
|
5286
|
+
const [visible, setVisible] = import_react31.default.useState(false);
|
|
5287
|
+
import_react31.default.useEffect(() => {
|
|
5292
5288
|
if (disabled && isOpen) setOpen(false);
|
|
5293
5289
|
}, [disabled, isOpen]);
|
|
5294
|
-
|
|
5290
|
+
import_react31.default.useEffect(() => {
|
|
5295
5291
|
if (isOpen) {
|
|
5296
5292
|
setMounted(true);
|
|
5297
5293
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -5301,12 +5297,12 @@ var SelectRoot = (props) => {
|
|
|
5301
5297
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
5302
5298
|
return () => clearTimeout(t);
|
|
5303
5299
|
}, [isOpen]);
|
|
5304
|
-
const open =
|
|
5305
|
-
const close =
|
|
5306
|
-
const toggle =
|
|
5300
|
+
const open = import_react31.default.useCallback(() => setOpen(true), []);
|
|
5301
|
+
const close = import_react31.default.useCallback(() => setOpen(false), []);
|
|
5302
|
+
const toggle = import_react31.default.useCallback(() => setOpen((prev) => !prev), []);
|
|
5307
5303
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
5308
5304
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
5309
|
-
const setSelected =
|
|
5305
|
+
const setSelected = import_react31.default.useCallback(
|
|
5310
5306
|
(label, itemValue) => {
|
|
5311
5307
|
if (!isControlled) {
|
|
5312
5308
|
setUncontrolledLabel(label);
|
|
@@ -5316,7 +5312,7 @@ var SelectRoot = (props) => {
|
|
|
5316
5312
|
},
|
|
5317
5313
|
[isControlled, onChange]
|
|
5318
5314
|
);
|
|
5319
|
-
const ctxValue =
|
|
5315
|
+
const ctxValue = import_react31.default.useMemo(
|
|
5320
5316
|
() => ({
|
|
5321
5317
|
isOpen,
|
|
5322
5318
|
mounted,
|
|
@@ -5338,7 +5334,7 @@ var SelectRoot = (props) => {
|
|
|
5338
5334
|
if (disabled) return;
|
|
5339
5335
|
toggle();
|
|
5340
5336
|
};
|
|
5341
|
-
return /* @__PURE__ */ (0,
|
|
5337
|
+
return /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime337.jsxs)(
|
|
5342
5338
|
"div",
|
|
5343
5339
|
{
|
|
5344
5340
|
className: clsx_default(
|
|
@@ -5349,7 +5345,7 @@ var SelectRoot = (props) => {
|
|
|
5349
5345
|
mounted && "is-open"
|
|
5350
5346
|
),
|
|
5351
5347
|
children: [
|
|
5352
|
-
/* @__PURE__ */ (0,
|
|
5348
|
+
/* @__PURE__ */ (0, import_jsx_runtime337.jsxs)(
|
|
5353
5349
|
"div",
|
|
5354
5350
|
{
|
|
5355
5351
|
ref: triggerRef,
|
|
@@ -5373,7 +5369,7 @@ var SelectRoot = (props) => {
|
|
|
5373
5369
|
}
|
|
5374
5370
|
},
|
|
5375
5371
|
children: [
|
|
5376
|
-
/* @__PURE__ */ (0,
|
|
5372
|
+
/* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
|
|
5377
5373
|
"span",
|
|
5378
5374
|
{
|
|
5379
5375
|
className: clsx_default(
|
|
@@ -5383,25 +5379,25 @@ var SelectRoot = (props) => {
|
|
|
5383
5379
|
children: selectedLabel ?? placeholder
|
|
5384
5380
|
}
|
|
5385
5381
|
),
|
|
5386
|
-
/* @__PURE__ */ (0,
|
|
5382
|
+
/* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
|
|
5387
5383
|
"span",
|
|
5388
5384
|
{
|
|
5389
5385
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
5390
5386
|
"aria-hidden": true,
|
|
5391
|
-
children: /* @__PURE__ */ (0,
|
|
5387
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(ChevronDownIcon_default, {})
|
|
5392
5388
|
}
|
|
5393
5389
|
)
|
|
5394
5390
|
]
|
|
5395
5391
|
}
|
|
5396
5392
|
),
|
|
5397
|
-
mounted && /* @__PURE__ */ (0,
|
|
5393
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
|
|
5398
5394
|
"div",
|
|
5399
5395
|
{
|
|
5400
5396
|
className: clsx_default("lib-xplat-select-content", size, position.direction, stateClass),
|
|
5401
5397
|
ref: contentRef,
|
|
5402
5398
|
style: { ...position.position, width: triggerRef.current?.offsetWidth },
|
|
5403
5399
|
role: "listbox",
|
|
5404
|
-
children: /* @__PURE__ */ (0,
|
|
5400
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
5405
5401
|
}
|
|
5406
5402
|
) })
|
|
5407
5403
|
]
|
|
@@ -5415,7 +5411,7 @@ var Select = Object.assign(SelectRoot, {
|
|
|
5415
5411
|
var Select_default = Select;
|
|
5416
5412
|
|
|
5417
5413
|
// src/components/Skeleton/Skeleton.tsx
|
|
5418
|
-
var
|
|
5414
|
+
var import_jsx_runtime338 = require("react/jsx-runtime");
|
|
5419
5415
|
var SIZE_MAP = {
|
|
5420
5416
|
xs: "var(--spacing-space-1)",
|
|
5421
5417
|
sm: "var(--spacing-space-2)",
|
|
@@ -5431,7 +5427,7 @@ var Skeleton = (props) => {
|
|
|
5431
5427
|
...width != null && { width: SIZE_MAP[width] },
|
|
5432
5428
|
...height != null && { height: SIZE_MAP[height] }
|
|
5433
5429
|
};
|
|
5434
|
-
return /* @__PURE__ */ (0,
|
|
5430
|
+
return /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
5435
5431
|
"div",
|
|
5436
5432
|
{
|
|
5437
5433
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -5444,20 +5440,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
5444
5440
|
var Skeleton_default = Skeleton;
|
|
5445
5441
|
|
|
5446
5442
|
// src/components/Spinner/Spinner.tsx
|
|
5447
|
-
var
|
|
5443
|
+
var import_jsx_runtime339 = require("react/jsx-runtime");
|
|
5448
5444
|
var Spinner = (props) => {
|
|
5449
5445
|
const {
|
|
5450
5446
|
size = "md",
|
|
5451
5447
|
type = "brand"
|
|
5452
5448
|
} = props;
|
|
5453
|
-
return /* @__PURE__ */ (0,
|
|
5449
|
+
return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)(
|
|
5454
5450
|
"div",
|
|
5455
5451
|
{
|
|
5456
5452
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
5457
5453
|
role: "status",
|
|
5458
5454
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
5459
|
-
children: /* @__PURE__ */ (0,
|
|
5460
|
-
/* @__PURE__ */ (0,
|
|
5455
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime339.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
5456
|
+
/* @__PURE__ */ (0, import_jsx_runtime339.jsx)(
|
|
5461
5457
|
"circle",
|
|
5462
5458
|
{
|
|
5463
5459
|
className: "track",
|
|
@@ -5467,7 +5463,7 @@ var Spinner = (props) => {
|
|
|
5467
5463
|
strokeWidth: "3"
|
|
5468
5464
|
}
|
|
5469
5465
|
),
|
|
5470
|
-
/* @__PURE__ */ (0,
|
|
5466
|
+
/* @__PURE__ */ (0, import_jsx_runtime339.jsx)(
|
|
5471
5467
|
"circle",
|
|
5472
5468
|
{
|
|
5473
5469
|
className: "indicator",
|
|
@@ -5486,20 +5482,20 @@ Spinner.displayName = "Spinner";
|
|
|
5486
5482
|
var Spinner_default = Spinner;
|
|
5487
5483
|
|
|
5488
5484
|
// src/components/Steps/Steps.tsx
|
|
5489
|
-
var
|
|
5485
|
+
var import_jsx_runtime340 = require("react/jsx-runtime");
|
|
5490
5486
|
var Steps = (props) => {
|
|
5491
5487
|
const {
|
|
5492
5488
|
items,
|
|
5493
5489
|
current,
|
|
5494
5490
|
type = "brand"
|
|
5495
5491
|
} = props;
|
|
5496
|
-
return /* @__PURE__ */ (0,
|
|
5492
|
+
return /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
5497
5493
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
5498
|
-
return /* @__PURE__ */ (0,
|
|
5499
|
-
/* @__PURE__ */ (0,
|
|
5500
|
-
/* @__PURE__ */ (0,
|
|
5501
|
-
/* @__PURE__ */ (0,
|
|
5502
|
-
item.description && /* @__PURE__ */ (0,
|
|
5494
|
+
return /* @__PURE__ */ (0, import_jsx_runtime340.jsxs)("div", { className: clsx_default("step-item", status), children: [
|
|
5495
|
+
/* @__PURE__ */ (0, import_jsx_runtime340.jsx)("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(CheckIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("span", { children: index + 1 }) }),
|
|
5496
|
+
/* @__PURE__ */ (0, import_jsx_runtime340.jsxs)("div", { className: "step-content", children: [
|
|
5497
|
+
/* @__PURE__ */ (0, import_jsx_runtime340.jsx)("span", { className: "step-title", children: item.title }),
|
|
5498
|
+
item.description && /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("span", { className: "step-description", children: item.description })
|
|
5503
5499
|
] })
|
|
5504
5500
|
] }, index);
|
|
5505
5501
|
}) });
|
|
@@ -5508,8 +5504,8 @@ Steps.displayName = "Steps";
|
|
|
5508
5504
|
var Steps_default = Steps;
|
|
5509
5505
|
|
|
5510
5506
|
// src/components/Swiper/Swiper.tsx
|
|
5511
|
-
var
|
|
5512
|
-
var
|
|
5507
|
+
var import_react32 = __toESM(require("react"), 1);
|
|
5508
|
+
var import_jsx_runtime341 = require("react/jsx-runtime");
|
|
5513
5509
|
var Swiper = (props) => {
|
|
5514
5510
|
const {
|
|
5515
5511
|
auto = false,
|
|
@@ -5533,26 +5529,26 @@ var Swiper = (props) => {
|
|
|
5533
5529
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
5534
5530
|
const useLoop = loop && canSlide;
|
|
5535
5531
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
5536
|
-
const extendedItems =
|
|
5532
|
+
const extendedItems = import_react32.default.useMemo(() => {
|
|
5537
5533
|
if (!useLoop) return items;
|
|
5538
5534
|
return [...items, ...items, ...items];
|
|
5539
5535
|
}, [items, useLoop]);
|
|
5540
5536
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
5541
|
-
const [innerIndex, setInnerIndex] =
|
|
5537
|
+
const [innerIndex, setInnerIndex] = import_react32.default.useState(
|
|
5542
5538
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
5543
5539
|
);
|
|
5544
|
-
const [isDragging, setIsDragging] =
|
|
5545
|
-
const [dragOffset, setDragOffset] =
|
|
5546
|
-
const [animated, setAnimated] =
|
|
5547
|
-
const [containerWidth, setContainerWidth] =
|
|
5548
|
-
const containerRef =
|
|
5549
|
-
const startXRef =
|
|
5550
|
-
const startTimeRef =
|
|
5551
|
-
const autoplayTimerRef =
|
|
5552
|
-
const resumeTimeoutRef =
|
|
5553
|
-
const [paused, setPaused] =
|
|
5554
|
-
const initializedRef =
|
|
5555
|
-
|
|
5540
|
+
const [isDragging, setIsDragging] = import_react32.default.useState(false);
|
|
5541
|
+
const [dragOffset, setDragOffset] = import_react32.default.useState(0);
|
|
5542
|
+
const [animated, setAnimated] = import_react32.default.useState(false);
|
|
5543
|
+
const [containerWidth, setContainerWidth] = import_react32.default.useState(0);
|
|
5544
|
+
const containerRef = import_react32.default.useRef(null);
|
|
5545
|
+
const startXRef = import_react32.default.useRef(0);
|
|
5546
|
+
const startTimeRef = import_react32.default.useRef(0);
|
|
5547
|
+
const autoplayTimerRef = import_react32.default.useRef(null);
|
|
5548
|
+
const resumeTimeoutRef = import_react32.default.useRef(null);
|
|
5549
|
+
const [paused, setPaused] = import_react32.default.useState(false);
|
|
5550
|
+
const initializedRef = import_react32.default.useRef(false);
|
|
5551
|
+
import_react32.default.useEffect(() => {
|
|
5556
5552
|
const el = containerRef.current;
|
|
5557
5553
|
if (!el) return;
|
|
5558
5554
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -5575,7 +5571,7 @@ var Swiper = (props) => {
|
|
|
5575
5571
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
5576
5572
|
};
|
|
5577
5573
|
const realIndex = getRealIndex(innerIndex);
|
|
5578
|
-
const moveToInner =
|
|
5574
|
+
const moveToInner = import_react32.default.useCallback(
|
|
5579
5575
|
(idx, withAnim = true) => {
|
|
5580
5576
|
if (!useLoop) {
|
|
5581
5577
|
setAnimated(withAnim);
|
|
@@ -5603,7 +5599,7 @@ var Swiper = (props) => {
|
|
|
5603
5599
|
},
|
|
5604
5600
|
[useLoop, cloneCount, totalSlides]
|
|
5605
5601
|
);
|
|
5606
|
-
const handleTransitionEnd =
|
|
5602
|
+
const handleTransitionEnd = import_react32.default.useCallback(() => {
|
|
5607
5603
|
if (!useLoop) return;
|
|
5608
5604
|
const real = getRealIndex(innerIndex);
|
|
5609
5605
|
const canonical = cloneCount + real;
|
|
@@ -5613,7 +5609,7 @@ var Swiper = (props) => {
|
|
|
5613
5609
|
}
|
|
5614
5610
|
onChange?.(Math.min(real, maxIndex));
|
|
5615
5611
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
5616
|
-
const slideTo =
|
|
5612
|
+
const slideTo = import_react32.default.useCallback(
|
|
5617
5613
|
(logicalIndex) => {
|
|
5618
5614
|
if (!canSlide) return;
|
|
5619
5615
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -5623,7 +5619,7 @@ var Swiper = (props) => {
|
|
|
5623
5619
|
},
|
|
5624
5620
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
5625
5621
|
);
|
|
5626
|
-
const slideNext =
|
|
5622
|
+
const slideNext = import_react32.default.useCallback(() => {
|
|
5627
5623
|
if (!canSlide) return;
|
|
5628
5624
|
const nextInner = innerIndex + slideBy;
|
|
5629
5625
|
if (useLoop) {
|
|
@@ -5632,7 +5628,7 @@ var Swiper = (props) => {
|
|
|
5632
5628
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
5633
5629
|
}
|
|
5634
5630
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
5635
|
-
const slidePrev =
|
|
5631
|
+
const slidePrev = import_react32.default.useCallback(() => {
|
|
5636
5632
|
if (!canSlide) return;
|
|
5637
5633
|
const prevInner = innerIndex - slideBy;
|
|
5638
5634
|
if (useLoop) {
|
|
@@ -5641,7 +5637,7 @@ var Swiper = (props) => {
|
|
|
5641
5637
|
moveToInner(Math.max(prevInner, 0), true);
|
|
5642
5638
|
}
|
|
5643
5639
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
5644
|
-
|
|
5640
|
+
import_react32.default.useEffect(() => {
|
|
5645
5641
|
if (indexProp === void 0) return;
|
|
5646
5642
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
5647
5643
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -5649,12 +5645,12 @@ var Swiper = (props) => {
|
|
|
5649
5645
|
moveToInner(target, true);
|
|
5650
5646
|
}
|
|
5651
5647
|
}, [indexProp]);
|
|
5652
|
-
|
|
5648
|
+
import_react32.default.useImperativeHandle(swiperRef, () => ({
|
|
5653
5649
|
slidePrev,
|
|
5654
5650
|
slideNext,
|
|
5655
5651
|
slideTo
|
|
5656
5652
|
}));
|
|
5657
|
-
|
|
5653
|
+
import_react32.default.useEffect(() => {
|
|
5658
5654
|
if (!auto || !canSlide || paused) return;
|
|
5659
5655
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
5660
5656
|
return () => {
|
|
@@ -5680,7 +5676,7 @@ var Swiper = (props) => {
|
|
|
5680
5676
|
resumeTimeoutRef.current = null;
|
|
5681
5677
|
}, pauseOnInteraction);
|
|
5682
5678
|
};
|
|
5683
|
-
|
|
5679
|
+
import_react32.default.useEffect(() => {
|
|
5684
5680
|
return () => {
|
|
5685
5681
|
if (resumeTimeoutRef.current) clearTimeout(resumeTimeoutRef.current);
|
|
5686
5682
|
};
|
|
@@ -5698,7 +5694,7 @@ var Swiper = (props) => {
|
|
|
5698
5694
|
startXRef.current = getClientX(e);
|
|
5699
5695
|
startTimeRef.current = Date.now();
|
|
5700
5696
|
};
|
|
5701
|
-
|
|
5697
|
+
import_react32.default.useEffect(() => {
|
|
5702
5698
|
if (!isDragging) return;
|
|
5703
5699
|
const handleMove = (e) => {
|
|
5704
5700
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -5737,8 +5733,8 @@ var Swiper = (props) => {
|
|
|
5737
5733
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
5738
5734
|
const slideWidthPercent = 100 / viewItemCount;
|
|
5739
5735
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
5740
|
-
const slideElements =
|
|
5741
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0,
|
|
5736
|
+
const slideElements = import_react32.default.useMemo(
|
|
5737
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
|
|
5742
5738
|
"div",
|
|
5743
5739
|
{
|
|
5744
5740
|
className: "lib-xplat-swiper__slide",
|
|
@@ -5757,15 +5753,15 @@ var Swiper = (props) => {
|
|
|
5757
5753
|
Math.floor(realIndex / slideBy),
|
|
5758
5754
|
totalSteps - 1
|
|
5759
5755
|
);
|
|
5760
|
-
return /* @__PURE__ */ (0,
|
|
5761
|
-
/* @__PURE__ */ (0,
|
|
5756
|
+
return /* @__PURE__ */ (0, import_jsx_runtime341.jsxs)("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
5757
|
+
/* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
|
|
5762
5758
|
"div",
|
|
5763
5759
|
{
|
|
5764
5760
|
className: "lib-xplat-swiper__viewport",
|
|
5765
5761
|
onMouseDown: handleDragStart,
|
|
5766
5762
|
onTouchStart: handleDragStart,
|
|
5767
5763
|
onDragStart: (e) => e.preventDefault(),
|
|
5768
|
-
children: /* @__PURE__ */ (0,
|
|
5764
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
|
|
5769
5765
|
"div",
|
|
5770
5766
|
{
|
|
5771
5767
|
className: clsx_default(
|
|
@@ -5783,7 +5779,7 @@ var Swiper = (props) => {
|
|
|
5783
5779
|
)
|
|
5784
5780
|
}
|
|
5785
5781
|
),
|
|
5786
|
-
showProgress && canSlide && /* @__PURE__ */ (0,
|
|
5782
|
+
showProgress && canSlide && /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
|
|
5787
5783
|
"span",
|
|
5788
5784
|
{
|
|
5789
5785
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -5793,7 +5789,7 @@ var Swiper = (props) => {
|
|
|
5793
5789
|
}
|
|
5794
5790
|
}
|
|
5795
5791
|
) }) }),
|
|
5796
|
-
canSlide && /* @__PURE__ */ (0,
|
|
5792
|
+
canSlide && /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
|
|
5797
5793
|
"button",
|
|
5798
5794
|
{
|
|
5799
5795
|
className: clsx_default(
|
|
@@ -5811,8 +5807,8 @@ Swiper.displayName = "Swiper";
|
|
|
5811
5807
|
var Swiper_default = Swiper;
|
|
5812
5808
|
|
|
5813
5809
|
// src/components/Switch/Switch.tsx
|
|
5814
|
-
var
|
|
5815
|
-
var
|
|
5810
|
+
var import_react33 = __toESM(require("react"), 1);
|
|
5811
|
+
var import_jsx_runtime342 = require("react/jsx-runtime");
|
|
5816
5812
|
var KNOB_TRANSITION_MS = 250;
|
|
5817
5813
|
var Switch = (props) => {
|
|
5818
5814
|
const {
|
|
@@ -5822,9 +5818,9 @@ var Switch = (props) => {
|
|
|
5822
5818
|
disabled,
|
|
5823
5819
|
onChange
|
|
5824
5820
|
} = props;
|
|
5825
|
-
const [isAnimating, setIsAnimating] =
|
|
5826
|
-
const timeoutRef =
|
|
5827
|
-
|
|
5821
|
+
const [isAnimating, setIsAnimating] = import_react33.default.useState(false);
|
|
5822
|
+
const timeoutRef = import_react33.default.useRef(null);
|
|
5823
|
+
import_react33.default.useEffect(() => {
|
|
5828
5824
|
return () => {
|
|
5829
5825
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
5830
5826
|
};
|
|
@@ -5839,7 +5835,7 @@ var Switch = (props) => {
|
|
|
5839
5835
|
timeoutRef.current = null;
|
|
5840
5836
|
}, KNOB_TRANSITION_MS);
|
|
5841
5837
|
};
|
|
5842
|
-
return /* @__PURE__ */ (0,
|
|
5838
|
+
return /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
|
|
5843
5839
|
"div",
|
|
5844
5840
|
{
|
|
5845
5841
|
className: clsx_default(
|
|
@@ -5852,7 +5848,7 @@ var Switch = (props) => {
|
|
|
5852
5848
|
),
|
|
5853
5849
|
onClick: handleClick,
|
|
5854
5850
|
"aria-disabled": disabled || isAnimating,
|
|
5855
|
-
children: /* @__PURE__ */ (0,
|
|
5851
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
5856
5852
|
}
|
|
5857
5853
|
);
|
|
5858
5854
|
};
|
|
@@ -5860,17 +5856,17 @@ Switch.displayName = "Switch";
|
|
|
5860
5856
|
var Switch_default = Switch;
|
|
5861
5857
|
|
|
5862
5858
|
// src/components/Table/TableContext.tsx
|
|
5863
|
-
var
|
|
5864
|
-
var TableContext =
|
|
5859
|
+
var import_react34 = __toESM(require("react"), 1);
|
|
5860
|
+
var TableContext = import_react34.default.createContext(null);
|
|
5865
5861
|
var useTableContext = () => {
|
|
5866
|
-
const ctx =
|
|
5862
|
+
const ctx = import_react34.default.useContext(TableContext);
|
|
5867
5863
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
5868
5864
|
return ctx;
|
|
5869
5865
|
};
|
|
5870
5866
|
var TableContext_default = TableContext;
|
|
5871
5867
|
|
|
5872
5868
|
// src/components/Table/Table.tsx
|
|
5873
|
-
var
|
|
5869
|
+
var import_jsx_runtime343 = require("react/jsx-runtime");
|
|
5874
5870
|
var Table = (props) => {
|
|
5875
5871
|
const {
|
|
5876
5872
|
children,
|
|
@@ -5880,7 +5876,7 @@ var Table = (props) => {
|
|
|
5880
5876
|
headerSticky = false,
|
|
5881
5877
|
stickyShadow = true
|
|
5882
5878
|
} = props;
|
|
5883
|
-
return /* @__PURE__ */ (0,
|
|
5879
|
+
return /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("div", { className: `lib-xplat-table-wrapper ${size}`, children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)(
|
|
5884
5880
|
TableContext_default.Provider,
|
|
5885
5881
|
{
|
|
5886
5882
|
value: {
|
|
@@ -5889,7 +5885,7 @@ var Table = (props) => {
|
|
|
5889
5885
|
headerSticky,
|
|
5890
5886
|
stickyShadow
|
|
5891
5887
|
},
|
|
5892
|
-
children: /* @__PURE__ */ (0,
|
|
5888
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("table", { className: "lib-xplat-table", children })
|
|
5893
5889
|
}
|
|
5894
5890
|
) });
|
|
5895
5891
|
};
|
|
@@ -5897,41 +5893,41 @@ Table.displayName = "Table";
|
|
|
5897
5893
|
var Table_default = Table;
|
|
5898
5894
|
|
|
5899
5895
|
// src/components/Table/TableBody.tsx
|
|
5900
|
-
var
|
|
5896
|
+
var import_jsx_runtime344 = require("react/jsx-runtime");
|
|
5901
5897
|
var TableBody = (props) => {
|
|
5902
5898
|
const { children } = props;
|
|
5903
|
-
return /* @__PURE__ */ (0,
|
|
5899
|
+
return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("tbody", { children });
|
|
5904
5900
|
};
|
|
5905
5901
|
TableBody.displayName = "TableBody";
|
|
5906
5902
|
var TableBody_default = TableBody;
|
|
5907
5903
|
|
|
5908
5904
|
// src/components/Table/TableCell.tsx
|
|
5909
|
-
var
|
|
5905
|
+
var import_react37 = __toESM(require("react"), 1);
|
|
5910
5906
|
|
|
5911
5907
|
// src/components/Table/TableHeadContext.tsx
|
|
5912
|
-
var
|
|
5913
|
-
var TableHeadContext =
|
|
5908
|
+
var import_react35 = __toESM(require("react"), 1);
|
|
5909
|
+
var TableHeadContext = import_react35.default.createContext(
|
|
5914
5910
|
null
|
|
5915
5911
|
);
|
|
5916
5912
|
var useTableHeadContext = () => {
|
|
5917
|
-
const ctx =
|
|
5913
|
+
const ctx = import_react35.default.useContext(TableHeadContext);
|
|
5918
5914
|
return ctx;
|
|
5919
5915
|
};
|
|
5920
5916
|
var TableHeadContext_default = TableHeadContext;
|
|
5921
5917
|
|
|
5922
5918
|
// src/components/Table/TableRowContext.tsx
|
|
5923
|
-
var
|
|
5924
|
-
var TableRowContext =
|
|
5919
|
+
var import_react36 = __toESM(require("react"), 1);
|
|
5920
|
+
var TableRowContext = import_react36.default.createContext(null);
|
|
5925
5921
|
var useTableRowContext = () => {
|
|
5926
|
-
const ctx =
|
|
5922
|
+
const ctx = import_react36.default.useContext(TableRowContext);
|
|
5927
5923
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
5928
5924
|
return ctx;
|
|
5929
5925
|
};
|
|
5930
5926
|
var TableRowContext_default = TableRowContext;
|
|
5931
5927
|
|
|
5932
5928
|
// src/components/Table/TableCell.tsx
|
|
5933
|
-
var
|
|
5934
|
-
var TableCell =
|
|
5929
|
+
var import_jsx_runtime345 = require("react/jsx-runtime");
|
|
5930
|
+
var TableCell = import_react37.default.memo((props) => {
|
|
5935
5931
|
const {
|
|
5936
5932
|
children,
|
|
5937
5933
|
align = "center",
|
|
@@ -5945,9 +5941,9 @@ var TableCell = import_react38.default.memo((props) => {
|
|
|
5945
5941
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
5946
5942
|
const { stickyShadow } = useTableContext();
|
|
5947
5943
|
const headContext = useTableHeadContext();
|
|
5948
|
-
const [left, setLeft] =
|
|
5949
|
-
const cellRef =
|
|
5950
|
-
const calculateLeft =
|
|
5944
|
+
const [left, setLeft] = import_react37.default.useState(0);
|
|
5945
|
+
const cellRef = import_react37.default.useRef(null);
|
|
5946
|
+
const calculateLeft = import_react37.default.useCallback(() => {
|
|
5951
5947
|
if (!cellRef.current) return 0;
|
|
5952
5948
|
let totalLeft = 0;
|
|
5953
5949
|
for (const ref of stickyCells) {
|
|
@@ -5956,7 +5952,7 @@ var TableCell = import_react38.default.memo((props) => {
|
|
|
5956
5952
|
}
|
|
5957
5953
|
return totalLeft;
|
|
5958
5954
|
}, [stickyCells]);
|
|
5959
|
-
|
|
5955
|
+
import_react37.default.useEffect(() => {
|
|
5960
5956
|
if (!isSticky || !cellRef.current) return;
|
|
5961
5957
|
registerStickyCell(cellRef);
|
|
5962
5958
|
setLeft(calculateLeft());
|
|
@@ -5975,7 +5971,7 @@ var TableCell = import_react38.default.memo((props) => {
|
|
|
5975
5971
|
const CellTag = isHeaderCell ? "th" : "td";
|
|
5976
5972
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
5977
5973
|
const enableHover = headContext && headContext.cellHover;
|
|
5978
|
-
return /* @__PURE__ */ (0,
|
|
5974
|
+
return /* @__PURE__ */ (0, import_jsx_runtime345.jsx)(
|
|
5979
5975
|
CellTag,
|
|
5980
5976
|
{
|
|
5981
5977
|
ref: cellRef,
|
|
@@ -6002,21 +5998,21 @@ TableCell.displayName = "TableCell";
|
|
|
6002
5998
|
var TableCell_default = TableCell;
|
|
6003
5999
|
|
|
6004
6000
|
// src/components/Table/TableHead.tsx
|
|
6005
|
-
var
|
|
6001
|
+
var import_jsx_runtime346 = require("react/jsx-runtime");
|
|
6006
6002
|
var TableHead = ({
|
|
6007
6003
|
children,
|
|
6008
6004
|
cellHover = false
|
|
6009
6005
|
}) => {
|
|
6010
6006
|
const { headerSticky } = useTableContext();
|
|
6011
|
-
return /* @__PURE__ */ (0,
|
|
6007
|
+
return /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
|
|
6012
6008
|
};
|
|
6013
6009
|
TableHead.displayName = "TableHead";
|
|
6014
6010
|
var TableHead_default = TableHead;
|
|
6015
6011
|
|
|
6016
6012
|
// src/components/Table/TableRow.tsx
|
|
6017
|
-
var
|
|
6018
|
-
var
|
|
6019
|
-
var TableRow =
|
|
6013
|
+
var import_react38 = __toESM(require("react"), 1);
|
|
6014
|
+
var import_jsx_runtime347 = require("react/jsx-runtime");
|
|
6015
|
+
var TableRow = import_react38.default.memo((props) => {
|
|
6020
6016
|
const {
|
|
6021
6017
|
children,
|
|
6022
6018
|
type = "secondary",
|
|
@@ -6025,14 +6021,14 @@ var TableRow = import_react39.default.memo((props) => {
|
|
|
6025
6021
|
onClick
|
|
6026
6022
|
} = props;
|
|
6027
6023
|
const { rowBorderUse } = useTableContext();
|
|
6028
|
-
const [stickyCells, setStickyCells] =
|
|
6024
|
+
const [stickyCells, setStickyCells] = import_react38.default.useState([]);
|
|
6029
6025
|
const registerStickyCell = (ref) => {
|
|
6030
6026
|
setStickyCells((prev) => {
|
|
6031
6027
|
if (prev.includes(ref)) return prev;
|
|
6032
6028
|
return [...prev, ref];
|
|
6033
6029
|
});
|
|
6034
6030
|
};
|
|
6035
|
-
return /* @__PURE__ */ (0,
|
|
6031
|
+
return /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
6036
6032
|
"tr",
|
|
6037
6033
|
{
|
|
6038
6034
|
className: clsx_default(
|
|
@@ -6056,7 +6052,7 @@ TableRow.displayName = "TableRow";
|
|
|
6056
6052
|
var TableRow_default = TableRow;
|
|
6057
6053
|
|
|
6058
6054
|
// src/components/Tag/Tag.tsx
|
|
6059
|
-
var
|
|
6055
|
+
var import_jsx_runtime348 = require("react/jsx-runtime");
|
|
6060
6056
|
var Tag = (props) => {
|
|
6061
6057
|
const {
|
|
6062
6058
|
children,
|
|
@@ -6066,7 +6062,7 @@ var Tag = (props) => {
|
|
|
6066
6062
|
disabled = false,
|
|
6067
6063
|
colorIndex
|
|
6068
6064
|
} = props;
|
|
6069
|
-
return /* @__PURE__ */ (0,
|
|
6065
|
+
return /* @__PURE__ */ (0, import_jsx_runtime348.jsxs)(
|
|
6070
6066
|
"span",
|
|
6071
6067
|
{
|
|
6072
6068
|
className: clsx_default(
|
|
@@ -6077,8 +6073,8 @@ var Tag = (props) => {
|
|
|
6077
6073
|
disabled && "disabled"
|
|
6078
6074
|
),
|
|
6079
6075
|
children: [
|
|
6080
|
-
/* @__PURE__ */ (0,
|
|
6081
|
-
onClose && /* @__PURE__ */ (0,
|
|
6076
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)("span", { className: "tag-label", children }),
|
|
6077
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime348.jsx)("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(XIcon_default, {}) })
|
|
6082
6078
|
]
|
|
6083
6079
|
}
|
|
6084
6080
|
);
|
|
@@ -6087,9 +6083,9 @@ Tag.displayName = "Tag";
|
|
|
6087
6083
|
var Tag_default = Tag;
|
|
6088
6084
|
|
|
6089
6085
|
// src/components/TextArea/TextArea.tsx
|
|
6090
|
-
var
|
|
6091
|
-
var
|
|
6092
|
-
var TextArea =
|
|
6086
|
+
var import_react39 = __toESM(require("react"), 1);
|
|
6087
|
+
var import_jsx_runtime349 = require("react/jsx-runtime");
|
|
6088
|
+
var TextArea = import_react39.default.forwardRef(
|
|
6093
6089
|
(props, ref) => {
|
|
6094
6090
|
const {
|
|
6095
6091
|
className,
|
|
@@ -6099,7 +6095,7 @@ var TextArea = import_react40.default.forwardRef(
|
|
|
6099
6095
|
disabled,
|
|
6100
6096
|
...textareaProps
|
|
6101
6097
|
} = props;
|
|
6102
|
-
return /* @__PURE__ */ (0,
|
|
6098
|
+
return /* @__PURE__ */ (0, import_jsx_runtime349.jsx)("div", { className: clsx_default("lib-xplat-textarea-wrap", className), children: /* @__PURE__ */ (0, import_jsx_runtime349.jsx)(
|
|
6103
6099
|
"textarea",
|
|
6104
6100
|
{
|
|
6105
6101
|
...textareaProps,
|
|
@@ -6116,25 +6112,25 @@ TextArea.displayName = "TextArea";
|
|
|
6116
6112
|
var TextArea_default = TextArea;
|
|
6117
6113
|
|
|
6118
6114
|
// src/components/Toast/Toast.tsx
|
|
6119
|
-
var
|
|
6115
|
+
var import_react40 = __toESM(require("react"), 1);
|
|
6120
6116
|
var import_react_dom4 = require("react-dom");
|
|
6121
|
-
var
|
|
6122
|
-
var ToastContext =
|
|
6117
|
+
var import_jsx_runtime350 = require("react/jsx-runtime");
|
|
6118
|
+
var ToastContext = import_react40.default.createContext(null);
|
|
6123
6119
|
var useToast = () => {
|
|
6124
|
-
const ctx =
|
|
6120
|
+
const ctx = import_react40.default.useContext(ToastContext);
|
|
6125
6121
|
if (!ctx) throw new Error("useToast must be used within ToastProvider");
|
|
6126
6122
|
return ctx;
|
|
6127
6123
|
};
|
|
6128
6124
|
var EXIT_DURATION = 300;
|
|
6129
6125
|
var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
6130
|
-
const ref =
|
|
6131
|
-
const [height, setHeight] =
|
|
6132
|
-
|
|
6126
|
+
const ref = import_react40.default.useRef(null);
|
|
6127
|
+
const [height, setHeight] = import_react40.default.useState(void 0);
|
|
6128
|
+
import_react40.default.useEffect(() => {
|
|
6133
6129
|
if (ref.current && !isExiting) {
|
|
6134
6130
|
setHeight(ref.current.offsetHeight);
|
|
6135
6131
|
}
|
|
6136
6132
|
}, [isExiting]);
|
|
6137
|
-
return /* @__PURE__ */ (0,
|
|
6133
|
+
return /* @__PURE__ */ (0, import_jsx_runtime350.jsx)(
|
|
6138
6134
|
"div",
|
|
6139
6135
|
{
|
|
6140
6136
|
className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
|
|
@@ -6142,15 +6138,15 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
6142
6138
|
maxHeight: isExiting ? 0 : height ?? "none",
|
|
6143
6139
|
marginBottom: isExiting ? 0 : void 0
|
|
6144
6140
|
},
|
|
6145
|
-
children: /* @__PURE__ */ (0,
|
|
6141
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime350.jsxs)(
|
|
6146
6142
|
"div",
|
|
6147
6143
|
{
|
|
6148
6144
|
ref,
|
|
6149
6145
|
className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
|
|
6150
6146
|
role: "alert",
|
|
6151
6147
|
children: [
|
|
6152
|
-
/* @__PURE__ */ (0,
|
|
6153
|
-
/* @__PURE__ */ (0,
|
|
6148
|
+
/* @__PURE__ */ (0, import_jsx_runtime350.jsx)("span", { className: "message", children: item.message }),
|
|
6149
|
+
/* @__PURE__ */ (0, import_jsx_runtime350.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
6154
6150
|
]
|
|
6155
6151
|
}
|
|
6156
6152
|
)
|
|
@@ -6161,13 +6157,13 @@ var ToastProvider = ({
|
|
|
6161
6157
|
children,
|
|
6162
6158
|
position = "top-right"
|
|
6163
6159
|
}) => {
|
|
6164
|
-
const [toasts, setToasts] =
|
|
6165
|
-
const [removing, setRemoving] =
|
|
6166
|
-
const [mounted, setMounted] =
|
|
6167
|
-
|
|
6160
|
+
const [toasts, setToasts] = import_react40.default.useState([]);
|
|
6161
|
+
const [removing, setRemoving] = import_react40.default.useState(/* @__PURE__ */ new Set());
|
|
6162
|
+
const [mounted, setMounted] = import_react40.default.useState(false);
|
|
6163
|
+
import_react40.default.useEffect(() => {
|
|
6168
6164
|
setMounted(true);
|
|
6169
6165
|
}, []);
|
|
6170
|
-
const remove =
|
|
6166
|
+
const remove = import_react40.default.useCallback((id) => {
|
|
6171
6167
|
setRemoving((prev) => new Set(prev).add(id));
|
|
6172
6168
|
setTimeout(() => {
|
|
6173
6169
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
@@ -6178,7 +6174,7 @@ var ToastProvider = ({
|
|
|
6178
6174
|
});
|
|
6179
6175
|
}, EXIT_DURATION);
|
|
6180
6176
|
}, []);
|
|
6181
|
-
const toast =
|
|
6177
|
+
const toast = import_react40.default.useCallback(
|
|
6182
6178
|
(type, message, duration = 3e3) => {
|
|
6183
6179
|
const id = `${Date.now()}-${Math.random()}`;
|
|
6184
6180
|
setToasts((prev) => [...prev, { id, type, message }]);
|
|
@@ -6188,10 +6184,10 @@ var ToastProvider = ({
|
|
|
6188
6184
|
},
|
|
6189
6185
|
[remove]
|
|
6190
6186
|
);
|
|
6191
|
-
return /* @__PURE__ */ (0,
|
|
6187
|
+
return /* @__PURE__ */ (0, import_jsx_runtime350.jsxs)(ToastContext.Provider, { value: { toast }, children: [
|
|
6192
6188
|
children,
|
|
6193
6189
|
mounted && (0, import_react_dom4.createPortal)(
|
|
6194
|
-
/* @__PURE__ */ (0,
|
|
6190
|
+
/* @__PURE__ */ (0, import_jsx_runtime350.jsx)("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime350.jsx)(
|
|
6195
6191
|
ToastItemComponent,
|
|
6196
6192
|
{
|
|
6197
6193
|
item: t,
|
|
@@ -6207,8 +6203,8 @@ var ToastProvider = ({
|
|
|
6207
6203
|
ToastProvider.displayName = "ToastProvider";
|
|
6208
6204
|
|
|
6209
6205
|
// src/components/Tooltip/Tooltip.tsx
|
|
6210
|
-
var
|
|
6211
|
-
var
|
|
6206
|
+
var import_react41 = __toESM(require("react"), 1);
|
|
6207
|
+
var import_jsx_runtime351 = require("react/jsx-runtime");
|
|
6212
6208
|
var OFFSET = 12;
|
|
6213
6209
|
var GAP = 8;
|
|
6214
6210
|
var SHOW_DELAY = 300;
|
|
@@ -6221,14 +6217,14 @@ var Tooltip = (props) => {
|
|
|
6221
6217
|
follow = false,
|
|
6222
6218
|
disabled = false
|
|
6223
6219
|
} = props;
|
|
6224
|
-
const triggerRef =
|
|
6225
|
-
const tooltipRef =
|
|
6226
|
-
const [visible, setVisible] =
|
|
6227
|
-
const [pos, setPos] =
|
|
6228
|
-
const delayTimer =
|
|
6229
|
-
const rafRef =
|
|
6230
|
-
const cursor =
|
|
6231
|
-
const clamp =
|
|
6220
|
+
const triggerRef = import_react41.default.useRef(null);
|
|
6221
|
+
const tooltipRef = import_react41.default.useRef(null);
|
|
6222
|
+
const [visible, setVisible] = import_react41.default.useState(false);
|
|
6223
|
+
const [pos, setPos] = import_react41.default.useState({ left: 0, top: 0 });
|
|
6224
|
+
const delayTimer = import_react41.default.useRef(0);
|
|
6225
|
+
const rafRef = import_react41.default.useRef(0);
|
|
6226
|
+
const cursor = import_react41.default.useRef(null);
|
|
6227
|
+
const clamp = import_react41.default.useCallback((left, top, w, h) => {
|
|
6232
6228
|
const vw = window.innerWidth;
|
|
6233
6229
|
const vh = window.innerHeight;
|
|
6234
6230
|
return {
|
|
@@ -6236,7 +6232,7 @@ var Tooltip = (props) => {
|
|
|
6236
6232
|
top: Math.min(Math.max(GAP, top), Math.max(GAP, vh - h - GAP))
|
|
6237
6233
|
};
|
|
6238
6234
|
}, []);
|
|
6239
|
-
const placeAtCursor =
|
|
6235
|
+
const placeAtCursor = import_react41.default.useCallback((x, y) => {
|
|
6240
6236
|
const el = tooltipRef.current;
|
|
6241
6237
|
if (!el) return;
|
|
6242
6238
|
const w = el.offsetWidth;
|
|
@@ -6247,7 +6243,7 @@ var Tooltip = (props) => {
|
|
|
6247
6243
|
if (top < GAP) top = y + OFFSET;
|
|
6248
6244
|
setPos(clamp(left, top, w, h));
|
|
6249
6245
|
}, [clamp]);
|
|
6250
|
-
const placeAtTrigger =
|
|
6246
|
+
const placeAtTrigger = import_react41.default.useCallback(() => {
|
|
6251
6247
|
const el = tooltipRef.current;
|
|
6252
6248
|
const trigger = triggerRef.current;
|
|
6253
6249
|
if (!el || !trigger) return;
|
|
@@ -6259,19 +6255,19 @@ var Tooltip = (props) => {
|
|
|
6259
6255
|
const left = rect.left + rect.width / 2 - w / 2;
|
|
6260
6256
|
setPos(clamp(left, top, w, h));
|
|
6261
6257
|
}, [clamp]);
|
|
6262
|
-
const reposition =
|
|
6258
|
+
const reposition = import_react41.default.useCallback(() => {
|
|
6263
6259
|
if (follow && cursor.current) {
|
|
6264
6260
|
placeAtCursor(cursor.current.x, cursor.current.y);
|
|
6265
6261
|
} else {
|
|
6266
6262
|
placeAtTrigger();
|
|
6267
6263
|
}
|
|
6268
6264
|
}, [follow, placeAtCursor, placeAtTrigger]);
|
|
6269
|
-
const handleMouseEnter =
|
|
6265
|
+
const handleMouseEnter = import_react41.default.useCallback((e) => {
|
|
6270
6266
|
if (disabled) return;
|
|
6271
6267
|
cursor.current = { x: e.clientX, y: e.clientY };
|
|
6272
6268
|
delayTimer.current = window.setTimeout(() => setVisible(true), SHOW_DELAY);
|
|
6273
6269
|
}, [disabled]);
|
|
6274
|
-
const handleMouseMove =
|
|
6270
|
+
const handleMouseMove = import_react41.default.useCallback((e) => {
|
|
6275
6271
|
cursor.current = { x: e.clientX, y: e.clientY };
|
|
6276
6272
|
if (!visible || !follow) return;
|
|
6277
6273
|
cancelAnimationFrame(rafRef.current);
|
|
@@ -6279,25 +6275,25 @@ var Tooltip = (props) => {
|
|
|
6279
6275
|
if (cursor.current) placeAtCursor(cursor.current.x, cursor.current.y);
|
|
6280
6276
|
});
|
|
6281
6277
|
}, [visible, follow, placeAtCursor]);
|
|
6282
|
-
const close =
|
|
6278
|
+
const close = import_react41.default.useCallback(() => {
|
|
6283
6279
|
window.clearTimeout(delayTimer.current);
|
|
6284
6280
|
cancelAnimationFrame(rafRef.current);
|
|
6285
6281
|
setVisible(false);
|
|
6286
6282
|
}, []);
|
|
6287
|
-
const handleMouseLeave =
|
|
6283
|
+
const handleMouseLeave = import_react41.default.useCallback(() => {
|
|
6288
6284
|
cursor.current = null;
|
|
6289
6285
|
close();
|
|
6290
6286
|
}, [close]);
|
|
6291
|
-
const handleFocus =
|
|
6287
|
+
const handleFocus = import_react41.default.useCallback(() => {
|
|
6292
6288
|
if (disabled) return;
|
|
6293
6289
|
cursor.current = null;
|
|
6294
6290
|
setVisible(true);
|
|
6295
6291
|
}, [disabled]);
|
|
6296
|
-
|
|
6292
|
+
import_react41.default.useLayoutEffect(() => {
|
|
6297
6293
|
if (!visible) return;
|
|
6298
6294
|
reposition();
|
|
6299
6295
|
}, [visible, reposition]);
|
|
6300
|
-
|
|
6296
|
+
import_react41.default.useEffect(() => {
|
|
6301
6297
|
if (!visible || follow) return;
|
|
6302
6298
|
const onChange = () => placeAtTrigger();
|
|
6303
6299
|
window.addEventListener("scroll", onChange, true);
|
|
@@ -6307,12 +6303,12 @@ var Tooltip = (props) => {
|
|
|
6307
6303
|
window.removeEventListener("resize", onChange);
|
|
6308
6304
|
};
|
|
6309
6305
|
}, [visible, follow, placeAtTrigger]);
|
|
6310
|
-
|
|
6306
|
+
import_react41.default.useEffect(() => () => {
|
|
6311
6307
|
window.clearTimeout(delayTimer.current);
|
|
6312
6308
|
cancelAnimationFrame(rafRef.current);
|
|
6313
6309
|
}, []);
|
|
6314
|
-
if (!title && !description) return /* @__PURE__ */ (0,
|
|
6315
|
-
return /* @__PURE__ */ (0,
|
|
6310
|
+
if (!title && !description) return /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(import_jsx_runtime351.Fragment, { children });
|
|
6311
|
+
return /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)(
|
|
6316
6312
|
"div",
|
|
6317
6313
|
{
|
|
6318
6314
|
ref: triggerRef,
|
|
@@ -6325,7 +6321,7 @@ var Tooltip = (props) => {
|
|
|
6325
6321
|
onBlur: close,
|
|
6326
6322
|
children: [
|
|
6327
6323
|
children,
|
|
6328
|
-
visible && /* @__PURE__ */ (0,
|
|
6324
|
+
visible && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)(
|
|
6329
6325
|
"div",
|
|
6330
6326
|
{
|
|
6331
6327
|
ref: tooltipRef,
|
|
@@ -6333,8 +6329,8 @@ var Tooltip = (props) => {
|
|
|
6333
6329
|
className: clsx_default("lib-xplat-tooltip", type),
|
|
6334
6330
|
style: { position: "fixed", left: pos.left, top: pos.top },
|
|
6335
6331
|
children: [
|
|
6336
|
-
title && /* @__PURE__ */ (0,
|
|
6337
|
-
description && /* @__PURE__ */ (0,
|
|
6332
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { className: "tooltip-title", children: title }),
|
|
6333
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { className: "tooltip-desc", children: description })
|
|
6338
6334
|
]
|
|
6339
6335
|
}
|
|
6340
6336
|
) })
|
|
@@ -6346,11 +6342,11 @@ Tooltip.displayName = "Tooltip";
|
|
|
6346
6342
|
var Tooltip_default = Tooltip;
|
|
6347
6343
|
|
|
6348
6344
|
// src/components/Video/Video.tsx
|
|
6349
|
-
var
|
|
6350
|
-
var
|
|
6351
|
-
var PipIcon = () => /* @__PURE__ */ (0,
|
|
6352
|
-
/* @__PURE__ */ (0,
|
|
6353
|
-
/* @__PURE__ */ (0,
|
|
6345
|
+
var import_react42 = __toESM(require("react"), 1);
|
|
6346
|
+
var import_jsx_runtime352 = require("react/jsx-runtime");
|
|
6347
|
+
var PipIcon = () => /* @__PURE__ */ (0, import_jsx_runtime352.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: [
|
|
6348
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsx)("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
6349
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsx)("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
|
|
6354
6350
|
] });
|
|
6355
6351
|
var formatTime = (sec) => {
|
|
6356
6352
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -6358,7 +6354,7 @@ var formatTime = (sec) => {
|
|
|
6358
6354
|
const s = Math.floor(sec % 60);
|
|
6359
6355
|
return `${m}:${s.toString().padStart(2, "0")}`;
|
|
6360
6356
|
};
|
|
6361
|
-
var Video =
|
|
6357
|
+
var Video = import_react42.default.forwardRef((props, ref) => {
|
|
6362
6358
|
const {
|
|
6363
6359
|
src,
|
|
6364
6360
|
poster,
|
|
@@ -6382,21 +6378,21 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
6382
6378
|
children,
|
|
6383
6379
|
...rest
|
|
6384
6380
|
} = props;
|
|
6385
|
-
const containerRef =
|
|
6386
|
-
const videoRef =
|
|
6387
|
-
const [isPlaying, setIsPlaying] =
|
|
6388
|
-
const [isLoaded, setIsLoaded] =
|
|
6389
|
-
const [currentTime, setCurrentTime] =
|
|
6390
|
-
const [duration, setDuration] =
|
|
6391
|
-
const [buffered, setBuffered] =
|
|
6392
|
-
const [volume, setVolume] =
|
|
6393
|
-
const [isMuted, setIsMuted] =
|
|
6394
|
-
const [isFullscreen, setIsFullscreen] =
|
|
6395
|
-
const [playbackRate, setPlaybackRate] =
|
|
6396
|
-
const [rateMenuOpen, setRateMenuOpen] =
|
|
6397
|
-
const [captionsOn, setCaptionsOn] =
|
|
6398
|
-
const [isPip, setIsPip] =
|
|
6399
|
-
const setRefs =
|
|
6381
|
+
const containerRef = import_react42.default.useRef(null);
|
|
6382
|
+
const videoRef = import_react42.default.useRef(null);
|
|
6383
|
+
const [isPlaying, setIsPlaying] = import_react42.default.useState(Boolean(autoPlay));
|
|
6384
|
+
const [isLoaded, setIsLoaded] = import_react42.default.useState(false);
|
|
6385
|
+
const [currentTime, setCurrentTime] = import_react42.default.useState(0);
|
|
6386
|
+
const [duration, setDuration] = import_react42.default.useState(0);
|
|
6387
|
+
const [buffered, setBuffered] = import_react42.default.useState(0);
|
|
6388
|
+
const [volume, setVolume] = import_react42.default.useState(1);
|
|
6389
|
+
const [isMuted, setIsMuted] = import_react42.default.useState(Boolean(muted));
|
|
6390
|
+
const [isFullscreen, setIsFullscreen] = import_react42.default.useState(false);
|
|
6391
|
+
const [playbackRate, setPlaybackRate] = import_react42.default.useState(1);
|
|
6392
|
+
const [rateMenuOpen, setRateMenuOpen] = import_react42.default.useState(false);
|
|
6393
|
+
const [captionsOn, setCaptionsOn] = import_react42.default.useState(false);
|
|
6394
|
+
const [isPip, setIsPip] = import_react42.default.useState(false);
|
|
6395
|
+
const setRefs = import_react42.default.useCallback(
|
|
6400
6396
|
(el) => {
|
|
6401
6397
|
videoRef.current = el;
|
|
6402
6398
|
if (typeof ref === "function") ref(el);
|
|
@@ -6404,14 +6400,14 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
6404
6400
|
},
|
|
6405
6401
|
[ref]
|
|
6406
6402
|
);
|
|
6407
|
-
|
|
6403
|
+
import_react42.default.useEffect(() => {
|
|
6408
6404
|
const onFsChange = () => {
|
|
6409
6405
|
setIsFullscreen(document.fullscreenElement === containerRef.current);
|
|
6410
6406
|
};
|
|
6411
6407
|
document.addEventListener("fullscreenchange", onFsChange);
|
|
6412
6408
|
return () => document.removeEventListener("fullscreenchange", onFsChange);
|
|
6413
6409
|
}, []);
|
|
6414
|
-
|
|
6410
|
+
import_react42.default.useEffect(() => {
|
|
6415
6411
|
const v = videoRef.current;
|
|
6416
6412
|
if (!v) return;
|
|
6417
6413
|
const onEnter = () => setIsPip(true);
|
|
@@ -6525,13 +6521,13 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
6525
6521
|
const volumePct = (isMuted ? 0 : volume) * 100;
|
|
6526
6522
|
const VolumeGlyph = isMuted || volume === 0 ? VolumeXIcon_default : volume < 0.5 ? VolumeIcon_default : Volume2Icon_default;
|
|
6527
6523
|
const pipSupported = typeof document !== "undefined" && "pictureInPictureEnabled" in document && document.pictureInPictureEnabled;
|
|
6528
|
-
return /* @__PURE__ */ (0,
|
|
6524
|
+
return /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)(
|
|
6529
6525
|
"div",
|
|
6530
6526
|
{
|
|
6531
6527
|
ref: containerRef,
|
|
6532
6528
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
6533
6529
|
children: [
|
|
6534
|
-
/* @__PURE__ */ (0,
|
|
6530
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
|
|
6535
6531
|
"video",
|
|
6536
6532
|
{
|
|
6537
6533
|
ref: setRefs,
|
|
@@ -6552,7 +6548,7 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
6552
6548
|
children
|
|
6553
6549
|
}
|
|
6554
6550
|
),
|
|
6555
|
-
showCenterPlay && /* @__PURE__ */ (0,
|
|
6551
|
+
showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
|
|
6556
6552
|
"button",
|
|
6557
6553
|
{
|
|
6558
6554
|
type: "button",
|
|
@@ -6564,11 +6560,11 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
6564
6560
|
onClick: togglePlay,
|
|
6565
6561
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
6566
6562
|
tabIndex: -1,
|
|
6567
|
-
children: /* @__PURE__ */ (0,
|
|
6563
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("span", { className: "center-play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(PlayCircleIcon_default, {}) })
|
|
6568
6564
|
}
|
|
6569
6565
|
),
|
|
6570
|
-
showControls && /* @__PURE__ */ (0,
|
|
6571
|
-
/* @__PURE__ */ (0,
|
|
6566
|
+
showControls && /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
|
|
6567
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
|
|
6572
6568
|
"input",
|
|
6573
6569
|
{
|
|
6574
6570
|
type: "range",
|
|
@@ -6585,29 +6581,29 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
6585
6581
|
}
|
|
6586
6582
|
}
|
|
6587
6583
|
),
|
|
6588
|
-
/* @__PURE__ */ (0,
|
|
6589
|
-
/* @__PURE__ */ (0,
|
|
6584
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: "controls-row", children: [
|
|
6585
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
|
|
6590
6586
|
"button",
|
|
6591
6587
|
{
|
|
6592
6588
|
type: "button",
|
|
6593
6589
|
className: "control-btn",
|
|
6594
6590
|
onClick: togglePlay,
|
|
6595
6591
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
6596
|
-
children: isPlaying ? /* @__PURE__ */ (0,
|
|
6592
|
+
children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(PlayIcon_default, {})
|
|
6597
6593
|
}
|
|
6598
6594
|
),
|
|
6599
|
-
/* @__PURE__ */ (0,
|
|
6600
|
-
/* @__PURE__ */ (0,
|
|
6595
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: "volume-group", children: [
|
|
6596
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
|
|
6601
6597
|
"button",
|
|
6602
6598
|
{
|
|
6603
6599
|
type: "button",
|
|
6604
6600
|
className: "control-btn",
|
|
6605
6601
|
onClick: toggleMute,
|
|
6606
6602
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
6607
|
-
children: /* @__PURE__ */ (0,
|
|
6603
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(VolumeGlyph, {})
|
|
6608
6604
|
}
|
|
6609
6605
|
),
|
|
6610
|
-
/* @__PURE__ */ (0,
|
|
6606
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
|
|
6611
6607
|
"input",
|
|
6612
6608
|
{
|
|
6613
6609
|
type: "range",
|
|
@@ -6622,14 +6618,14 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
6622
6618
|
}
|
|
6623
6619
|
)
|
|
6624
6620
|
] }),
|
|
6625
|
-
/* @__PURE__ */ (0,
|
|
6621
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("span", { className: "time", children: [
|
|
6626
6622
|
formatTime(currentTime),
|
|
6627
6623
|
" / ",
|
|
6628
6624
|
formatTime(duration)
|
|
6629
6625
|
] }),
|
|
6630
|
-
/* @__PURE__ */ (0,
|
|
6631
|
-
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0,
|
|
6632
|
-
/* @__PURE__ */ (0,
|
|
6626
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsx)("div", { className: "controls-spacer" }),
|
|
6627
|
+
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
|
|
6628
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsxs)(
|
|
6633
6629
|
"button",
|
|
6634
6630
|
{
|
|
6635
6631
|
type: "button",
|
|
@@ -6643,7 +6639,7 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
6643
6639
|
]
|
|
6644
6640
|
}
|
|
6645
6641
|
),
|
|
6646
|
-
rateMenuOpen && /* @__PURE__ */ (0,
|
|
6642
|
+
rateMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)(
|
|
6647
6643
|
"button",
|
|
6648
6644
|
{
|
|
6649
6645
|
type: "button",
|
|
@@ -6657,7 +6653,7 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
6657
6653
|
}
|
|
6658
6654
|
) }, r2)) })
|
|
6659
6655
|
] }),
|
|
6660
|
-
showCaptions && /* @__PURE__ */ (0,
|
|
6656
|
+
showCaptions && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
|
|
6661
6657
|
"button",
|
|
6662
6658
|
{
|
|
6663
6659
|
type: "button",
|
|
@@ -6665,37 +6661,37 @@ var Video = import_react43.default.forwardRef((props, ref) => {
|
|
|
6665
6661
|
onClick: toggleCaptions,
|
|
6666
6662
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
6667
6663
|
"aria-pressed": captionsOn,
|
|
6668
|
-
children: /* @__PURE__ */ (0,
|
|
6664
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(TypeIcon_default, {})
|
|
6669
6665
|
}
|
|
6670
6666
|
),
|
|
6671
|
-
showPip && pipSupported && /* @__PURE__ */ (0,
|
|
6667
|
+
showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
|
|
6672
6668
|
"button",
|
|
6673
6669
|
{
|
|
6674
6670
|
type: "button",
|
|
6675
6671
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
6676
6672
|
onClick: togglePip,
|
|
6677
6673
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
6678
|
-
children: /* @__PURE__ */ (0,
|
|
6674
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(PipIcon, {})
|
|
6679
6675
|
}
|
|
6680
6676
|
),
|
|
6681
|
-
showDownload && /* @__PURE__ */ (0,
|
|
6677
|
+
showDownload && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
|
|
6682
6678
|
"a",
|
|
6683
6679
|
{
|
|
6684
6680
|
className: "control-btn",
|
|
6685
6681
|
href: src,
|
|
6686
6682
|
download: downloadFileName ?? true,
|
|
6687
6683
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
6688
|
-
children: /* @__PURE__ */ (0,
|
|
6684
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(DownloadIcon_default, {})
|
|
6689
6685
|
}
|
|
6690
6686
|
),
|
|
6691
|
-
/* @__PURE__ */ (0,
|
|
6687
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
|
|
6692
6688
|
"button",
|
|
6693
6689
|
{
|
|
6694
6690
|
type: "button",
|
|
6695
6691
|
className: "control-btn",
|
|
6696
6692
|
onClick: toggleFullscreen,
|
|
6697
6693
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
6698
|
-
children: isFullscreen ? /* @__PURE__ */ (0,
|
|
6694
|
+
children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(MaximizeIcon_default, {})
|
|
6699
6695
|
}
|
|
6700
6696
|
)
|
|
6701
6697
|
] })
|