@x-plat/design-system 0.5.11 → 0.5.12
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/Chart/index.cjs +67 -48
- package/dist/components/Chart/index.js +68 -49
- package/dist/components/DatePicker/index.cjs +401 -379
- package/dist/components/DatePicker/index.js +388 -366
- package/dist/components/Dropdown/index.cjs +38 -17
- package/dist/components/Dropdown/index.css +9 -9
- package/dist/components/Dropdown/index.js +37 -16
- package/dist/components/Modal/index.cjs +29 -9
- package/dist/components/Modal/index.d.cts +0 -3
- package/dist/components/Modal/index.d.ts +0 -3
- package/dist/components/Modal/index.js +28 -8
- package/dist/components/PopOver/index.cjs +33 -12
- package/dist/components/PopOver/index.css +6 -9
- package/dist/components/PopOver/index.js +32 -11
- package/dist/components/Select/index.cjs +351 -330
- package/dist/components/Select/index.css +12 -19
- package/dist/components/Select/index.js +350 -329
- package/dist/components/index.cjs +485 -440
- package/dist/components/index.css +27 -37
- package/dist/components/index.js +441 -396
- package/dist/index.cjs +509 -464
- package/dist/index.css +27 -37
- package/dist/index.js +463 -418
- package/package.json +1 -1
package/dist/components/index.js
CHANGED
|
@@ -2019,7 +2019,7 @@ var CardTab_default = CardTab;
|
|
|
2019
2019
|
|
|
2020
2020
|
// src/components/Chart/Chart.tsx
|
|
2021
2021
|
import React5 from "react";
|
|
2022
|
-
import { jsx as jsx305, jsxs as jsxs196 } from "react/jsx-runtime";
|
|
2022
|
+
import { Fragment as Fragment2, jsx as jsx305, jsxs as jsxs196 } from "react/jsx-runtime";
|
|
2023
2023
|
var CATEGORICAL_COUNT2 = 8;
|
|
2024
2024
|
var LINE_BAR_PALETTES = Array.from({ length: CATEGORICAL_COUNT2 }, (_, i) => {
|
|
2025
2025
|
const n = i + 1;
|
|
@@ -2068,14 +2068,23 @@ var useChartSize = (ref) => {
|
|
|
2068
2068
|
React5.useEffect(() => {
|
|
2069
2069
|
const el = ref.current;
|
|
2070
2070
|
if (!el) return;
|
|
2071
|
+
let rafId = 0;
|
|
2071
2072
|
const observer = new ResizeObserver((entries) => {
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2073
|
+
cancelAnimationFrame(rafId);
|
|
2074
|
+
rafId = requestAnimationFrame(() => {
|
|
2075
|
+
const entry = entries[0];
|
|
2076
|
+
if (!entry) return;
|
|
2077
|
+
const { width, height } = entry.contentRect;
|
|
2078
|
+
const w = Math.floor(width);
|
|
2079
|
+
const h = Math.floor(height);
|
|
2080
|
+
setSize((prev) => prev.width === w && prev.height === h ? prev : { width: w, height: h });
|
|
2081
|
+
});
|
|
2076
2082
|
});
|
|
2077
2083
|
observer.observe(el);
|
|
2078
|
-
return () =>
|
|
2084
|
+
return () => {
|
|
2085
|
+
cancelAnimationFrame(rafId);
|
|
2086
|
+
observer.disconnect();
|
|
2087
|
+
};
|
|
2079
2088
|
}, [ref]);
|
|
2080
2089
|
return size;
|
|
2081
2090
|
};
|
|
@@ -2087,15 +2096,21 @@ var useChartTooltip = (enabled) => {
|
|
|
2087
2096
|
content: ""
|
|
2088
2097
|
});
|
|
2089
2098
|
const containerRef = React5.useRef(null);
|
|
2099
|
+
const rafRef = React5.useRef(0);
|
|
2090
2100
|
const move = React5.useCallback((e) => {
|
|
2091
2101
|
if (!enabled) return;
|
|
2092
|
-
const
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2102
|
+
const clientX = e.clientX;
|
|
2103
|
+
const clientY = e.clientY;
|
|
2104
|
+
cancelAnimationFrame(rafRef.current);
|
|
2105
|
+
rafRef.current = requestAnimationFrame(() => {
|
|
2106
|
+
const rect = containerRef.current?.getBoundingClientRect();
|
|
2107
|
+
if (!rect) return;
|
|
2108
|
+
setTooltip((prev) => ({
|
|
2109
|
+
...prev,
|
|
2110
|
+
x: clientX - rect.left,
|
|
2111
|
+
y: clientY - rect.top - 12
|
|
2112
|
+
}));
|
|
2113
|
+
});
|
|
2099
2114
|
}, [enabled]);
|
|
2100
2115
|
const show = React5.useCallback((e, content) => {
|
|
2101
2116
|
if (!enabled) return;
|
|
@@ -2109,10 +2124,35 @@ var useChartTooltip = (enabled) => {
|
|
|
2109
2124
|
});
|
|
2110
2125
|
}, [enabled]);
|
|
2111
2126
|
const hide = React5.useCallback(() => {
|
|
2127
|
+
cancelAnimationFrame(rafRef.current);
|
|
2112
2128
|
setTooltip((prev) => ({ ...prev, visible: false }));
|
|
2113
2129
|
}, []);
|
|
2114
2130
|
return { tooltip, show, hide, move, containerRef };
|
|
2115
2131
|
};
|
|
2132
|
+
var GridLines = React5.memo(({ width, height, chartH, maxVal }) => /* @__PURE__ */ jsx305(Fragment2, { children: [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
|
|
2133
|
+
const y = PADDING.top + (1 - ratio) * chartH;
|
|
2134
|
+
const val = Math.round(maxVal * ratio);
|
|
2135
|
+
return /* @__PURE__ */ jsxs196("g", { children: [
|
|
2136
|
+
/* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
2137
|
+
/* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
2138
|
+
] }, ratio);
|
|
2139
|
+
}) }));
|
|
2140
|
+
GridLines.displayName = "GridLines";
|
|
2141
|
+
var getLabelStep = (count, chartW) => {
|
|
2142
|
+
const minLabelWidth = 40;
|
|
2143
|
+
const maxLabels = Math.floor(chartW / minLabelWidth);
|
|
2144
|
+
if (count <= maxLabels) return 1;
|
|
2145
|
+
return Math.ceil(count / maxLabels);
|
|
2146
|
+
};
|
|
2147
|
+
var AxisLabels = React5.memo(({ labels, count, chartW, height }) => {
|
|
2148
|
+
const step = getLabelStep(count, chartW);
|
|
2149
|
+
return /* @__PURE__ */ jsx305(Fragment2, { children: labels.map((label, i) => {
|
|
2150
|
+
if (i % step !== 0) return null;
|
|
2151
|
+
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
2152
|
+
return /* @__PURE__ */ jsx305("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
2153
|
+
}) });
|
|
2154
|
+
});
|
|
2155
|
+
AxisLabels.displayName = "AxisLabels";
|
|
2116
2156
|
var LineChart = React5.memo(({ data, labels, width, height, onHover, onMove, onLeave }) => {
|
|
2117
2157
|
const entries = React5.useMemo(() => Object.entries(data), [data]);
|
|
2118
2158
|
const maxVal = React5.useMemo(() => {
|
|
@@ -2132,19 +2172,10 @@ var LineChart = React5.memo(({ data, labels, width, height, onHover, onMove, onL
|
|
|
2132
2172
|
),
|
|
2133
2173
|
[entries, count, chartW, chartH, maxVal]
|
|
2134
2174
|
);
|
|
2175
|
+
const showPoints = count <= 100;
|
|
2135
2176
|
return /* @__PURE__ */ jsxs196("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
const val = Math.round(maxVal * ratio);
|
|
2139
|
-
return /* @__PURE__ */ jsxs196("g", { children: [
|
|
2140
|
-
/* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
2141
|
-
/* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
2142
|
-
] }, ratio);
|
|
2143
|
-
}),
|
|
2144
|
-
labels.map((label, i) => {
|
|
2145
|
-
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
2146
|
-
return /* @__PURE__ */ jsx305("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
2147
|
-
}),
|
|
2177
|
+
/* @__PURE__ */ jsx305(GridLines, { width, height, chartH, maxVal }),
|
|
2178
|
+
/* @__PURE__ */ jsx305(AxisLabels, { labels, count, chartW, height }),
|
|
2148
2179
|
entries.map(([key], di) => {
|
|
2149
2180
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
2150
2181
|
const color = palette[2];
|
|
@@ -2159,7 +2190,7 @@ var LineChart = React5.memo(({ data, labels, width, height, onHover, onMove, onL
|
|
|
2159
2190
|
strokeWidth: "2"
|
|
2160
2191
|
}
|
|
2161
2192
|
),
|
|
2162
|
-
points.map((p, i) => /* @__PURE__ */ jsx305(
|
|
2193
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ jsx305(
|
|
2163
2194
|
"circle",
|
|
2164
2195
|
{
|
|
2165
2196
|
cx: p.x,
|
|
@@ -2197,19 +2228,10 @@ var CurveChart = React5.memo(({ data, labels, width, height, onHover, onMove, on
|
|
|
2197
2228
|
),
|
|
2198
2229
|
[entries, count, chartW, chartH, maxVal]
|
|
2199
2230
|
);
|
|
2231
|
+
const showPoints = count <= 100;
|
|
2200
2232
|
return /* @__PURE__ */ jsxs196("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
const val = Math.round(maxVal * ratio);
|
|
2204
|
-
return /* @__PURE__ */ jsxs196("g", { children: [
|
|
2205
|
-
/* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
2206
|
-
/* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
2207
|
-
] }, ratio);
|
|
2208
|
-
}),
|
|
2209
|
-
labels.map((label, i) => {
|
|
2210
|
-
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
2211
|
-
return /* @__PURE__ */ jsx305("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
2212
|
-
}),
|
|
2233
|
+
/* @__PURE__ */ jsx305(GridLines, { width, height, chartH, maxVal }),
|
|
2234
|
+
/* @__PURE__ */ jsx305(AxisLabels, { labels, count, chartW, height }),
|
|
2213
2235
|
entries.map(([key], di) => {
|
|
2214
2236
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
2215
2237
|
const color = palette[2];
|
|
@@ -2225,7 +2247,7 @@ var CurveChart = React5.memo(({ data, labels, width, height, onHover, onMove, on
|
|
|
2225
2247
|
] }) }),
|
|
2226
2248
|
/* @__PURE__ */ jsx305("path", { d: areaPath, fill: `url(#${gradientId})` }),
|
|
2227
2249
|
/* @__PURE__ */ jsx305("path", { d: linePath, fill: "none", stroke: color, strokeWidth: "2" }),
|
|
2228
|
-
points.map((p, i) => /* @__PURE__ */ jsx305(
|
|
2250
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ jsx305(
|
|
2229
2251
|
"circle",
|
|
2230
2252
|
{
|
|
2231
2253
|
cx: p.x,
|
|
@@ -2255,11 +2277,11 @@ var BarChart = React5.memo(({ data, labels, width, height, onHover, onMove, onLe
|
|
|
2255
2277
|
const chartW = width - PADDING.left - PADDING.right;
|
|
2256
2278
|
const chartH = height - PADDING.top - PADDING.bottom;
|
|
2257
2279
|
const groupW = chartW / count;
|
|
2258
|
-
const barW = Math.min(32, groupW * 0.7 / groupCount);
|
|
2280
|
+
const barW = Math.max(1, Math.min(32, groupW * 0.7 / groupCount));
|
|
2259
2281
|
const bars = React5.useMemo(
|
|
2260
2282
|
() => entries.map(
|
|
2261
2283
|
([, values], di) => values.map((v, i) => {
|
|
2262
|
-
const h = v / maxVal * chartH;
|
|
2284
|
+
const h = Math.max(0, v / maxVal * chartH);
|
|
2263
2285
|
const x = PADDING.left + groupW * i + (groupW - barW * groupCount) / 2 + barW * di;
|
|
2264
2286
|
const y = PADDING.top + chartH - h;
|
|
2265
2287
|
return { x, y, w: barW, h, v };
|
|
@@ -2267,16 +2289,13 @@ var BarChart = React5.memo(({ data, labels, width, height, onHover, onMove, onLe
|
|
|
2267
2289
|
),
|
|
2268
2290
|
[entries, maxVal, chartH, groupW, barW, groupCount]
|
|
2269
2291
|
);
|
|
2292
|
+
const barLabelStep = getLabelStep(count, chartW);
|
|
2270
2293
|
return /* @__PURE__ */ jsxs196("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
return /* @__PURE__ */
|
|
2275
|
-
/* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
2276
|
-
/* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
2277
|
-
] }, ratio);
|
|
2294
|
+
/* @__PURE__ */ jsx305(GridLines, { width, height, chartH, maxVal }),
|
|
2295
|
+
labels.map((label, i) => {
|
|
2296
|
+
if (i % barLabelStep !== 0) return null;
|
|
2297
|
+
return /* @__PURE__ */ jsx305("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
2278
2298
|
}),
|
|
2279
|
-
labels.map((label, i) => /* @__PURE__ */ jsx305("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i)),
|
|
2280
2299
|
entries.map(([key], di) => {
|
|
2281
2300
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
2282
2301
|
const color = palette[2];
|
|
@@ -2456,7 +2475,7 @@ Chip.displayName = "Chip";
|
|
|
2456
2475
|
var Chip_default = Chip;
|
|
2457
2476
|
|
|
2458
2477
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
2459
|
-
import
|
|
2478
|
+
import React11 from "react";
|
|
2460
2479
|
|
|
2461
2480
|
// src/components/Input/Input.tsx
|
|
2462
2481
|
import React6 from "react";
|
|
@@ -2646,15 +2665,37 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
2646
2665
|
var PasswordInput_default = PasswordInput;
|
|
2647
2666
|
|
|
2648
2667
|
// src/components/Modal/Modal.tsx
|
|
2649
|
-
import
|
|
2668
|
+
import React9 from "react";
|
|
2650
2669
|
import { createPortal } from "react-dom";
|
|
2670
|
+
|
|
2671
|
+
// src/tokens/hooks/Portal.tsx
|
|
2672
|
+
import React8 from "react";
|
|
2673
|
+
import ReactDOM from "react-dom";
|
|
2651
2674
|
import { jsx as jsx311 } from "react/jsx-runtime";
|
|
2675
|
+
var PortalContainerContext = React8.createContext(null);
|
|
2676
|
+
var PortalProvider = ({ container, children }) => /* @__PURE__ */ jsx311(PortalContainerContext.Provider, { value: container, children });
|
|
2677
|
+
var Portal = ({ children }) => {
|
|
2678
|
+
const contextContainer = React8.useContext(PortalContainerContext);
|
|
2679
|
+
const [fallback, setFallback] = React8.useState(null);
|
|
2680
|
+
React8.useEffect(() => {
|
|
2681
|
+
if (!contextContainer) setFallback(document.body);
|
|
2682
|
+
}, [contextContainer]);
|
|
2683
|
+
const container = contextContainer ?? fallback;
|
|
2684
|
+
if (!container) return null;
|
|
2685
|
+
return ReactDOM.createPortal(children, container);
|
|
2686
|
+
};
|
|
2687
|
+
Portal.displayName = "Portal";
|
|
2688
|
+
var Portal_default = Portal;
|
|
2689
|
+
|
|
2690
|
+
// src/components/Modal/Modal.tsx
|
|
2691
|
+
import { jsx as jsx312 } from "react/jsx-runtime";
|
|
2652
2692
|
var ANIMATION_DURATION_MS = 200;
|
|
2653
2693
|
var Modal = (props) => {
|
|
2654
2694
|
const { isOpen, onClose, children } = props;
|
|
2655
|
-
const [mounted, setMounted] =
|
|
2656
|
-
const [visible, setVisible] =
|
|
2657
|
-
|
|
2695
|
+
const [mounted, setMounted] = React9.useState(false);
|
|
2696
|
+
const [visible, setVisible] = React9.useState(false);
|
|
2697
|
+
const boxRef = React9.useRef(null);
|
|
2698
|
+
React9.useEffect(() => {
|
|
2658
2699
|
if (isOpen) {
|
|
2659
2700
|
setMounted(true);
|
|
2660
2701
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -2668,19 +2709,20 @@ var Modal = (props) => {
|
|
|
2668
2709
|
if (!mounted) return null;
|
|
2669
2710
|
const stateClass = visible ? "enter" : "exit";
|
|
2670
2711
|
return createPortal(
|
|
2671
|
-
/* @__PURE__ */
|
|
2712
|
+
/* @__PURE__ */ jsx312(
|
|
2672
2713
|
"div",
|
|
2673
2714
|
{
|
|
2674
2715
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
2675
2716
|
onClick: onClose,
|
|
2676
|
-
children: /* @__PURE__ */
|
|
2717
|
+
children: /* @__PURE__ */ jsx312(
|
|
2677
2718
|
"div",
|
|
2678
2719
|
{
|
|
2720
|
+
ref: boxRef,
|
|
2679
2721
|
className: clsx_default("lib-xplat-modal", "modal-box", stateClass),
|
|
2680
2722
|
role: "dialog",
|
|
2681
2723
|
"aria-modal": "true",
|
|
2682
2724
|
onClick: (e) => e.stopPropagation(),
|
|
2683
|
-
children
|
|
2725
|
+
children: /* @__PURE__ */ jsx312(PortalProvider, { container: boxRef.current, children })
|
|
2684
2726
|
}
|
|
2685
2727
|
)
|
|
2686
2728
|
}
|
|
@@ -2692,9 +2734,9 @@ Modal.displayName = "Modal";
|
|
|
2692
2734
|
var Modal_default = Modal;
|
|
2693
2735
|
|
|
2694
2736
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
2695
|
-
import
|
|
2696
|
-
import { Fragment as
|
|
2697
|
-
var DayCell2 =
|
|
2737
|
+
import React10 from "react";
|
|
2738
|
+
import { Fragment as Fragment3, jsx as jsx313, jsxs as jsxs200 } from "react/jsx-runtime";
|
|
2739
|
+
var DayCell2 = React10.memo(
|
|
2698
2740
|
({
|
|
2699
2741
|
day,
|
|
2700
2742
|
disabled,
|
|
@@ -2704,7 +2746,7 @@ var DayCell2 = React9.memo(
|
|
|
2704
2746
|
isEnd,
|
|
2705
2747
|
inRange,
|
|
2706
2748
|
onSelect
|
|
2707
|
-
}) => /* @__PURE__ */
|
|
2749
|
+
}) => /* @__PURE__ */ jsx313(
|
|
2708
2750
|
"button",
|
|
2709
2751
|
{
|
|
2710
2752
|
type: "button",
|
|
@@ -2746,26 +2788,26 @@ var SingleDatePicker = (props) => {
|
|
|
2746
2788
|
initialYear,
|
|
2747
2789
|
initialMonth
|
|
2748
2790
|
);
|
|
2749
|
-
const [pickerMode, setPickerMode] =
|
|
2750
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
2791
|
+
const [pickerMode, setPickerMode] = React10.useState("days");
|
|
2792
|
+
const [yearRangeStart, setYearRangeStart] = React10.useState(
|
|
2751
2793
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
2752
2794
|
);
|
|
2753
|
-
const minTime =
|
|
2795
|
+
const minTime = React10.useMemo(
|
|
2754
2796
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
2755
2797
|
[minDate]
|
|
2756
2798
|
);
|
|
2757
|
-
const maxTime =
|
|
2799
|
+
const maxTime = React10.useMemo(
|
|
2758
2800
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
2759
2801
|
[maxDate]
|
|
2760
2802
|
);
|
|
2761
|
-
const highlightSet =
|
|
2803
|
+
const highlightSet = React10.useMemo(() => {
|
|
2762
2804
|
const set = /* @__PURE__ */ new Set();
|
|
2763
2805
|
for (const h of highlightDates) {
|
|
2764
2806
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
2765
2807
|
}
|
|
2766
2808
|
return set;
|
|
2767
2809
|
}, [highlightDates]);
|
|
2768
|
-
const handleSelect =
|
|
2810
|
+
const handleSelect = React10.useCallback(
|
|
2769
2811
|
(date) => {
|
|
2770
2812
|
onChange?.(date);
|
|
2771
2813
|
},
|
|
@@ -2808,14 +2850,14 @@ var SingleDatePicker = (props) => {
|
|
|
2808
2850
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
2809
2851
|
children: [
|
|
2810
2852
|
/* @__PURE__ */ jsxs200("div", { className: "datepicker-header", children: [
|
|
2811
|
-
/* @__PURE__ */
|
|
2812
|
-
/* @__PURE__ */
|
|
2813
|
-
/* @__PURE__ */
|
|
2853
|
+
/* @__PURE__ */ jsx313("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ jsx313(ChevronLeftIcon_default, {}) }),
|
|
2854
|
+
/* @__PURE__ */ jsx313("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
2855
|
+
/* @__PURE__ */ jsx313("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ jsx313(ChevronRightIcon_default, {}) })
|
|
2814
2856
|
] }),
|
|
2815
2857
|
/* @__PURE__ */ jsxs200("div", { className: "datepicker-body", children: [
|
|
2816
|
-
pickerMode === "years" && /* @__PURE__ */
|
|
2858
|
+
pickerMode === "years" && /* @__PURE__ */ jsx313("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
2817
2859
|
const y = yearRangeStart + i;
|
|
2818
|
-
return /* @__PURE__ */
|
|
2860
|
+
return /* @__PURE__ */ jsx313(
|
|
2819
2861
|
"button",
|
|
2820
2862
|
{
|
|
2821
2863
|
type: "button",
|
|
@@ -2826,7 +2868,7 @@ var SingleDatePicker = (props) => {
|
|
|
2826
2868
|
y
|
|
2827
2869
|
);
|
|
2828
2870
|
}) }),
|
|
2829
|
-
pickerMode === "months" && /* @__PURE__ */
|
|
2871
|
+
pickerMode === "months" && /* @__PURE__ */ jsx313("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ jsx313(
|
|
2830
2872
|
"button",
|
|
2831
2873
|
{
|
|
2832
2874
|
type: "button",
|
|
@@ -2836,8 +2878,8 @@ var SingleDatePicker = (props) => {
|
|
|
2836
2878
|
},
|
|
2837
2879
|
i
|
|
2838
2880
|
)) }),
|
|
2839
|
-
pickerMode === "days" && /* @__PURE__ */ jsxs200(
|
|
2840
|
-
/* @__PURE__ */
|
|
2881
|
+
pickerMode === "days" && /* @__PURE__ */ jsxs200(Fragment3, { children: [
|
|
2882
|
+
/* @__PURE__ */ jsx313("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ jsx313(
|
|
2841
2883
|
"div",
|
|
2842
2884
|
{
|
|
2843
2885
|
className: clsx_default(
|
|
@@ -2849,7 +2891,7 @@ var SingleDatePicker = (props) => {
|
|
|
2849
2891
|
},
|
|
2850
2892
|
label
|
|
2851
2893
|
)) }),
|
|
2852
|
-
/* @__PURE__ */
|
|
2894
|
+
/* @__PURE__ */ jsx313("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
2853
2895
|
const t = day.date.getTime();
|
|
2854
2896
|
const disabled = t < minTime || t > maxTime;
|
|
2855
2897
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -2859,7 +2901,7 @@ var SingleDatePicker = (props) => {
|
|
|
2859
2901
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
2860
2902
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
2861
2903
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
2862
|
-
return /* @__PURE__ */
|
|
2904
|
+
return /* @__PURE__ */ jsx313(
|
|
2863
2905
|
DayCell2,
|
|
2864
2906
|
{
|
|
2865
2907
|
day,
|
|
@@ -2884,7 +2926,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
2884
2926
|
var SingleDatePicker_default = SingleDatePicker;
|
|
2885
2927
|
|
|
2886
2928
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
2887
|
-
import { jsx as
|
|
2929
|
+
import { jsx as jsx314, jsxs as jsxs201 } from "react/jsx-runtime";
|
|
2888
2930
|
var formatDate = (date) => {
|
|
2889
2931
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
2890
2932
|
const y = date.getFullYear();
|
|
@@ -2894,8 +2936,8 @@ var formatDate = (date) => {
|
|
|
2894
2936
|
};
|
|
2895
2937
|
var InputDatePicker = (props) => {
|
|
2896
2938
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
2897
|
-
const [isOpen, setIsOpen] =
|
|
2898
|
-
const [tempDate, setTempDate] =
|
|
2939
|
+
const [isOpen, setIsOpen] = React11.useState(false);
|
|
2940
|
+
const [tempDate, setTempDate] = React11.useState(value ?? /* @__PURE__ */ new Date());
|
|
2899
2941
|
const handleOpen = () => {
|
|
2900
2942
|
if (disabled) return;
|
|
2901
2943
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -2912,18 +2954,18 @@ var InputDatePicker = (props) => {
|
|
|
2912
2954
|
setIsOpen(false);
|
|
2913
2955
|
};
|
|
2914
2956
|
return /* @__PURE__ */ jsxs201("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
|
|
2915
|
-
/* @__PURE__ */
|
|
2957
|
+
/* @__PURE__ */ jsx314("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ jsx314(
|
|
2916
2958
|
Input_default,
|
|
2917
2959
|
{
|
|
2918
2960
|
value: formatDate(value),
|
|
2919
2961
|
placeholder,
|
|
2920
|
-
suffix: /* @__PURE__ */
|
|
2962
|
+
suffix: /* @__PURE__ */ jsx314(CalenderIcon_default, {}),
|
|
2921
2963
|
disabled,
|
|
2922
2964
|
readOnly: true
|
|
2923
2965
|
}
|
|
2924
2966
|
) }),
|
|
2925
|
-
/* @__PURE__ */
|
|
2926
|
-
/* @__PURE__ */
|
|
2967
|
+
/* @__PURE__ */ jsx314(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs201("div", { className: "lib-xplat-popup-datepicker-card", children: [
|
|
2968
|
+
/* @__PURE__ */ jsx314("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ jsx314(
|
|
2927
2969
|
SingleDatePicker_default,
|
|
2928
2970
|
{
|
|
2929
2971
|
value: tempDate,
|
|
@@ -2934,8 +2976,8 @@ var InputDatePicker = (props) => {
|
|
|
2934
2976
|
}
|
|
2935
2977
|
) }),
|
|
2936
2978
|
/* @__PURE__ */ jsxs201("div", { className: "popup-datepicker-footer", children: [
|
|
2937
|
-
/* @__PURE__ */
|
|
2938
|
-
/* @__PURE__ */
|
|
2979
|
+
/* @__PURE__ */ jsx314(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
|
|
2980
|
+
/* @__PURE__ */ jsx314(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
2939
2981
|
] })
|
|
2940
2982
|
] }) })
|
|
2941
2983
|
] });
|
|
@@ -2944,20 +2986,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
2944
2986
|
var InputDatePicker_default = InputDatePicker;
|
|
2945
2987
|
|
|
2946
2988
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
2947
|
-
import
|
|
2989
|
+
import React15 from "react";
|
|
2948
2990
|
|
|
2949
2991
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
2950
|
-
import
|
|
2992
|
+
import React14 from "react";
|
|
2951
2993
|
|
|
2952
2994
|
// src/components/Tab/Tab.tsx
|
|
2953
|
-
import
|
|
2995
|
+
import React13 from "react";
|
|
2954
2996
|
|
|
2955
2997
|
// src/components/Tab/TabItem.tsx
|
|
2956
|
-
import
|
|
2957
|
-
import { jsx as
|
|
2958
|
-
var TabItem =
|
|
2998
|
+
import React12 from "react";
|
|
2999
|
+
import { jsx as jsx315 } from "react/jsx-runtime";
|
|
3000
|
+
var TabItem = React12.forwardRef((props, ref) => {
|
|
2959
3001
|
const { isActive, title, onClick } = props;
|
|
2960
|
-
return /* @__PURE__ */
|
|
3002
|
+
return /* @__PURE__ */ jsx315(
|
|
2961
3003
|
"div",
|
|
2962
3004
|
{
|
|
2963
3005
|
ref,
|
|
@@ -2971,25 +3013,25 @@ TabItem.displayName = "TabItem";
|
|
|
2971
3013
|
var TabItem_default = TabItem;
|
|
2972
3014
|
|
|
2973
3015
|
// src/components/Tab/Tab.tsx
|
|
2974
|
-
import { jsx as
|
|
3016
|
+
import { jsx as jsx316, jsxs as jsxs202 } from "react/jsx-runtime";
|
|
2975
3017
|
var Tab = (props) => {
|
|
2976
3018
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
2977
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
3019
|
+
const [underlineStyle, setUnderlineStyle] = React13.useState({
|
|
2978
3020
|
left: 0,
|
|
2979
3021
|
width: 0
|
|
2980
3022
|
});
|
|
2981
|
-
const itemRefs =
|
|
3023
|
+
const itemRefs = React13.useRef([]);
|
|
2982
3024
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
2983
3025
|
onChange(tabItem, tabIdx);
|
|
2984
3026
|
};
|
|
2985
|
-
|
|
3027
|
+
React13.useEffect(() => {
|
|
2986
3028
|
const el = itemRefs.current[activeIndex];
|
|
2987
3029
|
if (el) {
|
|
2988
3030
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
2989
3031
|
}
|
|
2990
3032
|
}, [activeIndex, tabs.length]);
|
|
2991
3033
|
return /* @__PURE__ */ jsxs202("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
|
|
2992
|
-
tabs.map((tab, idx) => /* @__PURE__ */
|
|
3034
|
+
tabs.map((tab, idx) => /* @__PURE__ */ jsx316(
|
|
2993
3035
|
TabItem_default,
|
|
2994
3036
|
{
|
|
2995
3037
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -3001,7 +3043,7 @@ var Tab = (props) => {
|
|
|
3001
3043
|
},
|
|
3002
3044
|
`${tab.value}_${idx}`
|
|
3003
3045
|
)),
|
|
3004
|
-
type === "toggle" && /* @__PURE__ */
|
|
3046
|
+
type === "toggle" && /* @__PURE__ */ jsx316(
|
|
3005
3047
|
"div",
|
|
3006
3048
|
{
|
|
3007
3049
|
className: "tab-toggle-underline",
|
|
@@ -3017,7 +3059,7 @@ Tab.displayName = "Tab";
|
|
|
3017
3059
|
var Tab_default = Tab;
|
|
3018
3060
|
|
|
3019
3061
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
3020
|
-
import { jsx as
|
|
3062
|
+
import { jsx as jsx317, jsxs as jsxs203 } from "react/jsx-runtime";
|
|
3021
3063
|
var RangePicker = (props) => {
|
|
3022
3064
|
const {
|
|
3023
3065
|
startDate,
|
|
@@ -3027,7 +3069,7 @@ var RangePicker = (props) => {
|
|
|
3027
3069
|
maxDate,
|
|
3028
3070
|
locale = "ko"
|
|
3029
3071
|
} = props;
|
|
3030
|
-
const [activeTab, setActiveTab] =
|
|
3072
|
+
const [activeTab, setActiveTab] = React14.useState("start");
|
|
3031
3073
|
const handleStartChange = (date) => {
|
|
3032
3074
|
if (!date) return;
|
|
3033
3075
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -3041,7 +3083,7 @@ var RangePicker = (props) => {
|
|
|
3041
3083
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
3042
3084
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
3043
3085
|
return /* @__PURE__ */ jsxs203("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
|
|
3044
|
-
/* @__PURE__ */
|
|
3086
|
+
/* @__PURE__ */ jsx317("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ jsx317(
|
|
3045
3087
|
Tab_default,
|
|
3046
3088
|
{
|
|
3047
3089
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -3055,7 +3097,7 @@ var RangePicker = (props) => {
|
|
|
3055
3097
|
}
|
|
3056
3098
|
) }),
|
|
3057
3099
|
/* @__PURE__ */ jsxs203("div", { className: "datepicker-range-panels", children: [
|
|
3058
|
-
/* @__PURE__ */
|
|
3100
|
+
/* @__PURE__ */ jsx317(
|
|
3059
3101
|
SingleDatePicker_default,
|
|
3060
3102
|
{
|
|
3061
3103
|
value: startDate,
|
|
@@ -3067,7 +3109,7 @@ var RangePicker = (props) => {
|
|
|
3067
3109
|
locale
|
|
3068
3110
|
}
|
|
3069
3111
|
),
|
|
3070
|
-
/* @__PURE__ */
|
|
3112
|
+
/* @__PURE__ */ jsx317(
|
|
3071
3113
|
SingleDatePicker_default,
|
|
3072
3114
|
{
|
|
3073
3115
|
value: endDate,
|
|
@@ -3080,7 +3122,7 @@ var RangePicker = (props) => {
|
|
|
3080
3122
|
}
|
|
3081
3123
|
)
|
|
3082
3124
|
] }),
|
|
3083
|
-
/* @__PURE__ */
|
|
3125
|
+
/* @__PURE__ */ jsx317("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ jsx317(
|
|
3084
3126
|
SingleDatePicker_default,
|
|
3085
3127
|
{
|
|
3086
3128
|
value: startDate,
|
|
@@ -3091,7 +3133,7 @@ var RangePicker = (props) => {
|
|
|
3091
3133
|
rangeEnd: endDate,
|
|
3092
3134
|
locale
|
|
3093
3135
|
}
|
|
3094
|
-
) : /* @__PURE__ */
|
|
3136
|
+
) : /* @__PURE__ */ jsx317(
|
|
3095
3137
|
SingleDatePicker_default,
|
|
3096
3138
|
{
|
|
3097
3139
|
value: endDate,
|
|
@@ -3109,10 +3151,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
3109
3151
|
var RangePicker_default = RangePicker;
|
|
3110
3152
|
|
|
3111
3153
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
3112
|
-
import { jsx as
|
|
3154
|
+
import { jsx as jsx318, jsxs as jsxs204 } from "react/jsx-runtime";
|
|
3113
3155
|
var PopupPicker = (props) => {
|
|
3114
3156
|
const { component, type, locale } = props;
|
|
3115
|
-
const [isOpen, setIsOpen] =
|
|
3157
|
+
const [isOpen, setIsOpen] = React15.useState(false);
|
|
3116
3158
|
const handleClick = () => setIsOpen(true);
|
|
3117
3159
|
const handleClose = () => setIsOpen(false);
|
|
3118
3160
|
const handleSingleChange = (date) => {
|
|
@@ -3121,10 +3163,10 @@ var PopupPicker = (props) => {
|
|
|
3121
3163
|
handleClose();
|
|
3122
3164
|
};
|
|
3123
3165
|
return /* @__PURE__ */ jsxs204("div", { className: "lib-xplat-popup-datepicker", children: [
|
|
3124
|
-
|
|
3125
|
-
/* @__PURE__ */
|
|
3166
|
+
React15.cloneElement(component, { onClick: handleClick }),
|
|
3167
|
+
/* @__PURE__ */ jsx318(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs204("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
|
|
3126
3168
|
/* @__PURE__ */ jsxs204("div", { className: "popup-datepicker-content", children: [
|
|
3127
|
-
type === "single" && /* @__PURE__ */
|
|
3169
|
+
type === "single" && /* @__PURE__ */ jsx318(
|
|
3128
3170
|
SingleDatePicker_default,
|
|
3129
3171
|
{
|
|
3130
3172
|
value: props.value,
|
|
@@ -3134,7 +3176,7 @@ var PopupPicker = (props) => {
|
|
|
3134
3176
|
locale
|
|
3135
3177
|
}
|
|
3136
3178
|
),
|
|
3137
|
-
type === "range" && /* @__PURE__ */
|
|
3179
|
+
type === "range" && /* @__PURE__ */ jsx318(
|
|
3138
3180
|
RangePicker_default,
|
|
3139
3181
|
{
|
|
3140
3182
|
startDate: props.startDate,
|
|
@@ -3147,7 +3189,7 @@ var PopupPicker = (props) => {
|
|
|
3147
3189
|
)
|
|
3148
3190
|
] }),
|
|
3149
3191
|
/* @__PURE__ */ jsxs204("div", { className: "popup-datepicker-footer", children: [
|
|
3150
|
-
/* @__PURE__ */
|
|
3192
|
+
/* @__PURE__ */ jsx318(
|
|
3151
3193
|
Button_default,
|
|
3152
3194
|
{
|
|
3153
3195
|
type: "secondary",
|
|
@@ -3155,7 +3197,7 @@ var PopupPicker = (props) => {
|
|
|
3155
3197
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
3156
3198
|
}
|
|
3157
3199
|
),
|
|
3158
|
-
/* @__PURE__ */
|
|
3200
|
+
/* @__PURE__ */ jsx318(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
3159
3201
|
] })
|
|
3160
3202
|
] }) })
|
|
3161
3203
|
] });
|
|
@@ -3164,10 +3206,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
3164
3206
|
var PopupPicker_default = PopupPicker;
|
|
3165
3207
|
|
|
3166
3208
|
// src/components/Divider/Divider.tsx
|
|
3167
|
-
import { jsx as
|
|
3209
|
+
import { jsx as jsx319 } from "react/jsx-runtime";
|
|
3168
3210
|
var Divider = (props) => {
|
|
3169
3211
|
const { orientation = "horizontal" } = props;
|
|
3170
|
-
return /* @__PURE__ */
|
|
3212
|
+
return /* @__PURE__ */ jsx319(
|
|
3171
3213
|
"div",
|
|
3172
3214
|
{
|
|
3173
3215
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -3180,15 +3222,15 @@ Divider.displayName = "Divider";
|
|
|
3180
3222
|
var Divider_default = Divider;
|
|
3181
3223
|
|
|
3182
3224
|
// src/components/Drawer/Drawer.tsx
|
|
3183
|
-
import
|
|
3225
|
+
import React16 from "react";
|
|
3184
3226
|
import { createPortal as createPortal2 } from "react-dom";
|
|
3185
|
-
import { jsx as
|
|
3227
|
+
import { jsx as jsx320, jsxs as jsxs205 } from "react/jsx-runtime";
|
|
3186
3228
|
var ANIMATION_DURATION_MS2 = 250;
|
|
3187
3229
|
var Drawer = (props) => {
|
|
3188
3230
|
const { isOpen, onClose, placement = "right", width = 320, title, children } = props;
|
|
3189
|
-
const [mounted, setMounted] =
|
|
3190
|
-
const [visible, setVisible] =
|
|
3191
|
-
|
|
3231
|
+
const [mounted, setMounted] = React16.useState(false);
|
|
3232
|
+
const [visible, setVisible] = React16.useState(false);
|
|
3233
|
+
React16.useEffect(() => {
|
|
3192
3234
|
if (isOpen) {
|
|
3193
3235
|
setMounted(true);
|
|
3194
3236
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3203,7 +3245,7 @@ var Drawer = (props) => {
|
|
|
3203
3245
|
const stateClass = visible ? "enter" : "exit";
|
|
3204
3246
|
const widthValue = typeof width === "number" ? `${width}px` : width;
|
|
3205
3247
|
return createPortal2(
|
|
3206
|
-
/* @__PURE__ */
|
|
3248
|
+
/* @__PURE__ */ jsx320(
|
|
3207
3249
|
"div",
|
|
3208
3250
|
{
|
|
3209
3251
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
@@ -3218,10 +3260,10 @@ var Drawer = (props) => {
|
|
|
3218
3260
|
onClick: (e) => e.stopPropagation(),
|
|
3219
3261
|
children: [
|
|
3220
3262
|
title && /* @__PURE__ */ jsxs205("div", { className: "drawer-header", children: [
|
|
3221
|
-
/* @__PURE__ */
|
|
3222
|
-
/* @__PURE__ */
|
|
3263
|
+
/* @__PURE__ */ jsx320("span", { className: "drawer-title", children: title }),
|
|
3264
|
+
/* @__PURE__ */ jsx320("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
3223
3265
|
] }),
|
|
3224
|
-
/* @__PURE__ */
|
|
3266
|
+
/* @__PURE__ */ jsx320("div", { className: "drawer-body", children })
|
|
3225
3267
|
]
|
|
3226
3268
|
}
|
|
3227
3269
|
)
|
|
@@ -3234,16 +3276,16 @@ Drawer.displayName = "Drawer";
|
|
|
3234
3276
|
var Drawer_default = Drawer;
|
|
3235
3277
|
|
|
3236
3278
|
// src/components/Dropdown/Dropdown.tsx
|
|
3237
|
-
import
|
|
3279
|
+
import React19 from "react";
|
|
3238
3280
|
|
|
3239
3281
|
// src/tokens/hooks/useAutoPosition.ts
|
|
3240
|
-
import
|
|
3282
|
+
import React17 from "react";
|
|
3241
3283
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
3242
|
-
const [position, setPosition] =
|
|
3284
|
+
const [position, setPosition] = React17.useState({
|
|
3243
3285
|
position: {},
|
|
3244
3286
|
direction: "bottom"
|
|
3245
3287
|
});
|
|
3246
|
-
const calculatePosition =
|
|
3288
|
+
const calculatePosition = React17.useCallback(() => {
|
|
3247
3289
|
if (!triggerRef.current || !popRef.current) return;
|
|
3248
3290
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
3249
3291
|
const popRect = popRef.current.getBoundingClientRect();
|
|
@@ -3267,12 +3309,15 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3267
3309
|
direction
|
|
3268
3310
|
});
|
|
3269
3311
|
}, [triggerRef, popRef]);
|
|
3270
|
-
|
|
3312
|
+
React17.useEffect(() => {
|
|
3271
3313
|
if (!enabled) return;
|
|
3272
|
-
|
|
3314
|
+
const raf = requestAnimationFrame(() => {
|
|
3315
|
+
calculatePosition();
|
|
3316
|
+
});
|
|
3273
3317
|
window.addEventListener("resize", calculatePosition);
|
|
3274
3318
|
window.addEventListener("scroll", calculatePosition, true);
|
|
3275
3319
|
return () => {
|
|
3320
|
+
cancelAnimationFrame(raf);
|
|
3276
3321
|
window.removeEventListener("resize", calculatePosition);
|
|
3277
3322
|
window.removeEventListener("scroll", calculatePosition, true);
|
|
3278
3323
|
};
|
|
@@ -3282,9 +3327,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3282
3327
|
var useAutoPosition_default = useAutoPosition;
|
|
3283
3328
|
|
|
3284
3329
|
// src/tokens/hooks/useClickOutside.ts
|
|
3285
|
-
import
|
|
3330
|
+
import React18 from "react";
|
|
3286
3331
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
3287
|
-
|
|
3332
|
+
React18.useEffect(() => {
|
|
3288
3333
|
if (!enabled) return;
|
|
3289
3334
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
3290
3335
|
const listener = (event) => {
|
|
@@ -3307,17 +3352,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
3307
3352
|
var useClickOutside_default = useClickOutside;
|
|
3308
3353
|
|
|
3309
3354
|
// src/components/Dropdown/Dropdown.tsx
|
|
3310
|
-
import { jsx as
|
|
3355
|
+
import { jsx as jsx321, jsxs as jsxs206 } from "react/jsx-runtime";
|
|
3311
3356
|
var Dropdown = (props) => {
|
|
3312
3357
|
const { items, children } = props;
|
|
3313
|
-
const [isOpen, setIsOpen] =
|
|
3314
|
-
const [mounted, setMounted] =
|
|
3315
|
-
const [visible, setVisible] =
|
|
3316
|
-
const triggerRef =
|
|
3317
|
-
const menuRef =
|
|
3318
|
-
const { position, direction } = useAutoPosition_default(triggerRef, menuRef,
|
|
3319
|
-
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false));
|
|
3320
|
-
|
|
3358
|
+
const [isOpen, setIsOpen] = React19.useState(false);
|
|
3359
|
+
const [mounted, setMounted] = React19.useState(false);
|
|
3360
|
+
const [visible, setVisible] = React19.useState(false);
|
|
3361
|
+
const triggerRef = React19.useRef(null);
|
|
3362
|
+
const menuRef = React19.useRef(null);
|
|
3363
|
+
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
3364
|
+
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
3365
|
+
React19.useEffect(() => {
|
|
3321
3366
|
if (isOpen) {
|
|
3322
3367
|
setMounted(true);
|
|
3323
3368
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3333,7 +3378,7 @@ var Dropdown = (props) => {
|
|
|
3333
3378
|
setIsOpen(false);
|
|
3334
3379
|
};
|
|
3335
3380
|
return /* @__PURE__ */ jsxs206("div", { className: "lib-xplat-dropdown", children: [
|
|
3336
|
-
/* @__PURE__ */
|
|
3381
|
+
/* @__PURE__ */ jsx321(
|
|
3337
3382
|
"div",
|
|
3338
3383
|
{
|
|
3339
3384
|
ref: triggerRef,
|
|
@@ -3342,14 +3387,14 @@ var Dropdown = (props) => {
|
|
|
3342
3387
|
children
|
|
3343
3388
|
}
|
|
3344
3389
|
),
|
|
3345
|
-
mounted && /* @__PURE__ */
|
|
3390
|
+
mounted && /* @__PURE__ */ jsx321(Portal_default, { children: /* @__PURE__ */ jsx321(
|
|
3346
3391
|
"div",
|
|
3347
3392
|
{
|
|
3348
3393
|
ref: menuRef,
|
|
3349
|
-
className: clsx_default("dropdown-menu", direction, { visible }),
|
|
3394
|
+
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
3350
3395
|
style: { top: position.top, left: position.left },
|
|
3351
3396
|
role: "menu",
|
|
3352
|
-
children: items.map((item) => /* @__PURE__ */
|
|
3397
|
+
children: items.map((item) => /* @__PURE__ */ jsx321(
|
|
3353
3398
|
"button",
|
|
3354
3399
|
{
|
|
3355
3400
|
className: clsx_default("dropdown-item", {
|
|
@@ -3364,30 +3409,30 @@ var Dropdown = (props) => {
|
|
|
3364
3409
|
item.key
|
|
3365
3410
|
))
|
|
3366
3411
|
}
|
|
3367
|
-
)
|
|
3412
|
+
) })
|
|
3368
3413
|
] });
|
|
3369
3414
|
};
|
|
3370
3415
|
Dropdown.displayName = "Dropdown";
|
|
3371
3416
|
var Dropdown_default = Dropdown;
|
|
3372
3417
|
|
|
3373
3418
|
// src/components/EmptyState/EmptyState.tsx
|
|
3374
|
-
import { jsx as
|
|
3419
|
+
import { jsx as jsx322, jsxs as jsxs207 } from "react/jsx-runtime";
|
|
3375
3420
|
var EmptyState = (props) => {
|
|
3376
3421
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
3377
3422
|
return /* @__PURE__ */ jsxs207("div", { className: "lib-xplat-empty-state", children: [
|
|
3378
|
-
icon && /* @__PURE__ */
|
|
3379
|
-
!icon && /* @__PURE__ */
|
|
3380
|
-
/* @__PURE__ */
|
|
3381
|
-
description && /* @__PURE__ */
|
|
3382
|
-
action && /* @__PURE__ */
|
|
3423
|
+
icon && /* @__PURE__ */ jsx322("div", { className: "empty-icon", children: icon }),
|
|
3424
|
+
!icon && /* @__PURE__ */ jsx322("div", { className: "empty-icon", children: /* @__PURE__ */ jsx322("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx322("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" }) }) }),
|
|
3425
|
+
/* @__PURE__ */ jsx322("p", { className: "empty-title", children: title }),
|
|
3426
|
+
description && /* @__PURE__ */ jsx322("p", { className: "empty-description", children: description }),
|
|
3427
|
+
action && /* @__PURE__ */ jsx322("div", { className: "empty-action", children: action })
|
|
3383
3428
|
] });
|
|
3384
3429
|
};
|
|
3385
3430
|
EmptyState.displayName = "EmptyState";
|
|
3386
3431
|
var EmptyState_default = EmptyState;
|
|
3387
3432
|
|
|
3388
3433
|
// src/components/FileUpload/FileUpload.tsx
|
|
3389
|
-
import
|
|
3390
|
-
import { jsx as
|
|
3434
|
+
import React20 from "react";
|
|
3435
|
+
import { jsx as jsx323, jsxs as jsxs208 } from "react/jsx-runtime";
|
|
3391
3436
|
var FileUpload = (props) => {
|
|
3392
3437
|
const {
|
|
3393
3438
|
accept,
|
|
@@ -3397,8 +3442,8 @@ var FileUpload = (props) => {
|
|
|
3397
3442
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
3398
3443
|
description
|
|
3399
3444
|
} = props;
|
|
3400
|
-
const [isDragOver, setIsDragOver] =
|
|
3401
|
-
const inputRef =
|
|
3445
|
+
const [isDragOver, setIsDragOver] = React20.useState(false);
|
|
3446
|
+
const inputRef = React20.useRef(null);
|
|
3402
3447
|
const handleFiles = (fileList) => {
|
|
3403
3448
|
let files = Array.from(fileList);
|
|
3404
3449
|
if (maxSize) {
|
|
@@ -3437,7 +3482,7 @@ var FileUpload = (props) => {
|
|
|
3437
3482
|
onDragLeave: handleDragLeave,
|
|
3438
3483
|
onClick: () => inputRef.current?.click(),
|
|
3439
3484
|
children: [
|
|
3440
|
-
/* @__PURE__ */
|
|
3485
|
+
/* @__PURE__ */ jsx323(
|
|
3441
3486
|
"input",
|
|
3442
3487
|
{
|
|
3443
3488
|
ref: inputRef,
|
|
@@ -3447,9 +3492,9 @@ var FileUpload = (props) => {
|
|
|
3447
3492
|
onChange: handleChange
|
|
3448
3493
|
}
|
|
3449
3494
|
),
|
|
3450
|
-
/* @__PURE__ */
|
|
3451
|
-
/* @__PURE__ */
|
|
3452
|
-
description && /* @__PURE__ */
|
|
3495
|
+
/* @__PURE__ */ jsx323("div", { className: "upload-icon", children: /* @__PURE__ */ jsx323(UploadIcon_default, {}) }),
|
|
3496
|
+
/* @__PURE__ */ jsx323("p", { className: "upload-label", children: label }),
|
|
3497
|
+
description && /* @__PURE__ */ jsx323("p", { className: "upload-description", children: description })
|
|
3453
3498
|
]
|
|
3454
3499
|
}
|
|
3455
3500
|
);
|
|
@@ -3458,10 +3503,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
3458
3503
|
var FileUpload_default = FileUpload;
|
|
3459
3504
|
|
|
3460
3505
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
3461
|
-
import
|
|
3506
|
+
import React22 from "react";
|
|
3462
3507
|
|
|
3463
3508
|
// src/components/HtmlTypeWriter/utils.ts
|
|
3464
|
-
import
|
|
3509
|
+
import React21 from "react";
|
|
3465
3510
|
var voidTags = /* @__PURE__ */ new Set([
|
|
3466
3511
|
"br",
|
|
3467
3512
|
"img",
|
|
@@ -3529,41 +3574,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
3529
3574
|
props[attr.name] = attr.value;
|
|
3530
3575
|
});
|
|
3531
3576
|
if (voidTags.has(tag)) {
|
|
3532
|
-
return
|
|
3577
|
+
return React21.createElement(tag, props);
|
|
3533
3578
|
}
|
|
3534
3579
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
3535
|
-
return
|
|
3580
|
+
return React21.createElement(tag, props, ...children);
|
|
3536
3581
|
};
|
|
3537
3582
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
3538
3583
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
3539
3584
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
3540
|
-
return node == null ? null :
|
|
3585
|
+
return node == null ? null : React21.createElement(React21.Fragment, { key: idx }, node);
|
|
3541
3586
|
}).filter(Boolean);
|
|
3542
3587
|
return nodes.length === 0 ? null : nodes;
|
|
3543
3588
|
};
|
|
3544
3589
|
|
|
3545
3590
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
3546
|
-
import { jsx as
|
|
3591
|
+
import { jsx as jsx324 } from "react/jsx-runtime";
|
|
3547
3592
|
var HtmlTypeWriter = ({
|
|
3548
3593
|
html,
|
|
3549
3594
|
duration = 20,
|
|
3550
3595
|
onDone,
|
|
3551
3596
|
onChange
|
|
3552
3597
|
}) => {
|
|
3553
|
-
const [typedLen, setTypedLen] =
|
|
3554
|
-
const doneCalledRef =
|
|
3555
|
-
const { doc, rangeMap, totalLength } =
|
|
3598
|
+
const [typedLen, setTypedLen] = React22.useState(0);
|
|
3599
|
+
const doneCalledRef = React22.useRef(false);
|
|
3600
|
+
const { doc, rangeMap, totalLength } = React22.useMemo(() => {
|
|
3556
3601
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
3557
3602
|
const decoded = decodeHtmlEntities(html);
|
|
3558
3603
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
3559
3604
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
3560
3605
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
3561
3606
|
}, [html]);
|
|
3562
|
-
|
|
3607
|
+
React22.useEffect(() => {
|
|
3563
3608
|
setTypedLen(0);
|
|
3564
3609
|
doneCalledRef.current = false;
|
|
3565
3610
|
}, [html]);
|
|
3566
|
-
|
|
3611
|
+
React22.useEffect(() => {
|
|
3567
3612
|
if (!totalLength) return;
|
|
3568
3613
|
if (typedLen >= totalLength) return;
|
|
3569
3614
|
const timer = window.setInterval(() => {
|
|
@@ -3571,33 +3616,33 @@ var HtmlTypeWriter = ({
|
|
|
3571
3616
|
}, duration);
|
|
3572
3617
|
return () => window.clearInterval(timer);
|
|
3573
3618
|
}, [typedLen, totalLength, duration]);
|
|
3574
|
-
|
|
3619
|
+
React22.useEffect(() => {
|
|
3575
3620
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
3576
3621
|
onChange?.();
|
|
3577
3622
|
}
|
|
3578
3623
|
}, [typedLen, totalLength, onChange]);
|
|
3579
|
-
|
|
3624
|
+
React22.useEffect(() => {
|
|
3580
3625
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
3581
3626
|
doneCalledRef.current = true;
|
|
3582
3627
|
onDone?.();
|
|
3583
3628
|
}
|
|
3584
3629
|
}, [typedLen, totalLength, onDone]);
|
|
3585
|
-
const parsed =
|
|
3630
|
+
const parsed = React22.useMemo(
|
|
3586
3631
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
3587
3632
|
[doc, typedLen, rangeMap]
|
|
3588
3633
|
);
|
|
3589
|
-
return /* @__PURE__ */
|
|
3634
|
+
return /* @__PURE__ */ jsx324("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
3590
3635
|
};
|
|
3591
3636
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
3592
3637
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
3593
3638
|
|
|
3594
3639
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
3595
|
-
import
|
|
3596
|
-
import { jsx as
|
|
3640
|
+
import React23 from "react";
|
|
3641
|
+
import { jsx as jsx325, jsxs as jsxs209 } from "react/jsx-runtime";
|
|
3597
3642
|
var ImageSelector = (props) => {
|
|
3598
3643
|
const { value, label, onChange } = props;
|
|
3599
|
-
const [previewUrl, setPreviewUrl] =
|
|
3600
|
-
|
|
3644
|
+
const [previewUrl, setPreviewUrl] = React23.useState();
|
|
3645
|
+
React23.useEffect(() => {
|
|
3601
3646
|
if (!value) {
|
|
3602
3647
|
setPreviewUrl(void 0);
|
|
3603
3648
|
return;
|
|
@@ -3606,7 +3651,7 @@ var ImageSelector = (props) => {
|
|
|
3606
3651
|
setPreviewUrl(url);
|
|
3607
3652
|
return () => URL.revokeObjectURL(url);
|
|
3608
3653
|
}, [value]);
|
|
3609
|
-
const inputRef =
|
|
3654
|
+
const inputRef = React23.useRef(null);
|
|
3610
3655
|
const handleFileChange = (e) => {
|
|
3611
3656
|
const selectedFile = e.target.files?.[0];
|
|
3612
3657
|
if (selectedFile) {
|
|
@@ -3620,7 +3665,7 @@ var ImageSelector = (props) => {
|
|
|
3620
3665
|
inputRef.current?.click();
|
|
3621
3666
|
};
|
|
3622
3667
|
return /* @__PURE__ */ jsxs209("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
3623
|
-
/* @__PURE__ */
|
|
3668
|
+
/* @__PURE__ */ jsx325(
|
|
3624
3669
|
"input",
|
|
3625
3670
|
{
|
|
3626
3671
|
type: "file",
|
|
@@ -3631,12 +3676,12 @@ var ImageSelector = (props) => {
|
|
|
3631
3676
|
}
|
|
3632
3677
|
),
|
|
3633
3678
|
value && /* @__PURE__ */ jsxs209("div", { className: "action-bar", children: [
|
|
3634
|
-
/* @__PURE__ */
|
|
3635
|
-
/* @__PURE__ */
|
|
3679
|
+
/* @__PURE__ */ jsx325("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ jsx325(UploadIcon_default, {}) }),
|
|
3680
|
+
/* @__PURE__ */ jsx325("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ jsx325(DeleteIcon_default, {}) })
|
|
3636
3681
|
] }),
|
|
3637
|
-
/* @__PURE__ */
|
|
3638
|
-
/* @__PURE__ */
|
|
3639
|
-
/* @__PURE__ */
|
|
3682
|
+
/* @__PURE__ */ jsx325("div", { className: "content", children: previewUrl ? /* @__PURE__ */ jsx325("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ jsxs209("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
|
|
3683
|
+
/* @__PURE__ */ jsx325("div", { className: "icon-wrapper", children: /* @__PURE__ */ jsx325(ImageIcon_default, {}) }),
|
|
3684
|
+
/* @__PURE__ */ jsx325("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
3640
3685
|
] }) })
|
|
3641
3686
|
] });
|
|
3642
3687
|
};
|
|
@@ -3644,7 +3689,7 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
3644
3689
|
var ImageSelector_default = ImageSelector;
|
|
3645
3690
|
|
|
3646
3691
|
// src/components/Pagination/Pagination.tsx
|
|
3647
|
-
import { jsx as
|
|
3692
|
+
import { jsx as jsx326, jsxs as jsxs210 } from "react/jsx-runtime";
|
|
3648
3693
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
3649
3694
|
const totalNumbers = siblingCount * 2 + 5;
|
|
3650
3695
|
if (totalPages <= totalNumbers) {
|
|
@@ -3688,18 +3733,18 @@ var Pagination = (props) => {
|
|
|
3688
3733
|
}
|
|
3689
3734
|
};
|
|
3690
3735
|
return /* @__PURE__ */ jsxs210("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
3691
|
-
/* @__PURE__ */
|
|
3736
|
+
/* @__PURE__ */ jsx326(
|
|
3692
3737
|
"button",
|
|
3693
3738
|
{
|
|
3694
3739
|
className: "page-btn prev",
|
|
3695
3740
|
disabled: current <= 1,
|
|
3696
3741
|
onClick: () => handleClick(current - 1),
|
|
3697
3742
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
3698
|
-
children: /* @__PURE__ */
|
|
3743
|
+
children: /* @__PURE__ */ jsx326(ChevronLeftIcon_default, {})
|
|
3699
3744
|
}
|
|
3700
3745
|
),
|
|
3701
3746
|
pages.map(
|
|
3702
|
-
(page, i) => page === "..." ? /* @__PURE__ */
|
|
3747
|
+
(page, i) => page === "..." ? /* @__PURE__ */ jsx326("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ jsx326(
|
|
3703
3748
|
"button",
|
|
3704
3749
|
{
|
|
3705
3750
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -3710,14 +3755,14 @@ var Pagination = (props) => {
|
|
|
3710
3755
|
page
|
|
3711
3756
|
)
|
|
3712
3757
|
),
|
|
3713
|
-
/* @__PURE__ */
|
|
3758
|
+
/* @__PURE__ */ jsx326(
|
|
3714
3759
|
"button",
|
|
3715
3760
|
{
|
|
3716
3761
|
className: "page-btn next",
|
|
3717
3762
|
disabled: current >= totalPages,
|
|
3718
3763
|
onClick: () => handleClick(current + 1),
|
|
3719
3764
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
3720
|
-
children: /* @__PURE__ */
|
|
3765
|
+
children: /* @__PURE__ */ jsx326(ChevronRightIcon_default, {})
|
|
3721
3766
|
}
|
|
3722
3767
|
)
|
|
3723
3768
|
] });
|
|
@@ -3726,17 +3771,17 @@ Pagination.displayName = "Pagination";
|
|
|
3726
3771
|
var Pagination_default = Pagination;
|
|
3727
3772
|
|
|
3728
3773
|
// src/components/PopOver/PopOver.tsx
|
|
3729
|
-
import
|
|
3730
|
-
import { jsx as
|
|
3774
|
+
import React24 from "react";
|
|
3775
|
+
import { jsx as jsx327, jsxs as jsxs211 } from "react/jsx-runtime";
|
|
3731
3776
|
var PopOver = (props) => {
|
|
3732
3777
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
3733
|
-
const popRef =
|
|
3734
|
-
const triggerRef =
|
|
3735
|
-
const [localOpen, setLocalOpen] =
|
|
3736
|
-
const [eventTrigger, setEventTrigger] =
|
|
3778
|
+
const popRef = React24.useRef(null);
|
|
3779
|
+
const triggerRef = React24.useRef(null);
|
|
3780
|
+
const [localOpen, setLocalOpen] = React24.useState(false);
|
|
3781
|
+
const [eventTrigger, setEventTrigger] = React24.useState(false);
|
|
3737
3782
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
3738
3783
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
3739
|
-
|
|
3784
|
+
React24.useEffect(() => {
|
|
3740
3785
|
if (isOpen) {
|
|
3741
3786
|
setLocalOpen(isOpen);
|
|
3742
3787
|
setTimeout(() => {
|
|
@@ -3759,11 +3804,11 @@ var PopOver = (props) => {
|
|
|
3759
3804
|
},
|
|
3760
3805
|
children: [
|
|
3761
3806
|
children,
|
|
3762
|
-
localOpen && /* @__PURE__ */
|
|
3807
|
+
localOpen && /* @__PURE__ */ jsx327(Portal_default, { children: /* @__PURE__ */ jsx327(
|
|
3763
3808
|
"div",
|
|
3764
3809
|
{
|
|
3765
3810
|
className: clsx_default(
|
|
3766
|
-
"content
|
|
3811
|
+
"lib-xplat-pop-over-content",
|
|
3767
3812
|
position.direction,
|
|
3768
3813
|
eventTrigger && "visible"
|
|
3769
3814
|
),
|
|
@@ -3773,7 +3818,7 @@ var PopOver = (props) => {
|
|
|
3773
3818
|
},
|
|
3774
3819
|
children: PopOverEl
|
|
3775
3820
|
}
|
|
3776
|
-
)
|
|
3821
|
+
) })
|
|
3777
3822
|
]
|
|
3778
3823
|
}
|
|
3779
3824
|
);
|
|
@@ -3782,7 +3827,7 @@ PopOver.displayName = "PopOver";
|
|
|
3782
3827
|
var PopOver_default = PopOver;
|
|
3783
3828
|
|
|
3784
3829
|
// src/components/Progress/Progress.tsx
|
|
3785
|
-
import { jsx as
|
|
3830
|
+
import { jsx as jsx328, jsxs as jsxs212 } from "react/jsx-runtime";
|
|
3786
3831
|
var Progress = (props) => {
|
|
3787
3832
|
const {
|
|
3788
3833
|
value,
|
|
@@ -3793,7 +3838,7 @@ var Progress = (props) => {
|
|
|
3793
3838
|
} = props;
|
|
3794
3839
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
3795
3840
|
return /* @__PURE__ */ jsxs212("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
3796
|
-
/* @__PURE__ */
|
|
3841
|
+
/* @__PURE__ */ jsx328(
|
|
3797
3842
|
"div",
|
|
3798
3843
|
{
|
|
3799
3844
|
className: "track",
|
|
@@ -3801,7 +3846,7 @@ var Progress = (props) => {
|
|
|
3801
3846
|
"aria-valuenow": value,
|
|
3802
3847
|
"aria-valuemin": 0,
|
|
3803
3848
|
"aria-valuemax": max,
|
|
3804
|
-
children: /* @__PURE__ */
|
|
3849
|
+
children: /* @__PURE__ */ jsx328(
|
|
3805
3850
|
"div",
|
|
3806
3851
|
{
|
|
3807
3852
|
className: "bar",
|
|
@@ -3820,17 +3865,17 @@ Progress.displayName = "Progress";
|
|
|
3820
3865
|
var Progress_default = Progress;
|
|
3821
3866
|
|
|
3822
3867
|
// src/components/Radio/RadioGroupContext.tsx
|
|
3823
|
-
import
|
|
3824
|
-
var RadioGroupContext =
|
|
3868
|
+
import React25 from "react";
|
|
3869
|
+
var RadioGroupContext = React25.createContext(
|
|
3825
3870
|
null
|
|
3826
3871
|
);
|
|
3827
3872
|
var useRadioGroupContext = () => {
|
|
3828
|
-
return
|
|
3873
|
+
return React25.useContext(RadioGroupContext);
|
|
3829
3874
|
};
|
|
3830
3875
|
var RadioGroupContext_default = RadioGroupContext;
|
|
3831
3876
|
|
|
3832
3877
|
// src/components/Radio/Radio.tsx
|
|
3833
|
-
import { jsx as
|
|
3878
|
+
import { jsx as jsx329, jsxs as jsxs213 } from "react/jsx-runtime";
|
|
3834
3879
|
var Radio = (props) => {
|
|
3835
3880
|
const {
|
|
3836
3881
|
label,
|
|
@@ -3858,18 +3903,18 @@ var Radio = (props) => {
|
|
|
3858
3903
|
localChecked ? "checked" : void 0
|
|
3859
3904
|
),
|
|
3860
3905
|
children: [
|
|
3861
|
-
/* @__PURE__ */
|
|
3862
|
-
/* @__PURE__ */
|
|
3906
|
+
/* @__PURE__ */ jsx329("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
3907
|
+
/* @__PURE__ */ jsx329(
|
|
3863
3908
|
"div",
|
|
3864
3909
|
{
|
|
3865
3910
|
className: clsx_default(
|
|
3866
3911
|
"circle",
|
|
3867
3912
|
localChecked ? "checked" : void 0
|
|
3868
3913
|
),
|
|
3869
|
-
children: localChecked && /* @__PURE__ */
|
|
3914
|
+
children: localChecked && /* @__PURE__ */ jsx329("div", { className: "inner-circle" })
|
|
3870
3915
|
}
|
|
3871
3916
|
),
|
|
3872
|
-
label && /* @__PURE__ */
|
|
3917
|
+
label && /* @__PURE__ */ jsx329("span", { children: label })
|
|
3873
3918
|
]
|
|
3874
3919
|
}
|
|
3875
3920
|
);
|
|
@@ -3878,28 +3923,28 @@ Radio.displayName = "Radio";
|
|
|
3878
3923
|
var Radio_default = Radio;
|
|
3879
3924
|
|
|
3880
3925
|
// src/components/Radio/RadioGroup.tsx
|
|
3881
|
-
import { Fragment as
|
|
3926
|
+
import { Fragment as Fragment4, jsx as jsx330 } from "react/jsx-runtime";
|
|
3882
3927
|
var RadioGroup = (props) => {
|
|
3883
3928
|
const { children, ...rest } = props;
|
|
3884
|
-
return /* @__PURE__ */
|
|
3929
|
+
return /* @__PURE__ */ jsx330(Fragment4, { children: /* @__PURE__ */ jsx330(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
3885
3930
|
};
|
|
3886
3931
|
RadioGroup.displayName = "RadioGroup";
|
|
3887
3932
|
var RadioGroup_default = RadioGroup;
|
|
3888
3933
|
|
|
3889
3934
|
// src/components/Select/Select.tsx
|
|
3890
|
-
import
|
|
3935
|
+
import React28 from "react";
|
|
3891
3936
|
|
|
3892
3937
|
// src/components/Select/context.ts
|
|
3893
|
-
import
|
|
3894
|
-
var SelectContext =
|
|
3938
|
+
import React26 from "react";
|
|
3939
|
+
var SelectContext = React26.createContext(null);
|
|
3895
3940
|
var context_default = SelectContext;
|
|
3896
3941
|
|
|
3897
3942
|
// src/components/Select/SelectItem.tsx
|
|
3898
|
-
import
|
|
3899
|
-
import { jsx as
|
|
3943
|
+
import React27 from "react";
|
|
3944
|
+
import { jsx as jsx331 } from "react/jsx-runtime";
|
|
3900
3945
|
var SelectItem = (props) => {
|
|
3901
3946
|
const { children, value, onClick, disabled = false } = props;
|
|
3902
|
-
const ctx =
|
|
3947
|
+
const ctx = React27.useContext(context_default);
|
|
3903
3948
|
const handleClick = (e) => {
|
|
3904
3949
|
e.preventDefault();
|
|
3905
3950
|
e.stopPropagation();
|
|
@@ -3908,7 +3953,7 @@ var SelectItem = (props) => {
|
|
|
3908
3953
|
ctx?.close();
|
|
3909
3954
|
onClick?.();
|
|
3910
3955
|
};
|
|
3911
|
-
return /* @__PURE__ */
|
|
3956
|
+
return /* @__PURE__ */ jsx331(
|
|
3912
3957
|
"div",
|
|
3913
3958
|
{
|
|
3914
3959
|
className: clsx_default("select-item", disabled && "disabled"),
|
|
@@ -3929,7 +3974,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
3929
3974
|
var SelectItem_default = SelectItem;
|
|
3930
3975
|
|
|
3931
3976
|
// src/components/Select/Select.tsx
|
|
3932
|
-
import { jsx as
|
|
3977
|
+
import { jsx as jsx332, jsxs as jsxs214 } from "react/jsx-runtime";
|
|
3933
3978
|
var ANIMATION_DURATION_MS3 = 200;
|
|
3934
3979
|
var SelectRoot = (props) => {
|
|
3935
3980
|
const {
|
|
@@ -3941,26 +3986,26 @@ var SelectRoot = (props) => {
|
|
|
3941
3986
|
error = false,
|
|
3942
3987
|
size = "md"
|
|
3943
3988
|
} = props;
|
|
3944
|
-
const itemChildren =
|
|
3945
|
-
(child) =>
|
|
3989
|
+
const itemChildren = React28.Children.toArray(children).filter(
|
|
3990
|
+
(child) => React28.isValidElement(child) && child.type === SelectItem_default
|
|
3946
3991
|
);
|
|
3947
3992
|
const isControlled = valueProp !== void 0;
|
|
3948
|
-
const [isOpen, setOpen] =
|
|
3949
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
3950
|
-
const controlledLabel =
|
|
3993
|
+
const [isOpen, setOpen] = React28.useState(false);
|
|
3994
|
+
const [uncontrolledLabel, setUncontrolledLabel] = React28.useState(null);
|
|
3995
|
+
const controlledLabel = React28.useMemo(() => {
|
|
3951
3996
|
if (!isControlled) return null;
|
|
3952
3997
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
3953
3998
|
return match ? match.props.children : null;
|
|
3954
3999
|
}, [isControlled, valueProp, itemChildren]);
|
|
3955
4000
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
3956
|
-
const triggerRef =
|
|
3957
|
-
const contentRef =
|
|
3958
|
-
const [mounted, setMounted] =
|
|
3959
|
-
const [visible, setVisible] =
|
|
3960
|
-
|
|
4001
|
+
const triggerRef = React28.useRef(null);
|
|
4002
|
+
const contentRef = React28.useRef(null);
|
|
4003
|
+
const [mounted, setMounted] = React28.useState(false);
|
|
4004
|
+
const [visible, setVisible] = React28.useState(false);
|
|
4005
|
+
React28.useEffect(() => {
|
|
3961
4006
|
if (disabled && isOpen) setOpen(false);
|
|
3962
4007
|
}, [disabled, isOpen]);
|
|
3963
|
-
|
|
4008
|
+
React28.useEffect(() => {
|
|
3964
4009
|
if (isOpen) {
|
|
3965
4010
|
setMounted(true);
|
|
3966
4011
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3970,12 +4015,12 @@ var SelectRoot = (props) => {
|
|
|
3970
4015
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
3971
4016
|
return () => clearTimeout(t);
|
|
3972
4017
|
}, [isOpen]);
|
|
3973
|
-
const open =
|
|
3974
|
-
const close =
|
|
3975
|
-
const toggle =
|
|
4018
|
+
const open = React28.useCallback(() => setOpen(true), []);
|
|
4019
|
+
const close = React28.useCallback(() => setOpen(false), []);
|
|
4020
|
+
const toggle = React28.useCallback(() => setOpen((prev) => !prev), []);
|
|
3976
4021
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
3977
4022
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
3978
|
-
const setSelected =
|
|
4023
|
+
const setSelected = React28.useCallback(
|
|
3979
4024
|
(label, itemValue) => {
|
|
3980
4025
|
if (!isControlled) {
|
|
3981
4026
|
setUncontrolledLabel(label);
|
|
@@ -3984,7 +4029,7 @@ var SelectRoot = (props) => {
|
|
|
3984
4029
|
},
|
|
3985
4030
|
[isControlled, onChange]
|
|
3986
4031
|
);
|
|
3987
|
-
const ctxValue =
|
|
4032
|
+
const ctxValue = React28.useMemo(
|
|
3988
4033
|
() => ({
|
|
3989
4034
|
isOpen,
|
|
3990
4035
|
mounted,
|
|
@@ -4005,7 +4050,7 @@ var SelectRoot = (props) => {
|
|
|
4005
4050
|
if (disabled) return;
|
|
4006
4051
|
toggle();
|
|
4007
4052
|
};
|
|
4008
|
-
return /* @__PURE__ */
|
|
4053
|
+
return /* @__PURE__ */ jsx332(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs214(
|
|
4009
4054
|
"div",
|
|
4010
4055
|
{
|
|
4011
4056
|
className: clsx_default(
|
|
@@ -4040,7 +4085,7 @@ var SelectRoot = (props) => {
|
|
|
4040
4085
|
}
|
|
4041
4086
|
},
|
|
4042
4087
|
children: [
|
|
4043
|
-
/* @__PURE__ */
|
|
4088
|
+
/* @__PURE__ */ jsx332(
|
|
4044
4089
|
"span",
|
|
4045
4090
|
{
|
|
4046
4091
|
className: clsx_default(
|
|
@@ -4050,27 +4095,27 @@ var SelectRoot = (props) => {
|
|
|
4050
4095
|
children: selectedLabel ?? placeholder
|
|
4051
4096
|
}
|
|
4052
4097
|
),
|
|
4053
|
-
/* @__PURE__ */
|
|
4098
|
+
/* @__PURE__ */ jsx332(
|
|
4054
4099
|
"span",
|
|
4055
4100
|
{
|
|
4056
4101
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
4057
4102
|
"aria-hidden": true,
|
|
4058
|
-
children: /* @__PURE__ */
|
|
4103
|
+
children: /* @__PURE__ */ jsx332(ChevronDownIcon_default, {})
|
|
4059
4104
|
}
|
|
4060
4105
|
)
|
|
4061
4106
|
]
|
|
4062
4107
|
}
|
|
4063
4108
|
),
|
|
4064
|
-
mounted && /* @__PURE__ */
|
|
4109
|
+
mounted && /* @__PURE__ */ jsx332(Portal_default, { children: /* @__PURE__ */ jsx332(
|
|
4065
4110
|
"div",
|
|
4066
4111
|
{
|
|
4067
|
-
className: clsx_default("select-content", position.direction, stateClass),
|
|
4112
|
+
className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
|
|
4068
4113
|
ref: contentRef,
|
|
4069
4114
|
style: { ...position.position, minWidth: position.position.width },
|
|
4070
4115
|
role: "listbox",
|
|
4071
|
-
children: itemChildren
|
|
4116
|
+
children: /* @__PURE__ */ jsx332(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
4072
4117
|
}
|
|
4073
|
-
)
|
|
4118
|
+
) })
|
|
4074
4119
|
]
|
|
4075
4120
|
}
|
|
4076
4121
|
) });
|
|
@@ -4082,14 +4127,14 @@ var Select = Object.assign(SelectRoot, {
|
|
|
4082
4127
|
var Select_default = Select;
|
|
4083
4128
|
|
|
4084
4129
|
// src/components/Skeleton/Skeleton.tsx
|
|
4085
|
-
import { jsx as
|
|
4130
|
+
import { jsx as jsx333 } from "react/jsx-runtime";
|
|
4086
4131
|
var Skeleton = (props) => {
|
|
4087
4132
|
const { variant = "text", width, height } = props;
|
|
4088
4133
|
const style = {
|
|
4089
4134
|
width: typeof width === "number" ? `${width}px` : width,
|
|
4090
4135
|
height: typeof height === "number" ? `${height}px` : height
|
|
4091
4136
|
};
|
|
4092
|
-
return /* @__PURE__ */
|
|
4137
|
+
return /* @__PURE__ */ jsx333(
|
|
4093
4138
|
"div",
|
|
4094
4139
|
{
|
|
4095
4140
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -4102,20 +4147,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
4102
4147
|
var Skeleton_default = Skeleton;
|
|
4103
4148
|
|
|
4104
4149
|
// src/components/Spinner/Spinner.tsx
|
|
4105
|
-
import { jsx as
|
|
4150
|
+
import { jsx as jsx334, jsxs as jsxs215 } from "react/jsx-runtime";
|
|
4106
4151
|
var Spinner = (props) => {
|
|
4107
4152
|
const {
|
|
4108
4153
|
size = "md",
|
|
4109
4154
|
type = "brand"
|
|
4110
4155
|
} = props;
|
|
4111
|
-
return /* @__PURE__ */
|
|
4156
|
+
return /* @__PURE__ */ jsx334(
|
|
4112
4157
|
"div",
|
|
4113
4158
|
{
|
|
4114
4159
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
4115
4160
|
role: "status",
|
|
4116
4161
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
4117
4162
|
children: /* @__PURE__ */ jsxs215("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
4118
|
-
/* @__PURE__ */
|
|
4163
|
+
/* @__PURE__ */ jsx334(
|
|
4119
4164
|
"circle",
|
|
4120
4165
|
{
|
|
4121
4166
|
className: "track",
|
|
@@ -4125,7 +4170,7 @@ var Spinner = (props) => {
|
|
|
4125
4170
|
strokeWidth: "3"
|
|
4126
4171
|
}
|
|
4127
4172
|
),
|
|
4128
|
-
/* @__PURE__ */
|
|
4173
|
+
/* @__PURE__ */ jsx334(
|
|
4129
4174
|
"circle",
|
|
4130
4175
|
{
|
|
4131
4176
|
className: "indicator",
|
|
@@ -4144,20 +4189,20 @@ Spinner.displayName = "Spinner";
|
|
|
4144
4189
|
var Spinner_default = Spinner;
|
|
4145
4190
|
|
|
4146
4191
|
// src/components/Steps/Steps.tsx
|
|
4147
|
-
import { jsx as
|
|
4192
|
+
import { jsx as jsx335, jsxs as jsxs216 } from "react/jsx-runtime";
|
|
4148
4193
|
var Steps = (props) => {
|
|
4149
4194
|
const {
|
|
4150
4195
|
items,
|
|
4151
4196
|
current,
|
|
4152
4197
|
type = "brand"
|
|
4153
4198
|
} = props;
|
|
4154
|
-
return /* @__PURE__ */
|
|
4199
|
+
return /* @__PURE__ */ jsx335("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
4155
4200
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
4156
4201
|
return /* @__PURE__ */ jsxs216("div", { className: clsx_default("step-item", status), children: [
|
|
4157
|
-
/* @__PURE__ */
|
|
4202
|
+
/* @__PURE__ */ jsx335("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ jsx335(CheckIcon_default, {}) : /* @__PURE__ */ jsx335("span", { children: index + 1 }) }),
|
|
4158
4203
|
/* @__PURE__ */ jsxs216("div", { className: "step-content", children: [
|
|
4159
|
-
/* @__PURE__ */
|
|
4160
|
-
item.description && /* @__PURE__ */
|
|
4204
|
+
/* @__PURE__ */ jsx335("span", { className: "step-title", children: item.title }),
|
|
4205
|
+
item.description && /* @__PURE__ */ jsx335("span", { className: "step-description", children: item.description })
|
|
4161
4206
|
] })
|
|
4162
4207
|
] }, index);
|
|
4163
4208
|
}) });
|
|
@@ -4166,8 +4211,8 @@ Steps.displayName = "Steps";
|
|
|
4166
4211
|
var Steps_default = Steps;
|
|
4167
4212
|
|
|
4168
4213
|
// src/components/Swiper/Swiper.tsx
|
|
4169
|
-
import
|
|
4170
|
-
import { jsx as
|
|
4214
|
+
import React29 from "react";
|
|
4215
|
+
import { jsx as jsx336, jsxs as jsxs217 } from "react/jsx-runtime";
|
|
4171
4216
|
var Swiper = (props) => {
|
|
4172
4217
|
const {
|
|
4173
4218
|
auto = false,
|
|
@@ -4190,23 +4235,23 @@ var Swiper = (props) => {
|
|
|
4190
4235
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
4191
4236
|
const useLoop = loop && canSlide;
|
|
4192
4237
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
4193
|
-
const extendedItems =
|
|
4238
|
+
const extendedItems = React29.useMemo(() => {
|
|
4194
4239
|
if (!useLoop) return items;
|
|
4195
4240
|
return [...items, ...items, ...items];
|
|
4196
4241
|
}, [items, useLoop]);
|
|
4197
4242
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
4198
|
-
const [innerIndex, setInnerIndex] =
|
|
4243
|
+
const [innerIndex, setInnerIndex] = React29.useState(
|
|
4199
4244
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
4200
4245
|
);
|
|
4201
|
-
const [isDragging, setIsDragging] =
|
|
4202
|
-
const [dragOffset, setDragOffset] =
|
|
4203
|
-
const [animated, setAnimated] =
|
|
4204
|
-
const [containerWidth, setContainerWidth] =
|
|
4205
|
-
const containerRef =
|
|
4206
|
-
const startXRef =
|
|
4207
|
-
const startTimeRef =
|
|
4208
|
-
const autoplayTimerRef =
|
|
4209
|
-
|
|
4246
|
+
const [isDragging, setIsDragging] = React29.useState(false);
|
|
4247
|
+
const [dragOffset, setDragOffset] = React29.useState(0);
|
|
4248
|
+
const [animated, setAnimated] = React29.useState(true);
|
|
4249
|
+
const [containerWidth, setContainerWidth] = React29.useState(0);
|
|
4250
|
+
const containerRef = React29.useRef(null);
|
|
4251
|
+
const startXRef = React29.useRef(0);
|
|
4252
|
+
const startTimeRef = React29.useRef(0);
|
|
4253
|
+
const autoplayTimerRef = React29.useRef(null);
|
|
4254
|
+
React29.useEffect(() => {
|
|
4210
4255
|
const el = containerRef.current;
|
|
4211
4256
|
if (!el) return;
|
|
4212
4257
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -4225,7 +4270,7 @@ var Swiper = (props) => {
|
|
|
4225
4270
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
4226
4271
|
};
|
|
4227
4272
|
const realIndex = getRealIndex(innerIndex);
|
|
4228
|
-
const moveToInner =
|
|
4273
|
+
const moveToInner = React29.useCallback(
|
|
4229
4274
|
(idx, withAnim = true) => {
|
|
4230
4275
|
if (!useLoop) {
|
|
4231
4276
|
setAnimated(withAnim);
|
|
@@ -4253,7 +4298,7 @@ var Swiper = (props) => {
|
|
|
4253
4298
|
},
|
|
4254
4299
|
[useLoop, cloneCount, totalSlides]
|
|
4255
4300
|
);
|
|
4256
|
-
const handleTransitionEnd =
|
|
4301
|
+
const handleTransitionEnd = React29.useCallback(() => {
|
|
4257
4302
|
if (!useLoop) return;
|
|
4258
4303
|
const real = getRealIndex(innerIndex);
|
|
4259
4304
|
const canonical = cloneCount + real;
|
|
@@ -4263,7 +4308,7 @@ var Swiper = (props) => {
|
|
|
4263
4308
|
}
|
|
4264
4309
|
onChange?.(Math.min(real, maxIndex));
|
|
4265
4310
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
4266
|
-
const slideTo =
|
|
4311
|
+
const slideTo = React29.useCallback(
|
|
4267
4312
|
(logicalIndex) => {
|
|
4268
4313
|
if (!canSlide) return;
|
|
4269
4314
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -4273,7 +4318,7 @@ var Swiper = (props) => {
|
|
|
4273
4318
|
},
|
|
4274
4319
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
4275
4320
|
);
|
|
4276
|
-
const slideNext =
|
|
4321
|
+
const slideNext = React29.useCallback(() => {
|
|
4277
4322
|
if (!canSlide) return;
|
|
4278
4323
|
const nextInner = innerIndex + slideBy;
|
|
4279
4324
|
if (useLoop) {
|
|
@@ -4282,7 +4327,7 @@ var Swiper = (props) => {
|
|
|
4282
4327
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
4283
4328
|
}
|
|
4284
4329
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
4285
|
-
const slidePrev =
|
|
4330
|
+
const slidePrev = React29.useCallback(() => {
|
|
4286
4331
|
if (!canSlide) return;
|
|
4287
4332
|
const prevInner = innerIndex - slideBy;
|
|
4288
4333
|
if (useLoop) {
|
|
@@ -4291,7 +4336,7 @@ var Swiper = (props) => {
|
|
|
4291
4336
|
moveToInner(Math.max(prevInner, 0), true);
|
|
4292
4337
|
}
|
|
4293
4338
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
4294
|
-
|
|
4339
|
+
React29.useEffect(() => {
|
|
4295
4340
|
if (indexProp === void 0) return;
|
|
4296
4341
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
4297
4342
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -4299,12 +4344,12 @@ var Swiper = (props) => {
|
|
|
4299
4344
|
moveToInner(target, true);
|
|
4300
4345
|
}
|
|
4301
4346
|
}, [indexProp]);
|
|
4302
|
-
|
|
4347
|
+
React29.useImperativeHandle(swiperRef, () => ({
|
|
4303
4348
|
slidePrev,
|
|
4304
4349
|
slideNext,
|
|
4305
4350
|
slideTo
|
|
4306
4351
|
}));
|
|
4307
|
-
|
|
4352
|
+
React29.useEffect(() => {
|
|
4308
4353
|
if (!auto || !canSlide) return;
|
|
4309
4354
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
4310
4355
|
return () => {
|
|
@@ -4327,7 +4372,7 @@ var Swiper = (props) => {
|
|
|
4327
4372
|
startXRef.current = getClientX(e);
|
|
4328
4373
|
startTimeRef.current = Date.now();
|
|
4329
4374
|
};
|
|
4330
|
-
|
|
4375
|
+
React29.useEffect(() => {
|
|
4331
4376
|
if (!isDragging) return;
|
|
4332
4377
|
const handleMove = (e) => {
|
|
4333
4378
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -4365,8 +4410,8 @@ var Swiper = (props) => {
|
|
|
4365
4410
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
4366
4411
|
const slideWidthPercent = 100 / viewItemCount;
|
|
4367
4412
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
4368
|
-
const slideElements =
|
|
4369
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */
|
|
4413
|
+
const slideElements = React29.useMemo(
|
|
4414
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ jsx336(
|
|
4370
4415
|
"div",
|
|
4371
4416
|
{
|
|
4372
4417
|
className: "lib-xplat-swiper__slide",
|
|
@@ -4386,13 +4431,13 @@ var Swiper = (props) => {
|
|
|
4386
4431
|
totalSteps - 1
|
|
4387
4432
|
);
|
|
4388
4433
|
return /* @__PURE__ */ jsxs217("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
4389
|
-
/* @__PURE__ */
|
|
4434
|
+
/* @__PURE__ */ jsx336(
|
|
4390
4435
|
"div",
|
|
4391
4436
|
{
|
|
4392
4437
|
className: "lib-xplat-swiper__viewport",
|
|
4393
4438
|
onMouseDown: handleDragStart,
|
|
4394
4439
|
onTouchStart: handleDragStart,
|
|
4395
|
-
children: /* @__PURE__ */
|
|
4440
|
+
children: /* @__PURE__ */ jsx336(
|
|
4396
4441
|
"div",
|
|
4397
4442
|
{
|
|
4398
4443
|
className: clsx_default(
|
|
@@ -4410,7 +4455,7 @@ var Swiper = (props) => {
|
|
|
4410
4455
|
)
|
|
4411
4456
|
}
|
|
4412
4457
|
),
|
|
4413
|
-
showProgress && canSlide && /* @__PURE__ */
|
|
4458
|
+
showProgress && canSlide && /* @__PURE__ */ jsx336("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ jsx336("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ jsx336(
|
|
4414
4459
|
"span",
|
|
4415
4460
|
{
|
|
4416
4461
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -4420,7 +4465,7 @@ var Swiper = (props) => {
|
|
|
4420
4465
|
}
|
|
4421
4466
|
}
|
|
4422
4467
|
) }) }),
|
|
4423
|
-
canSlide && /* @__PURE__ */
|
|
4468
|
+
canSlide && /* @__PURE__ */ jsx336("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ jsx336(
|
|
4424
4469
|
"button",
|
|
4425
4470
|
{
|
|
4426
4471
|
className: clsx_default(
|
|
@@ -4438,8 +4483,8 @@ Swiper.displayName = "Swiper";
|
|
|
4438
4483
|
var Swiper_default = Swiper;
|
|
4439
4484
|
|
|
4440
4485
|
// src/components/Switch/Switch.tsx
|
|
4441
|
-
import
|
|
4442
|
-
import { jsx as
|
|
4486
|
+
import React30 from "react";
|
|
4487
|
+
import { jsx as jsx337 } from "react/jsx-runtime";
|
|
4443
4488
|
var KNOB_TRANSITION_MS = 250;
|
|
4444
4489
|
var Switch = (props) => {
|
|
4445
4490
|
const {
|
|
@@ -4449,9 +4494,9 @@ var Switch = (props) => {
|
|
|
4449
4494
|
disabled,
|
|
4450
4495
|
onChange
|
|
4451
4496
|
} = props;
|
|
4452
|
-
const [isAnimating, setIsAnimating] =
|
|
4453
|
-
const timeoutRef =
|
|
4454
|
-
|
|
4497
|
+
const [isAnimating, setIsAnimating] = React30.useState(false);
|
|
4498
|
+
const timeoutRef = React30.useRef(null);
|
|
4499
|
+
React30.useEffect(() => {
|
|
4455
4500
|
return () => {
|
|
4456
4501
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
4457
4502
|
};
|
|
@@ -4466,7 +4511,7 @@ var Switch = (props) => {
|
|
|
4466
4511
|
timeoutRef.current = null;
|
|
4467
4512
|
}, KNOB_TRANSITION_MS);
|
|
4468
4513
|
};
|
|
4469
|
-
return /* @__PURE__ */
|
|
4514
|
+
return /* @__PURE__ */ jsx337(
|
|
4470
4515
|
"div",
|
|
4471
4516
|
{
|
|
4472
4517
|
className: clsx_default(
|
|
@@ -4479,7 +4524,7 @@ var Switch = (props) => {
|
|
|
4479
4524
|
),
|
|
4480
4525
|
onClick: handleClick,
|
|
4481
4526
|
"aria-disabled": disabled || isAnimating,
|
|
4482
|
-
children: /* @__PURE__ */
|
|
4527
|
+
children: /* @__PURE__ */ jsx337("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
4483
4528
|
}
|
|
4484
4529
|
);
|
|
4485
4530
|
};
|
|
@@ -4487,17 +4532,17 @@ Switch.displayName = "Switch";
|
|
|
4487
4532
|
var Switch_default = Switch;
|
|
4488
4533
|
|
|
4489
4534
|
// src/components/Table/TableContext.tsx
|
|
4490
|
-
import
|
|
4491
|
-
var TableContext =
|
|
4535
|
+
import React31 from "react";
|
|
4536
|
+
var TableContext = React31.createContext(null);
|
|
4492
4537
|
var useTableContext = () => {
|
|
4493
|
-
const ctx =
|
|
4538
|
+
const ctx = React31.useContext(TableContext);
|
|
4494
4539
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
4495
4540
|
return ctx;
|
|
4496
4541
|
};
|
|
4497
4542
|
var TableContext_default = TableContext;
|
|
4498
4543
|
|
|
4499
4544
|
// src/components/Table/Table.tsx
|
|
4500
|
-
import { jsx as
|
|
4545
|
+
import { jsx as jsx338 } from "react/jsx-runtime";
|
|
4501
4546
|
var Table = (props) => {
|
|
4502
4547
|
const {
|
|
4503
4548
|
children,
|
|
@@ -4506,7 +4551,7 @@ var Table = (props) => {
|
|
|
4506
4551
|
headerSticky = false,
|
|
4507
4552
|
stickyShadow = true
|
|
4508
4553
|
} = props;
|
|
4509
|
-
return /* @__PURE__ */
|
|
4554
|
+
return /* @__PURE__ */ jsx338("div", { className: "lib-xplat-table-wrapper", children: /* @__PURE__ */ jsx338(
|
|
4510
4555
|
TableContext_default.Provider,
|
|
4511
4556
|
{
|
|
4512
4557
|
value: {
|
|
@@ -4515,7 +4560,7 @@ var Table = (props) => {
|
|
|
4515
4560
|
headerSticky,
|
|
4516
4561
|
stickyShadow
|
|
4517
4562
|
},
|
|
4518
|
-
children: /* @__PURE__ */
|
|
4563
|
+
children: /* @__PURE__ */ jsx338("table", { className: "lib-xplat-table", children })
|
|
4519
4564
|
}
|
|
4520
4565
|
) });
|
|
4521
4566
|
};
|
|
@@ -4523,41 +4568,41 @@ Table.displayName = "Table";
|
|
|
4523
4568
|
var Table_default = Table;
|
|
4524
4569
|
|
|
4525
4570
|
// src/components/Table/TableBody.tsx
|
|
4526
|
-
import { jsx as
|
|
4571
|
+
import { jsx as jsx339 } from "react/jsx-runtime";
|
|
4527
4572
|
var TableBody = (props) => {
|
|
4528
4573
|
const { children } = props;
|
|
4529
|
-
return /* @__PURE__ */
|
|
4574
|
+
return /* @__PURE__ */ jsx339("tbody", { children });
|
|
4530
4575
|
};
|
|
4531
4576
|
TableBody.displayName = "TableBody";
|
|
4532
4577
|
var TableBody_default = TableBody;
|
|
4533
4578
|
|
|
4534
4579
|
// src/components/Table/TableCell.tsx
|
|
4535
|
-
import
|
|
4580
|
+
import React34 from "react";
|
|
4536
4581
|
|
|
4537
4582
|
// src/components/Table/TableHeadContext.tsx
|
|
4538
|
-
import
|
|
4539
|
-
var TableHeadContext =
|
|
4583
|
+
import React32 from "react";
|
|
4584
|
+
var TableHeadContext = React32.createContext(
|
|
4540
4585
|
null
|
|
4541
4586
|
);
|
|
4542
4587
|
var useTableHeadContext = () => {
|
|
4543
|
-
const ctx =
|
|
4588
|
+
const ctx = React32.useContext(TableHeadContext);
|
|
4544
4589
|
return ctx;
|
|
4545
4590
|
};
|
|
4546
4591
|
var TableHeadContext_default = TableHeadContext;
|
|
4547
4592
|
|
|
4548
4593
|
// src/components/Table/TableRowContext.tsx
|
|
4549
|
-
import
|
|
4550
|
-
var TableRowContext =
|
|
4594
|
+
import React33 from "react";
|
|
4595
|
+
var TableRowContext = React33.createContext(null);
|
|
4551
4596
|
var useTableRowContext = () => {
|
|
4552
|
-
const ctx =
|
|
4597
|
+
const ctx = React33.useContext(TableRowContext);
|
|
4553
4598
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
4554
4599
|
return ctx;
|
|
4555
4600
|
};
|
|
4556
4601
|
var TableRowContext_default = TableRowContext;
|
|
4557
4602
|
|
|
4558
4603
|
// src/components/Table/TableCell.tsx
|
|
4559
|
-
import { jsx as
|
|
4560
|
-
var TableCell =
|
|
4604
|
+
import { jsx as jsx340 } from "react/jsx-runtime";
|
|
4605
|
+
var TableCell = React34.memo((props) => {
|
|
4561
4606
|
const {
|
|
4562
4607
|
children,
|
|
4563
4608
|
align = "center",
|
|
@@ -4569,9 +4614,9 @@ var TableCell = React33.memo((props) => {
|
|
|
4569
4614
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
4570
4615
|
const { stickyShadow } = useTableContext();
|
|
4571
4616
|
const headContext = useTableHeadContext();
|
|
4572
|
-
const [left, setLeft] =
|
|
4573
|
-
const cellRef =
|
|
4574
|
-
const calculateLeft =
|
|
4617
|
+
const [left, setLeft] = React34.useState(0);
|
|
4618
|
+
const cellRef = React34.useRef(null);
|
|
4619
|
+
const calculateLeft = React34.useCallback(() => {
|
|
4575
4620
|
if (!cellRef.current) return 0;
|
|
4576
4621
|
let totalLeft = 0;
|
|
4577
4622
|
for (const ref of stickyCells) {
|
|
@@ -4580,7 +4625,7 @@ var TableCell = React33.memo((props) => {
|
|
|
4580
4625
|
}
|
|
4581
4626
|
return totalLeft;
|
|
4582
4627
|
}, [stickyCells]);
|
|
4583
|
-
|
|
4628
|
+
React34.useEffect(() => {
|
|
4584
4629
|
if (!isSticky || !cellRef.current) return;
|
|
4585
4630
|
registerStickyCell(cellRef);
|
|
4586
4631
|
setLeft(calculateLeft());
|
|
@@ -4598,7 +4643,7 @@ var TableCell = React33.memo((props) => {
|
|
|
4598
4643
|
const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
|
|
4599
4644
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
4600
4645
|
const enableHover = headContext && headContext.cellHover;
|
|
4601
|
-
return /* @__PURE__ */
|
|
4646
|
+
return /* @__PURE__ */ jsx340(
|
|
4602
4647
|
CellTag,
|
|
4603
4648
|
{
|
|
4604
4649
|
ref: cellRef,
|
|
@@ -4623,21 +4668,21 @@ TableCell.displayName = "TableCell";
|
|
|
4623
4668
|
var TableCell_default = TableCell;
|
|
4624
4669
|
|
|
4625
4670
|
// src/components/Table/TableHead.tsx
|
|
4626
|
-
import { jsx as
|
|
4671
|
+
import { jsx as jsx341 } from "react/jsx-runtime";
|
|
4627
4672
|
var TableHead = ({
|
|
4628
4673
|
children,
|
|
4629
4674
|
cellHover = false
|
|
4630
4675
|
}) => {
|
|
4631
4676
|
const { headerSticky } = useTableContext();
|
|
4632
|
-
return /* @__PURE__ */
|
|
4677
|
+
return /* @__PURE__ */ jsx341(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ jsx341("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
|
|
4633
4678
|
};
|
|
4634
4679
|
TableHead.displayName = "TableHead";
|
|
4635
4680
|
var TableHead_default = TableHead;
|
|
4636
4681
|
|
|
4637
4682
|
// src/components/Table/TableRow.tsx
|
|
4638
|
-
import
|
|
4639
|
-
import { jsx as
|
|
4640
|
-
var TableRow =
|
|
4683
|
+
import React35 from "react";
|
|
4684
|
+
import { jsx as jsx342 } from "react/jsx-runtime";
|
|
4685
|
+
var TableRow = React35.memo((props) => {
|
|
4641
4686
|
const {
|
|
4642
4687
|
children,
|
|
4643
4688
|
type = "secondary",
|
|
@@ -4645,14 +4690,14 @@ var TableRow = React34.memo((props) => {
|
|
|
4645
4690
|
onClick
|
|
4646
4691
|
} = props;
|
|
4647
4692
|
const { rowBorderUse } = useTableContext();
|
|
4648
|
-
const [stickyCells, setStickyCells] =
|
|
4693
|
+
const [stickyCells, setStickyCells] = React35.useState([]);
|
|
4649
4694
|
const registerStickyCell = (ref) => {
|
|
4650
4695
|
setStickyCells((prev) => {
|
|
4651
4696
|
if (prev.includes(ref)) return prev;
|
|
4652
4697
|
return [...prev, ref];
|
|
4653
4698
|
});
|
|
4654
4699
|
};
|
|
4655
|
-
return /* @__PURE__ */
|
|
4700
|
+
return /* @__PURE__ */ jsx342(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ jsx342(
|
|
4656
4701
|
"tr",
|
|
4657
4702
|
{
|
|
4658
4703
|
className: clsx_default(
|
|
@@ -4670,7 +4715,7 @@ TableRow.displayName = "TableRow";
|
|
|
4670
4715
|
var TableRow_default = TableRow;
|
|
4671
4716
|
|
|
4672
4717
|
// src/components/Tag/Tag.tsx
|
|
4673
|
-
import { jsx as
|
|
4718
|
+
import { jsx as jsx343, jsxs as jsxs218 } from "react/jsx-runtime";
|
|
4674
4719
|
var Tag = (props) => {
|
|
4675
4720
|
const {
|
|
4676
4721
|
children,
|
|
@@ -4691,8 +4736,8 @@ var Tag = (props) => {
|
|
|
4691
4736
|
disabled && "disabled"
|
|
4692
4737
|
),
|
|
4693
4738
|
children: [
|
|
4694
|
-
/* @__PURE__ */
|
|
4695
|
-
onClose && /* @__PURE__ */
|
|
4739
|
+
/* @__PURE__ */ jsx343("span", { className: "tag-label", children }),
|
|
4740
|
+
onClose && /* @__PURE__ */ jsx343("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ jsx343(XIcon_default, {}) })
|
|
4696
4741
|
]
|
|
4697
4742
|
}
|
|
4698
4743
|
);
|
|
@@ -4701,12 +4746,12 @@ Tag.displayName = "Tag";
|
|
|
4701
4746
|
var Tag_default = Tag;
|
|
4702
4747
|
|
|
4703
4748
|
// src/components/TextArea/TextArea.tsx
|
|
4704
|
-
import
|
|
4705
|
-
import { jsx as
|
|
4706
|
-
var TextArea =
|
|
4749
|
+
import React36 from "react";
|
|
4750
|
+
import { jsx as jsx344 } from "react/jsx-runtime";
|
|
4751
|
+
var TextArea = React36.forwardRef(
|
|
4707
4752
|
(props, ref) => {
|
|
4708
4753
|
const { value, onChange, disabled, ...textareaProps } = props;
|
|
4709
|
-
const localRef =
|
|
4754
|
+
const localRef = React36.useRef(null);
|
|
4710
4755
|
const setRefs = (el) => {
|
|
4711
4756
|
localRef.current = el;
|
|
4712
4757
|
if (!ref) return;
|
|
@@ -4726,21 +4771,21 @@ var TextArea = React35.forwardRef(
|
|
|
4726
4771
|
onChange(event);
|
|
4727
4772
|
}
|
|
4728
4773
|
};
|
|
4729
|
-
|
|
4774
|
+
React36.useEffect(() => {
|
|
4730
4775
|
const el = localRef.current;
|
|
4731
4776
|
if (!el) return;
|
|
4732
4777
|
el.style.height = "0px";
|
|
4733
4778
|
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
4734
4779
|
el.style.height = `${nextHeight}px`;
|
|
4735
4780
|
}, [value]);
|
|
4736
|
-
return /* @__PURE__ */
|
|
4781
|
+
return /* @__PURE__ */ jsx344("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ jsx344(
|
|
4737
4782
|
"div",
|
|
4738
4783
|
{
|
|
4739
4784
|
className: clsx_default(
|
|
4740
4785
|
"lib-xplat-textarea",
|
|
4741
4786
|
disabled ? "disabled" : void 0
|
|
4742
4787
|
),
|
|
4743
|
-
children: /* @__PURE__ */
|
|
4788
|
+
children: /* @__PURE__ */ jsx344(
|
|
4744
4789
|
"textarea",
|
|
4745
4790
|
{
|
|
4746
4791
|
...textareaProps,
|
|
@@ -4758,25 +4803,25 @@ TextArea.displayName = "TextArea";
|
|
|
4758
4803
|
var TextArea_default = TextArea;
|
|
4759
4804
|
|
|
4760
4805
|
// src/components/Toast/Toast.tsx
|
|
4761
|
-
import
|
|
4806
|
+
import React37 from "react";
|
|
4762
4807
|
import { createPortal as createPortal3 } from "react-dom";
|
|
4763
|
-
import { jsx as
|
|
4764
|
-
var ToastContext =
|
|
4808
|
+
import { jsx as jsx345, jsxs as jsxs219 } from "react/jsx-runtime";
|
|
4809
|
+
var ToastContext = React37.createContext(null);
|
|
4765
4810
|
var useToast = () => {
|
|
4766
|
-
const ctx =
|
|
4811
|
+
const ctx = React37.useContext(ToastContext);
|
|
4767
4812
|
if (!ctx) throw new Error("useToast must be used within ToastProvider");
|
|
4768
4813
|
return ctx;
|
|
4769
4814
|
};
|
|
4770
4815
|
var EXIT_DURATION = 300;
|
|
4771
4816
|
var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
4772
|
-
const ref =
|
|
4773
|
-
const [height, setHeight] =
|
|
4774
|
-
|
|
4817
|
+
const ref = React37.useRef(null);
|
|
4818
|
+
const [height, setHeight] = React37.useState(void 0);
|
|
4819
|
+
React37.useEffect(() => {
|
|
4775
4820
|
if (ref.current && !isExiting) {
|
|
4776
4821
|
setHeight(ref.current.offsetHeight);
|
|
4777
4822
|
}
|
|
4778
4823
|
}, [isExiting]);
|
|
4779
|
-
return /* @__PURE__ */
|
|
4824
|
+
return /* @__PURE__ */ jsx345(
|
|
4780
4825
|
"div",
|
|
4781
4826
|
{
|
|
4782
4827
|
className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
|
|
@@ -4791,8 +4836,8 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
4791
4836
|
className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
|
|
4792
4837
|
role: "alert",
|
|
4793
4838
|
children: [
|
|
4794
|
-
/* @__PURE__ */
|
|
4795
|
-
/* @__PURE__ */
|
|
4839
|
+
/* @__PURE__ */ jsx345("span", { className: "message", children: item.message }),
|
|
4840
|
+
/* @__PURE__ */ jsx345("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
4796
4841
|
]
|
|
4797
4842
|
}
|
|
4798
4843
|
)
|
|
@@ -4803,13 +4848,13 @@ var ToastProvider = ({
|
|
|
4803
4848
|
children,
|
|
4804
4849
|
position = "top-right"
|
|
4805
4850
|
}) => {
|
|
4806
|
-
const [toasts, setToasts] =
|
|
4807
|
-
const [removing, setRemoving] =
|
|
4808
|
-
const [mounted, setMounted] =
|
|
4809
|
-
|
|
4851
|
+
const [toasts, setToasts] = React37.useState([]);
|
|
4852
|
+
const [removing, setRemoving] = React37.useState(/* @__PURE__ */ new Set());
|
|
4853
|
+
const [mounted, setMounted] = React37.useState(false);
|
|
4854
|
+
React37.useEffect(() => {
|
|
4810
4855
|
setMounted(true);
|
|
4811
4856
|
}, []);
|
|
4812
|
-
const remove =
|
|
4857
|
+
const remove = React37.useCallback((id) => {
|
|
4813
4858
|
setRemoving((prev) => new Set(prev).add(id));
|
|
4814
4859
|
setTimeout(() => {
|
|
4815
4860
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
@@ -4820,7 +4865,7 @@ var ToastProvider = ({
|
|
|
4820
4865
|
});
|
|
4821
4866
|
}, EXIT_DURATION);
|
|
4822
4867
|
}, []);
|
|
4823
|
-
const toast =
|
|
4868
|
+
const toast = React37.useCallback(
|
|
4824
4869
|
(type, message, duration = 3e3) => {
|
|
4825
4870
|
const id = `${Date.now()}-${Math.random()}`;
|
|
4826
4871
|
setToasts((prev) => [...prev, { id, type, message }]);
|
|
@@ -4833,7 +4878,7 @@ var ToastProvider = ({
|
|
|
4833
4878
|
return /* @__PURE__ */ jsxs219(ToastContext.Provider, { value: { toast }, children: [
|
|
4834
4879
|
children,
|
|
4835
4880
|
mounted && createPortal3(
|
|
4836
|
-
/* @__PURE__ */
|
|
4881
|
+
/* @__PURE__ */ jsx345("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ jsx345(
|
|
4837
4882
|
ToastItemComponent,
|
|
4838
4883
|
{
|
|
4839
4884
|
item: t,
|
|
@@ -4849,29 +4894,29 @@ var ToastProvider = ({
|
|
|
4849
4894
|
ToastProvider.displayName = "ToastProvider";
|
|
4850
4895
|
|
|
4851
4896
|
// src/components/Tooltip/Tooltip.tsx
|
|
4852
|
-
import
|
|
4853
|
-
import { jsx as
|
|
4897
|
+
import React38 from "react";
|
|
4898
|
+
import { jsx as jsx346, jsxs as jsxs220 } from "react/jsx-runtime";
|
|
4854
4899
|
var Tooltip = (props) => {
|
|
4855
4900
|
const {
|
|
4856
4901
|
type = "primary",
|
|
4857
4902
|
description,
|
|
4858
4903
|
children
|
|
4859
4904
|
} = props;
|
|
4860
|
-
const iconRef =
|
|
4905
|
+
const iconRef = React38.useRef(null);
|
|
4861
4906
|
return /* @__PURE__ */ jsxs220("div", { className: "lib-xplat-tooltip", children: [
|
|
4862
|
-
/* @__PURE__ */
|
|
4863
|
-
/* @__PURE__ */
|
|
4907
|
+
/* @__PURE__ */ jsx346("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
|
|
4908
|
+
/* @__PURE__ */ jsx346("div", { className: clsx_default("tooltip-wrapper", type), children: description })
|
|
4864
4909
|
] });
|
|
4865
4910
|
};
|
|
4866
4911
|
Tooltip.displayName = "Tooltip";
|
|
4867
4912
|
var Tooltip_default = Tooltip;
|
|
4868
4913
|
|
|
4869
4914
|
// src/components/Video/Video.tsx
|
|
4870
|
-
import
|
|
4871
|
-
import { jsx as
|
|
4915
|
+
import React39 from "react";
|
|
4916
|
+
import { jsx as jsx347, jsxs as jsxs221 } from "react/jsx-runtime";
|
|
4872
4917
|
var PipIcon = () => /* @__PURE__ */ jsxs221("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
4873
|
-
/* @__PURE__ */
|
|
4874
|
-
/* @__PURE__ */
|
|
4918
|
+
/* @__PURE__ */ jsx347("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
4919
|
+
/* @__PURE__ */ jsx347("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
|
|
4875
4920
|
] });
|
|
4876
4921
|
var formatTime = (sec) => {
|
|
4877
4922
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -4879,7 +4924,7 @@ var formatTime = (sec) => {
|
|
|
4879
4924
|
const s = Math.floor(sec % 60);
|
|
4880
4925
|
return `${m}:${s.toString().padStart(2, "0")}`;
|
|
4881
4926
|
};
|
|
4882
|
-
var Video =
|
|
4927
|
+
var Video = React39.forwardRef((props, ref) => {
|
|
4883
4928
|
const {
|
|
4884
4929
|
src,
|
|
4885
4930
|
poster,
|
|
@@ -4903,21 +4948,21 @@ var Video = React38.forwardRef((props, ref) => {
|
|
|
4903
4948
|
children,
|
|
4904
4949
|
...rest
|
|
4905
4950
|
} = props;
|
|
4906
|
-
const containerRef =
|
|
4907
|
-
const videoRef =
|
|
4908
|
-
const [isPlaying, setIsPlaying] =
|
|
4909
|
-
const [isLoaded, setIsLoaded] =
|
|
4910
|
-
const [currentTime, setCurrentTime] =
|
|
4911
|
-
const [duration, setDuration] =
|
|
4912
|
-
const [buffered, setBuffered] =
|
|
4913
|
-
const [volume, setVolume] =
|
|
4914
|
-
const [isMuted, setIsMuted] =
|
|
4915
|
-
const [isFullscreen, setIsFullscreen] =
|
|
4916
|
-
const [playbackRate, setPlaybackRate] =
|
|
4917
|
-
const [rateMenuOpen, setRateMenuOpen] =
|
|
4918
|
-
const [captionsOn, setCaptionsOn] =
|
|
4919
|
-
const [isPip, setIsPip] =
|
|
4920
|
-
const setRefs =
|
|
4951
|
+
const containerRef = React39.useRef(null);
|
|
4952
|
+
const videoRef = React39.useRef(null);
|
|
4953
|
+
const [isPlaying, setIsPlaying] = React39.useState(Boolean(autoPlay));
|
|
4954
|
+
const [isLoaded, setIsLoaded] = React39.useState(false);
|
|
4955
|
+
const [currentTime, setCurrentTime] = React39.useState(0);
|
|
4956
|
+
const [duration, setDuration] = React39.useState(0);
|
|
4957
|
+
const [buffered, setBuffered] = React39.useState(0);
|
|
4958
|
+
const [volume, setVolume] = React39.useState(1);
|
|
4959
|
+
const [isMuted, setIsMuted] = React39.useState(Boolean(muted));
|
|
4960
|
+
const [isFullscreen, setIsFullscreen] = React39.useState(false);
|
|
4961
|
+
const [playbackRate, setPlaybackRate] = React39.useState(1);
|
|
4962
|
+
const [rateMenuOpen, setRateMenuOpen] = React39.useState(false);
|
|
4963
|
+
const [captionsOn, setCaptionsOn] = React39.useState(false);
|
|
4964
|
+
const [isPip, setIsPip] = React39.useState(false);
|
|
4965
|
+
const setRefs = React39.useCallback(
|
|
4921
4966
|
(el) => {
|
|
4922
4967
|
videoRef.current = el;
|
|
4923
4968
|
if (typeof ref === "function") ref(el);
|
|
@@ -4925,14 +4970,14 @@ var Video = React38.forwardRef((props, ref) => {
|
|
|
4925
4970
|
},
|
|
4926
4971
|
[ref]
|
|
4927
4972
|
);
|
|
4928
|
-
|
|
4973
|
+
React39.useEffect(() => {
|
|
4929
4974
|
const onFsChange = () => {
|
|
4930
4975
|
setIsFullscreen(document.fullscreenElement === containerRef.current);
|
|
4931
4976
|
};
|
|
4932
4977
|
document.addEventListener("fullscreenchange", onFsChange);
|
|
4933
4978
|
return () => document.removeEventListener("fullscreenchange", onFsChange);
|
|
4934
4979
|
}, []);
|
|
4935
|
-
|
|
4980
|
+
React39.useEffect(() => {
|
|
4936
4981
|
const v = videoRef.current;
|
|
4937
4982
|
if (!v) return;
|
|
4938
4983
|
const onEnter = () => setIsPip(true);
|
|
@@ -5052,7 +5097,7 @@ var Video = React38.forwardRef((props, ref) => {
|
|
|
5052
5097
|
ref: containerRef,
|
|
5053
5098
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
5054
5099
|
children: [
|
|
5055
|
-
/* @__PURE__ */
|
|
5100
|
+
/* @__PURE__ */ jsx347(
|
|
5056
5101
|
"video",
|
|
5057
5102
|
{
|
|
5058
5103
|
ref: setRefs,
|
|
@@ -5073,7 +5118,7 @@ var Video = React38.forwardRef((props, ref) => {
|
|
|
5073
5118
|
children
|
|
5074
5119
|
}
|
|
5075
5120
|
),
|
|
5076
|
-
showCenterPlay && /* @__PURE__ */
|
|
5121
|
+
showCenterPlay && /* @__PURE__ */ jsx347(
|
|
5077
5122
|
"button",
|
|
5078
5123
|
{
|
|
5079
5124
|
type: "button",
|
|
@@ -5085,11 +5130,11 @@ var Video = React38.forwardRef((props, ref) => {
|
|
|
5085
5130
|
onClick: togglePlay,
|
|
5086
5131
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
5087
5132
|
tabIndex: -1,
|
|
5088
|
-
children: /* @__PURE__ */
|
|
5133
|
+
children: /* @__PURE__ */ jsx347("span", { className: "center-play-icon", children: /* @__PURE__ */ jsx347(PlayCircleIcon_default, {}) })
|
|
5089
5134
|
}
|
|
5090
5135
|
),
|
|
5091
5136
|
showControls && /* @__PURE__ */ jsxs221("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
|
|
5092
|
-
/* @__PURE__ */
|
|
5137
|
+
/* @__PURE__ */ jsx347(
|
|
5093
5138
|
"input",
|
|
5094
5139
|
{
|
|
5095
5140
|
type: "range",
|
|
@@ -5107,28 +5152,28 @@ var Video = React38.forwardRef((props, ref) => {
|
|
|
5107
5152
|
}
|
|
5108
5153
|
),
|
|
5109
5154
|
/* @__PURE__ */ jsxs221("div", { className: "controls-row", children: [
|
|
5110
|
-
/* @__PURE__ */
|
|
5155
|
+
/* @__PURE__ */ jsx347(
|
|
5111
5156
|
"button",
|
|
5112
5157
|
{
|
|
5113
5158
|
type: "button",
|
|
5114
5159
|
className: "control-btn",
|
|
5115
5160
|
onClick: togglePlay,
|
|
5116
5161
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
5117
|
-
children: isPlaying ? /* @__PURE__ */
|
|
5162
|
+
children: isPlaying ? /* @__PURE__ */ jsx347(PauseIcon_default, {}) : /* @__PURE__ */ jsx347(PlayIcon_default, {})
|
|
5118
5163
|
}
|
|
5119
5164
|
),
|
|
5120
5165
|
/* @__PURE__ */ jsxs221("div", { className: "volume-group", children: [
|
|
5121
|
-
/* @__PURE__ */
|
|
5166
|
+
/* @__PURE__ */ jsx347(
|
|
5122
5167
|
"button",
|
|
5123
5168
|
{
|
|
5124
5169
|
type: "button",
|
|
5125
5170
|
className: "control-btn",
|
|
5126
5171
|
onClick: toggleMute,
|
|
5127
5172
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
5128
|
-
children: /* @__PURE__ */
|
|
5173
|
+
children: /* @__PURE__ */ jsx347(VolumeGlyph, {})
|
|
5129
5174
|
}
|
|
5130
5175
|
),
|
|
5131
|
-
/* @__PURE__ */
|
|
5176
|
+
/* @__PURE__ */ jsx347(
|
|
5132
5177
|
"input",
|
|
5133
5178
|
{
|
|
5134
5179
|
type: "range",
|
|
@@ -5148,7 +5193,7 @@ var Video = React38.forwardRef((props, ref) => {
|
|
|
5148
5193
|
" / ",
|
|
5149
5194
|
formatTime(duration)
|
|
5150
5195
|
] }),
|
|
5151
|
-
/* @__PURE__ */
|
|
5196
|
+
/* @__PURE__ */ jsx347("div", { className: "controls-spacer" }),
|
|
5152
5197
|
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ jsxs221("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
|
|
5153
5198
|
/* @__PURE__ */ jsxs221(
|
|
5154
5199
|
"button",
|
|
@@ -5164,7 +5209,7 @@ var Video = React38.forwardRef((props, ref) => {
|
|
|
5164
5209
|
]
|
|
5165
5210
|
}
|
|
5166
5211
|
),
|
|
5167
|
-
rateMenuOpen && /* @__PURE__ */
|
|
5212
|
+
rateMenuOpen && /* @__PURE__ */ jsx347("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ jsx347("li", { children: /* @__PURE__ */ jsxs221(
|
|
5168
5213
|
"button",
|
|
5169
5214
|
{
|
|
5170
5215
|
type: "button",
|
|
@@ -5178,7 +5223,7 @@ var Video = React38.forwardRef((props, ref) => {
|
|
|
5178
5223
|
}
|
|
5179
5224
|
) }, r2)) })
|
|
5180
5225
|
] }),
|
|
5181
|
-
showCaptions && /* @__PURE__ */
|
|
5226
|
+
showCaptions && /* @__PURE__ */ jsx347(
|
|
5182
5227
|
"button",
|
|
5183
5228
|
{
|
|
5184
5229
|
type: "button",
|
|
@@ -5186,37 +5231,37 @@ var Video = React38.forwardRef((props, ref) => {
|
|
|
5186
5231
|
onClick: toggleCaptions,
|
|
5187
5232
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
5188
5233
|
"aria-pressed": captionsOn,
|
|
5189
|
-
children: /* @__PURE__ */
|
|
5234
|
+
children: /* @__PURE__ */ jsx347(TypeIcon_default, {})
|
|
5190
5235
|
}
|
|
5191
5236
|
),
|
|
5192
|
-
showPip && pipSupported && /* @__PURE__ */
|
|
5237
|
+
showPip && pipSupported && /* @__PURE__ */ jsx347(
|
|
5193
5238
|
"button",
|
|
5194
5239
|
{
|
|
5195
5240
|
type: "button",
|
|
5196
5241
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
5197
5242
|
onClick: togglePip,
|
|
5198
5243
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
5199
|
-
children: /* @__PURE__ */
|
|
5244
|
+
children: /* @__PURE__ */ jsx347(PipIcon, {})
|
|
5200
5245
|
}
|
|
5201
5246
|
),
|
|
5202
|
-
showDownload && /* @__PURE__ */
|
|
5247
|
+
showDownload && /* @__PURE__ */ jsx347(
|
|
5203
5248
|
"a",
|
|
5204
5249
|
{
|
|
5205
5250
|
className: "control-btn",
|
|
5206
5251
|
href: src,
|
|
5207
5252
|
download: downloadFileName ?? true,
|
|
5208
5253
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
5209
|
-
children: /* @__PURE__ */
|
|
5254
|
+
children: /* @__PURE__ */ jsx347(DownloadIcon_default, {})
|
|
5210
5255
|
}
|
|
5211
5256
|
),
|
|
5212
|
-
/* @__PURE__ */
|
|
5257
|
+
/* @__PURE__ */ jsx347(
|
|
5213
5258
|
"button",
|
|
5214
5259
|
{
|
|
5215
5260
|
type: "button",
|
|
5216
5261
|
className: "control-btn",
|
|
5217
5262
|
onClick: toggleFullscreen,
|
|
5218
5263
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
5219
|
-
children: isFullscreen ? /* @__PURE__ */
|
|
5264
|
+
children: isFullscreen ? /* @__PURE__ */ jsx347(MinimizeIcon_default, {}) : /* @__PURE__ */ jsx347(MaximizeIcon_default, {})
|
|
5220
5265
|
}
|
|
5221
5266
|
)
|
|
5222
5267
|
] })
|