@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
package/dist/components/index.js
CHANGED
|
@@ -2886,7 +2886,7 @@ Chip.displayName = "Chip";
|
|
|
2886
2886
|
var Chip_default = Chip;
|
|
2887
2887
|
|
|
2888
2888
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
2889
|
-
import
|
|
2889
|
+
import React12 from "react";
|
|
2890
2890
|
|
|
2891
2891
|
// src/components/Input/Input.tsx
|
|
2892
2892
|
import React8 from "react";
|
|
@@ -3077,38 +3077,26 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
3077
3077
|
var PasswordInput_default = PasswordInput;
|
|
3078
3078
|
|
|
3079
3079
|
// src/components/Modal/Modal.tsx
|
|
3080
|
-
import React11 from "react";
|
|
3081
|
-
import { createPortal } from "react-dom";
|
|
3082
|
-
|
|
3083
|
-
// src/tokens/hooks/Portal.tsx
|
|
3084
3080
|
import React10 from "react";
|
|
3085
|
-
import
|
|
3081
|
+
import { createPortal } from "react-dom";
|
|
3086
3082
|
import { jsx as jsx313 } from "react/jsx-runtime";
|
|
3087
|
-
var PortalContainerContext = React10.createContext(null);
|
|
3088
|
-
var PortalProvider = ({ container, children }) => /* @__PURE__ */ jsx313(PortalContainerContext.Provider, { value: container, children });
|
|
3089
|
-
var Portal = ({ children }) => {
|
|
3090
|
-
const contextContainer = React10.useContext(PortalContainerContext);
|
|
3091
|
-
if (typeof document === "undefined") return null;
|
|
3092
|
-
const container = contextContainer ?? document.body;
|
|
3093
|
-
return ReactDOM.createPortal(children, container);
|
|
3094
|
-
};
|
|
3095
|
-
Portal.displayName = "Portal";
|
|
3096
|
-
var Portal_default = Portal;
|
|
3097
|
-
|
|
3098
|
-
// src/components/Modal/Modal.tsx
|
|
3099
|
-
import { jsx as jsx314 } from "react/jsx-runtime";
|
|
3100
3083
|
var ANIMATION_DURATION_MS = 200;
|
|
3101
3084
|
var Modal = (props) => {
|
|
3102
3085
|
const { isOpen, onClose, children } = props;
|
|
3103
|
-
const [mounted, setMounted] =
|
|
3104
|
-
const [visible, setVisible] =
|
|
3105
|
-
const
|
|
3106
|
-
|
|
3086
|
+
const [mounted, setMounted] = React10.useState(false);
|
|
3087
|
+
const [visible, setVisible] = React10.useState(false);
|
|
3088
|
+
const [settled, setSettled] = React10.useState(false);
|
|
3089
|
+
React10.useEffect(() => {
|
|
3107
3090
|
if (isOpen) {
|
|
3108
3091
|
setMounted(true);
|
|
3109
|
-
const
|
|
3110
|
-
|
|
3092
|
+
const show = setTimeout(() => setVisible(true), 1);
|
|
3093
|
+
const settle = setTimeout(() => setSettled(true), ANIMATION_DURATION_MS + 50);
|
|
3094
|
+
return () => {
|
|
3095
|
+
clearTimeout(show);
|
|
3096
|
+
clearTimeout(settle);
|
|
3097
|
+
};
|
|
3111
3098
|
}
|
|
3099
|
+
setSettled(false);
|
|
3112
3100
|
setVisible(false);
|
|
3113
3101
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS);
|
|
3114
3102
|
return () => clearTimeout(t);
|
|
@@ -3117,20 +3105,19 @@ var Modal = (props) => {
|
|
|
3117
3105
|
if (!mounted) return null;
|
|
3118
3106
|
const stateClass = visible ? "enter" : "exit";
|
|
3119
3107
|
return createPortal(
|
|
3120
|
-
/* @__PURE__ */
|
|
3108
|
+
/* @__PURE__ */ jsx313(
|
|
3121
3109
|
"div",
|
|
3122
3110
|
{
|
|
3123
3111
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
3124
3112
|
onClick: onClose,
|
|
3125
|
-
children: /* @__PURE__ */
|
|
3113
|
+
children: /* @__PURE__ */ jsx313(
|
|
3126
3114
|
"div",
|
|
3127
3115
|
{
|
|
3128
|
-
|
|
3129
|
-
className: clsx_default("lib-xplat-modal", "modal-box", stateClass),
|
|
3116
|
+
className: clsx_default("lib-xplat-modal", "modal-box", stateClass, settled && "settled"),
|
|
3130
3117
|
role: "dialog",
|
|
3131
3118
|
"aria-modal": "true",
|
|
3132
3119
|
onClick: (e) => e.stopPropagation(),
|
|
3133
|
-
children
|
|
3120
|
+
children
|
|
3134
3121
|
}
|
|
3135
3122
|
)
|
|
3136
3123
|
}
|
|
@@ -3142,9 +3129,9 @@ Modal.displayName = "Modal";
|
|
|
3142
3129
|
var Modal_default = Modal;
|
|
3143
3130
|
|
|
3144
3131
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
3145
|
-
import
|
|
3146
|
-
import { Fragment as Fragment3, jsx as
|
|
3147
|
-
var DayCell2 =
|
|
3132
|
+
import React11 from "react";
|
|
3133
|
+
import { Fragment as Fragment3, jsx as jsx314, jsxs as jsxs200 } from "react/jsx-runtime";
|
|
3134
|
+
var DayCell2 = React11.memo(
|
|
3148
3135
|
({
|
|
3149
3136
|
day,
|
|
3150
3137
|
disabled,
|
|
@@ -3154,7 +3141,7 @@ var DayCell2 = React12.memo(
|
|
|
3154
3141
|
isEnd,
|
|
3155
3142
|
inRange,
|
|
3156
3143
|
onSelect
|
|
3157
|
-
}) => /* @__PURE__ */
|
|
3144
|
+
}) => /* @__PURE__ */ jsx314(
|
|
3158
3145
|
"button",
|
|
3159
3146
|
{
|
|
3160
3147
|
type: "button",
|
|
@@ -3196,26 +3183,26 @@ var SingleDatePicker = (props) => {
|
|
|
3196
3183
|
initialYear,
|
|
3197
3184
|
initialMonth
|
|
3198
3185
|
);
|
|
3199
|
-
const [pickerMode, setPickerMode] =
|
|
3200
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
3186
|
+
const [pickerMode, setPickerMode] = React11.useState("days");
|
|
3187
|
+
const [yearRangeStart, setYearRangeStart] = React11.useState(
|
|
3201
3188
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
3202
3189
|
);
|
|
3203
|
-
const minTime =
|
|
3190
|
+
const minTime = React11.useMemo(
|
|
3204
3191
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
3205
3192
|
[minDate]
|
|
3206
3193
|
);
|
|
3207
|
-
const maxTime =
|
|
3194
|
+
const maxTime = React11.useMemo(
|
|
3208
3195
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
3209
3196
|
[maxDate]
|
|
3210
3197
|
);
|
|
3211
|
-
const highlightSet =
|
|
3198
|
+
const highlightSet = React11.useMemo(() => {
|
|
3212
3199
|
const set = /* @__PURE__ */ new Set();
|
|
3213
3200
|
for (const h of highlightDates) {
|
|
3214
3201
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
3215
3202
|
}
|
|
3216
3203
|
return set;
|
|
3217
3204
|
}, [highlightDates]);
|
|
3218
|
-
const handleSelect =
|
|
3205
|
+
const handleSelect = React11.useCallback(
|
|
3219
3206
|
(date) => {
|
|
3220
3207
|
onChange?.(date);
|
|
3221
3208
|
},
|
|
@@ -3258,14 +3245,14 @@ var SingleDatePicker = (props) => {
|
|
|
3258
3245
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
3259
3246
|
children: [
|
|
3260
3247
|
/* @__PURE__ */ jsxs200("div", { className: "datepicker-header", children: [
|
|
3261
|
-
/* @__PURE__ */
|
|
3262
|
-
/* @__PURE__ */
|
|
3263
|
-
/* @__PURE__ */
|
|
3248
|
+
/* @__PURE__ */ jsx314("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ jsx314(ChevronLeftIcon_default, {}) }),
|
|
3249
|
+
/* @__PURE__ */ jsx314("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
3250
|
+
/* @__PURE__ */ jsx314("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ jsx314(ChevronRightIcon_default, {}) })
|
|
3264
3251
|
] }),
|
|
3265
3252
|
/* @__PURE__ */ jsxs200("div", { className: "datepicker-body", children: [
|
|
3266
|
-
pickerMode === "years" && /* @__PURE__ */
|
|
3253
|
+
pickerMode === "years" && /* @__PURE__ */ jsx314("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
3267
3254
|
const y = yearRangeStart + i;
|
|
3268
|
-
return /* @__PURE__ */
|
|
3255
|
+
return /* @__PURE__ */ jsx314(
|
|
3269
3256
|
"button",
|
|
3270
3257
|
{
|
|
3271
3258
|
type: "button",
|
|
@@ -3276,7 +3263,7 @@ var SingleDatePicker = (props) => {
|
|
|
3276
3263
|
y
|
|
3277
3264
|
);
|
|
3278
3265
|
}) }),
|
|
3279
|
-
pickerMode === "months" && /* @__PURE__ */
|
|
3266
|
+
pickerMode === "months" && /* @__PURE__ */ jsx314("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ jsx314(
|
|
3280
3267
|
"button",
|
|
3281
3268
|
{
|
|
3282
3269
|
type: "button",
|
|
@@ -3287,7 +3274,7 @@ var SingleDatePicker = (props) => {
|
|
|
3287
3274
|
i
|
|
3288
3275
|
)) }),
|
|
3289
3276
|
pickerMode === "days" && /* @__PURE__ */ jsxs200(Fragment3, { children: [
|
|
3290
|
-
/* @__PURE__ */
|
|
3277
|
+
/* @__PURE__ */ jsx314("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ jsx314(
|
|
3291
3278
|
"div",
|
|
3292
3279
|
{
|
|
3293
3280
|
className: clsx_default(
|
|
@@ -3299,7 +3286,7 @@ var SingleDatePicker = (props) => {
|
|
|
3299
3286
|
},
|
|
3300
3287
|
label
|
|
3301
3288
|
)) }),
|
|
3302
|
-
/* @__PURE__ */
|
|
3289
|
+
/* @__PURE__ */ jsx314("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
3303
3290
|
const t = day.date.getTime();
|
|
3304
3291
|
const disabled = t < minTime || t > maxTime;
|
|
3305
3292
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -3309,7 +3296,7 @@ var SingleDatePicker = (props) => {
|
|
|
3309
3296
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
3310
3297
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
3311
3298
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
3312
|
-
return /* @__PURE__ */
|
|
3299
|
+
return /* @__PURE__ */ jsx314(
|
|
3313
3300
|
DayCell2,
|
|
3314
3301
|
{
|
|
3315
3302
|
day,
|
|
@@ -3334,7 +3321,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
3334
3321
|
var SingleDatePicker_default = SingleDatePicker;
|
|
3335
3322
|
|
|
3336
3323
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
3337
|
-
import { jsx as
|
|
3324
|
+
import { jsx as jsx315, jsxs as jsxs201 } from "react/jsx-runtime";
|
|
3338
3325
|
var formatDate = (date) => {
|
|
3339
3326
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
3340
3327
|
const y = date.getFullYear();
|
|
@@ -3344,8 +3331,8 @@ var formatDate = (date) => {
|
|
|
3344
3331
|
};
|
|
3345
3332
|
var InputDatePicker = (props) => {
|
|
3346
3333
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
3347
|
-
const [isOpen, setIsOpen] =
|
|
3348
|
-
const [tempDate, setTempDate] =
|
|
3334
|
+
const [isOpen, setIsOpen] = React12.useState(false);
|
|
3335
|
+
const [tempDate, setTempDate] = React12.useState(value ?? /* @__PURE__ */ new Date());
|
|
3349
3336
|
const handleOpen = () => {
|
|
3350
3337
|
if (disabled) return;
|
|
3351
3338
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -3362,18 +3349,18 @@ var InputDatePicker = (props) => {
|
|
|
3362
3349
|
setIsOpen(false);
|
|
3363
3350
|
};
|
|
3364
3351
|
return /* @__PURE__ */ jsxs201("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
|
|
3365
|
-
/* @__PURE__ */
|
|
3352
|
+
/* @__PURE__ */ jsx315("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ jsx315(
|
|
3366
3353
|
Input_default,
|
|
3367
3354
|
{
|
|
3368
3355
|
value: formatDate(value),
|
|
3369
3356
|
placeholder,
|
|
3370
|
-
suffix: /* @__PURE__ */
|
|
3357
|
+
suffix: /* @__PURE__ */ jsx315(CalenderIcon_default, {}),
|
|
3371
3358
|
disabled,
|
|
3372
3359
|
readOnly: true
|
|
3373
3360
|
}
|
|
3374
3361
|
) }),
|
|
3375
|
-
/* @__PURE__ */
|
|
3376
|
-
/* @__PURE__ */
|
|
3362
|
+
/* @__PURE__ */ jsx315(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs201("div", { className: "lib-xplat-popup-datepicker-card", children: [
|
|
3363
|
+
/* @__PURE__ */ jsx315("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ jsx315(
|
|
3377
3364
|
SingleDatePicker_default,
|
|
3378
3365
|
{
|
|
3379
3366
|
value: tempDate,
|
|
@@ -3384,8 +3371,8 @@ var InputDatePicker = (props) => {
|
|
|
3384
3371
|
}
|
|
3385
3372
|
) }),
|
|
3386
3373
|
/* @__PURE__ */ jsxs201("div", { className: "popup-datepicker-footer", children: [
|
|
3387
|
-
/* @__PURE__ */
|
|
3388
|
-
/* @__PURE__ */
|
|
3374
|
+
/* @__PURE__ */ jsx315(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
|
|
3375
|
+
/* @__PURE__ */ jsx315(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
3389
3376
|
] })
|
|
3390
3377
|
] }) })
|
|
3391
3378
|
] });
|
|
@@ -3394,20 +3381,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
3394
3381
|
var InputDatePicker_default = InputDatePicker;
|
|
3395
3382
|
|
|
3396
3383
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
3397
|
-
import
|
|
3384
|
+
import React16 from "react";
|
|
3398
3385
|
|
|
3399
3386
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
3400
|
-
import
|
|
3387
|
+
import React15 from "react";
|
|
3401
3388
|
|
|
3402
3389
|
// src/components/Tab/Tab.tsx
|
|
3403
|
-
import
|
|
3390
|
+
import React14 from "react";
|
|
3404
3391
|
|
|
3405
3392
|
// src/components/Tab/TabItem.tsx
|
|
3406
|
-
import
|
|
3407
|
-
import { jsx as
|
|
3408
|
-
var TabItem =
|
|
3393
|
+
import React13 from "react";
|
|
3394
|
+
import { jsx as jsx316 } from "react/jsx-runtime";
|
|
3395
|
+
var TabItem = React13.forwardRef((props, ref) => {
|
|
3409
3396
|
const { isActive: isActive2, title, onClick } = props;
|
|
3410
|
-
return /* @__PURE__ */
|
|
3397
|
+
return /* @__PURE__ */ jsx316(
|
|
3411
3398
|
"div",
|
|
3412
3399
|
{
|
|
3413
3400
|
ref,
|
|
@@ -3421,25 +3408,25 @@ TabItem.displayName = "TabItem";
|
|
|
3421
3408
|
var TabItem_default = TabItem;
|
|
3422
3409
|
|
|
3423
3410
|
// src/components/Tab/Tab.tsx
|
|
3424
|
-
import { jsx as
|
|
3411
|
+
import { jsx as jsx317, jsxs as jsxs202 } from "react/jsx-runtime";
|
|
3425
3412
|
var Tab = (props) => {
|
|
3426
3413
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
3427
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
3414
|
+
const [underlineStyle, setUnderlineStyle] = React14.useState({
|
|
3428
3415
|
left: 0,
|
|
3429
3416
|
width: 0
|
|
3430
3417
|
});
|
|
3431
|
-
const itemRefs =
|
|
3418
|
+
const itemRefs = React14.useRef([]);
|
|
3432
3419
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
3433
3420
|
onChange(tabItem, tabIdx);
|
|
3434
3421
|
};
|
|
3435
|
-
|
|
3422
|
+
React14.useEffect(() => {
|
|
3436
3423
|
const el = itemRefs.current[activeIndex];
|
|
3437
3424
|
if (el) {
|
|
3438
3425
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
3439
3426
|
}
|
|
3440
3427
|
}, [activeIndex, tabs.length]);
|
|
3441
3428
|
return /* @__PURE__ */ jsxs202("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
|
|
3442
|
-
tabs.map((tab, idx) => /* @__PURE__ */
|
|
3429
|
+
tabs.map((tab, idx) => /* @__PURE__ */ jsx317(
|
|
3443
3430
|
TabItem_default,
|
|
3444
3431
|
{
|
|
3445
3432
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -3451,7 +3438,7 @@ var Tab = (props) => {
|
|
|
3451
3438
|
},
|
|
3452
3439
|
`${tab.value}_${idx}`
|
|
3453
3440
|
)),
|
|
3454
|
-
type === "toggle" && /* @__PURE__ */
|
|
3441
|
+
type === "toggle" && /* @__PURE__ */ jsx317(
|
|
3455
3442
|
"div",
|
|
3456
3443
|
{
|
|
3457
3444
|
className: "tab-toggle-underline",
|
|
@@ -3467,7 +3454,7 @@ Tab.displayName = "Tab";
|
|
|
3467
3454
|
var Tab_default = Tab;
|
|
3468
3455
|
|
|
3469
3456
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
3470
|
-
import { jsx as
|
|
3457
|
+
import { jsx as jsx318, jsxs as jsxs203 } from "react/jsx-runtime";
|
|
3471
3458
|
var RangePicker = (props) => {
|
|
3472
3459
|
const {
|
|
3473
3460
|
startDate,
|
|
@@ -3477,7 +3464,7 @@ var RangePicker = (props) => {
|
|
|
3477
3464
|
maxDate,
|
|
3478
3465
|
locale = "ko"
|
|
3479
3466
|
} = props;
|
|
3480
|
-
const [activeTab, setActiveTab] =
|
|
3467
|
+
const [activeTab, setActiveTab] = React15.useState("start");
|
|
3481
3468
|
const handleStartChange = (date) => {
|
|
3482
3469
|
if (!date) return;
|
|
3483
3470
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -3491,7 +3478,7 @@ var RangePicker = (props) => {
|
|
|
3491
3478
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
3492
3479
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
3493
3480
|
return /* @__PURE__ */ jsxs203("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
|
|
3494
|
-
/* @__PURE__ */
|
|
3481
|
+
/* @__PURE__ */ jsx318("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ jsx318(
|
|
3495
3482
|
Tab_default,
|
|
3496
3483
|
{
|
|
3497
3484
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -3505,7 +3492,7 @@ var RangePicker = (props) => {
|
|
|
3505
3492
|
}
|
|
3506
3493
|
) }),
|
|
3507
3494
|
/* @__PURE__ */ jsxs203("div", { className: "datepicker-range-panels", children: [
|
|
3508
|
-
/* @__PURE__ */
|
|
3495
|
+
/* @__PURE__ */ jsx318(
|
|
3509
3496
|
SingleDatePicker_default,
|
|
3510
3497
|
{
|
|
3511
3498
|
value: startDate,
|
|
@@ -3517,7 +3504,7 @@ var RangePicker = (props) => {
|
|
|
3517
3504
|
locale
|
|
3518
3505
|
}
|
|
3519
3506
|
),
|
|
3520
|
-
/* @__PURE__ */
|
|
3507
|
+
/* @__PURE__ */ jsx318(
|
|
3521
3508
|
SingleDatePicker_default,
|
|
3522
3509
|
{
|
|
3523
3510
|
value: endDate,
|
|
@@ -3530,7 +3517,7 @@ var RangePicker = (props) => {
|
|
|
3530
3517
|
}
|
|
3531
3518
|
)
|
|
3532
3519
|
] }),
|
|
3533
|
-
/* @__PURE__ */
|
|
3520
|
+
/* @__PURE__ */ jsx318("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ jsx318(
|
|
3534
3521
|
SingleDatePicker_default,
|
|
3535
3522
|
{
|
|
3536
3523
|
value: startDate,
|
|
@@ -3541,7 +3528,7 @@ var RangePicker = (props) => {
|
|
|
3541
3528
|
rangeEnd: endDate,
|
|
3542
3529
|
locale
|
|
3543
3530
|
}
|
|
3544
|
-
) : /* @__PURE__ */
|
|
3531
|
+
) : /* @__PURE__ */ jsx318(
|
|
3545
3532
|
SingleDatePicker_default,
|
|
3546
3533
|
{
|
|
3547
3534
|
value: endDate,
|
|
@@ -3559,10 +3546,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
3559
3546
|
var RangePicker_default = RangePicker;
|
|
3560
3547
|
|
|
3561
3548
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
3562
|
-
import { jsx as
|
|
3549
|
+
import { jsx as jsx319, jsxs as jsxs204 } from "react/jsx-runtime";
|
|
3563
3550
|
var PopupPicker = (props) => {
|
|
3564
3551
|
const { component, type, locale } = props;
|
|
3565
|
-
const [isOpen, setIsOpen] =
|
|
3552
|
+
const [isOpen, setIsOpen] = React16.useState(false);
|
|
3566
3553
|
const handleClick = () => setIsOpen(true);
|
|
3567
3554
|
const handleClose = () => setIsOpen(false);
|
|
3568
3555
|
const handleSingleChange = (date) => {
|
|
@@ -3571,10 +3558,10 @@ var PopupPicker = (props) => {
|
|
|
3571
3558
|
handleClose();
|
|
3572
3559
|
};
|
|
3573
3560
|
return /* @__PURE__ */ jsxs204("div", { className: "lib-xplat-popup-datepicker", children: [
|
|
3574
|
-
|
|
3575
|
-
/* @__PURE__ */
|
|
3561
|
+
React16.cloneElement(component, { onClick: handleClick }),
|
|
3562
|
+
/* @__PURE__ */ jsx319(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs204("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
|
|
3576
3563
|
/* @__PURE__ */ jsxs204("div", { className: "popup-datepicker-content", children: [
|
|
3577
|
-
type === "single" && /* @__PURE__ */
|
|
3564
|
+
type === "single" && /* @__PURE__ */ jsx319(
|
|
3578
3565
|
SingleDatePicker_default,
|
|
3579
3566
|
{
|
|
3580
3567
|
value: props.value,
|
|
@@ -3584,7 +3571,7 @@ var PopupPicker = (props) => {
|
|
|
3584
3571
|
locale
|
|
3585
3572
|
}
|
|
3586
3573
|
),
|
|
3587
|
-
type === "range" && /* @__PURE__ */
|
|
3574
|
+
type === "range" && /* @__PURE__ */ jsx319(
|
|
3588
3575
|
RangePicker_default,
|
|
3589
3576
|
{
|
|
3590
3577
|
startDate: props.startDate,
|
|
@@ -3597,7 +3584,7 @@ var PopupPicker = (props) => {
|
|
|
3597
3584
|
)
|
|
3598
3585
|
] }),
|
|
3599
3586
|
/* @__PURE__ */ jsxs204("div", { className: "popup-datepicker-footer", children: [
|
|
3600
|
-
/* @__PURE__ */
|
|
3587
|
+
/* @__PURE__ */ jsx319(
|
|
3601
3588
|
Button_default,
|
|
3602
3589
|
{
|
|
3603
3590
|
type: "secondary",
|
|
@@ -3605,7 +3592,7 @@ var PopupPicker = (props) => {
|
|
|
3605
3592
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
3606
3593
|
}
|
|
3607
3594
|
),
|
|
3608
|
-
/* @__PURE__ */
|
|
3595
|
+
/* @__PURE__ */ jsx319(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
3609
3596
|
] })
|
|
3610
3597
|
] }) })
|
|
3611
3598
|
] });
|
|
@@ -3614,10 +3601,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
3614
3601
|
var PopupPicker_default = PopupPicker;
|
|
3615
3602
|
|
|
3616
3603
|
// src/components/Divider/Divider.tsx
|
|
3617
|
-
import { jsx as
|
|
3604
|
+
import { jsx as jsx320 } from "react/jsx-runtime";
|
|
3618
3605
|
var Divider = (props) => {
|
|
3619
3606
|
const { orientation = "horizontal" } = props;
|
|
3620
|
-
return /* @__PURE__ */
|
|
3607
|
+
return /* @__PURE__ */ jsx320(
|
|
3621
3608
|
"div",
|
|
3622
3609
|
{
|
|
3623
3610
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -3630,15 +3617,15 @@ Divider.displayName = "Divider";
|
|
|
3630
3617
|
var Divider_default = Divider;
|
|
3631
3618
|
|
|
3632
3619
|
// src/components/Drawer/Drawer.tsx
|
|
3633
|
-
import
|
|
3620
|
+
import React17 from "react";
|
|
3634
3621
|
import { createPortal as createPortal2 } from "react-dom";
|
|
3635
|
-
import { jsx as
|
|
3622
|
+
import { jsx as jsx321, jsxs as jsxs205 } from "react/jsx-runtime";
|
|
3636
3623
|
var ANIMATION_DURATION_MS2 = 250;
|
|
3637
3624
|
var Drawer = (props) => {
|
|
3638
3625
|
const { isOpen, onClose, placement = "right", size = "md", title, children } = props;
|
|
3639
|
-
const [mounted, setMounted] =
|
|
3640
|
-
const [visible, setVisible] =
|
|
3641
|
-
|
|
3626
|
+
const [mounted, setMounted] = React17.useState(false);
|
|
3627
|
+
const [visible, setVisible] = React17.useState(false);
|
|
3628
|
+
React17.useEffect(() => {
|
|
3642
3629
|
if (isOpen) {
|
|
3643
3630
|
setMounted(true);
|
|
3644
3631
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3652,7 +3639,7 @@ var Drawer = (props) => {
|
|
|
3652
3639
|
if (!mounted) return null;
|
|
3653
3640
|
const stateClass = visible ? "enter" : "exit";
|
|
3654
3641
|
return createPortal2(
|
|
3655
|
-
/* @__PURE__ */
|
|
3642
|
+
/* @__PURE__ */ jsx321(
|
|
3656
3643
|
"div",
|
|
3657
3644
|
{
|
|
3658
3645
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
@@ -3666,10 +3653,10 @@ var Drawer = (props) => {
|
|
|
3666
3653
|
onClick: (e) => e.stopPropagation(),
|
|
3667
3654
|
children: [
|
|
3668
3655
|
title && /* @__PURE__ */ jsxs205("div", { className: "drawer-header", children: [
|
|
3669
|
-
/* @__PURE__ */
|
|
3670
|
-
/* @__PURE__ */
|
|
3656
|
+
/* @__PURE__ */ jsx321("span", { className: "drawer-title", children: title }),
|
|
3657
|
+
/* @__PURE__ */ jsx321("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
3671
3658
|
] }),
|
|
3672
|
-
/* @__PURE__ */
|
|
3659
|
+
/* @__PURE__ */ jsx321("div", { className: "drawer-body", children })
|
|
3673
3660
|
]
|
|
3674
3661
|
}
|
|
3675
3662
|
)
|
|
@@ -3682,16 +3669,25 @@ Drawer.displayName = "Drawer";
|
|
|
3682
3669
|
var Drawer_default = Drawer;
|
|
3683
3670
|
|
|
3684
3671
|
// src/components/Dropdown/Dropdown.tsx
|
|
3685
|
-
import
|
|
3672
|
+
import React20 from "react";
|
|
3673
|
+
|
|
3674
|
+
// src/tokens/hooks/Portal.tsx
|
|
3675
|
+
import ReactDOM from "react-dom";
|
|
3676
|
+
var Portal = ({ children }) => {
|
|
3677
|
+
if (typeof document === "undefined") return null;
|
|
3678
|
+
return ReactDOM.createPortal(children, document.body);
|
|
3679
|
+
};
|
|
3680
|
+
Portal.displayName = "Portal";
|
|
3681
|
+
var Portal_default = Portal;
|
|
3686
3682
|
|
|
3687
3683
|
// src/tokens/hooks/useAutoPosition.ts
|
|
3688
|
-
import
|
|
3684
|
+
import React18 from "react";
|
|
3689
3685
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
3690
|
-
const [position, setPosition] =
|
|
3686
|
+
const [position, setPosition] = React18.useState({
|
|
3691
3687
|
position: {},
|
|
3692
3688
|
direction: "bottom"
|
|
3693
3689
|
});
|
|
3694
|
-
const calculatePosition =
|
|
3690
|
+
const calculatePosition = React18.useCallback(() => {
|
|
3695
3691
|
if (!triggerRef.current || !popRef.current) return;
|
|
3696
3692
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
3697
3693
|
const popW = popRef.current.offsetWidth;
|
|
@@ -3718,13 +3714,13 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3718
3714
|
direction
|
|
3719
3715
|
});
|
|
3720
3716
|
}, [triggerRef, popRef]);
|
|
3721
|
-
|
|
3717
|
+
React18.useLayoutEffect(() => {
|
|
3722
3718
|
if (!enabled) return;
|
|
3723
3719
|
calculatePosition();
|
|
3724
3720
|
const raf = requestAnimationFrame(calculatePosition);
|
|
3725
3721
|
return () => cancelAnimationFrame(raf);
|
|
3726
3722
|
}, [calculatePosition, enabled]);
|
|
3727
|
-
|
|
3723
|
+
React18.useEffect(() => {
|
|
3728
3724
|
if (!enabled || !popRef.current) return;
|
|
3729
3725
|
const observer = new ResizeObserver(() => {
|
|
3730
3726
|
calculatePosition();
|
|
@@ -3732,7 +3728,7 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3732
3728
|
observer.observe(popRef.current);
|
|
3733
3729
|
return () => observer.disconnect();
|
|
3734
3730
|
}, [calculatePosition, enabled, popRef]);
|
|
3735
|
-
|
|
3731
|
+
React18.useEffect(() => {
|
|
3736
3732
|
if (!enabled) return;
|
|
3737
3733
|
window.addEventListener("resize", calculatePosition);
|
|
3738
3734
|
window.addEventListener("scroll", calculatePosition, true);
|
|
@@ -3746,9 +3742,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3746
3742
|
var useAutoPosition_default = useAutoPosition;
|
|
3747
3743
|
|
|
3748
3744
|
// src/tokens/hooks/useClickOutside.ts
|
|
3749
|
-
import
|
|
3745
|
+
import React19 from "react";
|
|
3750
3746
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
3751
|
-
|
|
3747
|
+
React19.useEffect(() => {
|
|
3752
3748
|
if (!enabled) return;
|
|
3753
3749
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
3754
3750
|
const listener = (event) => {
|
|
@@ -3771,17 +3767,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
3771
3767
|
var useClickOutside_default = useClickOutside;
|
|
3772
3768
|
|
|
3773
3769
|
// src/components/Dropdown/Dropdown.tsx
|
|
3774
|
-
import { jsx as
|
|
3770
|
+
import { jsx as jsx322, jsxs as jsxs206 } from "react/jsx-runtime";
|
|
3775
3771
|
var Dropdown = (props) => {
|
|
3776
3772
|
const { items, children } = props;
|
|
3777
|
-
const [isOpen, setIsOpen] =
|
|
3778
|
-
const [mounted, setMounted] =
|
|
3779
|
-
const [visible, setVisible] =
|
|
3780
|
-
const triggerRef =
|
|
3781
|
-
const menuRef =
|
|
3773
|
+
const [isOpen, setIsOpen] = React20.useState(false);
|
|
3774
|
+
const [mounted, setMounted] = React20.useState(false);
|
|
3775
|
+
const [visible, setVisible] = React20.useState(false);
|
|
3776
|
+
const triggerRef = React20.useRef(null);
|
|
3777
|
+
const menuRef = React20.useRef(null);
|
|
3782
3778
|
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
3783
3779
|
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
3784
|
-
|
|
3780
|
+
React20.useEffect(() => {
|
|
3785
3781
|
if (isOpen) {
|
|
3786
3782
|
setMounted(true);
|
|
3787
3783
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3797,7 +3793,7 @@ var Dropdown = (props) => {
|
|
|
3797
3793
|
setIsOpen(false);
|
|
3798
3794
|
};
|
|
3799
3795
|
return /* @__PURE__ */ jsxs206("div", { className: "lib-xplat-dropdown", children: [
|
|
3800
|
-
/* @__PURE__ */
|
|
3796
|
+
/* @__PURE__ */ jsx322(
|
|
3801
3797
|
"div",
|
|
3802
3798
|
{
|
|
3803
3799
|
ref: triggerRef,
|
|
@@ -3806,14 +3802,14 @@ var Dropdown = (props) => {
|
|
|
3806
3802
|
children
|
|
3807
3803
|
}
|
|
3808
3804
|
),
|
|
3809
|
-
mounted && /* @__PURE__ */
|
|
3805
|
+
mounted && /* @__PURE__ */ jsx322(Portal_default, { children: /* @__PURE__ */ jsx322(
|
|
3810
3806
|
"div",
|
|
3811
3807
|
{
|
|
3812
3808
|
ref: menuRef,
|
|
3813
3809
|
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
3814
3810
|
style: { top: position.top, left: position.left },
|
|
3815
3811
|
role: "menu",
|
|
3816
|
-
children: items.map((item) => /* @__PURE__ */
|
|
3812
|
+
children: items.map((item) => /* @__PURE__ */ jsx322(
|
|
3817
3813
|
"button",
|
|
3818
3814
|
{
|
|
3819
3815
|
className: clsx_default("dropdown-item", {
|
|
@@ -3835,8 +3831,8 @@ Dropdown.displayName = "Dropdown";
|
|
|
3835
3831
|
var Dropdown_default = Dropdown;
|
|
3836
3832
|
|
|
3837
3833
|
// src/components/Editor/Editor.tsx
|
|
3838
|
-
import
|
|
3839
|
-
import { jsx as
|
|
3834
|
+
import React21 from "react";
|
|
3835
|
+
import { jsx as jsx323, jsxs as jsxs207 } from "react/jsx-runtime";
|
|
3840
3836
|
var DEFAULT_TOOLBAR = [
|
|
3841
3837
|
"bold",
|
|
3842
3838
|
"italic",
|
|
@@ -3943,21 +3939,21 @@ var Editor = (props) => {
|
|
|
3943
3939
|
onImageUpload,
|
|
3944
3940
|
minHeight = 200
|
|
3945
3941
|
} = props;
|
|
3946
|
-
const editorRef =
|
|
3947
|
-
const lastRangeRef =
|
|
3948
|
-
const composingRef =
|
|
3949
|
-
const [isFocused, setIsFocused] =
|
|
3950
|
-
const [isEmpty, setIsEmpty] =
|
|
3951
|
-
const [activeFormats, setActiveFormats] =
|
|
3952
|
-
const [slashOpen, setSlashOpen] =
|
|
3953
|
-
const [slashFilter, setSlashFilter] =
|
|
3954
|
-
const [slashIdx, setSlashIdx] =
|
|
3955
|
-
const [slashPos, setSlashPos] =
|
|
3956
|
-
const slashStartRangeRef =
|
|
3957
|
-
const [linkOpen, setLinkOpen] =
|
|
3958
|
-
const [linkValue, setLinkValue] =
|
|
3959
|
-
const [linkPos, setLinkPos] =
|
|
3960
|
-
|
|
3942
|
+
const editorRef = React21.useRef(null);
|
|
3943
|
+
const lastRangeRef = React21.useRef(null);
|
|
3944
|
+
const composingRef = React21.useRef(false);
|
|
3945
|
+
const [isFocused, setIsFocused] = React21.useState(false);
|
|
3946
|
+
const [isEmpty, setIsEmpty] = React21.useState(!value);
|
|
3947
|
+
const [activeFormats, setActiveFormats] = React21.useState(/* @__PURE__ */ new Set());
|
|
3948
|
+
const [slashOpen, setSlashOpen] = React21.useState(false);
|
|
3949
|
+
const [slashFilter, setSlashFilter] = React21.useState("");
|
|
3950
|
+
const [slashIdx, setSlashIdx] = React21.useState(0);
|
|
3951
|
+
const [slashPos, setSlashPos] = React21.useState({ top: 0, left: 0 });
|
|
3952
|
+
const slashStartRangeRef = React21.useRef(null);
|
|
3953
|
+
const [linkOpen, setLinkOpen] = React21.useState(false);
|
|
3954
|
+
const [linkValue, setLinkValue] = React21.useState("");
|
|
3955
|
+
const [linkPos, setLinkPos] = React21.useState({ top: 0, left: 0 });
|
|
3956
|
+
React21.useEffect(() => {
|
|
3961
3957
|
if (!editorRef.current) return;
|
|
3962
3958
|
if (editorRef.current.innerHTML !== value) {
|
|
3963
3959
|
editorRef.current.innerHTML = sanitizeHtml(value || "");
|
|
@@ -4071,7 +4067,7 @@ var Editor = (props) => {
|
|
|
4071
4067
|
setSlashIdx(0);
|
|
4072
4068
|
slashStartRangeRef.current = null;
|
|
4073
4069
|
};
|
|
4074
|
-
const filteredSlashItems =
|
|
4070
|
+
const filteredSlashItems = React21.useMemo(() => {
|
|
4075
4071
|
if (!slashFilter) return SLASH_ITEMS;
|
|
4076
4072
|
const f = slashFilter.toLowerCase();
|
|
4077
4073
|
return SLASH_ITEMS.filter((it) => it.label.toLowerCase().includes(f) || it.key.includes(f));
|
|
@@ -4357,7 +4353,7 @@ var Editor = (props) => {
|
|
|
4357
4353
|
}
|
|
4358
4354
|
};
|
|
4359
4355
|
return /* @__PURE__ */ jsxs207("div", { className: clsx_default("lib-xplat-editor", isFocused && "focused", readOnly && "readonly"), children: [
|
|
4360
|
-
!readOnly && /* @__PURE__ */
|
|
4356
|
+
!readOnly && /* @__PURE__ */ jsx323(
|
|
4361
4357
|
EditorToolbar,
|
|
4362
4358
|
{
|
|
4363
4359
|
items: toolbar,
|
|
@@ -4366,8 +4362,8 @@ var Editor = (props) => {
|
|
|
4366
4362
|
}
|
|
4367
4363
|
),
|
|
4368
4364
|
/* @__PURE__ */ jsxs207("div", { className: "lib-xplat-editor__content", style: { minHeight }, children: [
|
|
4369
|
-
isEmpty && !isFocused && /* @__PURE__ */
|
|
4370
|
-
/* @__PURE__ */
|
|
4365
|
+
isEmpty && !isFocused && /* @__PURE__ */ jsx323("div", { className: "lib-xplat-editor__placeholder", children: placeholder }),
|
|
4366
|
+
/* @__PURE__ */ jsx323(
|
|
4371
4367
|
"div",
|
|
4372
4368
|
{
|
|
4373
4369
|
ref: editorRef,
|
|
@@ -4386,7 +4382,7 @@ var Editor = (props) => {
|
|
|
4386
4382
|
spellCheck: true
|
|
4387
4383
|
}
|
|
4388
4384
|
),
|
|
4389
|
-
slashOpen && filteredSlashItems.length > 0 && /* @__PURE__ */
|
|
4385
|
+
slashOpen && filteredSlashItems.length > 0 && /* @__PURE__ */ jsx323(
|
|
4390
4386
|
SlashMenu,
|
|
4391
4387
|
{
|
|
4392
4388
|
position: slashPos,
|
|
@@ -4396,7 +4392,7 @@ var Editor = (props) => {
|
|
|
4396
4392
|
onClose: closeSlashMenu
|
|
4397
4393
|
}
|
|
4398
4394
|
),
|
|
4399
|
-
linkOpen && /* @__PURE__ */
|
|
4395
|
+
linkOpen && /* @__PURE__ */ jsx323(
|
|
4400
4396
|
LinkPopover,
|
|
4401
4397
|
{
|
|
4402
4398
|
position: linkPos,
|
|
@@ -4448,7 +4444,7 @@ var isActive = (item, active) => {
|
|
|
4448
4444
|
return active.has(item);
|
|
4449
4445
|
};
|
|
4450
4446
|
var EditorToolbar = ({ items, active, onAction }) => {
|
|
4451
|
-
return /* @__PURE__ */
|
|
4447
|
+
return /* @__PURE__ */ jsx323("div", { className: "lib-xplat-editor__toolbar", children: items.map((item) => /* @__PURE__ */ jsx323(
|
|
4452
4448
|
"button",
|
|
4453
4449
|
{
|
|
4454
4450
|
type: "button",
|
|
@@ -4464,7 +4460,7 @@ var EditorToolbar = ({ items, active, onAction }) => {
|
|
|
4464
4460
|
)) });
|
|
4465
4461
|
};
|
|
4466
4462
|
var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
4467
|
-
|
|
4463
|
+
React21.useEffect(() => {
|
|
4468
4464
|
const handleClickOutside = (e) => {
|
|
4469
4465
|
const target = e.target;
|
|
4470
4466
|
const menu = document.querySelector(".lib-xplat-editor__slash-menu");
|
|
@@ -4473,7 +4469,7 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
4473
4469
|
window.addEventListener("mousedown", handleClickOutside);
|
|
4474
4470
|
return () => window.removeEventListener("mousedown", handleClickOutside);
|
|
4475
4471
|
}, [onClose]);
|
|
4476
|
-
return /* @__PURE__ */
|
|
4472
|
+
return /* @__PURE__ */ jsx323(
|
|
4477
4473
|
"div",
|
|
4478
4474
|
{
|
|
4479
4475
|
className: "lib-xplat-editor__slash-menu",
|
|
@@ -4488,8 +4484,8 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
4488
4484
|
onSelect(item);
|
|
4489
4485
|
},
|
|
4490
4486
|
children: [
|
|
4491
|
-
/* @__PURE__ */
|
|
4492
|
-
item.hint && /* @__PURE__ */
|
|
4487
|
+
/* @__PURE__ */ jsx323("span", { className: "label", children: item.label }),
|
|
4488
|
+
item.hint && /* @__PURE__ */ jsx323("span", { className: "hint", children: item.hint })
|
|
4493
4489
|
]
|
|
4494
4490
|
},
|
|
4495
4491
|
item.key
|
|
@@ -4498,8 +4494,8 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
4498
4494
|
);
|
|
4499
4495
|
};
|
|
4500
4496
|
var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
4501
|
-
const inputRef =
|
|
4502
|
-
|
|
4497
|
+
const inputRef = React21.useRef(null);
|
|
4498
|
+
React21.useEffect(() => {
|
|
4503
4499
|
inputRef.current?.focus();
|
|
4504
4500
|
}, []);
|
|
4505
4501
|
return /* @__PURE__ */ jsxs207(
|
|
@@ -4508,7 +4504,7 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
4508
4504
|
className: "lib-xplat-editor__link-popover",
|
|
4509
4505
|
style: { top: position.top, left: position.left },
|
|
4510
4506
|
children: [
|
|
4511
|
-
/* @__PURE__ */
|
|
4507
|
+
/* @__PURE__ */ jsx323(
|
|
4512
4508
|
"input",
|
|
4513
4509
|
{
|
|
4514
4510
|
ref: inputRef,
|
|
@@ -4528,11 +4524,11 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
4528
4524
|
}
|
|
4529
4525
|
}
|
|
4530
4526
|
),
|
|
4531
|
-
/* @__PURE__ */
|
|
4527
|
+
/* @__PURE__ */ jsx323("button", { type: "button", onMouseDown: (e) => {
|
|
4532
4528
|
e.preventDefault();
|
|
4533
4529
|
onConfirm();
|
|
4534
4530
|
}, children: "\uC801\uC6A9" }),
|
|
4535
|
-
/* @__PURE__ */
|
|
4531
|
+
/* @__PURE__ */ jsx323("button", { type: "button", onMouseDown: (e) => {
|
|
4536
4532
|
e.preventDefault();
|
|
4537
4533
|
onClose();
|
|
4538
4534
|
}, children: "\uCDE8\uC18C" })
|
|
@@ -4542,23 +4538,23 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
4542
4538
|
};
|
|
4543
4539
|
|
|
4544
4540
|
// src/components/EmptyState/EmptyState.tsx
|
|
4545
|
-
import { jsx as
|
|
4541
|
+
import { jsx as jsx324, jsxs as jsxs208 } from "react/jsx-runtime";
|
|
4546
4542
|
var EmptyState = (props) => {
|
|
4547
4543
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
4548
4544
|
return /* @__PURE__ */ jsxs208("div", { className: "lib-xplat-empty-state", children: [
|
|
4549
|
-
icon && /* @__PURE__ */
|
|
4550
|
-
!icon && /* @__PURE__ */
|
|
4551
|
-
/* @__PURE__ */
|
|
4552
|
-
description && /* @__PURE__ */
|
|
4553
|
-
action && /* @__PURE__ */
|
|
4545
|
+
icon && /* @__PURE__ */ jsx324("div", { className: "empty-icon", children: icon }),
|
|
4546
|
+
!icon && /* @__PURE__ */ jsx324("div", { className: "empty-icon", children: /* @__PURE__ */ jsx324("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx324("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" }) }) }),
|
|
4547
|
+
/* @__PURE__ */ jsx324("p", { className: "empty-title", children: title }),
|
|
4548
|
+
description && /* @__PURE__ */ jsx324("p", { className: "empty-description", children: description }),
|
|
4549
|
+
action && /* @__PURE__ */ jsx324("div", { className: "empty-action", children: action })
|
|
4554
4550
|
] });
|
|
4555
4551
|
};
|
|
4556
4552
|
EmptyState.displayName = "EmptyState";
|
|
4557
4553
|
var EmptyState_default = EmptyState;
|
|
4558
4554
|
|
|
4559
4555
|
// src/components/FileUpload/FileUpload.tsx
|
|
4560
|
-
import
|
|
4561
|
-
import { jsx as
|
|
4556
|
+
import React22 from "react";
|
|
4557
|
+
import { jsx as jsx325, jsxs as jsxs209 } from "react/jsx-runtime";
|
|
4562
4558
|
var FileUpload = (props) => {
|
|
4563
4559
|
const {
|
|
4564
4560
|
accept,
|
|
@@ -4568,8 +4564,8 @@ var FileUpload = (props) => {
|
|
|
4568
4564
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
4569
4565
|
description
|
|
4570
4566
|
} = props;
|
|
4571
|
-
const [isDragOver, setIsDragOver] =
|
|
4572
|
-
const inputRef =
|
|
4567
|
+
const [isDragOver, setIsDragOver] = React22.useState(false);
|
|
4568
|
+
const inputRef = React22.useRef(null);
|
|
4573
4569
|
const handleFiles = (fileList) => {
|
|
4574
4570
|
let files = Array.from(fileList);
|
|
4575
4571
|
if (maxSize) {
|
|
@@ -4608,7 +4604,7 @@ var FileUpload = (props) => {
|
|
|
4608
4604
|
onDragLeave: handleDragLeave,
|
|
4609
4605
|
onClick: () => inputRef.current?.click(),
|
|
4610
4606
|
children: [
|
|
4611
|
-
/* @__PURE__ */
|
|
4607
|
+
/* @__PURE__ */ jsx325(
|
|
4612
4608
|
"input",
|
|
4613
4609
|
{
|
|
4614
4610
|
ref: inputRef,
|
|
@@ -4618,9 +4614,9 @@ var FileUpload = (props) => {
|
|
|
4618
4614
|
onChange: handleChange
|
|
4619
4615
|
}
|
|
4620
4616
|
),
|
|
4621
|
-
/* @__PURE__ */
|
|
4622
|
-
/* @__PURE__ */
|
|
4623
|
-
description && /* @__PURE__ */
|
|
4617
|
+
/* @__PURE__ */ jsx325("div", { className: "upload-icon", children: /* @__PURE__ */ jsx325(UploadIcon_default, {}) }),
|
|
4618
|
+
/* @__PURE__ */ jsx325("p", { className: "upload-label", children: label }),
|
|
4619
|
+
description && /* @__PURE__ */ jsx325("p", { className: "upload-description", children: description })
|
|
4624
4620
|
]
|
|
4625
4621
|
}
|
|
4626
4622
|
);
|
|
@@ -4629,10 +4625,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
4629
4625
|
var FileUpload_default = FileUpload;
|
|
4630
4626
|
|
|
4631
4627
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
4632
|
-
import
|
|
4628
|
+
import React24 from "react";
|
|
4633
4629
|
|
|
4634
4630
|
// src/components/HtmlTypeWriter/utils.ts
|
|
4635
|
-
import
|
|
4631
|
+
import React23 from "react";
|
|
4636
4632
|
var voidTags = /* @__PURE__ */ new Set([
|
|
4637
4633
|
"br",
|
|
4638
4634
|
"img",
|
|
@@ -4700,41 +4696,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
4700
4696
|
props[attr.name] = attr.value;
|
|
4701
4697
|
});
|
|
4702
4698
|
if (voidTags.has(tag)) {
|
|
4703
|
-
return
|
|
4699
|
+
return React23.createElement(tag, props);
|
|
4704
4700
|
}
|
|
4705
4701
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
4706
|
-
return
|
|
4702
|
+
return React23.createElement(tag, props, ...children);
|
|
4707
4703
|
};
|
|
4708
4704
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
4709
4705
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
4710
4706
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
4711
|
-
return node == null ? null :
|
|
4707
|
+
return node == null ? null : React23.createElement(React23.Fragment, { key: idx }, node);
|
|
4712
4708
|
}).filter(Boolean);
|
|
4713
4709
|
return nodes.length === 0 ? null : nodes;
|
|
4714
4710
|
};
|
|
4715
4711
|
|
|
4716
4712
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
4717
|
-
import { jsx as
|
|
4713
|
+
import { jsx as jsx326 } from "react/jsx-runtime";
|
|
4718
4714
|
var HtmlTypeWriter = ({
|
|
4719
4715
|
html,
|
|
4720
4716
|
duration = 20,
|
|
4721
4717
|
onDone,
|
|
4722
4718
|
onChange
|
|
4723
4719
|
}) => {
|
|
4724
|
-
const [typedLen, setTypedLen] =
|
|
4725
|
-
const doneCalledRef =
|
|
4726
|
-
const { doc, rangeMap, totalLength } =
|
|
4720
|
+
const [typedLen, setTypedLen] = React24.useState(0);
|
|
4721
|
+
const doneCalledRef = React24.useRef(false);
|
|
4722
|
+
const { doc, rangeMap, totalLength } = React24.useMemo(() => {
|
|
4727
4723
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
4728
4724
|
const decoded = decodeHtmlEntities(html);
|
|
4729
4725
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
4730
4726
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
4731
4727
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
4732
4728
|
}, [html]);
|
|
4733
|
-
|
|
4729
|
+
React24.useEffect(() => {
|
|
4734
4730
|
setTypedLen(0);
|
|
4735
4731
|
doneCalledRef.current = false;
|
|
4736
4732
|
}, [html]);
|
|
4737
|
-
|
|
4733
|
+
React24.useEffect(() => {
|
|
4738
4734
|
if (!totalLength) return;
|
|
4739
4735
|
if (typedLen >= totalLength) return;
|
|
4740
4736
|
const timer = window.setInterval(() => {
|
|
@@ -4742,33 +4738,33 @@ var HtmlTypeWriter = ({
|
|
|
4742
4738
|
}, duration);
|
|
4743
4739
|
return () => window.clearInterval(timer);
|
|
4744
4740
|
}, [typedLen, totalLength, duration]);
|
|
4745
|
-
|
|
4741
|
+
React24.useEffect(() => {
|
|
4746
4742
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
4747
4743
|
onChange?.();
|
|
4748
4744
|
}
|
|
4749
4745
|
}, [typedLen, totalLength, onChange]);
|
|
4750
|
-
|
|
4746
|
+
React24.useEffect(() => {
|
|
4751
4747
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
4752
4748
|
doneCalledRef.current = true;
|
|
4753
4749
|
onDone?.();
|
|
4754
4750
|
}
|
|
4755
4751
|
}, [typedLen, totalLength, onDone]);
|
|
4756
|
-
const parsed =
|
|
4752
|
+
const parsed = React24.useMemo(
|
|
4757
4753
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
4758
4754
|
[doc, typedLen, rangeMap]
|
|
4759
4755
|
);
|
|
4760
|
-
return /* @__PURE__ */
|
|
4756
|
+
return /* @__PURE__ */ jsx326("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
4761
4757
|
};
|
|
4762
4758
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
4763
4759
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
4764
4760
|
|
|
4765
4761
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
4766
|
-
import
|
|
4767
|
-
import { jsx as
|
|
4762
|
+
import React25 from "react";
|
|
4763
|
+
import { jsx as jsx327, jsxs as jsxs210 } from "react/jsx-runtime";
|
|
4768
4764
|
var ImageSelector = (props) => {
|
|
4769
4765
|
const { value, label, onChange } = props;
|
|
4770
|
-
const [previewUrl, setPreviewUrl] =
|
|
4771
|
-
|
|
4766
|
+
const [previewUrl, setPreviewUrl] = React25.useState();
|
|
4767
|
+
React25.useEffect(() => {
|
|
4772
4768
|
if (!value) {
|
|
4773
4769
|
setPreviewUrl(void 0);
|
|
4774
4770
|
return;
|
|
@@ -4777,7 +4773,7 @@ var ImageSelector = (props) => {
|
|
|
4777
4773
|
setPreviewUrl(url);
|
|
4778
4774
|
return () => URL.revokeObjectURL(url);
|
|
4779
4775
|
}, [value]);
|
|
4780
|
-
const inputRef =
|
|
4776
|
+
const inputRef = React25.useRef(null);
|
|
4781
4777
|
const handleFileChange = (e) => {
|
|
4782
4778
|
const selectedFile = e.target.files?.[0];
|
|
4783
4779
|
if (selectedFile) {
|
|
@@ -4791,7 +4787,7 @@ var ImageSelector = (props) => {
|
|
|
4791
4787
|
inputRef.current?.click();
|
|
4792
4788
|
};
|
|
4793
4789
|
return /* @__PURE__ */ jsxs210("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
4794
|
-
/* @__PURE__ */
|
|
4790
|
+
/* @__PURE__ */ jsx327(
|
|
4795
4791
|
"input",
|
|
4796
4792
|
{
|
|
4797
4793
|
type: "file",
|
|
@@ -4802,12 +4798,12 @@ var ImageSelector = (props) => {
|
|
|
4802
4798
|
}
|
|
4803
4799
|
),
|
|
4804
4800
|
value && /* @__PURE__ */ jsxs210("div", { className: "action-bar", children: [
|
|
4805
|
-
/* @__PURE__ */
|
|
4806
|
-
/* @__PURE__ */
|
|
4801
|
+
/* @__PURE__ */ jsx327("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ jsx327(UploadIcon_default, {}) }),
|
|
4802
|
+
/* @__PURE__ */ jsx327("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ jsx327(DeleteIcon_default, {}) })
|
|
4807
4803
|
] }),
|
|
4808
|
-
/* @__PURE__ */
|
|
4809
|
-
/* @__PURE__ */
|
|
4810
|
-
/* @__PURE__ */
|
|
4804
|
+
/* @__PURE__ */ jsx327("div", { className: "content", children: previewUrl ? /* @__PURE__ */ jsx327("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ jsxs210("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
|
|
4805
|
+
/* @__PURE__ */ jsx327("div", { className: "icon-wrapper", children: /* @__PURE__ */ jsx327(ImageIcon_default, {}) }),
|
|
4806
|
+
/* @__PURE__ */ jsx327("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
4811
4807
|
] }) })
|
|
4812
4808
|
] });
|
|
4813
4809
|
};
|
|
@@ -4815,10 +4811,10 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
4815
4811
|
var ImageSelector_default = ImageSelector;
|
|
4816
4812
|
|
|
4817
4813
|
// src/components/Link/Link.tsx
|
|
4818
|
-
import { jsx as
|
|
4814
|
+
import { jsx as jsx328 } from "react/jsx-runtime";
|
|
4819
4815
|
var Link = (props) => {
|
|
4820
4816
|
const { children, href, underline = "always", target, rel, ...rest } = props;
|
|
4821
|
-
return /* @__PURE__ */
|
|
4817
|
+
return /* @__PURE__ */ jsx328(
|
|
4822
4818
|
"a",
|
|
4823
4819
|
{
|
|
4824
4820
|
className: clsx_default("lib-xplat-link", `underline-${underline}`),
|
|
@@ -4834,10 +4830,10 @@ Link.displayName = "Link";
|
|
|
4834
4830
|
var Link_default = Link;
|
|
4835
4831
|
|
|
4836
4832
|
// src/components/LinkButton/LinkButton.tsx
|
|
4837
|
-
import { jsx as
|
|
4833
|
+
import { jsx as jsx329 } from "react/jsx-runtime";
|
|
4838
4834
|
var LinkButton = (props) => {
|
|
4839
4835
|
const { children, href, type = "primary", size = "md", target, rel, ...rest } = props;
|
|
4840
|
-
return /* @__PURE__ */
|
|
4836
|
+
return /* @__PURE__ */ jsx329(
|
|
4841
4837
|
"a",
|
|
4842
4838
|
{
|
|
4843
4839
|
className: clsx_default("lib-xplat-button", type, size),
|
|
@@ -4853,7 +4849,7 @@ LinkButton.displayName = "LinkButton";
|
|
|
4853
4849
|
var LinkButton_default = LinkButton;
|
|
4854
4850
|
|
|
4855
4851
|
// src/components/NotificationBadge/NotificationBadge.tsx
|
|
4856
|
-
import { jsx as
|
|
4852
|
+
import { jsx as jsx330, jsxs as jsxs211 } from "react/jsx-runtime";
|
|
4857
4853
|
var NotificationBadge = (props) => {
|
|
4858
4854
|
const {
|
|
4859
4855
|
children,
|
|
@@ -4867,14 +4863,14 @@ var NotificationBadge = (props) => {
|
|
|
4867
4863
|
const displayCount = count !== void 0 && count > maxCount ? `${maxCount}+` : count;
|
|
4868
4864
|
return /* @__PURE__ */ jsxs211("div", { className: clsx_default("lib-xplat-notification-badge", size), children: [
|
|
4869
4865
|
children,
|
|
4870
|
-
showBadge && /* @__PURE__ */
|
|
4866
|
+
showBadge && /* @__PURE__ */ jsx330("span", { className: clsx_default("badge-indicator", type, { dot }), children: !dot && displayCount })
|
|
4871
4867
|
] });
|
|
4872
4868
|
};
|
|
4873
4869
|
NotificationBadge.displayName = "NotificationBadge";
|
|
4874
4870
|
var NotificationBadge_default = NotificationBadge;
|
|
4875
4871
|
|
|
4876
4872
|
// src/components/Pagination/Pagination.tsx
|
|
4877
|
-
import { jsx as
|
|
4873
|
+
import { jsx as jsx331, jsxs as jsxs212 } from "react/jsx-runtime";
|
|
4878
4874
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
4879
4875
|
const totalNumbers = siblingCount * 2 + 5;
|
|
4880
4876
|
if (totalPages <= totalNumbers) {
|
|
@@ -4918,18 +4914,18 @@ var Pagination = (props) => {
|
|
|
4918
4914
|
}
|
|
4919
4915
|
};
|
|
4920
4916
|
return /* @__PURE__ */ jsxs212("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
4921
|
-
/* @__PURE__ */
|
|
4917
|
+
/* @__PURE__ */ jsx331(
|
|
4922
4918
|
"button",
|
|
4923
4919
|
{
|
|
4924
4920
|
className: "page-btn prev",
|
|
4925
4921
|
disabled: current <= 1,
|
|
4926
4922
|
onClick: () => handleClick(current - 1),
|
|
4927
4923
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
4928
|
-
children: /* @__PURE__ */
|
|
4924
|
+
children: /* @__PURE__ */ jsx331(ChevronLeftIcon_default, {})
|
|
4929
4925
|
}
|
|
4930
4926
|
),
|
|
4931
4927
|
pages.map(
|
|
4932
|
-
(page, i) => page === "..." ? /* @__PURE__ */
|
|
4928
|
+
(page, i) => page === "..." ? /* @__PURE__ */ jsx331("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ jsx331(
|
|
4933
4929
|
"button",
|
|
4934
4930
|
{
|
|
4935
4931
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -4940,14 +4936,14 @@ var Pagination = (props) => {
|
|
|
4940
4936
|
page
|
|
4941
4937
|
)
|
|
4942
4938
|
),
|
|
4943
|
-
/* @__PURE__ */
|
|
4939
|
+
/* @__PURE__ */ jsx331(
|
|
4944
4940
|
"button",
|
|
4945
4941
|
{
|
|
4946
4942
|
className: "page-btn next",
|
|
4947
4943
|
disabled: current >= totalPages,
|
|
4948
4944
|
onClick: () => handleClick(current + 1),
|
|
4949
4945
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
4950
|
-
children: /* @__PURE__ */
|
|
4946
|
+
children: /* @__PURE__ */ jsx331(ChevronRightIcon_default, {})
|
|
4951
4947
|
}
|
|
4952
4948
|
)
|
|
4953
4949
|
] });
|
|
@@ -4956,17 +4952,17 @@ Pagination.displayName = "Pagination";
|
|
|
4956
4952
|
var Pagination_default = Pagination;
|
|
4957
4953
|
|
|
4958
4954
|
// src/components/PopOver/PopOver.tsx
|
|
4959
|
-
import
|
|
4960
|
-
import { jsx as
|
|
4955
|
+
import React26 from "react";
|
|
4956
|
+
import { jsx as jsx332, jsxs as jsxs213 } from "react/jsx-runtime";
|
|
4961
4957
|
var PopOver = (props) => {
|
|
4962
4958
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
4963
|
-
const popRef =
|
|
4964
|
-
const triggerRef =
|
|
4965
|
-
const [localOpen, setLocalOpen] =
|
|
4966
|
-
const [eventTrigger, setEventTrigger] =
|
|
4959
|
+
const popRef = React26.useRef(null);
|
|
4960
|
+
const triggerRef = React26.useRef(null);
|
|
4961
|
+
const [localOpen, setLocalOpen] = React26.useState(false);
|
|
4962
|
+
const [eventTrigger, setEventTrigger] = React26.useState(false);
|
|
4967
4963
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
4968
4964
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
4969
|
-
|
|
4965
|
+
React26.useEffect(() => {
|
|
4970
4966
|
if (isOpen) {
|
|
4971
4967
|
setLocalOpen(isOpen);
|
|
4972
4968
|
setTimeout(() => {
|
|
@@ -4989,7 +4985,7 @@ var PopOver = (props) => {
|
|
|
4989
4985
|
},
|
|
4990
4986
|
children: [
|
|
4991
4987
|
children,
|
|
4992
|
-
localOpen && /* @__PURE__ */
|
|
4988
|
+
localOpen && /* @__PURE__ */ jsx332(Portal_default, { children: /* @__PURE__ */ jsx332(
|
|
4993
4989
|
"div",
|
|
4994
4990
|
{
|
|
4995
4991
|
className: clsx_default(
|
|
@@ -5012,7 +5008,7 @@ PopOver.displayName = "PopOver";
|
|
|
5012
5008
|
var PopOver_default = PopOver;
|
|
5013
5009
|
|
|
5014
5010
|
// src/components/Progress/Progress.tsx
|
|
5015
|
-
import { jsx as
|
|
5011
|
+
import { jsx as jsx333, jsxs as jsxs214 } from "react/jsx-runtime";
|
|
5016
5012
|
var Progress = (props) => {
|
|
5017
5013
|
const {
|
|
5018
5014
|
value,
|
|
@@ -5023,7 +5019,7 @@ var Progress = (props) => {
|
|
|
5023
5019
|
} = props;
|
|
5024
5020
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
5025
5021
|
return /* @__PURE__ */ jsxs214("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
5026
|
-
/* @__PURE__ */
|
|
5022
|
+
/* @__PURE__ */ jsx333(
|
|
5027
5023
|
"div",
|
|
5028
5024
|
{
|
|
5029
5025
|
className: "track",
|
|
@@ -5031,7 +5027,7 @@ var Progress = (props) => {
|
|
|
5031
5027
|
"aria-valuenow": value,
|
|
5032
5028
|
"aria-valuemin": 0,
|
|
5033
5029
|
"aria-valuemax": max,
|
|
5034
|
-
children: /* @__PURE__ */
|
|
5030
|
+
children: /* @__PURE__ */ jsx333(
|
|
5035
5031
|
"div",
|
|
5036
5032
|
{
|
|
5037
5033
|
className: "bar",
|
|
@@ -5050,17 +5046,17 @@ Progress.displayName = "Progress";
|
|
|
5050
5046
|
var Progress_default = Progress;
|
|
5051
5047
|
|
|
5052
5048
|
// src/components/Radio/RadioGroupContext.tsx
|
|
5053
|
-
import
|
|
5054
|
-
var RadioGroupContext =
|
|
5049
|
+
import React27 from "react";
|
|
5050
|
+
var RadioGroupContext = React27.createContext(
|
|
5055
5051
|
null
|
|
5056
5052
|
);
|
|
5057
5053
|
var useRadioGroupContext = () => {
|
|
5058
|
-
return
|
|
5054
|
+
return React27.useContext(RadioGroupContext);
|
|
5059
5055
|
};
|
|
5060
5056
|
var RadioGroupContext_default = RadioGroupContext;
|
|
5061
5057
|
|
|
5062
5058
|
// src/components/Radio/Radio.tsx
|
|
5063
|
-
import { jsx as
|
|
5059
|
+
import { jsx as jsx334, jsxs as jsxs215 } from "react/jsx-runtime";
|
|
5064
5060
|
var Radio = (props) => {
|
|
5065
5061
|
const {
|
|
5066
5062
|
label,
|
|
@@ -5090,18 +5086,18 @@ var Radio = (props) => {
|
|
|
5090
5086
|
className
|
|
5091
5087
|
),
|
|
5092
5088
|
children: [
|
|
5093
|
-
/* @__PURE__ */
|
|
5094
|
-
/* @__PURE__ */
|
|
5089
|
+
/* @__PURE__ */ jsx334("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
5090
|
+
/* @__PURE__ */ jsx334(
|
|
5095
5091
|
"div",
|
|
5096
5092
|
{
|
|
5097
5093
|
className: clsx_default(
|
|
5098
5094
|
"circle",
|
|
5099
5095
|
localChecked ? "checked" : void 0
|
|
5100
5096
|
),
|
|
5101
|
-
children: localChecked && /* @__PURE__ */
|
|
5097
|
+
children: localChecked && /* @__PURE__ */ jsx334("div", { className: "inner-circle" })
|
|
5102
5098
|
}
|
|
5103
5099
|
),
|
|
5104
|
-
label && /* @__PURE__ */
|
|
5100
|
+
label && /* @__PURE__ */ jsx334("span", { children: label })
|
|
5105
5101
|
]
|
|
5106
5102
|
}
|
|
5107
5103
|
);
|
|
@@ -5110,28 +5106,28 @@ Radio.displayName = "Radio";
|
|
|
5110
5106
|
var Radio_default = Radio;
|
|
5111
5107
|
|
|
5112
5108
|
// src/components/Radio/RadioGroup.tsx
|
|
5113
|
-
import { Fragment as Fragment4, jsx as
|
|
5109
|
+
import { Fragment as Fragment4, jsx as jsx335 } from "react/jsx-runtime";
|
|
5114
5110
|
var RadioGroup = (props) => {
|
|
5115
5111
|
const { children, ...rest } = props;
|
|
5116
|
-
return /* @__PURE__ */
|
|
5112
|
+
return /* @__PURE__ */ jsx335(Fragment4, { children: /* @__PURE__ */ jsx335(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
5117
5113
|
};
|
|
5118
5114
|
RadioGroup.displayName = "RadioGroup";
|
|
5119
5115
|
var RadioGroup_default = RadioGroup;
|
|
5120
5116
|
|
|
5121
5117
|
// src/components/Select/Select.tsx
|
|
5122
|
-
import
|
|
5118
|
+
import React30 from "react";
|
|
5123
5119
|
|
|
5124
5120
|
// src/components/Select/context.ts
|
|
5125
|
-
import
|
|
5126
|
-
var SelectContext =
|
|
5121
|
+
import React28 from "react";
|
|
5122
|
+
var SelectContext = React28.createContext(null);
|
|
5127
5123
|
var context_default = SelectContext;
|
|
5128
5124
|
|
|
5129
5125
|
// src/components/Select/SelectItem.tsx
|
|
5130
|
-
import
|
|
5131
|
-
import { jsx as
|
|
5126
|
+
import React29 from "react";
|
|
5127
|
+
import { jsx as jsx336 } from "react/jsx-runtime";
|
|
5132
5128
|
var SelectItem = (props) => {
|
|
5133
5129
|
const { children, value, onClick, disabled = false } = props;
|
|
5134
|
-
const ctx =
|
|
5130
|
+
const ctx = React29.useContext(context_default);
|
|
5135
5131
|
const handleClick = (e) => {
|
|
5136
5132
|
e.preventDefault();
|
|
5137
5133
|
e.stopPropagation();
|
|
@@ -5141,7 +5137,7 @@ var SelectItem = (props) => {
|
|
|
5141
5137
|
onClick?.();
|
|
5142
5138
|
};
|
|
5143
5139
|
const isSelected = value !== void 0 ? ctx?.selectedValue === value : ctx?.selectedLabel === children;
|
|
5144
|
-
return /* @__PURE__ */
|
|
5140
|
+
return /* @__PURE__ */ jsx336(
|
|
5145
5141
|
"div",
|
|
5146
5142
|
{
|
|
5147
5143
|
className: clsx_default("select-item", disabled && "disabled", isSelected && "is-selected"),
|
|
@@ -5162,7 +5158,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
5162
5158
|
var SelectItem_default = SelectItem;
|
|
5163
5159
|
|
|
5164
5160
|
// src/components/Select/Select.tsx
|
|
5165
|
-
import { jsx as
|
|
5161
|
+
import { jsx as jsx337, jsxs as jsxs216 } from "react/jsx-runtime";
|
|
5166
5162
|
var ANIMATION_DURATION_MS3 = 200;
|
|
5167
5163
|
var SelectRoot = (props) => {
|
|
5168
5164
|
const {
|
|
@@ -5174,28 +5170,28 @@ var SelectRoot = (props) => {
|
|
|
5174
5170
|
error = false,
|
|
5175
5171
|
size = "md"
|
|
5176
5172
|
} = props;
|
|
5177
|
-
const itemChildren =
|
|
5178
|
-
(child) =>
|
|
5173
|
+
const itemChildren = React30.Children.toArray(children).filter(
|
|
5174
|
+
(child) => React30.isValidElement(child) && child.type === SelectItem_default
|
|
5179
5175
|
);
|
|
5180
5176
|
const isControlled = valueProp !== void 0;
|
|
5181
|
-
const [isOpen, setOpen] =
|
|
5182
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
5183
|
-
const [uncontrolledValue, setUncontrolledValue] =
|
|
5184
|
-
const controlledLabel =
|
|
5177
|
+
const [isOpen, setOpen] = React30.useState(false);
|
|
5178
|
+
const [uncontrolledLabel, setUncontrolledLabel] = React30.useState(null);
|
|
5179
|
+
const [uncontrolledValue, setUncontrolledValue] = React30.useState(void 0);
|
|
5180
|
+
const controlledLabel = React30.useMemo(() => {
|
|
5185
5181
|
if (!isControlled) return null;
|
|
5186
5182
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
5187
5183
|
return match ? match.props.children : null;
|
|
5188
5184
|
}, [isControlled, valueProp, itemChildren]);
|
|
5189
5185
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
5190
5186
|
const selectedValue = isControlled ? valueProp : uncontrolledValue;
|
|
5191
|
-
const triggerRef =
|
|
5192
|
-
const contentRef =
|
|
5193
|
-
const [mounted, setMounted] =
|
|
5194
|
-
const [visible, setVisible] =
|
|
5195
|
-
|
|
5187
|
+
const triggerRef = React30.useRef(null);
|
|
5188
|
+
const contentRef = React30.useRef(null);
|
|
5189
|
+
const [mounted, setMounted] = React30.useState(false);
|
|
5190
|
+
const [visible, setVisible] = React30.useState(false);
|
|
5191
|
+
React30.useEffect(() => {
|
|
5196
5192
|
if (disabled && isOpen) setOpen(false);
|
|
5197
5193
|
}, [disabled, isOpen]);
|
|
5198
|
-
|
|
5194
|
+
React30.useEffect(() => {
|
|
5199
5195
|
if (isOpen) {
|
|
5200
5196
|
setMounted(true);
|
|
5201
5197
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -5205,12 +5201,12 @@ var SelectRoot = (props) => {
|
|
|
5205
5201
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
5206
5202
|
return () => clearTimeout(t);
|
|
5207
5203
|
}, [isOpen]);
|
|
5208
|
-
const open =
|
|
5209
|
-
const close =
|
|
5210
|
-
const toggle =
|
|
5204
|
+
const open = React30.useCallback(() => setOpen(true), []);
|
|
5205
|
+
const close = React30.useCallback(() => setOpen(false), []);
|
|
5206
|
+
const toggle = React30.useCallback(() => setOpen((prev) => !prev), []);
|
|
5211
5207
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
5212
5208
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
5213
|
-
const setSelected =
|
|
5209
|
+
const setSelected = React30.useCallback(
|
|
5214
5210
|
(label, itemValue) => {
|
|
5215
5211
|
if (!isControlled) {
|
|
5216
5212
|
setUncontrolledLabel(label);
|
|
@@ -5220,7 +5216,7 @@ var SelectRoot = (props) => {
|
|
|
5220
5216
|
},
|
|
5221
5217
|
[isControlled, onChange]
|
|
5222
5218
|
);
|
|
5223
|
-
const ctxValue =
|
|
5219
|
+
const ctxValue = React30.useMemo(
|
|
5224
5220
|
() => ({
|
|
5225
5221
|
isOpen,
|
|
5226
5222
|
mounted,
|
|
@@ -5242,7 +5238,7 @@ var SelectRoot = (props) => {
|
|
|
5242
5238
|
if (disabled) return;
|
|
5243
5239
|
toggle();
|
|
5244
5240
|
};
|
|
5245
|
-
return /* @__PURE__ */
|
|
5241
|
+
return /* @__PURE__ */ jsx337(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs216(
|
|
5246
5242
|
"div",
|
|
5247
5243
|
{
|
|
5248
5244
|
className: clsx_default(
|
|
@@ -5277,7 +5273,7 @@ var SelectRoot = (props) => {
|
|
|
5277
5273
|
}
|
|
5278
5274
|
},
|
|
5279
5275
|
children: [
|
|
5280
|
-
/* @__PURE__ */
|
|
5276
|
+
/* @__PURE__ */ jsx337(
|
|
5281
5277
|
"span",
|
|
5282
5278
|
{
|
|
5283
5279
|
className: clsx_default(
|
|
@@ -5287,25 +5283,25 @@ var SelectRoot = (props) => {
|
|
|
5287
5283
|
children: selectedLabel ?? placeholder
|
|
5288
5284
|
}
|
|
5289
5285
|
),
|
|
5290
|
-
/* @__PURE__ */
|
|
5286
|
+
/* @__PURE__ */ jsx337(
|
|
5291
5287
|
"span",
|
|
5292
5288
|
{
|
|
5293
5289
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
5294
5290
|
"aria-hidden": true,
|
|
5295
|
-
children: /* @__PURE__ */
|
|
5291
|
+
children: /* @__PURE__ */ jsx337(ChevronDownIcon_default, {})
|
|
5296
5292
|
}
|
|
5297
5293
|
)
|
|
5298
5294
|
]
|
|
5299
5295
|
}
|
|
5300
5296
|
),
|
|
5301
|
-
mounted && /* @__PURE__ */
|
|
5297
|
+
mounted && /* @__PURE__ */ jsx337(Portal_default, { children: /* @__PURE__ */ jsx337(
|
|
5302
5298
|
"div",
|
|
5303
5299
|
{
|
|
5304
5300
|
className: clsx_default("lib-xplat-select-content", size, position.direction, stateClass),
|
|
5305
5301
|
ref: contentRef,
|
|
5306
5302
|
style: { ...position.position, width: triggerRef.current?.offsetWidth },
|
|
5307
5303
|
role: "listbox",
|
|
5308
|
-
children: /* @__PURE__ */
|
|
5304
|
+
children: /* @__PURE__ */ jsx337(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
5309
5305
|
}
|
|
5310
5306
|
) })
|
|
5311
5307
|
]
|
|
@@ -5319,7 +5315,7 @@ var Select = Object.assign(SelectRoot, {
|
|
|
5319
5315
|
var Select_default = Select;
|
|
5320
5316
|
|
|
5321
5317
|
// src/components/Skeleton/Skeleton.tsx
|
|
5322
|
-
import { jsx as
|
|
5318
|
+
import { jsx as jsx338 } from "react/jsx-runtime";
|
|
5323
5319
|
var SIZE_MAP = {
|
|
5324
5320
|
xs: "var(--spacing-space-1)",
|
|
5325
5321
|
sm: "var(--spacing-space-2)",
|
|
@@ -5335,7 +5331,7 @@ var Skeleton = (props) => {
|
|
|
5335
5331
|
...width != null && { width: SIZE_MAP[width] },
|
|
5336
5332
|
...height != null && { height: SIZE_MAP[height] }
|
|
5337
5333
|
};
|
|
5338
|
-
return /* @__PURE__ */
|
|
5334
|
+
return /* @__PURE__ */ jsx338(
|
|
5339
5335
|
"div",
|
|
5340
5336
|
{
|
|
5341
5337
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -5348,20 +5344,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
5348
5344
|
var Skeleton_default = Skeleton;
|
|
5349
5345
|
|
|
5350
5346
|
// src/components/Spinner/Spinner.tsx
|
|
5351
|
-
import { jsx as
|
|
5347
|
+
import { jsx as jsx339, jsxs as jsxs217 } from "react/jsx-runtime";
|
|
5352
5348
|
var Spinner = (props) => {
|
|
5353
5349
|
const {
|
|
5354
5350
|
size = "md",
|
|
5355
5351
|
type = "brand"
|
|
5356
5352
|
} = props;
|
|
5357
|
-
return /* @__PURE__ */
|
|
5353
|
+
return /* @__PURE__ */ jsx339(
|
|
5358
5354
|
"div",
|
|
5359
5355
|
{
|
|
5360
5356
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
5361
5357
|
role: "status",
|
|
5362
5358
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
5363
5359
|
children: /* @__PURE__ */ jsxs217("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
5364
|
-
/* @__PURE__ */
|
|
5360
|
+
/* @__PURE__ */ jsx339(
|
|
5365
5361
|
"circle",
|
|
5366
5362
|
{
|
|
5367
5363
|
className: "track",
|
|
@@ -5371,7 +5367,7 @@ var Spinner = (props) => {
|
|
|
5371
5367
|
strokeWidth: "3"
|
|
5372
5368
|
}
|
|
5373
5369
|
),
|
|
5374
|
-
/* @__PURE__ */
|
|
5370
|
+
/* @__PURE__ */ jsx339(
|
|
5375
5371
|
"circle",
|
|
5376
5372
|
{
|
|
5377
5373
|
className: "indicator",
|
|
@@ -5390,20 +5386,20 @@ Spinner.displayName = "Spinner";
|
|
|
5390
5386
|
var Spinner_default = Spinner;
|
|
5391
5387
|
|
|
5392
5388
|
// src/components/Steps/Steps.tsx
|
|
5393
|
-
import { jsx as
|
|
5389
|
+
import { jsx as jsx340, jsxs as jsxs218 } from "react/jsx-runtime";
|
|
5394
5390
|
var Steps = (props) => {
|
|
5395
5391
|
const {
|
|
5396
5392
|
items,
|
|
5397
5393
|
current,
|
|
5398
5394
|
type = "brand"
|
|
5399
5395
|
} = props;
|
|
5400
|
-
return /* @__PURE__ */
|
|
5396
|
+
return /* @__PURE__ */ jsx340("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
5401
5397
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
5402
5398
|
return /* @__PURE__ */ jsxs218("div", { className: clsx_default("step-item", status), children: [
|
|
5403
|
-
/* @__PURE__ */
|
|
5399
|
+
/* @__PURE__ */ jsx340("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ jsx340(CheckIcon_default, {}) : /* @__PURE__ */ jsx340("span", { children: index + 1 }) }),
|
|
5404
5400
|
/* @__PURE__ */ jsxs218("div", { className: "step-content", children: [
|
|
5405
|
-
/* @__PURE__ */
|
|
5406
|
-
item.description && /* @__PURE__ */
|
|
5401
|
+
/* @__PURE__ */ jsx340("span", { className: "step-title", children: item.title }),
|
|
5402
|
+
item.description && /* @__PURE__ */ jsx340("span", { className: "step-description", children: item.description })
|
|
5407
5403
|
] })
|
|
5408
5404
|
] }, index);
|
|
5409
5405
|
}) });
|
|
@@ -5412,8 +5408,8 @@ Steps.displayName = "Steps";
|
|
|
5412
5408
|
var Steps_default = Steps;
|
|
5413
5409
|
|
|
5414
5410
|
// src/components/Swiper/Swiper.tsx
|
|
5415
|
-
import
|
|
5416
|
-
import { jsx as
|
|
5411
|
+
import React31 from "react";
|
|
5412
|
+
import { jsx as jsx341, jsxs as jsxs219 } from "react/jsx-runtime";
|
|
5417
5413
|
var Swiper = (props) => {
|
|
5418
5414
|
const {
|
|
5419
5415
|
auto = false,
|
|
@@ -5437,26 +5433,26 @@ var Swiper = (props) => {
|
|
|
5437
5433
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
5438
5434
|
const useLoop = loop && canSlide;
|
|
5439
5435
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
5440
|
-
const extendedItems =
|
|
5436
|
+
const extendedItems = React31.useMemo(() => {
|
|
5441
5437
|
if (!useLoop) return items;
|
|
5442
5438
|
return [...items, ...items, ...items];
|
|
5443
5439
|
}, [items, useLoop]);
|
|
5444
5440
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
5445
|
-
const [innerIndex, setInnerIndex] =
|
|
5441
|
+
const [innerIndex, setInnerIndex] = React31.useState(
|
|
5446
5442
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
5447
5443
|
);
|
|
5448
|
-
const [isDragging, setIsDragging] =
|
|
5449
|
-
const [dragOffset, setDragOffset] =
|
|
5450
|
-
const [animated, setAnimated] =
|
|
5451
|
-
const [containerWidth, setContainerWidth] =
|
|
5452
|
-
const containerRef =
|
|
5453
|
-
const startXRef =
|
|
5454
|
-
const startTimeRef =
|
|
5455
|
-
const autoplayTimerRef =
|
|
5456
|
-
const resumeTimeoutRef =
|
|
5457
|
-
const [paused, setPaused] =
|
|
5458
|
-
const initializedRef =
|
|
5459
|
-
|
|
5444
|
+
const [isDragging, setIsDragging] = React31.useState(false);
|
|
5445
|
+
const [dragOffset, setDragOffset] = React31.useState(0);
|
|
5446
|
+
const [animated, setAnimated] = React31.useState(false);
|
|
5447
|
+
const [containerWidth, setContainerWidth] = React31.useState(0);
|
|
5448
|
+
const containerRef = React31.useRef(null);
|
|
5449
|
+
const startXRef = React31.useRef(0);
|
|
5450
|
+
const startTimeRef = React31.useRef(0);
|
|
5451
|
+
const autoplayTimerRef = React31.useRef(null);
|
|
5452
|
+
const resumeTimeoutRef = React31.useRef(null);
|
|
5453
|
+
const [paused, setPaused] = React31.useState(false);
|
|
5454
|
+
const initializedRef = React31.useRef(false);
|
|
5455
|
+
React31.useEffect(() => {
|
|
5460
5456
|
const el = containerRef.current;
|
|
5461
5457
|
if (!el) return;
|
|
5462
5458
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -5479,7 +5475,7 @@ var Swiper = (props) => {
|
|
|
5479
5475
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
5480
5476
|
};
|
|
5481
5477
|
const realIndex = getRealIndex(innerIndex);
|
|
5482
|
-
const moveToInner =
|
|
5478
|
+
const moveToInner = React31.useCallback(
|
|
5483
5479
|
(idx, withAnim = true) => {
|
|
5484
5480
|
if (!useLoop) {
|
|
5485
5481
|
setAnimated(withAnim);
|
|
@@ -5507,7 +5503,7 @@ var Swiper = (props) => {
|
|
|
5507
5503
|
},
|
|
5508
5504
|
[useLoop, cloneCount, totalSlides]
|
|
5509
5505
|
);
|
|
5510
|
-
const handleTransitionEnd =
|
|
5506
|
+
const handleTransitionEnd = React31.useCallback(() => {
|
|
5511
5507
|
if (!useLoop) return;
|
|
5512
5508
|
const real = getRealIndex(innerIndex);
|
|
5513
5509
|
const canonical = cloneCount + real;
|
|
@@ -5517,7 +5513,7 @@ var Swiper = (props) => {
|
|
|
5517
5513
|
}
|
|
5518
5514
|
onChange?.(Math.min(real, maxIndex));
|
|
5519
5515
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
5520
|
-
const slideTo =
|
|
5516
|
+
const slideTo = React31.useCallback(
|
|
5521
5517
|
(logicalIndex) => {
|
|
5522
5518
|
if (!canSlide) return;
|
|
5523
5519
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -5527,7 +5523,7 @@ var Swiper = (props) => {
|
|
|
5527
5523
|
},
|
|
5528
5524
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
5529
5525
|
);
|
|
5530
|
-
const slideNext =
|
|
5526
|
+
const slideNext = React31.useCallback(() => {
|
|
5531
5527
|
if (!canSlide) return;
|
|
5532
5528
|
const nextInner = innerIndex + slideBy;
|
|
5533
5529
|
if (useLoop) {
|
|
@@ -5536,7 +5532,7 @@ var Swiper = (props) => {
|
|
|
5536
5532
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
5537
5533
|
}
|
|
5538
5534
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
5539
|
-
const slidePrev =
|
|
5535
|
+
const slidePrev = React31.useCallback(() => {
|
|
5540
5536
|
if (!canSlide) return;
|
|
5541
5537
|
const prevInner = innerIndex - slideBy;
|
|
5542
5538
|
if (useLoop) {
|
|
@@ -5545,7 +5541,7 @@ var Swiper = (props) => {
|
|
|
5545
5541
|
moveToInner(Math.max(prevInner, 0), true);
|
|
5546
5542
|
}
|
|
5547
5543
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
5548
|
-
|
|
5544
|
+
React31.useEffect(() => {
|
|
5549
5545
|
if (indexProp === void 0) return;
|
|
5550
5546
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
5551
5547
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -5553,12 +5549,12 @@ var Swiper = (props) => {
|
|
|
5553
5549
|
moveToInner(target, true);
|
|
5554
5550
|
}
|
|
5555
5551
|
}, [indexProp]);
|
|
5556
|
-
|
|
5552
|
+
React31.useImperativeHandle(swiperRef, () => ({
|
|
5557
5553
|
slidePrev,
|
|
5558
5554
|
slideNext,
|
|
5559
5555
|
slideTo
|
|
5560
5556
|
}));
|
|
5561
|
-
|
|
5557
|
+
React31.useEffect(() => {
|
|
5562
5558
|
if (!auto || !canSlide || paused) return;
|
|
5563
5559
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
5564
5560
|
return () => {
|
|
@@ -5584,7 +5580,7 @@ var Swiper = (props) => {
|
|
|
5584
5580
|
resumeTimeoutRef.current = null;
|
|
5585
5581
|
}, pauseOnInteraction);
|
|
5586
5582
|
};
|
|
5587
|
-
|
|
5583
|
+
React31.useEffect(() => {
|
|
5588
5584
|
return () => {
|
|
5589
5585
|
if (resumeTimeoutRef.current) clearTimeout(resumeTimeoutRef.current);
|
|
5590
5586
|
};
|
|
@@ -5602,7 +5598,7 @@ var Swiper = (props) => {
|
|
|
5602
5598
|
startXRef.current = getClientX(e);
|
|
5603
5599
|
startTimeRef.current = Date.now();
|
|
5604
5600
|
};
|
|
5605
|
-
|
|
5601
|
+
React31.useEffect(() => {
|
|
5606
5602
|
if (!isDragging) return;
|
|
5607
5603
|
const handleMove = (e) => {
|
|
5608
5604
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -5641,8 +5637,8 @@ var Swiper = (props) => {
|
|
|
5641
5637
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
5642
5638
|
const slideWidthPercent = 100 / viewItemCount;
|
|
5643
5639
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
5644
|
-
const slideElements =
|
|
5645
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */
|
|
5640
|
+
const slideElements = React31.useMemo(
|
|
5641
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ jsx341(
|
|
5646
5642
|
"div",
|
|
5647
5643
|
{
|
|
5648
5644
|
className: "lib-xplat-swiper__slide",
|
|
@@ -5662,14 +5658,14 @@ var Swiper = (props) => {
|
|
|
5662
5658
|
totalSteps - 1
|
|
5663
5659
|
);
|
|
5664
5660
|
return /* @__PURE__ */ jsxs219("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
5665
|
-
/* @__PURE__ */
|
|
5661
|
+
/* @__PURE__ */ jsx341(
|
|
5666
5662
|
"div",
|
|
5667
5663
|
{
|
|
5668
5664
|
className: "lib-xplat-swiper__viewport",
|
|
5669
5665
|
onMouseDown: handleDragStart,
|
|
5670
5666
|
onTouchStart: handleDragStart,
|
|
5671
5667
|
onDragStart: (e) => e.preventDefault(),
|
|
5672
|
-
children: /* @__PURE__ */
|
|
5668
|
+
children: /* @__PURE__ */ jsx341(
|
|
5673
5669
|
"div",
|
|
5674
5670
|
{
|
|
5675
5671
|
className: clsx_default(
|
|
@@ -5687,7 +5683,7 @@ var Swiper = (props) => {
|
|
|
5687
5683
|
)
|
|
5688
5684
|
}
|
|
5689
5685
|
),
|
|
5690
|
-
showProgress && canSlide && /* @__PURE__ */
|
|
5686
|
+
showProgress && canSlide && /* @__PURE__ */ jsx341("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ jsx341("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ jsx341(
|
|
5691
5687
|
"span",
|
|
5692
5688
|
{
|
|
5693
5689
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -5697,7 +5693,7 @@ var Swiper = (props) => {
|
|
|
5697
5693
|
}
|
|
5698
5694
|
}
|
|
5699
5695
|
) }) }),
|
|
5700
|
-
canSlide && /* @__PURE__ */
|
|
5696
|
+
canSlide && /* @__PURE__ */ jsx341("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ jsx341(
|
|
5701
5697
|
"button",
|
|
5702
5698
|
{
|
|
5703
5699
|
className: clsx_default(
|
|
@@ -5715,8 +5711,8 @@ Swiper.displayName = "Swiper";
|
|
|
5715
5711
|
var Swiper_default = Swiper;
|
|
5716
5712
|
|
|
5717
5713
|
// src/components/Switch/Switch.tsx
|
|
5718
|
-
import
|
|
5719
|
-
import { jsx as
|
|
5714
|
+
import React32 from "react";
|
|
5715
|
+
import { jsx as jsx342 } from "react/jsx-runtime";
|
|
5720
5716
|
var KNOB_TRANSITION_MS = 250;
|
|
5721
5717
|
var Switch = (props) => {
|
|
5722
5718
|
const {
|
|
@@ -5726,9 +5722,9 @@ var Switch = (props) => {
|
|
|
5726
5722
|
disabled,
|
|
5727
5723
|
onChange
|
|
5728
5724
|
} = props;
|
|
5729
|
-
const [isAnimating, setIsAnimating] =
|
|
5730
|
-
const timeoutRef =
|
|
5731
|
-
|
|
5725
|
+
const [isAnimating, setIsAnimating] = React32.useState(false);
|
|
5726
|
+
const timeoutRef = React32.useRef(null);
|
|
5727
|
+
React32.useEffect(() => {
|
|
5732
5728
|
return () => {
|
|
5733
5729
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
5734
5730
|
};
|
|
@@ -5743,7 +5739,7 @@ var Switch = (props) => {
|
|
|
5743
5739
|
timeoutRef.current = null;
|
|
5744
5740
|
}, KNOB_TRANSITION_MS);
|
|
5745
5741
|
};
|
|
5746
|
-
return /* @__PURE__ */
|
|
5742
|
+
return /* @__PURE__ */ jsx342(
|
|
5747
5743
|
"div",
|
|
5748
5744
|
{
|
|
5749
5745
|
className: clsx_default(
|
|
@@ -5756,7 +5752,7 @@ var Switch = (props) => {
|
|
|
5756
5752
|
),
|
|
5757
5753
|
onClick: handleClick,
|
|
5758
5754
|
"aria-disabled": disabled || isAnimating,
|
|
5759
|
-
children: /* @__PURE__ */
|
|
5755
|
+
children: /* @__PURE__ */ jsx342("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
5760
5756
|
}
|
|
5761
5757
|
);
|
|
5762
5758
|
};
|
|
@@ -5764,17 +5760,17 @@ Switch.displayName = "Switch";
|
|
|
5764
5760
|
var Switch_default = Switch;
|
|
5765
5761
|
|
|
5766
5762
|
// src/components/Table/TableContext.tsx
|
|
5767
|
-
import
|
|
5768
|
-
var TableContext =
|
|
5763
|
+
import React33 from "react";
|
|
5764
|
+
var TableContext = React33.createContext(null);
|
|
5769
5765
|
var useTableContext = () => {
|
|
5770
|
-
const ctx =
|
|
5766
|
+
const ctx = React33.useContext(TableContext);
|
|
5771
5767
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
5772
5768
|
return ctx;
|
|
5773
5769
|
};
|
|
5774
5770
|
var TableContext_default = TableContext;
|
|
5775
5771
|
|
|
5776
5772
|
// src/components/Table/Table.tsx
|
|
5777
|
-
import { jsx as
|
|
5773
|
+
import { jsx as jsx343 } from "react/jsx-runtime";
|
|
5778
5774
|
var Table = (props) => {
|
|
5779
5775
|
const {
|
|
5780
5776
|
children,
|
|
@@ -5784,7 +5780,7 @@ var Table = (props) => {
|
|
|
5784
5780
|
headerSticky = false,
|
|
5785
5781
|
stickyShadow = true
|
|
5786
5782
|
} = props;
|
|
5787
|
-
return /* @__PURE__ */
|
|
5783
|
+
return /* @__PURE__ */ jsx343("div", { className: `lib-xplat-table-wrapper ${size}`, children: /* @__PURE__ */ jsx343(
|
|
5788
5784
|
TableContext_default.Provider,
|
|
5789
5785
|
{
|
|
5790
5786
|
value: {
|
|
@@ -5793,7 +5789,7 @@ var Table = (props) => {
|
|
|
5793
5789
|
headerSticky,
|
|
5794
5790
|
stickyShadow
|
|
5795
5791
|
},
|
|
5796
|
-
children: /* @__PURE__ */
|
|
5792
|
+
children: /* @__PURE__ */ jsx343("table", { className: "lib-xplat-table", children })
|
|
5797
5793
|
}
|
|
5798
5794
|
) });
|
|
5799
5795
|
};
|
|
@@ -5801,41 +5797,41 @@ Table.displayName = "Table";
|
|
|
5801
5797
|
var Table_default = Table;
|
|
5802
5798
|
|
|
5803
5799
|
// src/components/Table/TableBody.tsx
|
|
5804
|
-
import { jsx as
|
|
5800
|
+
import { jsx as jsx344 } from "react/jsx-runtime";
|
|
5805
5801
|
var TableBody = (props) => {
|
|
5806
5802
|
const { children } = props;
|
|
5807
|
-
return /* @__PURE__ */
|
|
5803
|
+
return /* @__PURE__ */ jsx344("tbody", { children });
|
|
5808
5804
|
};
|
|
5809
5805
|
TableBody.displayName = "TableBody";
|
|
5810
5806
|
var TableBody_default = TableBody;
|
|
5811
5807
|
|
|
5812
5808
|
// src/components/Table/TableCell.tsx
|
|
5813
|
-
import
|
|
5809
|
+
import React36 from "react";
|
|
5814
5810
|
|
|
5815
5811
|
// src/components/Table/TableHeadContext.tsx
|
|
5816
|
-
import
|
|
5817
|
-
var TableHeadContext =
|
|
5812
|
+
import React34 from "react";
|
|
5813
|
+
var TableHeadContext = React34.createContext(
|
|
5818
5814
|
null
|
|
5819
5815
|
);
|
|
5820
5816
|
var useTableHeadContext = () => {
|
|
5821
|
-
const ctx =
|
|
5817
|
+
const ctx = React34.useContext(TableHeadContext);
|
|
5822
5818
|
return ctx;
|
|
5823
5819
|
};
|
|
5824
5820
|
var TableHeadContext_default = TableHeadContext;
|
|
5825
5821
|
|
|
5826
5822
|
// src/components/Table/TableRowContext.tsx
|
|
5827
|
-
import
|
|
5828
|
-
var TableRowContext =
|
|
5823
|
+
import React35 from "react";
|
|
5824
|
+
var TableRowContext = React35.createContext(null);
|
|
5829
5825
|
var useTableRowContext = () => {
|
|
5830
|
-
const ctx =
|
|
5826
|
+
const ctx = React35.useContext(TableRowContext);
|
|
5831
5827
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
5832
5828
|
return ctx;
|
|
5833
5829
|
};
|
|
5834
5830
|
var TableRowContext_default = TableRowContext;
|
|
5835
5831
|
|
|
5836
5832
|
// src/components/Table/TableCell.tsx
|
|
5837
|
-
import { jsx as
|
|
5838
|
-
var TableCell =
|
|
5833
|
+
import { jsx as jsx345 } from "react/jsx-runtime";
|
|
5834
|
+
var TableCell = React36.memo((props) => {
|
|
5839
5835
|
const {
|
|
5840
5836
|
children,
|
|
5841
5837
|
align = "center",
|
|
@@ -5849,9 +5845,9 @@ var TableCell = React37.memo((props) => {
|
|
|
5849
5845
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
5850
5846
|
const { stickyShadow } = useTableContext();
|
|
5851
5847
|
const headContext = useTableHeadContext();
|
|
5852
|
-
const [left, setLeft] =
|
|
5853
|
-
const cellRef =
|
|
5854
|
-
const calculateLeft =
|
|
5848
|
+
const [left, setLeft] = React36.useState(0);
|
|
5849
|
+
const cellRef = React36.useRef(null);
|
|
5850
|
+
const calculateLeft = React36.useCallback(() => {
|
|
5855
5851
|
if (!cellRef.current) return 0;
|
|
5856
5852
|
let totalLeft = 0;
|
|
5857
5853
|
for (const ref of stickyCells) {
|
|
@@ -5860,7 +5856,7 @@ var TableCell = React37.memo((props) => {
|
|
|
5860
5856
|
}
|
|
5861
5857
|
return totalLeft;
|
|
5862
5858
|
}, [stickyCells]);
|
|
5863
|
-
|
|
5859
|
+
React36.useEffect(() => {
|
|
5864
5860
|
if (!isSticky || !cellRef.current) return;
|
|
5865
5861
|
registerStickyCell(cellRef);
|
|
5866
5862
|
setLeft(calculateLeft());
|
|
@@ -5879,7 +5875,7 @@ var TableCell = React37.memo((props) => {
|
|
|
5879
5875
|
const CellTag = isHeaderCell ? "th" : "td";
|
|
5880
5876
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
5881
5877
|
const enableHover = headContext && headContext.cellHover;
|
|
5882
|
-
return /* @__PURE__ */
|
|
5878
|
+
return /* @__PURE__ */ jsx345(
|
|
5883
5879
|
CellTag,
|
|
5884
5880
|
{
|
|
5885
5881
|
ref: cellRef,
|
|
@@ -5906,21 +5902,21 @@ TableCell.displayName = "TableCell";
|
|
|
5906
5902
|
var TableCell_default = TableCell;
|
|
5907
5903
|
|
|
5908
5904
|
// src/components/Table/TableHead.tsx
|
|
5909
|
-
import { jsx as
|
|
5905
|
+
import { jsx as jsx346 } from "react/jsx-runtime";
|
|
5910
5906
|
var TableHead = ({
|
|
5911
5907
|
children,
|
|
5912
5908
|
cellHover = false
|
|
5913
5909
|
}) => {
|
|
5914
5910
|
const { headerSticky } = useTableContext();
|
|
5915
|
-
return /* @__PURE__ */
|
|
5911
|
+
return /* @__PURE__ */ jsx346(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ jsx346("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
|
|
5916
5912
|
};
|
|
5917
5913
|
TableHead.displayName = "TableHead";
|
|
5918
5914
|
var TableHead_default = TableHead;
|
|
5919
5915
|
|
|
5920
5916
|
// src/components/Table/TableRow.tsx
|
|
5921
|
-
import
|
|
5922
|
-
import { jsx as
|
|
5923
|
-
var TableRow =
|
|
5917
|
+
import React37 from "react";
|
|
5918
|
+
import { jsx as jsx347 } from "react/jsx-runtime";
|
|
5919
|
+
var TableRow = React37.memo((props) => {
|
|
5924
5920
|
const {
|
|
5925
5921
|
children,
|
|
5926
5922
|
type = "secondary",
|
|
@@ -5929,14 +5925,14 @@ var TableRow = React38.memo((props) => {
|
|
|
5929
5925
|
onClick
|
|
5930
5926
|
} = props;
|
|
5931
5927
|
const { rowBorderUse } = useTableContext();
|
|
5932
|
-
const [stickyCells, setStickyCells] =
|
|
5928
|
+
const [stickyCells, setStickyCells] = React37.useState([]);
|
|
5933
5929
|
const registerStickyCell = (ref) => {
|
|
5934
5930
|
setStickyCells((prev) => {
|
|
5935
5931
|
if (prev.includes(ref)) return prev;
|
|
5936
5932
|
return [...prev, ref];
|
|
5937
5933
|
});
|
|
5938
5934
|
};
|
|
5939
|
-
return /* @__PURE__ */
|
|
5935
|
+
return /* @__PURE__ */ jsx347(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ jsx347(
|
|
5940
5936
|
"tr",
|
|
5941
5937
|
{
|
|
5942
5938
|
className: clsx_default(
|
|
@@ -5960,7 +5956,7 @@ TableRow.displayName = "TableRow";
|
|
|
5960
5956
|
var TableRow_default = TableRow;
|
|
5961
5957
|
|
|
5962
5958
|
// src/components/Tag/Tag.tsx
|
|
5963
|
-
import { jsx as
|
|
5959
|
+
import { jsx as jsx348, jsxs as jsxs220 } from "react/jsx-runtime";
|
|
5964
5960
|
var Tag = (props) => {
|
|
5965
5961
|
const {
|
|
5966
5962
|
children,
|
|
@@ -5981,8 +5977,8 @@ var Tag = (props) => {
|
|
|
5981
5977
|
disabled && "disabled"
|
|
5982
5978
|
),
|
|
5983
5979
|
children: [
|
|
5984
|
-
/* @__PURE__ */
|
|
5985
|
-
onClose && /* @__PURE__ */
|
|
5980
|
+
/* @__PURE__ */ jsx348("span", { className: "tag-label", children }),
|
|
5981
|
+
onClose && /* @__PURE__ */ jsx348("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ jsx348(XIcon_default, {}) })
|
|
5986
5982
|
]
|
|
5987
5983
|
}
|
|
5988
5984
|
);
|
|
@@ -5991,9 +5987,9 @@ Tag.displayName = "Tag";
|
|
|
5991
5987
|
var Tag_default = Tag;
|
|
5992
5988
|
|
|
5993
5989
|
// src/components/TextArea/TextArea.tsx
|
|
5994
|
-
import
|
|
5995
|
-
import { jsx as
|
|
5996
|
-
var TextArea =
|
|
5990
|
+
import React38 from "react";
|
|
5991
|
+
import { jsx as jsx349 } from "react/jsx-runtime";
|
|
5992
|
+
var TextArea = React38.forwardRef(
|
|
5997
5993
|
(props, ref) => {
|
|
5998
5994
|
const {
|
|
5999
5995
|
className,
|
|
@@ -6003,7 +5999,7 @@ var TextArea = React39.forwardRef(
|
|
|
6003
5999
|
disabled,
|
|
6004
6000
|
...textareaProps
|
|
6005
6001
|
} = props;
|
|
6006
|
-
return /* @__PURE__ */
|
|
6002
|
+
return /* @__PURE__ */ jsx349("div", { className: clsx_default("lib-xplat-textarea-wrap", className), children: /* @__PURE__ */ jsx349(
|
|
6007
6003
|
"textarea",
|
|
6008
6004
|
{
|
|
6009
6005
|
...textareaProps,
|
|
@@ -6020,25 +6016,25 @@ TextArea.displayName = "TextArea";
|
|
|
6020
6016
|
var TextArea_default = TextArea;
|
|
6021
6017
|
|
|
6022
6018
|
// src/components/Toast/Toast.tsx
|
|
6023
|
-
import
|
|
6019
|
+
import React39 from "react";
|
|
6024
6020
|
import { createPortal as createPortal3 } from "react-dom";
|
|
6025
|
-
import { jsx as
|
|
6026
|
-
var ToastContext =
|
|
6021
|
+
import { jsx as jsx350, jsxs as jsxs221 } from "react/jsx-runtime";
|
|
6022
|
+
var ToastContext = React39.createContext(null);
|
|
6027
6023
|
var useToast = () => {
|
|
6028
|
-
const ctx =
|
|
6024
|
+
const ctx = React39.useContext(ToastContext);
|
|
6029
6025
|
if (!ctx) throw new Error("useToast must be used within ToastProvider");
|
|
6030
6026
|
return ctx;
|
|
6031
6027
|
};
|
|
6032
6028
|
var EXIT_DURATION = 300;
|
|
6033
6029
|
var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
6034
|
-
const ref =
|
|
6035
|
-
const [height, setHeight] =
|
|
6036
|
-
|
|
6030
|
+
const ref = React39.useRef(null);
|
|
6031
|
+
const [height, setHeight] = React39.useState(void 0);
|
|
6032
|
+
React39.useEffect(() => {
|
|
6037
6033
|
if (ref.current && !isExiting) {
|
|
6038
6034
|
setHeight(ref.current.offsetHeight);
|
|
6039
6035
|
}
|
|
6040
6036
|
}, [isExiting]);
|
|
6041
|
-
return /* @__PURE__ */
|
|
6037
|
+
return /* @__PURE__ */ jsx350(
|
|
6042
6038
|
"div",
|
|
6043
6039
|
{
|
|
6044
6040
|
className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
|
|
@@ -6053,8 +6049,8 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
6053
6049
|
className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
|
|
6054
6050
|
role: "alert",
|
|
6055
6051
|
children: [
|
|
6056
|
-
/* @__PURE__ */
|
|
6057
|
-
/* @__PURE__ */
|
|
6052
|
+
/* @__PURE__ */ jsx350("span", { className: "message", children: item.message }),
|
|
6053
|
+
/* @__PURE__ */ jsx350("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
6058
6054
|
]
|
|
6059
6055
|
}
|
|
6060
6056
|
)
|
|
@@ -6065,13 +6061,13 @@ var ToastProvider = ({
|
|
|
6065
6061
|
children,
|
|
6066
6062
|
position = "top-right"
|
|
6067
6063
|
}) => {
|
|
6068
|
-
const [toasts, setToasts] =
|
|
6069
|
-
const [removing, setRemoving] =
|
|
6070
|
-
const [mounted, setMounted] =
|
|
6071
|
-
|
|
6064
|
+
const [toasts, setToasts] = React39.useState([]);
|
|
6065
|
+
const [removing, setRemoving] = React39.useState(/* @__PURE__ */ new Set());
|
|
6066
|
+
const [mounted, setMounted] = React39.useState(false);
|
|
6067
|
+
React39.useEffect(() => {
|
|
6072
6068
|
setMounted(true);
|
|
6073
6069
|
}, []);
|
|
6074
|
-
const remove =
|
|
6070
|
+
const remove = React39.useCallback((id) => {
|
|
6075
6071
|
setRemoving((prev) => new Set(prev).add(id));
|
|
6076
6072
|
setTimeout(() => {
|
|
6077
6073
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
@@ -6082,7 +6078,7 @@ var ToastProvider = ({
|
|
|
6082
6078
|
});
|
|
6083
6079
|
}, EXIT_DURATION);
|
|
6084
6080
|
}, []);
|
|
6085
|
-
const toast =
|
|
6081
|
+
const toast = React39.useCallback(
|
|
6086
6082
|
(type, message, duration = 3e3) => {
|
|
6087
6083
|
const id = `${Date.now()}-${Math.random()}`;
|
|
6088
6084
|
setToasts((prev) => [...prev, { id, type, message }]);
|
|
@@ -6095,7 +6091,7 @@ var ToastProvider = ({
|
|
|
6095
6091
|
return /* @__PURE__ */ jsxs221(ToastContext.Provider, { value: { toast }, children: [
|
|
6096
6092
|
children,
|
|
6097
6093
|
mounted && createPortal3(
|
|
6098
|
-
/* @__PURE__ */
|
|
6094
|
+
/* @__PURE__ */ jsx350("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ jsx350(
|
|
6099
6095
|
ToastItemComponent,
|
|
6100
6096
|
{
|
|
6101
6097
|
item: t,
|
|
@@ -6111,8 +6107,8 @@ var ToastProvider = ({
|
|
|
6111
6107
|
ToastProvider.displayName = "ToastProvider";
|
|
6112
6108
|
|
|
6113
6109
|
// src/components/Tooltip/Tooltip.tsx
|
|
6114
|
-
import
|
|
6115
|
-
import { Fragment as Fragment5, jsx as
|
|
6110
|
+
import React40 from "react";
|
|
6111
|
+
import { Fragment as Fragment5, jsx as jsx351, jsxs as jsxs222 } from "react/jsx-runtime";
|
|
6116
6112
|
var OFFSET = 12;
|
|
6117
6113
|
var GAP = 8;
|
|
6118
6114
|
var SHOW_DELAY = 300;
|
|
@@ -6125,14 +6121,14 @@ var Tooltip = (props) => {
|
|
|
6125
6121
|
follow = false,
|
|
6126
6122
|
disabled = false
|
|
6127
6123
|
} = props;
|
|
6128
|
-
const triggerRef =
|
|
6129
|
-
const tooltipRef =
|
|
6130
|
-
const [visible, setVisible] =
|
|
6131
|
-
const [pos, setPos] =
|
|
6132
|
-
const delayTimer =
|
|
6133
|
-
const rafRef =
|
|
6134
|
-
const cursor =
|
|
6135
|
-
const clamp =
|
|
6124
|
+
const triggerRef = React40.useRef(null);
|
|
6125
|
+
const tooltipRef = React40.useRef(null);
|
|
6126
|
+
const [visible, setVisible] = React40.useState(false);
|
|
6127
|
+
const [pos, setPos] = React40.useState({ left: 0, top: 0 });
|
|
6128
|
+
const delayTimer = React40.useRef(0);
|
|
6129
|
+
const rafRef = React40.useRef(0);
|
|
6130
|
+
const cursor = React40.useRef(null);
|
|
6131
|
+
const clamp = React40.useCallback((left, top, w, h) => {
|
|
6136
6132
|
const vw = window.innerWidth;
|
|
6137
6133
|
const vh = window.innerHeight;
|
|
6138
6134
|
return {
|
|
@@ -6140,7 +6136,7 @@ var Tooltip = (props) => {
|
|
|
6140
6136
|
top: Math.min(Math.max(GAP, top), Math.max(GAP, vh - h - GAP))
|
|
6141
6137
|
};
|
|
6142
6138
|
}, []);
|
|
6143
|
-
const placeAtCursor =
|
|
6139
|
+
const placeAtCursor = React40.useCallback((x, y) => {
|
|
6144
6140
|
const el = tooltipRef.current;
|
|
6145
6141
|
if (!el) return;
|
|
6146
6142
|
const w = el.offsetWidth;
|
|
@@ -6151,7 +6147,7 @@ var Tooltip = (props) => {
|
|
|
6151
6147
|
if (top < GAP) top = y + OFFSET;
|
|
6152
6148
|
setPos(clamp(left, top, w, h));
|
|
6153
6149
|
}, [clamp]);
|
|
6154
|
-
const placeAtTrigger =
|
|
6150
|
+
const placeAtTrigger = React40.useCallback(() => {
|
|
6155
6151
|
const el = tooltipRef.current;
|
|
6156
6152
|
const trigger = triggerRef.current;
|
|
6157
6153
|
if (!el || !trigger) return;
|
|
@@ -6163,19 +6159,19 @@ var Tooltip = (props) => {
|
|
|
6163
6159
|
const left = rect.left + rect.width / 2 - w / 2;
|
|
6164
6160
|
setPos(clamp(left, top, w, h));
|
|
6165
6161
|
}, [clamp]);
|
|
6166
|
-
const reposition =
|
|
6162
|
+
const reposition = React40.useCallback(() => {
|
|
6167
6163
|
if (follow && cursor.current) {
|
|
6168
6164
|
placeAtCursor(cursor.current.x, cursor.current.y);
|
|
6169
6165
|
} else {
|
|
6170
6166
|
placeAtTrigger();
|
|
6171
6167
|
}
|
|
6172
6168
|
}, [follow, placeAtCursor, placeAtTrigger]);
|
|
6173
|
-
const handleMouseEnter =
|
|
6169
|
+
const handleMouseEnter = React40.useCallback((e) => {
|
|
6174
6170
|
if (disabled) return;
|
|
6175
6171
|
cursor.current = { x: e.clientX, y: e.clientY };
|
|
6176
6172
|
delayTimer.current = window.setTimeout(() => setVisible(true), SHOW_DELAY);
|
|
6177
6173
|
}, [disabled]);
|
|
6178
|
-
const handleMouseMove =
|
|
6174
|
+
const handleMouseMove = React40.useCallback((e) => {
|
|
6179
6175
|
cursor.current = { x: e.clientX, y: e.clientY };
|
|
6180
6176
|
if (!visible || !follow) return;
|
|
6181
6177
|
cancelAnimationFrame(rafRef.current);
|
|
@@ -6183,25 +6179,25 @@ var Tooltip = (props) => {
|
|
|
6183
6179
|
if (cursor.current) placeAtCursor(cursor.current.x, cursor.current.y);
|
|
6184
6180
|
});
|
|
6185
6181
|
}, [visible, follow, placeAtCursor]);
|
|
6186
|
-
const close =
|
|
6182
|
+
const close = React40.useCallback(() => {
|
|
6187
6183
|
window.clearTimeout(delayTimer.current);
|
|
6188
6184
|
cancelAnimationFrame(rafRef.current);
|
|
6189
6185
|
setVisible(false);
|
|
6190
6186
|
}, []);
|
|
6191
|
-
const handleMouseLeave =
|
|
6187
|
+
const handleMouseLeave = React40.useCallback(() => {
|
|
6192
6188
|
cursor.current = null;
|
|
6193
6189
|
close();
|
|
6194
6190
|
}, [close]);
|
|
6195
|
-
const handleFocus =
|
|
6191
|
+
const handleFocus = React40.useCallback(() => {
|
|
6196
6192
|
if (disabled) return;
|
|
6197
6193
|
cursor.current = null;
|
|
6198
6194
|
setVisible(true);
|
|
6199
6195
|
}, [disabled]);
|
|
6200
|
-
|
|
6196
|
+
React40.useLayoutEffect(() => {
|
|
6201
6197
|
if (!visible) return;
|
|
6202
6198
|
reposition();
|
|
6203
6199
|
}, [visible, reposition]);
|
|
6204
|
-
|
|
6200
|
+
React40.useEffect(() => {
|
|
6205
6201
|
if (!visible || follow) return;
|
|
6206
6202
|
const onChange = () => placeAtTrigger();
|
|
6207
6203
|
window.addEventListener("scroll", onChange, true);
|
|
@@ -6211,11 +6207,11 @@ var Tooltip = (props) => {
|
|
|
6211
6207
|
window.removeEventListener("resize", onChange);
|
|
6212
6208
|
};
|
|
6213
6209
|
}, [visible, follow, placeAtTrigger]);
|
|
6214
|
-
|
|
6210
|
+
React40.useEffect(() => () => {
|
|
6215
6211
|
window.clearTimeout(delayTimer.current);
|
|
6216
6212
|
cancelAnimationFrame(rafRef.current);
|
|
6217
6213
|
}, []);
|
|
6218
|
-
if (!title && !description) return /* @__PURE__ */
|
|
6214
|
+
if (!title && !description) return /* @__PURE__ */ jsx351(Fragment5, { children });
|
|
6219
6215
|
return /* @__PURE__ */ jsxs222(
|
|
6220
6216
|
"div",
|
|
6221
6217
|
{
|
|
@@ -6229,7 +6225,7 @@ var Tooltip = (props) => {
|
|
|
6229
6225
|
onBlur: close,
|
|
6230
6226
|
children: [
|
|
6231
6227
|
children,
|
|
6232
|
-
visible && /* @__PURE__ */
|
|
6228
|
+
visible && /* @__PURE__ */ jsx351(Portal_default, { children: /* @__PURE__ */ jsxs222(
|
|
6233
6229
|
"div",
|
|
6234
6230
|
{
|
|
6235
6231
|
ref: tooltipRef,
|
|
@@ -6237,8 +6233,8 @@ var Tooltip = (props) => {
|
|
|
6237
6233
|
className: clsx_default("lib-xplat-tooltip", type),
|
|
6238
6234
|
style: { position: "fixed", left: pos.left, top: pos.top },
|
|
6239
6235
|
children: [
|
|
6240
|
-
title && /* @__PURE__ */
|
|
6241
|
-
description && /* @__PURE__ */
|
|
6236
|
+
title && /* @__PURE__ */ jsx351("div", { className: "tooltip-title", children: title }),
|
|
6237
|
+
description && /* @__PURE__ */ jsx351("div", { className: "tooltip-desc", children: description })
|
|
6242
6238
|
]
|
|
6243
6239
|
}
|
|
6244
6240
|
) })
|
|
@@ -6250,11 +6246,11 @@ Tooltip.displayName = "Tooltip";
|
|
|
6250
6246
|
var Tooltip_default = Tooltip;
|
|
6251
6247
|
|
|
6252
6248
|
// src/components/Video/Video.tsx
|
|
6253
|
-
import
|
|
6254
|
-
import { jsx as
|
|
6249
|
+
import React41 from "react";
|
|
6250
|
+
import { jsx as jsx352, jsxs as jsxs223 } from "react/jsx-runtime";
|
|
6255
6251
|
var PipIcon = () => /* @__PURE__ */ jsxs223("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
6256
|
-
/* @__PURE__ */
|
|
6257
|
-
/* @__PURE__ */
|
|
6252
|
+
/* @__PURE__ */ jsx352("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
6253
|
+
/* @__PURE__ */ jsx352("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
|
|
6258
6254
|
] });
|
|
6259
6255
|
var formatTime = (sec) => {
|
|
6260
6256
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -6262,7 +6258,7 @@ var formatTime = (sec) => {
|
|
|
6262
6258
|
const s = Math.floor(sec % 60);
|
|
6263
6259
|
return `${m}:${s.toString().padStart(2, "0")}`;
|
|
6264
6260
|
};
|
|
6265
|
-
var Video =
|
|
6261
|
+
var Video = React41.forwardRef((props, ref) => {
|
|
6266
6262
|
const {
|
|
6267
6263
|
src,
|
|
6268
6264
|
poster,
|
|
@@ -6286,21 +6282,21 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6286
6282
|
children,
|
|
6287
6283
|
...rest
|
|
6288
6284
|
} = props;
|
|
6289
|
-
const containerRef =
|
|
6290
|
-
const videoRef =
|
|
6291
|
-
const [isPlaying, setIsPlaying] =
|
|
6292
|
-
const [isLoaded, setIsLoaded] =
|
|
6293
|
-
const [currentTime, setCurrentTime] =
|
|
6294
|
-
const [duration, setDuration] =
|
|
6295
|
-
const [buffered, setBuffered] =
|
|
6296
|
-
const [volume, setVolume] =
|
|
6297
|
-
const [isMuted, setIsMuted] =
|
|
6298
|
-
const [isFullscreen, setIsFullscreen] =
|
|
6299
|
-
const [playbackRate, setPlaybackRate] =
|
|
6300
|
-
const [rateMenuOpen, setRateMenuOpen] =
|
|
6301
|
-
const [captionsOn, setCaptionsOn] =
|
|
6302
|
-
const [isPip, setIsPip] =
|
|
6303
|
-
const setRefs =
|
|
6285
|
+
const containerRef = React41.useRef(null);
|
|
6286
|
+
const videoRef = React41.useRef(null);
|
|
6287
|
+
const [isPlaying, setIsPlaying] = React41.useState(Boolean(autoPlay));
|
|
6288
|
+
const [isLoaded, setIsLoaded] = React41.useState(false);
|
|
6289
|
+
const [currentTime, setCurrentTime] = React41.useState(0);
|
|
6290
|
+
const [duration, setDuration] = React41.useState(0);
|
|
6291
|
+
const [buffered, setBuffered] = React41.useState(0);
|
|
6292
|
+
const [volume, setVolume] = React41.useState(1);
|
|
6293
|
+
const [isMuted, setIsMuted] = React41.useState(Boolean(muted));
|
|
6294
|
+
const [isFullscreen, setIsFullscreen] = React41.useState(false);
|
|
6295
|
+
const [playbackRate, setPlaybackRate] = React41.useState(1);
|
|
6296
|
+
const [rateMenuOpen, setRateMenuOpen] = React41.useState(false);
|
|
6297
|
+
const [captionsOn, setCaptionsOn] = React41.useState(false);
|
|
6298
|
+
const [isPip, setIsPip] = React41.useState(false);
|
|
6299
|
+
const setRefs = React41.useCallback(
|
|
6304
6300
|
(el) => {
|
|
6305
6301
|
videoRef.current = el;
|
|
6306
6302
|
if (typeof ref === "function") ref(el);
|
|
@@ -6308,14 +6304,14 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6308
6304
|
},
|
|
6309
6305
|
[ref]
|
|
6310
6306
|
);
|
|
6311
|
-
|
|
6307
|
+
React41.useEffect(() => {
|
|
6312
6308
|
const onFsChange = () => {
|
|
6313
6309
|
setIsFullscreen(document.fullscreenElement === containerRef.current);
|
|
6314
6310
|
};
|
|
6315
6311
|
document.addEventListener("fullscreenchange", onFsChange);
|
|
6316
6312
|
return () => document.removeEventListener("fullscreenchange", onFsChange);
|
|
6317
6313
|
}, []);
|
|
6318
|
-
|
|
6314
|
+
React41.useEffect(() => {
|
|
6319
6315
|
const v = videoRef.current;
|
|
6320
6316
|
if (!v) return;
|
|
6321
6317
|
const onEnter = () => setIsPip(true);
|
|
@@ -6435,7 +6431,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6435
6431
|
ref: containerRef,
|
|
6436
6432
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
6437
6433
|
children: [
|
|
6438
|
-
/* @__PURE__ */
|
|
6434
|
+
/* @__PURE__ */ jsx352(
|
|
6439
6435
|
"video",
|
|
6440
6436
|
{
|
|
6441
6437
|
ref: setRefs,
|
|
@@ -6456,7 +6452,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6456
6452
|
children
|
|
6457
6453
|
}
|
|
6458
6454
|
),
|
|
6459
|
-
showCenterPlay && /* @__PURE__ */
|
|
6455
|
+
showCenterPlay && /* @__PURE__ */ jsx352(
|
|
6460
6456
|
"button",
|
|
6461
6457
|
{
|
|
6462
6458
|
type: "button",
|
|
@@ -6468,11 +6464,11 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6468
6464
|
onClick: togglePlay,
|
|
6469
6465
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
6470
6466
|
tabIndex: -1,
|
|
6471
|
-
children: /* @__PURE__ */
|
|
6467
|
+
children: /* @__PURE__ */ jsx352("span", { className: "center-play-icon", children: /* @__PURE__ */ jsx352(PlayCircleIcon_default, {}) })
|
|
6472
6468
|
}
|
|
6473
6469
|
),
|
|
6474
6470
|
showControls && /* @__PURE__ */ jsxs223("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
|
|
6475
|
-
/* @__PURE__ */
|
|
6471
|
+
/* @__PURE__ */ jsx352(
|
|
6476
6472
|
"input",
|
|
6477
6473
|
{
|
|
6478
6474
|
type: "range",
|
|
@@ -6490,28 +6486,28 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6490
6486
|
}
|
|
6491
6487
|
),
|
|
6492
6488
|
/* @__PURE__ */ jsxs223("div", { className: "controls-row", children: [
|
|
6493
|
-
/* @__PURE__ */
|
|
6489
|
+
/* @__PURE__ */ jsx352(
|
|
6494
6490
|
"button",
|
|
6495
6491
|
{
|
|
6496
6492
|
type: "button",
|
|
6497
6493
|
className: "control-btn",
|
|
6498
6494
|
onClick: togglePlay,
|
|
6499
6495
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
6500
|
-
children: isPlaying ? /* @__PURE__ */
|
|
6496
|
+
children: isPlaying ? /* @__PURE__ */ jsx352(PauseIcon_default, {}) : /* @__PURE__ */ jsx352(PlayIcon_default, {})
|
|
6501
6497
|
}
|
|
6502
6498
|
),
|
|
6503
6499
|
/* @__PURE__ */ jsxs223("div", { className: "volume-group", children: [
|
|
6504
|
-
/* @__PURE__ */
|
|
6500
|
+
/* @__PURE__ */ jsx352(
|
|
6505
6501
|
"button",
|
|
6506
6502
|
{
|
|
6507
6503
|
type: "button",
|
|
6508
6504
|
className: "control-btn",
|
|
6509
6505
|
onClick: toggleMute,
|
|
6510
6506
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
6511
|
-
children: /* @__PURE__ */
|
|
6507
|
+
children: /* @__PURE__ */ jsx352(VolumeGlyph, {})
|
|
6512
6508
|
}
|
|
6513
6509
|
),
|
|
6514
|
-
/* @__PURE__ */
|
|
6510
|
+
/* @__PURE__ */ jsx352(
|
|
6515
6511
|
"input",
|
|
6516
6512
|
{
|
|
6517
6513
|
type: "range",
|
|
@@ -6531,7 +6527,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6531
6527
|
" / ",
|
|
6532
6528
|
formatTime(duration)
|
|
6533
6529
|
] }),
|
|
6534
|
-
/* @__PURE__ */
|
|
6530
|
+
/* @__PURE__ */ jsx352("div", { className: "controls-spacer" }),
|
|
6535
6531
|
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ jsxs223("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
|
|
6536
6532
|
/* @__PURE__ */ jsxs223(
|
|
6537
6533
|
"button",
|
|
@@ -6547,7 +6543,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6547
6543
|
]
|
|
6548
6544
|
}
|
|
6549
6545
|
),
|
|
6550
|
-
rateMenuOpen && /* @__PURE__ */
|
|
6546
|
+
rateMenuOpen && /* @__PURE__ */ jsx352("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ jsx352("li", { children: /* @__PURE__ */ jsxs223(
|
|
6551
6547
|
"button",
|
|
6552
6548
|
{
|
|
6553
6549
|
type: "button",
|
|
@@ -6561,7 +6557,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6561
6557
|
}
|
|
6562
6558
|
) }, r2)) })
|
|
6563
6559
|
] }),
|
|
6564
|
-
showCaptions && /* @__PURE__ */
|
|
6560
|
+
showCaptions && /* @__PURE__ */ jsx352(
|
|
6565
6561
|
"button",
|
|
6566
6562
|
{
|
|
6567
6563
|
type: "button",
|
|
@@ -6569,37 +6565,37 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6569
6565
|
onClick: toggleCaptions,
|
|
6570
6566
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
6571
6567
|
"aria-pressed": captionsOn,
|
|
6572
|
-
children: /* @__PURE__ */
|
|
6568
|
+
children: /* @__PURE__ */ jsx352(TypeIcon_default, {})
|
|
6573
6569
|
}
|
|
6574
6570
|
),
|
|
6575
|
-
showPip && pipSupported && /* @__PURE__ */
|
|
6571
|
+
showPip && pipSupported && /* @__PURE__ */ jsx352(
|
|
6576
6572
|
"button",
|
|
6577
6573
|
{
|
|
6578
6574
|
type: "button",
|
|
6579
6575
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
6580
6576
|
onClick: togglePip,
|
|
6581
6577
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
6582
|
-
children: /* @__PURE__ */
|
|
6578
|
+
children: /* @__PURE__ */ jsx352(PipIcon, {})
|
|
6583
6579
|
}
|
|
6584
6580
|
),
|
|
6585
|
-
showDownload && /* @__PURE__ */
|
|
6581
|
+
showDownload && /* @__PURE__ */ jsx352(
|
|
6586
6582
|
"a",
|
|
6587
6583
|
{
|
|
6588
6584
|
className: "control-btn",
|
|
6589
6585
|
href: src,
|
|
6590
6586
|
download: downloadFileName ?? true,
|
|
6591
6587
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
6592
|
-
children: /* @__PURE__ */
|
|
6588
|
+
children: /* @__PURE__ */ jsx352(DownloadIcon_default, {})
|
|
6593
6589
|
}
|
|
6594
6590
|
),
|
|
6595
|
-
/* @__PURE__ */
|
|
6591
|
+
/* @__PURE__ */ jsx352(
|
|
6596
6592
|
"button",
|
|
6597
6593
|
{
|
|
6598
6594
|
type: "button",
|
|
6599
6595
|
className: "control-btn",
|
|
6600
6596
|
onClick: toggleFullscreen,
|
|
6601
6597
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
6602
|
-
children: isFullscreen ? /* @__PURE__ */
|
|
6598
|
+
children: isFullscreen ? /* @__PURE__ */ jsx352(MinimizeIcon_default, {}) : /* @__PURE__ */ jsx352(MaximizeIcon_default, {})
|
|
6603
6599
|
}
|
|
6604
6600
|
)
|
|
6605
6601
|
] })
|