@x-plat/design-system 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AutoResizeTextArea/index.css +3 -1
- package/dist/components/Button/index.css +2 -1
- package/dist/components/Button/index.d.cts +6 -0
- package/dist/components/Button/index.d.ts +6 -0
- package/dist/components/Chart/index.cjs +8 -1
- package/dist/components/Chart/index.js +8 -1
- package/dist/components/ChatInput/index.css +6 -2
- package/dist/components/DatePicker/index.css +5 -2
- package/dist/components/Input/index.css +3 -1
- package/dist/components/Link/index.cjs +64 -0
- package/dist/components/Link/index.css +25 -0
- package/dist/components/Link/index.d.cts +27 -0
- package/dist/components/Link/index.d.ts +27 -0
- package/dist/components/Link/index.js +37 -0
- package/dist/components/LinkButton/index.cjs +64 -0
- package/dist/components/LinkButton/index.css +106 -0
- package/dist/components/LinkButton/index.d.cts +28 -0
- package/dist/components/LinkButton/index.d.ts +28 -0
- package/dist/components/LinkButton/index.js +37 -0
- package/dist/components/Select/index.css +4 -2
- package/dist/components/TextArea/index.css +3 -1
- package/dist/components/Tooltip/index.cjs +77 -32
- package/dist/components/Tooltip/index.d.cts +10 -2
- package/dist/components/Tooltip/index.d.ts +10 -2
- package/dist/components/Tooltip/index.js +77 -32
- package/dist/components/index.cjs +247 -153
- package/dist/components/index.css +44 -7
- package/dist/components/index.d.cts +2 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +222 -130
- package/dist/index.cjs +266 -172
- package/dist/index.css +44 -7
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +239 -147
- package/guidelines/AGENT_PROMPT.md +2 -2
- package/guidelines/Guidelines.md +2 -1
- package/guidelines/components/button.md +54 -0
- package/guidelines/components/card.md +15 -19
- package/guidelines/components/link.md +35 -0
- package/guidelines/components/overlay.md +30 -1
- package/package.json +1 -1
package/dist/components/index.js
CHANGED
|
@@ -2207,9 +2207,16 @@ var useChartTooltip = (enabled) => {
|
|
|
2207
2207
|
}, []);
|
|
2208
2208
|
return { tooltip, show, hide, move, containerRef };
|
|
2209
2209
|
};
|
|
2210
|
+
var formatTick = (value, maxVal) => {
|
|
2211
|
+
const step = maxVal / 4;
|
|
2212
|
+
if (!Number.isFinite(step) || step <= 0) return "0";
|
|
2213
|
+
const decimals = step >= 1 ? 0 : Math.min(4, Math.ceil(-Math.log10(step)));
|
|
2214
|
+
const fixed = value.toFixed(decimals);
|
|
2215
|
+
return decimals === 0 ? Number(fixed).toLocaleString("en-US") : fixed;
|
|
2216
|
+
};
|
|
2210
2217
|
var GridLines = React6.memo(({ width, height, chartH, maxVal }) => /* @__PURE__ */ jsx305(Fragment2, { children: [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
|
|
2211
2218
|
const y = PADDING.top + (1 - ratio) * chartH;
|
|
2212
|
-
const val =
|
|
2219
|
+
const val = formatTick(maxVal * ratio, maxVal);
|
|
2213
2220
|
return /* @__PURE__ */ jsxs195("g", { children: [
|
|
2214
2221
|
/* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
2215
2222
|
/* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
@@ -4807,8 +4814,46 @@ var ImageSelector = (props) => {
|
|
|
4807
4814
|
ImageSelector.displayName = "ImageSelector";
|
|
4808
4815
|
var ImageSelector_default = ImageSelector;
|
|
4809
4816
|
|
|
4817
|
+
// src/components/Link/Link.tsx
|
|
4818
|
+
import { jsx as jsx329 } from "react/jsx-runtime";
|
|
4819
|
+
var Link = (props) => {
|
|
4820
|
+
const { children, href, underline = "always", target, rel, ...rest } = props;
|
|
4821
|
+
return /* @__PURE__ */ jsx329(
|
|
4822
|
+
"a",
|
|
4823
|
+
{
|
|
4824
|
+
className: clsx_default("lib-xplat-link", `underline-${underline}`),
|
|
4825
|
+
href,
|
|
4826
|
+
target,
|
|
4827
|
+
rel: target === "_blank" ? rel ?? "noopener noreferrer" : rel,
|
|
4828
|
+
...rest,
|
|
4829
|
+
children
|
|
4830
|
+
}
|
|
4831
|
+
);
|
|
4832
|
+
};
|
|
4833
|
+
Link.displayName = "Link";
|
|
4834
|
+
var Link_default = Link;
|
|
4835
|
+
|
|
4836
|
+
// src/components/LinkButton/LinkButton.tsx
|
|
4837
|
+
import { jsx as jsx330 } from "react/jsx-runtime";
|
|
4838
|
+
var LinkButton = (props) => {
|
|
4839
|
+
const { children, href, type = "primary", size = "md", target, rel, ...rest } = props;
|
|
4840
|
+
return /* @__PURE__ */ jsx330(
|
|
4841
|
+
"a",
|
|
4842
|
+
{
|
|
4843
|
+
className: clsx_default("lib-xplat-button", type, size),
|
|
4844
|
+
href,
|
|
4845
|
+
target,
|
|
4846
|
+
rel: target === "_blank" ? rel ?? "noopener noreferrer" : rel,
|
|
4847
|
+
...rest,
|
|
4848
|
+
children
|
|
4849
|
+
}
|
|
4850
|
+
);
|
|
4851
|
+
};
|
|
4852
|
+
LinkButton.displayName = "LinkButton";
|
|
4853
|
+
var LinkButton_default = LinkButton;
|
|
4854
|
+
|
|
4810
4855
|
// src/components/NotificationBadge/NotificationBadge.tsx
|
|
4811
|
-
import { jsx as
|
|
4856
|
+
import { jsx as jsx331, jsxs as jsxs211 } from "react/jsx-runtime";
|
|
4812
4857
|
var NotificationBadge = (props) => {
|
|
4813
4858
|
const {
|
|
4814
4859
|
children,
|
|
@@ -4822,14 +4867,14 @@ var NotificationBadge = (props) => {
|
|
|
4822
4867
|
const displayCount = count !== void 0 && count > maxCount ? `${maxCount}+` : count;
|
|
4823
4868
|
return /* @__PURE__ */ jsxs211("div", { className: clsx_default("lib-xplat-notification-badge", size), children: [
|
|
4824
4869
|
children,
|
|
4825
|
-
showBadge && /* @__PURE__ */
|
|
4870
|
+
showBadge && /* @__PURE__ */ jsx331("span", { className: clsx_default("badge-indicator", type, { dot }), children: !dot && displayCount })
|
|
4826
4871
|
] });
|
|
4827
4872
|
};
|
|
4828
4873
|
NotificationBadge.displayName = "NotificationBadge";
|
|
4829
4874
|
var NotificationBadge_default = NotificationBadge;
|
|
4830
4875
|
|
|
4831
4876
|
// src/components/Pagination/Pagination.tsx
|
|
4832
|
-
import { jsx as
|
|
4877
|
+
import { jsx as jsx332, jsxs as jsxs212 } from "react/jsx-runtime";
|
|
4833
4878
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
4834
4879
|
const totalNumbers = siblingCount * 2 + 5;
|
|
4835
4880
|
if (totalPages <= totalNumbers) {
|
|
@@ -4873,18 +4918,18 @@ var Pagination = (props) => {
|
|
|
4873
4918
|
}
|
|
4874
4919
|
};
|
|
4875
4920
|
return /* @__PURE__ */ jsxs212("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
4876
|
-
/* @__PURE__ */
|
|
4921
|
+
/* @__PURE__ */ jsx332(
|
|
4877
4922
|
"button",
|
|
4878
4923
|
{
|
|
4879
4924
|
className: "page-btn prev",
|
|
4880
4925
|
disabled: current <= 1,
|
|
4881
4926
|
onClick: () => handleClick(current - 1),
|
|
4882
4927
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
4883
|
-
children: /* @__PURE__ */
|
|
4928
|
+
children: /* @__PURE__ */ jsx332(ChevronLeftIcon_default, {})
|
|
4884
4929
|
}
|
|
4885
4930
|
),
|
|
4886
4931
|
pages.map(
|
|
4887
|
-
(page, i) => page === "..." ? /* @__PURE__ */
|
|
4932
|
+
(page, i) => page === "..." ? /* @__PURE__ */ jsx332("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ jsx332(
|
|
4888
4933
|
"button",
|
|
4889
4934
|
{
|
|
4890
4935
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -4895,14 +4940,14 @@ var Pagination = (props) => {
|
|
|
4895
4940
|
page
|
|
4896
4941
|
)
|
|
4897
4942
|
),
|
|
4898
|
-
/* @__PURE__ */
|
|
4943
|
+
/* @__PURE__ */ jsx332(
|
|
4899
4944
|
"button",
|
|
4900
4945
|
{
|
|
4901
4946
|
className: "page-btn next",
|
|
4902
4947
|
disabled: current >= totalPages,
|
|
4903
4948
|
onClick: () => handleClick(current + 1),
|
|
4904
4949
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
4905
|
-
children: /* @__PURE__ */
|
|
4950
|
+
children: /* @__PURE__ */ jsx332(ChevronRightIcon_default, {})
|
|
4906
4951
|
}
|
|
4907
4952
|
)
|
|
4908
4953
|
] });
|
|
@@ -4912,7 +4957,7 @@ var Pagination_default = Pagination;
|
|
|
4912
4957
|
|
|
4913
4958
|
// src/components/PopOver/PopOver.tsx
|
|
4914
4959
|
import React27 from "react";
|
|
4915
|
-
import { jsx as
|
|
4960
|
+
import { jsx as jsx333, jsxs as jsxs213 } from "react/jsx-runtime";
|
|
4916
4961
|
var PopOver = (props) => {
|
|
4917
4962
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
4918
4963
|
const popRef = React27.useRef(null);
|
|
@@ -4944,7 +4989,7 @@ var PopOver = (props) => {
|
|
|
4944
4989
|
},
|
|
4945
4990
|
children: [
|
|
4946
4991
|
children,
|
|
4947
|
-
localOpen && /* @__PURE__ */
|
|
4992
|
+
localOpen && /* @__PURE__ */ jsx333(Portal_default, { children: /* @__PURE__ */ jsx333(
|
|
4948
4993
|
"div",
|
|
4949
4994
|
{
|
|
4950
4995
|
className: clsx_default(
|
|
@@ -4967,7 +5012,7 @@ PopOver.displayName = "PopOver";
|
|
|
4967
5012
|
var PopOver_default = PopOver;
|
|
4968
5013
|
|
|
4969
5014
|
// src/components/Progress/Progress.tsx
|
|
4970
|
-
import { jsx as
|
|
5015
|
+
import { jsx as jsx334, jsxs as jsxs214 } from "react/jsx-runtime";
|
|
4971
5016
|
var Progress = (props) => {
|
|
4972
5017
|
const {
|
|
4973
5018
|
value,
|
|
@@ -4978,7 +5023,7 @@ var Progress = (props) => {
|
|
|
4978
5023
|
} = props;
|
|
4979
5024
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
4980
5025
|
return /* @__PURE__ */ jsxs214("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
4981
|
-
/* @__PURE__ */
|
|
5026
|
+
/* @__PURE__ */ jsx334(
|
|
4982
5027
|
"div",
|
|
4983
5028
|
{
|
|
4984
5029
|
className: "track",
|
|
@@ -4986,7 +5031,7 @@ var Progress = (props) => {
|
|
|
4986
5031
|
"aria-valuenow": value,
|
|
4987
5032
|
"aria-valuemin": 0,
|
|
4988
5033
|
"aria-valuemax": max,
|
|
4989
|
-
children: /* @__PURE__ */
|
|
5034
|
+
children: /* @__PURE__ */ jsx334(
|
|
4990
5035
|
"div",
|
|
4991
5036
|
{
|
|
4992
5037
|
className: "bar",
|
|
@@ -5015,7 +5060,7 @@ var useRadioGroupContext = () => {
|
|
|
5015
5060
|
var RadioGroupContext_default = RadioGroupContext;
|
|
5016
5061
|
|
|
5017
5062
|
// src/components/Radio/Radio.tsx
|
|
5018
|
-
import { jsx as
|
|
5063
|
+
import { jsx as jsx335, jsxs as jsxs215 } from "react/jsx-runtime";
|
|
5019
5064
|
var Radio = (props) => {
|
|
5020
5065
|
const {
|
|
5021
5066
|
label,
|
|
@@ -5045,18 +5090,18 @@ var Radio = (props) => {
|
|
|
5045
5090
|
className
|
|
5046
5091
|
),
|
|
5047
5092
|
children: [
|
|
5048
|
-
/* @__PURE__ */
|
|
5049
|
-
/* @__PURE__ */
|
|
5093
|
+
/* @__PURE__ */ jsx335("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
5094
|
+
/* @__PURE__ */ jsx335(
|
|
5050
5095
|
"div",
|
|
5051
5096
|
{
|
|
5052
5097
|
className: clsx_default(
|
|
5053
5098
|
"circle",
|
|
5054
5099
|
localChecked ? "checked" : void 0
|
|
5055
5100
|
),
|
|
5056
|
-
children: localChecked && /* @__PURE__ */
|
|
5101
|
+
children: localChecked && /* @__PURE__ */ jsx335("div", { className: "inner-circle" })
|
|
5057
5102
|
}
|
|
5058
5103
|
),
|
|
5059
|
-
label && /* @__PURE__ */
|
|
5104
|
+
label && /* @__PURE__ */ jsx335("span", { children: label })
|
|
5060
5105
|
]
|
|
5061
5106
|
}
|
|
5062
5107
|
);
|
|
@@ -5065,10 +5110,10 @@ Radio.displayName = "Radio";
|
|
|
5065
5110
|
var Radio_default = Radio;
|
|
5066
5111
|
|
|
5067
5112
|
// src/components/Radio/RadioGroup.tsx
|
|
5068
|
-
import { Fragment as Fragment4, jsx as
|
|
5113
|
+
import { Fragment as Fragment4, jsx as jsx336 } from "react/jsx-runtime";
|
|
5069
5114
|
var RadioGroup = (props) => {
|
|
5070
5115
|
const { children, ...rest } = props;
|
|
5071
|
-
return /* @__PURE__ */
|
|
5116
|
+
return /* @__PURE__ */ jsx336(Fragment4, { children: /* @__PURE__ */ jsx336(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
5072
5117
|
};
|
|
5073
5118
|
RadioGroup.displayName = "RadioGroup";
|
|
5074
5119
|
var RadioGroup_default = RadioGroup;
|
|
@@ -5083,7 +5128,7 @@ var context_default = SelectContext;
|
|
|
5083
5128
|
|
|
5084
5129
|
// src/components/Select/SelectItem.tsx
|
|
5085
5130
|
import React30 from "react";
|
|
5086
|
-
import { jsx as
|
|
5131
|
+
import { jsx as jsx337 } from "react/jsx-runtime";
|
|
5087
5132
|
var SelectItem = (props) => {
|
|
5088
5133
|
const { children, value, onClick, disabled = false } = props;
|
|
5089
5134
|
const ctx = React30.useContext(context_default);
|
|
@@ -5096,7 +5141,7 @@ var SelectItem = (props) => {
|
|
|
5096
5141
|
onClick?.();
|
|
5097
5142
|
};
|
|
5098
5143
|
const isSelected = value !== void 0 ? ctx?.selectedValue === value : ctx?.selectedLabel === children;
|
|
5099
|
-
return /* @__PURE__ */
|
|
5144
|
+
return /* @__PURE__ */ jsx337(
|
|
5100
5145
|
"div",
|
|
5101
5146
|
{
|
|
5102
5147
|
className: clsx_default("select-item", disabled && "disabled", isSelected && "is-selected"),
|
|
@@ -5117,7 +5162,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
5117
5162
|
var SelectItem_default = SelectItem;
|
|
5118
5163
|
|
|
5119
5164
|
// src/components/Select/Select.tsx
|
|
5120
|
-
import { jsx as
|
|
5165
|
+
import { jsx as jsx338, jsxs as jsxs216 } from "react/jsx-runtime";
|
|
5121
5166
|
var ANIMATION_DURATION_MS3 = 200;
|
|
5122
5167
|
var SelectRoot = (props) => {
|
|
5123
5168
|
const {
|
|
@@ -5197,7 +5242,7 @@ var SelectRoot = (props) => {
|
|
|
5197
5242
|
if (disabled) return;
|
|
5198
5243
|
toggle();
|
|
5199
5244
|
};
|
|
5200
|
-
return /* @__PURE__ */
|
|
5245
|
+
return /* @__PURE__ */ jsx338(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs216(
|
|
5201
5246
|
"div",
|
|
5202
5247
|
{
|
|
5203
5248
|
className: clsx_default(
|
|
@@ -5232,7 +5277,7 @@ var SelectRoot = (props) => {
|
|
|
5232
5277
|
}
|
|
5233
5278
|
},
|
|
5234
5279
|
children: [
|
|
5235
|
-
/* @__PURE__ */
|
|
5280
|
+
/* @__PURE__ */ jsx338(
|
|
5236
5281
|
"span",
|
|
5237
5282
|
{
|
|
5238
5283
|
className: clsx_default(
|
|
@@ -5242,25 +5287,25 @@ var SelectRoot = (props) => {
|
|
|
5242
5287
|
children: selectedLabel ?? placeholder
|
|
5243
5288
|
}
|
|
5244
5289
|
),
|
|
5245
|
-
/* @__PURE__ */
|
|
5290
|
+
/* @__PURE__ */ jsx338(
|
|
5246
5291
|
"span",
|
|
5247
5292
|
{
|
|
5248
5293
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
5249
5294
|
"aria-hidden": true,
|
|
5250
|
-
children: /* @__PURE__ */
|
|
5295
|
+
children: /* @__PURE__ */ jsx338(ChevronDownIcon_default, {})
|
|
5251
5296
|
}
|
|
5252
5297
|
)
|
|
5253
5298
|
]
|
|
5254
5299
|
}
|
|
5255
5300
|
),
|
|
5256
|
-
mounted && /* @__PURE__ */
|
|
5301
|
+
mounted && /* @__PURE__ */ jsx338(Portal_default, { children: /* @__PURE__ */ jsx338(
|
|
5257
5302
|
"div",
|
|
5258
5303
|
{
|
|
5259
5304
|
className: clsx_default("lib-xplat-select-content", size, position.direction, stateClass),
|
|
5260
5305
|
ref: contentRef,
|
|
5261
5306
|
style: { ...position.position, width: triggerRef.current?.offsetWidth },
|
|
5262
5307
|
role: "listbox",
|
|
5263
|
-
children: /* @__PURE__ */
|
|
5308
|
+
children: /* @__PURE__ */ jsx338(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
5264
5309
|
}
|
|
5265
5310
|
) })
|
|
5266
5311
|
]
|
|
@@ -5274,7 +5319,7 @@ var Select = Object.assign(SelectRoot, {
|
|
|
5274
5319
|
var Select_default = Select;
|
|
5275
5320
|
|
|
5276
5321
|
// src/components/Skeleton/Skeleton.tsx
|
|
5277
|
-
import { jsx as
|
|
5322
|
+
import { jsx as jsx339 } from "react/jsx-runtime";
|
|
5278
5323
|
var SIZE_MAP = {
|
|
5279
5324
|
xs: "var(--spacing-space-1)",
|
|
5280
5325
|
sm: "var(--spacing-space-2)",
|
|
@@ -5290,7 +5335,7 @@ var Skeleton = (props) => {
|
|
|
5290
5335
|
...width != null && { width: SIZE_MAP[width] },
|
|
5291
5336
|
...height != null && { height: SIZE_MAP[height] }
|
|
5292
5337
|
};
|
|
5293
|
-
return /* @__PURE__ */
|
|
5338
|
+
return /* @__PURE__ */ jsx339(
|
|
5294
5339
|
"div",
|
|
5295
5340
|
{
|
|
5296
5341
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -5303,20 +5348,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
5303
5348
|
var Skeleton_default = Skeleton;
|
|
5304
5349
|
|
|
5305
5350
|
// src/components/Spinner/Spinner.tsx
|
|
5306
|
-
import { jsx as
|
|
5351
|
+
import { jsx as jsx340, jsxs as jsxs217 } from "react/jsx-runtime";
|
|
5307
5352
|
var Spinner = (props) => {
|
|
5308
5353
|
const {
|
|
5309
5354
|
size = "md",
|
|
5310
5355
|
type = "brand"
|
|
5311
5356
|
} = props;
|
|
5312
|
-
return /* @__PURE__ */
|
|
5357
|
+
return /* @__PURE__ */ jsx340(
|
|
5313
5358
|
"div",
|
|
5314
5359
|
{
|
|
5315
5360
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
5316
5361
|
role: "status",
|
|
5317
5362
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
5318
5363
|
children: /* @__PURE__ */ jsxs217("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
5319
|
-
/* @__PURE__ */
|
|
5364
|
+
/* @__PURE__ */ jsx340(
|
|
5320
5365
|
"circle",
|
|
5321
5366
|
{
|
|
5322
5367
|
className: "track",
|
|
@@ -5326,7 +5371,7 @@ var Spinner = (props) => {
|
|
|
5326
5371
|
strokeWidth: "3"
|
|
5327
5372
|
}
|
|
5328
5373
|
),
|
|
5329
|
-
/* @__PURE__ */
|
|
5374
|
+
/* @__PURE__ */ jsx340(
|
|
5330
5375
|
"circle",
|
|
5331
5376
|
{
|
|
5332
5377
|
className: "indicator",
|
|
@@ -5345,20 +5390,20 @@ Spinner.displayName = "Spinner";
|
|
|
5345
5390
|
var Spinner_default = Spinner;
|
|
5346
5391
|
|
|
5347
5392
|
// src/components/Steps/Steps.tsx
|
|
5348
|
-
import { jsx as
|
|
5393
|
+
import { jsx as jsx341, jsxs as jsxs218 } from "react/jsx-runtime";
|
|
5349
5394
|
var Steps = (props) => {
|
|
5350
5395
|
const {
|
|
5351
5396
|
items,
|
|
5352
5397
|
current,
|
|
5353
5398
|
type = "brand"
|
|
5354
5399
|
} = props;
|
|
5355
|
-
return /* @__PURE__ */
|
|
5400
|
+
return /* @__PURE__ */ jsx341("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
5356
5401
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
5357
5402
|
return /* @__PURE__ */ jsxs218("div", { className: clsx_default("step-item", status), children: [
|
|
5358
|
-
/* @__PURE__ */
|
|
5403
|
+
/* @__PURE__ */ jsx341("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ jsx341(CheckIcon_default, {}) : /* @__PURE__ */ jsx341("span", { children: index + 1 }) }),
|
|
5359
5404
|
/* @__PURE__ */ jsxs218("div", { className: "step-content", children: [
|
|
5360
|
-
/* @__PURE__ */
|
|
5361
|
-
item.description && /* @__PURE__ */
|
|
5405
|
+
/* @__PURE__ */ jsx341("span", { className: "step-title", children: item.title }),
|
|
5406
|
+
item.description && /* @__PURE__ */ jsx341("span", { className: "step-description", children: item.description })
|
|
5362
5407
|
] })
|
|
5363
5408
|
] }, index);
|
|
5364
5409
|
}) });
|
|
@@ -5368,7 +5413,7 @@ var Steps_default = Steps;
|
|
|
5368
5413
|
|
|
5369
5414
|
// src/components/Swiper/Swiper.tsx
|
|
5370
5415
|
import React32 from "react";
|
|
5371
|
-
import { jsx as
|
|
5416
|
+
import { jsx as jsx342, jsxs as jsxs219 } from "react/jsx-runtime";
|
|
5372
5417
|
var Swiper = (props) => {
|
|
5373
5418
|
const {
|
|
5374
5419
|
auto = false,
|
|
@@ -5597,7 +5642,7 @@ var Swiper = (props) => {
|
|
|
5597
5642
|
const slideWidthPercent = 100 / viewItemCount;
|
|
5598
5643
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
5599
5644
|
const slideElements = React32.useMemo(
|
|
5600
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */
|
|
5645
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ jsx342(
|
|
5601
5646
|
"div",
|
|
5602
5647
|
{
|
|
5603
5648
|
className: "lib-xplat-swiper__slide",
|
|
@@ -5617,14 +5662,14 @@ var Swiper = (props) => {
|
|
|
5617
5662
|
totalSteps - 1
|
|
5618
5663
|
);
|
|
5619
5664
|
return /* @__PURE__ */ jsxs219("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
5620
|
-
/* @__PURE__ */
|
|
5665
|
+
/* @__PURE__ */ jsx342(
|
|
5621
5666
|
"div",
|
|
5622
5667
|
{
|
|
5623
5668
|
className: "lib-xplat-swiper__viewport",
|
|
5624
5669
|
onMouseDown: handleDragStart,
|
|
5625
5670
|
onTouchStart: handleDragStart,
|
|
5626
5671
|
onDragStart: (e) => e.preventDefault(),
|
|
5627
|
-
children: /* @__PURE__ */
|
|
5672
|
+
children: /* @__PURE__ */ jsx342(
|
|
5628
5673
|
"div",
|
|
5629
5674
|
{
|
|
5630
5675
|
className: clsx_default(
|
|
@@ -5642,7 +5687,7 @@ var Swiper = (props) => {
|
|
|
5642
5687
|
)
|
|
5643
5688
|
}
|
|
5644
5689
|
),
|
|
5645
|
-
showProgress && canSlide && /* @__PURE__ */
|
|
5690
|
+
showProgress && canSlide && /* @__PURE__ */ jsx342("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ jsx342("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ jsx342(
|
|
5646
5691
|
"span",
|
|
5647
5692
|
{
|
|
5648
5693
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -5652,7 +5697,7 @@ var Swiper = (props) => {
|
|
|
5652
5697
|
}
|
|
5653
5698
|
}
|
|
5654
5699
|
) }) }),
|
|
5655
|
-
canSlide && /* @__PURE__ */
|
|
5700
|
+
canSlide && /* @__PURE__ */ jsx342("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ jsx342(
|
|
5656
5701
|
"button",
|
|
5657
5702
|
{
|
|
5658
5703
|
className: clsx_default(
|
|
@@ -5671,7 +5716,7 @@ var Swiper_default = Swiper;
|
|
|
5671
5716
|
|
|
5672
5717
|
// src/components/Switch/Switch.tsx
|
|
5673
5718
|
import React33 from "react";
|
|
5674
|
-
import { jsx as
|
|
5719
|
+
import { jsx as jsx343 } from "react/jsx-runtime";
|
|
5675
5720
|
var KNOB_TRANSITION_MS = 250;
|
|
5676
5721
|
var Switch = (props) => {
|
|
5677
5722
|
const {
|
|
@@ -5698,7 +5743,7 @@ var Switch = (props) => {
|
|
|
5698
5743
|
timeoutRef.current = null;
|
|
5699
5744
|
}, KNOB_TRANSITION_MS);
|
|
5700
5745
|
};
|
|
5701
|
-
return /* @__PURE__ */
|
|
5746
|
+
return /* @__PURE__ */ jsx343(
|
|
5702
5747
|
"div",
|
|
5703
5748
|
{
|
|
5704
5749
|
className: clsx_default(
|
|
@@ -5711,7 +5756,7 @@ var Switch = (props) => {
|
|
|
5711
5756
|
),
|
|
5712
5757
|
onClick: handleClick,
|
|
5713
5758
|
"aria-disabled": disabled || isAnimating,
|
|
5714
|
-
children: /* @__PURE__ */
|
|
5759
|
+
children: /* @__PURE__ */ jsx343("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
5715
5760
|
}
|
|
5716
5761
|
);
|
|
5717
5762
|
};
|
|
@@ -5729,7 +5774,7 @@ var useTableContext = () => {
|
|
|
5729
5774
|
var TableContext_default = TableContext;
|
|
5730
5775
|
|
|
5731
5776
|
// src/components/Table/Table.tsx
|
|
5732
|
-
import { jsx as
|
|
5777
|
+
import { jsx as jsx344 } from "react/jsx-runtime";
|
|
5733
5778
|
var Table = (props) => {
|
|
5734
5779
|
const {
|
|
5735
5780
|
children,
|
|
@@ -5739,7 +5784,7 @@ var Table = (props) => {
|
|
|
5739
5784
|
headerSticky = false,
|
|
5740
5785
|
stickyShadow = true
|
|
5741
5786
|
} = props;
|
|
5742
|
-
return /* @__PURE__ */
|
|
5787
|
+
return /* @__PURE__ */ jsx344("div", { className: `lib-xplat-table-wrapper ${size}`, children: /* @__PURE__ */ jsx344(
|
|
5743
5788
|
TableContext_default.Provider,
|
|
5744
5789
|
{
|
|
5745
5790
|
value: {
|
|
@@ -5748,7 +5793,7 @@ var Table = (props) => {
|
|
|
5748
5793
|
headerSticky,
|
|
5749
5794
|
stickyShadow
|
|
5750
5795
|
},
|
|
5751
|
-
children: /* @__PURE__ */
|
|
5796
|
+
children: /* @__PURE__ */ jsx344("table", { className: "lib-xplat-table", children })
|
|
5752
5797
|
}
|
|
5753
5798
|
) });
|
|
5754
5799
|
};
|
|
@@ -5756,10 +5801,10 @@ Table.displayName = "Table";
|
|
|
5756
5801
|
var Table_default = Table;
|
|
5757
5802
|
|
|
5758
5803
|
// src/components/Table/TableBody.tsx
|
|
5759
|
-
import { jsx as
|
|
5804
|
+
import { jsx as jsx345 } from "react/jsx-runtime";
|
|
5760
5805
|
var TableBody = (props) => {
|
|
5761
5806
|
const { children } = props;
|
|
5762
|
-
return /* @__PURE__ */
|
|
5807
|
+
return /* @__PURE__ */ jsx345("tbody", { children });
|
|
5763
5808
|
};
|
|
5764
5809
|
TableBody.displayName = "TableBody";
|
|
5765
5810
|
var TableBody_default = TableBody;
|
|
@@ -5789,7 +5834,7 @@ var useTableRowContext = () => {
|
|
|
5789
5834
|
var TableRowContext_default = TableRowContext;
|
|
5790
5835
|
|
|
5791
5836
|
// src/components/Table/TableCell.tsx
|
|
5792
|
-
import { jsx as
|
|
5837
|
+
import { jsx as jsx346 } from "react/jsx-runtime";
|
|
5793
5838
|
var TableCell = React37.memo((props) => {
|
|
5794
5839
|
const {
|
|
5795
5840
|
children,
|
|
@@ -5834,7 +5879,7 @@ var TableCell = React37.memo((props) => {
|
|
|
5834
5879
|
const CellTag = isHeaderCell ? "th" : "td";
|
|
5835
5880
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
5836
5881
|
const enableHover = headContext && headContext.cellHover;
|
|
5837
|
-
return /* @__PURE__ */
|
|
5882
|
+
return /* @__PURE__ */ jsx346(
|
|
5838
5883
|
CellTag,
|
|
5839
5884
|
{
|
|
5840
5885
|
ref: cellRef,
|
|
@@ -5861,20 +5906,20 @@ TableCell.displayName = "TableCell";
|
|
|
5861
5906
|
var TableCell_default = TableCell;
|
|
5862
5907
|
|
|
5863
5908
|
// src/components/Table/TableHead.tsx
|
|
5864
|
-
import { jsx as
|
|
5909
|
+
import { jsx as jsx347 } from "react/jsx-runtime";
|
|
5865
5910
|
var TableHead = ({
|
|
5866
5911
|
children,
|
|
5867
5912
|
cellHover = false
|
|
5868
5913
|
}) => {
|
|
5869
5914
|
const { headerSticky } = useTableContext();
|
|
5870
|
-
return /* @__PURE__ */
|
|
5915
|
+
return /* @__PURE__ */ jsx347(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ jsx347("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
|
|
5871
5916
|
};
|
|
5872
5917
|
TableHead.displayName = "TableHead";
|
|
5873
5918
|
var TableHead_default = TableHead;
|
|
5874
5919
|
|
|
5875
5920
|
// src/components/Table/TableRow.tsx
|
|
5876
5921
|
import React38 from "react";
|
|
5877
|
-
import { jsx as
|
|
5922
|
+
import { jsx as jsx348 } from "react/jsx-runtime";
|
|
5878
5923
|
var TableRow = React38.memo((props) => {
|
|
5879
5924
|
const {
|
|
5880
5925
|
children,
|
|
@@ -5891,7 +5936,7 @@ var TableRow = React38.memo((props) => {
|
|
|
5891
5936
|
return [...prev, ref];
|
|
5892
5937
|
});
|
|
5893
5938
|
};
|
|
5894
|
-
return /* @__PURE__ */
|
|
5939
|
+
return /* @__PURE__ */ jsx348(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ jsx348(
|
|
5895
5940
|
"tr",
|
|
5896
5941
|
{
|
|
5897
5942
|
className: clsx_default(
|
|
@@ -5915,7 +5960,7 @@ TableRow.displayName = "TableRow";
|
|
|
5915
5960
|
var TableRow_default = TableRow;
|
|
5916
5961
|
|
|
5917
5962
|
// src/components/Tag/Tag.tsx
|
|
5918
|
-
import { jsx as
|
|
5963
|
+
import { jsx as jsx349, jsxs as jsxs220 } from "react/jsx-runtime";
|
|
5919
5964
|
var Tag = (props) => {
|
|
5920
5965
|
const {
|
|
5921
5966
|
children,
|
|
@@ -5936,8 +5981,8 @@ var Tag = (props) => {
|
|
|
5936
5981
|
disabled && "disabled"
|
|
5937
5982
|
),
|
|
5938
5983
|
children: [
|
|
5939
|
-
/* @__PURE__ */
|
|
5940
|
-
onClose && /* @__PURE__ */
|
|
5984
|
+
/* @__PURE__ */ jsx349("span", { className: "tag-label", children }),
|
|
5985
|
+
onClose && /* @__PURE__ */ jsx349("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ jsx349(XIcon_default, {}) })
|
|
5941
5986
|
]
|
|
5942
5987
|
}
|
|
5943
5988
|
);
|
|
@@ -5947,7 +5992,7 @@ var Tag_default = Tag;
|
|
|
5947
5992
|
|
|
5948
5993
|
// src/components/TextArea/TextArea.tsx
|
|
5949
5994
|
import React39 from "react";
|
|
5950
|
-
import { jsx as
|
|
5995
|
+
import { jsx as jsx350 } from "react/jsx-runtime";
|
|
5951
5996
|
var TextArea = React39.forwardRef(
|
|
5952
5997
|
(props, ref) => {
|
|
5953
5998
|
const {
|
|
@@ -5958,7 +6003,7 @@ var TextArea = React39.forwardRef(
|
|
|
5958
6003
|
disabled,
|
|
5959
6004
|
...textareaProps
|
|
5960
6005
|
} = props;
|
|
5961
|
-
return /* @__PURE__ */
|
|
6006
|
+
return /* @__PURE__ */ jsx350("div", { className: clsx_default("lib-xplat-textarea-wrap", className), children: /* @__PURE__ */ jsx350(
|
|
5962
6007
|
"textarea",
|
|
5963
6008
|
{
|
|
5964
6009
|
...textareaProps,
|
|
@@ -5977,7 +6022,7 @@ var TextArea_default = TextArea;
|
|
|
5977
6022
|
// src/components/Toast/Toast.tsx
|
|
5978
6023
|
import React40 from "react";
|
|
5979
6024
|
import { createPortal as createPortal3 } from "react-dom";
|
|
5980
|
-
import { jsx as
|
|
6025
|
+
import { jsx as jsx351, jsxs as jsxs221 } from "react/jsx-runtime";
|
|
5981
6026
|
var ToastContext = React40.createContext(null);
|
|
5982
6027
|
var useToast = () => {
|
|
5983
6028
|
const ctx = React40.useContext(ToastContext);
|
|
@@ -5993,7 +6038,7 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
5993
6038
|
setHeight(ref.current.offsetHeight);
|
|
5994
6039
|
}
|
|
5995
6040
|
}, [isExiting]);
|
|
5996
|
-
return /* @__PURE__ */
|
|
6041
|
+
return /* @__PURE__ */ jsx351(
|
|
5997
6042
|
"div",
|
|
5998
6043
|
{
|
|
5999
6044
|
className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
|
|
@@ -6008,8 +6053,8 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
6008
6053
|
className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
|
|
6009
6054
|
role: "alert",
|
|
6010
6055
|
children: [
|
|
6011
|
-
/* @__PURE__ */
|
|
6012
|
-
/* @__PURE__ */
|
|
6056
|
+
/* @__PURE__ */ jsx351("span", { className: "message", children: item.message }),
|
|
6057
|
+
/* @__PURE__ */ jsx351("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
6013
6058
|
]
|
|
6014
6059
|
}
|
|
6015
6060
|
)
|
|
@@ -6050,7 +6095,7 @@ var ToastProvider = ({
|
|
|
6050
6095
|
return /* @__PURE__ */ jsxs221(ToastContext.Provider, { value: { toast }, children: [
|
|
6051
6096
|
children,
|
|
6052
6097
|
mounted && createPortal3(
|
|
6053
|
-
/* @__PURE__ */
|
|
6098
|
+
/* @__PURE__ */ jsx351("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ jsx351(
|
|
6054
6099
|
ToastItemComponent,
|
|
6055
6100
|
{
|
|
6056
6101
|
item: t,
|
|
@@ -6067,15 +6112,17 @@ ToastProvider.displayName = "ToastProvider";
|
|
|
6067
6112
|
|
|
6068
6113
|
// src/components/Tooltip/Tooltip.tsx
|
|
6069
6114
|
import React41 from "react";
|
|
6070
|
-
import { Fragment as Fragment5, jsx as
|
|
6115
|
+
import { Fragment as Fragment5, jsx as jsx352, jsxs as jsxs222 } from "react/jsx-runtime";
|
|
6071
6116
|
var OFFSET = 12;
|
|
6117
|
+
var GAP = 8;
|
|
6072
6118
|
var SHOW_DELAY = 300;
|
|
6073
6119
|
var Tooltip = (props) => {
|
|
6074
6120
|
const {
|
|
6075
|
-
|
|
6121
|
+
children,
|
|
6076
6122
|
title,
|
|
6077
6123
|
description,
|
|
6078
|
-
|
|
6124
|
+
type = "dark",
|
|
6125
|
+
follow = false,
|
|
6079
6126
|
disabled = false
|
|
6080
6127
|
} = props;
|
|
6081
6128
|
const triggerRef = React41.useRef(null);
|
|
@@ -6083,50 +6130,92 @@ var Tooltip = (props) => {
|
|
|
6083
6130
|
const [visible, setVisible] = React41.useState(false);
|
|
6084
6131
|
const [pos, setPos] = React41.useState({ left: 0, top: 0 });
|
|
6085
6132
|
const delayTimer = React41.useRef(0);
|
|
6086
|
-
const
|
|
6133
|
+
const rafRef = React41.useRef(0);
|
|
6134
|
+
const cursor = React41.useRef(null);
|
|
6135
|
+
const clamp = React41.useCallback((left, top, w, h) => {
|
|
6136
|
+
const vw = window.innerWidth;
|
|
6137
|
+
const vh = window.innerHeight;
|
|
6138
|
+
return {
|
|
6139
|
+
left: Math.min(Math.max(GAP, left), Math.max(GAP, vw - w - GAP)),
|
|
6140
|
+
top: Math.min(Math.max(GAP, top), Math.max(GAP, vh - h - GAP))
|
|
6141
|
+
};
|
|
6142
|
+
}, []);
|
|
6143
|
+
const placeAtCursor = React41.useCallback((x, y) => {
|
|
6087
6144
|
const el = tooltipRef.current;
|
|
6088
6145
|
if (!el) return;
|
|
6089
6146
|
const w = el.offsetWidth;
|
|
6090
6147
|
const h = el.offsetHeight;
|
|
6091
|
-
|
|
6092
|
-
let
|
|
6093
|
-
|
|
6094
|
-
if (
|
|
6095
|
-
|
|
6096
|
-
|
|
6097
|
-
|
|
6098
|
-
|
|
6099
|
-
|
|
6148
|
+
let left = x + OFFSET;
|
|
6149
|
+
let top = y - h - OFFSET;
|
|
6150
|
+
if (left + w > window.innerWidth - GAP) left = x - w - OFFSET;
|
|
6151
|
+
if (top < GAP) top = y + OFFSET;
|
|
6152
|
+
setPos(clamp(left, top, w, h));
|
|
6153
|
+
}, [clamp]);
|
|
6154
|
+
const placeAtTrigger = React41.useCallback(() => {
|
|
6155
|
+
const el = tooltipRef.current;
|
|
6156
|
+
const trigger = triggerRef.current;
|
|
6157
|
+
if (!el || !trigger) return;
|
|
6158
|
+
const w = el.offsetWidth;
|
|
6159
|
+
const h = el.offsetHeight;
|
|
6160
|
+
const rect = trigger.getBoundingClientRect();
|
|
6161
|
+
let top = rect.top - h - GAP;
|
|
6162
|
+
if (top < GAP) top = rect.bottom + GAP;
|
|
6163
|
+
const left = rect.left + rect.width / 2 - w / 2;
|
|
6164
|
+
setPos(clamp(left, top, w, h));
|
|
6165
|
+
}, [clamp]);
|
|
6166
|
+
const reposition = React41.useCallback(() => {
|
|
6167
|
+
if (follow && cursor.current) {
|
|
6168
|
+
placeAtCursor(cursor.current.x, cursor.current.y);
|
|
6169
|
+
} else {
|
|
6170
|
+
placeAtTrigger();
|
|
6171
|
+
}
|
|
6172
|
+
}, [follow, placeAtCursor, placeAtTrigger]);
|
|
6173
|
+
const handleMouseEnter = React41.useCallback((e) => {
|
|
6100
6174
|
if (disabled) return;
|
|
6101
|
-
|
|
6102
|
-
|
|
6103
|
-
}, SHOW_DELAY);
|
|
6175
|
+
cursor.current = { x: e.clientX, y: e.clientY };
|
|
6176
|
+
delayTimer.current = window.setTimeout(() => setVisible(true), SHOW_DELAY);
|
|
6104
6177
|
}, [disabled]);
|
|
6105
6178
|
const handleMouseMove = React41.useCallback((e) => {
|
|
6106
|
-
|
|
6107
|
-
|
|
6108
|
-
|
|
6109
|
-
|
|
6110
|
-
|
|
6111
|
-
|
|
6112
|
-
}, []);
|
|
6113
|
-
const
|
|
6179
|
+
cursor.current = { x: e.clientX, y: e.clientY };
|
|
6180
|
+
if (!visible || !follow) return;
|
|
6181
|
+
cancelAnimationFrame(rafRef.current);
|
|
6182
|
+
rafRef.current = requestAnimationFrame(() => {
|
|
6183
|
+
if (cursor.current) placeAtCursor(cursor.current.x, cursor.current.y);
|
|
6184
|
+
});
|
|
6185
|
+
}, [visible, follow, placeAtCursor]);
|
|
6186
|
+
const close = React41.useCallback(() => {
|
|
6114
6187
|
window.clearTimeout(delayTimer.current);
|
|
6188
|
+
cancelAnimationFrame(rafRef.current);
|
|
6115
6189
|
setVisible(false);
|
|
6116
6190
|
}, []);
|
|
6191
|
+
const handleMouseLeave = React41.useCallback(() => {
|
|
6192
|
+
cursor.current = null;
|
|
6193
|
+
close();
|
|
6194
|
+
}, [close]);
|
|
6117
6195
|
const handleFocus = React41.useCallback(() => {
|
|
6118
6196
|
if (disabled) return;
|
|
6197
|
+
cursor.current = null;
|
|
6119
6198
|
setVisible(true);
|
|
6120
6199
|
}, [disabled]);
|
|
6121
|
-
const handleBlur = React41.useCallback(() => {
|
|
6122
|
-
setVisible(false);
|
|
6123
|
-
}, []);
|
|
6124
6200
|
React41.useLayoutEffect(() => {
|
|
6125
|
-
if (!visible
|
|
6126
|
-
|
|
6127
|
-
|
|
6128
|
-
|
|
6129
|
-
|
|
6201
|
+
if (!visible) return;
|
|
6202
|
+
reposition();
|
|
6203
|
+
}, [visible, reposition]);
|
|
6204
|
+
React41.useEffect(() => {
|
|
6205
|
+
if (!visible || follow) return;
|
|
6206
|
+
const onChange = () => placeAtTrigger();
|
|
6207
|
+
window.addEventListener("scroll", onChange, true);
|
|
6208
|
+
window.addEventListener("resize", onChange);
|
|
6209
|
+
return () => {
|
|
6210
|
+
window.removeEventListener("scroll", onChange, true);
|
|
6211
|
+
window.removeEventListener("resize", onChange);
|
|
6212
|
+
};
|
|
6213
|
+
}, [visible, follow, placeAtTrigger]);
|
|
6214
|
+
React41.useEffect(() => () => {
|
|
6215
|
+
window.clearTimeout(delayTimer.current);
|
|
6216
|
+
cancelAnimationFrame(rafRef.current);
|
|
6217
|
+
}, []);
|
|
6218
|
+
if (!title && !description) return /* @__PURE__ */ jsx352(Fragment5, { children });
|
|
6130
6219
|
return /* @__PURE__ */ jsxs222(
|
|
6131
6220
|
"div",
|
|
6132
6221
|
{
|
|
@@ -6135,20 +6224,21 @@ var Tooltip = (props) => {
|
|
|
6135
6224
|
onMouseEnter: handleMouseEnter,
|
|
6136
6225
|
onMouseMove: handleMouseMove,
|
|
6137
6226
|
onMouseLeave: handleMouseLeave,
|
|
6138
|
-
onClick:
|
|
6227
|
+
onClick: close,
|
|
6139
6228
|
onFocus: handleFocus,
|
|
6140
|
-
onBlur:
|
|
6229
|
+
onBlur: close,
|
|
6141
6230
|
children: [
|
|
6142
6231
|
children,
|
|
6143
|
-
visible && /* @__PURE__ */
|
|
6232
|
+
visible && /* @__PURE__ */ jsx352(Portal_default, { children: /* @__PURE__ */ jsxs222(
|
|
6144
6233
|
"div",
|
|
6145
6234
|
{
|
|
6146
6235
|
ref: tooltipRef,
|
|
6236
|
+
role: "tooltip",
|
|
6147
6237
|
className: clsx_default("lib-xplat-tooltip", type),
|
|
6148
6238
|
style: { position: "fixed", left: pos.left, top: pos.top },
|
|
6149
6239
|
children: [
|
|
6150
|
-
title && /* @__PURE__ */
|
|
6151
|
-
description && /* @__PURE__ */
|
|
6240
|
+
title && /* @__PURE__ */ jsx352("div", { className: "tooltip-title", children: title }),
|
|
6241
|
+
description && /* @__PURE__ */ jsx352("div", { className: "tooltip-desc", children: description })
|
|
6152
6242
|
]
|
|
6153
6243
|
}
|
|
6154
6244
|
) })
|
|
@@ -6161,10 +6251,10 @@ var Tooltip_default = Tooltip;
|
|
|
6161
6251
|
|
|
6162
6252
|
// src/components/Video/Video.tsx
|
|
6163
6253
|
import React42 from "react";
|
|
6164
|
-
import { jsx as
|
|
6254
|
+
import { jsx as jsx353, jsxs as jsxs223 } from "react/jsx-runtime";
|
|
6165
6255
|
var PipIcon = () => /* @__PURE__ */ jsxs223("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
6166
|
-
/* @__PURE__ */
|
|
6167
|
-
/* @__PURE__ */
|
|
6256
|
+
/* @__PURE__ */ jsx353("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
6257
|
+
/* @__PURE__ */ jsx353("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
|
|
6168
6258
|
] });
|
|
6169
6259
|
var formatTime = (sec) => {
|
|
6170
6260
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -6345,7 +6435,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6345
6435
|
ref: containerRef,
|
|
6346
6436
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
6347
6437
|
children: [
|
|
6348
|
-
/* @__PURE__ */
|
|
6438
|
+
/* @__PURE__ */ jsx353(
|
|
6349
6439
|
"video",
|
|
6350
6440
|
{
|
|
6351
6441
|
ref: setRefs,
|
|
@@ -6366,7 +6456,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6366
6456
|
children
|
|
6367
6457
|
}
|
|
6368
6458
|
),
|
|
6369
|
-
showCenterPlay && /* @__PURE__ */
|
|
6459
|
+
showCenterPlay && /* @__PURE__ */ jsx353(
|
|
6370
6460
|
"button",
|
|
6371
6461
|
{
|
|
6372
6462
|
type: "button",
|
|
@@ -6378,11 +6468,11 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6378
6468
|
onClick: togglePlay,
|
|
6379
6469
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
6380
6470
|
tabIndex: -1,
|
|
6381
|
-
children: /* @__PURE__ */
|
|
6471
|
+
children: /* @__PURE__ */ jsx353("span", { className: "center-play-icon", children: /* @__PURE__ */ jsx353(PlayCircleIcon_default, {}) })
|
|
6382
6472
|
}
|
|
6383
6473
|
),
|
|
6384
6474
|
showControls && /* @__PURE__ */ jsxs223("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
|
|
6385
|
-
/* @__PURE__ */
|
|
6475
|
+
/* @__PURE__ */ jsx353(
|
|
6386
6476
|
"input",
|
|
6387
6477
|
{
|
|
6388
6478
|
type: "range",
|
|
@@ -6400,28 +6490,28 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6400
6490
|
}
|
|
6401
6491
|
),
|
|
6402
6492
|
/* @__PURE__ */ jsxs223("div", { className: "controls-row", children: [
|
|
6403
|
-
/* @__PURE__ */
|
|
6493
|
+
/* @__PURE__ */ jsx353(
|
|
6404
6494
|
"button",
|
|
6405
6495
|
{
|
|
6406
6496
|
type: "button",
|
|
6407
6497
|
className: "control-btn",
|
|
6408
6498
|
onClick: togglePlay,
|
|
6409
6499
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
6410
|
-
children: isPlaying ? /* @__PURE__ */
|
|
6500
|
+
children: isPlaying ? /* @__PURE__ */ jsx353(PauseIcon_default, {}) : /* @__PURE__ */ jsx353(PlayIcon_default, {})
|
|
6411
6501
|
}
|
|
6412
6502
|
),
|
|
6413
6503
|
/* @__PURE__ */ jsxs223("div", { className: "volume-group", children: [
|
|
6414
|
-
/* @__PURE__ */
|
|
6504
|
+
/* @__PURE__ */ jsx353(
|
|
6415
6505
|
"button",
|
|
6416
6506
|
{
|
|
6417
6507
|
type: "button",
|
|
6418
6508
|
className: "control-btn",
|
|
6419
6509
|
onClick: toggleMute,
|
|
6420
6510
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
6421
|
-
children: /* @__PURE__ */
|
|
6511
|
+
children: /* @__PURE__ */ jsx353(VolumeGlyph, {})
|
|
6422
6512
|
}
|
|
6423
6513
|
),
|
|
6424
|
-
/* @__PURE__ */
|
|
6514
|
+
/* @__PURE__ */ jsx353(
|
|
6425
6515
|
"input",
|
|
6426
6516
|
{
|
|
6427
6517
|
type: "range",
|
|
@@ -6441,7 +6531,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6441
6531
|
" / ",
|
|
6442
6532
|
formatTime(duration)
|
|
6443
6533
|
] }),
|
|
6444
|
-
/* @__PURE__ */
|
|
6534
|
+
/* @__PURE__ */ jsx353("div", { className: "controls-spacer" }),
|
|
6445
6535
|
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ jsxs223("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
|
|
6446
6536
|
/* @__PURE__ */ jsxs223(
|
|
6447
6537
|
"button",
|
|
@@ -6457,7 +6547,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6457
6547
|
]
|
|
6458
6548
|
}
|
|
6459
6549
|
),
|
|
6460
|
-
rateMenuOpen && /* @__PURE__ */
|
|
6550
|
+
rateMenuOpen && /* @__PURE__ */ jsx353("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ jsx353("li", { children: /* @__PURE__ */ jsxs223(
|
|
6461
6551
|
"button",
|
|
6462
6552
|
{
|
|
6463
6553
|
type: "button",
|
|
@@ -6471,7 +6561,7 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6471
6561
|
}
|
|
6472
6562
|
) }, r2)) })
|
|
6473
6563
|
] }),
|
|
6474
|
-
showCaptions && /* @__PURE__ */
|
|
6564
|
+
showCaptions && /* @__PURE__ */ jsx353(
|
|
6475
6565
|
"button",
|
|
6476
6566
|
{
|
|
6477
6567
|
type: "button",
|
|
@@ -6479,37 +6569,37 @@ var Video = React42.forwardRef((props, ref) => {
|
|
|
6479
6569
|
onClick: toggleCaptions,
|
|
6480
6570
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
6481
6571
|
"aria-pressed": captionsOn,
|
|
6482
|
-
children: /* @__PURE__ */
|
|
6572
|
+
children: /* @__PURE__ */ jsx353(TypeIcon_default, {})
|
|
6483
6573
|
}
|
|
6484
6574
|
),
|
|
6485
|
-
showPip && pipSupported && /* @__PURE__ */
|
|
6575
|
+
showPip && pipSupported && /* @__PURE__ */ jsx353(
|
|
6486
6576
|
"button",
|
|
6487
6577
|
{
|
|
6488
6578
|
type: "button",
|
|
6489
6579
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
6490
6580
|
onClick: togglePip,
|
|
6491
6581
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
6492
|
-
children: /* @__PURE__ */
|
|
6582
|
+
children: /* @__PURE__ */ jsx353(PipIcon, {})
|
|
6493
6583
|
}
|
|
6494
6584
|
),
|
|
6495
|
-
showDownload && /* @__PURE__ */
|
|
6585
|
+
showDownload && /* @__PURE__ */ jsx353(
|
|
6496
6586
|
"a",
|
|
6497
6587
|
{
|
|
6498
6588
|
className: "control-btn",
|
|
6499
6589
|
href: src,
|
|
6500
6590
|
download: downloadFileName ?? true,
|
|
6501
6591
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
6502
|
-
children: /* @__PURE__ */
|
|
6592
|
+
children: /* @__PURE__ */ jsx353(DownloadIcon_default, {})
|
|
6503
6593
|
}
|
|
6504
6594
|
),
|
|
6505
|
-
/* @__PURE__ */
|
|
6595
|
+
/* @__PURE__ */ jsx353(
|
|
6506
6596
|
"button",
|
|
6507
6597
|
{
|
|
6508
6598
|
type: "button",
|
|
6509
6599
|
className: "control-btn",
|
|
6510
6600
|
onClick: toggleFullscreen,
|
|
6511
6601
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
6512
|
-
children: isFullscreen ? /* @__PURE__ */
|
|
6602
|
+
children: isFullscreen ? /* @__PURE__ */ jsx353(MinimizeIcon_default, {}) : /* @__PURE__ */ jsx353(MaximizeIcon_default, {})
|
|
6513
6603
|
}
|
|
6514
6604
|
)
|
|
6515
6605
|
] })
|
|
@@ -6547,6 +6637,8 @@ export {
|
|
|
6547
6637
|
ImageSelector_default as ImageSelector,
|
|
6548
6638
|
Input_default as Input,
|
|
6549
6639
|
InputDatePicker_default as InputDatePicker,
|
|
6640
|
+
Link_default as Link,
|
|
6641
|
+
LinkButton_default as LinkButton,
|
|
6550
6642
|
Modal_default as Modal,
|
|
6551
6643
|
NotificationBadge_default as NotificationBadge,
|
|
6552
6644
|
Pagination_default as Pagination,
|