@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/index.js
CHANGED
|
@@ -6989,7 +6989,7 @@ Chip.displayName = "Chip";
|
|
|
6989
6989
|
var Chip_default = Chip;
|
|
6990
6990
|
|
|
6991
6991
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
6992
|
-
import
|
|
6992
|
+
import React12 from "react";
|
|
6993
6993
|
|
|
6994
6994
|
// src/components/Input/Input.tsx
|
|
6995
6995
|
import React8 from "react";
|
|
@@ -7180,38 +7180,26 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
7180
7180
|
var PasswordInput_default = PasswordInput;
|
|
7181
7181
|
|
|
7182
7182
|
// src/components/Modal/Modal.tsx
|
|
7183
|
-
import React11 from "react";
|
|
7184
|
-
import { createPortal } from "react-dom";
|
|
7185
|
-
|
|
7186
|
-
// src/tokens/hooks/Portal.tsx
|
|
7187
7183
|
import React10 from "react";
|
|
7188
|
-
import
|
|
7184
|
+
import { createPortal } from "react-dom";
|
|
7189
7185
|
import { jsx as jsx313 } from "react/jsx-runtime";
|
|
7190
|
-
var PortalContainerContext = React10.createContext(null);
|
|
7191
|
-
var PortalProvider = ({ container, children }) => /* @__PURE__ */ jsx313(PortalContainerContext.Provider, { value: container, children });
|
|
7192
|
-
var Portal = ({ children }) => {
|
|
7193
|
-
const contextContainer = React10.useContext(PortalContainerContext);
|
|
7194
|
-
if (typeof document === "undefined") return null;
|
|
7195
|
-
const container = contextContainer ?? document.body;
|
|
7196
|
-
return ReactDOM.createPortal(children, container);
|
|
7197
|
-
};
|
|
7198
|
-
Portal.displayName = "Portal";
|
|
7199
|
-
var Portal_default = Portal;
|
|
7200
|
-
|
|
7201
|
-
// src/components/Modal/Modal.tsx
|
|
7202
|
-
import { jsx as jsx314 } from "react/jsx-runtime";
|
|
7203
7186
|
var ANIMATION_DURATION_MS = 200;
|
|
7204
7187
|
var Modal = (props) => {
|
|
7205
7188
|
const { isOpen, onClose, children } = props;
|
|
7206
|
-
const [mounted, setMounted] =
|
|
7207
|
-
const [visible, setVisible] =
|
|
7208
|
-
const
|
|
7209
|
-
|
|
7189
|
+
const [mounted, setMounted] = React10.useState(false);
|
|
7190
|
+
const [visible, setVisible] = React10.useState(false);
|
|
7191
|
+
const [settled, setSettled] = React10.useState(false);
|
|
7192
|
+
React10.useEffect(() => {
|
|
7210
7193
|
if (isOpen) {
|
|
7211
7194
|
setMounted(true);
|
|
7212
|
-
const
|
|
7213
|
-
|
|
7195
|
+
const show = setTimeout(() => setVisible(true), 1);
|
|
7196
|
+
const settle = setTimeout(() => setSettled(true), ANIMATION_DURATION_MS + 50);
|
|
7197
|
+
return () => {
|
|
7198
|
+
clearTimeout(show);
|
|
7199
|
+
clearTimeout(settle);
|
|
7200
|
+
};
|
|
7214
7201
|
}
|
|
7202
|
+
setSettled(false);
|
|
7215
7203
|
setVisible(false);
|
|
7216
7204
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS);
|
|
7217
7205
|
return () => clearTimeout(t);
|
|
@@ -7220,20 +7208,19 @@ var Modal = (props) => {
|
|
|
7220
7208
|
if (!mounted) return null;
|
|
7221
7209
|
const stateClass = visible ? "enter" : "exit";
|
|
7222
7210
|
return createPortal(
|
|
7223
|
-
/* @__PURE__ */
|
|
7211
|
+
/* @__PURE__ */ jsx313(
|
|
7224
7212
|
"div",
|
|
7225
7213
|
{
|
|
7226
7214
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
7227
7215
|
onClick: onClose,
|
|
7228
|
-
children: /* @__PURE__ */
|
|
7216
|
+
children: /* @__PURE__ */ jsx313(
|
|
7229
7217
|
"div",
|
|
7230
7218
|
{
|
|
7231
|
-
|
|
7232
|
-
className: clsx_default("lib-xplat-modal", "modal-box", stateClass),
|
|
7219
|
+
className: clsx_default("lib-xplat-modal", "modal-box", stateClass, settled && "settled"),
|
|
7233
7220
|
role: "dialog",
|
|
7234
7221
|
"aria-modal": "true",
|
|
7235
7222
|
onClick: (e) => e.stopPropagation(),
|
|
7236
|
-
children
|
|
7223
|
+
children
|
|
7237
7224
|
}
|
|
7238
7225
|
)
|
|
7239
7226
|
}
|
|
@@ -7245,9 +7232,9 @@ Modal.displayName = "Modal";
|
|
|
7245
7232
|
var Modal_default = Modal;
|
|
7246
7233
|
|
|
7247
7234
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
7248
|
-
import
|
|
7249
|
-
import { Fragment as Fragment3, jsx as
|
|
7250
|
-
var DayCell2 =
|
|
7235
|
+
import React11 from "react";
|
|
7236
|
+
import { Fragment as Fragment3, jsx as jsx314, jsxs as jsxs200 } from "react/jsx-runtime";
|
|
7237
|
+
var DayCell2 = React11.memo(
|
|
7251
7238
|
({
|
|
7252
7239
|
day,
|
|
7253
7240
|
disabled,
|
|
@@ -7257,7 +7244,7 @@ var DayCell2 = React12.memo(
|
|
|
7257
7244
|
isEnd,
|
|
7258
7245
|
inRange,
|
|
7259
7246
|
onSelect
|
|
7260
|
-
}) => /* @__PURE__ */
|
|
7247
|
+
}) => /* @__PURE__ */ jsx314(
|
|
7261
7248
|
"button",
|
|
7262
7249
|
{
|
|
7263
7250
|
type: "button",
|
|
@@ -7299,26 +7286,26 @@ var SingleDatePicker = (props) => {
|
|
|
7299
7286
|
initialYear,
|
|
7300
7287
|
initialMonth
|
|
7301
7288
|
);
|
|
7302
|
-
const [pickerMode, setPickerMode] =
|
|
7303
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
7289
|
+
const [pickerMode, setPickerMode] = React11.useState("days");
|
|
7290
|
+
const [yearRangeStart, setYearRangeStart] = React11.useState(
|
|
7304
7291
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
7305
7292
|
);
|
|
7306
|
-
const minTime =
|
|
7293
|
+
const minTime = React11.useMemo(
|
|
7307
7294
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
7308
7295
|
[minDate]
|
|
7309
7296
|
);
|
|
7310
|
-
const maxTime =
|
|
7297
|
+
const maxTime = React11.useMemo(
|
|
7311
7298
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
7312
7299
|
[maxDate]
|
|
7313
7300
|
);
|
|
7314
|
-
const highlightSet =
|
|
7301
|
+
const highlightSet = React11.useMemo(() => {
|
|
7315
7302
|
const set = /* @__PURE__ */ new Set();
|
|
7316
7303
|
for (const h of highlightDates) {
|
|
7317
7304
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
7318
7305
|
}
|
|
7319
7306
|
return set;
|
|
7320
7307
|
}, [highlightDates]);
|
|
7321
|
-
const handleSelect =
|
|
7308
|
+
const handleSelect = React11.useCallback(
|
|
7322
7309
|
(date) => {
|
|
7323
7310
|
onChange?.(date);
|
|
7324
7311
|
},
|
|
@@ -7361,14 +7348,14 @@ var SingleDatePicker = (props) => {
|
|
|
7361
7348
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
7362
7349
|
children: [
|
|
7363
7350
|
/* @__PURE__ */ jsxs200("div", { className: "datepicker-header", children: [
|
|
7364
|
-
/* @__PURE__ */
|
|
7365
|
-
/* @__PURE__ */
|
|
7366
|
-
/* @__PURE__ */
|
|
7351
|
+
/* @__PURE__ */ jsx314("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ jsx314(ChevronLeftIcon_default, {}) }),
|
|
7352
|
+
/* @__PURE__ */ jsx314("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
7353
|
+
/* @__PURE__ */ jsx314("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ jsx314(ChevronRightIcon_default, {}) })
|
|
7367
7354
|
] }),
|
|
7368
7355
|
/* @__PURE__ */ jsxs200("div", { className: "datepicker-body", children: [
|
|
7369
|
-
pickerMode === "years" && /* @__PURE__ */
|
|
7356
|
+
pickerMode === "years" && /* @__PURE__ */ jsx314("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
7370
7357
|
const y = yearRangeStart + i;
|
|
7371
|
-
return /* @__PURE__ */
|
|
7358
|
+
return /* @__PURE__ */ jsx314(
|
|
7372
7359
|
"button",
|
|
7373
7360
|
{
|
|
7374
7361
|
type: "button",
|
|
@@ -7379,7 +7366,7 @@ var SingleDatePicker = (props) => {
|
|
|
7379
7366
|
y
|
|
7380
7367
|
);
|
|
7381
7368
|
}) }),
|
|
7382
|
-
pickerMode === "months" && /* @__PURE__ */
|
|
7369
|
+
pickerMode === "months" && /* @__PURE__ */ jsx314("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ jsx314(
|
|
7383
7370
|
"button",
|
|
7384
7371
|
{
|
|
7385
7372
|
type: "button",
|
|
@@ -7390,7 +7377,7 @@ var SingleDatePicker = (props) => {
|
|
|
7390
7377
|
i
|
|
7391
7378
|
)) }),
|
|
7392
7379
|
pickerMode === "days" && /* @__PURE__ */ jsxs200(Fragment3, { children: [
|
|
7393
|
-
/* @__PURE__ */
|
|
7380
|
+
/* @__PURE__ */ jsx314("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ jsx314(
|
|
7394
7381
|
"div",
|
|
7395
7382
|
{
|
|
7396
7383
|
className: clsx_default(
|
|
@@ -7402,7 +7389,7 @@ var SingleDatePicker = (props) => {
|
|
|
7402
7389
|
},
|
|
7403
7390
|
label
|
|
7404
7391
|
)) }),
|
|
7405
|
-
/* @__PURE__ */
|
|
7392
|
+
/* @__PURE__ */ jsx314("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
7406
7393
|
const t = day.date.getTime();
|
|
7407
7394
|
const disabled = t < minTime || t > maxTime;
|
|
7408
7395
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -7412,7 +7399,7 @@ var SingleDatePicker = (props) => {
|
|
|
7412
7399
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
7413
7400
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
7414
7401
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
7415
|
-
return /* @__PURE__ */
|
|
7402
|
+
return /* @__PURE__ */ jsx314(
|
|
7416
7403
|
DayCell2,
|
|
7417
7404
|
{
|
|
7418
7405
|
day,
|
|
@@ -7437,7 +7424,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
7437
7424
|
var SingleDatePicker_default = SingleDatePicker;
|
|
7438
7425
|
|
|
7439
7426
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
7440
|
-
import { jsx as
|
|
7427
|
+
import { jsx as jsx315, jsxs as jsxs201 } from "react/jsx-runtime";
|
|
7441
7428
|
var formatDate = (date) => {
|
|
7442
7429
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
7443
7430
|
const y = date.getFullYear();
|
|
@@ -7447,8 +7434,8 @@ var formatDate = (date) => {
|
|
|
7447
7434
|
};
|
|
7448
7435
|
var InputDatePicker = (props) => {
|
|
7449
7436
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
7450
|
-
const [isOpen, setIsOpen] =
|
|
7451
|
-
const [tempDate, setTempDate] =
|
|
7437
|
+
const [isOpen, setIsOpen] = React12.useState(false);
|
|
7438
|
+
const [tempDate, setTempDate] = React12.useState(value ?? /* @__PURE__ */ new Date());
|
|
7452
7439
|
const handleOpen = () => {
|
|
7453
7440
|
if (disabled) return;
|
|
7454
7441
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -7465,18 +7452,18 @@ var InputDatePicker = (props) => {
|
|
|
7465
7452
|
setIsOpen(false);
|
|
7466
7453
|
};
|
|
7467
7454
|
return /* @__PURE__ */ jsxs201("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
|
|
7468
|
-
/* @__PURE__ */
|
|
7455
|
+
/* @__PURE__ */ jsx315("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ jsx315(
|
|
7469
7456
|
Input_default,
|
|
7470
7457
|
{
|
|
7471
7458
|
value: formatDate(value),
|
|
7472
7459
|
placeholder,
|
|
7473
|
-
suffix: /* @__PURE__ */
|
|
7460
|
+
suffix: /* @__PURE__ */ jsx315(CalenderIcon_default, {}),
|
|
7474
7461
|
disabled,
|
|
7475
7462
|
readOnly: true
|
|
7476
7463
|
}
|
|
7477
7464
|
) }),
|
|
7478
|
-
/* @__PURE__ */
|
|
7479
|
-
/* @__PURE__ */
|
|
7465
|
+
/* @__PURE__ */ jsx315(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs201("div", { className: "lib-xplat-popup-datepicker-card", children: [
|
|
7466
|
+
/* @__PURE__ */ jsx315("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ jsx315(
|
|
7480
7467
|
SingleDatePicker_default,
|
|
7481
7468
|
{
|
|
7482
7469
|
value: tempDate,
|
|
@@ -7487,8 +7474,8 @@ var InputDatePicker = (props) => {
|
|
|
7487
7474
|
}
|
|
7488
7475
|
) }),
|
|
7489
7476
|
/* @__PURE__ */ jsxs201("div", { className: "popup-datepicker-footer", children: [
|
|
7490
|
-
/* @__PURE__ */
|
|
7491
|
-
/* @__PURE__ */
|
|
7477
|
+
/* @__PURE__ */ jsx315(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
|
|
7478
|
+
/* @__PURE__ */ jsx315(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
7492
7479
|
] })
|
|
7493
7480
|
] }) })
|
|
7494
7481
|
] });
|
|
@@ -7497,20 +7484,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
7497
7484
|
var InputDatePicker_default = InputDatePicker;
|
|
7498
7485
|
|
|
7499
7486
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7500
|
-
import
|
|
7487
|
+
import React16 from "react";
|
|
7501
7488
|
|
|
7502
7489
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7503
|
-
import
|
|
7490
|
+
import React15 from "react";
|
|
7504
7491
|
|
|
7505
7492
|
// src/components/Tab/Tab.tsx
|
|
7506
|
-
import
|
|
7493
|
+
import React14 from "react";
|
|
7507
7494
|
|
|
7508
7495
|
// src/components/Tab/TabItem.tsx
|
|
7509
|
-
import
|
|
7510
|
-
import { jsx as
|
|
7511
|
-
var TabItem =
|
|
7496
|
+
import React13 from "react";
|
|
7497
|
+
import { jsx as jsx316 } from "react/jsx-runtime";
|
|
7498
|
+
var TabItem = React13.forwardRef((props, ref) => {
|
|
7512
7499
|
const { isActive: isActive2, title, onClick } = props;
|
|
7513
|
-
return /* @__PURE__ */
|
|
7500
|
+
return /* @__PURE__ */ jsx316(
|
|
7514
7501
|
"div",
|
|
7515
7502
|
{
|
|
7516
7503
|
ref,
|
|
@@ -7524,25 +7511,25 @@ TabItem.displayName = "TabItem";
|
|
|
7524
7511
|
var TabItem_default = TabItem;
|
|
7525
7512
|
|
|
7526
7513
|
// src/components/Tab/Tab.tsx
|
|
7527
|
-
import { jsx as
|
|
7514
|
+
import { jsx as jsx317, jsxs as jsxs202 } from "react/jsx-runtime";
|
|
7528
7515
|
var Tab = (props) => {
|
|
7529
7516
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
7530
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
7517
|
+
const [underlineStyle, setUnderlineStyle] = React14.useState({
|
|
7531
7518
|
left: 0,
|
|
7532
7519
|
width: 0
|
|
7533
7520
|
});
|
|
7534
|
-
const itemRefs =
|
|
7521
|
+
const itemRefs = React14.useRef([]);
|
|
7535
7522
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
7536
7523
|
onChange(tabItem, tabIdx);
|
|
7537
7524
|
};
|
|
7538
|
-
|
|
7525
|
+
React14.useEffect(() => {
|
|
7539
7526
|
const el = itemRefs.current[activeIndex];
|
|
7540
7527
|
if (el) {
|
|
7541
7528
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
7542
7529
|
}
|
|
7543
7530
|
}, [activeIndex, tabs.length]);
|
|
7544
7531
|
return /* @__PURE__ */ jsxs202("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
|
|
7545
|
-
tabs.map((tab, idx) => /* @__PURE__ */
|
|
7532
|
+
tabs.map((tab, idx) => /* @__PURE__ */ jsx317(
|
|
7546
7533
|
TabItem_default,
|
|
7547
7534
|
{
|
|
7548
7535
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -7554,7 +7541,7 @@ var Tab = (props) => {
|
|
|
7554
7541
|
},
|
|
7555
7542
|
`${tab.value}_${idx}`
|
|
7556
7543
|
)),
|
|
7557
|
-
type === "toggle" && /* @__PURE__ */
|
|
7544
|
+
type === "toggle" && /* @__PURE__ */ jsx317(
|
|
7558
7545
|
"div",
|
|
7559
7546
|
{
|
|
7560
7547
|
className: "tab-toggle-underline",
|
|
@@ -7570,7 +7557,7 @@ Tab.displayName = "Tab";
|
|
|
7570
7557
|
var Tab_default = Tab;
|
|
7571
7558
|
|
|
7572
7559
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7573
|
-
import { jsx as
|
|
7560
|
+
import { jsx as jsx318, jsxs as jsxs203 } from "react/jsx-runtime";
|
|
7574
7561
|
var RangePicker = (props) => {
|
|
7575
7562
|
const {
|
|
7576
7563
|
startDate,
|
|
@@ -7580,7 +7567,7 @@ var RangePicker = (props) => {
|
|
|
7580
7567
|
maxDate,
|
|
7581
7568
|
locale = "ko"
|
|
7582
7569
|
} = props;
|
|
7583
|
-
const [activeTab, setActiveTab] =
|
|
7570
|
+
const [activeTab, setActiveTab] = React15.useState("start");
|
|
7584
7571
|
const handleStartChange = (date) => {
|
|
7585
7572
|
if (!date) return;
|
|
7586
7573
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -7594,7 +7581,7 @@ var RangePicker = (props) => {
|
|
|
7594
7581
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
7595
7582
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
7596
7583
|
return /* @__PURE__ */ jsxs203("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
|
|
7597
|
-
/* @__PURE__ */
|
|
7584
|
+
/* @__PURE__ */ jsx318("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ jsx318(
|
|
7598
7585
|
Tab_default,
|
|
7599
7586
|
{
|
|
7600
7587
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -7608,7 +7595,7 @@ var RangePicker = (props) => {
|
|
|
7608
7595
|
}
|
|
7609
7596
|
) }),
|
|
7610
7597
|
/* @__PURE__ */ jsxs203("div", { className: "datepicker-range-panels", children: [
|
|
7611
|
-
/* @__PURE__ */
|
|
7598
|
+
/* @__PURE__ */ jsx318(
|
|
7612
7599
|
SingleDatePicker_default,
|
|
7613
7600
|
{
|
|
7614
7601
|
value: startDate,
|
|
@@ -7620,7 +7607,7 @@ var RangePicker = (props) => {
|
|
|
7620
7607
|
locale
|
|
7621
7608
|
}
|
|
7622
7609
|
),
|
|
7623
|
-
/* @__PURE__ */
|
|
7610
|
+
/* @__PURE__ */ jsx318(
|
|
7624
7611
|
SingleDatePicker_default,
|
|
7625
7612
|
{
|
|
7626
7613
|
value: endDate,
|
|
@@ -7633,7 +7620,7 @@ var RangePicker = (props) => {
|
|
|
7633
7620
|
}
|
|
7634
7621
|
)
|
|
7635
7622
|
] }),
|
|
7636
|
-
/* @__PURE__ */
|
|
7623
|
+
/* @__PURE__ */ jsx318("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ jsx318(
|
|
7637
7624
|
SingleDatePicker_default,
|
|
7638
7625
|
{
|
|
7639
7626
|
value: startDate,
|
|
@@ -7644,7 +7631,7 @@ var RangePicker = (props) => {
|
|
|
7644
7631
|
rangeEnd: endDate,
|
|
7645
7632
|
locale
|
|
7646
7633
|
}
|
|
7647
|
-
) : /* @__PURE__ */
|
|
7634
|
+
) : /* @__PURE__ */ jsx318(
|
|
7648
7635
|
SingleDatePicker_default,
|
|
7649
7636
|
{
|
|
7650
7637
|
value: endDate,
|
|
@@ -7662,10 +7649,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
7662
7649
|
var RangePicker_default = RangePicker;
|
|
7663
7650
|
|
|
7664
7651
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7665
|
-
import { jsx as
|
|
7652
|
+
import { jsx as jsx319, jsxs as jsxs204 } from "react/jsx-runtime";
|
|
7666
7653
|
var PopupPicker = (props) => {
|
|
7667
7654
|
const { component, type, locale } = props;
|
|
7668
|
-
const [isOpen, setIsOpen] =
|
|
7655
|
+
const [isOpen, setIsOpen] = React16.useState(false);
|
|
7669
7656
|
const handleClick = () => setIsOpen(true);
|
|
7670
7657
|
const handleClose = () => setIsOpen(false);
|
|
7671
7658
|
const handleSingleChange = (date) => {
|
|
@@ -7674,10 +7661,10 @@ var PopupPicker = (props) => {
|
|
|
7674
7661
|
handleClose();
|
|
7675
7662
|
};
|
|
7676
7663
|
return /* @__PURE__ */ jsxs204("div", { className: "lib-xplat-popup-datepicker", children: [
|
|
7677
|
-
|
|
7678
|
-
/* @__PURE__ */
|
|
7664
|
+
React16.cloneElement(component, { onClick: handleClick }),
|
|
7665
|
+
/* @__PURE__ */ jsx319(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs204("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
|
|
7679
7666
|
/* @__PURE__ */ jsxs204("div", { className: "popup-datepicker-content", children: [
|
|
7680
|
-
type === "single" && /* @__PURE__ */
|
|
7667
|
+
type === "single" && /* @__PURE__ */ jsx319(
|
|
7681
7668
|
SingleDatePicker_default,
|
|
7682
7669
|
{
|
|
7683
7670
|
value: props.value,
|
|
@@ -7687,7 +7674,7 @@ var PopupPicker = (props) => {
|
|
|
7687
7674
|
locale
|
|
7688
7675
|
}
|
|
7689
7676
|
),
|
|
7690
|
-
type === "range" && /* @__PURE__ */
|
|
7677
|
+
type === "range" && /* @__PURE__ */ jsx319(
|
|
7691
7678
|
RangePicker_default,
|
|
7692
7679
|
{
|
|
7693
7680
|
startDate: props.startDate,
|
|
@@ -7700,7 +7687,7 @@ var PopupPicker = (props) => {
|
|
|
7700
7687
|
)
|
|
7701
7688
|
] }),
|
|
7702
7689
|
/* @__PURE__ */ jsxs204("div", { className: "popup-datepicker-footer", children: [
|
|
7703
|
-
/* @__PURE__ */
|
|
7690
|
+
/* @__PURE__ */ jsx319(
|
|
7704
7691
|
Button_default,
|
|
7705
7692
|
{
|
|
7706
7693
|
type: "secondary",
|
|
@@ -7708,7 +7695,7 @@ var PopupPicker = (props) => {
|
|
|
7708
7695
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
7709
7696
|
}
|
|
7710
7697
|
),
|
|
7711
|
-
/* @__PURE__ */
|
|
7698
|
+
/* @__PURE__ */ jsx319(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
7712
7699
|
] })
|
|
7713
7700
|
] }) })
|
|
7714
7701
|
] });
|
|
@@ -7717,10 +7704,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
7717
7704
|
var PopupPicker_default = PopupPicker;
|
|
7718
7705
|
|
|
7719
7706
|
// src/components/Divider/Divider.tsx
|
|
7720
|
-
import { jsx as
|
|
7707
|
+
import { jsx as jsx320 } from "react/jsx-runtime";
|
|
7721
7708
|
var Divider = (props) => {
|
|
7722
7709
|
const { orientation = "horizontal" } = props;
|
|
7723
|
-
return /* @__PURE__ */
|
|
7710
|
+
return /* @__PURE__ */ jsx320(
|
|
7724
7711
|
"div",
|
|
7725
7712
|
{
|
|
7726
7713
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -7733,15 +7720,15 @@ Divider.displayName = "Divider";
|
|
|
7733
7720
|
var Divider_default = Divider;
|
|
7734
7721
|
|
|
7735
7722
|
// src/components/Drawer/Drawer.tsx
|
|
7736
|
-
import
|
|
7723
|
+
import React17 from "react";
|
|
7737
7724
|
import { createPortal as createPortal2 } from "react-dom";
|
|
7738
|
-
import { jsx as
|
|
7725
|
+
import { jsx as jsx321, jsxs as jsxs205 } from "react/jsx-runtime";
|
|
7739
7726
|
var ANIMATION_DURATION_MS2 = 250;
|
|
7740
7727
|
var Drawer = (props) => {
|
|
7741
7728
|
const { isOpen, onClose, placement = "right", size = "md", title, children } = props;
|
|
7742
|
-
const [mounted, setMounted] =
|
|
7743
|
-
const [visible, setVisible] =
|
|
7744
|
-
|
|
7729
|
+
const [mounted, setMounted] = React17.useState(false);
|
|
7730
|
+
const [visible, setVisible] = React17.useState(false);
|
|
7731
|
+
React17.useEffect(() => {
|
|
7745
7732
|
if (isOpen) {
|
|
7746
7733
|
setMounted(true);
|
|
7747
7734
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7755,7 +7742,7 @@ var Drawer = (props) => {
|
|
|
7755
7742
|
if (!mounted) return null;
|
|
7756
7743
|
const stateClass = visible ? "enter" : "exit";
|
|
7757
7744
|
return createPortal2(
|
|
7758
|
-
/* @__PURE__ */
|
|
7745
|
+
/* @__PURE__ */ jsx321(
|
|
7759
7746
|
"div",
|
|
7760
7747
|
{
|
|
7761
7748
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
@@ -7769,10 +7756,10 @@ var Drawer = (props) => {
|
|
|
7769
7756
|
onClick: (e) => e.stopPropagation(),
|
|
7770
7757
|
children: [
|
|
7771
7758
|
title && /* @__PURE__ */ jsxs205("div", { className: "drawer-header", children: [
|
|
7772
|
-
/* @__PURE__ */
|
|
7773
|
-
/* @__PURE__ */
|
|
7759
|
+
/* @__PURE__ */ jsx321("span", { className: "drawer-title", children: title }),
|
|
7760
|
+
/* @__PURE__ */ jsx321("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
7774
7761
|
] }),
|
|
7775
|
-
/* @__PURE__ */
|
|
7762
|
+
/* @__PURE__ */ jsx321("div", { className: "drawer-body", children })
|
|
7776
7763
|
]
|
|
7777
7764
|
}
|
|
7778
7765
|
)
|
|
@@ -7785,16 +7772,25 @@ Drawer.displayName = "Drawer";
|
|
|
7785
7772
|
var Drawer_default = Drawer;
|
|
7786
7773
|
|
|
7787
7774
|
// src/components/Dropdown/Dropdown.tsx
|
|
7788
|
-
import
|
|
7775
|
+
import React20 from "react";
|
|
7776
|
+
|
|
7777
|
+
// src/tokens/hooks/Portal.tsx
|
|
7778
|
+
import ReactDOM from "react-dom";
|
|
7779
|
+
var Portal = ({ children }) => {
|
|
7780
|
+
if (typeof document === "undefined") return null;
|
|
7781
|
+
return ReactDOM.createPortal(children, document.body);
|
|
7782
|
+
};
|
|
7783
|
+
Portal.displayName = "Portal";
|
|
7784
|
+
var Portal_default = Portal;
|
|
7789
7785
|
|
|
7790
7786
|
// src/tokens/hooks/useAutoPosition.ts
|
|
7791
|
-
import
|
|
7787
|
+
import React18 from "react";
|
|
7792
7788
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
7793
|
-
const [position, setPosition] =
|
|
7789
|
+
const [position, setPosition] = React18.useState({
|
|
7794
7790
|
position: {},
|
|
7795
7791
|
direction: "bottom"
|
|
7796
7792
|
});
|
|
7797
|
-
const calculatePosition =
|
|
7793
|
+
const calculatePosition = React18.useCallback(() => {
|
|
7798
7794
|
if (!triggerRef.current || !popRef.current) return;
|
|
7799
7795
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
7800
7796
|
const popW = popRef.current.offsetWidth;
|
|
@@ -7821,13 +7817,13 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7821
7817
|
direction
|
|
7822
7818
|
});
|
|
7823
7819
|
}, [triggerRef, popRef]);
|
|
7824
|
-
|
|
7820
|
+
React18.useLayoutEffect(() => {
|
|
7825
7821
|
if (!enabled) return;
|
|
7826
7822
|
calculatePosition();
|
|
7827
7823
|
const raf = requestAnimationFrame(calculatePosition);
|
|
7828
7824
|
return () => cancelAnimationFrame(raf);
|
|
7829
7825
|
}, [calculatePosition, enabled]);
|
|
7830
|
-
|
|
7826
|
+
React18.useEffect(() => {
|
|
7831
7827
|
if (!enabled || !popRef.current) return;
|
|
7832
7828
|
const observer = new ResizeObserver(() => {
|
|
7833
7829
|
calculatePosition();
|
|
@@ -7835,7 +7831,7 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7835
7831
|
observer.observe(popRef.current);
|
|
7836
7832
|
return () => observer.disconnect();
|
|
7837
7833
|
}, [calculatePosition, enabled, popRef]);
|
|
7838
|
-
|
|
7834
|
+
React18.useEffect(() => {
|
|
7839
7835
|
if (!enabled) return;
|
|
7840
7836
|
window.addEventListener("resize", calculatePosition);
|
|
7841
7837
|
window.addEventListener("scroll", calculatePosition, true);
|
|
@@ -7849,9 +7845,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7849
7845
|
var useAutoPosition_default = useAutoPosition;
|
|
7850
7846
|
|
|
7851
7847
|
// src/tokens/hooks/useClickOutside.ts
|
|
7852
|
-
import
|
|
7848
|
+
import React19 from "react";
|
|
7853
7849
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
7854
|
-
|
|
7850
|
+
React19.useEffect(() => {
|
|
7855
7851
|
if (!enabled) return;
|
|
7856
7852
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
7857
7853
|
const listener = (event) => {
|
|
@@ -7874,17 +7870,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
7874
7870
|
var useClickOutside_default = useClickOutside;
|
|
7875
7871
|
|
|
7876
7872
|
// src/components/Dropdown/Dropdown.tsx
|
|
7877
|
-
import { jsx as
|
|
7873
|
+
import { jsx as jsx322, jsxs as jsxs206 } from "react/jsx-runtime";
|
|
7878
7874
|
var Dropdown = (props) => {
|
|
7879
7875
|
const { items, children } = props;
|
|
7880
|
-
const [isOpen, setIsOpen] =
|
|
7881
|
-
const [mounted, setMounted] =
|
|
7882
|
-
const [visible, setVisible] =
|
|
7883
|
-
const triggerRef =
|
|
7884
|
-
const menuRef =
|
|
7876
|
+
const [isOpen, setIsOpen] = React20.useState(false);
|
|
7877
|
+
const [mounted, setMounted] = React20.useState(false);
|
|
7878
|
+
const [visible, setVisible] = React20.useState(false);
|
|
7879
|
+
const triggerRef = React20.useRef(null);
|
|
7880
|
+
const menuRef = React20.useRef(null);
|
|
7885
7881
|
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
7886
7882
|
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
7887
|
-
|
|
7883
|
+
React20.useEffect(() => {
|
|
7888
7884
|
if (isOpen) {
|
|
7889
7885
|
setMounted(true);
|
|
7890
7886
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7900,7 +7896,7 @@ var Dropdown = (props) => {
|
|
|
7900
7896
|
setIsOpen(false);
|
|
7901
7897
|
};
|
|
7902
7898
|
return /* @__PURE__ */ jsxs206("div", { className: "lib-xplat-dropdown", children: [
|
|
7903
|
-
/* @__PURE__ */
|
|
7899
|
+
/* @__PURE__ */ jsx322(
|
|
7904
7900
|
"div",
|
|
7905
7901
|
{
|
|
7906
7902
|
ref: triggerRef,
|
|
@@ -7909,14 +7905,14 @@ var Dropdown = (props) => {
|
|
|
7909
7905
|
children
|
|
7910
7906
|
}
|
|
7911
7907
|
),
|
|
7912
|
-
mounted && /* @__PURE__ */
|
|
7908
|
+
mounted && /* @__PURE__ */ jsx322(Portal_default, { children: /* @__PURE__ */ jsx322(
|
|
7913
7909
|
"div",
|
|
7914
7910
|
{
|
|
7915
7911
|
ref: menuRef,
|
|
7916
7912
|
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
7917
7913
|
style: { top: position.top, left: position.left },
|
|
7918
7914
|
role: "menu",
|
|
7919
|
-
children: items.map((item) => /* @__PURE__ */
|
|
7915
|
+
children: items.map((item) => /* @__PURE__ */ jsx322(
|
|
7920
7916
|
"button",
|
|
7921
7917
|
{
|
|
7922
7918
|
className: clsx_default("dropdown-item", {
|
|
@@ -7938,8 +7934,8 @@ Dropdown.displayName = "Dropdown";
|
|
|
7938
7934
|
var Dropdown_default = Dropdown;
|
|
7939
7935
|
|
|
7940
7936
|
// src/components/Editor/Editor.tsx
|
|
7941
|
-
import
|
|
7942
|
-
import { jsx as
|
|
7937
|
+
import React21 from "react";
|
|
7938
|
+
import { jsx as jsx323, jsxs as jsxs207 } from "react/jsx-runtime";
|
|
7943
7939
|
var DEFAULT_TOOLBAR = [
|
|
7944
7940
|
"bold",
|
|
7945
7941
|
"italic",
|
|
@@ -8046,21 +8042,21 @@ var Editor = (props) => {
|
|
|
8046
8042
|
onImageUpload,
|
|
8047
8043
|
minHeight = 200
|
|
8048
8044
|
} = props;
|
|
8049
|
-
const editorRef =
|
|
8050
|
-
const lastRangeRef =
|
|
8051
|
-
const composingRef =
|
|
8052
|
-
const [isFocused, setIsFocused] =
|
|
8053
|
-
const [isEmpty, setIsEmpty] =
|
|
8054
|
-
const [activeFormats, setActiveFormats] =
|
|
8055
|
-
const [slashOpen, setSlashOpen] =
|
|
8056
|
-
const [slashFilter, setSlashFilter] =
|
|
8057
|
-
const [slashIdx, setSlashIdx] =
|
|
8058
|
-
const [slashPos, setSlashPos] =
|
|
8059
|
-
const slashStartRangeRef =
|
|
8060
|
-
const [linkOpen, setLinkOpen] =
|
|
8061
|
-
const [linkValue, setLinkValue] =
|
|
8062
|
-
const [linkPos, setLinkPos] =
|
|
8063
|
-
|
|
8045
|
+
const editorRef = React21.useRef(null);
|
|
8046
|
+
const lastRangeRef = React21.useRef(null);
|
|
8047
|
+
const composingRef = React21.useRef(false);
|
|
8048
|
+
const [isFocused, setIsFocused] = React21.useState(false);
|
|
8049
|
+
const [isEmpty, setIsEmpty] = React21.useState(!value);
|
|
8050
|
+
const [activeFormats, setActiveFormats] = React21.useState(/* @__PURE__ */ new Set());
|
|
8051
|
+
const [slashOpen, setSlashOpen] = React21.useState(false);
|
|
8052
|
+
const [slashFilter, setSlashFilter] = React21.useState("");
|
|
8053
|
+
const [slashIdx, setSlashIdx] = React21.useState(0);
|
|
8054
|
+
const [slashPos, setSlashPos] = React21.useState({ top: 0, left: 0 });
|
|
8055
|
+
const slashStartRangeRef = React21.useRef(null);
|
|
8056
|
+
const [linkOpen, setLinkOpen] = React21.useState(false);
|
|
8057
|
+
const [linkValue, setLinkValue] = React21.useState("");
|
|
8058
|
+
const [linkPos, setLinkPos] = React21.useState({ top: 0, left: 0 });
|
|
8059
|
+
React21.useEffect(() => {
|
|
8064
8060
|
if (!editorRef.current) return;
|
|
8065
8061
|
if (editorRef.current.innerHTML !== value) {
|
|
8066
8062
|
editorRef.current.innerHTML = sanitizeHtml(value || "");
|
|
@@ -8174,7 +8170,7 @@ var Editor = (props) => {
|
|
|
8174
8170
|
setSlashIdx(0);
|
|
8175
8171
|
slashStartRangeRef.current = null;
|
|
8176
8172
|
};
|
|
8177
|
-
const filteredSlashItems =
|
|
8173
|
+
const filteredSlashItems = React21.useMemo(() => {
|
|
8178
8174
|
if (!slashFilter) return SLASH_ITEMS;
|
|
8179
8175
|
const f = slashFilter.toLowerCase();
|
|
8180
8176
|
return SLASH_ITEMS.filter((it) => it.label.toLowerCase().includes(f) || it.key.includes(f));
|
|
@@ -8460,7 +8456,7 @@ var Editor = (props) => {
|
|
|
8460
8456
|
}
|
|
8461
8457
|
};
|
|
8462
8458
|
return /* @__PURE__ */ jsxs207("div", { className: clsx_default("lib-xplat-editor", isFocused && "focused", readOnly && "readonly"), children: [
|
|
8463
|
-
!readOnly && /* @__PURE__ */
|
|
8459
|
+
!readOnly && /* @__PURE__ */ jsx323(
|
|
8464
8460
|
EditorToolbar,
|
|
8465
8461
|
{
|
|
8466
8462
|
items: toolbar,
|
|
@@ -8469,8 +8465,8 @@ var Editor = (props) => {
|
|
|
8469
8465
|
}
|
|
8470
8466
|
),
|
|
8471
8467
|
/* @__PURE__ */ jsxs207("div", { className: "lib-xplat-editor__content", style: { minHeight }, children: [
|
|
8472
|
-
isEmpty && !isFocused && /* @__PURE__ */
|
|
8473
|
-
/* @__PURE__ */
|
|
8468
|
+
isEmpty && !isFocused && /* @__PURE__ */ jsx323("div", { className: "lib-xplat-editor__placeholder", children: placeholder }),
|
|
8469
|
+
/* @__PURE__ */ jsx323(
|
|
8474
8470
|
"div",
|
|
8475
8471
|
{
|
|
8476
8472
|
ref: editorRef,
|
|
@@ -8489,7 +8485,7 @@ var Editor = (props) => {
|
|
|
8489
8485
|
spellCheck: true
|
|
8490
8486
|
}
|
|
8491
8487
|
),
|
|
8492
|
-
slashOpen && filteredSlashItems.length > 0 && /* @__PURE__ */
|
|
8488
|
+
slashOpen && filteredSlashItems.length > 0 && /* @__PURE__ */ jsx323(
|
|
8493
8489
|
SlashMenu,
|
|
8494
8490
|
{
|
|
8495
8491
|
position: slashPos,
|
|
@@ -8499,7 +8495,7 @@ var Editor = (props) => {
|
|
|
8499
8495
|
onClose: closeSlashMenu
|
|
8500
8496
|
}
|
|
8501
8497
|
),
|
|
8502
|
-
linkOpen && /* @__PURE__ */
|
|
8498
|
+
linkOpen && /* @__PURE__ */ jsx323(
|
|
8503
8499
|
LinkPopover,
|
|
8504
8500
|
{
|
|
8505
8501
|
position: linkPos,
|
|
@@ -8551,7 +8547,7 @@ var isActive = (item, active) => {
|
|
|
8551
8547
|
return active.has(item);
|
|
8552
8548
|
};
|
|
8553
8549
|
var EditorToolbar = ({ items, active, onAction }) => {
|
|
8554
|
-
return /* @__PURE__ */
|
|
8550
|
+
return /* @__PURE__ */ jsx323("div", { className: "lib-xplat-editor__toolbar", children: items.map((item) => /* @__PURE__ */ jsx323(
|
|
8555
8551
|
"button",
|
|
8556
8552
|
{
|
|
8557
8553
|
type: "button",
|
|
@@ -8567,7 +8563,7 @@ var EditorToolbar = ({ items, active, onAction }) => {
|
|
|
8567
8563
|
)) });
|
|
8568
8564
|
};
|
|
8569
8565
|
var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
8570
|
-
|
|
8566
|
+
React21.useEffect(() => {
|
|
8571
8567
|
const handleClickOutside = (e) => {
|
|
8572
8568
|
const target = e.target;
|
|
8573
8569
|
const menu = document.querySelector(".lib-xplat-editor__slash-menu");
|
|
@@ -8576,7 +8572,7 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
8576
8572
|
window.addEventListener("mousedown", handleClickOutside);
|
|
8577
8573
|
return () => window.removeEventListener("mousedown", handleClickOutside);
|
|
8578
8574
|
}, [onClose]);
|
|
8579
|
-
return /* @__PURE__ */
|
|
8575
|
+
return /* @__PURE__ */ jsx323(
|
|
8580
8576
|
"div",
|
|
8581
8577
|
{
|
|
8582
8578
|
className: "lib-xplat-editor__slash-menu",
|
|
@@ -8591,8 +8587,8 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
8591
8587
|
onSelect(item);
|
|
8592
8588
|
},
|
|
8593
8589
|
children: [
|
|
8594
|
-
/* @__PURE__ */
|
|
8595
|
-
item.hint && /* @__PURE__ */
|
|
8590
|
+
/* @__PURE__ */ jsx323("span", { className: "label", children: item.label }),
|
|
8591
|
+
item.hint && /* @__PURE__ */ jsx323("span", { className: "hint", children: item.hint })
|
|
8596
8592
|
]
|
|
8597
8593
|
},
|
|
8598
8594
|
item.key
|
|
@@ -8601,8 +8597,8 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
8601
8597
|
);
|
|
8602
8598
|
};
|
|
8603
8599
|
var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
8604
|
-
const inputRef =
|
|
8605
|
-
|
|
8600
|
+
const inputRef = React21.useRef(null);
|
|
8601
|
+
React21.useEffect(() => {
|
|
8606
8602
|
inputRef.current?.focus();
|
|
8607
8603
|
}, []);
|
|
8608
8604
|
return /* @__PURE__ */ jsxs207(
|
|
@@ -8611,7 +8607,7 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
8611
8607
|
className: "lib-xplat-editor__link-popover",
|
|
8612
8608
|
style: { top: position.top, left: position.left },
|
|
8613
8609
|
children: [
|
|
8614
|
-
/* @__PURE__ */
|
|
8610
|
+
/* @__PURE__ */ jsx323(
|
|
8615
8611
|
"input",
|
|
8616
8612
|
{
|
|
8617
8613
|
ref: inputRef,
|
|
@@ -8631,11 +8627,11 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
8631
8627
|
}
|
|
8632
8628
|
}
|
|
8633
8629
|
),
|
|
8634
|
-
/* @__PURE__ */
|
|
8630
|
+
/* @__PURE__ */ jsx323("button", { type: "button", onMouseDown: (e) => {
|
|
8635
8631
|
e.preventDefault();
|
|
8636
8632
|
onConfirm();
|
|
8637
8633
|
}, children: "\uC801\uC6A9" }),
|
|
8638
|
-
/* @__PURE__ */
|
|
8634
|
+
/* @__PURE__ */ jsx323("button", { type: "button", onMouseDown: (e) => {
|
|
8639
8635
|
e.preventDefault();
|
|
8640
8636
|
onClose();
|
|
8641
8637
|
}, children: "\uCDE8\uC18C" })
|
|
@@ -8645,23 +8641,23 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
8645
8641
|
};
|
|
8646
8642
|
|
|
8647
8643
|
// src/components/EmptyState/EmptyState.tsx
|
|
8648
|
-
import { jsx as
|
|
8644
|
+
import { jsx as jsx324, jsxs as jsxs208 } from "react/jsx-runtime";
|
|
8649
8645
|
var EmptyState = (props) => {
|
|
8650
8646
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
8651
8647
|
return /* @__PURE__ */ jsxs208("div", { className: "lib-xplat-empty-state", children: [
|
|
8652
|
-
icon && /* @__PURE__ */
|
|
8653
|
-
!icon && /* @__PURE__ */
|
|
8654
|
-
/* @__PURE__ */
|
|
8655
|
-
description && /* @__PURE__ */
|
|
8656
|
-
action && /* @__PURE__ */
|
|
8648
|
+
icon && /* @__PURE__ */ jsx324("div", { className: "empty-icon", children: icon }),
|
|
8649
|
+
!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" }) }) }),
|
|
8650
|
+
/* @__PURE__ */ jsx324("p", { className: "empty-title", children: title }),
|
|
8651
|
+
description && /* @__PURE__ */ jsx324("p", { className: "empty-description", children: description }),
|
|
8652
|
+
action && /* @__PURE__ */ jsx324("div", { className: "empty-action", children: action })
|
|
8657
8653
|
] });
|
|
8658
8654
|
};
|
|
8659
8655
|
EmptyState.displayName = "EmptyState";
|
|
8660
8656
|
var EmptyState_default = EmptyState;
|
|
8661
8657
|
|
|
8662
8658
|
// src/components/FileUpload/FileUpload.tsx
|
|
8663
|
-
import
|
|
8664
|
-
import { jsx as
|
|
8659
|
+
import React22 from "react";
|
|
8660
|
+
import { jsx as jsx325, jsxs as jsxs209 } from "react/jsx-runtime";
|
|
8665
8661
|
var FileUpload = (props) => {
|
|
8666
8662
|
const {
|
|
8667
8663
|
accept,
|
|
@@ -8671,8 +8667,8 @@ var FileUpload = (props) => {
|
|
|
8671
8667
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
8672
8668
|
description
|
|
8673
8669
|
} = props;
|
|
8674
|
-
const [isDragOver, setIsDragOver] =
|
|
8675
|
-
const inputRef =
|
|
8670
|
+
const [isDragOver, setIsDragOver] = React22.useState(false);
|
|
8671
|
+
const inputRef = React22.useRef(null);
|
|
8676
8672
|
const handleFiles = (fileList) => {
|
|
8677
8673
|
let files = Array.from(fileList);
|
|
8678
8674
|
if (maxSize) {
|
|
@@ -8711,7 +8707,7 @@ var FileUpload = (props) => {
|
|
|
8711
8707
|
onDragLeave: handleDragLeave,
|
|
8712
8708
|
onClick: () => inputRef.current?.click(),
|
|
8713
8709
|
children: [
|
|
8714
|
-
/* @__PURE__ */
|
|
8710
|
+
/* @__PURE__ */ jsx325(
|
|
8715
8711
|
"input",
|
|
8716
8712
|
{
|
|
8717
8713
|
ref: inputRef,
|
|
@@ -8721,9 +8717,9 @@ var FileUpload = (props) => {
|
|
|
8721
8717
|
onChange: handleChange
|
|
8722
8718
|
}
|
|
8723
8719
|
),
|
|
8724
|
-
/* @__PURE__ */
|
|
8725
|
-
/* @__PURE__ */
|
|
8726
|
-
description && /* @__PURE__ */
|
|
8720
|
+
/* @__PURE__ */ jsx325("div", { className: "upload-icon", children: /* @__PURE__ */ jsx325(UploadIcon_default, {}) }),
|
|
8721
|
+
/* @__PURE__ */ jsx325("p", { className: "upload-label", children: label }),
|
|
8722
|
+
description && /* @__PURE__ */ jsx325("p", { className: "upload-description", children: description })
|
|
8727
8723
|
]
|
|
8728
8724
|
}
|
|
8729
8725
|
);
|
|
@@ -8732,10 +8728,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
8732
8728
|
var FileUpload_default = FileUpload;
|
|
8733
8729
|
|
|
8734
8730
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
8735
|
-
import
|
|
8731
|
+
import React24 from "react";
|
|
8736
8732
|
|
|
8737
8733
|
// src/components/HtmlTypeWriter/utils.ts
|
|
8738
|
-
import
|
|
8734
|
+
import React23 from "react";
|
|
8739
8735
|
var voidTags = /* @__PURE__ */ new Set([
|
|
8740
8736
|
"br",
|
|
8741
8737
|
"img",
|
|
@@ -8803,41 +8799,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
8803
8799
|
props[attr.name] = attr.value;
|
|
8804
8800
|
});
|
|
8805
8801
|
if (voidTags.has(tag)) {
|
|
8806
|
-
return
|
|
8802
|
+
return React23.createElement(tag, props);
|
|
8807
8803
|
}
|
|
8808
8804
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
8809
|
-
return
|
|
8805
|
+
return React23.createElement(tag, props, ...children);
|
|
8810
8806
|
};
|
|
8811
8807
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
8812
8808
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
8813
8809
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
8814
|
-
return node == null ? null :
|
|
8810
|
+
return node == null ? null : React23.createElement(React23.Fragment, { key: idx }, node);
|
|
8815
8811
|
}).filter(Boolean);
|
|
8816
8812
|
return nodes.length === 0 ? null : nodes;
|
|
8817
8813
|
};
|
|
8818
8814
|
|
|
8819
8815
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
8820
|
-
import { jsx as
|
|
8816
|
+
import { jsx as jsx326 } from "react/jsx-runtime";
|
|
8821
8817
|
var HtmlTypeWriter = ({
|
|
8822
8818
|
html,
|
|
8823
8819
|
duration = 20,
|
|
8824
8820
|
onDone,
|
|
8825
8821
|
onChange
|
|
8826
8822
|
}) => {
|
|
8827
|
-
const [typedLen, setTypedLen] =
|
|
8828
|
-
const doneCalledRef =
|
|
8829
|
-
const { doc, rangeMap, totalLength } =
|
|
8823
|
+
const [typedLen, setTypedLen] = React24.useState(0);
|
|
8824
|
+
const doneCalledRef = React24.useRef(false);
|
|
8825
|
+
const { doc, rangeMap, totalLength } = React24.useMemo(() => {
|
|
8830
8826
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
8831
8827
|
const decoded = decodeHtmlEntities(html);
|
|
8832
8828
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
8833
8829
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
8834
8830
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
8835
8831
|
}, [html]);
|
|
8836
|
-
|
|
8832
|
+
React24.useEffect(() => {
|
|
8837
8833
|
setTypedLen(0);
|
|
8838
8834
|
doneCalledRef.current = false;
|
|
8839
8835
|
}, [html]);
|
|
8840
|
-
|
|
8836
|
+
React24.useEffect(() => {
|
|
8841
8837
|
if (!totalLength) return;
|
|
8842
8838
|
if (typedLen >= totalLength) return;
|
|
8843
8839
|
const timer = window.setInterval(() => {
|
|
@@ -8845,33 +8841,33 @@ var HtmlTypeWriter = ({
|
|
|
8845
8841
|
}, duration);
|
|
8846
8842
|
return () => window.clearInterval(timer);
|
|
8847
8843
|
}, [typedLen, totalLength, duration]);
|
|
8848
|
-
|
|
8844
|
+
React24.useEffect(() => {
|
|
8849
8845
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
8850
8846
|
onChange?.();
|
|
8851
8847
|
}
|
|
8852
8848
|
}, [typedLen, totalLength, onChange]);
|
|
8853
|
-
|
|
8849
|
+
React24.useEffect(() => {
|
|
8854
8850
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
8855
8851
|
doneCalledRef.current = true;
|
|
8856
8852
|
onDone?.();
|
|
8857
8853
|
}
|
|
8858
8854
|
}, [typedLen, totalLength, onDone]);
|
|
8859
|
-
const parsed =
|
|
8855
|
+
const parsed = React24.useMemo(
|
|
8860
8856
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
8861
8857
|
[doc, typedLen, rangeMap]
|
|
8862
8858
|
);
|
|
8863
|
-
return /* @__PURE__ */
|
|
8859
|
+
return /* @__PURE__ */ jsx326("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
8864
8860
|
};
|
|
8865
8861
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
8866
8862
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
8867
8863
|
|
|
8868
8864
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
8869
|
-
import
|
|
8870
|
-
import { jsx as
|
|
8865
|
+
import React25 from "react";
|
|
8866
|
+
import { jsx as jsx327, jsxs as jsxs210 } from "react/jsx-runtime";
|
|
8871
8867
|
var ImageSelector = (props) => {
|
|
8872
8868
|
const { value, label, onChange } = props;
|
|
8873
|
-
const [previewUrl, setPreviewUrl] =
|
|
8874
|
-
|
|
8869
|
+
const [previewUrl, setPreviewUrl] = React25.useState();
|
|
8870
|
+
React25.useEffect(() => {
|
|
8875
8871
|
if (!value) {
|
|
8876
8872
|
setPreviewUrl(void 0);
|
|
8877
8873
|
return;
|
|
@@ -8880,7 +8876,7 @@ var ImageSelector = (props) => {
|
|
|
8880
8876
|
setPreviewUrl(url);
|
|
8881
8877
|
return () => URL.revokeObjectURL(url);
|
|
8882
8878
|
}, [value]);
|
|
8883
|
-
const inputRef =
|
|
8879
|
+
const inputRef = React25.useRef(null);
|
|
8884
8880
|
const handleFileChange = (e) => {
|
|
8885
8881
|
const selectedFile = e.target.files?.[0];
|
|
8886
8882
|
if (selectedFile) {
|
|
@@ -8894,7 +8890,7 @@ var ImageSelector = (props) => {
|
|
|
8894
8890
|
inputRef.current?.click();
|
|
8895
8891
|
};
|
|
8896
8892
|
return /* @__PURE__ */ jsxs210("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
8897
|
-
/* @__PURE__ */
|
|
8893
|
+
/* @__PURE__ */ jsx327(
|
|
8898
8894
|
"input",
|
|
8899
8895
|
{
|
|
8900
8896
|
type: "file",
|
|
@@ -8905,12 +8901,12 @@ var ImageSelector = (props) => {
|
|
|
8905
8901
|
}
|
|
8906
8902
|
),
|
|
8907
8903
|
value && /* @__PURE__ */ jsxs210("div", { className: "action-bar", children: [
|
|
8908
|
-
/* @__PURE__ */
|
|
8909
|
-
/* @__PURE__ */
|
|
8904
|
+
/* @__PURE__ */ jsx327("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ jsx327(UploadIcon_default, {}) }),
|
|
8905
|
+
/* @__PURE__ */ jsx327("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ jsx327(DeleteIcon_default, {}) })
|
|
8910
8906
|
] }),
|
|
8911
|
-
/* @__PURE__ */
|
|
8912
|
-
/* @__PURE__ */
|
|
8913
|
-
/* @__PURE__ */
|
|
8907
|
+
/* @__PURE__ */ jsx327("div", { className: "content", children: previewUrl ? /* @__PURE__ */ jsx327("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ jsxs210("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
|
|
8908
|
+
/* @__PURE__ */ jsx327("div", { className: "icon-wrapper", children: /* @__PURE__ */ jsx327(ImageIcon_default, {}) }),
|
|
8909
|
+
/* @__PURE__ */ jsx327("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
8914
8910
|
] }) })
|
|
8915
8911
|
] });
|
|
8916
8912
|
};
|
|
@@ -8918,10 +8914,10 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
8918
8914
|
var ImageSelector_default = ImageSelector;
|
|
8919
8915
|
|
|
8920
8916
|
// src/components/Link/Link.tsx
|
|
8921
|
-
import { jsx as
|
|
8917
|
+
import { jsx as jsx328 } from "react/jsx-runtime";
|
|
8922
8918
|
var Link = (props) => {
|
|
8923
8919
|
const { children, href, underline = "always", target, rel, ...rest } = props;
|
|
8924
|
-
return /* @__PURE__ */
|
|
8920
|
+
return /* @__PURE__ */ jsx328(
|
|
8925
8921
|
"a",
|
|
8926
8922
|
{
|
|
8927
8923
|
className: clsx_default("lib-xplat-link", `underline-${underline}`),
|
|
@@ -8937,10 +8933,10 @@ Link.displayName = "Link";
|
|
|
8937
8933
|
var Link_default = Link;
|
|
8938
8934
|
|
|
8939
8935
|
// src/components/LinkButton/LinkButton.tsx
|
|
8940
|
-
import { jsx as
|
|
8936
|
+
import { jsx as jsx329 } from "react/jsx-runtime";
|
|
8941
8937
|
var LinkButton = (props) => {
|
|
8942
8938
|
const { children, href, type = "primary", size = "md", target, rel, ...rest } = props;
|
|
8943
|
-
return /* @__PURE__ */
|
|
8939
|
+
return /* @__PURE__ */ jsx329(
|
|
8944
8940
|
"a",
|
|
8945
8941
|
{
|
|
8946
8942
|
className: clsx_default("lib-xplat-button", type, size),
|
|
@@ -8956,7 +8952,7 @@ LinkButton.displayName = "LinkButton";
|
|
|
8956
8952
|
var LinkButton_default = LinkButton;
|
|
8957
8953
|
|
|
8958
8954
|
// src/components/NotificationBadge/NotificationBadge.tsx
|
|
8959
|
-
import { jsx as
|
|
8955
|
+
import { jsx as jsx330, jsxs as jsxs211 } from "react/jsx-runtime";
|
|
8960
8956
|
var NotificationBadge = (props) => {
|
|
8961
8957
|
const {
|
|
8962
8958
|
children,
|
|
@@ -8970,14 +8966,14 @@ var NotificationBadge = (props) => {
|
|
|
8970
8966
|
const displayCount = count !== void 0 && count > maxCount ? `${maxCount}+` : count;
|
|
8971
8967
|
return /* @__PURE__ */ jsxs211("div", { className: clsx_default("lib-xplat-notification-badge", size), children: [
|
|
8972
8968
|
children,
|
|
8973
|
-
showBadge && /* @__PURE__ */
|
|
8969
|
+
showBadge && /* @__PURE__ */ jsx330("span", { className: clsx_default("badge-indicator", type, { dot }), children: !dot && displayCount })
|
|
8974
8970
|
] });
|
|
8975
8971
|
};
|
|
8976
8972
|
NotificationBadge.displayName = "NotificationBadge";
|
|
8977
8973
|
var NotificationBadge_default = NotificationBadge;
|
|
8978
8974
|
|
|
8979
8975
|
// src/components/Pagination/Pagination.tsx
|
|
8980
|
-
import { jsx as
|
|
8976
|
+
import { jsx as jsx331, jsxs as jsxs212 } from "react/jsx-runtime";
|
|
8981
8977
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
8982
8978
|
const totalNumbers = siblingCount * 2 + 5;
|
|
8983
8979
|
if (totalPages <= totalNumbers) {
|
|
@@ -9021,18 +9017,18 @@ var Pagination = (props) => {
|
|
|
9021
9017
|
}
|
|
9022
9018
|
};
|
|
9023
9019
|
return /* @__PURE__ */ jsxs212("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
9024
|
-
/* @__PURE__ */
|
|
9020
|
+
/* @__PURE__ */ jsx331(
|
|
9025
9021
|
"button",
|
|
9026
9022
|
{
|
|
9027
9023
|
className: "page-btn prev",
|
|
9028
9024
|
disabled: current <= 1,
|
|
9029
9025
|
onClick: () => handleClick(current - 1),
|
|
9030
9026
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
9031
|
-
children: /* @__PURE__ */
|
|
9027
|
+
children: /* @__PURE__ */ jsx331(ChevronLeftIcon_default, {})
|
|
9032
9028
|
}
|
|
9033
9029
|
),
|
|
9034
9030
|
pages.map(
|
|
9035
|
-
(page, i) => page === "..." ? /* @__PURE__ */
|
|
9031
|
+
(page, i) => page === "..." ? /* @__PURE__ */ jsx331("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ jsx331(
|
|
9036
9032
|
"button",
|
|
9037
9033
|
{
|
|
9038
9034
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -9043,14 +9039,14 @@ var Pagination = (props) => {
|
|
|
9043
9039
|
page
|
|
9044
9040
|
)
|
|
9045
9041
|
),
|
|
9046
|
-
/* @__PURE__ */
|
|
9042
|
+
/* @__PURE__ */ jsx331(
|
|
9047
9043
|
"button",
|
|
9048
9044
|
{
|
|
9049
9045
|
className: "page-btn next",
|
|
9050
9046
|
disabled: current >= totalPages,
|
|
9051
9047
|
onClick: () => handleClick(current + 1),
|
|
9052
9048
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
9053
|
-
children: /* @__PURE__ */
|
|
9049
|
+
children: /* @__PURE__ */ jsx331(ChevronRightIcon_default, {})
|
|
9054
9050
|
}
|
|
9055
9051
|
)
|
|
9056
9052
|
] });
|
|
@@ -9059,17 +9055,17 @@ Pagination.displayName = "Pagination";
|
|
|
9059
9055
|
var Pagination_default = Pagination;
|
|
9060
9056
|
|
|
9061
9057
|
// src/components/PopOver/PopOver.tsx
|
|
9062
|
-
import
|
|
9063
|
-
import { jsx as
|
|
9058
|
+
import React26 from "react";
|
|
9059
|
+
import { jsx as jsx332, jsxs as jsxs213 } from "react/jsx-runtime";
|
|
9064
9060
|
var PopOver = (props) => {
|
|
9065
9061
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
9066
|
-
const popRef =
|
|
9067
|
-
const triggerRef =
|
|
9068
|
-
const [localOpen, setLocalOpen] =
|
|
9069
|
-
const [eventTrigger, setEventTrigger] =
|
|
9062
|
+
const popRef = React26.useRef(null);
|
|
9063
|
+
const triggerRef = React26.useRef(null);
|
|
9064
|
+
const [localOpen, setLocalOpen] = React26.useState(false);
|
|
9065
|
+
const [eventTrigger, setEventTrigger] = React26.useState(false);
|
|
9070
9066
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
9071
9067
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
9072
|
-
|
|
9068
|
+
React26.useEffect(() => {
|
|
9073
9069
|
if (isOpen) {
|
|
9074
9070
|
setLocalOpen(isOpen);
|
|
9075
9071
|
setTimeout(() => {
|
|
@@ -9092,7 +9088,7 @@ var PopOver = (props) => {
|
|
|
9092
9088
|
},
|
|
9093
9089
|
children: [
|
|
9094
9090
|
children,
|
|
9095
|
-
localOpen && /* @__PURE__ */
|
|
9091
|
+
localOpen && /* @__PURE__ */ jsx332(Portal_default, { children: /* @__PURE__ */ jsx332(
|
|
9096
9092
|
"div",
|
|
9097
9093
|
{
|
|
9098
9094
|
className: clsx_default(
|
|
@@ -9115,7 +9111,7 @@ PopOver.displayName = "PopOver";
|
|
|
9115
9111
|
var PopOver_default = PopOver;
|
|
9116
9112
|
|
|
9117
9113
|
// src/components/Progress/Progress.tsx
|
|
9118
|
-
import { jsx as
|
|
9114
|
+
import { jsx as jsx333, jsxs as jsxs214 } from "react/jsx-runtime";
|
|
9119
9115
|
var Progress = (props) => {
|
|
9120
9116
|
const {
|
|
9121
9117
|
value,
|
|
@@ -9126,7 +9122,7 @@ var Progress = (props) => {
|
|
|
9126
9122
|
} = props;
|
|
9127
9123
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
9128
9124
|
return /* @__PURE__ */ jsxs214("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
9129
|
-
/* @__PURE__ */
|
|
9125
|
+
/* @__PURE__ */ jsx333(
|
|
9130
9126
|
"div",
|
|
9131
9127
|
{
|
|
9132
9128
|
className: "track",
|
|
@@ -9134,7 +9130,7 @@ var Progress = (props) => {
|
|
|
9134
9130
|
"aria-valuenow": value,
|
|
9135
9131
|
"aria-valuemin": 0,
|
|
9136
9132
|
"aria-valuemax": max,
|
|
9137
|
-
children: /* @__PURE__ */
|
|
9133
|
+
children: /* @__PURE__ */ jsx333(
|
|
9138
9134
|
"div",
|
|
9139
9135
|
{
|
|
9140
9136
|
className: "bar",
|
|
@@ -9153,17 +9149,17 @@ Progress.displayName = "Progress";
|
|
|
9153
9149
|
var Progress_default = Progress;
|
|
9154
9150
|
|
|
9155
9151
|
// src/components/Radio/RadioGroupContext.tsx
|
|
9156
|
-
import
|
|
9157
|
-
var RadioGroupContext =
|
|
9152
|
+
import React27 from "react";
|
|
9153
|
+
var RadioGroupContext = React27.createContext(
|
|
9158
9154
|
null
|
|
9159
9155
|
);
|
|
9160
9156
|
var useRadioGroupContext = () => {
|
|
9161
|
-
return
|
|
9157
|
+
return React27.useContext(RadioGroupContext);
|
|
9162
9158
|
};
|
|
9163
9159
|
var RadioGroupContext_default = RadioGroupContext;
|
|
9164
9160
|
|
|
9165
9161
|
// src/components/Radio/Radio.tsx
|
|
9166
|
-
import { jsx as
|
|
9162
|
+
import { jsx as jsx334, jsxs as jsxs215 } from "react/jsx-runtime";
|
|
9167
9163
|
var Radio = (props) => {
|
|
9168
9164
|
const {
|
|
9169
9165
|
label,
|
|
@@ -9193,18 +9189,18 @@ var Radio = (props) => {
|
|
|
9193
9189
|
className
|
|
9194
9190
|
),
|
|
9195
9191
|
children: [
|
|
9196
|
-
/* @__PURE__ */
|
|
9197
|
-
/* @__PURE__ */
|
|
9192
|
+
/* @__PURE__ */ jsx334("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
9193
|
+
/* @__PURE__ */ jsx334(
|
|
9198
9194
|
"div",
|
|
9199
9195
|
{
|
|
9200
9196
|
className: clsx_default(
|
|
9201
9197
|
"circle",
|
|
9202
9198
|
localChecked ? "checked" : void 0
|
|
9203
9199
|
),
|
|
9204
|
-
children: localChecked && /* @__PURE__ */
|
|
9200
|
+
children: localChecked && /* @__PURE__ */ jsx334("div", { className: "inner-circle" })
|
|
9205
9201
|
}
|
|
9206
9202
|
),
|
|
9207
|
-
label && /* @__PURE__ */
|
|
9203
|
+
label && /* @__PURE__ */ jsx334("span", { children: label })
|
|
9208
9204
|
]
|
|
9209
9205
|
}
|
|
9210
9206
|
);
|
|
@@ -9213,28 +9209,28 @@ Radio.displayName = "Radio";
|
|
|
9213
9209
|
var Radio_default = Radio;
|
|
9214
9210
|
|
|
9215
9211
|
// src/components/Radio/RadioGroup.tsx
|
|
9216
|
-
import { Fragment as Fragment4, jsx as
|
|
9212
|
+
import { Fragment as Fragment4, jsx as jsx335 } from "react/jsx-runtime";
|
|
9217
9213
|
var RadioGroup = (props) => {
|
|
9218
9214
|
const { children, ...rest } = props;
|
|
9219
|
-
return /* @__PURE__ */
|
|
9215
|
+
return /* @__PURE__ */ jsx335(Fragment4, { children: /* @__PURE__ */ jsx335(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
9220
9216
|
};
|
|
9221
9217
|
RadioGroup.displayName = "RadioGroup";
|
|
9222
9218
|
var RadioGroup_default = RadioGroup;
|
|
9223
9219
|
|
|
9224
9220
|
// src/components/Select/Select.tsx
|
|
9225
|
-
import
|
|
9221
|
+
import React30 from "react";
|
|
9226
9222
|
|
|
9227
9223
|
// src/components/Select/context.ts
|
|
9228
|
-
import
|
|
9229
|
-
var SelectContext =
|
|
9224
|
+
import React28 from "react";
|
|
9225
|
+
var SelectContext = React28.createContext(null);
|
|
9230
9226
|
var context_default = SelectContext;
|
|
9231
9227
|
|
|
9232
9228
|
// src/components/Select/SelectItem.tsx
|
|
9233
|
-
import
|
|
9234
|
-
import { jsx as
|
|
9229
|
+
import React29 from "react";
|
|
9230
|
+
import { jsx as jsx336 } from "react/jsx-runtime";
|
|
9235
9231
|
var SelectItem = (props) => {
|
|
9236
9232
|
const { children, value, onClick, disabled = false } = props;
|
|
9237
|
-
const ctx =
|
|
9233
|
+
const ctx = React29.useContext(context_default);
|
|
9238
9234
|
const handleClick = (e) => {
|
|
9239
9235
|
e.preventDefault();
|
|
9240
9236
|
e.stopPropagation();
|
|
@@ -9244,7 +9240,7 @@ var SelectItem = (props) => {
|
|
|
9244
9240
|
onClick?.();
|
|
9245
9241
|
};
|
|
9246
9242
|
const isSelected = value !== void 0 ? ctx?.selectedValue === value : ctx?.selectedLabel === children;
|
|
9247
|
-
return /* @__PURE__ */
|
|
9243
|
+
return /* @__PURE__ */ jsx336(
|
|
9248
9244
|
"div",
|
|
9249
9245
|
{
|
|
9250
9246
|
className: clsx_default("select-item", disabled && "disabled", isSelected && "is-selected"),
|
|
@@ -9265,7 +9261,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
9265
9261
|
var SelectItem_default = SelectItem;
|
|
9266
9262
|
|
|
9267
9263
|
// src/components/Select/Select.tsx
|
|
9268
|
-
import { jsx as
|
|
9264
|
+
import { jsx as jsx337, jsxs as jsxs216 } from "react/jsx-runtime";
|
|
9269
9265
|
var ANIMATION_DURATION_MS3 = 200;
|
|
9270
9266
|
var SelectRoot = (props) => {
|
|
9271
9267
|
const {
|
|
@@ -9277,28 +9273,28 @@ var SelectRoot = (props) => {
|
|
|
9277
9273
|
error = false,
|
|
9278
9274
|
size = "md"
|
|
9279
9275
|
} = props;
|
|
9280
|
-
const itemChildren =
|
|
9281
|
-
(child) =>
|
|
9276
|
+
const itemChildren = React30.Children.toArray(children).filter(
|
|
9277
|
+
(child) => React30.isValidElement(child) && child.type === SelectItem_default
|
|
9282
9278
|
);
|
|
9283
9279
|
const isControlled = valueProp !== void 0;
|
|
9284
|
-
const [isOpen, setOpen] =
|
|
9285
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
9286
|
-
const [uncontrolledValue, setUncontrolledValue] =
|
|
9287
|
-
const controlledLabel =
|
|
9280
|
+
const [isOpen, setOpen] = React30.useState(false);
|
|
9281
|
+
const [uncontrolledLabel, setUncontrolledLabel] = React30.useState(null);
|
|
9282
|
+
const [uncontrolledValue, setUncontrolledValue] = React30.useState(void 0);
|
|
9283
|
+
const controlledLabel = React30.useMemo(() => {
|
|
9288
9284
|
if (!isControlled) return null;
|
|
9289
9285
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
9290
9286
|
return match ? match.props.children : null;
|
|
9291
9287
|
}, [isControlled, valueProp, itemChildren]);
|
|
9292
9288
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
9293
9289
|
const selectedValue = isControlled ? valueProp : uncontrolledValue;
|
|
9294
|
-
const triggerRef =
|
|
9295
|
-
const contentRef =
|
|
9296
|
-
const [mounted, setMounted] =
|
|
9297
|
-
const [visible, setVisible] =
|
|
9298
|
-
|
|
9290
|
+
const triggerRef = React30.useRef(null);
|
|
9291
|
+
const contentRef = React30.useRef(null);
|
|
9292
|
+
const [mounted, setMounted] = React30.useState(false);
|
|
9293
|
+
const [visible, setVisible] = React30.useState(false);
|
|
9294
|
+
React30.useEffect(() => {
|
|
9299
9295
|
if (disabled && isOpen) setOpen(false);
|
|
9300
9296
|
}, [disabled, isOpen]);
|
|
9301
|
-
|
|
9297
|
+
React30.useEffect(() => {
|
|
9302
9298
|
if (isOpen) {
|
|
9303
9299
|
setMounted(true);
|
|
9304
9300
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -9308,12 +9304,12 @@ var SelectRoot = (props) => {
|
|
|
9308
9304
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
9309
9305
|
return () => clearTimeout(t);
|
|
9310
9306
|
}, [isOpen]);
|
|
9311
|
-
const open =
|
|
9312
|
-
const close =
|
|
9313
|
-
const toggle =
|
|
9307
|
+
const open = React30.useCallback(() => setOpen(true), []);
|
|
9308
|
+
const close = React30.useCallback(() => setOpen(false), []);
|
|
9309
|
+
const toggle = React30.useCallback(() => setOpen((prev) => !prev), []);
|
|
9314
9310
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
9315
9311
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
9316
|
-
const setSelected =
|
|
9312
|
+
const setSelected = React30.useCallback(
|
|
9317
9313
|
(label, itemValue) => {
|
|
9318
9314
|
if (!isControlled) {
|
|
9319
9315
|
setUncontrolledLabel(label);
|
|
@@ -9323,7 +9319,7 @@ var SelectRoot = (props) => {
|
|
|
9323
9319
|
},
|
|
9324
9320
|
[isControlled, onChange]
|
|
9325
9321
|
);
|
|
9326
|
-
const ctxValue =
|
|
9322
|
+
const ctxValue = React30.useMemo(
|
|
9327
9323
|
() => ({
|
|
9328
9324
|
isOpen,
|
|
9329
9325
|
mounted,
|
|
@@ -9345,7 +9341,7 @@ var SelectRoot = (props) => {
|
|
|
9345
9341
|
if (disabled) return;
|
|
9346
9342
|
toggle();
|
|
9347
9343
|
};
|
|
9348
|
-
return /* @__PURE__ */
|
|
9344
|
+
return /* @__PURE__ */ jsx337(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs216(
|
|
9349
9345
|
"div",
|
|
9350
9346
|
{
|
|
9351
9347
|
className: clsx_default(
|
|
@@ -9380,7 +9376,7 @@ var SelectRoot = (props) => {
|
|
|
9380
9376
|
}
|
|
9381
9377
|
},
|
|
9382
9378
|
children: [
|
|
9383
|
-
/* @__PURE__ */
|
|
9379
|
+
/* @__PURE__ */ jsx337(
|
|
9384
9380
|
"span",
|
|
9385
9381
|
{
|
|
9386
9382
|
className: clsx_default(
|
|
@@ -9390,25 +9386,25 @@ var SelectRoot = (props) => {
|
|
|
9390
9386
|
children: selectedLabel ?? placeholder
|
|
9391
9387
|
}
|
|
9392
9388
|
),
|
|
9393
|
-
/* @__PURE__ */
|
|
9389
|
+
/* @__PURE__ */ jsx337(
|
|
9394
9390
|
"span",
|
|
9395
9391
|
{
|
|
9396
9392
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
9397
9393
|
"aria-hidden": true,
|
|
9398
|
-
children: /* @__PURE__ */
|
|
9394
|
+
children: /* @__PURE__ */ jsx337(ChevronDownIcon_default, {})
|
|
9399
9395
|
}
|
|
9400
9396
|
)
|
|
9401
9397
|
]
|
|
9402
9398
|
}
|
|
9403
9399
|
),
|
|
9404
|
-
mounted && /* @__PURE__ */
|
|
9400
|
+
mounted && /* @__PURE__ */ jsx337(Portal_default, { children: /* @__PURE__ */ jsx337(
|
|
9405
9401
|
"div",
|
|
9406
9402
|
{
|
|
9407
9403
|
className: clsx_default("lib-xplat-select-content", size, position.direction, stateClass),
|
|
9408
9404
|
ref: contentRef,
|
|
9409
9405
|
style: { ...position.position, width: triggerRef.current?.offsetWidth },
|
|
9410
9406
|
role: "listbox",
|
|
9411
|
-
children: /* @__PURE__ */
|
|
9407
|
+
children: /* @__PURE__ */ jsx337(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
9412
9408
|
}
|
|
9413
9409
|
) })
|
|
9414
9410
|
]
|
|
@@ -9422,7 +9418,7 @@ var Select = Object.assign(SelectRoot, {
|
|
|
9422
9418
|
var Select_default = Select;
|
|
9423
9419
|
|
|
9424
9420
|
// src/components/Skeleton/Skeleton.tsx
|
|
9425
|
-
import { jsx as
|
|
9421
|
+
import { jsx as jsx338 } from "react/jsx-runtime";
|
|
9426
9422
|
var SIZE_MAP = {
|
|
9427
9423
|
xs: "var(--spacing-space-1)",
|
|
9428
9424
|
sm: "var(--spacing-space-2)",
|
|
@@ -9438,7 +9434,7 @@ var Skeleton = (props) => {
|
|
|
9438
9434
|
...width != null && { width: SIZE_MAP[width] },
|
|
9439
9435
|
...height != null && { height: SIZE_MAP[height] }
|
|
9440
9436
|
};
|
|
9441
|
-
return /* @__PURE__ */
|
|
9437
|
+
return /* @__PURE__ */ jsx338(
|
|
9442
9438
|
"div",
|
|
9443
9439
|
{
|
|
9444
9440
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -9451,20 +9447,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
9451
9447
|
var Skeleton_default = Skeleton;
|
|
9452
9448
|
|
|
9453
9449
|
// src/components/Spinner/Spinner.tsx
|
|
9454
|
-
import { jsx as
|
|
9450
|
+
import { jsx as jsx339, jsxs as jsxs217 } from "react/jsx-runtime";
|
|
9455
9451
|
var Spinner = (props) => {
|
|
9456
9452
|
const {
|
|
9457
9453
|
size = "md",
|
|
9458
9454
|
type = "brand"
|
|
9459
9455
|
} = props;
|
|
9460
|
-
return /* @__PURE__ */
|
|
9456
|
+
return /* @__PURE__ */ jsx339(
|
|
9461
9457
|
"div",
|
|
9462
9458
|
{
|
|
9463
9459
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
9464
9460
|
role: "status",
|
|
9465
9461
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
9466
9462
|
children: /* @__PURE__ */ jsxs217("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
9467
|
-
/* @__PURE__ */
|
|
9463
|
+
/* @__PURE__ */ jsx339(
|
|
9468
9464
|
"circle",
|
|
9469
9465
|
{
|
|
9470
9466
|
className: "track",
|
|
@@ -9474,7 +9470,7 @@ var Spinner = (props) => {
|
|
|
9474
9470
|
strokeWidth: "3"
|
|
9475
9471
|
}
|
|
9476
9472
|
),
|
|
9477
|
-
/* @__PURE__ */
|
|
9473
|
+
/* @__PURE__ */ jsx339(
|
|
9478
9474
|
"circle",
|
|
9479
9475
|
{
|
|
9480
9476
|
className: "indicator",
|
|
@@ -9493,20 +9489,20 @@ Spinner.displayName = "Spinner";
|
|
|
9493
9489
|
var Spinner_default = Spinner;
|
|
9494
9490
|
|
|
9495
9491
|
// src/components/Steps/Steps.tsx
|
|
9496
|
-
import { jsx as
|
|
9492
|
+
import { jsx as jsx340, jsxs as jsxs218 } from "react/jsx-runtime";
|
|
9497
9493
|
var Steps = (props) => {
|
|
9498
9494
|
const {
|
|
9499
9495
|
items,
|
|
9500
9496
|
current,
|
|
9501
9497
|
type = "brand"
|
|
9502
9498
|
} = props;
|
|
9503
|
-
return /* @__PURE__ */
|
|
9499
|
+
return /* @__PURE__ */ jsx340("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
9504
9500
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
9505
9501
|
return /* @__PURE__ */ jsxs218("div", { className: clsx_default("step-item", status), children: [
|
|
9506
|
-
/* @__PURE__ */
|
|
9502
|
+
/* @__PURE__ */ jsx340("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ jsx340(CheckIcon_default, {}) : /* @__PURE__ */ jsx340("span", { children: index + 1 }) }),
|
|
9507
9503
|
/* @__PURE__ */ jsxs218("div", { className: "step-content", children: [
|
|
9508
|
-
/* @__PURE__ */
|
|
9509
|
-
item.description && /* @__PURE__ */
|
|
9504
|
+
/* @__PURE__ */ jsx340("span", { className: "step-title", children: item.title }),
|
|
9505
|
+
item.description && /* @__PURE__ */ jsx340("span", { className: "step-description", children: item.description })
|
|
9510
9506
|
] })
|
|
9511
9507
|
] }, index);
|
|
9512
9508
|
}) });
|
|
@@ -9515,8 +9511,8 @@ Steps.displayName = "Steps";
|
|
|
9515
9511
|
var Steps_default = Steps;
|
|
9516
9512
|
|
|
9517
9513
|
// src/components/Swiper/Swiper.tsx
|
|
9518
|
-
import
|
|
9519
|
-
import { jsx as
|
|
9514
|
+
import React31 from "react";
|
|
9515
|
+
import { jsx as jsx341, jsxs as jsxs219 } from "react/jsx-runtime";
|
|
9520
9516
|
var Swiper = (props) => {
|
|
9521
9517
|
const {
|
|
9522
9518
|
auto = false,
|
|
@@ -9540,26 +9536,26 @@ var Swiper = (props) => {
|
|
|
9540
9536
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
9541
9537
|
const useLoop = loop && canSlide;
|
|
9542
9538
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
9543
|
-
const extendedItems =
|
|
9539
|
+
const extendedItems = React31.useMemo(() => {
|
|
9544
9540
|
if (!useLoop) return items;
|
|
9545
9541
|
return [...items, ...items, ...items];
|
|
9546
9542
|
}, [items, useLoop]);
|
|
9547
9543
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
9548
|
-
const [innerIndex, setInnerIndex] =
|
|
9544
|
+
const [innerIndex, setInnerIndex] = React31.useState(
|
|
9549
9545
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
9550
9546
|
);
|
|
9551
|
-
const [isDragging, setIsDragging] =
|
|
9552
|
-
const [dragOffset, setDragOffset] =
|
|
9553
|
-
const [animated, setAnimated] =
|
|
9554
|
-
const [containerWidth, setContainerWidth] =
|
|
9555
|
-
const containerRef =
|
|
9556
|
-
const startXRef =
|
|
9557
|
-
const startTimeRef =
|
|
9558
|
-
const autoplayTimerRef =
|
|
9559
|
-
const resumeTimeoutRef =
|
|
9560
|
-
const [paused, setPaused] =
|
|
9561
|
-
const initializedRef =
|
|
9562
|
-
|
|
9547
|
+
const [isDragging, setIsDragging] = React31.useState(false);
|
|
9548
|
+
const [dragOffset, setDragOffset] = React31.useState(0);
|
|
9549
|
+
const [animated, setAnimated] = React31.useState(false);
|
|
9550
|
+
const [containerWidth, setContainerWidth] = React31.useState(0);
|
|
9551
|
+
const containerRef = React31.useRef(null);
|
|
9552
|
+
const startXRef = React31.useRef(0);
|
|
9553
|
+
const startTimeRef = React31.useRef(0);
|
|
9554
|
+
const autoplayTimerRef = React31.useRef(null);
|
|
9555
|
+
const resumeTimeoutRef = React31.useRef(null);
|
|
9556
|
+
const [paused, setPaused] = React31.useState(false);
|
|
9557
|
+
const initializedRef = React31.useRef(false);
|
|
9558
|
+
React31.useEffect(() => {
|
|
9563
9559
|
const el = containerRef.current;
|
|
9564
9560
|
if (!el) return;
|
|
9565
9561
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -9582,7 +9578,7 @@ var Swiper = (props) => {
|
|
|
9582
9578
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
9583
9579
|
};
|
|
9584
9580
|
const realIndex = getRealIndex(innerIndex);
|
|
9585
|
-
const moveToInner =
|
|
9581
|
+
const moveToInner = React31.useCallback(
|
|
9586
9582
|
(idx, withAnim = true) => {
|
|
9587
9583
|
if (!useLoop) {
|
|
9588
9584
|
setAnimated(withAnim);
|
|
@@ -9610,7 +9606,7 @@ var Swiper = (props) => {
|
|
|
9610
9606
|
},
|
|
9611
9607
|
[useLoop, cloneCount, totalSlides]
|
|
9612
9608
|
);
|
|
9613
|
-
const handleTransitionEnd =
|
|
9609
|
+
const handleTransitionEnd = React31.useCallback(() => {
|
|
9614
9610
|
if (!useLoop) return;
|
|
9615
9611
|
const real = getRealIndex(innerIndex);
|
|
9616
9612
|
const canonical = cloneCount + real;
|
|
@@ -9620,7 +9616,7 @@ var Swiper = (props) => {
|
|
|
9620
9616
|
}
|
|
9621
9617
|
onChange?.(Math.min(real, maxIndex));
|
|
9622
9618
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
9623
|
-
const slideTo =
|
|
9619
|
+
const slideTo = React31.useCallback(
|
|
9624
9620
|
(logicalIndex) => {
|
|
9625
9621
|
if (!canSlide) return;
|
|
9626
9622
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -9630,7 +9626,7 @@ var Swiper = (props) => {
|
|
|
9630
9626
|
},
|
|
9631
9627
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
9632
9628
|
);
|
|
9633
|
-
const slideNext =
|
|
9629
|
+
const slideNext = React31.useCallback(() => {
|
|
9634
9630
|
if (!canSlide) return;
|
|
9635
9631
|
const nextInner = innerIndex + slideBy;
|
|
9636
9632
|
if (useLoop) {
|
|
@@ -9639,7 +9635,7 @@ var Swiper = (props) => {
|
|
|
9639
9635
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
9640
9636
|
}
|
|
9641
9637
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
9642
|
-
const slidePrev =
|
|
9638
|
+
const slidePrev = React31.useCallback(() => {
|
|
9643
9639
|
if (!canSlide) return;
|
|
9644
9640
|
const prevInner = innerIndex - slideBy;
|
|
9645
9641
|
if (useLoop) {
|
|
@@ -9648,7 +9644,7 @@ var Swiper = (props) => {
|
|
|
9648
9644
|
moveToInner(Math.max(prevInner, 0), true);
|
|
9649
9645
|
}
|
|
9650
9646
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
9651
|
-
|
|
9647
|
+
React31.useEffect(() => {
|
|
9652
9648
|
if (indexProp === void 0) return;
|
|
9653
9649
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
9654
9650
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -9656,12 +9652,12 @@ var Swiper = (props) => {
|
|
|
9656
9652
|
moveToInner(target, true);
|
|
9657
9653
|
}
|
|
9658
9654
|
}, [indexProp]);
|
|
9659
|
-
|
|
9655
|
+
React31.useImperativeHandle(swiperRef, () => ({
|
|
9660
9656
|
slidePrev,
|
|
9661
9657
|
slideNext,
|
|
9662
9658
|
slideTo
|
|
9663
9659
|
}));
|
|
9664
|
-
|
|
9660
|
+
React31.useEffect(() => {
|
|
9665
9661
|
if (!auto || !canSlide || paused) return;
|
|
9666
9662
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
9667
9663
|
return () => {
|
|
@@ -9687,7 +9683,7 @@ var Swiper = (props) => {
|
|
|
9687
9683
|
resumeTimeoutRef.current = null;
|
|
9688
9684
|
}, pauseOnInteraction);
|
|
9689
9685
|
};
|
|
9690
|
-
|
|
9686
|
+
React31.useEffect(() => {
|
|
9691
9687
|
return () => {
|
|
9692
9688
|
if (resumeTimeoutRef.current) clearTimeout(resumeTimeoutRef.current);
|
|
9693
9689
|
};
|
|
@@ -9705,7 +9701,7 @@ var Swiper = (props) => {
|
|
|
9705
9701
|
startXRef.current = getClientX(e);
|
|
9706
9702
|
startTimeRef.current = Date.now();
|
|
9707
9703
|
};
|
|
9708
|
-
|
|
9704
|
+
React31.useEffect(() => {
|
|
9709
9705
|
if (!isDragging) return;
|
|
9710
9706
|
const handleMove = (e) => {
|
|
9711
9707
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -9744,8 +9740,8 @@ var Swiper = (props) => {
|
|
|
9744
9740
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
9745
9741
|
const slideWidthPercent = 100 / viewItemCount;
|
|
9746
9742
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
9747
|
-
const slideElements =
|
|
9748
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */
|
|
9743
|
+
const slideElements = React31.useMemo(
|
|
9744
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ jsx341(
|
|
9749
9745
|
"div",
|
|
9750
9746
|
{
|
|
9751
9747
|
className: "lib-xplat-swiper__slide",
|
|
@@ -9765,14 +9761,14 @@ var Swiper = (props) => {
|
|
|
9765
9761
|
totalSteps - 1
|
|
9766
9762
|
);
|
|
9767
9763
|
return /* @__PURE__ */ jsxs219("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
9768
|
-
/* @__PURE__ */
|
|
9764
|
+
/* @__PURE__ */ jsx341(
|
|
9769
9765
|
"div",
|
|
9770
9766
|
{
|
|
9771
9767
|
className: "lib-xplat-swiper__viewport",
|
|
9772
9768
|
onMouseDown: handleDragStart,
|
|
9773
9769
|
onTouchStart: handleDragStart,
|
|
9774
9770
|
onDragStart: (e) => e.preventDefault(),
|
|
9775
|
-
children: /* @__PURE__ */
|
|
9771
|
+
children: /* @__PURE__ */ jsx341(
|
|
9776
9772
|
"div",
|
|
9777
9773
|
{
|
|
9778
9774
|
className: clsx_default(
|
|
@@ -9790,7 +9786,7 @@ var Swiper = (props) => {
|
|
|
9790
9786
|
)
|
|
9791
9787
|
}
|
|
9792
9788
|
),
|
|
9793
|
-
showProgress && canSlide && /* @__PURE__ */
|
|
9789
|
+
showProgress && canSlide && /* @__PURE__ */ jsx341("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ jsx341("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ jsx341(
|
|
9794
9790
|
"span",
|
|
9795
9791
|
{
|
|
9796
9792
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -9800,7 +9796,7 @@ var Swiper = (props) => {
|
|
|
9800
9796
|
}
|
|
9801
9797
|
}
|
|
9802
9798
|
) }) }),
|
|
9803
|
-
canSlide && /* @__PURE__ */
|
|
9799
|
+
canSlide && /* @__PURE__ */ jsx341("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ jsx341(
|
|
9804
9800
|
"button",
|
|
9805
9801
|
{
|
|
9806
9802
|
className: clsx_default(
|
|
@@ -9818,8 +9814,8 @@ Swiper.displayName = "Swiper";
|
|
|
9818
9814
|
var Swiper_default = Swiper;
|
|
9819
9815
|
|
|
9820
9816
|
// src/components/Switch/Switch.tsx
|
|
9821
|
-
import
|
|
9822
|
-
import { jsx as
|
|
9817
|
+
import React32 from "react";
|
|
9818
|
+
import { jsx as jsx342 } from "react/jsx-runtime";
|
|
9823
9819
|
var KNOB_TRANSITION_MS = 250;
|
|
9824
9820
|
var Switch = (props) => {
|
|
9825
9821
|
const {
|
|
@@ -9829,9 +9825,9 @@ var Switch = (props) => {
|
|
|
9829
9825
|
disabled,
|
|
9830
9826
|
onChange
|
|
9831
9827
|
} = props;
|
|
9832
|
-
const [isAnimating, setIsAnimating] =
|
|
9833
|
-
const timeoutRef =
|
|
9834
|
-
|
|
9828
|
+
const [isAnimating, setIsAnimating] = React32.useState(false);
|
|
9829
|
+
const timeoutRef = React32.useRef(null);
|
|
9830
|
+
React32.useEffect(() => {
|
|
9835
9831
|
return () => {
|
|
9836
9832
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
9837
9833
|
};
|
|
@@ -9846,7 +9842,7 @@ var Switch = (props) => {
|
|
|
9846
9842
|
timeoutRef.current = null;
|
|
9847
9843
|
}, KNOB_TRANSITION_MS);
|
|
9848
9844
|
};
|
|
9849
|
-
return /* @__PURE__ */
|
|
9845
|
+
return /* @__PURE__ */ jsx342(
|
|
9850
9846
|
"div",
|
|
9851
9847
|
{
|
|
9852
9848
|
className: clsx_default(
|
|
@@ -9859,7 +9855,7 @@ var Switch = (props) => {
|
|
|
9859
9855
|
),
|
|
9860
9856
|
onClick: handleClick,
|
|
9861
9857
|
"aria-disabled": disabled || isAnimating,
|
|
9862
|
-
children: /* @__PURE__ */
|
|
9858
|
+
children: /* @__PURE__ */ jsx342("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
9863
9859
|
}
|
|
9864
9860
|
);
|
|
9865
9861
|
};
|
|
@@ -9867,17 +9863,17 @@ Switch.displayName = "Switch";
|
|
|
9867
9863
|
var Switch_default = Switch;
|
|
9868
9864
|
|
|
9869
9865
|
// src/components/Table/TableContext.tsx
|
|
9870
|
-
import
|
|
9871
|
-
var TableContext =
|
|
9866
|
+
import React33 from "react";
|
|
9867
|
+
var TableContext = React33.createContext(null);
|
|
9872
9868
|
var useTableContext = () => {
|
|
9873
|
-
const ctx =
|
|
9869
|
+
const ctx = React33.useContext(TableContext);
|
|
9874
9870
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
9875
9871
|
return ctx;
|
|
9876
9872
|
};
|
|
9877
9873
|
var TableContext_default = TableContext;
|
|
9878
9874
|
|
|
9879
9875
|
// src/components/Table/Table.tsx
|
|
9880
|
-
import { jsx as
|
|
9876
|
+
import { jsx as jsx343 } from "react/jsx-runtime";
|
|
9881
9877
|
var Table = (props) => {
|
|
9882
9878
|
const {
|
|
9883
9879
|
children,
|
|
@@ -9887,7 +9883,7 @@ var Table = (props) => {
|
|
|
9887
9883
|
headerSticky = false,
|
|
9888
9884
|
stickyShadow = true
|
|
9889
9885
|
} = props;
|
|
9890
|
-
return /* @__PURE__ */
|
|
9886
|
+
return /* @__PURE__ */ jsx343("div", { className: `lib-xplat-table-wrapper ${size}`, children: /* @__PURE__ */ jsx343(
|
|
9891
9887
|
TableContext_default.Provider,
|
|
9892
9888
|
{
|
|
9893
9889
|
value: {
|
|
@@ -9896,7 +9892,7 @@ var Table = (props) => {
|
|
|
9896
9892
|
headerSticky,
|
|
9897
9893
|
stickyShadow
|
|
9898
9894
|
},
|
|
9899
|
-
children: /* @__PURE__ */
|
|
9895
|
+
children: /* @__PURE__ */ jsx343("table", { className: "lib-xplat-table", children })
|
|
9900
9896
|
}
|
|
9901
9897
|
) });
|
|
9902
9898
|
};
|
|
@@ -9904,41 +9900,41 @@ Table.displayName = "Table";
|
|
|
9904
9900
|
var Table_default = Table;
|
|
9905
9901
|
|
|
9906
9902
|
// src/components/Table/TableBody.tsx
|
|
9907
|
-
import { jsx as
|
|
9903
|
+
import { jsx as jsx344 } from "react/jsx-runtime";
|
|
9908
9904
|
var TableBody = (props) => {
|
|
9909
9905
|
const { children } = props;
|
|
9910
|
-
return /* @__PURE__ */
|
|
9906
|
+
return /* @__PURE__ */ jsx344("tbody", { children });
|
|
9911
9907
|
};
|
|
9912
9908
|
TableBody.displayName = "TableBody";
|
|
9913
9909
|
var TableBody_default = TableBody;
|
|
9914
9910
|
|
|
9915
9911
|
// src/components/Table/TableCell.tsx
|
|
9916
|
-
import
|
|
9912
|
+
import React36 from "react";
|
|
9917
9913
|
|
|
9918
9914
|
// src/components/Table/TableHeadContext.tsx
|
|
9919
|
-
import
|
|
9920
|
-
var TableHeadContext =
|
|
9915
|
+
import React34 from "react";
|
|
9916
|
+
var TableHeadContext = React34.createContext(
|
|
9921
9917
|
null
|
|
9922
9918
|
);
|
|
9923
9919
|
var useTableHeadContext = () => {
|
|
9924
|
-
const ctx =
|
|
9920
|
+
const ctx = React34.useContext(TableHeadContext);
|
|
9925
9921
|
return ctx;
|
|
9926
9922
|
};
|
|
9927
9923
|
var TableHeadContext_default = TableHeadContext;
|
|
9928
9924
|
|
|
9929
9925
|
// src/components/Table/TableRowContext.tsx
|
|
9930
|
-
import
|
|
9931
|
-
var TableRowContext =
|
|
9926
|
+
import React35 from "react";
|
|
9927
|
+
var TableRowContext = React35.createContext(null);
|
|
9932
9928
|
var useTableRowContext = () => {
|
|
9933
|
-
const ctx =
|
|
9929
|
+
const ctx = React35.useContext(TableRowContext);
|
|
9934
9930
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
9935
9931
|
return ctx;
|
|
9936
9932
|
};
|
|
9937
9933
|
var TableRowContext_default = TableRowContext;
|
|
9938
9934
|
|
|
9939
9935
|
// src/components/Table/TableCell.tsx
|
|
9940
|
-
import { jsx as
|
|
9941
|
-
var TableCell =
|
|
9936
|
+
import { jsx as jsx345 } from "react/jsx-runtime";
|
|
9937
|
+
var TableCell = React36.memo((props) => {
|
|
9942
9938
|
const {
|
|
9943
9939
|
children,
|
|
9944
9940
|
align = "center",
|
|
@@ -9952,9 +9948,9 @@ var TableCell = React37.memo((props) => {
|
|
|
9952
9948
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
9953
9949
|
const { stickyShadow } = useTableContext();
|
|
9954
9950
|
const headContext = useTableHeadContext();
|
|
9955
|
-
const [left, setLeft] =
|
|
9956
|
-
const cellRef =
|
|
9957
|
-
const calculateLeft =
|
|
9951
|
+
const [left, setLeft] = React36.useState(0);
|
|
9952
|
+
const cellRef = React36.useRef(null);
|
|
9953
|
+
const calculateLeft = React36.useCallback(() => {
|
|
9958
9954
|
if (!cellRef.current) return 0;
|
|
9959
9955
|
let totalLeft = 0;
|
|
9960
9956
|
for (const ref of stickyCells) {
|
|
@@ -9963,7 +9959,7 @@ var TableCell = React37.memo((props) => {
|
|
|
9963
9959
|
}
|
|
9964
9960
|
return totalLeft;
|
|
9965
9961
|
}, [stickyCells]);
|
|
9966
|
-
|
|
9962
|
+
React36.useEffect(() => {
|
|
9967
9963
|
if (!isSticky || !cellRef.current) return;
|
|
9968
9964
|
registerStickyCell(cellRef);
|
|
9969
9965
|
setLeft(calculateLeft());
|
|
@@ -9982,7 +9978,7 @@ var TableCell = React37.memo((props) => {
|
|
|
9982
9978
|
const CellTag = isHeaderCell ? "th" : "td";
|
|
9983
9979
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
9984
9980
|
const enableHover = headContext && headContext.cellHover;
|
|
9985
|
-
return /* @__PURE__ */
|
|
9981
|
+
return /* @__PURE__ */ jsx345(
|
|
9986
9982
|
CellTag,
|
|
9987
9983
|
{
|
|
9988
9984
|
ref: cellRef,
|
|
@@ -10009,21 +10005,21 @@ TableCell.displayName = "TableCell";
|
|
|
10009
10005
|
var TableCell_default = TableCell;
|
|
10010
10006
|
|
|
10011
10007
|
// src/components/Table/TableHead.tsx
|
|
10012
|
-
import { jsx as
|
|
10008
|
+
import { jsx as jsx346 } from "react/jsx-runtime";
|
|
10013
10009
|
var TableHead = ({
|
|
10014
10010
|
children,
|
|
10015
10011
|
cellHover = false
|
|
10016
10012
|
}) => {
|
|
10017
10013
|
const { headerSticky } = useTableContext();
|
|
10018
|
-
return /* @__PURE__ */
|
|
10014
|
+
return /* @__PURE__ */ jsx346(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ jsx346("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
|
|
10019
10015
|
};
|
|
10020
10016
|
TableHead.displayName = "TableHead";
|
|
10021
10017
|
var TableHead_default = TableHead;
|
|
10022
10018
|
|
|
10023
10019
|
// src/components/Table/TableRow.tsx
|
|
10024
|
-
import
|
|
10025
|
-
import { jsx as
|
|
10026
|
-
var TableRow =
|
|
10020
|
+
import React37 from "react";
|
|
10021
|
+
import { jsx as jsx347 } from "react/jsx-runtime";
|
|
10022
|
+
var TableRow = React37.memo((props) => {
|
|
10027
10023
|
const {
|
|
10028
10024
|
children,
|
|
10029
10025
|
type = "secondary",
|
|
@@ -10032,14 +10028,14 @@ var TableRow = React38.memo((props) => {
|
|
|
10032
10028
|
onClick
|
|
10033
10029
|
} = props;
|
|
10034
10030
|
const { rowBorderUse } = useTableContext();
|
|
10035
|
-
const [stickyCells, setStickyCells] =
|
|
10031
|
+
const [stickyCells, setStickyCells] = React37.useState([]);
|
|
10036
10032
|
const registerStickyCell = (ref) => {
|
|
10037
10033
|
setStickyCells((prev) => {
|
|
10038
10034
|
if (prev.includes(ref)) return prev;
|
|
10039
10035
|
return [...prev, ref];
|
|
10040
10036
|
});
|
|
10041
10037
|
};
|
|
10042
|
-
return /* @__PURE__ */
|
|
10038
|
+
return /* @__PURE__ */ jsx347(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ jsx347(
|
|
10043
10039
|
"tr",
|
|
10044
10040
|
{
|
|
10045
10041
|
className: clsx_default(
|
|
@@ -10063,7 +10059,7 @@ TableRow.displayName = "TableRow";
|
|
|
10063
10059
|
var TableRow_default = TableRow;
|
|
10064
10060
|
|
|
10065
10061
|
// src/components/Tag/Tag.tsx
|
|
10066
|
-
import { jsx as
|
|
10062
|
+
import { jsx as jsx348, jsxs as jsxs220 } from "react/jsx-runtime";
|
|
10067
10063
|
var Tag = (props) => {
|
|
10068
10064
|
const {
|
|
10069
10065
|
children,
|
|
@@ -10084,8 +10080,8 @@ var Tag = (props) => {
|
|
|
10084
10080
|
disabled && "disabled"
|
|
10085
10081
|
),
|
|
10086
10082
|
children: [
|
|
10087
|
-
/* @__PURE__ */
|
|
10088
|
-
onClose && /* @__PURE__ */
|
|
10083
|
+
/* @__PURE__ */ jsx348("span", { className: "tag-label", children }),
|
|
10084
|
+
onClose && /* @__PURE__ */ jsx348("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ jsx348(XIcon_default, {}) })
|
|
10089
10085
|
]
|
|
10090
10086
|
}
|
|
10091
10087
|
);
|
|
@@ -10094,9 +10090,9 @@ Tag.displayName = "Tag";
|
|
|
10094
10090
|
var Tag_default = Tag;
|
|
10095
10091
|
|
|
10096
10092
|
// src/components/TextArea/TextArea.tsx
|
|
10097
|
-
import
|
|
10098
|
-
import { jsx as
|
|
10099
|
-
var TextArea =
|
|
10093
|
+
import React38 from "react";
|
|
10094
|
+
import { jsx as jsx349 } from "react/jsx-runtime";
|
|
10095
|
+
var TextArea = React38.forwardRef(
|
|
10100
10096
|
(props, ref) => {
|
|
10101
10097
|
const {
|
|
10102
10098
|
className,
|
|
@@ -10106,7 +10102,7 @@ var TextArea = React39.forwardRef(
|
|
|
10106
10102
|
disabled,
|
|
10107
10103
|
...textareaProps
|
|
10108
10104
|
} = props;
|
|
10109
|
-
return /* @__PURE__ */
|
|
10105
|
+
return /* @__PURE__ */ jsx349("div", { className: clsx_default("lib-xplat-textarea-wrap", className), children: /* @__PURE__ */ jsx349(
|
|
10110
10106
|
"textarea",
|
|
10111
10107
|
{
|
|
10112
10108
|
...textareaProps,
|
|
@@ -10123,25 +10119,25 @@ TextArea.displayName = "TextArea";
|
|
|
10123
10119
|
var TextArea_default = TextArea;
|
|
10124
10120
|
|
|
10125
10121
|
// src/components/Toast/Toast.tsx
|
|
10126
|
-
import
|
|
10122
|
+
import React39 from "react";
|
|
10127
10123
|
import { createPortal as createPortal3 } from "react-dom";
|
|
10128
|
-
import { jsx as
|
|
10129
|
-
var ToastContext =
|
|
10124
|
+
import { jsx as jsx350, jsxs as jsxs221 } from "react/jsx-runtime";
|
|
10125
|
+
var ToastContext = React39.createContext(null);
|
|
10130
10126
|
var useToast = () => {
|
|
10131
|
-
const ctx =
|
|
10127
|
+
const ctx = React39.useContext(ToastContext);
|
|
10132
10128
|
if (!ctx) throw new Error("useToast must be used within ToastProvider");
|
|
10133
10129
|
return ctx;
|
|
10134
10130
|
};
|
|
10135
10131
|
var EXIT_DURATION = 300;
|
|
10136
10132
|
var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
10137
|
-
const ref =
|
|
10138
|
-
const [height, setHeight] =
|
|
10139
|
-
|
|
10133
|
+
const ref = React39.useRef(null);
|
|
10134
|
+
const [height, setHeight] = React39.useState(void 0);
|
|
10135
|
+
React39.useEffect(() => {
|
|
10140
10136
|
if (ref.current && !isExiting) {
|
|
10141
10137
|
setHeight(ref.current.offsetHeight);
|
|
10142
10138
|
}
|
|
10143
10139
|
}, [isExiting]);
|
|
10144
|
-
return /* @__PURE__ */
|
|
10140
|
+
return /* @__PURE__ */ jsx350(
|
|
10145
10141
|
"div",
|
|
10146
10142
|
{
|
|
10147
10143
|
className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
|
|
@@ -10156,8 +10152,8 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
10156
10152
|
className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
|
|
10157
10153
|
role: "alert",
|
|
10158
10154
|
children: [
|
|
10159
|
-
/* @__PURE__ */
|
|
10160
|
-
/* @__PURE__ */
|
|
10155
|
+
/* @__PURE__ */ jsx350("span", { className: "message", children: item.message }),
|
|
10156
|
+
/* @__PURE__ */ jsx350("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
10161
10157
|
]
|
|
10162
10158
|
}
|
|
10163
10159
|
)
|
|
@@ -10168,13 +10164,13 @@ var ToastProvider = ({
|
|
|
10168
10164
|
children,
|
|
10169
10165
|
position = "top-right"
|
|
10170
10166
|
}) => {
|
|
10171
|
-
const [toasts, setToasts] =
|
|
10172
|
-
const [removing, setRemoving] =
|
|
10173
|
-
const [mounted, setMounted] =
|
|
10174
|
-
|
|
10167
|
+
const [toasts, setToasts] = React39.useState([]);
|
|
10168
|
+
const [removing, setRemoving] = React39.useState(/* @__PURE__ */ new Set());
|
|
10169
|
+
const [mounted, setMounted] = React39.useState(false);
|
|
10170
|
+
React39.useEffect(() => {
|
|
10175
10171
|
setMounted(true);
|
|
10176
10172
|
}, []);
|
|
10177
|
-
const remove =
|
|
10173
|
+
const remove = React39.useCallback((id) => {
|
|
10178
10174
|
setRemoving((prev) => new Set(prev).add(id));
|
|
10179
10175
|
setTimeout(() => {
|
|
10180
10176
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
@@ -10185,7 +10181,7 @@ var ToastProvider = ({
|
|
|
10185
10181
|
});
|
|
10186
10182
|
}, EXIT_DURATION);
|
|
10187
10183
|
}, []);
|
|
10188
|
-
const toast =
|
|
10184
|
+
const toast = React39.useCallback(
|
|
10189
10185
|
(type, message, duration = 3e3) => {
|
|
10190
10186
|
const id = `${Date.now()}-${Math.random()}`;
|
|
10191
10187
|
setToasts((prev) => [...prev, { id, type, message }]);
|
|
@@ -10198,7 +10194,7 @@ var ToastProvider = ({
|
|
|
10198
10194
|
return /* @__PURE__ */ jsxs221(ToastContext.Provider, { value: { toast }, children: [
|
|
10199
10195
|
children,
|
|
10200
10196
|
mounted && createPortal3(
|
|
10201
|
-
/* @__PURE__ */
|
|
10197
|
+
/* @__PURE__ */ jsx350("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ jsx350(
|
|
10202
10198
|
ToastItemComponent,
|
|
10203
10199
|
{
|
|
10204
10200
|
item: t,
|
|
@@ -10214,8 +10210,8 @@ var ToastProvider = ({
|
|
|
10214
10210
|
ToastProvider.displayName = "ToastProvider";
|
|
10215
10211
|
|
|
10216
10212
|
// src/components/Tooltip/Tooltip.tsx
|
|
10217
|
-
import
|
|
10218
|
-
import { Fragment as Fragment5, jsx as
|
|
10213
|
+
import React40 from "react";
|
|
10214
|
+
import { Fragment as Fragment5, jsx as jsx351, jsxs as jsxs222 } from "react/jsx-runtime";
|
|
10219
10215
|
var OFFSET = 12;
|
|
10220
10216
|
var GAP = 8;
|
|
10221
10217
|
var SHOW_DELAY = 300;
|
|
@@ -10228,14 +10224,14 @@ var Tooltip = (props) => {
|
|
|
10228
10224
|
follow = false,
|
|
10229
10225
|
disabled = false
|
|
10230
10226
|
} = props;
|
|
10231
|
-
const triggerRef =
|
|
10232
|
-
const tooltipRef =
|
|
10233
|
-
const [visible, setVisible] =
|
|
10234
|
-
const [pos, setPos] =
|
|
10235
|
-
const delayTimer =
|
|
10236
|
-
const rafRef =
|
|
10237
|
-
const cursor =
|
|
10238
|
-
const clamp =
|
|
10227
|
+
const triggerRef = React40.useRef(null);
|
|
10228
|
+
const tooltipRef = React40.useRef(null);
|
|
10229
|
+
const [visible, setVisible] = React40.useState(false);
|
|
10230
|
+
const [pos, setPos] = React40.useState({ left: 0, top: 0 });
|
|
10231
|
+
const delayTimer = React40.useRef(0);
|
|
10232
|
+
const rafRef = React40.useRef(0);
|
|
10233
|
+
const cursor = React40.useRef(null);
|
|
10234
|
+
const clamp = React40.useCallback((left, top, w, h) => {
|
|
10239
10235
|
const vw = window.innerWidth;
|
|
10240
10236
|
const vh = window.innerHeight;
|
|
10241
10237
|
return {
|
|
@@ -10243,7 +10239,7 @@ var Tooltip = (props) => {
|
|
|
10243
10239
|
top: Math.min(Math.max(GAP, top), Math.max(GAP, vh - h - GAP))
|
|
10244
10240
|
};
|
|
10245
10241
|
}, []);
|
|
10246
|
-
const placeAtCursor =
|
|
10242
|
+
const placeAtCursor = React40.useCallback((x, y) => {
|
|
10247
10243
|
const el = tooltipRef.current;
|
|
10248
10244
|
if (!el) return;
|
|
10249
10245
|
const w = el.offsetWidth;
|
|
@@ -10254,7 +10250,7 @@ var Tooltip = (props) => {
|
|
|
10254
10250
|
if (top < GAP) top = y + OFFSET;
|
|
10255
10251
|
setPos(clamp(left, top, w, h));
|
|
10256
10252
|
}, [clamp]);
|
|
10257
|
-
const placeAtTrigger =
|
|
10253
|
+
const placeAtTrigger = React40.useCallback(() => {
|
|
10258
10254
|
const el = tooltipRef.current;
|
|
10259
10255
|
const trigger = triggerRef.current;
|
|
10260
10256
|
if (!el || !trigger) return;
|
|
@@ -10266,19 +10262,19 @@ var Tooltip = (props) => {
|
|
|
10266
10262
|
const left = rect.left + rect.width / 2 - w / 2;
|
|
10267
10263
|
setPos(clamp(left, top, w, h));
|
|
10268
10264
|
}, [clamp]);
|
|
10269
|
-
const reposition =
|
|
10265
|
+
const reposition = React40.useCallback(() => {
|
|
10270
10266
|
if (follow && cursor.current) {
|
|
10271
10267
|
placeAtCursor(cursor.current.x, cursor.current.y);
|
|
10272
10268
|
} else {
|
|
10273
10269
|
placeAtTrigger();
|
|
10274
10270
|
}
|
|
10275
10271
|
}, [follow, placeAtCursor, placeAtTrigger]);
|
|
10276
|
-
const handleMouseEnter =
|
|
10272
|
+
const handleMouseEnter = React40.useCallback((e) => {
|
|
10277
10273
|
if (disabled) return;
|
|
10278
10274
|
cursor.current = { x: e.clientX, y: e.clientY };
|
|
10279
10275
|
delayTimer.current = window.setTimeout(() => setVisible(true), SHOW_DELAY);
|
|
10280
10276
|
}, [disabled]);
|
|
10281
|
-
const handleMouseMove =
|
|
10277
|
+
const handleMouseMove = React40.useCallback((e) => {
|
|
10282
10278
|
cursor.current = { x: e.clientX, y: e.clientY };
|
|
10283
10279
|
if (!visible || !follow) return;
|
|
10284
10280
|
cancelAnimationFrame(rafRef.current);
|
|
@@ -10286,25 +10282,25 @@ var Tooltip = (props) => {
|
|
|
10286
10282
|
if (cursor.current) placeAtCursor(cursor.current.x, cursor.current.y);
|
|
10287
10283
|
});
|
|
10288
10284
|
}, [visible, follow, placeAtCursor]);
|
|
10289
|
-
const close =
|
|
10285
|
+
const close = React40.useCallback(() => {
|
|
10290
10286
|
window.clearTimeout(delayTimer.current);
|
|
10291
10287
|
cancelAnimationFrame(rafRef.current);
|
|
10292
10288
|
setVisible(false);
|
|
10293
10289
|
}, []);
|
|
10294
|
-
const handleMouseLeave =
|
|
10290
|
+
const handleMouseLeave = React40.useCallback(() => {
|
|
10295
10291
|
cursor.current = null;
|
|
10296
10292
|
close();
|
|
10297
10293
|
}, [close]);
|
|
10298
|
-
const handleFocus =
|
|
10294
|
+
const handleFocus = React40.useCallback(() => {
|
|
10299
10295
|
if (disabled) return;
|
|
10300
10296
|
cursor.current = null;
|
|
10301
10297
|
setVisible(true);
|
|
10302
10298
|
}, [disabled]);
|
|
10303
|
-
|
|
10299
|
+
React40.useLayoutEffect(() => {
|
|
10304
10300
|
if (!visible) return;
|
|
10305
10301
|
reposition();
|
|
10306
10302
|
}, [visible, reposition]);
|
|
10307
|
-
|
|
10303
|
+
React40.useEffect(() => {
|
|
10308
10304
|
if (!visible || follow) return;
|
|
10309
10305
|
const onChange = () => placeAtTrigger();
|
|
10310
10306
|
window.addEventListener("scroll", onChange, true);
|
|
@@ -10314,11 +10310,11 @@ var Tooltip = (props) => {
|
|
|
10314
10310
|
window.removeEventListener("resize", onChange);
|
|
10315
10311
|
};
|
|
10316
10312
|
}, [visible, follow, placeAtTrigger]);
|
|
10317
|
-
|
|
10313
|
+
React40.useEffect(() => () => {
|
|
10318
10314
|
window.clearTimeout(delayTimer.current);
|
|
10319
10315
|
cancelAnimationFrame(rafRef.current);
|
|
10320
10316
|
}, []);
|
|
10321
|
-
if (!title && !description) return /* @__PURE__ */
|
|
10317
|
+
if (!title && !description) return /* @__PURE__ */ jsx351(Fragment5, { children });
|
|
10322
10318
|
return /* @__PURE__ */ jsxs222(
|
|
10323
10319
|
"div",
|
|
10324
10320
|
{
|
|
@@ -10332,7 +10328,7 @@ var Tooltip = (props) => {
|
|
|
10332
10328
|
onBlur: close,
|
|
10333
10329
|
children: [
|
|
10334
10330
|
children,
|
|
10335
|
-
visible && /* @__PURE__ */
|
|
10331
|
+
visible && /* @__PURE__ */ jsx351(Portal_default, { children: /* @__PURE__ */ jsxs222(
|
|
10336
10332
|
"div",
|
|
10337
10333
|
{
|
|
10338
10334
|
ref: tooltipRef,
|
|
@@ -10340,8 +10336,8 @@ var Tooltip = (props) => {
|
|
|
10340
10336
|
className: clsx_default("lib-xplat-tooltip", type),
|
|
10341
10337
|
style: { position: "fixed", left: pos.left, top: pos.top },
|
|
10342
10338
|
children: [
|
|
10343
|
-
title && /* @__PURE__ */
|
|
10344
|
-
description && /* @__PURE__ */
|
|
10339
|
+
title && /* @__PURE__ */ jsx351("div", { className: "tooltip-title", children: title }),
|
|
10340
|
+
description && /* @__PURE__ */ jsx351("div", { className: "tooltip-desc", children: description })
|
|
10345
10341
|
]
|
|
10346
10342
|
}
|
|
10347
10343
|
) })
|
|
@@ -10353,11 +10349,11 @@ Tooltip.displayName = "Tooltip";
|
|
|
10353
10349
|
var Tooltip_default = Tooltip;
|
|
10354
10350
|
|
|
10355
10351
|
// src/components/Video/Video.tsx
|
|
10356
|
-
import
|
|
10357
|
-
import { jsx as
|
|
10352
|
+
import React41 from "react";
|
|
10353
|
+
import { jsx as jsx352, jsxs as jsxs223 } from "react/jsx-runtime";
|
|
10358
10354
|
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: [
|
|
10359
|
-
/* @__PURE__ */
|
|
10360
|
-
/* @__PURE__ */
|
|
10355
|
+
/* @__PURE__ */ jsx352("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
10356
|
+
/* @__PURE__ */ jsx352("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
|
|
10361
10357
|
] });
|
|
10362
10358
|
var formatTime = (sec) => {
|
|
10363
10359
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -10365,7 +10361,7 @@ var formatTime = (sec) => {
|
|
|
10365
10361
|
const s = Math.floor(sec % 60);
|
|
10366
10362
|
return `${m}:${s.toString().padStart(2, "0")}`;
|
|
10367
10363
|
};
|
|
10368
|
-
var Video =
|
|
10364
|
+
var Video = React41.forwardRef((props, ref) => {
|
|
10369
10365
|
const {
|
|
10370
10366
|
src,
|
|
10371
10367
|
poster,
|
|
@@ -10389,21 +10385,21 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
10389
10385
|
children,
|
|
10390
10386
|
...rest
|
|
10391
10387
|
} = props;
|
|
10392
|
-
const containerRef =
|
|
10393
|
-
const videoRef =
|
|
10394
|
-
const [isPlaying, setIsPlaying] =
|
|
10395
|
-
const [isLoaded, setIsLoaded] =
|
|
10396
|
-
const [currentTime, setCurrentTime] =
|
|
10397
|
-
const [duration, setDuration] =
|
|
10398
|
-
const [buffered, setBuffered] =
|
|
10399
|
-
const [volume, setVolume] =
|
|
10400
|
-
const [isMuted, setIsMuted] =
|
|
10401
|
-
const [isFullscreen, setIsFullscreen] =
|
|
10402
|
-
const [playbackRate, setPlaybackRate] =
|
|
10403
|
-
const [rateMenuOpen, setRateMenuOpen] =
|
|
10404
|
-
const [captionsOn, setCaptionsOn] =
|
|
10405
|
-
const [isPip, setIsPip] =
|
|
10406
|
-
const setRefs =
|
|
10388
|
+
const containerRef = React41.useRef(null);
|
|
10389
|
+
const videoRef = React41.useRef(null);
|
|
10390
|
+
const [isPlaying, setIsPlaying] = React41.useState(Boolean(autoPlay));
|
|
10391
|
+
const [isLoaded, setIsLoaded] = React41.useState(false);
|
|
10392
|
+
const [currentTime, setCurrentTime] = React41.useState(0);
|
|
10393
|
+
const [duration, setDuration] = React41.useState(0);
|
|
10394
|
+
const [buffered, setBuffered] = React41.useState(0);
|
|
10395
|
+
const [volume, setVolume] = React41.useState(1);
|
|
10396
|
+
const [isMuted, setIsMuted] = React41.useState(Boolean(muted));
|
|
10397
|
+
const [isFullscreen, setIsFullscreen] = React41.useState(false);
|
|
10398
|
+
const [playbackRate, setPlaybackRate] = React41.useState(1);
|
|
10399
|
+
const [rateMenuOpen, setRateMenuOpen] = React41.useState(false);
|
|
10400
|
+
const [captionsOn, setCaptionsOn] = React41.useState(false);
|
|
10401
|
+
const [isPip, setIsPip] = React41.useState(false);
|
|
10402
|
+
const setRefs = React41.useCallback(
|
|
10407
10403
|
(el) => {
|
|
10408
10404
|
videoRef.current = el;
|
|
10409
10405
|
if (typeof ref === "function") ref(el);
|
|
@@ -10411,14 +10407,14 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
10411
10407
|
},
|
|
10412
10408
|
[ref]
|
|
10413
10409
|
);
|
|
10414
|
-
|
|
10410
|
+
React41.useEffect(() => {
|
|
10415
10411
|
const onFsChange = () => {
|
|
10416
10412
|
setIsFullscreen(document.fullscreenElement === containerRef.current);
|
|
10417
10413
|
};
|
|
10418
10414
|
document.addEventListener("fullscreenchange", onFsChange);
|
|
10419
10415
|
return () => document.removeEventListener("fullscreenchange", onFsChange);
|
|
10420
10416
|
}, []);
|
|
10421
|
-
|
|
10417
|
+
React41.useEffect(() => {
|
|
10422
10418
|
const v = videoRef.current;
|
|
10423
10419
|
if (!v) return;
|
|
10424
10420
|
const onEnter = () => setIsPip(true);
|
|
@@ -10538,7 +10534,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
10538
10534
|
ref: containerRef,
|
|
10539
10535
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
10540
10536
|
children: [
|
|
10541
|
-
/* @__PURE__ */
|
|
10537
|
+
/* @__PURE__ */ jsx352(
|
|
10542
10538
|
"video",
|
|
10543
10539
|
{
|
|
10544
10540
|
ref: setRefs,
|
|
@@ -10559,7 +10555,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
10559
10555
|
children
|
|
10560
10556
|
}
|
|
10561
10557
|
),
|
|
10562
|
-
showCenterPlay && /* @__PURE__ */
|
|
10558
|
+
showCenterPlay && /* @__PURE__ */ jsx352(
|
|
10563
10559
|
"button",
|
|
10564
10560
|
{
|
|
10565
10561
|
type: "button",
|
|
@@ -10571,11 +10567,11 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
10571
10567
|
onClick: togglePlay,
|
|
10572
10568
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
10573
10569
|
tabIndex: -1,
|
|
10574
|
-
children: /* @__PURE__ */
|
|
10570
|
+
children: /* @__PURE__ */ jsx352("span", { className: "center-play-icon", children: /* @__PURE__ */ jsx352(PlayCircleIcon_default, {}) })
|
|
10575
10571
|
}
|
|
10576
10572
|
),
|
|
10577
10573
|
showControls && /* @__PURE__ */ jsxs223("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
|
|
10578
|
-
/* @__PURE__ */
|
|
10574
|
+
/* @__PURE__ */ jsx352(
|
|
10579
10575
|
"input",
|
|
10580
10576
|
{
|
|
10581
10577
|
type: "range",
|
|
@@ -10593,28 +10589,28 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
10593
10589
|
}
|
|
10594
10590
|
),
|
|
10595
10591
|
/* @__PURE__ */ jsxs223("div", { className: "controls-row", children: [
|
|
10596
|
-
/* @__PURE__ */
|
|
10592
|
+
/* @__PURE__ */ jsx352(
|
|
10597
10593
|
"button",
|
|
10598
10594
|
{
|
|
10599
10595
|
type: "button",
|
|
10600
10596
|
className: "control-btn",
|
|
10601
10597
|
onClick: togglePlay,
|
|
10602
10598
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
10603
|
-
children: isPlaying ? /* @__PURE__ */
|
|
10599
|
+
children: isPlaying ? /* @__PURE__ */ jsx352(PauseIcon_default, {}) : /* @__PURE__ */ jsx352(PlayIcon_default, {})
|
|
10604
10600
|
}
|
|
10605
10601
|
),
|
|
10606
10602
|
/* @__PURE__ */ jsxs223("div", { className: "volume-group", children: [
|
|
10607
|
-
/* @__PURE__ */
|
|
10603
|
+
/* @__PURE__ */ jsx352(
|
|
10608
10604
|
"button",
|
|
10609
10605
|
{
|
|
10610
10606
|
type: "button",
|
|
10611
10607
|
className: "control-btn",
|
|
10612
10608
|
onClick: toggleMute,
|
|
10613
10609
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
10614
|
-
children: /* @__PURE__ */
|
|
10610
|
+
children: /* @__PURE__ */ jsx352(VolumeGlyph, {})
|
|
10615
10611
|
}
|
|
10616
10612
|
),
|
|
10617
|
-
/* @__PURE__ */
|
|
10613
|
+
/* @__PURE__ */ jsx352(
|
|
10618
10614
|
"input",
|
|
10619
10615
|
{
|
|
10620
10616
|
type: "range",
|
|
@@ -10634,7 +10630,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
10634
10630
|
" / ",
|
|
10635
10631
|
formatTime(duration)
|
|
10636
10632
|
] }),
|
|
10637
|
-
/* @__PURE__ */
|
|
10633
|
+
/* @__PURE__ */ jsx352("div", { className: "controls-spacer" }),
|
|
10638
10634
|
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ jsxs223("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
|
|
10639
10635
|
/* @__PURE__ */ jsxs223(
|
|
10640
10636
|
"button",
|
|
@@ -10650,7 +10646,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
10650
10646
|
]
|
|
10651
10647
|
}
|
|
10652
10648
|
),
|
|
10653
|
-
rateMenuOpen && /* @__PURE__ */
|
|
10649
|
+
rateMenuOpen && /* @__PURE__ */ jsx352("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ jsx352("li", { children: /* @__PURE__ */ jsxs223(
|
|
10654
10650
|
"button",
|
|
10655
10651
|
{
|
|
10656
10652
|
type: "button",
|
|
@@ -10664,7 +10660,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
10664
10660
|
}
|
|
10665
10661
|
) }, r2)) })
|
|
10666
10662
|
] }),
|
|
10667
|
-
showCaptions && /* @__PURE__ */
|
|
10663
|
+
showCaptions && /* @__PURE__ */ jsx352(
|
|
10668
10664
|
"button",
|
|
10669
10665
|
{
|
|
10670
10666
|
type: "button",
|
|
@@ -10672,37 +10668,37 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
10672
10668
|
onClick: toggleCaptions,
|
|
10673
10669
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
10674
10670
|
"aria-pressed": captionsOn,
|
|
10675
|
-
children: /* @__PURE__ */
|
|
10671
|
+
children: /* @__PURE__ */ jsx352(TypeIcon_default, {})
|
|
10676
10672
|
}
|
|
10677
10673
|
),
|
|
10678
|
-
showPip && pipSupported && /* @__PURE__ */
|
|
10674
|
+
showPip && pipSupported && /* @__PURE__ */ jsx352(
|
|
10679
10675
|
"button",
|
|
10680
10676
|
{
|
|
10681
10677
|
type: "button",
|
|
10682
10678
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
10683
10679
|
onClick: togglePip,
|
|
10684
10680
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
10685
|
-
children: /* @__PURE__ */
|
|
10681
|
+
children: /* @__PURE__ */ jsx352(PipIcon, {})
|
|
10686
10682
|
}
|
|
10687
10683
|
),
|
|
10688
|
-
showDownload && /* @__PURE__ */
|
|
10684
|
+
showDownload && /* @__PURE__ */ jsx352(
|
|
10689
10685
|
"a",
|
|
10690
10686
|
{
|
|
10691
10687
|
className: "control-btn",
|
|
10692
10688
|
href: src,
|
|
10693
10689
|
download: downloadFileName ?? true,
|
|
10694
10690
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
10695
|
-
children: /* @__PURE__ */
|
|
10691
|
+
children: /* @__PURE__ */ jsx352(DownloadIcon_default, {})
|
|
10696
10692
|
}
|
|
10697
10693
|
),
|
|
10698
|
-
/* @__PURE__ */
|
|
10694
|
+
/* @__PURE__ */ jsx352(
|
|
10699
10695
|
"button",
|
|
10700
10696
|
{
|
|
10701
10697
|
type: "button",
|
|
10702
10698
|
className: "control-btn",
|
|
10703
10699
|
onClick: toggleFullscreen,
|
|
10704
10700
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
10705
|
-
children: isFullscreen ? /* @__PURE__ */
|
|
10701
|
+
children: isFullscreen ? /* @__PURE__ */ jsx352(MinimizeIcon_default, {}) : /* @__PURE__ */ jsx352(MaximizeIcon_default, {})
|
|
10706
10702
|
}
|
|
10707
10703
|
)
|
|
10708
10704
|
] })
|
|
@@ -10715,7 +10711,7 @@ Video.displayName = "Video";
|
|
|
10715
10711
|
var Video_default = Video;
|
|
10716
10712
|
|
|
10717
10713
|
// src/layout/Grid/FullGrid/FullGrid.tsx
|
|
10718
|
-
import { jsx as
|
|
10714
|
+
import { jsx as jsx353 } from "react/jsx-runtime";
|
|
10719
10715
|
var GAP_MAP = {
|
|
10720
10716
|
none: "var(--spacing-space-none)",
|
|
10721
10717
|
xs: "var(--spacing-space-1)",
|
|
@@ -10728,13 +10724,13 @@ var GAP_MAP = {
|
|
|
10728
10724
|
var FullGrid = (props) => {
|
|
10729
10725
|
const { children, gap } = props;
|
|
10730
10726
|
const style = gap != null ? { gap: GAP_MAP[gap] } : void 0;
|
|
10731
|
-
return /* @__PURE__ */
|
|
10727
|
+
return /* @__PURE__ */ jsx353("div", { className: "lib-xplat-full-grid", style, children });
|
|
10732
10728
|
};
|
|
10733
10729
|
FullGrid.displayName = "FullGrid";
|
|
10734
10730
|
var FullGrid_default = FullGrid;
|
|
10735
10731
|
|
|
10736
10732
|
// src/layout/Grid/FullScreen/FullScreen.tsx
|
|
10737
|
-
import { jsx as
|
|
10733
|
+
import { jsx as jsx354 } from "react/jsx-runtime";
|
|
10738
10734
|
var GAP_MAP2 = {
|
|
10739
10735
|
none: "var(--spacing-space-none)",
|
|
10740
10736
|
xs: "var(--spacing-space-1)",
|
|
@@ -10747,13 +10743,13 @@ var GAP_MAP2 = {
|
|
|
10747
10743
|
var FullScreen = (props) => {
|
|
10748
10744
|
const { children, gap } = props;
|
|
10749
10745
|
const style = gap != null ? { gap: GAP_MAP2[gap] } : void 0;
|
|
10750
|
-
return /* @__PURE__ */
|
|
10746
|
+
return /* @__PURE__ */ jsx354("div", { className: "lib-xplat-full-screen", style, children });
|
|
10751
10747
|
};
|
|
10752
10748
|
FullScreen.displayName = "FullScreen";
|
|
10753
10749
|
var FullScreen_default = FullScreen;
|
|
10754
10750
|
|
|
10755
10751
|
// src/layout/Grid/Item/Item.tsx
|
|
10756
|
-
import { jsx as
|
|
10752
|
+
import { jsx as jsx355 } from "react/jsx-runtime";
|
|
10757
10753
|
var calculateSpans = (column) => {
|
|
10758
10754
|
const spans = {};
|
|
10759
10755
|
let inherited = column.default;
|
|
@@ -10770,35 +10766,35 @@ var GridItem = ({ column, children, className }) => {
|
|
|
10770
10766
|
Object.entries(spans).forEach(([key, value]) => {
|
|
10771
10767
|
style[`--column-${key}`] = value;
|
|
10772
10768
|
});
|
|
10773
|
-
return /* @__PURE__ */
|
|
10769
|
+
return /* @__PURE__ */ jsx355("div", { className: clsx_default("lib-xplat-grid-item", className), style, children });
|
|
10774
10770
|
};
|
|
10775
10771
|
GridItem.displayName = "GridItem";
|
|
10776
10772
|
var Item_default = GridItem;
|
|
10777
10773
|
|
|
10778
10774
|
// src/layout/Header/Header.tsx
|
|
10779
|
-
import { jsx as
|
|
10775
|
+
import { jsx as jsx356, jsxs as jsxs224 } from "react/jsx-runtime";
|
|
10780
10776
|
var Header = ({
|
|
10781
10777
|
logo,
|
|
10782
10778
|
centerContent,
|
|
10783
10779
|
rightContent
|
|
10784
10780
|
}) => {
|
|
10785
10781
|
return /* @__PURE__ */ jsxs224("div", { className: "lib-xplat-layout-header", children: [
|
|
10786
|
-
/* @__PURE__ */
|
|
10787
|
-
/* @__PURE__ */
|
|
10788
|
-
/* @__PURE__ */
|
|
10782
|
+
/* @__PURE__ */ jsx356("div", { children: logo }),
|
|
10783
|
+
/* @__PURE__ */ jsx356("div", { children: centerContent }),
|
|
10784
|
+
/* @__PURE__ */ jsx356("div", { children: rightContent })
|
|
10789
10785
|
] });
|
|
10790
10786
|
};
|
|
10791
10787
|
Header.displayName = "Header";
|
|
10792
10788
|
var Header_default = Header;
|
|
10793
10789
|
|
|
10794
10790
|
// src/layout/Layout/Layout.tsx
|
|
10795
|
-
import { Fragment as Fragment6, jsx as
|
|
10791
|
+
import { Fragment as Fragment6, jsx as jsx357, jsxs as jsxs225 } from "react/jsx-runtime";
|
|
10796
10792
|
var Layout = (props) => {
|
|
10797
10793
|
const { header, sideBar, children } = props;
|
|
10798
|
-
return /* @__PURE__ */
|
|
10799
|
-
sideBar && /* @__PURE__ */
|
|
10794
|
+
return /* @__PURE__ */ jsx357("div", { className: "lib-xplat-layout", children: /* @__PURE__ */ jsxs225("div", { className: "lib-xplat-layout-content-wrapper", children: [
|
|
10795
|
+
sideBar && /* @__PURE__ */ jsx357(Fragment6, { children: sideBar }),
|
|
10800
10796
|
/* @__PURE__ */ jsxs225("div", { className: "lib-xplat-layout-content", children: [
|
|
10801
|
-
header && /* @__PURE__ */
|
|
10797
|
+
header && /* @__PURE__ */ jsx357("div", { className: "lib-xplat-layout-conent-header", children: header }),
|
|
10802
10798
|
children
|
|
10803
10799
|
] })
|
|
10804
10800
|
] }) });
|
|
@@ -10807,31 +10803,31 @@ Layout.displayName = "Layout";
|
|
|
10807
10803
|
var Layout_default = Layout;
|
|
10808
10804
|
|
|
10809
10805
|
// src/layout/SideBar/SideBar.tsx
|
|
10810
|
-
import
|
|
10806
|
+
import React43 from "react";
|
|
10811
10807
|
|
|
10812
10808
|
// src/layout/SideBar/SideBarContext.tsx
|
|
10813
|
-
import
|
|
10814
|
-
var SideBarContext =
|
|
10809
|
+
import React42 from "react";
|
|
10810
|
+
var SideBarContext = React42.createContext(null);
|
|
10815
10811
|
var useSideBarContext = () => {
|
|
10816
|
-
const ctx =
|
|
10812
|
+
const ctx = React42.useContext(SideBarContext);
|
|
10817
10813
|
if (!ctx) throw new Error("Error");
|
|
10818
10814
|
return ctx;
|
|
10819
10815
|
};
|
|
10820
10816
|
var SideBarContext_default = SideBarContext;
|
|
10821
10817
|
|
|
10822
10818
|
// src/layout/SideBar/SideBar.tsx
|
|
10823
|
-
import { jsx as
|
|
10819
|
+
import { jsx as jsx358 } from "react/jsx-runtime";
|
|
10824
10820
|
var SideBar = (props) => {
|
|
10825
10821
|
const { children, className } = props;
|
|
10826
|
-
const [isOpen, setIsOpen] =
|
|
10822
|
+
const [isOpen, setIsOpen] = React43.useState(true);
|
|
10827
10823
|
const handleSwitchSideBar = () => {
|
|
10828
10824
|
setIsOpen((prev) => !prev);
|
|
10829
10825
|
};
|
|
10830
|
-
return /* @__PURE__ */
|
|
10826
|
+
return /* @__PURE__ */ jsx358(
|
|
10831
10827
|
SideBarContext_default.Provider,
|
|
10832
10828
|
{
|
|
10833
10829
|
value: { isSidebarOpen: isOpen, handleSwitchSideBar },
|
|
10834
|
-
children: /* @__PURE__ */
|
|
10830
|
+
children: /* @__PURE__ */ jsx358(
|
|
10835
10831
|
"div",
|
|
10836
10832
|
{
|
|
10837
10833
|
className: clsx_default(
|