@x-plat/design-system 0.5.63 → 0.5.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AutoResizeTextArea/index.cjs +118 -0
- package/dist/components/AutoResizeTextArea/index.css +46 -0
- package/dist/components/AutoResizeTextArea/index.d.cts +10 -0
- package/dist/components/AutoResizeTextArea/index.d.ts +10 -0
- package/dist/components/AutoResizeTextArea/index.js +81 -0
- package/dist/components/ChatInput/index.cjs +72 -30
- package/dist/components/ChatInput/index.css +47 -0
- package/dist/components/ChatInput/index.js +71 -29
- package/dist/components/CheckBox/index.css +1 -0
- package/dist/components/Radio/index.css +1 -0
- package/dist/components/TextArea/index.cjs +16 -44
- package/dist/components/TextArea/index.css +26 -28
- package/dist/components/TextArea/index.d.cts +8 -1
- package/dist/components/TextArea/index.d.ts +8 -1
- package/dist/components/TextArea/index.js +16 -44
- package/dist/components/index.cjs +561 -545
- package/dist/components/index.css +75 -28
- package/dist/components/index.d.cts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +508 -493
- package/dist/index.cjs +585 -569
- package/dist/index.css +75 -28
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +530 -515
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -57,6 +57,7 @@ __export(index_exports, {
|
|
|
57
57
|
ArrowUpLeftIcon: () => ArrowUpLeftIcon_default,
|
|
58
58
|
ArrowUpRightIcon: () => ArrowUpRightIcon_default,
|
|
59
59
|
AtSignIcon: () => AtSignIcon_default,
|
|
60
|
+
AutoResizeTextArea: () => AutoResizeTextArea_default,
|
|
60
61
|
Avatar: () => Avatar_default,
|
|
61
62
|
AwardIcon: () => AwardIcon_default,
|
|
62
63
|
BREAKPOINT_KEYS_ORDERED: () => BREAKPOINT_KEYS_ORDERED,
|
|
@@ -7182,11 +7183,72 @@ var Chart = import_react5.default.memo((props) => {
|
|
|
7182
7183
|
Chart.displayName = "Chart";
|
|
7183
7184
|
var Chart_default = Chart;
|
|
7184
7185
|
|
|
7185
|
-
// src/components/
|
|
7186
|
+
// src/components/AutoResizeTextArea/AutoResizeTextArea.tsx
|
|
7186
7187
|
var import_react6 = __toESM(require("react"), 1);
|
|
7188
|
+
var import_jsx_runtime306 = require("react/jsx-runtime");
|
|
7189
|
+
var MAX_HEIGHT = 400;
|
|
7190
|
+
var AutoResizeTextArea = import_react6.default.forwardRef(
|
|
7191
|
+
(props, ref) => {
|
|
7192
|
+
const { value, className, onChange, disabled, bare = false, ...textareaProps } = props;
|
|
7193
|
+
const localRef = import_react6.default.useRef(null);
|
|
7194
|
+
const setRefs = (el) => {
|
|
7195
|
+
localRef.current = el;
|
|
7196
|
+
if (!ref) return;
|
|
7197
|
+
if (typeof ref === "function") ref(el);
|
|
7198
|
+
else if (ref && "current" in ref)
|
|
7199
|
+
ref.current = el;
|
|
7200
|
+
};
|
|
7201
|
+
const updateHeight = () => {
|
|
7202
|
+
const el = localRef.current;
|
|
7203
|
+
if (!el) return;
|
|
7204
|
+
el.style.height = "0px";
|
|
7205
|
+
el.style.height = `${Math.min(el.scrollHeight, MAX_HEIGHT)}px`;
|
|
7206
|
+
};
|
|
7207
|
+
const handleChange = (e) => {
|
|
7208
|
+
if (onChange) {
|
|
7209
|
+
const event = {
|
|
7210
|
+
...e,
|
|
7211
|
+
target: { value: e.target.value }
|
|
7212
|
+
};
|
|
7213
|
+
onChange(event);
|
|
7214
|
+
}
|
|
7215
|
+
};
|
|
7216
|
+
import_react6.default.useEffect(() => {
|
|
7217
|
+
updateHeight();
|
|
7218
|
+
}, [value]);
|
|
7219
|
+
if (bare) {
|
|
7220
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
7221
|
+
"textarea",
|
|
7222
|
+
{
|
|
7223
|
+
...textareaProps,
|
|
7224
|
+
ref: setRefs,
|
|
7225
|
+
className,
|
|
7226
|
+
disabled,
|
|
7227
|
+
value,
|
|
7228
|
+
onChange: handleChange
|
|
7229
|
+
}
|
|
7230
|
+
);
|
|
7231
|
+
}
|
|
7232
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsx)("div", { className: clsx_default("lib-xplat-auto-resize-textarea-wrapper", className), children: /* @__PURE__ */ (0, import_jsx_runtime306.jsx)("div", { className: clsx_default("lib-xplat-auto-resize-textarea", disabled && "disabled"), children: /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
7233
|
+
"textarea",
|
|
7234
|
+
{
|
|
7235
|
+
...textareaProps,
|
|
7236
|
+
ref: setRefs,
|
|
7237
|
+
disabled,
|
|
7238
|
+
value,
|
|
7239
|
+
onChange: handleChange
|
|
7240
|
+
}
|
|
7241
|
+
) }) });
|
|
7242
|
+
}
|
|
7243
|
+
);
|
|
7244
|
+
AutoResizeTextArea.displayName = "AutoResizeTextArea";
|
|
7245
|
+
var AutoResizeTextArea_default = AutoResizeTextArea;
|
|
7246
|
+
|
|
7247
|
+
// src/components/ChatInput/ChatInput.tsx
|
|
7248
|
+
var import_react7 = __toESM(require("react"), 1);
|
|
7187
7249
|
|
|
7188
7250
|
// src/components/IconButton/IconButton.tsx
|
|
7189
|
-
var
|
|
7251
|
+
var import_jsx_runtime307 = require("react/jsx-runtime");
|
|
7190
7252
|
var IconButton = (props) => {
|
|
7191
7253
|
const {
|
|
7192
7254
|
icon,
|
|
@@ -7196,7 +7258,7 @@ var IconButton = (props) => {
|
|
|
7196
7258
|
disabled,
|
|
7197
7259
|
...rest
|
|
7198
7260
|
} = props;
|
|
7199
|
-
return /* @__PURE__ */ (0,
|
|
7261
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
7200
7262
|
"button",
|
|
7201
7263
|
{
|
|
7202
7264
|
className: clsx_default("lib-xplat-icon-button", type, size, className),
|
|
@@ -7210,9 +7272,8 @@ IconButton.displayName = "IconButton";
|
|
|
7210
7272
|
var IconButton_default = IconButton;
|
|
7211
7273
|
|
|
7212
7274
|
// src/components/ChatInput/ChatInput.tsx
|
|
7213
|
-
var
|
|
7214
|
-
var
|
|
7215
|
-
var ChatInput = import_react6.default.forwardRef(
|
|
7275
|
+
var import_jsx_runtime308 = require("react/jsx-runtime");
|
|
7276
|
+
var ChatInput = import_react7.default.forwardRef(
|
|
7216
7277
|
(props, ref) => {
|
|
7217
7278
|
const {
|
|
7218
7279
|
placeholder,
|
|
@@ -7223,24 +7284,9 @@ var ChatInput = import_react6.default.forwardRef(
|
|
|
7223
7284
|
onChange
|
|
7224
7285
|
} = props;
|
|
7225
7286
|
const isControlled = valueProp !== void 0;
|
|
7226
|
-
const [internalValue, setInternalValue] =
|
|
7287
|
+
const [internalValue, setInternalValue] = import_react7.default.useState("");
|
|
7227
7288
|
const value = isControlled ? valueProp : internalValue;
|
|
7228
7289
|
const hasText = value.trim().length > 0;
|
|
7229
|
-
const textareaRef = import_react6.default.useRef(null);
|
|
7230
|
-
const setRefs = import_react6.default.useCallback(
|
|
7231
|
-
(el) => {
|
|
7232
|
-
textareaRef.current = el;
|
|
7233
|
-
if (typeof ref === "function") ref(el);
|
|
7234
|
-
else if (ref) ref.current = el;
|
|
7235
|
-
},
|
|
7236
|
-
[ref]
|
|
7237
|
-
);
|
|
7238
|
-
const updateHeight = import_react6.default.useCallback(() => {
|
|
7239
|
-
const el = textareaRef.current;
|
|
7240
|
-
if (!el) return;
|
|
7241
|
-
el.style.height = "0px";
|
|
7242
|
-
el.style.height = `${Math.min(el.scrollHeight, MAX_HEIGHT)}px`;
|
|
7243
|
-
}, []);
|
|
7244
7290
|
const handleChange = (e) => {
|
|
7245
7291
|
const val = e.target.value;
|
|
7246
7292
|
if (!isControlled) setInternalValue(val);
|
|
@@ -7250,7 +7296,6 @@ var ChatInput = import_react6.default.forwardRef(
|
|
|
7250
7296
|
if (!hasText || disabled) return;
|
|
7251
7297
|
onSubmit?.(value);
|
|
7252
7298
|
if (!isControlled) setInternalValue("");
|
|
7253
|
-
requestAnimationFrame(updateHeight);
|
|
7254
7299
|
};
|
|
7255
7300
|
const handleKeyDown = (e) => {
|
|
7256
7301
|
if (e.key === "Enter" && !e.shiftKey) {
|
|
@@ -7258,14 +7303,12 @@ var ChatInput = import_react6.default.forwardRef(
|
|
|
7258
7303
|
handleSubmit();
|
|
7259
7304
|
}
|
|
7260
7305
|
};
|
|
7261
|
-
|
|
7262
|
-
|
|
7263
|
-
|
|
7264
|
-
return /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("div", { className: clsx_default("lib-xplat-chat-input", disabled && "disabled"), children: [
|
|
7265
|
-
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
7266
|
-
"textarea",
|
|
7306
|
+
return /* @__PURE__ */ (0, import_jsx_runtime308.jsxs)("div", { className: clsx_default("lib-xplat-chat-input", disabled && "disabled"), children: [
|
|
7307
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
7308
|
+
AutoResizeTextArea_default,
|
|
7267
7309
|
{
|
|
7268
|
-
ref
|
|
7310
|
+
ref,
|
|
7311
|
+
bare: true,
|
|
7269
7312
|
className: "chat-input-textarea",
|
|
7270
7313
|
placeholder,
|
|
7271
7314
|
value,
|
|
@@ -7275,10 +7318,10 @@ var ChatInput = import_react6.default.forwardRef(
|
|
|
7275
7318
|
onKeyDown: handleKeyDown
|
|
7276
7319
|
}
|
|
7277
7320
|
),
|
|
7278
|
-
/* @__PURE__ */ (0,
|
|
7321
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
7279
7322
|
IconButton_default,
|
|
7280
7323
|
{
|
|
7281
|
-
icon: /* @__PURE__ */ (0,
|
|
7324
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime308.jsx)(MessageSquareIcon_default, {}),
|
|
7282
7325
|
type: buttonType,
|
|
7283
7326
|
size: "sm",
|
|
7284
7327
|
disabled: !hasText || disabled,
|
|
@@ -7312,7 +7355,7 @@ var import_tokens_core = require("@x-plat/tokens-core");
|
|
|
7312
7355
|
var import_tokens_core2 = require("@x-plat/tokens-core");
|
|
7313
7356
|
|
|
7314
7357
|
// src/components/CheckBox/CheckBox.tsx
|
|
7315
|
-
var
|
|
7358
|
+
var import_jsx_runtime309 = require("react/jsx-runtime");
|
|
7316
7359
|
var CheckBox = (props) => {
|
|
7317
7360
|
const {
|
|
7318
7361
|
checked,
|
|
@@ -7331,8 +7374,8 @@ var CheckBox = (props) => {
|
|
|
7331
7374
|
const checkedClasses = `checked`;
|
|
7332
7375
|
const disabledClasses = "disabled";
|
|
7333
7376
|
const boxClasses = disabled ? disabledClasses : checked ? checkedClasses : uncheckedClasses;
|
|
7334
|
-
return /* @__PURE__ */ (0,
|
|
7335
|
-
/* @__PURE__ */ (0,
|
|
7377
|
+
return /* @__PURE__ */ (0, import_jsx_runtime309.jsxs)("label", { className: clsx_default("lib-xplat-checkbox", size, type, className), children: [
|
|
7378
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsx)(
|
|
7336
7379
|
"input",
|
|
7337
7380
|
{
|
|
7338
7381
|
type: "checkbox",
|
|
@@ -7342,44 +7385,44 @@ var CheckBox = (props) => {
|
|
|
7342
7385
|
...rest
|
|
7343
7386
|
}
|
|
7344
7387
|
),
|
|
7345
|
-
/* @__PURE__ */ (0,
|
|
7346
|
-
label && /* @__PURE__ */ (0,
|
|
7388
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsx)("span", { className: clsx_default("checkbox", boxClasses), children: /* @__PURE__ */ (0, import_jsx_runtime309.jsx)("span", { className: clsx_default("check-icon", { visible: checked }), children: /* @__PURE__ */ (0, import_jsx_runtime309.jsx)(CheckIcon_default, {}) }) }),
|
|
7389
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime309.jsx)("span", { className: "label", children: label })
|
|
7347
7390
|
] });
|
|
7348
7391
|
};
|
|
7349
7392
|
CheckBox.displayName = "CheckBox";
|
|
7350
7393
|
var CheckBox_default = CheckBox;
|
|
7351
7394
|
|
|
7352
7395
|
// src/components/Chip/Chip.tsx
|
|
7353
|
-
var
|
|
7396
|
+
var import_jsx_runtime310 = require("react/jsx-runtime");
|
|
7354
7397
|
var Chip = (props) => {
|
|
7355
7398
|
const {
|
|
7356
7399
|
children,
|
|
7357
7400
|
type = "primary",
|
|
7358
7401
|
size = "md"
|
|
7359
7402
|
} = props;
|
|
7360
|
-
return /* @__PURE__ */ (0,
|
|
7403
|
+
return /* @__PURE__ */ (0, import_jsx_runtime310.jsx)("div", { className: clsx_default("lib-xplat-chip", type, size), children });
|
|
7361
7404
|
};
|
|
7362
7405
|
Chip.displayName = "Chip";
|
|
7363
7406
|
var Chip_default = Chip;
|
|
7364
7407
|
|
|
7365
7408
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
7366
|
-
var
|
|
7409
|
+
var import_react14 = __toESM(require("react"), 1);
|
|
7367
7410
|
|
|
7368
7411
|
// src/components/Input/Input.tsx
|
|
7369
|
-
var
|
|
7412
|
+
var import_react8 = __toESM(require("react"), 1);
|
|
7370
7413
|
|
|
7371
7414
|
// src/components/Input/InputValidations.tsx
|
|
7372
|
-
var
|
|
7415
|
+
var import_jsx_runtime311 = require("react/jsx-runtime");
|
|
7373
7416
|
var InputValidations = (props) => {
|
|
7374
7417
|
const { message, status = "default" } = props;
|
|
7375
|
-
return /* @__PURE__ */ (0,
|
|
7376
|
-
/* @__PURE__ */ (0,
|
|
7377
|
-
status === "default" && /* @__PURE__ */ (0,
|
|
7378
|
-
status === "success" && /* @__PURE__ */ (0,
|
|
7379
|
-
status === "warning" && /* @__PURE__ */ (0,
|
|
7380
|
-
status === "error" && /* @__PURE__ */ (0,
|
|
7418
|
+
return /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)("div", { className: clsx_default("lib-xplat-input-validation", status), children: [
|
|
7419
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsxs)("div", { className: "icon", children: [
|
|
7420
|
+
status === "default" && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(InfoIcon_default, {}),
|
|
7421
|
+
status === "success" && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(SuccessIcon_default, {}),
|
|
7422
|
+
status === "warning" && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(InfoIcon_default, {}),
|
|
7423
|
+
status === "error" && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(ErrorIcon_default, {})
|
|
7381
7424
|
] }),
|
|
7382
|
-
/* @__PURE__ */ (0,
|
|
7425
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: "message", children: message })
|
|
7383
7426
|
] });
|
|
7384
7427
|
};
|
|
7385
7428
|
InputValidations.displayName = "InputValidations";
|
|
@@ -7420,8 +7463,8 @@ var handleTelBackspace = (prevValue, currValue) => {
|
|
|
7420
7463
|
};
|
|
7421
7464
|
|
|
7422
7465
|
// src/components/Input/Input.tsx
|
|
7423
|
-
var
|
|
7424
|
-
var
|
|
7466
|
+
var import_jsx_runtime312 = require("react/jsx-runtime");
|
|
7467
|
+
var import_react9 = require("react");
|
|
7425
7468
|
var formatValue = (type, value) => {
|
|
7426
7469
|
if (value === null || value === void 0) return "";
|
|
7427
7470
|
const strValue = Array.isArray(value) ? String(value[0] ?? "") : String(value);
|
|
@@ -7469,7 +7512,7 @@ var parseValue = (type, value) => {
|
|
|
7469
7512
|
return value;
|
|
7470
7513
|
}
|
|
7471
7514
|
};
|
|
7472
|
-
var Input =
|
|
7515
|
+
var Input = import_react8.default.forwardRef((props, ref) => {
|
|
7473
7516
|
const {
|
|
7474
7517
|
value,
|
|
7475
7518
|
className,
|
|
@@ -7496,13 +7539,13 @@ var Input = import_react7.default.forwardRef((props, ref) => {
|
|
|
7496
7539
|
onChange(event);
|
|
7497
7540
|
}
|
|
7498
7541
|
};
|
|
7499
|
-
return /* @__PURE__ */ (0,
|
|
7500
|
-
/* @__PURE__ */ (0,
|
|
7542
|
+
return /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)("div", { className: clsx_default("lib-xplat-input-wrap", className), children: [
|
|
7543
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(
|
|
7501
7544
|
"div",
|
|
7502
7545
|
{
|
|
7503
7546
|
className: clsx_default("lib-xplat-input", size, disabled ? "disabled" : void 0),
|
|
7504
7547
|
children: [
|
|
7505
|
-
/* @__PURE__ */ (0,
|
|
7548
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
7506
7549
|
"input",
|
|
7507
7550
|
{
|
|
7508
7551
|
...inputProps,
|
|
@@ -7513,11 +7556,11 @@ var Input = import_react7.default.forwardRef((props, ref) => {
|
|
|
7513
7556
|
onChange: handleChange
|
|
7514
7557
|
}
|
|
7515
7558
|
),
|
|
7516
|
-
suffix && /* @__PURE__ */ (0,
|
|
7559
|
+
suffix && /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "suffix", children: suffix })
|
|
7517
7560
|
]
|
|
7518
7561
|
}
|
|
7519
7562
|
),
|
|
7520
|
-
validations && /* @__PURE__ */ (0,
|
|
7563
|
+
validations && /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "lib-xplat-input-validation-wrap", children: validations?.map((validation, idx) => /* @__PURE__ */ (0, import_react9.createElement)(
|
|
7521
7564
|
InputValidations_default,
|
|
7522
7565
|
{
|
|
7523
7566
|
...validation,
|
|
@@ -7530,20 +7573,20 @@ Input.displayName = "Input";
|
|
|
7530
7573
|
var Input_default = Input;
|
|
7531
7574
|
|
|
7532
7575
|
// src/components/Input/PasswordInput/PasswordInput.tsx
|
|
7533
|
-
var
|
|
7534
|
-
var
|
|
7535
|
-
var PasswordInput =
|
|
7576
|
+
var import_react10 = __toESM(require("react"), 1);
|
|
7577
|
+
var import_jsx_runtime313 = require("react/jsx-runtime");
|
|
7578
|
+
var PasswordInput = import_react10.default.forwardRef(
|
|
7536
7579
|
(props, ref) => {
|
|
7537
7580
|
const { reg: _reg, ...inputProps } = props;
|
|
7538
|
-
const [isView, setIsView] =
|
|
7581
|
+
const [isView, setIsView] = import_react10.default.useState(false);
|
|
7539
7582
|
const handleChangeView = () => {
|
|
7540
7583
|
setIsView((prev) => !prev);
|
|
7541
7584
|
};
|
|
7542
|
-
return /* @__PURE__ */ (0,
|
|
7585
|
+
return /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
7543
7586
|
Input_default,
|
|
7544
7587
|
{
|
|
7545
7588
|
...inputProps,
|
|
7546
|
-
suffix: /* @__PURE__ */ (0,
|
|
7589
|
+
suffix: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "wrapper pointer", onClick: handleChangeView, children: isView ? /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(OpenEyeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(CloseEyeIcon_default, {}) }),
|
|
7547
7590
|
type: isView ? "text" : "password",
|
|
7548
7591
|
ref
|
|
7549
7592
|
}
|
|
@@ -7554,17 +7597,17 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
7554
7597
|
var PasswordInput_default = PasswordInput;
|
|
7555
7598
|
|
|
7556
7599
|
// src/components/Modal/Modal.tsx
|
|
7557
|
-
var
|
|
7600
|
+
var import_react12 = __toESM(require("react"), 1);
|
|
7558
7601
|
var import_react_dom2 = require("react-dom");
|
|
7559
7602
|
|
|
7560
7603
|
// src/tokens/hooks/Portal.tsx
|
|
7561
|
-
var
|
|
7604
|
+
var import_react11 = __toESM(require("react"), 1);
|
|
7562
7605
|
var import_react_dom = __toESM(require("react-dom"), 1);
|
|
7563
|
-
var
|
|
7564
|
-
var PortalContainerContext =
|
|
7565
|
-
var PortalProvider = ({ container, children }) => /* @__PURE__ */ (0,
|
|
7606
|
+
var import_jsx_runtime314 = require("react/jsx-runtime");
|
|
7607
|
+
var PortalContainerContext = import_react11.default.createContext(null);
|
|
7608
|
+
var PortalProvider = ({ container, children }) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(PortalContainerContext.Provider, { value: container, children });
|
|
7566
7609
|
var Portal = ({ children }) => {
|
|
7567
|
-
const contextContainer =
|
|
7610
|
+
const contextContainer = import_react11.default.useContext(PortalContainerContext);
|
|
7568
7611
|
if (typeof document === "undefined") return null;
|
|
7569
7612
|
const container = contextContainer ?? document.body;
|
|
7570
7613
|
return import_react_dom.default.createPortal(children, container);
|
|
@@ -7573,14 +7616,14 @@ Portal.displayName = "Portal";
|
|
|
7573
7616
|
var Portal_default = Portal;
|
|
7574
7617
|
|
|
7575
7618
|
// src/components/Modal/Modal.tsx
|
|
7576
|
-
var
|
|
7619
|
+
var import_jsx_runtime315 = require("react/jsx-runtime");
|
|
7577
7620
|
var ANIMATION_DURATION_MS = 200;
|
|
7578
7621
|
var Modal = (props) => {
|
|
7579
7622
|
const { isOpen, onClose, children } = props;
|
|
7580
|
-
const [mounted, setMounted] =
|
|
7581
|
-
const [visible, setVisible] =
|
|
7582
|
-
const boxRef =
|
|
7583
|
-
|
|
7623
|
+
const [mounted, setMounted] = import_react12.default.useState(false);
|
|
7624
|
+
const [visible, setVisible] = import_react12.default.useState(false);
|
|
7625
|
+
const boxRef = import_react12.default.useRef(null);
|
|
7626
|
+
import_react12.default.useEffect(() => {
|
|
7584
7627
|
if (isOpen) {
|
|
7585
7628
|
setMounted(true);
|
|
7586
7629
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7594,12 +7637,12 @@ var Modal = (props) => {
|
|
|
7594
7637
|
if (!mounted) return null;
|
|
7595
7638
|
const stateClass = visible ? "enter" : "exit";
|
|
7596
7639
|
return (0, import_react_dom2.createPortal)(
|
|
7597
|
-
/* @__PURE__ */ (0,
|
|
7640
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
7598
7641
|
"div",
|
|
7599
7642
|
{
|
|
7600
7643
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
7601
7644
|
onClick: onClose,
|
|
7602
|
-
children: /* @__PURE__ */ (0,
|
|
7645
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
7603
7646
|
"div",
|
|
7604
7647
|
{
|
|
7605
7648
|
ref: boxRef,
|
|
@@ -7607,7 +7650,7 @@ var Modal = (props) => {
|
|
|
7607
7650
|
role: "dialog",
|
|
7608
7651
|
"aria-modal": "true",
|
|
7609
7652
|
onClick: (e) => e.stopPropagation(),
|
|
7610
|
-
children: /* @__PURE__ */ (0,
|
|
7653
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(PortalProvider, { container: boxRef.current, children })
|
|
7611
7654
|
}
|
|
7612
7655
|
)
|
|
7613
7656
|
}
|
|
@@ -7619,9 +7662,9 @@ Modal.displayName = "Modal";
|
|
|
7619
7662
|
var Modal_default = Modal;
|
|
7620
7663
|
|
|
7621
7664
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
7622
|
-
var
|
|
7623
|
-
var
|
|
7624
|
-
var DayCell2 =
|
|
7665
|
+
var import_react13 = __toESM(require("react"), 1);
|
|
7666
|
+
var import_jsx_runtime316 = require("react/jsx-runtime");
|
|
7667
|
+
var DayCell2 = import_react13.default.memo(
|
|
7625
7668
|
({
|
|
7626
7669
|
day,
|
|
7627
7670
|
disabled,
|
|
@@ -7631,7 +7674,7 @@ var DayCell2 = import_react12.default.memo(
|
|
|
7631
7674
|
isEnd,
|
|
7632
7675
|
inRange,
|
|
7633
7676
|
onSelect
|
|
7634
|
-
}) => /* @__PURE__ */ (0,
|
|
7677
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
7635
7678
|
"button",
|
|
7636
7679
|
{
|
|
7637
7680
|
type: "button",
|
|
@@ -7673,26 +7716,26 @@ var SingleDatePicker = (props) => {
|
|
|
7673
7716
|
initialYear,
|
|
7674
7717
|
initialMonth
|
|
7675
7718
|
);
|
|
7676
|
-
const [pickerMode, setPickerMode] =
|
|
7677
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
7719
|
+
const [pickerMode, setPickerMode] = import_react13.default.useState("days");
|
|
7720
|
+
const [yearRangeStart, setYearRangeStart] = import_react13.default.useState(
|
|
7678
7721
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
7679
7722
|
);
|
|
7680
|
-
const minTime =
|
|
7723
|
+
const minTime = import_react13.default.useMemo(
|
|
7681
7724
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
7682
7725
|
[minDate]
|
|
7683
7726
|
);
|
|
7684
|
-
const maxTime =
|
|
7727
|
+
const maxTime = import_react13.default.useMemo(
|
|
7685
7728
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
7686
7729
|
[maxDate]
|
|
7687
7730
|
);
|
|
7688
|
-
const highlightSet =
|
|
7731
|
+
const highlightSet = import_react13.default.useMemo(() => {
|
|
7689
7732
|
const set = /* @__PURE__ */ new Set();
|
|
7690
7733
|
for (const h of highlightDates) {
|
|
7691
7734
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
7692
7735
|
}
|
|
7693
7736
|
return set;
|
|
7694
7737
|
}, [highlightDates]);
|
|
7695
|
-
const handleSelect =
|
|
7738
|
+
const handleSelect = import_react13.default.useCallback(
|
|
7696
7739
|
(date) => {
|
|
7697
7740
|
onChange?.(date);
|
|
7698
7741
|
},
|
|
@@ -7729,20 +7772,20 @@ var SingleDatePicker = (props) => {
|
|
|
7729
7772
|
const monthLabels = MONTH_LABELS[locale];
|
|
7730
7773
|
const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
|
|
7731
7774
|
const hasRange = rangeStart != null && rangeEnd != null;
|
|
7732
|
-
return /* @__PURE__ */ (0,
|
|
7775
|
+
return /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)(
|
|
7733
7776
|
"div",
|
|
7734
7777
|
{
|
|
7735
7778
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
7736
7779
|
children: [
|
|
7737
|
-
/* @__PURE__ */ (0,
|
|
7738
|
-
/* @__PURE__ */ (0,
|
|
7739
|
-
/* @__PURE__ */ (0,
|
|
7740
|
-
/* @__PURE__ */ (0,
|
|
7780
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: "datepicker-header", children: [
|
|
7781
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(ChevronLeftIcon_default, {}) }),
|
|
7782
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsx)("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
7783
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsx)("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(ChevronRightIcon_default, {}) })
|
|
7741
7784
|
] }),
|
|
7742
|
-
/* @__PURE__ */ (0,
|
|
7743
|
-
pickerMode === "years" && /* @__PURE__ */ (0,
|
|
7785
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: "datepicker-body", children: [
|
|
7786
|
+
pickerMode === "years" && /* @__PURE__ */ (0, import_jsx_runtime316.jsx)("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
7744
7787
|
const y = yearRangeStart + i;
|
|
7745
|
-
return /* @__PURE__ */ (0,
|
|
7788
|
+
return /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
7746
7789
|
"button",
|
|
7747
7790
|
{
|
|
7748
7791
|
type: "button",
|
|
@@ -7753,7 +7796,7 @@ var SingleDatePicker = (props) => {
|
|
|
7753
7796
|
y
|
|
7754
7797
|
);
|
|
7755
7798
|
}) }),
|
|
7756
|
-
pickerMode === "months" && /* @__PURE__ */ (0,
|
|
7799
|
+
pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime316.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
7757
7800
|
"button",
|
|
7758
7801
|
{
|
|
7759
7802
|
type: "button",
|
|
@@ -7763,8 +7806,8 @@ var SingleDatePicker = (props) => {
|
|
|
7763
7806
|
},
|
|
7764
7807
|
i
|
|
7765
7808
|
)) }),
|
|
7766
|
-
pickerMode === "days" && /* @__PURE__ */ (0,
|
|
7767
|
-
/* @__PURE__ */ (0,
|
|
7809
|
+
pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)(import_jsx_runtime316.Fragment, { children: [
|
|
7810
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
7768
7811
|
"div",
|
|
7769
7812
|
{
|
|
7770
7813
|
className: clsx_default(
|
|
@@ -7776,7 +7819,7 @@ var SingleDatePicker = (props) => {
|
|
|
7776
7819
|
},
|
|
7777
7820
|
label
|
|
7778
7821
|
)) }),
|
|
7779
|
-
/* @__PURE__ */ (0,
|
|
7822
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
7780
7823
|
const t = day.date.getTime();
|
|
7781
7824
|
const disabled = t < minTime || t > maxTime;
|
|
7782
7825
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -7786,7 +7829,7 @@ var SingleDatePicker = (props) => {
|
|
|
7786
7829
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
7787
7830
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
7788
7831
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
7789
|
-
return /* @__PURE__ */ (0,
|
|
7832
|
+
return /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
7790
7833
|
DayCell2,
|
|
7791
7834
|
{
|
|
7792
7835
|
day,
|
|
@@ -7811,7 +7854,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
7811
7854
|
var SingleDatePicker_default = SingleDatePicker;
|
|
7812
7855
|
|
|
7813
7856
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
7814
|
-
var
|
|
7857
|
+
var import_jsx_runtime317 = require("react/jsx-runtime");
|
|
7815
7858
|
var formatDate = (date) => {
|
|
7816
7859
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
7817
7860
|
const y = date.getFullYear();
|
|
@@ -7821,8 +7864,8 @@ var formatDate = (date) => {
|
|
|
7821
7864
|
};
|
|
7822
7865
|
var InputDatePicker = (props) => {
|
|
7823
7866
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
7824
|
-
const [isOpen, setIsOpen] =
|
|
7825
|
-
const [tempDate, setTempDate] =
|
|
7867
|
+
const [isOpen, setIsOpen] = import_react14.default.useState(false);
|
|
7868
|
+
const [tempDate, setTempDate] = import_react14.default.useState(value ?? /* @__PURE__ */ new Date());
|
|
7826
7869
|
const handleOpen = () => {
|
|
7827
7870
|
if (disabled) return;
|
|
7828
7871
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -7838,19 +7881,19 @@ var InputDatePicker = (props) => {
|
|
|
7838
7881
|
const handleClose = () => {
|
|
7839
7882
|
setIsOpen(false);
|
|
7840
7883
|
};
|
|
7841
|
-
return /* @__PURE__ */ (0,
|
|
7842
|
-
/* @__PURE__ */ (0,
|
|
7884
|
+
return /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
|
|
7885
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
7843
7886
|
Input_default,
|
|
7844
7887
|
{
|
|
7845
7888
|
value: formatDate(value),
|
|
7846
7889
|
placeholder,
|
|
7847
|
-
suffix: /* @__PURE__ */ (0,
|
|
7890
|
+
suffix: /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(CalenderIcon_default, {}),
|
|
7848
7891
|
disabled,
|
|
7849
7892
|
readOnly: true
|
|
7850
7893
|
}
|
|
7851
7894
|
) }),
|
|
7852
|
-
/* @__PURE__ */ (0,
|
|
7853
|
-
/* @__PURE__ */ (0,
|
|
7895
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: "lib-xplat-popup-datepicker-card", children: [
|
|
7896
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
7854
7897
|
SingleDatePicker_default,
|
|
7855
7898
|
{
|
|
7856
7899
|
value: tempDate,
|
|
@@ -7860,9 +7903,9 @@ var InputDatePicker = (props) => {
|
|
|
7860
7903
|
locale
|
|
7861
7904
|
}
|
|
7862
7905
|
) }),
|
|
7863
|
-
/* @__PURE__ */ (0,
|
|
7864
|
-
/* @__PURE__ */ (0,
|
|
7865
|
-
/* @__PURE__ */ (0,
|
|
7906
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
7907
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
|
|
7908
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
7866
7909
|
] })
|
|
7867
7910
|
] }) })
|
|
7868
7911
|
] });
|
|
@@ -7871,20 +7914,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
7871
7914
|
var InputDatePicker_default = InputDatePicker;
|
|
7872
7915
|
|
|
7873
7916
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7874
|
-
var
|
|
7917
|
+
var import_react18 = __toESM(require("react"), 1);
|
|
7875
7918
|
|
|
7876
7919
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7877
|
-
var
|
|
7920
|
+
var import_react17 = __toESM(require("react"), 1);
|
|
7878
7921
|
|
|
7879
7922
|
// src/components/Tab/Tab.tsx
|
|
7880
|
-
var
|
|
7923
|
+
var import_react16 = __toESM(require("react"), 1);
|
|
7881
7924
|
|
|
7882
7925
|
// src/components/Tab/TabItem.tsx
|
|
7883
|
-
var
|
|
7884
|
-
var
|
|
7885
|
-
var TabItem =
|
|
7926
|
+
var import_react15 = __toESM(require("react"), 1);
|
|
7927
|
+
var import_jsx_runtime318 = require("react/jsx-runtime");
|
|
7928
|
+
var TabItem = import_react15.default.forwardRef((props, ref) => {
|
|
7886
7929
|
const { isActive: isActive2, title, onClick } = props;
|
|
7887
|
-
return /* @__PURE__ */ (0,
|
|
7930
|
+
return /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
7888
7931
|
"div",
|
|
7889
7932
|
{
|
|
7890
7933
|
ref,
|
|
@@ -7898,25 +7941,25 @@ TabItem.displayName = "TabItem";
|
|
|
7898
7941
|
var TabItem_default = TabItem;
|
|
7899
7942
|
|
|
7900
7943
|
// src/components/Tab/Tab.tsx
|
|
7901
|
-
var
|
|
7944
|
+
var import_jsx_runtime319 = require("react/jsx-runtime");
|
|
7902
7945
|
var Tab = (props) => {
|
|
7903
7946
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
7904
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
7947
|
+
const [underlineStyle, setUnderlineStyle] = import_react16.default.useState({
|
|
7905
7948
|
left: 0,
|
|
7906
7949
|
width: 0
|
|
7907
7950
|
});
|
|
7908
|
-
const itemRefs =
|
|
7951
|
+
const itemRefs = import_react16.default.useRef([]);
|
|
7909
7952
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
7910
7953
|
onChange(tabItem, tabIdx);
|
|
7911
7954
|
};
|
|
7912
|
-
|
|
7955
|
+
import_react16.default.useEffect(() => {
|
|
7913
7956
|
const el = itemRefs.current[activeIndex];
|
|
7914
7957
|
if (el) {
|
|
7915
7958
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
7916
7959
|
}
|
|
7917
7960
|
}, [activeIndex, tabs.length]);
|
|
7918
|
-
return /* @__PURE__ */ (0,
|
|
7919
|
-
tabs.map((tab, idx) => /* @__PURE__ */ (0,
|
|
7961
|
+
return /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
|
|
7962
|
+
tabs.map((tab, idx) => /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
7920
7963
|
TabItem_default,
|
|
7921
7964
|
{
|
|
7922
7965
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -7928,7 +7971,7 @@ var Tab = (props) => {
|
|
|
7928
7971
|
},
|
|
7929
7972
|
`${tab.value}_${idx}`
|
|
7930
7973
|
)),
|
|
7931
|
-
type === "toggle" && /* @__PURE__ */ (0,
|
|
7974
|
+
type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
7932
7975
|
"div",
|
|
7933
7976
|
{
|
|
7934
7977
|
className: "tab-toggle-underline",
|
|
@@ -7944,7 +7987,7 @@ Tab.displayName = "Tab";
|
|
|
7944
7987
|
var Tab_default = Tab;
|
|
7945
7988
|
|
|
7946
7989
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7947
|
-
var
|
|
7990
|
+
var import_jsx_runtime320 = require("react/jsx-runtime");
|
|
7948
7991
|
var RangePicker = (props) => {
|
|
7949
7992
|
const {
|
|
7950
7993
|
startDate,
|
|
@@ -7954,7 +7997,7 @@ var RangePicker = (props) => {
|
|
|
7954
7997
|
maxDate,
|
|
7955
7998
|
locale = "ko"
|
|
7956
7999
|
} = props;
|
|
7957
|
-
const [activeTab, setActiveTab] =
|
|
8000
|
+
const [activeTab, setActiveTab] = import_react17.default.useState("start");
|
|
7958
8001
|
const handleStartChange = (date) => {
|
|
7959
8002
|
if (!date) return;
|
|
7960
8003
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -7967,8 +8010,8 @@ var RangePicker = (props) => {
|
|
|
7967
8010
|
};
|
|
7968
8011
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
7969
8012
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
7970
|
-
return /* @__PURE__ */ (0,
|
|
7971
|
-
/* @__PURE__ */ (0,
|
|
8013
|
+
return /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
|
|
8014
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
7972
8015
|
Tab_default,
|
|
7973
8016
|
{
|
|
7974
8017
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -7981,8 +8024,8 @@ var RangePicker = (props) => {
|
|
|
7981
8024
|
size: "sm"
|
|
7982
8025
|
}
|
|
7983
8026
|
) }),
|
|
7984
|
-
/* @__PURE__ */ (0,
|
|
7985
|
-
/* @__PURE__ */ (0,
|
|
8027
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "datepicker-range-panels", children: [
|
|
8028
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
7986
8029
|
SingleDatePicker_default,
|
|
7987
8030
|
{
|
|
7988
8031
|
value: startDate,
|
|
@@ -7994,7 +8037,7 @@ var RangePicker = (props) => {
|
|
|
7994
8037
|
locale
|
|
7995
8038
|
}
|
|
7996
8039
|
),
|
|
7997
|
-
/* @__PURE__ */ (0,
|
|
8040
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
7998
8041
|
SingleDatePicker_default,
|
|
7999
8042
|
{
|
|
8000
8043
|
value: endDate,
|
|
@@ -8007,7 +8050,7 @@ var RangePicker = (props) => {
|
|
|
8007
8050
|
}
|
|
8008
8051
|
)
|
|
8009
8052
|
] }),
|
|
8010
|
-
/* @__PURE__ */ (0,
|
|
8053
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
8011
8054
|
SingleDatePicker_default,
|
|
8012
8055
|
{
|
|
8013
8056
|
value: startDate,
|
|
@@ -8018,7 +8061,7 @@ var RangePicker = (props) => {
|
|
|
8018
8061
|
rangeEnd: endDate,
|
|
8019
8062
|
locale
|
|
8020
8063
|
}
|
|
8021
|
-
) : /* @__PURE__ */ (0,
|
|
8064
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
8022
8065
|
SingleDatePicker_default,
|
|
8023
8066
|
{
|
|
8024
8067
|
value: endDate,
|
|
@@ -8036,10 +8079,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
8036
8079
|
var RangePicker_default = RangePicker;
|
|
8037
8080
|
|
|
8038
8081
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
8039
|
-
var
|
|
8082
|
+
var import_jsx_runtime321 = require("react/jsx-runtime");
|
|
8040
8083
|
var PopupPicker = (props) => {
|
|
8041
8084
|
const { component, type, locale } = props;
|
|
8042
|
-
const [isOpen, setIsOpen] =
|
|
8085
|
+
const [isOpen, setIsOpen] = import_react18.default.useState(false);
|
|
8043
8086
|
const handleClick = () => setIsOpen(true);
|
|
8044
8087
|
const handleClose = () => setIsOpen(false);
|
|
8045
8088
|
const handleSingleChange = (date) => {
|
|
@@ -8047,11 +8090,11 @@ var PopupPicker = (props) => {
|
|
|
8047
8090
|
props.onChange?.(date);
|
|
8048
8091
|
handleClose();
|
|
8049
8092
|
};
|
|
8050
|
-
return /* @__PURE__ */ (0,
|
|
8051
|
-
|
|
8052
|
-
/* @__PURE__ */ (0,
|
|
8053
|
-
/* @__PURE__ */ (0,
|
|
8054
|
-
type === "single" && /* @__PURE__ */ (0,
|
|
8093
|
+
return /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: "lib-xplat-popup-datepicker", children: [
|
|
8094
|
+
import_react18.default.cloneElement(component, { onClick: handleClick }),
|
|
8095
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
|
|
8096
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: "popup-datepicker-content", children: [
|
|
8097
|
+
type === "single" && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
8055
8098
|
SingleDatePicker_default,
|
|
8056
8099
|
{
|
|
8057
8100
|
value: props.value,
|
|
@@ -8061,7 +8104,7 @@ var PopupPicker = (props) => {
|
|
|
8061
8104
|
locale
|
|
8062
8105
|
}
|
|
8063
8106
|
),
|
|
8064
|
-
type === "range" && /* @__PURE__ */ (0,
|
|
8107
|
+
type === "range" && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
8065
8108
|
RangePicker_default,
|
|
8066
8109
|
{
|
|
8067
8110
|
startDate: props.startDate,
|
|
@@ -8073,8 +8116,8 @@ var PopupPicker = (props) => {
|
|
|
8073
8116
|
}
|
|
8074
8117
|
)
|
|
8075
8118
|
] }),
|
|
8076
|
-
/* @__PURE__ */ (0,
|
|
8077
|
-
/* @__PURE__ */ (0,
|
|
8119
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
8120
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
8078
8121
|
Button_default,
|
|
8079
8122
|
{
|
|
8080
8123
|
type: "secondary",
|
|
@@ -8082,7 +8125,7 @@ var PopupPicker = (props) => {
|
|
|
8082
8125
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
8083
8126
|
}
|
|
8084
8127
|
),
|
|
8085
|
-
/* @__PURE__ */ (0,
|
|
8128
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
8086
8129
|
] })
|
|
8087
8130
|
] }) })
|
|
8088
8131
|
] });
|
|
@@ -8091,10 +8134,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
8091
8134
|
var PopupPicker_default = PopupPicker;
|
|
8092
8135
|
|
|
8093
8136
|
// src/components/Divider/Divider.tsx
|
|
8094
|
-
var
|
|
8137
|
+
var import_jsx_runtime322 = require("react/jsx-runtime");
|
|
8095
8138
|
var Divider = (props) => {
|
|
8096
8139
|
const { orientation = "horizontal" } = props;
|
|
8097
|
-
return /* @__PURE__ */ (0,
|
|
8140
|
+
return /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
|
|
8098
8141
|
"div",
|
|
8099
8142
|
{
|
|
8100
8143
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -8107,15 +8150,15 @@ Divider.displayName = "Divider";
|
|
|
8107
8150
|
var Divider_default = Divider;
|
|
8108
8151
|
|
|
8109
8152
|
// src/components/Drawer/Drawer.tsx
|
|
8110
|
-
var
|
|
8153
|
+
var import_react19 = __toESM(require("react"), 1);
|
|
8111
8154
|
var import_react_dom3 = require("react-dom");
|
|
8112
|
-
var
|
|
8155
|
+
var import_jsx_runtime323 = require("react/jsx-runtime");
|
|
8113
8156
|
var ANIMATION_DURATION_MS2 = 250;
|
|
8114
8157
|
var Drawer = (props) => {
|
|
8115
8158
|
const { isOpen, onClose, placement = "right", size = "md", title, children } = props;
|
|
8116
|
-
const [mounted, setMounted] =
|
|
8117
|
-
const [visible, setVisible] =
|
|
8118
|
-
|
|
8159
|
+
const [mounted, setMounted] = import_react19.default.useState(false);
|
|
8160
|
+
const [visible, setVisible] = import_react19.default.useState(false);
|
|
8161
|
+
import_react19.default.useEffect(() => {
|
|
8119
8162
|
if (isOpen) {
|
|
8120
8163
|
setMounted(true);
|
|
8121
8164
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -8129,12 +8172,12 @@ var Drawer = (props) => {
|
|
|
8129
8172
|
if (!mounted) return null;
|
|
8130
8173
|
const stateClass = visible ? "enter" : "exit";
|
|
8131
8174
|
return (0, import_react_dom3.createPortal)(
|
|
8132
|
-
/* @__PURE__ */ (0,
|
|
8175
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
8133
8176
|
"div",
|
|
8134
8177
|
{
|
|
8135
8178
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
8136
8179
|
onClick: onClose,
|
|
8137
|
-
children: /* @__PURE__ */ (0,
|
|
8180
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)(
|
|
8138
8181
|
"div",
|
|
8139
8182
|
{
|
|
8140
8183
|
className: clsx_default("lib-xplat-drawer", placement, size, stateClass),
|
|
@@ -8142,11 +8185,11 @@ var Drawer = (props) => {
|
|
|
8142
8185
|
"aria-modal": "true",
|
|
8143
8186
|
onClick: (e) => e.stopPropagation(),
|
|
8144
8187
|
children: [
|
|
8145
|
-
title && /* @__PURE__ */ (0,
|
|
8146
|
-
/* @__PURE__ */ (0,
|
|
8147
|
-
/* @__PURE__ */ (0,
|
|
8188
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)("div", { className: "drawer-header", children: [
|
|
8189
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)("span", { className: "drawer-title", children: title }),
|
|
8190
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
8148
8191
|
] }),
|
|
8149
|
-
/* @__PURE__ */ (0,
|
|
8192
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "drawer-body", children })
|
|
8150
8193
|
]
|
|
8151
8194
|
}
|
|
8152
8195
|
)
|
|
@@ -8159,16 +8202,16 @@ Drawer.displayName = "Drawer";
|
|
|
8159
8202
|
var Drawer_default = Drawer;
|
|
8160
8203
|
|
|
8161
8204
|
// src/components/Dropdown/Dropdown.tsx
|
|
8162
|
-
var
|
|
8205
|
+
var import_react22 = __toESM(require("react"), 1);
|
|
8163
8206
|
|
|
8164
8207
|
// src/tokens/hooks/useAutoPosition.ts
|
|
8165
|
-
var
|
|
8208
|
+
var import_react20 = __toESM(require("react"), 1);
|
|
8166
8209
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
8167
|
-
const [position, setPosition] =
|
|
8210
|
+
const [position, setPosition] = import_react20.default.useState({
|
|
8168
8211
|
position: {},
|
|
8169
8212
|
direction: "bottom"
|
|
8170
8213
|
});
|
|
8171
|
-
const calculatePosition =
|
|
8214
|
+
const calculatePosition = import_react20.default.useCallback(() => {
|
|
8172
8215
|
if (!triggerRef.current || !popRef.current) return;
|
|
8173
8216
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
8174
8217
|
const popW = popRef.current.offsetWidth;
|
|
@@ -8195,13 +8238,13 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
8195
8238
|
direction
|
|
8196
8239
|
});
|
|
8197
8240
|
}, [triggerRef, popRef]);
|
|
8198
|
-
|
|
8241
|
+
import_react20.default.useLayoutEffect(() => {
|
|
8199
8242
|
if (!enabled) return;
|
|
8200
8243
|
calculatePosition();
|
|
8201
8244
|
const raf = requestAnimationFrame(calculatePosition);
|
|
8202
8245
|
return () => cancelAnimationFrame(raf);
|
|
8203
8246
|
}, [calculatePosition, enabled]);
|
|
8204
|
-
|
|
8247
|
+
import_react20.default.useEffect(() => {
|
|
8205
8248
|
if (!enabled || !popRef.current) return;
|
|
8206
8249
|
const observer = new ResizeObserver(() => {
|
|
8207
8250
|
calculatePosition();
|
|
@@ -8209,7 +8252,7 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
8209
8252
|
observer.observe(popRef.current);
|
|
8210
8253
|
return () => observer.disconnect();
|
|
8211
8254
|
}, [calculatePosition, enabled, popRef]);
|
|
8212
|
-
|
|
8255
|
+
import_react20.default.useEffect(() => {
|
|
8213
8256
|
if (!enabled) return;
|
|
8214
8257
|
window.addEventListener("resize", calculatePosition);
|
|
8215
8258
|
window.addEventListener("scroll", calculatePosition, true);
|
|
@@ -8223,9 +8266,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
8223
8266
|
var useAutoPosition_default = useAutoPosition;
|
|
8224
8267
|
|
|
8225
8268
|
// src/tokens/hooks/useClickOutside.ts
|
|
8226
|
-
var
|
|
8269
|
+
var import_react21 = __toESM(require("react"), 1);
|
|
8227
8270
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
8228
|
-
|
|
8271
|
+
import_react21.default.useEffect(() => {
|
|
8229
8272
|
if (!enabled) return;
|
|
8230
8273
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
8231
8274
|
const listener = (event) => {
|
|
@@ -8248,17 +8291,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
8248
8291
|
var useClickOutside_default = useClickOutside;
|
|
8249
8292
|
|
|
8250
8293
|
// src/components/Dropdown/Dropdown.tsx
|
|
8251
|
-
var
|
|
8294
|
+
var import_jsx_runtime324 = require("react/jsx-runtime");
|
|
8252
8295
|
var Dropdown = (props) => {
|
|
8253
8296
|
const { items, children } = props;
|
|
8254
|
-
const [isOpen, setIsOpen] =
|
|
8255
|
-
const [mounted, setMounted] =
|
|
8256
|
-
const [visible, setVisible] =
|
|
8257
|
-
const triggerRef =
|
|
8258
|
-
const menuRef =
|
|
8297
|
+
const [isOpen, setIsOpen] = import_react22.default.useState(false);
|
|
8298
|
+
const [mounted, setMounted] = import_react22.default.useState(false);
|
|
8299
|
+
const [visible, setVisible] = import_react22.default.useState(false);
|
|
8300
|
+
const triggerRef = import_react22.default.useRef(null);
|
|
8301
|
+
const menuRef = import_react22.default.useRef(null);
|
|
8259
8302
|
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
8260
8303
|
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
8261
|
-
|
|
8304
|
+
import_react22.default.useEffect(() => {
|
|
8262
8305
|
if (isOpen) {
|
|
8263
8306
|
setMounted(true);
|
|
8264
8307
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -8273,8 +8316,8 @@ var Dropdown = (props) => {
|
|
|
8273
8316
|
item.onClick?.();
|
|
8274
8317
|
setIsOpen(false);
|
|
8275
8318
|
};
|
|
8276
|
-
return /* @__PURE__ */ (0,
|
|
8277
|
-
/* @__PURE__ */ (0,
|
|
8319
|
+
return /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)("div", { className: "lib-xplat-dropdown", children: [
|
|
8320
|
+
/* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
|
|
8278
8321
|
"div",
|
|
8279
8322
|
{
|
|
8280
8323
|
ref: triggerRef,
|
|
@@ -8283,14 +8326,14 @@ var Dropdown = (props) => {
|
|
|
8283
8326
|
children
|
|
8284
8327
|
}
|
|
8285
8328
|
),
|
|
8286
|
-
mounted && /* @__PURE__ */ (0,
|
|
8329
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
|
|
8287
8330
|
"div",
|
|
8288
8331
|
{
|
|
8289
8332
|
ref: menuRef,
|
|
8290
8333
|
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
8291
8334
|
style: { top: position.top, left: position.left },
|
|
8292
8335
|
role: "menu",
|
|
8293
|
-
children: items.map((item) => /* @__PURE__ */ (0,
|
|
8336
|
+
children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
|
|
8294
8337
|
"button",
|
|
8295
8338
|
{
|
|
8296
8339
|
className: clsx_default("dropdown-item", {
|
|
@@ -8312,8 +8355,8 @@ Dropdown.displayName = "Dropdown";
|
|
|
8312
8355
|
var Dropdown_default = Dropdown;
|
|
8313
8356
|
|
|
8314
8357
|
// src/components/Editor/Editor.tsx
|
|
8315
|
-
var
|
|
8316
|
-
var
|
|
8358
|
+
var import_react23 = __toESM(require("react"), 1);
|
|
8359
|
+
var import_jsx_runtime325 = require("react/jsx-runtime");
|
|
8317
8360
|
var DEFAULT_TOOLBAR = [
|
|
8318
8361
|
"bold",
|
|
8319
8362
|
"italic",
|
|
@@ -8420,21 +8463,21 @@ var Editor = (props) => {
|
|
|
8420
8463
|
onImageUpload,
|
|
8421
8464
|
minHeight = 200
|
|
8422
8465
|
} = props;
|
|
8423
|
-
const editorRef =
|
|
8424
|
-
const lastRangeRef =
|
|
8425
|
-
const composingRef =
|
|
8426
|
-
const [isFocused, setIsFocused] =
|
|
8427
|
-
const [isEmpty, setIsEmpty] =
|
|
8428
|
-
const [activeFormats, setActiveFormats] =
|
|
8429
|
-
const [slashOpen, setSlashOpen] =
|
|
8430
|
-
const [slashFilter, setSlashFilter] =
|
|
8431
|
-
const [slashIdx, setSlashIdx] =
|
|
8432
|
-
const [slashPos, setSlashPos] =
|
|
8433
|
-
const slashStartRangeRef =
|
|
8434
|
-
const [linkOpen, setLinkOpen] =
|
|
8435
|
-
const [linkValue, setLinkValue] =
|
|
8436
|
-
const [linkPos, setLinkPos] =
|
|
8437
|
-
|
|
8466
|
+
const editorRef = import_react23.default.useRef(null);
|
|
8467
|
+
const lastRangeRef = import_react23.default.useRef(null);
|
|
8468
|
+
const composingRef = import_react23.default.useRef(false);
|
|
8469
|
+
const [isFocused, setIsFocused] = import_react23.default.useState(false);
|
|
8470
|
+
const [isEmpty, setIsEmpty] = import_react23.default.useState(!value);
|
|
8471
|
+
const [activeFormats, setActiveFormats] = import_react23.default.useState(/* @__PURE__ */ new Set());
|
|
8472
|
+
const [slashOpen, setSlashOpen] = import_react23.default.useState(false);
|
|
8473
|
+
const [slashFilter, setSlashFilter] = import_react23.default.useState("");
|
|
8474
|
+
const [slashIdx, setSlashIdx] = import_react23.default.useState(0);
|
|
8475
|
+
const [slashPos, setSlashPos] = import_react23.default.useState({ top: 0, left: 0 });
|
|
8476
|
+
const slashStartRangeRef = import_react23.default.useRef(null);
|
|
8477
|
+
const [linkOpen, setLinkOpen] = import_react23.default.useState(false);
|
|
8478
|
+
const [linkValue, setLinkValue] = import_react23.default.useState("");
|
|
8479
|
+
const [linkPos, setLinkPos] = import_react23.default.useState({ top: 0, left: 0 });
|
|
8480
|
+
import_react23.default.useEffect(() => {
|
|
8438
8481
|
if (!editorRef.current) return;
|
|
8439
8482
|
if (editorRef.current.innerHTML !== value) {
|
|
8440
8483
|
editorRef.current.innerHTML = sanitizeHtml(value || "");
|
|
@@ -8548,7 +8591,7 @@ var Editor = (props) => {
|
|
|
8548
8591
|
setSlashIdx(0);
|
|
8549
8592
|
slashStartRangeRef.current = null;
|
|
8550
8593
|
};
|
|
8551
|
-
const filteredSlashItems =
|
|
8594
|
+
const filteredSlashItems = import_react23.default.useMemo(() => {
|
|
8552
8595
|
if (!slashFilter) return SLASH_ITEMS;
|
|
8553
8596
|
const f = slashFilter.toLowerCase();
|
|
8554
8597
|
return SLASH_ITEMS.filter((it) => it.label.toLowerCase().includes(f) || it.key.includes(f));
|
|
@@ -8833,8 +8876,8 @@ var Editor = (props) => {
|
|
|
8833
8876
|
break;
|
|
8834
8877
|
}
|
|
8835
8878
|
};
|
|
8836
|
-
return /* @__PURE__ */ (0,
|
|
8837
|
-
!readOnly && /* @__PURE__ */ (0,
|
|
8879
|
+
return /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: clsx_default("lib-xplat-editor", isFocused && "focused", readOnly && "readonly"), children: [
|
|
8880
|
+
!readOnly && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
|
|
8838
8881
|
EditorToolbar,
|
|
8839
8882
|
{
|
|
8840
8883
|
items: toolbar,
|
|
@@ -8842,9 +8885,9 @@ var Editor = (props) => {
|
|
|
8842
8885
|
onAction: onToolbarAction
|
|
8843
8886
|
}
|
|
8844
8887
|
),
|
|
8845
|
-
/* @__PURE__ */ (0,
|
|
8846
|
-
isEmpty && !isFocused && /* @__PURE__ */ (0,
|
|
8847
|
-
/* @__PURE__ */ (0,
|
|
8888
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: "lib-xplat-editor__content", style: { minHeight }, children: [
|
|
8889
|
+
isEmpty && !isFocused && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "lib-xplat-editor__placeholder", children: placeholder }),
|
|
8890
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
|
|
8848
8891
|
"div",
|
|
8849
8892
|
{
|
|
8850
8893
|
ref: editorRef,
|
|
@@ -8863,7 +8906,7 @@ var Editor = (props) => {
|
|
|
8863
8906
|
spellCheck: true
|
|
8864
8907
|
}
|
|
8865
8908
|
),
|
|
8866
|
-
slashOpen && filteredSlashItems.length > 0 && /* @__PURE__ */ (0,
|
|
8909
|
+
slashOpen && filteredSlashItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
|
|
8867
8910
|
SlashMenu,
|
|
8868
8911
|
{
|
|
8869
8912
|
position: slashPos,
|
|
@@ -8873,7 +8916,7 @@ var Editor = (props) => {
|
|
|
8873
8916
|
onClose: closeSlashMenu
|
|
8874
8917
|
}
|
|
8875
8918
|
),
|
|
8876
|
-
linkOpen && /* @__PURE__ */ (0,
|
|
8919
|
+
linkOpen && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
|
|
8877
8920
|
LinkPopover,
|
|
8878
8921
|
{
|
|
8879
8922
|
position: linkPos,
|
|
@@ -8925,7 +8968,7 @@ var isActive = (item, active) => {
|
|
|
8925
8968
|
return active.has(item);
|
|
8926
8969
|
};
|
|
8927
8970
|
var EditorToolbar = ({ items, active, onAction }) => {
|
|
8928
|
-
return /* @__PURE__ */ (0,
|
|
8971
|
+
return /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "lib-xplat-editor__toolbar", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
|
|
8929
8972
|
"button",
|
|
8930
8973
|
{
|
|
8931
8974
|
type: "button",
|
|
@@ -8941,7 +8984,7 @@ var EditorToolbar = ({ items, active, onAction }) => {
|
|
|
8941
8984
|
)) });
|
|
8942
8985
|
};
|
|
8943
8986
|
var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
8944
|
-
|
|
8987
|
+
import_react23.default.useEffect(() => {
|
|
8945
8988
|
const handleClickOutside = (e) => {
|
|
8946
8989
|
const target = e.target;
|
|
8947
8990
|
const menu = document.querySelector(".lib-xplat-editor__slash-menu");
|
|
@@ -8950,12 +8993,12 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
8950
8993
|
window.addEventListener("mousedown", handleClickOutside);
|
|
8951
8994
|
return () => window.removeEventListener("mousedown", handleClickOutside);
|
|
8952
8995
|
}, [onClose]);
|
|
8953
|
-
return /* @__PURE__ */ (0,
|
|
8996
|
+
return /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
|
|
8954
8997
|
"div",
|
|
8955
8998
|
{
|
|
8956
8999
|
className: "lib-xplat-editor__slash-menu",
|
|
8957
9000
|
style: { top: position.top, left: position.left },
|
|
8958
|
-
children: items.map((item, i) => /* @__PURE__ */ (0,
|
|
9001
|
+
children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)(
|
|
8959
9002
|
"button",
|
|
8960
9003
|
{
|
|
8961
9004
|
type: "button",
|
|
@@ -8965,8 +9008,8 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
8965
9008
|
onSelect(item);
|
|
8966
9009
|
},
|
|
8967
9010
|
children: [
|
|
8968
|
-
/* @__PURE__ */ (0,
|
|
8969
|
-
item.hint && /* @__PURE__ */ (0,
|
|
9011
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("span", { className: "label", children: item.label }),
|
|
9012
|
+
item.hint && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("span", { className: "hint", children: item.hint })
|
|
8970
9013
|
]
|
|
8971
9014
|
},
|
|
8972
9015
|
item.key
|
|
@@ -8975,17 +9018,17 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
8975
9018
|
);
|
|
8976
9019
|
};
|
|
8977
9020
|
var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
8978
|
-
const inputRef =
|
|
8979
|
-
|
|
9021
|
+
const inputRef = import_react23.default.useRef(null);
|
|
9022
|
+
import_react23.default.useEffect(() => {
|
|
8980
9023
|
inputRef.current?.focus();
|
|
8981
9024
|
}, []);
|
|
8982
|
-
return /* @__PURE__ */ (0,
|
|
9025
|
+
return /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)(
|
|
8983
9026
|
"div",
|
|
8984
9027
|
{
|
|
8985
9028
|
className: "lib-xplat-editor__link-popover",
|
|
8986
9029
|
style: { top: position.top, left: position.left },
|
|
8987
9030
|
children: [
|
|
8988
|
-
/* @__PURE__ */ (0,
|
|
9031
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
|
|
8989
9032
|
"input",
|
|
8990
9033
|
{
|
|
8991
9034
|
ref: inputRef,
|
|
@@ -9005,11 +9048,11 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
9005
9048
|
}
|
|
9006
9049
|
}
|
|
9007
9050
|
),
|
|
9008
|
-
/* @__PURE__ */ (0,
|
|
9051
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("button", { type: "button", onMouseDown: (e) => {
|
|
9009
9052
|
e.preventDefault();
|
|
9010
9053
|
onConfirm();
|
|
9011
9054
|
}, children: "\uC801\uC6A9" }),
|
|
9012
|
-
/* @__PURE__ */ (0,
|
|
9055
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("button", { type: "button", onMouseDown: (e) => {
|
|
9013
9056
|
e.preventDefault();
|
|
9014
9057
|
onClose();
|
|
9015
9058
|
}, children: "\uCDE8\uC18C" })
|
|
@@ -9019,23 +9062,23 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
9019
9062
|
};
|
|
9020
9063
|
|
|
9021
9064
|
// src/components/EmptyState/EmptyState.tsx
|
|
9022
|
-
var
|
|
9065
|
+
var import_jsx_runtime326 = require("react/jsx-runtime");
|
|
9023
9066
|
var EmptyState = (props) => {
|
|
9024
9067
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
9025
|
-
return /* @__PURE__ */ (0,
|
|
9026
|
-
icon && /* @__PURE__ */ (0,
|
|
9027
|
-
!icon && /* @__PURE__ */ (0,
|
|
9028
|
-
/* @__PURE__ */ (0,
|
|
9029
|
-
description && /* @__PURE__ */ (0,
|
|
9030
|
-
action && /* @__PURE__ */ (0,
|
|
9068
|
+
return /* @__PURE__ */ (0, import_jsx_runtime326.jsxs)("div", { className: "lib-xplat-empty-state", children: [
|
|
9069
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "empty-icon", children: icon }),
|
|
9070
|
+
!icon && /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "empty-icon", children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("path", { d: "M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" }) }) }),
|
|
9071
|
+
/* @__PURE__ */ (0, import_jsx_runtime326.jsx)("p", { className: "empty-title", children: title }),
|
|
9072
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("p", { className: "empty-description", children: description }),
|
|
9073
|
+
action && /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "empty-action", children: action })
|
|
9031
9074
|
] });
|
|
9032
9075
|
};
|
|
9033
9076
|
EmptyState.displayName = "EmptyState";
|
|
9034
9077
|
var EmptyState_default = EmptyState;
|
|
9035
9078
|
|
|
9036
9079
|
// src/components/FileUpload/FileUpload.tsx
|
|
9037
|
-
var
|
|
9038
|
-
var
|
|
9080
|
+
var import_react24 = __toESM(require("react"), 1);
|
|
9081
|
+
var import_jsx_runtime327 = require("react/jsx-runtime");
|
|
9039
9082
|
var FileUpload = (props) => {
|
|
9040
9083
|
const {
|
|
9041
9084
|
accept,
|
|
@@ -9045,8 +9088,8 @@ var FileUpload = (props) => {
|
|
|
9045
9088
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
9046
9089
|
description
|
|
9047
9090
|
} = props;
|
|
9048
|
-
const [isDragOver, setIsDragOver] =
|
|
9049
|
-
const inputRef =
|
|
9091
|
+
const [isDragOver, setIsDragOver] = import_react24.default.useState(false);
|
|
9092
|
+
const inputRef = import_react24.default.useRef(null);
|
|
9050
9093
|
const handleFiles = (fileList) => {
|
|
9051
9094
|
let files = Array.from(fileList);
|
|
9052
9095
|
if (maxSize) {
|
|
@@ -9076,7 +9119,7 @@ var FileUpload = (props) => {
|
|
|
9076
9119
|
handleFiles(e.target.files);
|
|
9077
9120
|
}
|
|
9078
9121
|
};
|
|
9079
|
-
return /* @__PURE__ */ (0,
|
|
9122
|
+
return /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)(
|
|
9080
9123
|
"div",
|
|
9081
9124
|
{
|
|
9082
9125
|
className: clsx_default("lib-xplat-file-upload", { "drag-over": isDragOver }),
|
|
@@ -9085,7 +9128,7 @@ var FileUpload = (props) => {
|
|
|
9085
9128
|
onDragLeave: handleDragLeave,
|
|
9086
9129
|
onClick: () => inputRef.current?.click(),
|
|
9087
9130
|
children: [
|
|
9088
|
-
/* @__PURE__ */ (0,
|
|
9131
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
|
|
9089
9132
|
"input",
|
|
9090
9133
|
{
|
|
9091
9134
|
ref: inputRef,
|
|
@@ -9095,9 +9138,9 @@ var FileUpload = (props) => {
|
|
|
9095
9138
|
onChange: handleChange
|
|
9096
9139
|
}
|
|
9097
9140
|
),
|
|
9098
|
-
/* @__PURE__ */ (0,
|
|
9099
|
-
/* @__PURE__ */ (0,
|
|
9100
|
-
description && /* @__PURE__ */ (0,
|
|
9141
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(UploadIcon_default, {}) }),
|
|
9142
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("p", { className: "upload-label", children: label }),
|
|
9143
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime327.jsx)("p", { className: "upload-description", children: description })
|
|
9101
9144
|
]
|
|
9102
9145
|
}
|
|
9103
9146
|
);
|
|
@@ -9106,10 +9149,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
9106
9149
|
var FileUpload_default = FileUpload;
|
|
9107
9150
|
|
|
9108
9151
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
9109
|
-
var
|
|
9152
|
+
var import_react26 = __toESM(require("react"), 1);
|
|
9110
9153
|
|
|
9111
9154
|
// src/components/HtmlTypeWriter/utils.ts
|
|
9112
|
-
var
|
|
9155
|
+
var import_react25 = __toESM(require("react"), 1);
|
|
9113
9156
|
var voidTags = /* @__PURE__ */ new Set([
|
|
9114
9157
|
"br",
|
|
9115
9158
|
"img",
|
|
@@ -9177,41 +9220,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
9177
9220
|
props[attr.name] = attr.value;
|
|
9178
9221
|
});
|
|
9179
9222
|
if (voidTags.has(tag)) {
|
|
9180
|
-
return
|
|
9223
|
+
return import_react25.default.createElement(tag, props);
|
|
9181
9224
|
}
|
|
9182
9225
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
9183
|
-
return
|
|
9226
|
+
return import_react25.default.createElement(tag, props, ...children);
|
|
9184
9227
|
};
|
|
9185
9228
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
9186
9229
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
9187
9230
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
9188
|
-
return node == null ? null :
|
|
9231
|
+
return node == null ? null : import_react25.default.createElement(import_react25.default.Fragment, { key: idx }, node);
|
|
9189
9232
|
}).filter(Boolean);
|
|
9190
9233
|
return nodes.length === 0 ? null : nodes;
|
|
9191
9234
|
};
|
|
9192
9235
|
|
|
9193
9236
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
9194
|
-
var
|
|
9237
|
+
var import_jsx_runtime328 = require("react/jsx-runtime");
|
|
9195
9238
|
var HtmlTypeWriter = ({
|
|
9196
9239
|
html,
|
|
9197
9240
|
duration = 20,
|
|
9198
9241
|
onDone,
|
|
9199
9242
|
onChange
|
|
9200
9243
|
}) => {
|
|
9201
|
-
const [typedLen, setTypedLen] =
|
|
9202
|
-
const doneCalledRef =
|
|
9203
|
-
const { doc, rangeMap, totalLength } =
|
|
9244
|
+
const [typedLen, setTypedLen] = import_react26.default.useState(0);
|
|
9245
|
+
const doneCalledRef = import_react26.default.useRef(false);
|
|
9246
|
+
const { doc, rangeMap, totalLength } = import_react26.default.useMemo(() => {
|
|
9204
9247
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
9205
9248
|
const decoded = decodeHtmlEntities(html);
|
|
9206
9249
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
9207
9250
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
9208
9251
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
9209
9252
|
}, [html]);
|
|
9210
|
-
|
|
9253
|
+
import_react26.default.useEffect(() => {
|
|
9211
9254
|
setTypedLen(0);
|
|
9212
9255
|
doneCalledRef.current = false;
|
|
9213
9256
|
}, [html]);
|
|
9214
|
-
|
|
9257
|
+
import_react26.default.useEffect(() => {
|
|
9215
9258
|
if (!totalLength) return;
|
|
9216
9259
|
if (typedLen >= totalLength) return;
|
|
9217
9260
|
const timer = window.setInterval(() => {
|
|
@@ -9219,33 +9262,33 @@ var HtmlTypeWriter = ({
|
|
|
9219
9262
|
}, duration);
|
|
9220
9263
|
return () => window.clearInterval(timer);
|
|
9221
9264
|
}, [typedLen, totalLength, duration]);
|
|
9222
|
-
|
|
9265
|
+
import_react26.default.useEffect(() => {
|
|
9223
9266
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
9224
9267
|
onChange?.();
|
|
9225
9268
|
}
|
|
9226
9269
|
}, [typedLen, totalLength, onChange]);
|
|
9227
|
-
|
|
9270
|
+
import_react26.default.useEffect(() => {
|
|
9228
9271
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
9229
9272
|
doneCalledRef.current = true;
|
|
9230
9273
|
onDone?.();
|
|
9231
9274
|
}
|
|
9232
9275
|
}, [typedLen, totalLength, onDone]);
|
|
9233
|
-
const parsed =
|
|
9276
|
+
const parsed = import_react26.default.useMemo(
|
|
9234
9277
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
9235
9278
|
[doc, typedLen, rangeMap]
|
|
9236
9279
|
);
|
|
9237
|
-
return /* @__PURE__ */ (0,
|
|
9280
|
+
return /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
9238
9281
|
};
|
|
9239
9282
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
9240
9283
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
9241
9284
|
|
|
9242
9285
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
9243
|
-
var
|
|
9244
|
-
var
|
|
9286
|
+
var import_react27 = __toESM(require("react"), 1);
|
|
9287
|
+
var import_jsx_runtime329 = require("react/jsx-runtime");
|
|
9245
9288
|
var ImageSelector = (props) => {
|
|
9246
9289
|
const { value, label, onChange } = props;
|
|
9247
|
-
const [previewUrl, setPreviewUrl] =
|
|
9248
|
-
|
|
9290
|
+
const [previewUrl, setPreviewUrl] = import_react27.default.useState();
|
|
9291
|
+
import_react27.default.useEffect(() => {
|
|
9249
9292
|
if (!value) {
|
|
9250
9293
|
setPreviewUrl(void 0);
|
|
9251
9294
|
return;
|
|
@@ -9254,7 +9297,7 @@ var ImageSelector = (props) => {
|
|
|
9254
9297
|
setPreviewUrl(url);
|
|
9255
9298
|
return () => URL.revokeObjectURL(url);
|
|
9256
9299
|
}, [value]);
|
|
9257
|
-
const inputRef =
|
|
9300
|
+
const inputRef = import_react27.default.useRef(null);
|
|
9258
9301
|
const handleFileChange = (e) => {
|
|
9259
9302
|
const selectedFile = e.target.files?.[0];
|
|
9260
9303
|
if (selectedFile) {
|
|
@@ -9267,8 +9310,8 @@ var ImageSelector = (props) => {
|
|
|
9267
9310
|
const handleOpenFileDialog = () => {
|
|
9268
9311
|
inputRef.current?.click();
|
|
9269
9312
|
};
|
|
9270
|
-
return /* @__PURE__ */ (0,
|
|
9271
|
-
/* @__PURE__ */ (0,
|
|
9313
|
+
return /* @__PURE__ */ (0, import_jsx_runtime329.jsxs)("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
9314
|
+
/* @__PURE__ */ (0, import_jsx_runtime329.jsx)(
|
|
9272
9315
|
"input",
|
|
9273
9316
|
{
|
|
9274
9317
|
type: "file",
|
|
@@ -9278,13 +9321,13 @@ var ImageSelector = (props) => {
|
|
|
9278
9321
|
ref: inputRef
|
|
9279
9322
|
}
|
|
9280
9323
|
),
|
|
9281
|
-
value && /* @__PURE__ */ (0,
|
|
9282
|
-
/* @__PURE__ */ (0,
|
|
9283
|
-
/* @__PURE__ */ (0,
|
|
9324
|
+
value && /* @__PURE__ */ (0, import_jsx_runtime329.jsxs)("div", { className: "action-bar", children: [
|
|
9325
|
+
/* @__PURE__ */ (0, import_jsx_runtime329.jsx)("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(UploadIcon_default, {}) }),
|
|
9326
|
+
/* @__PURE__ */ (0, import_jsx_runtime329.jsx)("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(DeleteIcon_default, {}) })
|
|
9284
9327
|
] }),
|
|
9285
|
-
/* @__PURE__ */ (0,
|
|
9286
|
-
/* @__PURE__ */ (0,
|
|
9287
|
-
/* @__PURE__ */ (0,
|
|
9328
|
+
/* @__PURE__ */ (0, import_jsx_runtime329.jsx)("div", { className: "content", children: previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime329.jsx)("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ (0, import_jsx_runtime329.jsxs)("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
|
|
9329
|
+
/* @__PURE__ */ (0, import_jsx_runtime329.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(ImageIcon_default, {}) }),
|
|
9330
|
+
/* @__PURE__ */ (0, import_jsx_runtime329.jsx)("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
9288
9331
|
] }) })
|
|
9289
9332
|
] });
|
|
9290
9333
|
};
|
|
@@ -9292,7 +9335,7 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
9292
9335
|
var ImageSelector_default = ImageSelector;
|
|
9293
9336
|
|
|
9294
9337
|
// src/components/Pagination/Pagination.tsx
|
|
9295
|
-
var
|
|
9338
|
+
var import_jsx_runtime330 = require("react/jsx-runtime");
|
|
9296
9339
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
9297
9340
|
const totalNumbers = siblingCount * 2 + 5;
|
|
9298
9341
|
if (totalPages <= totalNumbers) {
|
|
@@ -9335,19 +9378,19 @@ var Pagination = (props) => {
|
|
|
9335
9378
|
onChange?.(page);
|
|
9336
9379
|
}
|
|
9337
9380
|
};
|
|
9338
|
-
return /* @__PURE__ */ (0,
|
|
9339
|
-
/* @__PURE__ */ (0,
|
|
9381
|
+
return /* @__PURE__ */ (0, import_jsx_runtime330.jsxs)("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
9382
|
+
/* @__PURE__ */ (0, import_jsx_runtime330.jsx)(
|
|
9340
9383
|
"button",
|
|
9341
9384
|
{
|
|
9342
9385
|
className: "page-btn prev",
|
|
9343
9386
|
disabled: current <= 1,
|
|
9344
9387
|
onClick: () => handleClick(current - 1),
|
|
9345
9388
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
9346
|
-
children: /* @__PURE__ */ (0,
|
|
9389
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(ChevronLeftIcon_default, {})
|
|
9347
9390
|
}
|
|
9348
9391
|
),
|
|
9349
9392
|
pages.map(
|
|
9350
|
-
(page, i) => page === "..." ? /* @__PURE__ */ (0,
|
|
9393
|
+
(page, i) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime330.jsx)("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(
|
|
9351
9394
|
"button",
|
|
9352
9395
|
{
|
|
9353
9396
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -9358,14 +9401,14 @@ var Pagination = (props) => {
|
|
|
9358
9401
|
page
|
|
9359
9402
|
)
|
|
9360
9403
|
),
|
|
9361
|
-
/* @__PURE__ */ (0,
|
|
9404
|
+
/* @__PURE__ */ (0, import_jsx_runtime330.jsx)(
|
|
9362
9405
|
"button",
|
|
9363
9406
|
{
|
|
9364
9407
|
className: "page-btn next",
|
|
9365
9408
|
disabled: current >= totalPages,
|
|
9366
9409
|
onClick: () => handleClick(current + 1),
|
|
9367
9410
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
9368
|
-
children: /* @__PURE__ */ (0,
|
|
9411
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(ChevronRightIcon_default, {})
|
|
9369
9412
|
}
|
|
9370
9413
|
)
|
|
9371
9414
|
] });
|
|
@@ -9374,17 +9417,17 @@ Pagination.displayName = "Pagination";
|
|
|
9374
9417
|
var Pagination_default = Pagination;
|
|
9375
9418
|
|
|
9376
9419
|
// src/components/PopOver/PopOver.tsx
|
|
9377
|
-
var
|
|
9378
|
-
var
|
|
9420
|
+
var import_react28 = __toESM(require("react"), 1);
|
|
9421
|
+
var import_jsx_runtime331 = require("react/jsx-runtime");
|
|
9379
9422
|
var PopOver = (props) => {
|
|
9380
9423
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
9381
|
-
const popRef =
|
|
9382
|
-
const triggerRef =
|
|
9383
|
-
const [localOpen, setLocalOpen] =
|
|
9384
|
-
const [eventTrigger, setEventTrigger] =
|
|
9424
|
+
const popRef = import_react28.default.useRef(null);
|
|
9425
|
+
const triggerRef = import_react28.default.useRef(null);
|
|
9426
|
+
const [localOpen, setLocalOpen] = import_react28.default.useState(false);
|
|
9427
|
+
const [eventTrigger, setEventTrigger] = import_react28.default.useState(false);
|
|
9385
9428
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
9386
9429
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
9387
|
-
|
|
9430
|
+
import_react28.default.useEffect(() => {
|
|
9388
9431
|
if (isOpen) {
|
|
9389
9432
|
setLocalOpen(isOpen);
|
|
9390
9433
|
setTimeout(() => {
|
|
@@ -9397,7 +9440,7 @@ var PopOver = (props) => {
|
|
|
9397
9440
|
}, 200);
|
|
9398
9441
|
}
|
|
9399
9442
|
}, [isOpen]);
|
|
9400
|
-
return /* @__PURE__ */ (0,
|
|
9443
|
+
return /* @__PURE__ */ (0, import_jsx_runtime331.jsxs)(
|
|
9401
9444
|
"div",
|
|
9402
9445
|
{
|
|
9403
9446
|
className: "lib-xplat-pop-over",
|
|
@@ -9407,7 +9450,7 @@ var PopOver = (props) => {
|
|
|
9407
9450
|
},
|
|
9408
9451
|
children: [
|
|
9409
9452
|
children,
|
|
9410
|
-
localOpen && /* @__PURE__ */ (0,
|
|
9453
|
+
localOpen && /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
|
|
9411
9454
|
"div",
|
|
9412
9455
|
{
|
|
9413
9456
|
className: clsx_default(
|
|
@@ -9430,7 +9473,7 @@ PopOver.displayName = "PopOver";
|
|
|
9430
9473
|
var PopOver_default = PopOver;
|
|
9431
9474
|
|
|
9432
9475
|
// src/components/Progress/Progress.tsx
|
|
9433
|
-
var
|
|
9476
|
+
var import_jsx_runtime332 = require("react/jsx-runtime");
|
|
9434
9477
|
var Progress = (props) => {
|
|
9435
9478
|
const {
|
|
9436
9479
|
value,
|
|
@@ -9440,8 +9483,8 @@ var Progress = (props) => {
|
|
|
9440
9483
|
showLabel = false
|
|
9441
9484
|
} = props;
|
|
9442
9485
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
9443
|
-
return /* @__PURE__ */ (0,
|
|
9444
|
-
/* @__PURE__ */ (0,
|
|
9486
|
+
return /* @__PURE__ */ (0, import_jsx_runtime332.jsxs)("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
9487
|
+
/* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
|
|
9445
9488
|
"div",
|
|
9446
9489
|
{
|
|
9447
9490
|
className: "track",
|
|
@@ -9449,7 +9492,7 @@ var Progress = (props) => {
|
|
|
9449
9492
|
"aria-valuenow": value,
|
|
9450
9493
|
"aria-valuemin": 0,
|
|
9451
9494
|
"aria-valuemax": max,
|
|
9452
|
-
children: /* @__PURE__ */ (0,
|
|
9495
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
|
|
9453
9496
|
"div",
|
|
9454
9497
|
{
|
|
9455
9498
|
className: "bar",
|
|
@@ -9458,7 +9501,7 @@ var Progress = (props) => {
|
|
|
9458
9501
|
)
|
|
9459
9502
|
}
|
|
9460
9503
|
),
|
|
9461
|
-
showLabel && /* @__PURE__ */ (0,
|
|
9504
|
+
showLabel && /* @__PURE__ */ (0, import_jsx_runtime332.jsxs)("span", { className: "label", children: [
|
|
9462
9505
|
Math.round(percentage),
|
|
9463
9506
|
"%"
|
|
9464
9507
|
] })
|
|
@@ -9468,17 +9511,17 @@ Progress.displayName = "Progress";
|
|
|
9468
9511
|
var Progress_default = Progress;
|
|
9469
9512
|
|
|
9470
9513
|
// src/components/Radio/RadioGroupContext.tsx
|
|
9471
|
-
var
|
|
9472
|
-
var RadioGroupContext =
|
|
9514
|
+
var import_react29 = __toESM(require("react"), 1);
|
|
9515
|
+
var RadioGroupContext = import_react29.default.createContext(
|
|
9473
9516
|
null
|
|
9474
9517
|
);
|
|
9475
9518
|
var useRadioGroupContext = () => {
|
|
9476
|
-
return
|
|
9519
|
+
return import_react29.default.useContext(RadioGroupContext);
|
|
9477
9520
|
};
|
|
9478
9521
|
var RadioGroupContext_default = RadioGroupContext;
|
|
9479
9522
|
|
|
9480
9523
|
// src/components/Radio/Radio.tsx
|
|
9481
|
-
var
|
|
9524
|
+
var import_jsx_runtime333 = require("react/jsx-runtime");
|
|
9482
9525
|
var Radio = (props) => {
|
|
9483
9526
|
const {
|
|
9484
9527
|
label,
|
|
@@ -9497,7 +9540,7 @@ var Radio = (props) => {
|
|
|
9497
9540
|
value,
|
|
9498
9541
|
onChange: rest.onChange
|
|
9499
9542
|
};
|
|
9500
|
-
return /* @__PURE__ */ (0,
|
|
9543
|
+
return /* @__PURE__ */ (0, import_jsx_runtime333.jsxs)(
|
|
9501
9544
|
"label",
|
|
9502
9545
|
{
|
|
9503
9546
|
className: clsx_default(
|
|
@@ -9508,18 +9551,18 @@ var Radio = (props) => {
|
|
|
9508
9551
|
className
|
|
9509
9552
|
),
|
|
9510
9553
|
children: [
|
|
9511
|
-
/* @__PURE__ */ (0,
|
|
9512
|
-
/* @__PURE__ */ (0,
|
|
9554
|
+
/* @__PURE__ */ (0, import_jsx_runtime333.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
9555
|
+
/* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
|
|
9513
9556
|
"div",
|
|
9514
9557
|
{
|
|
9515
9558
|
className: clsx_default(
|
|
9516
9559
|
"circle",
|
|
9517
9560
|
localChecked ? "checked" : void 0
|
|
9518
9561
|
),
|
|
9519
|
-
children: localChecked && /* @__PURE__ */ (0,
|
|
9562
|
+
children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime333.jsx)("div", { className: "inner-circle" })
|
|
9520
9563
|
}
|
|
9521
9564
|
),
|
|
9522
|
-
label && /* @__PURE__ */ (0,
|
|
9565
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime333.jsx)("span", { children: label })
|
|
9523
9566
|
]
|
|
9524
9567
|
}
|
|
9525
9568
|
);
|
|
@@ -9528,28 +9571,28 @@ Radio.displayName = "Radio";
|
|
|
9528
9571
|
var Radio_default = Radio;
|
|
9529
9572
|
|
|
9530
9573
|
// src/components/Radio/RadioGroup.tsx
|
|
9531
|
-
var
|
|
9574
|
+
var import_jsx_runtime334 = require("react/jsx-runtime");
|
|
9532
9575
|
var RadioGroup = (props) => {
|
|
9533
9576
|
const { children, ...rest } = props;
|
|
9534
|
-
return /* @__PURE__ */ (0,
|
|
9577
|
+
return /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(import_jsx_runtime334.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
9535
9578
|
};
|
|
9536
9579
|
RadioGroup.displayName = "RadioGroup";
|
|
9537
9580
|
var RadioGroup_default = RadioGroup;
|
|
9538
9581
|
|
|
9539
9582
|
// src/components/Select/Select.tsx
|
|
9540
|
-
var
|
|
9583
|
+
var import_react32 = __toESM(require("react"), 1);
|
|
9541
9584
|
|
|
9542
9585
|
// src/components/Select/context.ts
|
|
9543
|
-
var
|
|
9544
|
-
var SelectContext =
|
|
9586
|
+
var import_react30 = __toESM(require("react"), 1);
|
|
9587
|
+
var SelectContext = import_react30.default.createContext(null);
|
|
9545
9588
|
var context_default = SelectContext;
|
|
9546
9589
|
|
|
9547
9590
|
// src/components/Select/SelectItem.tsx
|
|
9548
|
-
var
|
|
9549
|
-
var
|
|
9591
|
+
var import_react31 = __toESM(require("react"), 1);
|
|
9592
|
+
var import_jsx_runtime335 = require("react/jsx-runtime");
|
|
9550
9593
|
var SelectItem = (props) => {
|
|
9551
9594
|
const { children, value, onClick, disabled = false } = props;
|
|
9552
|
-
const ctx =
|
|
9595
|
+
const ctx = import_react31.default.useContext(context_default);
|
|
9553
9596
|
const handleClick = (e) => {
|
|
9554
9597
|
e.preventDefault();
|
|
9555
9598
|
e.stopPropagation();
|
|
@@ -9559,7 +9602,7 @@ var SelectItem = (props) => {
|
|
|
9559
9602
|
onClick?.();
|
|
9560
9603
|
};
|
|
9561
9604
|
const isSelected = value !== void 0 ? ctx?.selectedValue === value : ctx?.selectedLabel === children;
|
|
9562
|
-
return /* @__PURE__ */ (0,
|
|
9605
|
+
return /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
|
|
9563
9606
|
"div",
|
|
9564
9607
|
{
|
|
9565
9608
|
className: clsx_default("select-item", disabled && "disabled", isSelected && "is-selected"),
|
|
@@ -9580,7 +9623,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
9580
9623
|
var SelectItem_default = SelectItem;
|
|
9581
9624
|
|
|
9582
9625
|
// src/components/Select/Select.tsx
|
|
9583
|
-
var
|
|
9626
|
+
var import_jsx_runtime336 = require("react/jsx-runtime");
|
|
9584
9627
|
var ANIMATION_DURATION_MS3 = 200;
|
|
9585
9628
|
var SelectRoot = (props) => {
|
|
9586
9629
|
const {
|
|
@@ -9592,28 +9635,28 @@ var SelectRoot = (props) => {
|
|
|
9592
9635
|
error = false,
|
|
9593
9636
|
size = "md"
|
|
9594
9637
|
} = props;
|
|
9595
|
-
const itemChildren =
|
|
9596
|
-
(child) =>
|
|
9638
|
+
const itemChildren = import_react32.default.Children.toArray(children).filter(
|
|
9639
|
+
(child) => import_react32.default.isValidElement(child) && child.type === SelectItem_default
|
|
9597
9640
|
);
|
|
9598
9641
|
const isControlled = valueProp !== void 0;
|
|
9599
|
-
const [isOpen, setOpen] =
|
|
9600
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
9601
|
-
const [uncontrolledValue, setUncontrolledValue] =
|
|
9602
|
-
const controlledLabel =
|
|
9642
|
+
const [isOpen, setOpen] = import_react32.default.useState(false);
|
|
9643
|
+
const [uncontrolledLabel, setUncontrolledLabel] = import_react32.default.useState(null);
|
|
9644
|
+
const [uncontrolledValue, setUncontrolledValue] = import_react32.default.useState(void 0);
|
|
9645
|
+
const controlledLabel = import_react32.default.useMemo(() => {
|
|
9603
9646
|
if (!isControlled) return null;
|
|
9604
9647
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
9605
9648
|
return match ? match.props.children : null;
|
|
9606
9649
|
}, [isControlled, valueProp, itemChildren]);
|
|
9607
9650
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
9608
9651
|
const selectedValue = isControlled ? valueProp : uncontrolledValue;
|
|
9609
|
-
const triggerRef =
|
|
9610
|
-
const contentRef =
|
|
9611
|
-
const [mounted, setMounted] =
|
|
9612
|
-
const [visible, setVisible] =
|
|
9613
|
-
|
|
9652
|
+
const triggerRef = import_react32.default.useRef(null);
|
|
9653
|
+
const contentRef = import_react32.default.useRef(null);
|
|
9654
|
+
const [mounted, setMounted] = import_react32.default.useState(false);
|
|
9655
|
+
const [visible, setVisible] = import_react32.default.useState(false);
|
|
9656
|
+
import_react32.default.useEffect(() => {
|
|
9614
9657
|
if (disabled && isOpen) setOpen(false);
|
|
9615
9658
|
}, [disabled, isOpen]);
|
|
9616
|
-
|
|
9659
|
+
import_react32.default.useEffect(() => {
|
|
9617
9660
|
if (isOpen) {
|
|
9618
9661
|
setMounted(true);
|
|
9619
9662
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -9623,12 +9666,12 @@ var SelectRoot = (props) => {
|
|
|
9623
9666
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
9624
9667
|
return () => clearTimeout(t);
|
|
9625
9668
|
}, [isOpen]);
|
|
9626
|
-
const open =
|
|
9627
|
-
const close =
|
|
9628
|
-
const toggle =
|
|
9669
|
+
const open = import_react32.default.useCallback(() => setOpen(true), []);
|
|
9670
|
+
const close = import_react32.default.useCallback(() => setOpen(false), []);
|
|
9671
|
+
const toggle = import_react32.default.useCallback(() => setOpen((prev) => !prev), []);
|
|
9629
9672
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
9630
9673
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
9631
|
-
const setSelected =
|
|
9674
|
+
const setSelected = import_react32.default.useCallback(
|
|
9632
9675
|
(label, itemValue) => {
|
|
9633
9676
|
if (!isControlled) {
|
|
9634
9677
|
setUncontrolledLabel(label);
|
|
@@ -9638,7 +9681,7 @@ var SelectRoot = (props) => {
|
|
|
9638
9681
|
},
|
|
9639
9682
|
[isControlled, onChange]
|
|
9640
9683
|
);
|
|
9641
|
-
const ctxValue =
|
|
9684
|
+
const ctxValue = import_react32.default.useMemo(
|
|
9642
9685
|
() => ({
|
|
9643
9686
|
isOpen,
|
|
9644
9687
|
mounted,
|
|
@@ -9660,7 +9703,7 @@ var SelectRoot = (props) => {
|
|
|
9660
9703
|
if (disabled) return;
|
|
9661
9704
|
toggle();
|
|
9662
9705
|
};
|
|
9663
|
-
return /* @__PURE__ */ (0,
|
|
9706
|
+
return /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime336.jsxs)(
|
|
9664
9707
|
"div",
|
|
9665
9708
|
{
|
|
9666
9709
|
className: clsx_default(
|
|
@@ -9671,7 +9714,7 @@ var SelectRoot = (props) => {
|
|
|
9671
9714
|
mounted && "is-open"
|
|
9672
9715
|
),
|
|
9673
9716
|
children: [
|
|
9674
|
-
/* @__PURE__ */ (0,
|
|
9717
|
+
/* @__PURE__ */ (0, import_jsx_runtime336.jsxs)(
|
|
9675
9718
|
"div",
|
|
9676
9719
|
{
|
|
9677
9720
|
ref: triggerRef,
|
|
@@ -9695,7 +9738,7 @@ var SelectRoot = (props) => {
|
|
|
9695
9738
|
}
|
|
9696
9739
|
},
|
|
9697
9740
|
children: [
|
|
9698
|
-
/* @__PURE__ */ (0,
|
|
9741
|
+
/* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
9699
9742
|
"span",
|
|
9700
9743
|
{
|
|
9701
9744
|
className: clsx_default(
|
|
@@ -9705,25 +9748,25 @@ var SelectRoot = (props) => {
|
|
|
9705
9748
|
children: selectedLabel ?? placeholder
|
|
9706
9749
|
}
|
|
9707
9750
|
),
|
|
9708
|
-
/* @__PURE__ */ (0,
|
|
9751
|
+
/* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
9709
9752
|
"span",
|
|
9710
9753
|
{
|
|
9711
9754
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
9712
9755
|
"aria-hidden": true,
|
|
9713
|
-
children: /* @__PURE__ */ (0,
|
|
9756
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(ChevronDownIcon_default, {})
|
|
9714
9757
|
}
|
|
9715
9758
|
)
|
|
9716
9759
|
]
|
|
9717
9760
|
}
|
|
9718
9761
|
),
|
|
9719
|
-
mounted && /* @__PURE__ */ (0,
|
|
9762
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
9720
9763
|
"div",
|
|
9721
9764
|
{
|
|
9722
9765
|
className: clsx_default("lib-xplat-select-content", size, position.direction, stateClass),
|
|
9723
9766
|
ref: contentRef,
|
|
9724
9767
|
style: { ...position.position, width: triggerRef.current?.offsetWidth },
|
|
9725
9768
|
role: "listbox",
|
|
9726
|
-
children: /* @__PURE__ */ (0,
|
|
9769
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
9727
9770
|
}
|
|
9728
9771
|
) })
|
|
9729
9772
|
]
|
|
@@ -9737,7 +9780,7 @@ var Select = Object.assign(SelectRoot, {
|
|
|
9737
9780
|
var Select_default = Select;
|
|
9738
9781
|
|
|
9739
9782
|
// src/components/Skeleton/Skeleton.tsx
|
|
9740
|
-
var
|
|
9783
|
+
var import_jsx_runtime337 = require("react/jsx-runtime");
|
|
9741
9784
|
var SIZE_MAP = {
|
|
9742
9785
|
xs: "var(--spacing-size-1)",
|
|
9743
9786
|
sm: "var(--spacing-size-2)",
|
|
@@ -9753,7 +9796,7 @@ var Skeleton = (props) => {
|
|
|
9753
9796
|
...width != null && { width: SIZE_MAP[width] },
|
|
9754
9797
|
...height != null && { height: SIZE_MAP[height] }
|
|
9755
9798
|
};
|
|
9756
|
-
return /* @__PURE__ */ (0,
|
|
9799
|
+
return /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
|
|
9757
9800
|
"div",
|
|
9758
9801
|
{
|
|
9759
9802
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -9766,20 +9809,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
9766
9809
|
var Skeleton_default = Skeleton;
|
|
9767
9810
|
|
|
9768
9811
|
// src/components/Spinner/Spinner.tsx
|
|
9769
|
-
var
|
|
9812
|
+
var import_jsx_runtime338 = require("react/jsx-runtime");
|
|
9770
9813
|
var Spinner = (props) => {
|
|
9771
9814
|
const {
|
|
9772
9815
|
size = "md",
|
|
9773
9816
|
type = "brand"
|
|
9774
9817
|
} = props;
|
|
9775
|
-
return /* @__PURE__ */ (0,
|
|
9818
|
+
return /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
9776
9819
|
"div",
|
|
9777
9820
|
{
|
|
9778
9821
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
9779
9822
|
role: "status",
|
|
9780
9823
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
9781
|
-
children: /* @__PURE__ */ (0,
|
|
9782
|
-
/* @__PURE__ */ (0,
|
|
9824
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime338.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
9825
|
+
/* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
9783
9826
|
"circle",
|
|
9784
9827
|
{
|
|
9785
9828
|
className: "track",
|
|
@@ -9789,7 +9832,7 @@ var Spinner = (props) => {
|
|
|
9789
9832
|
strokeWidth: "3"
|
|
9790
9833
|
}
|
|
9791
9834
|
),
|
|
9792
|
-
/* @__PURE__ */ (0,
|
|
9835
|
+
/* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
9793
9836
|
"circle",
|
|
9794
9837
|
{
|
|
9795
9838
|
className: "indicator",
|
|
@@ -9808,20 +9851,20 @@ Spinner.displayName = "Spinner";
|
|
|
9808
9851
|
var Spinner_default = Spinner;
|
|
9809
9852
|
|
|
9810
9853
|
// src/components/Steps/Steps.tsx
|
|
9811
|
-
var
|
|
9854
|
+
var import_jsx_runtime339 = require("react/jsx-runtime");
|
|
9812
9855
|
var Steps = (props) => {
|
|
9813
9856
|
const {
|
|
9814
9857
|
items,
|
|
9815
9858
|
current,
|
|
9816
9859
|
type = "brand"
|
|
9817
9860
|
} = props;
|
|
9818
|
-
return /* @__PURE__ */ (0,
|
|
9861
|
+
return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
9819
9862
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
9820
|
-
return /* @__PURE__ */ (0,
|
|
9821
|
-
/* @__PURE__ */ (0,
|
|
9822
|
-
/* @__PURE__ */ (0,
|
|
9823
|
-
/* @__PURE__ */ (0,
|
|
9824
|
-
item.description && /* @__PURE__ */ (0,
|
|
9863
|
+
return /* @__PURE__ */ (0, import_jsx_runtime339.jsxs)("div", { className: clsx_default("step-item", status), children: [
|
|
9864
|
+
/* @__PURE__ */ (0, import_jsx_runtime339.jsx)("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ (0, import_jsx_runtime339.jsx)(CheckIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime339.jsx)("span", { children: index + 1 }) }),
|
|
9865
|
+
/* @__PURE__ */ (0, import_jsx_runtime339.jsxs)("div", { className: "step-content", children: [
|
|
9866
|
+
/* @__PURE__ */ (0, import_jsx_runtime339.jsx)("span", { className: "step-title", children: item.title }),
|
|
9867
|
+
item.description && /* @__PURE__ */ (0, import_jsx_runtime339.jsx)("span", { className: "step-description", children: item.description })
|
|
9825
9868
|
] })
|
|
9826
9869
|
] }, index);
|
|
9827
9870
|
}) });
|
|
@@ -9830,8 +9873,8 @@ Steps.displayName = "Steps";
|
|
|
9830
9873
|
var Steps_default = Steps;
|
|
9831
9874
|
|
|
9832
9875
|
// src/components/Swiper/Swiper.tsx
|
|
9833
|
-
var
|
|
9834
|
-
var
|
|
9876
|
+
var import_react33 = __toESM(require("react"), 1);
|
|
9877
|
+
var import_jsx_runtime340 = require("react/jsx-runtime");
|
|
9835
9878
|
var Swiper = (props) => {
|
|
9836
9879
|
const {
|
|
9837
9880
|
auto = false,
|
|
@@ -9855,26 +9898,26 @@ var Swiper = (props) => {
|
|
|
9855
9898
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
9856
9899
|
const useLoop = loop && canSlide;
|
|
9857
9900
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
9858
|
-
const extendedItems =
|
|
9901
|
+
const extendedItems = import_react33.default.useMemo(() => {
|
|
9859
9902
|
if (!useLoop) return items;
|
|
9860
9903
|
return [...items, ...items, ...items];
|
|
9861
9904
|
}, [items, useLoop]);
|
|
9862
9905
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
9863
|
-
const [innerIndex, setInnerIndex] =
|
|
9906
|
+
const [innerIndex, setInnerIndex] = import_react33.default.useState(
|
|
9864
9907
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
9865
9908
|
);
|
|
9866
|
-
const [isDragging, setIsDragging] =
|
|
9867
|
-
const [dragOffset, setDragOffset] =
|
|
9868
|
-
const [animated, setAnimated] =
|
|
9869
|
-
const [containerWidth, setContainerWidth] =
|
|
9870
|
-
const containerRef =
|
|
9871
|
-
const startXRef =
|
|
9872
|
-
const startTimeRef =
|
|
9873
|
-
const autoplayTimerRef =
|
|
9874
|
-
const resumeTimeoutRef =
|
|
9875
|
-
const [paused, setPaused] =
|
|
9876
|
-
const initializedRef =
|
|
9877
|
-
|
|
9909
|
+
const [isDragging, setIsDragging] = import_react33.default.useState(false);
|
|
9910
|
+
const [dragOffset, setDragOffset] = import_react33.default.useState(0);
|
|
9911
|
+
const [animated, setAnimated] = import_react33.default.useState(false);
|
|
9912
|
+
const [containerWidth, setContainerWidth] = import_react33.default.useState(0);
|
|
9913
|
+
const containerRef = import_react33.default.useRef(null);
|
|
9914
|
+
const startXRef = import_react33.default.useRef(0);
|
|
9915
|
+
const startTimeRef = import_react33.default.useRef(0);
|
|
9916
|
+
const autoplayTimerRef = import_react33.default.useRef(null);
|
|
9917
|
+
const resumeTimeoutRef = import_react33.default.useRef(null);
|
|
9918
|
+
const [paused, setPaused] = import_react33.default.useState(false);
|
|
9919
|
+
const initializedRef = import_react33.default.useRef(false);
|
|
9920
|
+
import_react33.default.useEffect(() => {
|
|
9878
9921
|
const el = containerRef.current;
|
|
9879
9922
|
if (!el) return;
|
|
9880
9923
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -9897,7 +9940,7 @@ var Swiper = (props) => {
|
|
|
9897
9940
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
9898
9941
|
};
|
|
9899
9942
|
const realIndex = getRealIndex(innerIndex);
|
|
9900
|
-
const moveToInner =
|
|
9943
|
+
const moveToInner = import_react33.default.useCallback(
|
|
9901
9944
|
(idx, withAnim = true) => {
|
|
9902
9945
|
if (!useLoop) {
|
|
9903
9946
|
setAnimated(withAnim);
|
|
@@ -9925,7 +9968,7 @@ var Swiper = (props) => {
|
|
|
9925
9968
|
},
|
|
9926
9969
|
[useLoop, cloneCount, totalSlides]
|
|
9927
9970
|
);
|
|
9928
|
-
const handleTransitionEnd =
|
|
9971
|
+
const handleTransitionEnd = import_react33.default.useCallback(() => {
|
|
9929
9972
|
if (!useLoop) return;
|
|
9930
9973
|
const real = getRealIndex(innerIndex);
|
|
9931
9974
|
const canonical = cloneCount + real;
|
|
@@ -9935,7 +9978,7 @@ var Swiper = (props) => {
|
|
|
9935
9978
|
}
|
|
9936
9979
|
onChange?.(Math.min(real, maxIndex));
|
|
9937
9980
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
9938
|
-
const slideTo =
|
|
9981
|
+
const slideTo = import_react33.default.useCallback(
|
|
9939
9982
|
(logicalIndex) => {
|
|
9940
9983
|
if (!canSlide) return;
|
|
9941
9984
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -9945,7 +9988,7 @@ var Swiper = (props) => {
|
|
|
9945
9988
|
},
|
|
9946
9989
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
9947
9990
|
);
|
|
9948
|
-
const slideNext =
|
|
9991
|
+
const slideNext = import_react33.default.useCallback(() => {
|
|
9949
9992
|
if (!canSlide) return;
|
|
9950
9993
|
const nextInner = innerIndex + slideBy;
|
|
9951
9994
|
if (useLoop) {
|
|
@@ -9954,7 +9997,7 @@ var Swiper = (props) => {
|
|
|
9954
9997
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
9955
9998
|
}
|
|
9956
9999
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
9957
|
-
const slidePrev =
|
|
10000
|
+
const slidePrev = import_react33.default.useCallback(() => {
|
|
9958
10001
|
if (!canSlide) return;
|
|
9959
10002
|
const prevInner = innerIndex - slideBy;
|
|
9960
10003
|
if (useLoop) {
|
|
@@ -9963,7 +10006,7 @@ var Swiper = (props) => {
|
|
|
9963
10006
|
moveToInner(Math.max(prevInner, 0), true);
|
|
9964
10007
|
}
|
|
9965
10008
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
9966
|
-
|
|
10009
|
+
import_react33.default.useEffect(() => {
|
|
9967
10010
|
if (indexProp === void 0) return;
|
|
9968
10011
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
9969
10012
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -9971,12 +10014,12 @@ var Swiper = (props) => {
|
|
|
9971
10014
|
moveToInner(target, true);
|
|
9972
10015
|
}
|
|
9973
10016
|
}, [indexProp]);
|
|
9974
|
-
|
|
10017
|
+
import_react33.default.useImperativeHandle(swiperRef, () => ({
|
|
9975
10018
|
slidePrev,
|
|
9976
10019
|
slideNext,
|
|
9977
10020
|
slideTo
|
|
9978
10021
|
}));
|
|
9979
|
-
|
|
10022
|
+
import_react33.default.useEffect(() => {
|
|
9980
10023
|
if (!auto || !canSlide || paused) return;
|
|
9981
10024
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
9982
10025
|
return () => {
|
|
@@ -10002,7 +10045,7 @@ var Swiper = (props) => {
|
|
|
10002
10045
|
resumeTimeoutRef.current = null;
|
|
10003
10046
|
}, pauseOnInteraction);
|
|
10004
10047
|
};
|
|
10005
|
-
|
|
10048
|
+
import_react33.default.useEffect(() => {
|
|
10006
10049
|
return () => {
|
|
10007
10050
|
if (resumeTimeoutRef.current) clearTimeout(resumeTimeoutRef.current);
|
|
10008
10051
|
};
|
|
@@ -10020,7 +10063,7 @@ var Swiper = (props) => {
|
|
|
10020
10063
|
startXRef.current = getClientX(e);
|
|
10021
10064
|
startTimeRef.current = Date.now();
|
|
10022
10065
|
};
|
|
10023
|
-
|
|
10066
|
+
import_react33.default.useEffect(() => {
|
|
10024
10067
|
if (!isDragging) return;
|
|
10025
10068
|
const handleMove = (e) => {
|
|
10026
10069
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -10059,8 +10102,8 @@ var Swiper = (props) => {
|
|
|
10059
10102
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
10060
10103
|
const slideWidthPercent = 100 / viewItemCount;
|
|
10061
10104
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
10062
|
-
const slideElements =
|
|
10063
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0,
|
|
10105
|
+
const slideElements = import_react33.default.useMemo(
|
|
10106
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
|
|
10064
10107
|
"div",
|
|
10065
10108
|
{
|
|
10066
10109
|
className: "lib-xplat-swiper__slide",
|
|
@@ -10079,15 +10122,15 @@ var Swiper = (props) => {
|
|
|
10079
10122
|
Math.floor(realIndex / slideBy),
|
|
10080
10123
|
totalSteps - 1
|
|
10081
10124
|
);
|
|
10082
|
-
return /* @__PURE__ */ (0,
|
|
10083
|
-
/* @__PURE__ */ (0,
|
|
10125
|
+
return /* @__PURE__ */ (0, import_jsx_runtime340.jsxs)("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
10126
|
+
/* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
|
|
10084
10127
|
"div",
|
|
10085
10128
|
{
|
|
10086
10129
|
className: "lib-xplat-swiper__viewport",
|
|
10087
10130
|
onMouseDown: handleDragStart,
|
|
10088
10131
|
onTouchStart: handleDragStart,
|
|
10089
10132
|
onDragStart: (e) => e.preventDefault(),
|
|
10090
|
-
children: /* @__PURE__ */ (0,
|
|
10133
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
|
|
10091
10134
|
"div",
|
|
10092
10135
|
{
|
|
10093
10136
|
className: clsx_default(
|
|
@@ -10105,7 +10148,7 @@ var Swiper = (props) => {
|
|
|
10105
10148
|
)
|
|
10106
10149
|
}
|
|
10107
10150
|
),
|
|
10108
|
-
showProgress && canSlide && /* @__PURE__ */ (0,
|
|
10151
|
+
showProgress && canSlide && /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
|
|
10109
10152
|
"span",
|
|
10110
10153
|
{
|
|
10111
10154
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -10115,7 +10158,7 @@ var Swiper = (props) => {
|
|
|
10115
10158
|
}
|
|
10116
10159
|
}
|
|
10117
10160
|
) }) }),
|
|
10118
|
-
canSlide && /* @__PURE__ */ (0,
|
|
10161
|
+
canSlide && /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
|
|
10119
10162
|
"button",
|
|
10120
10163
|
{
|
|
10121
10164
|
className: clsx_default(
|
|
@@ -10133,8 +10176,8 @@ Swiper.displayName = "Swiper";
|
|
|
10133
10176
|
var Swiper_default = Swiper;
|
|
10134
10177
|
|
|
10135
10178
|
// src/components/Switch/Switch.tsx
|
|
10136
|
-
var
|
|
10137
|
-
var
|
|
10179
|
+
var import_react34 = __toESM(require("react"), 1);
|
|
10180
|
+
var import_jsx_runtime341 = require("react/jsx-runtime");
|
|
10138
10181
|
var KNOB_TRANSITION_MS = 250;
|
|
10139
10182
|
var Switch = (props) => {
|
|
10140
10183
|
const {
|
|
@@ -10144,9 +10187,9 @@ var Switch = (props) => {
|
|
|
10144
10187
|
disabled,
|
|
10145
10188
|
onChange
|
|
10146
10189
|
} = props;
|
|
10147
|
-
const [isAnimating, setIsAnimating] =
|
|
10148
|
-
const timeoutRef =
|
|
10149
|
-
|
|
10190
|
+
const [isAnimating, setIsAnimating] = import_react34.default.useState(false);
|
|
10191
|
+
const timeoutRef = import_react34.default.useRef(null);
|
|
10192
|
+
import_react34.default.useEffect(() => {
|
|
10150
10193
|
return () => {
|
|
10151
10194
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
10152
10195
|
};
|
|
@@ -10161,7 +10204,7 @@ var Switch = (props) => {
|
|
|
10161
10204
|
timeoutRef.current = null;
|
|
10162
10205
|
}, KNOB_TRANSITION_MS);
|
|
10163
10206
|
};
|
|
10164
|
-
return /* @__PURE__ */ (0,
|
|
10207
|
+
return /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
|
|
10165
10208
|
"div",
|
|
10166
10209
|
{
|
|
10167
10210
|
className: clsx_default(
|
|
@@ -10174,7 +10217,7 @@ var Switch = (props) => {
|
|
|
10174
10217
|
),
|
|
10175
10218
|
onClick: handleClick,
|
|
10176
10219
|
"aria-disabled": disabled || isAnimating,
|
|
10177
|
-
children: /* @__PURE__ */ (0,
|
|
10220
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
10178
10221
|
}
|
|
10179
10222
|
);
|
|
10180
10223
|
};
|
|
@@ -10182,17 +10225,17 @@ Switch.displayName = "Switch";
|
|
|
10182
10225
|
var Switch_default = Switch;
|
|
10183
10226
|
|
|
10184
10227
|
// src/components/Table/TableContext.tsx
|
|
10185
|
-
var
|
|
10186
|
-
var TableContext =
|
|
10228
|
+
var import_react35 = __toESM(require("react"), 1);
|
|
10229
|
+
var TableContext = import_react35.default.createContext(null);
|
|
10187
10230
|
var useTableContext = () => {
|
|
10188
|
-
const ctx =
|
|
10231
|
+
const ctx = import_react35.default.useContext(TableContext);
|
|
10189
10232
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
10190
10233
|
return ctx;
|
|
10191
10234
|
};
|
|
10192
10235
|
var TableContext_default = TableContext;
|
|
10193
10236
|
|
|
10194
10237
|
// src/components/Table/Table.tsx
|
|
10195
|
-
var
|
|
10238
|
+
var import_jsx_runtime342 = require("react/jsx-runtime");
|
|
10196
10239
|
var Table = (props) => {
|
|
10197
10240
|
const {
|
|
10198
10241
|
children,
|
|
@@ -10202,7 +10245,7 @@ var Table = (props) => {
|
|
|
10202
10245
|
headerSticky = false,
|
|
10203
10246
|
stickyShadow = true
|
|
10204
10247
|
} = props;
|
|
10205
|
-
return /* @__PURE__ */ (0,
|
|
10248
|
+
return /* @__PURE__ */ (0, import_jsx_runtime342.jsx)("div", { className: `lib-xplat-table-wrapper ${size}`, children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
|
|
10206
10249
|
TableContext_default.Provider,
|
|
10207
10250
|
{
|
|
10208
10251
|
value: {
|
|
@@ -10211,7 +10254,7 @@ var Table = (props) => {
|
|
|
10211
10254
|
headerSticky,
|
|
10212
10255
|
stickyShadow
|
|
10213
10256
|
},
|
|
10214
|
-
children: /* @__PURE__ */ (0,
|
|
10257
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)("table", { className: "lib-xplat-table", children })
|
|
10215
10258
|
}
|
|
10216
10259
|
) });
|
|
10217
10260
|
};
|
|
@@ -10219,41 +10262,41 @@ Table.displayName = "Table";
|
|
|
10219
10262
|
var Table_default = Table;
|
|
10220
10263
|
|
|
10221
10264
|
// src/components/Table/TableBody.tsx
|
|
10222
|
-
var
|
|
10265
|
+
var import_jsx_runtime343 = require("react/jsx-runtime");
|
|
10223
10266
|
var TableBody = (props) => {
|
|
10224
10267
|
const { children } = props;
|
|
10225
|
-
return /* @__PURE__ */ (0,
|
|
10268
|
+
return /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("tbody", { children });
|
|
10226
10269
|
};
|
|
10227
10270
|
TableBody.displayName = "TableBody";
|
|
10228
10271
|
var TableBody_default = TableBody;
|
|
10229
10272
|
|
|
10230
10273
|
// src/components/Table/TableCell.tsx
|
|
10231
|
-
var
|
|
10274
|
+
var import_react38 = __toESM(require("react"), 1);
|
|
10232
10275
|
|
|
10233
10276
|
// src/components/Table/TableHeadContext.tsx
|
|
10234
|
-
var
|
|
10235
|
-
var TableHeadContext =
|
|
10277
|
+
var import_react36 = __toESM(require("react"), 1);
|
|
10278
|
+
var TableHeadContext = import_react36.default.createContext(
|
|
10236
10279
|
null
|
|
10237
10280
|
);
|
|
10238
10281
|
var useTableHeadContext = () => {
|
|
10239
|
-
const ctx =
|
|
10282
|
+
const ctx = import_react36.default.useContext(TableHeadContext);
|
|
10240
10283
|
return ctx;
|
|
10241
10284
|
};
|
|
10242
10285
|
var TableHeadContext_default = TableHeadContext;
|
|
10243
10286
|
|
|
10244
10287
|
// src/components/Table/TableRowContext.tsx
|
|
10245
|
-
var
|
|
10246
|
-
var TableRowContext =
|
|
10288
|
+
var import_react37 = __toESM(require("react"), 1);
|
|
10289
|
+
var TableRowContext = import_react37.default.createContext(null);
|
|
10247
10290
|
var useTableRowContext = () => {
|
|
10248
|
-
const ctx =
|
|
10291
|
+
const ctx = import_react37.default.useContext(TableRowContext);
|
|
10249
10292
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
10250
10293
|
return ctx;
|
|
10251
10294
|
};
|
|
10252
10295
|
var TableRowContext_default = TableRowContext;
|
|
10253
10296
|
|
|
10254
10297
|
// src/components/Table/TableCell.tsx
|
|
10255
|
-
var
|
|
10256
|
-
var TableCell =
|
|
10298
|
+
var import_jsx_runtime344 = require("react/jsx-runtime");
|
|
10299
|
+
var TableCell = import_react38.default.memo((props) => {
|
|
10257
10300
|
const {
|
|
10258
10301
|
children,
|
|
10259
10302
|
align = "center",
|
|
@@ -10265,9 +10308,9 @@ var TableCell = import_react37.default.memo((props) => {
|
|
|
10265
10308
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
10266
10309
|
const { stickyShadow } = useTableContext();
|
|
10267
10310
|
const headContext = useTableHeadContext();
|
|
10268
|
-
const [left, setLeft] =
|
|
10269
|
-
const cellRef =
|
|
10270
|
-
const calculateLeft =
|
|
10311
|
+
const [left, setLeft] = import_react38.default.useState(0);
|
|
10312
|
+
const cellRef = import_react38.default.useRef(null);
|
|
10313
|
+
const calculateLeft = import_react38.default.useCallback(() => {
|
|
10271
10314
|
if (!cellRef.current) return 0;
|
|
10272
10315
|
let totalLeft = 0;
|
|
10273
10316
|
for (const ref of stickyCells) {
|
|
@@ -10276,7 +10319,7 @@ var TableCell = import_react37.default.memo((props) => {
|
|
|
10276
10319
|
}
|
|
10277
10320
|
return totalLeft;
|
|
10278
10321
|
}, [stickyCells]);
|
|
10279
|
-
|
|
10322
|
+
import_react38.default.useEffect(() => {
|
|
10280
10323
|
if (!isSticky || !cellRef.current) return;
|
|
10281
10324
|
registerStickyCell(cellRef);
|
|
10282
10325
|
setLeft(calculateLeft());
|
|
@@ -10294,7 +10337,7 @@ var TableCell = import_react37.default.memo((props) => {
|
|
|
10294
10337
|
const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
|
|
10295
10338
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
10296
10339
|
const enableHover = headContext && headContext.cellHover;
|
|
10297
|
-
return /* @__PURE__ */ (0,
|
|
10340
|
+
return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
|
|
10298
10341
|
CellTag,
|
|
10299
10342
|
{
|
|
10300
10343
|
ref: cellRef,
|
|
@@ -10319,21 +10362,21 @@ TableCell.displayName = "TableCell";
|
|
|
10319
10362
|
var TableCell_default = TableCell;
|
|
10320
10363
|
|
|
10321
10364
|
// src/components/Table/TableHead.tsx
|
|
10322
|
-
var
|
|
10365
|
+
var import_jsx_runtime345 = require("react/jsx-runtime");
|
|
10323
10366
|
var TableHead = ({
|
|
10324
10367
|
children,
|
|
10325
10368
|
cellHover = false
|
|
10326
10369
|
}) => {
|
|
10327
10370
|
const { headerSticky } = useTableContext();
|
|
10328
|
-
return /* @__PURE__ */ (0,
|
|
10371
|
+
return /* @__PURE__ */ (0, import_jsx_runtime345.jsx)(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
|
|
10329
10372
|
};
|
|
10330
10373
|
TableHead.displayName = "TableHead";
|
|
10331
10374
|
var TableHead_default = TableHead;
|
|
10332
10375
|
|
|
10333
10376
|
// src/components/Table/TableRow.tsx
|
|
10334
|
-
var
|
|
10335
|
-
var
|
|
10336
|
-
var TableRow =
|
|
10377
|
+
var import_react39 = __toESM(require("react"), 1);
|
|
10378
|
+
var import_jsx_runtime346 = require("react/jsx-runtime");
|
|
10379
|
+
var TableRow = import_react39.default.memo((props) => {
|
|
10337
10380
|
const {
|
|
10338
10381
|
children,
|
|
10339
10382
|
type = "secondary",
|
|
@@ -10342,14 +10385,14 @@ var TableRow = import_react38.default.memo((props) => {
|
|
|
10342
10385
|
onClick
|
|
10343
10386
|
} = props;
|
|
10344
10387
|
const { rowBorderUse } = useTableContext();
|
|
10345
|
-
const [stickyCells, setStickyCells] =
|
|
10388
|
+
const [stickyCells, setStickyCells] = import_react39.default.useState([]);
|
|
10346
10389
|
const registerStickyCell = (ref) => {
|
|
10347
10390
|
setStickyCells((prev) => {
|
|
10348
10391
|
if (prev.includes(ref)) return prev;
|
|
10349
10392
|
return [...prev, ref];
|
|
10350
10393
|
});
|
|
10351
10394
|
};
|
|
10352
|
-
return /* @__PURE__ */ (0,
|
|
10395
|
+
return /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
|
|
10353
10396
|
"tr",
|
|
10354
10397
|
{
|
|
10355
10398
|
className: clsx_default(
|
|
@@ -10373,7 +10416,7 @@ TableRow.displayName = "TableRow";
|
|
|
10373
10416
|
var TableRow_default = TableRow;
|
|
10374
10417
|
|
|
10375
10418
|
// src/components/Tag/Tag.tsx
|
|
10376
|
-
var
|
|
10419
|
+
var import_jsx_runtime347 = require("react/jsx-runtime");
|
|
10377
10420
|
var Tag = (props) => {
|
|
10378
10421
|
const {
|
|
10379
10422
|
children,
|
|
@@ -10383,7 +10426,7 @@ var Tag = (props) => {
|
|
|
10383
10426
|
disabled = false,
|
|
10384
10427
|
colorIndex
|
|
10385
10428
|
} = props;
|
|
10386
|
-
return /* @__PURE__ */ (0,
|
|
10429
|
+
return /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)(
|
|
10387
10430
|
"span",
|
|
10388
10431
|
{
|
|
10389
10432
|
className: clsx_default(
|
|
@@ -10394,8 +10437,8 @@ var Tag = (props) => {
|
|
|
10394
10437
|
disabled && "disabled"
|
|
10395
10438
|
),
|
|
10396
10439
|
children: [
|
|
10397
|
-
/* @__PURE__ */ (0,
|
|
10398
|
-
onClose && /* @__PURE__ */ (0,
|
|
10440
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)("span", { className: "tag-label", children }),
|
|
10441
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(XIcon_default, {}) })
|
|
10399
10442
|
]
|
|
10400
10443
|
}
|
|
10401
10444
|
);
|
|
@@ -10404,55 +10447,27 @@ Tag.displayName = "Tag";
|
|
|
10404
10447
|
var Tag_default = Tag;
|
|
10405
10448
|
|
|
10406
10449
|
// src/components/TextArea/TextArea.tsx
|
|
10407
|
-
var
|
|
10408
|
-
var
|
|
10409
|
-
var TextArea =
|
|
10450
|
+
var import_react40 = __toESM(require("react"), 1);
|
|
10451
|
+
var import_jsx_runtime348 = require("react/jsx-runtime");
|
|
10452
|
+
var TextArea = import_react40.default.forwardRef(
|
|
10410
10453
|
(props, ref) => {
|
|
10411
|
-
const {
|
|
10412
|
-
|
|
10413
|
-
|
|
10414
|
-
|
|
10415
|
-
|
|
10416
|
-
|
|
10417
|
-
|
|
10418
|
-
|
|
10419
|
-
|
|
10420
|
-
|
|
10421
|
-
};
|
|
10422
|
-
const handleOnChange = (e) => {
|
|
10423
|
-
const val = e.target.value;
|
|
10424
|
-
if (onChange) {
|
|
10425
|
-
const event = {
|
|
10426
|
-
...e,
|
|
10427
|
-
target: { value: val }
|
|
10428
|
-
};
|
|
10429
|
-
onChange(event);
|
|
10430
|
-
}
|
|
10431
|
-
};
|
|
10432
|
-
import_react39.default.useEffect(() => {
|
|
10433
|
-
const el = localRef.current;
|
|
10434
|
-
if (!el) return;
|
|
10435
|
-
el.style.height = "0px";
|
|
10436
|
-
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
10437
|
-
el.style.height = `${nextHeight}px`;
|
|
10438
|
-
}, [value]);
|
|
10439
|
-
return /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("div", { className: clsx_default("lib-xplat-textarea-wrapper", className), children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
10440
|
-
"div",
|
|
10454
|
+
const {
|
|
10455
|
+
className,
|
|
10456
|
+
size = "md",
|
|
10457
|
+
resize = "vertical",
|
|
10458
|
+
rows = 3,
|
|
10459
|
+
disabled,
|
|
10460
|
+
...textareaProps
|
|
10461
|
+
} = props;
|
|
10462
|
+
return /* @__PURE__ */ (0, import_jsx_runtime348.jsx)("div", { className: clsx_default("lib-xplat-textarea-wrap", className), children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
10463
|
+
"textarea",
|
|
10441
10464
|
{
|
|
10442
|
-
|
|
10443
|
-
|
|
10444
|
-
|
|
10445
|
-
|
|
10446
|
-
|
|
10447
|
-
|
|
10448
|
-
{
|
|
10449
|
-
...textareaProps,
|
|
10450
|
-
ref: setRefs,
|
|
10451
|
-
disabled,
|
|
10452
|
-
value,
|
|
10453
|
-
onChange: handleOnChange
|
|
10454
|
-
}
|
|
10455
|
-
)
|
|
10465
|
+
...textareaProps,
|
|
10466
|
+
ref,
|
|
10467
|
+
rows,
|
|
10468
|
+
disabled,
|
|
10469
|
+
className: clsx_default("lib-xplat-textarea", size, disabled && "disabled"),
|
|
10470
|
+
style: { resize }
|
|
10456
10471
|
}
|
|
10457
10472
|
) });
|
|
10458
10473
|
}
|
|
@@ -10461,25 +10476,25 @@ TextArea.displayName = "TextArea";
|
|
|
10461
10476
|
var TextArea_default = TextArea;
|
|
10462
10477
|
|
|
10463
10478
|
// src/components/Toast/Toast.tsx
|
|
10464
|
-
var
|
|
10479
|
+
var import_react41 = __toESM(require("react"), 1);
|
|
10465
10480
|
var import_react_dom4 = require("react-dom");
|
|
10466
|
-
var
|
|
10467
|
-
var ToastContext =
|
|
10481
|
+
var import_jsx_runtime349 = require("react/jsx-runtime");
|
|
10482
|
+
var ToastContext = import_react41.default.createContext(null);
|
|
10468
10483
|
var useToast = () => {
|
|
10469
|
-
const ctx =
|
|
10484
|
+
const ctx = import_react41.default.useContext(ToastContext);
|
|
10470
10485
|
if (!ctx) throw new Error("useToast must be used within ToastProvider");
|
|
10471
10486
|
return ctx;
|
|
10472
10487
|
};
|
|
10473
10488
|
var EXIT_DURATION = 300;
|
|
10474
10489
|
var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
10475
|
-
const ref =
|
|
10476
|
-
const [height, setHeight] =
|
|
10477
|
-
|
|
10490
|
+
const ref = import_react41.default.useRef(null);
|
|
10491
|
+
const [height, setHeight] = import_react41.default.useState(void 0);
|
|
10492
|
+
import_react41.default.useEffect(() => {
|
|
10478
10493
|
if (ref.current && !isExiting) {
|
|
10479
10494
|
setHeight(ref.current.offsetHeight);
|
|
10480
10495
|
}
|
|
10481
10496
|
}, [isExiting]);
|
|
10482
|
-
return /* @__PURE__ */ (0,
|
|
10497
|
+
return /* @__PURE__ */ (0, import_jsx_runtime349.jsx)(
|
|
10483
10498
|
"div",
|
|
10484
10499
|
{
|
|
10485
10500
|
className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
|
|
@@ -10487,15 +10502,15 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
10487
10502
|
maxHeight: isExiting ? 0 : height ?? "none",
|
|
10488
10503
|
marginBottom: isExiting ? 0 : void 0
|
|
10489
10504
|
},
|
|
10490
|
-
children: /* @__PURE__ */ (0,
|
|
10505
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime349.jsxs)(
|
|
10491
10506
|
"div",
|
|
10492
10507
|
{
|
|
10493
10508
|
ref,
|
|
10494
10509
|
className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
|
|
10495
10510
|
role: "alert",
|
|
10496
10511
|
children: [
|
|
10497
|
-
/* @__PURE__ */ (0,
|
|
10498
|
-
/* @__PURE__ */ (0,
|
|
10512
|
+
/* @__PURE__ */ (0, import_jsx_runtime349.jsx)("span", { className: "message", children: item.message }),
|
|
10513
|
+
/* @__PURE__ */ (0, import_jsx_runtime349.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
10499
10514
|
]
|
|
10500
10515
|
}
|
|
10501
10516
|
)
|
|
@@ -10506,13 +10521,13 @@ var ToastProvider = ({
|
|
|
10506
10521
|
children,
|
|
10507
10522
|
position = "top-right"
|
|
10508
10523
|
}) => {
|
|
10509
|
-
const [toasts, setToasts] =
|
|
10510
|
-
const [removing, setRemoving] =
|
|
10511
|
-
const [mounted, setMounted] =
|
|
10512
|
-
|
|
10524
|
+
const [toasts, setToasts] = import_react41.default.useState([]);
|
|
10525
|
+
const [removing, setRemoving] = import_react41.default.useState(/* @__PURE__ */ new Set());
|
|
10526
|
+
const [mounted, setMounted] = import_react41.default.useState(false);
|
|
10527
|
+
import_react41.default.useEffect(() => {
|
|
10513
10528
|
setMounted(true);
|
|
10514
10529
|
}, []);
|
|
10515
|
-
const remove =
|
|
10530
|
+
const remove = import_react41.default.useCallback((id) => {
|
|
10516
10531
|
setRemoving((prev) => new Set(prev).add(id));
|
|
10517
10532
|
setTimeout(() => {
|
|
10518
10533
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
@@ -10523,7 +10538,7 @@ var ToastProvider = ({
|
|
|
10523
10538
|
});
|
|
10524
10539
|
}, EXIT_DURATION);
|
|
10525
10540
|
}, []);
|
|
10526
|
-
const toast =
|
|
10541
|
+
const toast = import_react41.default.useCallback(
|
|
10527
10542
|
(type, message, duration = 3e3) => {
|
|
10528
10543
|
const id = `${Date.now()}-${Math.random()}`;
|
|
10529
10544
|
setToasts((prev) => [...prev, { id, type, message }]);
|
|
@@ -10533,10 +10548,10 @@ var ToastProvider = ({
|
|
|
10533
10548
|
},
|
|
10534
10549
|
[remove]
|
|
10535
10550
|
);
|
|
10536
|
-
return /* @__PURE__ */ (0,
|
|
10551
|
+
return /* @__PURE__ */ (0, import_jsx_runtime349.jsxs)(ToastContext.Provider, { value: { toast }, children: [
|
|
10537
10552
|
children,
|
|
10538
10553
|
mounted && (0, import_react_dom4.createPortal)(
|
|
10539
|
-
/* @__PURE__ */ (0,
|
|
10554
|
+
/* @__PURE__ */ (0, import_jsx_runtime349.jsx)("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime349.jsx)(
|
|
10540
10555
|
ToastItemComponent,
|
|
10541
10556
|
{
|
|
10542
10557
|
item: t,
|
|
@@ -10552,8 +10567,8 @@ var ToastProvider = ({
|
|
|
10552
10567
|
ToastProvider.displayName = "ToastProvider";
|
|
10553
10568
|
|
|
10554
10569
|
// src/components/Tooltip/Tooltip.tsx
|
|
10555
|
-
var
|
|
10556
|
-
var
|
|
10570
|
+
var import_react42 = __toESM(require("react"), 1);
|
|
10571
|
+
var import_jsx_runtime350 = require("react/jsx-runtime");
|
|
10557
10572
|
var OFFSET = 12;
|
|
10558
10573
|
var SHOW_DELAY = 300;
|
|
10559
10574
|
var Tooltip = (props) => {
|
|
@@ -10564,12 +10579,12 @@ var Tooltip = (props) => {
|
|
|
10564
10579
|
children,
|
|
10565
10580
|
disabled = false
|
|
10566
10581
|
} = props;
|
|
10567
|
-
const triggerRef =
|
|
10568
|
-
const tooltipRef =
|
|
10569
|
-
const [visible, setVisible] =
|
|
10570
|
-
const [pos, setPos] =
|
|
10571
|
-
const delayTimer =
|
|
10572
|
-
const calculatePos =
|
|
10582
|
+
const triggerRef = import_react42.default.useRef(null);
|
|
10583
|
+
const tooltipRef = import_react42.default.useRef(null);
|
|
10584
|
+
const [visible, setVisible] = import_react42.default.useState(false);
|
|
10585
|
+
const [pos, setPos] = import_react42.default.useState({ left: 0, top: 0 });
|
|
10586
|
+
const delayTimer = import_react42.default.useRef(0);
|
|
10587
|
+
const calculatePos = import_react42.default.useCallback((clientX, clientY) => {
|
|
10573
10588
|
const el = tooltipRef.current;
|
|
10574
10589
|
if (!el) return;
|
|
10575
10590
|
const w = el.offsetWidth;
|
|
@@ -10582,38 +10597,38 @@ var Tooltip = (props) => {
|
|
|
10582
10597
|
if (left < 8) left = 8;
|
|
10583
10598
|
setPos({ left, top });
|
|
10584
10599
|
}, []);
|
|
10585
|
-
const handleMouseEnter =
|
|
10600
|
+
const handleMouseEnter = import_react42.default.useCallback(() => {
|
|
10586
10601
|
if (disabled) return;
|
|
10587
10602
|
delayTimer.current = window.setTimeout(() => {
|
|
10588
10603
|
setVisible(true);
|
|
10589
10604
|
}, SHOW_DELAY);
|
|
10590
10605
|
}, [disabled]);
|
|
10591
|
-
const handleMouseMove =
|
|
10606
|
+
const handleMouseMove = import_react42.default.useCallback((e) => {
|
|
10592
10607
|
if (!visible) return;
|
|
10593
10608
|
calculatePos(e.clientX, e.clientY);
|
|
10594
10609
|
}, [visible, calculatePos]);
|
|
10595
|
-
const handleMouseLeave =
|
|
10610
|
+
const handleMouseLeave = import_react42.default.useCallback(() => {
|
|
10596
10611
|
window.clearTimeout(delayTimer.current);
|
|
10597
10612
|
setVisible(false);
|
|
10598
10613
|
}, []);
|
|
10599
|
-
const handleClick =
|
|
10614
|
+
const handleClick = import_react42.default.useCallback(() => {
|
|
10600
10615
|
window.clearTimeout(delayTimer.current);
|
|
10601
10616
|
setVisible(false);
|
|
10602
10617
|
}, []);
|
|
10603
|
-
const handleFocus =
|
|
10618
|
+
const handleFocus = import_react42.default.useCallback(() => {
|
|
10604
10619
|
if (disabled) return;
|
|
10605
10620
|
setVisible(true);
|
|
10606
10621
|
}, [disabled]);
|
|
10607
|
-
const handleBlur =
|
|
10622
|
+
const handleBlur = import_react42.default.useCallback(() => {
|
|
10608
10623
|
setVisible(false);
|
|
10609
10624
|
}, []);
|
|
10610
|
-
|
|
10625
|
+
import_react42.default.useLayoutEffect(() => {
|
|
10611
10626
|
if (!visible || !triggerRef.current) return;
|
|
10612
10627
|
const rect = triggerRef.current.getBoundingClientRect();
|
|
10613
10628
|
calculatePos(rect.right, rect.top);
|
|
10614
10629
|
}, [visible, calculatePos]);
|
|
10615
|
-
if (!title && !description) return /* @__PURE__ */ (0,
|
|
10616
|
-
return /* @__PURE__ */ (0,
|
|
10630
|
+
if (!title && !description) return /* @__PURE__ */ (0, import_jsx_runtime350.jsx)(import_jsx_runtime350.Fragment, { children });
|
|
10631
|
+
return /* @__PURE__ */ (0, import_jsx_runtime350.jsxs)(
|
|
10617
10632
|
"div",
|
|
10618
10633
|
{
|
|
10619
10634
|
ref: triggerRef,
|
|
@@ -10626,15 +10641,15 @@ var Tooltip = (props) => {
|
|
|
10626
10641
|
onBlur: handleBlur,
|
|
10627
10642
|
children: [
|
|
10628
10643
|
children,
|
|
10629
|
-
visible && /* @__PURE__ */ (0,
|
|
10644
|
+
visible && /* @__PURE__ */ (0, import_jsx_runtime350.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime350.jsxs)(
|
|
10630
10645
|
"div",
|
|
10631
10646
|
{
|
|
10632
10647
|
ref: tooltipRef,
|
|
10633
10648
|
className: clsx_default("lib-xplat-tooltip", type),
|
|
10634
10649
|
style: { position: "fixed", left: pos.left, top: pos.top },
|
|
10635
10650
|
children: [
|
|
10636
|
-
title && /* @__PURE__ */ (0,
|
|
10637
|
-
description && /* @__PURE__ */ (0,
|
|
10651
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("div", { className: "tooltip-title", children: title }),
|
|
10652
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("div", { className: "tooltip-desc", children: description })
|
|
10638
10653
|
]
|
|
10639
10654
|
}
|
|
10640
10655
|
) })
|
|
@@ -10646,11 +10661,11 @@ Tooltip.displayName = "Tooltip";
|
|
|
10646
10661
|
var Tooltip_default = Tooltip;
|
|
10647
10662
|
|
|
10648
10663
|
// src/components/Video/Video.tsx
|
|
10649
|
-
var
|
|
10650
|
-
var
|
|
10651
|
-
var PipIcon = () => /* @__PURE__ */ (0,
|
|
10652
|
-
/* @__PURE__ */ (0,
|
|
10653
|
-
/* @__PURE__ */ (0,
|
|
10664
|
+
var import_react43 = __toESM(require("react"), 1);
|
|
10665
|
+
var import_jsx_runtime351 = require("react/jsx-runtime");
|
|
10666
|
+
var PipIcon = () => /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
10667
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsx)("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
10668
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsx)("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
|
|
10654
10669
|
] });
|
|
10655
10670
|
var formatTime = (sec) => {
|
|
10656
10671
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -10658,7 +10673,7 @@ var formatTime = (sec) => {
|
|
|
10658
10673
|
const s = Math.floor(sec % 60);
|
|
10659
10674
|
return `${m}:${s.toString().padStart(2, "0")}`;
|
|
10660
10675
|
};
|
|
10661
|
-
var Video =
|
|
10676
|
+
var Video = import_react43.default.forwardRef((props, ref) => {
|
|
10662
10677
|
const {
|
|
10663
10678
|
src,
|
|
10664
10679
|
poster,
|
|
@@ -10682,21 +10697,21 @@ var Video = import_react42.default.forwardRef((props, ref) => {
|
|
|
10682
10697
|
children,
|
|
10683
10698
|
...rest
|
|
10684
10699
|
} = props;
|
|
10685
|
-
const containerRef =
|
|
10686
|
-
const videoRef =
|
|
10687
|
-
const [isPlaying, setIsPlaying] =
|
|
10688
|
-
const [isLoaded, setIsLoaded] =
|
|
10689
|
-
const [currentTime, setCurrentTime] =
|
|
10690
|
-
const [duration, setDuration] =
|
|
10691
|
-
const [buffered, setBuffered] =
|
|
10692
|
-
const [volume, setVolume] =
|
|
10693
|
-
const [isMuted, setIsMuted] =
|
|
10694
|
-
const [isFullscreen, setIsFullscreen] =
|
|
10695
|
-
const [playbackRate, setPlaybackRate] =
|
|
10696
|
-
const [rateMenuOpen, setRateMenuOpen] =
|
|
10697
|
-
const [captionsOn, setCaptionsOn] =
|
|
10698
|
-
const [isPip, setIsPip] =
|
|
10699
|
-
const setRefs =
|
|
10700
|
+
const containerRef = import_react43.default.useRef(null);
|
|
10701
|
+
const videoRef = import_react43.default.useRef(null);
|
|
10702
|
+
const [isPlaying, setIsPlaying] = import_react43.default.useState(Boolean(autoPlay));
|
|
10703
|
+
const [isLoaded, setIsLoaded] = import_react43.default.useState(false);
|
|
10704
|
+
const [currentTime, setCurrentTime] = import_react43.default.useState(0);
|
|
10705
|
+
const [duration, setDuration] = import_react43.default.useState(0);
|
|
10706
|
+
const [buffered, setBuffered] = import_react43.default.useState(0);
|
|
10707
|
+
const [volume, setVolume] = import_react43.default.useState(1);
|
|
10708
|
+
const [isMuted, setIsMuted] = import_react43.default.useState(Boolean(muted));
|
|
10709
|
+
const [isFullscreen, setIsFullscreen] = import_react43.default.useState(false);
|
|
10710
|
+
const [playbackRate, setPlaybackRate] = import_react43.default.useState(1);
|
|
10711
|
+
const [rateMenuOpen, setRateMenuOpen] = import_react43.default.useState(false);
|
|
10712
|
+
const [captionsOn, setCaptionsOn] = import_react43.default.useState(false);
|
|
10713
|
+
const [isPip, setIsPip] = import_react43.default.useState(false);
|
|
10714
|
+
const setRefs = import_react43.default.useCallback(
|
|
10700
10715
|
(el) => {
|
|
10701
10716
|
videoRef.current = el;
|
|
10702
10717
|
if (typeof ref === "function") ref(el);
|
|
@@ -10704,14 +10719,14 @@ var Video = import_react42.default.forwardRef((props, ref) => {
|
|
|
10704
10719
|
},
|
|
10705
10720
|
[ref]
|
|
10706
10721
|
);
|
|
10707
|
-
|
|
10722
|
+
import_react43.default.useEffect(() => {
|
|
10708
10723
|
const onFsChange = () => {
|
|
10709
10724
|
setIsFullscreen(document.fullscreenElement === containerRef.current);
|
|
10710
10725
|
};
|
|
10711
10726
|
document.addEventListener("fullscreenchange", onFsChange);
|
|
10712
10727
|
return () => document.removeEventListener("fullscreenchange", onFsChange);
|
|
10713
10728
|
}, []);
|
|
10714
|
-
|
|
10729
|
+
import_react43.default.useEffect(() => {
|
|
10715
10730
|
const v = videoRef.current;
|
|
10716
10731
|
if (!v) return;
|
|
10717
10732
|
const onEnter = () => setIsPip(true);
|
|
@@ -10825,13 +10840,13 @@ var Video = import_react42.default.forwardRef((props, ref) => {
|
|
|
10825
10840
|
const volumePct = (isMuted ? 0 : volume) * 100;
|
|
10826
10841
|
const VolumeGlyph = isMuted || volume === 0 ? VolumeXIcon_default : volume < 0.5 ? VolumeIcon_default : Volume2Icon_default;
|
|
10827
10842
|
const pipSupported = typeof document !== "undefined" && "pictureInPictureEnabled" in document && document.pictureInPictureEnabled;
|
|
10828
|
-
return /* @__PURE__ */ (0,
|
|
10843
|
+
return /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)(
|
|
10829
10844
|
"div",
|
|
10830
10845
|
{
|
|
10831
10846
|
ref: containerRef,
|
|
10832
10847
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
10833
10848
|
children: [
|
|
10834
|
-
/* @__PURE__ */ (0,
|
|
10849
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
|
|
10835
10850
|
"video",
|
|
10836
10851
|
{
|
|
10837
10852
|
ref: setRefs,
|
|
@@ -10852,7 +10867,7 @@ var Video = import_react42.default.forwardRef((props, ref) => {
|
|
|
10852
10867
|
children
|
|
10853
10868
|
}
|
|
10854
10869
|
),
|
|
10855
|
-
showCenterPlay && /* @__PURE__ */ (0,
|
|
10870
|
+
showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
|
|
10856
10871
|
"button",
|
|
10857
10872
|
{
|
|
10858
10873
|
type: "button",
|
|
@@ -10864,11 +10879,11 @@ var Video = import_react42.default.forwardRef((props, ref) => {
|
|
|
10864
10879
|
onClick: togglePlay,
|
|
10865
10880
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
10866
10881
|
tabIndex: -1,
|
|
10867
|
-
children: /* @__PURE__ */ (0,
|
|
10882
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("span", { className: "center-play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(PlayCircleIcon_default, {}) })
|
|
10868
10883
|
}
|
|
10869
10884
|
),
|
|
10870
|
-
showControls && /* @__PURE__ */ (0,
|
|
10871
|
-
/* @__PURE__ */ (0,
|
|
10885
|
+
showControls && /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
|
|
10886
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
|
|
10872
10887
|
"input",
|
|
10873
10888
|
{
|
|
10874
10889
|
type: "range",
|
|
@@ -10885,29 +10900,29 @@ var Video = import_react42.default.forwardRef((props, ref) => {
|
|
|
10885
10900
|
}
|
|
10886
10901
|
}
|
|
10887
10902
|
),
|
|
10888
|
-
/* @__PURE__ */ (0,
|
|
10889
|
-
/* @__PURE__ */ (0,
|
|
10903
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsxs)("div", { className: "controls-row", children: [
|
|
10904
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
|
|
10890
10905
|
"button",
|
|
10891
10906
|
{
|
|
10892
10907
|
type: "button",
|
|
10893
10908
|
className: "control-btn",
|
|
10894
10909
|
onClick: togglePlay,
|
|
10895
10910
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
10896
|
-
children: isPlaying ? /* @__PURE__ */ (0,
|
|
10911
|
+
children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(PlayIcon_default, {})
|
|
10897
10912
|
}
|
|
10898
10913
|
),
|
|
10899
|
-
/* @__PURE__ */ (0,
|
|
10900
|
-
/* @__PURE__ */ (0,
|
|
10914
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsxs)("div", { className: "volume-group", children: [
|
|
10915
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
|
|
10901
10916
|
"button",
|
|
10902
10917
|
{
|
|
10903
10918
|
type: "button",
|
|
10904
10919
|
className: "control-btn",
|
|
10905
10920
|
onClick: toggleMute,
|
|
10906
10921
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
10907
|
-
children: /* @__PURE__ */ (0,
|
|
10922
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(VolumeGlyph, {})
|
|
10908
10923
|
}
|
|
10909
10924
|
),
|
|
10910
|
-
/* @__PURE__ */ (0,
|
|
10925
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
|
|
10911
10926
|
"input",
|
|
10912
10927
|
{
|
|
10913
10928
|
type: "range",
|
|
@@ -10922,14 +10937,14 @@ var Video = import_react42.default.forwardRef((props, ref) => {
|
|
|
10922
10937
|
}
|
|
10923
10938
|
)
|
|
10924
10939
|
] }),
|
|
10925
|
-
/* @__PURE__ */ (0,
|
|
10940
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsxs)("span", { className: "time", children: [
|
|
10926
10941
|
formatTime(currentTime),
|
|
10927
10942
|
" / ",
|
|
10928
10943
|
formatTime(duration)
|
|
10929
10944
|
] }),
|
|
10930
|
-
/* @__PURE__ */ (0,
|
|
10931
|
-
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0,
|
|
10932
|
-
/* @__PURE__ */ (0,
|
|
10945
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { className: "controls-spacer" }),
|
|
10946
|
+
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
|
|
10947
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsxs)(
|
|
10933
10948
|
"button",
|
|
10934
10949
|
{
|
|
10935
10950
|
type: "button",
|
|
@@ -10943,7 +10958,7 @@ var Video = import_react42.default.forwardRef((props, ref) => {
|
|
|
10943
10958
|
]
|
|
10944
10959
|
}
|
|
10945
10960
|
),
|
|
10946
|
-
rateMenuOpen && /* @__PURE__ */ (0,
|
|
10961
|
+
rateMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)(
|
|
10947
10962
|
"button",
|
|
10948
10963
|
{
|
|
10949
10964
|
type: "button",
|
|
@@ -10957,7 +10972,7 @@ var Video = import_react42.default.forwardRef((props, ref) => {
|
|
|
10957
10972
|
}
|
|
10958
10973
|
) }, r2)) })
|
|
10959
10974
|
] }),
|
|
10960
|
-
showCaptions && /* @__PURE__ */ (0,
|
|
10975
|
+
showCaptions && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
|
|
10961
10976
|
"button",
|
|
10962
10977
|
{
|
|
10963
10978
|
type: "button",
|
|
@@ -10965,37 +10980,37 @@ var Video = import_react42.default.forwardRef((props, ref) => {
|
|
|
10965
10980
|
onClick: toggleCaptions,
|
|
10966
10981
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
10967
10982
|
"aria-pressed": captionsOn,
|
|
10968
|
-
children: /* @__PURE__ */ (0,
|
|
10983
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(TypeIcon_default, {})
|
|
10969
10984
|
}
|
|
10970
10985
|
),
|
|
10971
|
-
showPip && pipSupported && /* @__PURE__ */ (0,
|
|
10986
|
+
showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
|
|
10972
10987
|
"button",
|
|
10973
10988
|
{
|
|
10974
10989
|
type: "button",
|
|
10975
10990
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
10976
10991
|
onClick: togglePip,
|
|
10977
10992
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
10978
|
-
children: /* @__PURE__ */ (0,
|
|
10993
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(PipIcon, {})
|
|
10979
10994
|
}
|
|
10980
10995
|
),
|
|
10981
|
-
showDownload && /* @__PURE__ */ (0,
|
|
10996
|
+
showDownload && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
|
|
10982
10997
|
"a",
|
|
10983
10998
|
{
|
|
10984
10999
|
className: "control-btn",
|
|
10985
11000
|
href: src,
|
|
10986
11001
|
download: downloadFileName ?? true,
|
|
10987
11002
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
10988
|
-
children: /* @__PURE__ */ (0,
|
|
11003
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(DownloadIcon_default, {})
|
|
10989
11004
|
}
|
|
10990
11005
|
),
|
|
10991
|
-
/* @__PURE__ */ (0,
|
|
11006
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
|
|
10992
11007
|
"button",
|
|
10993
11008
|
{
|
|
10994
11009
|
type: "button",
|
|
10995
11010
|
className: "control-btn",
|
|
10996
11011
|
onClick: toggleFullscreen,
|
|
10997
11012
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
10998
|
-
children: isFullscreen ? /* @__PURE__ */ (0,
|
|
11013
|
+
children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(MaximizeIcon_default, {})
|
|
10999
11014
|
}
|
|
11000
11015
|
)
|
|
11001
11016
|
] })
|
|
@@ -11008,7 +11023,7 @@ Video.displayName = "Video";
|
|
|
11008
11023
|
var Video_default = Video;
|
|
11009
11024
|
|
|
11010
11025
|
// src/layout/Grid/FullGrid/FullGrid.tsx
|
|
11011
|
-
var
|
|
11026
|
+
var import_jsx_runtime352 = require("react/jsx-runtime");
|
|
11012
11027
|
var GAP_MAP = {
|
|
11013
11028
|
none: "var(--spacing-space-none)",
|
|
11014
11029
|
xs: "var(--spacing-space-1)",
|
|
@@ -11021,13 +11036,13 @@ var GAP_MAP = {
|
|
|
11021
11036
|
var FullGrid = (props) => {
|
|
11022
11037
|
const { children, gap } = props;
|
|
11023
11038
|
const style = gap != null ? { gap: GAP_MAP[gap] } : void 0;
|
|
11024
|
-
return /* @__PURE__ */ (0,
|
|
11039
|
+
return /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("div", { className: "lib-xplat-full-grid", style, children });
|
|
11025
11040
|
};
|
|
11026
11041
|
FullGrid.displayName = "FullGrid";
|
|
11027
11042
|
var FullGrid_default = FullGrid;
|
|
11028
11043
|
|
|
11029
11044
|
// src/layout/Grid/FullScreen/FullScreen.tsx
|
|
11030
|
-
var
|
|
11045
|
+
var import_jsx_runtime353 = require("react/jsx-runtime");
|
|
11031
11046
|
var GAP_MAP2 = {
|
|
11032
11047
|
none: "var(--spacing-space-none)",
|
|
11033
11048
|
xs: "var(--spacing-space-1)",
|
|
@@ -11040,13 +11055,13 @@ var GAP_MAP2 = {
|
|
|
11040
11055
|
var FullScreen = (props) => {
|
|
11041
11056
|
const { children, gap } = props;
|
|
11042
11057
|
const style = gap != null ? { gap: GAP_MAP2[gap] } : void 0;
|
|
11043
|
-
return /* @__PURE__ */ (0,
|
|
11058
|
+
return /* @__PURE__ */ (0, import_jsx_runtime353.jsx)("div", { className: "lib-xplat-full-screen", style, children });
|
|
11044
11059
|
};
|
|
11045
11060
|
FullScreen.displayName = "FullScreen";
|
|
11046
11061
|
var FullScreen_default = FullScreen;
|
|
11047
11062
|
|
|
11048
11063
|
// src/layout/Grid/Item/Item.tsx
|
|
11049
|
-
var
|
|
11064
|
+
var import_jsx_runtime354 = require("react/jsx-runtime");
|
|
11050
11065
|
var calculateSpans = (column) => {
|
|
11051
11066
|
const spans = {};
|
|
11052
11067
|
let inherited = column.default;
|
|
@@ -11063,35 +11078,35 @@ var GridItem = ({ column, children, className }) => {
|
|
|
11063
11078
|
Object.entries(spans).forEach(([key, value]) => {
|
|
11064
11079
|
style[`--column-${key}`] = value;
|
|
11065
11080
|
});
|
|
11066
|
-
return /* @__PURE__ */ (0,
|
|
11081
|
+
return /* @__PURE__ */ (0, import_jsx_runtime354.jsx)("div", { className: clsx_default("lib-xplat-grid-item", className), style, children });
|
|
11067
11082
|
};
|
|
11068
11083
|
GridItem.displayName = "GridItem";
|
|
11069
11084
|
var Item_default = GridItem;
|
|
11070
11085
|
|
|
11071
11086
|
// src/layout/Header/Header.tsx
|
|
11072
|
-
var
|
|
11087
|
+
var import_jsx_runtime355 = require("react/jsx-runtime");
|
|
11073
11088
|
var Header = ({
|
|
11074
11089
|
logo,
|
|
11075
11090
|
centerContent,
|
|
11076
11091
|
rightContent
|
|
11077
11092
|
}) => {
|
|
11078
|
-
return /* @__PURE__ */ (0,
|
|
11079
|
-
/* @__PURE__ */ (0,
|
|
11080
|
-
/* @__PURE__ */ (0,
|
|
11081
|
-
/* @__PURE__ */ (0,
|
|
11093
|
+
return /* @__PURE__ */ (0, import_jsx_runtime355.jsxs)("div", { className: "lib-xplat-layout-header", children: [
|
|
11094
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsx)("div", { children: logo }),
|
|
11095
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsx)("div", { children: centerContent }),
|
|
11096
|
+
/* @__PURE__ */ (0, import_jsx_runtime355.jsx)("div", { children: rightContent })
|
|
11082
11097
|
] });
|
|
11083
11098
|
};
|
|
11084
11099
|
Header.displayName = "Header";
|
|
11085
11100
|
var Header_default = Header;
|
|
11086
11101
|
|
|
11087
11102
|
// src/layout/Layout/Layout.tsx
|
|
11088
|
-
var
|
|
11103
|
+
var import_jsx_runtime356 = require("react/jsx-runtime");
|
|
11089
11104
|
var Layout = (props) => {
|
|
11090
11105
|
const { header, sideBar, children } = props;
|
|
11091
|
-
return /* @__PURE__ */ (0,
|
|
11092
|
-
sideBar && /* @__PURE__ */ (0,
|
|
11093
|
-
/* @__PURE__ */ (0,
|
|
11094
|
-
header && /* @__PURE__ */ (0,
|
|
11106
|
+
return /* @__PURE__ */ (0, import_jsx_runtime356.jsx)("div", { className: "lib-xplat-layout", children: /* @__PURE__ */ (0, import_jsx_runtime356.jsxs)("div", { className: "lib-xplat-layout-content-wrapper", children: [
|
|
11107
|
+
sideBar && /* @__PURE__ */ (0, import_jsx_runtime356.jsx)(import_jsx_runtime356.Fragment, { children: sideBar }),
|
|
11108
|
+
/* @__PURE__ */ (0, import_jsx_runtime356.jsxs)("div", { className: "lib-xplat-layout-content", children: [
|
|
11109
|
+
header && /* @__PURE__ */ (0, import_jsx_runtime356.jsx)("div", { className: "lib-xplat-layout-conent-header", children: header }),
|
|
11095
11110
|
children
|
|
11096
11111
|
] })
|
|
11097
11112
|
] }) });
|
|
@@ -11100,31 +11115,31 @@ Layout.displayName = "Layout";
|
|
|
11100
11115
|
var Layout_default = Layout;
|
|
11101
11116
|
|
|
11102
11117
|
// src/layout/SideBar/SideBar.tsx
|
|
11103
|
-
var
|
|
11118
|
+
var import_react45 = __toESM(require("react"), 1);
|
|
11104
11119
|
|
|
11105
11120
|
// src/layout/SideBar/SideBarContext.tsx
|
|
11106
|
-
var
|
|
11107
|
-
var SideBarContext =
|
|
11121
|
+
var import_react44 = __toESM(require("react"), 1);
|
|
11122
|
+
var SideBarContext = import_react44.default.createContext(null);
|
|
11108
11123
|
var useSideBarContext = () => {
|
|
11109
|
-
const ctx =
|
|
11124
|
+
const ctx = import_react44.default.useContext(SideBarContext);
|
|
11110
11125
|
if (!ctx) throw new Error("Error");
|
|
11111
11126
|
return ctx;
|
|
11112
11127
|
};
|
|
11113
11128
|
var SideBarContext_default = SideBarContext;
|
|
11114
11129
|
|
|
11115
11130
|
// src/layout/SideBar/SideBar.tsx
|
|
11116
|
-
var
|
|
11131
|
+
var import_jsx_runtime357 = require("react/jsx-runtime");
|
|
11117
11132
|
var SideBar = (props) => {
|
|
11118
11133
|
const { children, className } = props;
|
|
11119
|
-
const [isOpen, setIsOpen] =
|
|
11134
|
+
const [isOpen, setIsOpen] = import_react45.default.useState(true);
|
|
11120
11135
|
const handleSwitchSideBar = () => {
|
|
11121
11136
|
setIsOpen((prev) => !prev);
|
|
11122
11137
|
};
|
|
11123
|
-
return /* @__PURE__ */ (0,
|
|
11138
|
+
return /* @__PURE__ */ (0, import_jsx_runtime357.jsx)(
|
|
11124
11139
|
SideBarContext_default.Provider,
|
|
11125
11140
|
{
|
|
11126
11141
|
value: { isSidebarOpen: isOpen, handleSwitchSideBar },
|
|
11127
|
-
children: /* @__PURE__ */ (0,
|
|
11142
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime357.jsx)(
|
|
11128
11143
|
"div",
|
|
11129
11144
|
{
|
|
11130
11145
|
className: clsx_default(
|
|
@@ -11169,6 +11184,7 @@ var SideBar_default = SideBar;
|
|
|
11169
11184
|
ArrowUpLeftIcon,
|
|
11170
11185
|
ArrowUpRightIcon,
|
|
11171
11186
|
AtSignIcon,
|
|
11187
|
+
AutoResizeTextArea,
|
|
11172
11188
|
Avatar,
|
|
11173
11189
|
AwardIcon,
|
|
11174
11190
|
BREAKPOINT_KEYS_ORDERED,
|