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