@x-plat/design-system 0.5.22 → 0.5.23
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/ChatInput/index.cjs +57 -94
- package/dist/components/ChatInput/index.css +2 -48
- package/dist/components/ChatInput/index.js +55 -92
- package/dist/components/index.cjs +529 -509
- package/dist/components/index.css +48 -48
- package/dist/components/index.js +483 -463
- package/dist/index.cjs +529 -509
- package/dist/index.css +48 -48
- package/dist/index.js +483 -463
- package/package.json +1 -1
|
@@ -2038,68 +2038,10 @@ Calendar.displayName = "Calendar";
|
|
|
2038
2038
|
var Calendar_default = Calendar;
|
|
2039
2039
|
|
|
2040
2040
|
// src/components/ChatInput/ChatInput.tsx
|
|
2041
|
-
var import_react5 = __toESM(require("react"), 1);
|
|
2042
|
-
|
|
2043
|
-
// src/components/TextArea/TextArea.tsx
|
|
2044
2041
|
var import_react4 = __toESM(require("react"), 1);
|
|
2045
2042
|
var import_jsx_runtime302 = require("react/jsx-runtime");
|
|
2046
|
-
var
|
|
2047
|
-
|
|
2048
|
-
const { value, onChange, disabled, ...textareaProps } = props;
|
|
2049
|
-
const localRef = import_react4.default.useRef(null);
|
|
2050
|
-
const setRefs = (el) => {
|
|
2051
|
-
localRef.current = el;
|
|
2052
|
-
if (!ref) return;
|
|
2053
|
-
if (typeof ref === "function") {
|
|
2054
|
-
ref(el);
|
|
2055
|
-
} else if (ref && typeof ref === "object" && "current" in ref) {
|
|
2056
|
-
ref.current = el;
|
|
2057
|
-
}
|
|
2058
|
-
};
|
|
2059
|
-
const handleOnChange = (e) => {
|
|
2060
|
-
const val = e.target.value;
|
|
2061
|
-
if (onChange) {
|
|
2062
|
-
const event = {
|
|
2063
|
-
...e,
|
|
2064
|
-
target: { value: val }
|
|
2065
|
-
};
|
|
2066
|
-
onChange(event);
|
|
2067
|
-
}
|
|
2068
|
-
};
|
|
2069
|
-
import_react4.default.useEffect(() => {
|
|
2070
|
-
const el = localRef.current;
|
|
2071
|
-
if (!el) return;
|
|
2072
|
-
el.style.height = "0px";
|
|
2073
|
-
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
2074
|
-
el.style.height = `${nextHeight}px`;
|
|
2075
|
-
}, [value]);
|
|
2076
|
-
return /* @__PURE__ */ (0, import_jsx_runtime302.jsx)("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
2077
|
-
"div",
|
|
2078
|
-
{
|
|
2079
|
-
className: clsx_default(
|
|
2080
|
-
"lib-xplat-textarea",
|
|
2081
|
-
disabled ? "disabled" : void 0
|
|
2082
|
-
),
|
|
2083
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
2084
|
-
"textarea",
|
|
2085
|
-
{
|
|
2086
|
-
...textareaProps,
|
|
2087
|
-
ref: setRefs,
|
|
2088
|
-
disabled,
|
|
2089
|
-
value,
|
|
2090
|
-
onChange: handleOnChange
|
|
2091
|
-
}
|
|
2092
|
-
)
|
|
2093
|
-
}
|
|
2094
|
-
) });
|
|
2095
|
-
}
|
|
2096
|
-
);
|
|
2097
|
-
TextArea.displayName = "TextArea";
|
|
2098
|
-
var TextArea_default = TextArea;
|
|
2099
|
-
|
|
2100
|
-
// src/components/ChatInput/ChatInput.tsx
|
|
2101
|
-
var import_jsx_runtime303 = require("react/jsx-runtime");
|
|
2102
|
-
var ChatInput = import_react5.default.forwardRef(
|
|
2043
|
+
var MAX_HEIGHT = 200;
|
|
2044
|
+
var ChatInput = import_react4.default.forwardRef(
|
|
2103
2045
|
(props, ref) => {
|
|
2104
2046
|
const {
|
|
2105
2047
|
placeholder,
|
|
@@ -2110,9 +2052,24 @@ var ChatInput = import_react5.default.forwardRef(
|
|
|
2110
2052
|
onChange
|
|
2111
2053
|
} = props;
|
|
2112
2054
|
const isControlled = valueProp !== void 0;
|
|
2113
|
-
const [internalValue, setInternalValue] =
|
|
2055
|
+
const [internalValue, setInternalValue] = import_react4.default.useState("");
|
|
2114
2056
|
const value = isControlled ? valueProp : internalValue;
|
|
2115
2057
|
const hasText = value.trim().length > 0;
|
|
2058
|
+
const textareaRef = import_react4.default.useRef(null);
|
|
2059
|
+
const setRefs = import_react4.default.useCallback(
|
|
2060
|
+
(el) => {
|
|
2061
|
+
textareaRef.current = el;
|
|
2062
|
+
if (typeof ref === "function") ref(el);
|
|
2063
|
+
else if (ref) ref.current = el;
|
|
2064
|
+
},
|
|
2065
|
+
[ref]
|
|
2066
|
+
);
|
|
2067
|
+
const updateHeight = import_react4.default.useCallback(() => {
|
|
2068
|
+
const el = textareaRef.current;
|
|
2069
|
+
if (!el) return;
|
|
2070
|
+
el.style.height = "0px";
|
|
2071
|
+
el.style.height = `${Math.min(el.scrollHeight, MAX_HEIGHT)}px`;
|
|
2072
|
+
}, []);
|
|
2116
2073
|
const handleChange = (e) => {
|
|
2117
2074
|
const val = e.target.value;
|
|
2118
2075
|
if (!isControlled) setInternalValue(val);
|
|
@@ -2122,6 +2079,7 @@ var ChatInput = import_react5.default.forwardRef(
|
|
|
2122
2079
|
if (!hasText || disabled) return;
|
|
2123
2080
|
onSubmit?.(value);
|
|
2124
2081
|
if (!isControlled) setInternalValue("");
|
|
2082
|
+
requestAnimationFrame(updateHeight);
|
|
2125
2083
|
};
|
|
2126
2084
|
const handleKeyDown = (e) => {
|
|
2127
2085
|
if (e.key === "Enter" && !e.shiftKey) {
|
|
@@ -2129,19 +2087,24 @@ var ChatInput = import_react5.default.forwardRef(
|
|
|
2129
2087
|
handleSubmit();
|
|
2130
2088
|
}
|
|
2131
2089
|
};
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2090
|
+
import_react4.default.useEffect(() => {
|
|
2091
|
+
updateHeight();
|
|
2092
|
+
}, [value, updateHeight]);
|
|
2093
|
+
return /* @__PURE__ */ (0, import_jsx_runtime302.jsxs)("div", { className: clsx_default("lib-xplat-chat-input", disabled && "disabled"), children: [
|
|
2094
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
2095
|
+
"textarea",
|
|
2135
2096
|
{
|
|
2136
|
-
ref,
|
|
2097
|
+
ref: setRefs,
|
|
2098
|
+
className: "chat-input-textarea",
|
|
2137
2099
|
placeholder,
|
|
2138
2100
|
value,
|
|
2139
2101
|
disabled,
|
|
2102
|
+
rows: 1,
|
|
2140
2103
|
onChange: handleChange,
|
|
2141
2104
|
onKeyDown: handleKeyDown
|
|
2142
2105
|
}
|
|
2143
2106
|
),
|
|
2144
|
-
/* @__PURE__ */ (0,
|
|
2107
|
+
/* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
2145
2108
|
"button",
|
|
2146
2109
|
{
|
|
2147
2110
|
type: "button",
|
|
@@ -2149,7 +2112,7 @@ var ChatInput = import_react5.default.forwardRef(
|
|
|
2149
2112
|
disabled: !hasText || disabled,
|
|
2150
2113
|
onClick: handleSubmit,
|
|
2151
2114
|
"aria-label": "\uC804\uC1A1",
|
|
2152
|
-
children: /* @__PURE__ */ (0,
|
|
2115
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime302.jsx)(SendIcon_default, {})
|
|
2153
2116
|
}
|
|
2154
2117
|
)
|
|
2155
2118
|
] });
|
|
@@ -2159,29 +2122,29 @@ ChatInput.displayName = "ChatInput";
|
|
|
2159
2122
|
var ChatInput_default = ChatInput;
|
|
2160
2123
|
|
|
2161
2124
|
// src/components/Box/Box.tsx
|
|
2162
|
-
var
|
|
2125
|
+
var import_jsx_runtime303 = require("react/jsx-runtime");
|
|
2163
2126
|
var Box = ({
|
|
2164
2127
|
children,
|
|
2165
2128
|
title,
|
|
2166
2129
|
variant = "outlined",
|
|
2167
2130
|
padding = "md"
|
|
2168
2131
|
}) => {
|
|
2169
|
-
return /* @__PURE__ */ (0,
|
|
2170
|
-
title && /* @__PURE__ */ (0,
|
|
2171
|
-
/* @__PURE__ */ (0,
|
|
2132
|
+
return /* @__PURE__ */ (0, import_jsx_runtime303.jsxs)("div", { className: clsx_default("lib-xplat-box", variant, `pad-${padding}`), children: [
|
|
2133
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime303.jsx)("div", { className: "box-title", children: title }),
|
|
2134
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsx)("div", { className: "box-content", children })
|
|
2172
2135
|
] });
|
|
2173
2136
|
};
|
|
2174
2137
|
Box.displayName = "Box";
|
|
2175
2138
|
var Box_default = Box;
|
|
2176
2139
|
|
|
2177
2140
|
// src/components/CardTab/CardTab.tsx
|
|
2178
|
-
var
|
|
2141
|
+
var import_react5 = __toESM(require("react"), 1);
|
|
2179
2142
|
|
|
2180
2143
|
// src/components/CardTab/CardTabPanel.tsx
|
|
2181
|
-
var
|
|
2144
|
+
var import_jsx_runtime304 = require("react/jsx-runtime");
|
|
2182
2145
|
var CardTabPanel = (props) => {
|
|
2183
2146
|
const { children, columns = 3 } = props;
|
|
2184
|
-
return /* @__PURE__ */ (0,
|
|
2147
|
+
return /* @__PURE__ */ (0, import_jsx_runtime304.jsx)(
|
|
2185
2148
|
"div",
|
|
2186
2149
|
{
|
|
2187
2150
|
className: "card-tab-panel",
|
|
@@ -2194,7 +2157,7 @@ CardTabPanel.displayName = "CardTab.Panel";
|
|
|
2194
2157
|
var CardTabPanel_default = CardTabPanel;
|
|
2195
2158
|
|
|
2196
2159
|
// src/components/CardTab/CardTab.tsx
|
|
2197
|
-
var
|
|
2160
|
+
var import_jsx_runtime305 = require("react/jsx-runtime");
|
|
2198
2161
|
var CardTabRoot = (props) => {
|
|
2199
2162
|
const {
|
|
2200
2163
|
tabs,
|
|
@@ -2204,7 +2167,7 @@ var CardTabRoot = (props) => {
|
|
|
2204
2167
|
children
|
|
2205
2168
|
} = props;
|
|
2206
2169
|
const isControlled = activeValueProp !== void 0;
|
|
2207
|
-
const [uncontrolledValue, setUncontrolledValue] =
|
|
2170
|
+
const [uncontrolledValue, setUncontrolledValue] = import_react5.default.useState(tabs[0]?.value ?? "");
|
|
2208
2171
|
const activeValue = isControlled ? activeValueProp : uncontrolledValue;
|
|
2209
2172
|
const handleTabClick = (tab) => {
|
|
2210
2173
|
if (!isControlled) {
|
|
@@ -2212,16 +2175,16 @@ var CardTabRoot = (props) => {
|
|
|
2212
2175
|
}
|
|
2213
2176
|
onChange?.(tab);
|
|
2214
2177
|
};
|
|
2215
|
-
const panels =
|
|
2216
|
-
(child) =>
|
|
2178
|
+
const panels = import_react5.default.Children.toArray(children).filter(
|
|
2179
|
+
(child) => import_react5.default.isValidElement(child) && child.type === CardTabPanel_default
|
|
2217
2180
|
);
|
|
2218
2181
|
const activePanel = panels.find(
|
|
2219
2182
|
(panel) => panel.props.value === activeValue
|
|
2220
2183
|
);
|
|
2221
|
-
return /* @__PURE__ */ (0,
|
|
2222
|
-
/* @__PURE__ */ (0,
|
|
2184
|
+
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("div", { className: clsx_default("lib-xplat-card-tab", size), children: [
|
|
2185
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("div", { className: "card-tab-bar", children: tabs.map((tab) => {
|
|
2223
2186
|
const isActive = tab.value === activeValue;
|
|
2224
|
-
return /* @__PURE__ */ (0,
|
|
2187
|
+
return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
2225
2188
|
"button",
|
|
2226
2189
|
{
|
|
2227
2190
|
className: clsx_default("card-tab-trigger", isActive && "active"),
|
|
@@ -2233,7 +2196,7 @@ var CardTabRoot = (props) => {
|
|
|
2233
2196
|
tab.value
|
|
2234
2197
|
);
|
|
2235
2198
|
}) }),
|
|
2236
|
-
/* @__PURE__ */ (0,
|
|
2199
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("div", { className: "card-tab-body", children: activePanel })
|
|
2237
2200
|
] });
|
|
2238
2201
|
};
|
|
2239
2202
|
CardTabRoot.displayName = "CardTab";
|
|
@@ -2243,8 +2206,8 @@ var CardTab = Object.assign(CardTabRoot, {
|
|
|
2243
2206
|
var CardTab_default = CardTab;
|
|
2244
2207
|
|
|
2245
2208
|
// src/components/Chart/Chart.tsx
|
|
2246
|
-
var
|
|
2247
|
-
var
|
|
2209
|
+
var import_react6 = __toESM(require("react"), 1);
|
|
2210
|
+
var import_jsx_runtime306 = require("react/jsx-runtime");
|
|
2248
2211
|
var CATEGORICAL_COUNT2 = 8;
|
|
2249
2212
|
var LINE_BAR_PALETTES = Array.from({ length: CATEGORICAL_COUNT2 }, (_, i) => {
|
|
2250
2213
|
const n = i + 1;
|
|
@@ -2290,11 +2253,11 @@ var toSmoothPath = (points) => {
|
|
|
2290
2253
|
};
|
|
2291
2254
|
var RESIZE_SETTLE_MS = 150;
|
|
2292
2255
|
var useChartSize = (ref) => {
|
|
2293
|
-
const [size, setSize] =
|
|
2294
|
-
const settleTimer =
|
|
2295
|
-
const committedSize =
|
|
2296
|
-
const initialRef =
|
|
2297
|
-
|
|
2256
|
+
const [size, setSize] = import_react6.default.useState({ width: 0, height: 0 });
|
|
2257
|
+
const settleTimer = import_react6.default.useRef(0);
|
|
2258
|
+
const committedSize = import_react6.default.useRef({ width: 0, height: 0 });
|
|
2259
|
+
const initialRef = import_react6.default.useRef(true);
|
|
2260
|
+
import_react6.default.useEffect(() => {
|
|
2298
2261
|
const el = ref.current;
|
|
2299
2262
|
if (!el) return;
|
|
2300
2263
|
const observer = new ResizeObserver((entries) => {
|
|
@@ -2336,10 +2299,10 @@ var useChartSize = (ref) => {
|
|
|
2336
2299
|
};
|
|
2337
2300
|
var prefersReducedMotion = () => typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
2338
2301
|
var useChartAnimation = (containerRef, dataKey) => {
|
|
2339
|
-
const [animate, setAnimate] =
|
|
2340
|
-
const prevDataKey =
|
|
2341
|
-
const hasAnimated =
|
|
2342
|
-
|
|
2302
|
+
const [animate, setAnimate] = import_react6.default.useState(false);
|
|
2303
|
+
const prevDataKey = import_react6.default.useRef(dataKey);
|
|
2304
|
+
const hasAnimated = import_react6.default.useRef(false);
|
|
2305
|
+
import_react6.default.useEffect(() => {
|
|
2343
2306
|
if (prefersReducedMotion()) return;
|
|
2344
2307
|
const el = containerRef.current;
|
|
2345
2308
|
if (!el) return;
|
|
@@ -2355,7 +2318,7 @@ var useChartAnimation = (containerRef, dataKey) => {
|
|
|
2355
2318
|
observer.observe(el);
|
|
2356
2319
|
return () => observer.disconnect();
|
|
2357
2320
|
}, [containerRef]);
|
|
2358
|
-
|
|
2321
|
+
import_react6.default.useEffect(() => {
|
|
2359
2322
|
if (dataKey !== prevDataKey.current) {
|
|
2360
2323
|
prevDataKey.current = dataKey;
|
|
2361
2324
|
if (prefersReducedMotion()) return;
|
|
@@ -2366,15 +2329,15 @@ var useChartAnimation = (containerRef, dataKey) => {
|
|
|
2366
2329
|
return animate || prefersReducedMotion();
|
|
2367
2330
|
};
|
|
2368
2331
|
var useChartTooltip = (enabled) => {
|
|
2369
|
-
const [tooltip, setTooltip] =
|
|
2332
|
+
const [tooltip, setTooltip] = import_react6.default.useState({
|
|
2370
2333
|
visible: false,
|
|
2371
2334
|
x: 0,
|
|
2372
2335
|
y: 0,
|
|
2373
2336
|
content: ""
|
|
2374
2337
|
});
|
|
2375
|
-
const containerRef =
|
|
2376
|
-
const rafRef =
|
|
2377
|
-
const move =
|
|
2338
|
+
const containerRef = import_react6.default.useRef(null);
|
|
2339
|
+
const rafRef = import_react6.default.useRef(0);
|
|
2340
|
+
const move = import_react6.default.useCallback((e) => {
|
|
2378
2341
|
if (!enabled) return;
|
|
2379
2342
|
const clientX = e.clientX;
|
|
2380
2343
|
const clientY = e.clientY;
|
|
@@ -2389,7 +2352,7 @@ var useChartTooltip = (enabled) => {
|
|
|
2389
2352
|
}));
|
|
2390
2353
|
});
|
|
2391
2354
|
}, [enabled]);
|
|
2392
|
-
const show =
|
|
2355
|
+
const show = import_react6.default.useCallback((e, content) => {
|
|
2393
2356
|
if (!enabled) return;
|
|
2394
2357
|
const rect = containerRef.current?.getBoundingClientRect();
|
|
2395
2358
|
if (!rect) return;
|
|
@@ -2400,18 +2363,18 @@ var useChartTooltip = (enabled) => {
|
|
|
2400
2363
|
content
|
|
2401
2364
|
});
|
|
2402
2365
|
}, [enabled]);
|
|
2403
|
-
const hide =
|
|
2366
|
+
const hide = import_react6.default.useCallback(() => {
|
|
2404
2367
|
cancelAnimationFrame(rafRef.current);
|
|
2405
2368
|
setTooltip((prev) => ({ ...prev, visible: false }));
|
|
2406
2369
|
}, []);
|
|
2407
2370
|
return { tooltip, show, hide, move, containerRef };
|
|
2408
2371
|
};
|
|
2409
|
-
var GridLines =
|
|
2372
|
+
var GridLines = import_react6.default.memo(({ width, height, chartH, maxVal }) => /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(import_jsx_runtime306.Fragment, { children: [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
|
|
2410
2373
|
const y = PADDING.top + (1 - ratio) * chartH;
|
|
2411
2374
|
const val = Math.round(maxVal * ratio);
|
|
2412
|
-
return /* @__PURE__ */ (0,
|
|
2413
|
-
/* @__PURE__ */ (0,
|
|
2414
|
-
/* @__PURE__ */ (0,
|
|
2375
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsxs)("g", { children: [
|
|
2376
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
2377
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
2415
2378
|
] }, ratio);
|
|
2416
2379
|
}) }));
|
|
2417
2380
|
GridLines.displayName = "GridLines";
|
|
@@ -2421,25 +2384,25 @@ var getLabelStep = (count, chartW) => {
|
|
|
2421
2384
|
if (count <= maxLabels) return 1;
|
|
2422
2385
|
return Math.ceil(count / maxLabels);
|
|
2423
2386
|
};
|
|
2424
|
-
var AxisLabels =
|
|
2387
|
+
var AxisLabels = import_react6.default.memo(({ labels, count, chartW, height }) => {
|
|
2425
2388
|
const step = getLabelStep(count, chartW);
|
|
2426
|
-
return /* @__PURE__ */ (0,
|
|
2389
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(import_jsx_runtime306.Fragment, { children: labels.map((label, i) => {
|
|
2427
2390
|
if (i % step !== 0) return null;
|
|
2428
2391
|
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
2429
|
-
return /* @__PURE__ */ (0,
|
|
2392
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
2430
2393
|
}) });
|
|
2431
2394
|
});
|
|
2432
2395
|
AxisLabels.displayName = "AxisLabels";
|
|
2433
|
-
var LineChart =
|
|
2434
|
-
const entries =
|
|
2435
|
-
const maxVal =
|
|
2396
|
+
var LineChart = import_react6.default.memo(({ data, labels, width, height, animate, onHover, onMove, onLeave }) => {
|
|
2397
|
+
const entries = import_react6.default.useMemo(() => Object.entries(data), [data]);
|
|
2398
|
+
const maxVal = import_react6.default.useMemo(() => {
|
|
2436
2399
|
const allValues = entries.flatMap(([, v]) => v);
|
|
2437
2400
|
return Math.max(...allValues) * 1.2 || 1;
|
|
2438
2401
|
}, [entries]);
|
|
2439
2402
|
const count = labels.length;
|
|
2440
2403
|
const chartW = width - PADDING.left - PADDING.right;
|
|
2441
2404
|
const chartH = height - PADDING.top - PADDING.bottom;
|
|
2442
|
-
const seriesPoints =
|
|
2405
|
+
const seriesPoints = import_react6.default.useMemo(
|
|
2443
2406
|
() => entries.map(
|
|
2444
2407
|
([, values]) => values.map((v, i) => ({
|
|
2445
2408
|
x: PADDING.left + i / (count - 1 || 1) * chartW,
|
|
@@ -2450,8 +2413,8 @@ var LineChart = import_react7.default.memo(({ data, labels, width, height, anima
|
|
|
2450
2413
|
[entries, count, chartW, chartH, maxVal]
|
|
2451
2414
|
);
|
|
2452
2415
|
const showPoints = count <= 100;
|
|
2453
|
-
const lineRefs =
|
|
2454
|
-
|
|
2416
|
+
const lineRefs = import_react6.default.useRef([]);
|
|
2417
|
+
import_react6.default.useEffect(() => {
|
|
2455
2418
|
if (!animate) return;
|
|
2456
2419
|
lineRefs.current.forEach((el) => {
|
|
2457
2420
|
if (!el) return;
|
|
@@ -2464,9 +2427,9 @@ var LineChart = import_react7.default.memo(({ data, labels, width, height, anima
|
|
|
2464
2427
|
});
|
|
2465
2428
|
});
|
|
2466
2429
|
}, [animate, seriesPoints]);
|
|
2467
|
-
return /* @__PURE__ */ (0,
|
|
2468
|
-
/* @__PURE__ */ (0,
|
|
2469
|
-
/* @__PURE__ */ (0,
|
|
2430
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
2431
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)(GridLines, { width, height, chartH, maxVal }),
|
|
2432
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)(AxisLabels, { labels, count, chartW, height }),
|
|
2470
2433
|
entries.map(([key], di) => {
|
|
2471
2434
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
2472
2435
|
const color = palette[2];
|
|
@@ -2475,12 +2438,12 @@ var LineChart = import_react7.default.memo(({ data, labels, width, height, anima
|
|
|
2475
2438
|
const gradientId = `line-gradient-${di}`;
|
|
2476
2439
|
const polyPoints = points.map((p) => `${p.x},${p.y}`).join(" ");
|
|
2477
2440
|
const areaD = `M ${points[0].x},${points[0].y} ${points.map((p) => `L ${p.x},${p.y}`).join(" ")} L ${points[points.length - 1].x},${PADDING.top + chartH} L ${points[0].x},${PADDING.top + chartH} Z`;
|
|
2478
|
-
return /* @__PURE__ */ (0,
|
|
2479
|
-
/* @__PURE__ */ (0,
|
|
2480
|
-
/* @__PURE__ */ (0,
|
|
2481
|
-
/* @__PURE__ */ (0,
|
|
2441
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsxs)("g", { children: [
|
|
2442
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime306.jsxs)("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
2443
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)("stop", { offset: "0%", stopColor: areaColor, stopOpacity: "0.2" }),
|
|
2444
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)("stop", { offset: "100%", stopColor: areaColor, stopOpacity: "0" })
|
|
2482
2445
|
] }) }),
|
|
2483
|
-
/* @__PURE__ */ (0,
|
|
2446
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
2484
2447
|
"path",
|
|
2485
2448
|
{
|
|
2486
2449
|
d: areaD,
|
|
@@ -2489,7 +2452,7 @@ var LineChart = import_react7.default.memo(({ data, labels, width, height, anima
|
|
|
2489
2452
|
style: animate ? { animationDelay: "600ms" } : { opacity: 1 }
|
|
2490
2453
|
}
|
|
2491
2454
|
),
|
|
2492
|
-
/* @__PURE__ */ (0,
|
|
2455
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
2493
2456
|
"polyline",
|
|
2494
2457
|
{
|
|
2495
2458
|
ref: (el) => {
|
|
@@ -2501,7 +2464,7 @@ var LineChart = import_react7.default.memo(({ data, labels, width, height, anima
|
|
|
2501
2464
|
strokeWidth: "2"
|
|
2502
2465
|
}
|
|
2503
2466
|
),
|
|
2504
|
-
showPoints && points.map((p, i) => /* @__PURE__ */ (0,
|
|
2467
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
2505
2468
|
"circle",
|
|
2506
2469
|
{
|
|
2507
2470
|
cx: p.x,
|
|
@@ -2520,16 +2483,16 @@ var LineChart = import_react7.default.memo(({ data, labels, width, height, anima
|
|
|
2520
2483
|
] });
|
|
2521
2484
|
});
|
|
2522
2485
|
LineChart.displayName = "LineChart";
|
|
2523
|
-
var CurveChart =
|
|
2524
|
-
const entries =
|
|
2525
|
-
const maxVal =
|
|
2486
|
+
var CurveChart = import_react6.default.memo(({ data, labels, width, height, animate, onHover, onMove, onLeave }) => {
|
|
2487
|
+
const entries = import_react6.default.useMemo(() => Object.entries(data), [data]);
|
|
2488
|
+
const maxVal = import_react6.default.useMemo(() => {
|
|
2526
2489
|
const allValues = entries.flatMap(([, v]) => v);
|
|
2527
2490
|
return Math.max(...allValues) * 1.2 || 1;
|
|
2528
2491
|
}, [entries]);
|
|
2529
2492
|
const count = labels.length;
|
|
2530
2493
|
const chartW = width - PADDING.left - PADDING.right;
|
|
2531
2494
|
const chartH = height - PADDING.top - PADDING.bottom;
|
|
2532
|
-
const seriesPoints =
|
|
2495
|
+
const seriesPoints = import_react6.default.useMemo(
|
|
2533
2496
|
() => entries.map(
|
|
2534
2497
|
([, values]) => values.map((v, i) => ({
|
|
2535
2498
|
x: PADDING.left + i / (count - 1 || 1) * chartW,
|
|
@@ -2540,8 +2503,8 @@ var CurveChart = import_react7.default.memo(({ data, labels, width, height, anim
|
|
|
2540
2503
|
[entries, count, chartW, chartH, maxVal]
|
|
2541
2504
|
);
|
|
2542
2505
|
const showPoints = count <= 100;
|
|
2543
|
-
const lineRefs =
|
|
2544
|
-
|
|
2506
|
+
const lineRefs = import_react6.default.useRef([]);
|
|
2507
|
+
import_react6.default.useEffect(() => {
|
|
2545
2508
|
if (!animate) return;
|
|
2546
2509
|
lineRefs.current.forEach((el) => {
|
|
2547
2510
|
if (!el) return;
|
|
@@ -2554,9 +2517,9 @@ var CurveChart = import_react7.default.memo(({ data, labels, width, height, anim
|
|
|
2554
2517
|
});
|
|
2555
2518
|
});
|
|
2556
2519
|
}, [animate, seriesPoints]);
|
|
2557
|
-
return /* @__PURE__ */ (0,
|
|
2558
|
-
/* @__PURE__ */ (0,
|
|
2559
|
-
/* @__PURE__ */ (0,
|
|
2520
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
2521
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)(GridLines, { width, height, chartH, maxVal }),
|
|
2522
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)(AxisLabels, { labels, count, chartW, height }),
|
|
2560
2523
|
entries.map(([key], di) => {
|
|
2561
2524
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
2562
2525
|
const color = palette[2];
|
|
@@ -2565,12 +2528,12 @@ var CurveChart = import_react7.default.memo(({ data, labels, width, height, anim
|
|
|
2565
2528
|
const gradientId = `curve-gradient-${di}`;
|
|
2566
2529
|
const linePath = toSmoothPath(points);
|
|
2567
2530
|
const areaPath = linePath + ` L ${points[points.length - 1].x} ${PADDING.top + chartH} L ${points[0].x} ${PADDING.top + chartH} Z`;
|
|
2568
|
-
return /* @__PURE__ */ (0,
|
|
2569
|
-
/* @__PURE__ */ (0,
|
|
2570
|
-
/* @__PURE__ */ (0,
|
|
2571
|
-
/* @__PURE__ */ (0,
|
|
2531
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsxs)("g", { children: [
|
|
2532
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime306.jsxs)("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
2533
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)("stop", { offset: "0%", stopColor: areaColor, stopOpacity: "0.4" }),
|
|
2534
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)("stop", { offset: "100%", stopColor: areaColor, stopOpacity: "0.02" })
|
|
2572
2535
|
] }) }),
|
|
2573
|
-
/* @__PURE__ */ (0,
|
|
2536
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
2574
2537
|
"path",
|
|
2575
2538
|
{
|
|
2576
2539
|
d: areaPath,
|
|
@@ -2579,7 +2542,7 @@ var CurveChart = import_react7.default.memo(({ data, labels, width, height, anim
|
|
|
2579
2542
|
style: animate ? { animationDelay: "600ms" } : { opacity: 1 }
|
|
2580
2543
|
}
|
|
2581
2544
|
),
|
|
2582
|
-
/* @__PURE__ */ (0,
|
|
2545
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
2583
2546
|
"path",
|
|
2584
2547
|
{
|
|
2585
2548
|
ref: (el) => {
|
|
@@ -2591,7 +2554,7 @@ var CurveChart = import_react7.default.memo(({ data, labels, width, height, anim
|
|
|
2591
2554
|
strokeWidth: "2"
|
|
2592
2555
|
}
|
|
2593
2556
|
),
|
|
2594
|
-
showPoints && points.map((p, i) => /* @__PURE__ */ (0,
|
|
2557
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
2595
2558
|
"circle",
|
|
2596
2559
|
{
|
|
2597
2560
|
cx: p.x,
|
|
@@ -2610,9 +2573,9 @@ var CurveChart = import_react7.default.memo(({ data, labels, width, height, anim
|
|
|
2610
2573
|
] });
|
|
2611
2574
|
});
|
|
2612
2575
|
CurveChart.displayName = "CurveChart";
|
|
2613
|
-
var BarChart =
|
|
2614
|
-
const entries =
|
|
2615
|
-
const maxVal =
|
|
2576
|
+
var BarChart = import_react6.default.memo(({ data, labels, width, height, animate, onHover, onMove, onLeave }) => {
|
|
2577
|
+
const entries = import_react6.default.useMemo(() => Object.entries(data), [data]);
|
|
2578
|
+
const maxVal = import_react6.default.useMemo(() => {
|
|
2616
2579
|
const allValues = entries.flatMap(([, v]) => v);
|
|
2617
2580
|
return Math.max(...allValues) * 1.2 || 1;
|
|
2618
2581
|
}, [entries]);
|
|
@@ -2624,7 +2587,7 @@ var BarChart = import_react7.default.memo(({ data, labels, width, height, animat
|
|
|
2624
2587
|
const barGap = groupCount > 1 ? 2 : 0;
|
|
2625
2588
|
const barW = Math.max(1, Math.min(32, (groupW * 0.7 - barGap * (groupCount - 1)) / groupCount));
|
|
2626
2589
|
const baseline = PADDING.top + chartH;
|
|
2627
|
-
const bars =
|
|
2590
|
+
const bars = import_react6.default.useMemo(
|
|
2628
2591
|
() => entries.map(
|
|
2629
2592
|
([, values], di) => values.map((v, i) => {
|
|
2630
2593
|
const totalBarsW = barW * groupCount + barGap * (groupCount - 1);
|
|
@@ -2637,11 +2600,11 @@ var BarChart = import_react7.default.memo(({ data, labels, width, height, animat
|
|
|
2637
2600
|
[entries, maxVal, chartH, groupW, barW, barGap, groupCount]
|
|
2638
2601
|
);
|
|
2639
2602
|
const barLabelStep = getLabelStep(count, chartW);
|
|
2640
|
-
return /* @__PURE__ */ (0,
|
|
2641
|
-
/* @__PURE__ */ (0,
|
|
2603
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
2604
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)(GridLines, { width, height, chartH, maxVal }),
|
|
2642
2605
|
labels.map((label, i) => {
|
|
2643
2606
|
if (i % barLabelStep !== 0) return null;
|
|
2644
|
-
return /* @__PURE__ */ (0,
|
|
2607
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsx)("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
2645
2608
|
}),
|
|
2646
2609
|
entries.map(([key], di) => {
|
|
2647
2610
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
@@ -2650,7 +2613,7 @@ var BarChart = import_react7.default.memo(({ data, labels, width, height, animat
|
|
|
2650
2613
|
const r2 = Math.min(4, b.w / 2);
|
|
2651
2614
|
const d = b.h <= r2 ? `M ${b.x} ${b.y + b.h} V ${b.y} H ${b.x + b.w} V ${b.y + b.h} Z` : `M ${b.x} ${b.y + b.h} V ${b.y + r2} Q ${b.x} ${b.y} ${b.x + r2} ${b.y} H ${b.x + b.w - r2} Q ${b.x + b.w} ${b.y} ${b.x + b.w} ${b.y + r2} V ${b.y + b.h} Z`;
|
|
2652
2615
|
const delay = 100 + i * 80;
|
|
2653
|
-
return /* @__PURE__ */ (0,
|
|
2616
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
2654
2617
|
"path",
|
|
2655
2618
|
{
|
|
2656
2619
|
d,
|
|
@@ -2671,11 +2634,11 @@ var BarChart = import_react7.default.memo(({ data, labels, width, height, animat
|
|
|
2671
2634
|
] });
|
|
2672
2635
|
});
|
|
2673
2636
|
BarChart.displayName = "BarChart";
|
|
2674
|
-
var PieDonutChart =
|
|
2637
|
+
var PieDonutChart = import_react6.default.memo(
|
|
2675
2638
|
({ data, labels, width, height, animate, isDoughnut, onHover, onMove, onLeave }) => {
|
|
2676
|
-
const entries =
|
|
2677
|
-
const values =
|
|
2678
|
-
const total =
|
|
2639
|
+
const entries = import_react6.default.useMemo(() => Object.entries(data), [data]);
|
|
2640
|
+
const values = import_react6.default.useMemo(() => entries.flatMap(([, v]) => v), [entries]);
|
|
2641
|
+
const total = import_react6.default.useMemo(() => values.reduce((a, b) => a + b, 0) || 1, [values]);
|
|
2679
2642
|
const size = Math.min(width, height);
|
|
2680
2643
|
const cx = size / 2;
|
|
2681
2644
|
const cy = size / 2;
|
|
@@ -2683,10 +2646,10 @@ var PieDonutChart = import_react7.default.memo(
|
|
|
2683
2646
|
const innerR = isDoughnut ? r2 * 0.5 : 0;
|
|
2684
2647
|
const firstKey = entries[0]?.[0] ?? "";
|
|
2685
2648
|
const colorOffset = hashString(firstKey);
|
|
2686
|
-
const maskRef =
|
|
2649
|
+
const maskRef = import_react6.default.useRef(null);
|
|
2687
2650
|
const maskR = r2 + 10;
|
|
2688
2651
|
const maskCircumference = 2 * Math.PI * maskR;
|
|
2689
|
-
|
|
2652
|
+
import_react6.default.useEffect(() => {
|
|
2690
2653
|
if (!animate || !maskRef.current) return;
|
|
2691
2654
|
const el = maskRef.current;
|
|
2692
2655
|
el.style.strokeDasharray = `${maskCircumference}`;
|
|
@@ -2696,7 +2659,7 @@ var PieDonutChart = import_react7.default.memo(
|
|
|
2696
2659
|
el.style.strokeDashoffset = "0";
|
|
2697
2660
|
});
|
|
2698
2661
|
}, [animate, maskCircumference]);
|
|
2699
|
-
const sliceData =
|
|
2662
|
+
const sliceData = import_react6.default.useMemo(() => {
|
|
2700
2663
|
let angle0 = -Math.PI / 2;
|
|
2701
2664
|
let cumulativeAngle = 0;
|
|
2702
2665
|
return values.map((v, i) => {
|
|
@@ -2730,8 +2693,8 @@ var PieDonutChart = import_react7.default.memo(
|
|
|
2730
2693
|
});
|
|
2731
2694
|
}, [values, total, cx, cy, r2, innerR, labels]);
|
|
2732
2695
|
const maskId = `pie-mask-${isDoughnut ? "d" : "p"}`;
|
|
2733
|
-
return /* @__PURE__ */ (0,
|
|
2734
|
-
animate && /* @__PURE__ */ (0,
|
|
2696
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsxs)("svg", { viewBox: `0 0 ${size} ${size}`, className: "chart-svg chart-pie", children: [
|
|
2697
|
+
animate && /* @__PURE__ */ (0, import_jsx_runtime306.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime306.jsx)("mask", { id: maskId, children: /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
2735
2698
|
"circle",
|
|
2736
2699
|
{
|
|
2737
2700
|
ref: maskRef,
|
|
@@ -2744,7 +2707,7 @@ var PieDonutChart = import_react7.default.memo(
|
|
|
2744
2707
|
transform: `rotate(-90 ${cx} ${cy})`
|
|
2745
2708
|
}
|
|
2746
2709
|
) }) }),
|
|
2747
|
-
/* @__PURE__ */ (0,
|
|
2710
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)("g", { mask: animate ? `url(#${maskId})` : void 0, children: sliceData.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime306.jsx)("g", { children: /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
2748
2711
|
"path",
|
|
2749
2712
|
{
|
|
2750
2713
|
d: s.d,
|
|
@@ -2755,7 +2718,7 @@ var PieDonutChart = import_react7.default.memo(
|
|
|
2755
2718
|
onMouseLeave: onLeave
|
|
2756
2719
|
}
|
|
2757
2720
|
) }, i)) }),
|
|
2758
|
-
sliceData.map((s, i) => s.angle > 0.2 && /* @__PURE__ */ (0,
|
|
2721
|
+
sliceData.map((s, i) => s.angle > 0.2 && /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
2759
2722
|
"text",
|
|
2760
2723
|
{
|
|
2761
2724
|
x: s.lx,
|
|
@@ -2773,9 +2736,9 @@ var PieDonutChart = import_react7.default.memo(
|
|
|
2773
2736
|
);
|
|
2774
2737
|
PieDonutChart.displayName = "PieDonutChart";
|
|
2775
2738
|
var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
2776
|
-
const ref =
|
|
2777
|
-
const [adjustedX, setAdjustedX] =
|
|
2778
|
-
|
|
2739
|
+
const ref = import_react6.default.useRef(null);
|
|
2740
|
+
const [adjustedX, setAdjustedX] = import_react6.default.useState(x);
|
|
2741
|
+
import_react6.default.useEffect(() => {
|
|
2779
2742
|
const el = ref.current;
|
|
2780
2743
|
if (!el) return;
|
|
2781
2744
|
const w = el.offsetWidth;
|
|
@@ -2786,7 +2749,7 @@ var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
|
2786
2749
|
else if (x + half > containerWidth - margin) nx = containerWidth - half - margin;
|
|
2787
2750
|
setAdjustedX(nx);
|
|
2788
2751
|
}, [x, containerWidth]);
|
|
2789
|
-
return /* @__PURE__ */ (0,
|
|
2752
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
2790
2753
|
"div",
|
|
2791
2754
|
{
|
|
2792
2755
|
ref,
|
|
@@ -2796,22 +2759,22 @@ var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
|
2796
2759
|
}
|
|
2797
2760
|
);
|
|
2798
2761
|
};
|
|
2799
|
-
var Chart =
|
|
2762
|
+
var Chart = import_react6.default.memo((props) => {
|
|
2800
2763
|
const { type, data, labels, tooltip: showTooltip = true } = props;
|
|
2801
2764
|
const { tooltip, show, hide, move, containerRef } = useChartTooltip(showTooltip);
|
|
2802
2765
|
const { width, height } = useChartSize(containerRef);
|
|
2803
|
-
const stableData =
|
|
2804
|
-
const stableLabels =
|
|
2805
|
-
const dataKey =
|
|
2766
|
+
const stableData = import_react6.default.useMemo(() => data, [JSON.stringify(data)]);
|
|
2767
|
+
const stableLabels = import_react6.default.useMemo(() => labels, [JSON.stringify(labels)]);
|
|
2768
|
+
const dataKey = import_react6.default.useMemo(() => JSON.stringify(labels), [labels]);
|
|
2806
2769
|
const animate = useChartAnimation(containerRef, dataKey);
|
|
2807
2770
|
const ready = width > 0 && height > 0;
|
|
2808
|
-
return /* @__PURE__ */ (0,
|
|
2809
|
-
ready && type === "line" && /* @__PURE__ */ (0,
|
|
2810
|
-
ready && type === "curve" && /* @__PURE__ */ (0,
|
|
2811
|
-
ready && type === "bar" && /* @__PURE__ */ (0,
|
|
2812
|
-
ready && type === "pie" && /* @__PURE__ */ (0,
|
|
2813
|
-
ready && type === "doughnut" && /* @__PURE__ */ (0,
|
|
2814
|
-
tooltip.visible && /* @__PURE__ */ (0,
|
|
2771
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsxs)("div", { className: "lib-xplat-chart", ref: containerRef, children: [
|
|
2772
|
+
ready && type === "line" && /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(LineChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
2773
|
+
ready && type === "curve" && /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(CurveChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
2774
|
+
ready && type === "bar" && /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(BarChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
2775
|
+
ready && type === "pie" && /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(PieDonutChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
2776
|
+
ready && type === "doughnut" && /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(PieDonutChart, { data: stableData, labels: stableLabels, width, height, animate, isDoughnut: true, onHover: show, onMove: move, onLeave: hide }),
|
|
2777
|
+
tooltip.visible && /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(TooltipBubble, { x: tooltip.x, y: tooltip.y, containerWidth: width, children: tooltip.content })
|
|
2815
2778
|
] });
|
|
2816
2779
|
});
|
|
2817
2780
|
Chart.displayName = "Chart";
|
|
@@ -2824,7 +2787,7 @@ var import_tokens_core = require("@x-plat/tokens-core");
|
|
|
2824
2787
|
var import_tokens_core2 = require("@x-plat/tokens-core");
|
|
2825
2788
|
|
|
2826
2789
|
// src/components/CheckBox/CheckBox.tsx
|
|
2827
|
-
var
|
|
2790
|
+
var import_jsx_runtime307 = require("react/jsx-runtime");
|
|
2828
2791
|
var CheckBox = (props) => {
|
|
2829
2792
|
const {
|
|
2830
2793
|
checked,
|
|
@@ -2842,8 +2805,8 @@ var CheckBox = (props) => {
|
|
|
2842
2805
|
const checkedClasses = `checked`;
|
|
2843
2806
|
const disabledClasses = "disabled";
|
|
2844
2807
|
const boxClasses = disabled ? disabledClasses : checked ? checkedClasses : uncheckedClasses;
|
|
2845
|
-
return /* @__PURE__ */ (0,
|
|
2846
|
-
/* @__PURE__ */ (0,
|
|
2808
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("label", { className: clsx_default("lib-xplat-checkbox", size, type), children: [
|
|
2809
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
2847
2810
|
"input",
|
|
2848
2811
|
{
|
|
2849
2812
|
type: "checkbox",
|
|
@@ -2853,44 +2816,44 @@ var CheckBox = (props) => {
|
|
|
2853
2816
|
...rest
|
|
2854
2817
|
}
|
|
2855
2818
|
),
|
|
2856
|
-
/* @__PURE__ */ (0,
|
|
2857
|
-
label && /* @__PURE__ */ (0,
|
|
2819
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)("span", { className: clsx_default("checkbox", boxClasses), children: /* @__PURE__ */ (0, import_jsx_runtime307.jsx)("span", { className: clsx_default("check-icon", { visible: checked }), children: /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(CheckIcon_default, {}) }) }),
|
|
2820
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime307.jsx)("span", { className: "label", children: label })
|
|
2858
2821
|
] });
|
|
2859
2822
|
};
|
|
2860
2823
|
CheckBox.displayName = "CheckBox";
|
|
2861
2824
|
var CheckBox_default = CheckBox;
|
|
2862
2825
|
|
|
2863
2826
|
// src/components/Chip/Chip.tsx
|
|
2864
|
-
var
|
|
2827
|
+
var import_jsx_runtime308 = require("react/jsx-runtime");
|
|
2865
2828
|
var Chip = (props) => {
|
|
2866
2829
|
const {
|
|
2867
2830
|
children,
|
|
2868
2831
|
type = "primary",
|
|
2869
2832
|
size = "md"
|
|
2870
2833
|
} = props;
|
|
2871
|
-
return /* @__PURE__ */ (0,
|
|
2834
|
+
return /* @__PURE__ */ (0, import_jsx_runtime308.jsx)("div", { className: clsx_default("lib-xplat-chip", type, size), children });
|
|
2872
2835
|
};
|
|
2873
2836
|
Chip.displayName = "Chip";
|
|
2874
2837
|
var Chip_default = Chip;
|
|
2875
2838
|
|
|
2876
2839
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
2877
|
-
var
|
|
2840
|
+
var import_react13 = __toESM(require("react"), 1);
|
|
2878
2841
|
|
|
2879
2842
|
// src/components/Input/Input.tsx
|
|
2880
|
-
var
|
|
2843
|
+
var import_react7 = __toESM(require("react"), 1);
|
|
2881
2844
|
|
|
2882
2845
|
// src/components/Input/InputValidations.tsx
|
|
2883
|
-
var
|
|
2846
|
+
var import_jsx_runtime309 = require("react/jsx-runtime");
|
|
2884
2847
|
var InputValidations = (props) => {
|
|
2885
2848
|
const { message, status = "default" } = props;
|
|
2886
|
-
return /* @__PURE__ */ (0,
|
|
2887
|
-
/* @__PURE__ */ (0,
|
|
2888
|
-
status === "default" && /* @__PURE__ */ (0,
|
|
2889
|
-
status === "success" && /* @__PURE__ */ (0,
|
|
2890
|
-
status === "warning" && /* @__PURE__ */ (0,
|
|
2891
|
-
status === "error" && /* @__PURE__ */ (0,
|
|
2849
|
+
return /* @__PURE__ */ (0, import_jsx_runtime309.jsxs)("div", { className: clsx_default("lib-xplat-input-validation", status), children: [
|
|
2850
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsxs)("div", { className: "icon", children: [
|
|
2851
|
+
status === "default" && /* @__PURE__ */ (0, import_jsx_runtime309.jsx)(InfoIcon_default, {}),
|
|
2852
|
+
status === "success" && /* @__PURE__ */ (0, import_jsx_runtime309.jsx)(SuccessIcon_default, {}),
|
|
2853
|
+
status === "warning" && /* @__PURE__ */ (0, import_jsx_runtime309.jsx)(InfoIcon_default, {}),
|
|
2854
|
+
status === "error" && /* @__PURE__ */ (0, import_jsx_runtime309.jsx)(ErrorIcon_default, {})
|
|
2892
2855
|
] }),
|
|
2893
|
-
/* @__PURE__ */ (0,
|
|
2856
|
+
/* @__PURE__ */ (0, import_jsx_runtime309.jsx)("div", { className: "message", children: message })
|
|
2894
2857
|
] });
|
|
2895
2858
|
};
|
|
2896
2859
|
InputValidations.displayName = "InputValidations";
|
|
@@ -2931,8 +2894,8 @@ var handleTelBackspace = (prevValue, currValue) => {
|
|
|
2931
2894
|
};
|
|
2932
2895
|
|
|
2933
2896
|
// src/components/Input/Input.tsx
|
|
2934
|
-
var
|
|
2935
|
-
var
|
|
2897
|
+
var import_jsx_runtime310 = require("react/jsx-runtime");
|
|
2898
|
+
var import_react8 = require("react");
|
|
2936
2899
|
var formatValue = (type, value) => {
|
|
2937
2900
|
if (value === null || value === void 0) return "";
|
|
2938
2901
|
const strValue = Array.isArray(value) ? String(value[0] ?? "") : String(value);
|
|
@@ -2980,7 +2943,7 @@ var parseValue = (type, value) => {
|
|
|
2980
2943
|
return value;
|
|
2981
2944
|
}
|
|
2982
2945
|
};
|
|
2983
|
-
var Input =
|
|
2946
|
+
var Input = import_react7.default.forwardRef((props, ref) => {
|
|
2984
2947
|
const {
|
|
2985
2948
|
value,
|
|
2986
2949
|
onChange,
|
|
@@ -3006,13 +2969,13 @@ var Input = import_react8.default.forwardRef((props, ref) => {
|
|
|
3006
2969
|
onChange(event);
|
|
3007
2970
|
}
|
|
3008
2971
|
};
|
|
3009
|
-
return /* @__PURE__ */ (0,
|
|
3010
|
-
/* @__PURE__ */ (0,
|
|
2972
|
+
return /* @__PURE__ */ (0, import_jsx_runtime310.jsxs)("div", { className: "lib-xplat-input-wrap", children: [
|
|
2973
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsxs)(
|
|
3011
2974
|
"div",
|
|
3012
2975
|
{
|
|
3013
2976
|
className: clsx_default("lib-xplat-input", size, disabled ? "disabled" : void 0),
|
|
3014
2977
|
children: [
|
|
3015
|
-
/* @__PURE__ */ (0,
|
|
2978
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)(
|
|
3016
2979
|
"input",
|
|
3017
2980
|
{
|
|
3018
2981
|
...inputProps,
|
|
@@ -3023,11 +2986,11 @@ var Input = import_react8.default.forwardRef((props, ref) => {
|
|
|
3023
2986
|
onChange: handleChange
|
|
3024
2987
|
}
|
|
3025
2988
|
),
|
|
3026
|
-
suffix && /* @__PURE__ */ (0,
|
|
2989
|
+
suffix && /* @__PURE__ */ (0, import_jsx_runtime310.jsx)("div", { className: "suffix", children: suffix })
|
|
3027
2990
|
]
|
|
3028
2991
|
}
|
|
3029
2992
|
),
|
|
3030
|
-
validations && /* @__PURE__ */ (0,
|
|
2993
|
+
validations && /* @__PURE__ */ (0, import_jsx_runtime310.jsx)("div", { className: "lib-xplat-input-validation-wrap", children: validations?.map((validation, idx) => /* @__PURE__ */ (0, import_react8.createElement)(
|
|
3031
2994
|
InputValidations_default,
|
|
3032
2995
|
{
|
|
3033
2996
|
...validation,
|
|
@@ -3040,20 +3003,20 @@ Input.displayName = "Input";
|
|
|
3040
3003
|
var Input_default = Input;
|
|
3041
3004
|
|
|
3042
3005
|
// src/components/Input/PasswordInput/PasswordInput.tsx
|
|
3043
|
-
var
|
|
3044
|
-
var
|
|
3045
|
-
var PasswordInput =
|
|
3006
|
+
var import_react9 = __toESM(require("react"), 1);
|
|
3007
|
+
var import_jsx_runtime311 = require("react/jsx-runtime");
|
|
3008
|
+
var PasswordInput = import_react9.default.forwardRef(
|
|
3046
3009
|
(props, ref) => {
|
|
3047
3010
|
const { reg: _reg, ...inputProps } = props;
|
|
3048
|
-
const [isView, setIsView] =
|
|
3011
|
+
const [isView, setIsView] = import_react9.default.useState(false);
|
|
3049
3012
|
const handleChangeView = () => {
|
|
3050
3013
|
setIsView((prev) => !prev);
|
|
3051
3014
|
};
|
|
3052
|
-
return /* @__PURE__ */ (0,
|
|
3015
|
+
return /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
3053
3016
|
Input_default,
|
|
3054
3017
|
{
|
|
3055
3018
|
...inputProps,
|
|
3056
|
-
suffix: /* @__PURE__ */ (0,
|
|
3019
|
+
suffix: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: "wrapper pointer", onClick: handleChangeView, children: isView ? /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(OpenEyeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(CloseEyeIcon_default, {}) }),
|
|
3057
3020
|
type: isView ? "text" : "password",
|
|
3058
3021
|
ref
|
|
3059
3022
|
}
|
|
@@ -3064,17 +3027,17 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
3064
3027
|
var PasswordInput_default = PasswordInput;
|
|
3065
3028
|
|
|
3066
3029
|
// src/components/Modal/Modal.tsx
|
|
3067
|
-
var
|
|
3030
|
+
var import_react11 = __toESM(require("react"), 1);
|
|
3068
3031
|
var import_react_dom2 = require("react-dom");
|
|
3069
3032
|
|
|
3070
3033
|
// src/tokens/hooks/Portal.tsx
|
|
3071
|
-
var
|
|
3034
|
+
var import_react10 = __toESM(require("react"), 1);
|
|
3072
3035
|
var import_react_dom = __toESM(require("react-dom"), 1);
|
|
3073
|
-
var
|
|
3074
|
-
var PortalContainerContext =
|
|
3075
|
-
var PortalProvider = ({ container, children }) => /* @__PURE__ */ (0,
|
|
3036
|
+
var import_jsx_runtime312 = require("react/jsx-runtime");
|
|
3037
|
+
var PortalContainerContext = import_react10.default.createContext(null);
|
|
3038
|
+
var PortalProvider = ({ container, children }) => /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(PortalContainerContext.Provider, { value: container, children });
|
|
3076
3039
|
var Portal = ({ children }) => {
|
|
3077
|
-
const contextContainer =
|
|
3040
|
+
const contextContainer = import_react10.default.useContext(PortalContainerContext);
|
|
3078
3041
|
if (typeof document === "undefined") return null;
|
|
3079
3042
|
const container = contextContainer ?? document.body;
|
|
3080
3043
|
return import_react_dom.default.createPortal(children, container);
|
|
@@ -3083,14 +3046,14 @@ Portal.displayName = "Portal";
|
|
|
3083
3046
|
var Portal_default = Portal;
|
|
3084
3047
|
|
|
3085
3048
|
// src/components/Modal/Modal.tsx
|
|
3086
|
-
var
|
|
3049
|
+
var import_jsx_runtime313 = require("react/jsx-runtime");
|
|
3087
3050
|
var ANIMATION_DURATION_MS = 200;
|
|
3088
3051
|
var Modal = (props) => {
|
|
3089
3052
|
const { isOpen, onClose, children } = props;
|
|
3090
|
-
const [mounted, setMounted] =
|
|
3091
|
-
const [visible, setVisible] =
|
|
3092
|
-
const boxRef =
|
|
3093
|
-
|
|
3053
|
+
const [mounted, setMounted] = import_react11.default.useState(false);
|
|
3054
|
+
const [visible, setVisible] = import_react11.default.useState(false);
|
|
3055
|
+
const boxRef = import_react11.default.useRef(null);
|
|
3056
|
+
import_react11.default.useEffect(() => {
|
|
3094
3057
|
if (isOpen) {
|
|
3095
3058
|
setMounted(true);
|
|
3096
3059
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3104,12 +3067,12 @@ var Modal = (props) => {
|
|
|
3104
3067
|
if (!mounted) return null;
|
|
3105
3068
|
const stateClass = visible ? "enter" : "exit";
|
|
3106
3069
|
return (0, import_react_dom2.createPortal)(
|
|
3107
|
-
/* @__PURE__ */ (0,
|
|
3070
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
3108
3071
|
"div",
|
|
3109
3072
|
{
|
|
3110
3073
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
3111
3074
|
onClick: onClose,
|
|
3112
|
-
children: /* @__PURE__ */ (0,
|
|
3075
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
3113
3076
|
"div",
|
|
3114
3077
|
{
|
|
3115
3078
|
ref: boxRef,
|
|
@@ -3117,7 +3080,7 @@ var Modal = (props) => {
|
|
|
3117
3080
|
role: "dialog",
|
|
3118
3081
|
"aria-modal": "true",
|
|
3119
3082
|
onClick: (e) => e.stopPropagation(),
|
|
3120
|
-
children: /* @__PURE__ */ (0,
|
|
3083
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(PortalProvider, { container: boxRef.current, children })
|
|
3121
3084
|
}
|
|
3122
3085
|
)
|
|
3123
3086
|
}
|
|
@@ -3129,9 +3092,9 @@ Modal.displayName = "Modal";
|
|
|
3129
3092
|
var Modal_default = Modal;
|
|
3130
3093
|
|
|
3131
3094
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
3132
|
-
var
|
|
3133
|
-
var
|
|
3134
|
-
var DayCell2 =
|
|
3095
|
+
var import_react12 = __toESM(require("react"), 1);
|
|
3096
|
+
var import_jsx_runtime314 = require("react/jsx-runtime");
|
|
3097
|
+
var DayCell2 = import_react12.default.memo(
|
|
3135
3098
|
({
|
|
3136
3099
|
day,
|
|
3137
3100
|
disabled,
|
|
@@ -3141,7 +3104,7 @@ var DayCell2 = import_react13.default.memo(
|
|
|
3141
3104
|
isEnd,
|
|
3142
3105
|
inRange,
|
|
3143
3106
|
onSelect
|
|
3144
|
-
}) => /* @__PURE__ */ (0,
|
|
3107
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3145
3108
|
"button",
|
|
3146
3109
|
{
|
|
3147
3110
|
type: "button",
|
|
@@ -3183,26 +3146,26 @@ var SingleDatePicker = (props) => {
|
|
|
3183
3146
|
initialYear,
|
|
3184
3147
|
initialMonth
|
|
3185
3148
|
);
|
|
3186
|
-
const [pickerMode, setPickerMode] =
|
|
3187
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
3149
|
+
const [pickerMode, setPickerMode] = import_react12.default.useState("days");
|
|
3150
|
+
const [yearRangeStart, setYearRangeStart] = import_react12.default.useState(
|
|
3188
3151
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
3189
3152
|
);
|
|
3190
|
-
const minTime =
|
|
3153
|
+
const minTime = import_react12.default.useMemo(
|
|
3191
3154
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
3192
3155
|
[minDate]
|
|
3193
3156
|
);
|
|
3194
|
-
const maxTime =
|
|
3157
|
+
const maxTime = import_react12.default.useMemo(
|
|
3195
3158
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
3196
3159
|
[maxDate]
|
|
3197
3160
|
);
|
|
3198
|
-
const highlightSet =
|
|
3161
|
+
const highlightSet = import_react12.default.useMemo(() => {
|
|
3199
3162
|
const set = /* @__PURE__ */ new Set();
|
|
3200
3163
|
for (const h of highlightDates) {
|
|
3201
3164
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
3202
3165
|
}
|
|
3203
3166
|
return set;
|
|
3204
3167
|
}, [highlightDates]);
|
|
3205
|
-
const handleSelect =
|
|
3168
|
+
const handleSelect = import_react12.default.useCallback(
|
|
3206
3169
|
(date) => {
|
|
3207
3170
|
onChange?.(date);
|
|
3208
3171
|
},
|
|
@@ -3239,20 +3202,20 @@ var SingleDatePicker = (props) => {
|
|
|
3239
3202
|
const monthLabels = MONTH_LABELS[locale];
|
|
3240
3203
|
const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
|
|
3241
3204
|
const hasRange = rangeStart != null && rangeEnd != null;
|
|
3242
|
-
return /* @__PURE__ */ (0,
|
|
3205
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(
|
|
3243
3206
|
"div",
|
|
3244
3207
|
{
|
|
3245
3208
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
3246
3209
|
children: [
|
|
3247
|
-
/* @__PURE__ */ (0,
|
|
3248
|
-
/* @__PURE__ */ (0,
|
|
3249
|
-
/* @__PURE__ */ (0,
|
|
3250
|
-
/* @__PURE__ */ (0,
|
|
3210
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "datepicker-header", children: [
|
|
3211
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(ChevronLeftIcon_default, {}) }),
|
|
3212
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
3213
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(ChevronRightIcon_default, {}) })
|
|
3251
3214
|
] }),
|
|
3252
|
-
/* @__PURE__ */ (0,
|
|
3253
|
-
pickerMode === "years" && /* @__PURE__ */ (0,
|
|
3215
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "datepicker-body", children: [
|
|
3216
|
+
pickerMode === "years" && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
3254
3217
|
const y = yearRangeStart + i;
|
|
3255
|
-
return /* @__PURE__ */ (0,
|
|
3218
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3256
3219
|
"button",
|
|
3257
3220
|
{
|
|
3258
3221
|
type: "button",
|
|
@@ -3263,7 +3226,7 @@ var SingleDatePicker = (props) => {
|
|
|
3263
3226
|
y
|
|
3264
3227
|
);
|
|
3265
3228
|
}) }),
|
|
3266
|
-
pickerMode === "months" && /* @__PURE__ */ (0,
|
|
3229
|
+
pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3267
3230
|
"button",
|
|
3268
3231
|
{
|
|
3269
3232
|
type: "button",
|
|
@@ -3273,8 +3236,8 @@ var SingleDatePicker = (props) => {
|
|
|
3273
3236
|
},
|
|
3274
3237
|
i
|
|
3275
3238
|
)) }),
|
|
3276
|
-
pickerMode === "days" && /* @__PURE__ */ (0,
|
|
3277
|
-
/* @__PURE__ */ (0,
|
|
3239
|
+
pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(import_jsx_runtime314.Fragment, { children: [
|
|
3240
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3278
3241
|
"div",
|
|
3279
3242
|
{
|
|
3280
3243
|
className: clsx_default(
|
|
@@ -3286,7 +3249,7 @@ var SingleDatePicker = (props) => {
|
|
|
3286
3249
|
},
|
|
3287
3250
|
label
|
|
3288
3251
|
)) }),
|
|
3289
|
-
/* @__PURE__ */ (0,
|
|
3252
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
3290
3253
|
const t = day.date.getTime();
|
|
3291
3254
|
const disabled = t < minTime || t > maxTime;
|
|
3292
3255
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -3296,7 +3259,7 @@ var SingleDatePicker = (props) => {
|
|
|
3296
3259
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
3297
3260
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
3298
3261
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
3299
|
-
return /* @__PURE__ */ (0,
|
|
3262
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3300
3263
|
DayCell2,
|
|
3301
3264
|
{
|
|
3302
3265
|
day,
|
|
@@ -3321,7 +3284,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
3321
3284
|
var SingleDatePicker_default = SingleDatePicker;
|
|
3322
3285
|
|
|
3323
3286
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
3324
|
-
var
|
|
3287
|
+
var import_jsx_runtime315 = require("react/jsx-runtime");
|
|
3325
3288
|
var formatDate = (date) => {
|
|
3326
3289
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
3327
3290
|
const y = date.getFullYear();
|
|
@@ -3331,8 +3294,8 @@ var formatDate = (date) => {
|
|
|
3331
3294
|
};
|
|
3332
3295
|
var InputDatePicker = (props) => {
|
|
3333
3296
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
3334
|
-
const [isOpen, setIsOpen] =
|
|
3335
|
-
const [tempDate, setTempDate] =
|
|
3297
|
+
const [isOpen, setIsOpen] = import_react13.default.useState(false);
|
|
3298
|
+
const [tempDate, setTempDate] = import_react13.default.useState(value ?? /* @__PURE__ */ new Date());
|
|
3336
3299
|
const handleOpen = () => {
|
|
3337
3300
|
if (disabled) return;
|
|
3338
3301
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -3348,19 +3311,19 @@ var InputDatePicker = (props) => {
|
|
|
3348
3311
|
const handleClose = () => {
|
|
3349
3312
|
setIsOpen(false);
|
|
3350
3313
|
};
|
|
3351
|
-
return /* @__PURE__ */ (0,
|
|
3352
|
-
/* @__PURE__ */ (0,
|
|
3314
|
+
return /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
|
|
3315
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
3353
3316
|
Input_default,
|
|
3354
3317
|
{
|
|
3355
3318
|
value: formatDate(value),
|
|
3356
3319
|
placeholder,
|
|
3357
|
-
suffix: /* @__PURE__ */ (0,
|
|
3320
|
+
suffix: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(CalenderIcon_default, {}),
|
|
3358
3321
|
disabled,
|
|
3359
3322
|
readOnly: true
|
|
3360
3323
|
}
|
|
3361
3324
|
) }),
|
|
3362
|
-
/* @__PURE__ */ (0,
|
|
3363
|
-
/* @__PURE__ */ (0,
|
|
3325
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: "lib-xplat-popup-datepicker-card", children: [
|
|
3326
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
3364
3327
|
SingleDatePicker_default,
|
|
3365
3328
|
{
|
|
3366
3329
|
value: tempDate,
|
|
@@ -3370,9 +3333,9 @@ var InputDatePicker = (props) => {
|
|
|
3370
3333
|
locale
|
|
3371
3334
|
}
|
|
3372
3335
|
) }),
|
|
3373
|
-
/* @__PURE__ */ (0,
|
|
3374
|
-
/* @__PURE__ */ (0,
|
|
3375
|
-
/* @__PURE__ */ (0,
|
|
3336
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
3337
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
|
|
3338
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
3376
3339
|
] })
|
|
3377
3340
|
] }) })
|
|
3378
3341
|
] });
|
|
@@ -3381,20 +3344,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
3381
3344
|
var InputDatePicker_default = InputDatePicker;
|
|
3382
3345
|
|
|
3383
3346
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
3384
|
-
var
|
|
3347
|
+
var import_react17 = __toESM(require("react"), 1);
|
|
3385
3348
|
|
|
3386
3349
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
3387
|
-
var
|
|
3350
|
+
var import_react16 = __toESM(require("react"), 1);
|
|
3388
3351
|
|
|
3389
3352
|
// src/components/Tab/Tab.tsx
|
|
3390
|
-
var
|
|
3353
|
+
var import_react15 = __toESM(require("react"), 1);
|
|
3391
3354
|
|
|
3392
3355
|
// src/components/Tab/TabItem.tsx
|
|
3393
|
-
var
|
|
3394
|
-
var
|
|
3395
|
-
var TabItem =
|
|
3356
|
+
var import_react14 = __toESM(require("react"), 1);
|
|
3357
|
+
var import_jsx_runtime316 = require("react/jsx-runtime");
|
|
3358
|
+
var TabItem = import_react14.default.forwardRef((props, ref) => {
|
|
3396
3359
|
const { isActive, title, onClick } = props;
|
|
3397
|
-
return /* @__PURE__ */ (0,
|
|
3360
|
+
return /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
3398
3361
|
"div",
|
|
3399
3362
|
{
|
|
3400
3363
|
ref,
|
|
@@ -3408,25 +3371,25 @@ TabItem.displayName = "TabItem";
|
|
|
3408
3371
|
var TabItem_default = TabItem;
|
|
3409
3372
|
|
|
3410
3373
|
// src/components/Tab/Tab.tsx
|
|
3411
|
-
var
|
|
3374
|
+
var import_jsx_runtime317 = require("react/jsx-runtime");
|
|
3412
3375
|
var Tab = (props) => {
|
|
3413
3376
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
3414
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
3377
|
+
const [underlineStyle, setUnderlineStyle] = import_react15.default.useState({
|
|
3415
3378
|
left: 0,
|
|
3416
3379
|
width: 0
|
|
3417
3380
|
});
|
|
3418
|
-
const itemRefs =
|
|
3381
|
+
const itemRefs = import_react15.default.useRef([]);
|
|
3419
3382
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
3420
3383
|
onChange(tabItem, tabIdx);
|
|
3421
3384
|
};
|
|
3422
|
-
|
|
3385
|
+
import_react15.default.useEffect(() => {
|
|
3423
3386
|
const el = itemRefs.current[activeIndex];
|
|
3424
3387
|
if (el) {
|
|
3425
3388
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
3426
3389
|
}
|
|
3427
3390
|
}, [activeIndex, tabs.length]);
|
|
3428
|
-
return /* @__PURE__ */ (0,
|
|
3429
|
-
tabs.map((tab, idx) => /* @__PURE__ */ (0,
|
|
3391
|
+
return /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
|
|
3392
|
+
tabs.map((tab, idx) => /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
3430
3393
|
TabItem_default,
|
|
3431
3394
|
{
|
|
3432
3395
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -3438,7 +3401,7 @@ var Tab = (props) => {
|
|
|
3438
3401
|
},
|
|
3439
3402
|
`${tab.value}_${idx}`
|
|
3440
3403
|
)),
|
|
3441
|
-
type === "toggle" && /* @__PURE__ */ (0,
|
|
3404
|
+
type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
3442
3405
|
"div",
|
|
3443
3406
|
{
|
|
3444
3407
|
className: "tab-toggle-underline",
|
|
@@ -3454,7 +3417,7 @@ Tab.displayName = "Tab";
|
|
|
3454
3417
|
var Tab_default = Tab;
|
|
3455
3418
|
|
|
3456
3419
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
3457
|
-
var
|
|
3420
|
+
var import_jsx_runtime318 = require("react/jsx-runtime");
|
|
3458
3421
|
var RangePicker = (props) => {
|
|
3459
3422
|
const {
|
|
3460
3423
|
startDate,
|
|
@@ -3464,7 +3427,7 @@ var RangePicker = (props) => {
|
|
|
3464
3427
|
maxDate,
|
|
3465
3428
|
locale = "ko"
|
|
3466
3429
|
} = props;
|
|
3467
|
-
const [activeTab, setActiveTab] =
|
|
3430
|
+
const [activeTab, setActiveTab] = import_react16.default.useState("start");
|
|
3468
3431
|
const handleStartChange = (date) => {
|
|
3469
3432
|
if (!date) return;
|
|
3470
3433
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -3477,8 +3440,8 @@ var RangePicker = (props) => {
|
|
|
3477
3440
|
};
|
|
3478
3441
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
3479
3442
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
3480
|
-
return /* @__PURE__ */ (0,
|
|
3481
|
-
/* @__PURE__ */ (0,
|
|
3443
|
+
return /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
|
|
3444
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3482
3445
|
Tab_default,
|
|
3483
3446
|
{
|
|
3484
3447
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -3491,8 +3454,8 @@ var RangePicker = (props) => {
|
|
|
3491
3454
|
size: "sm"
|
|
3492
3455
|
}
|
|
3493
3456
|
) }),
|
|
3494
|
-
/* @__PURE__ */ (0,
|
|
3495
|
-
/* @__PURE__ */ (0,
|
|
3457
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "datepicker-range-panels", children: [
|
|
3458
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3496
3459
|
SingleDatePicker_default,
|
|
3497
3460
|
{
|
|
3498
3461
|
value: startDate,
|
|
@@ -3504,7 +3467,7 @@ var RangePicker = (props) => {
|
|
|
3504
3467
|
locale
|
|
3505
3468
|
}
|
|
3506
3469
|
),
|
|
3507
|
-
/* @__PURE__ */ (0,
|
|
3470
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3508
3471
|
SingleDatePicker_default,
|
|
3509
3472
|
{
|
|
3510
3473
|
value: endDate,
|
|
@@ -3517,7 +3480,7 @@ var RangePicker = (props) => {
|
|
|
3517
3480
|
}
|
|
3518
3481
|
)
|
|
3519
3482
|
] }),
|
|
3520
|
-
/* @__PURE__ */ (0,
|
|
3483
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3521
3484
|
SingleDatePicker_default,
|
|
3522
3485
|
{
|
|
3523
3486
|
value: startDate,
|
|
@@ -3528,7 +3491,7 @@ var RangePicker = (props) => {
|
|
|
3528
3491
|
rangeEnd: endDate,
|
|
3529
3492
|
locale
|
|
3530
3493
|
}
|
|
3531
|
-
) : /* @__PURE__ */ (0,
|
|
3494
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3532
3495
|
SingleDatePicker_default,
|
|
3533
3496
|
{
|
|
3534
3497
|
value: endDate,
|
|
@@ -3546,10 +3509,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
3546
3509
|
var RangePicker_default = RangePicker;
|
|
3547
3510
|
|
|
3548
3511
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
3549
|
-
var
|
|
3512
|
+
var import_jsx_runtime319 = require("react/jsx-runtime");
|
|
3550
3513
|
var PopupPicker = (props) => {
|
|
3551
3514
|
const { component, type, locale } = props;
|
|
3552
|
-
const [isOpen, setIsOpen] =
|
|
3515
|
+
const [isOpen, setIsOpen] = import_react17.default.useState(false);
|
|
3553
3516
|
const handleClick = () => setIsOpen(true);
|
|
3554
3517
|
const handleClose = () => setIsOpen(false);
|
|
3555
3518
|
const handleSingleChange = (date) => {
|
|
@@ -3557,11 +3520,11 @@ var PopupPicker = (props) => {
|
|
|
3557
3520
|
props.onChange?.(date);
|
|
3558
3521
|
handleClose();
|
|
3559
3522
|
};
|
|
3560
|
-
return /* @__PURE__ */ (0,
|
|
3561
|
-
|
|
3562
|
-
/* @__PURE__ */ (0,
|
|
3563
|
-
/* @__PURE__ */ (0,
|
|
3564
|
-
type === "single" && /* @__PURE__ */ (0,
|
|
3523
|
+
return /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "lib-xplat-popup-datepicker", children: [
|
|
3524
|
+
import_react17.default.cloneElement(component, { onClick: handleClick }),
|
|
3525
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
|
|
3526
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "popup-datepicker-content", children: [
|
|
3527
|
+
type === "single" && /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
3565
3528
|
SingleDatePicker_default,
|
|
3566
3529
|
{
|
|
3567
3530
|
value: props.value,
|
|
@@ -3571,7 +3534,7 @@ var PopupPicker = (props) => {
|
|
|
3571
3534
|
locale
|
|
3572
3535
|
}
|
|
3573
3536
|
),
|
|
3574
|
-
type === "range" && /* @__PURE__ */ (0,
|
|
3537
|
+
type === "range" && /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
3575
3538
|
RangePicker_default,
|
|
3576
3539
|
{
|
|
3577
3540
|
startDate: props.startDate,
|
|
@@ -3583,8 +3546,8 @@ var PopupPicker = (props) => {
|
|
|
3583
3546
|
}
|
|
3584
3547
|
)
|
|
3585
3548
|
] }),
|
|
3586
|
-
/* @__PURE__ */ (0,
|
|
3587
|
-
/* @__PURE__ */ (0,
|
|
3549
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
3550
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
3588
3551
|
Button_default,
|
|
3589
3552
|
{
|
|
3590
3553
|
type: "secondary",
|
|
@@ -3592,7 +3555,7 @@ var PopupPicker = (props) => {
|
|
|
3592
3555
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
3593
3556
|
}
|
|
3594
3557
|
),
|
|
3595
|
-
/* @__PURE__ */ (0,
|
|
3558
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
3596
3559
|
] })
|
|
3597
3560
|
] }) })
|
|
3598
3561
|
] });
|
|
@@ -3601,10 +3564,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
3601
3564
|
var PopupPicker_default = PopupPicker;
|
|
3602
3565
|
|
|
3603
3566
|
// src/components/Divider/Divider.tsx
|
|
3604
|
-
var
|
|
3567
|
+
var import_jsx_runtime320 = require("react/jsx-runtime");
|
|
3605
3568
|
var Divider = (props) => {
|
|
3606
3569
|
const { orientation = "horizontal" } = props;
|
|
3607
|
-
return /* @__PURE__ */ (0,
|
|
3570
|
+
return /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
3608
3571
|
"div",
|
|
3609
3572
|
{
|
|
3610
3573
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -3617,15 +3580,15 @@ Divider.displayName = "Divider";
|
|
|
3617
3580
|
var Divider_default = Divider;
|
|
3618
3581
|
|
|
3619
3582
|
// src/components/Drawer/Drawer.tsx
|
|
3620
|
-
var
|
|
3583
|
+
var import_react18 = __toESM(require("react"), 1);
|
|
3621
3584
|
var import_react_dom3 = require("react-dom");
|
|
3622
|
-
var
|
|
3585
|
+
var import_jsx_runtime321 = require("react/jsx-runtime");
|
|
3623
3586
|
var ANIMATION_DURATION_MS2 = 250;
|
|
3624
3587
|
var Drawer = (props) => {
|
|
3625
3588
|
const { isOpen, onClose, placement = "right", size = "md", title, children } = props;
|
|
3626
|
-
const [mounted, setMounted] =
|
|
3627
|
-
const [visible, setVisible] =
|
|
3628
|
-
|
|
3589
|
+
const [mounted, setMounted] = import_react18.default.useState(false);
|
|
3590
|
+
const [visible, setVisible] = import_react18.default.useState(false);
|
|
3591
|
+
import_react18.default.useEffect(() => {
|
|
3629
3592
|
if (isOpen) {
|
|
3630
3593
|
setMounted(true);
|
|
3631
3594
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3639,12 +3602,12 @@ var Drawer = (props) => {
|
|
|
3639
3602
|
if (!mounted) return null;
|
|
3640
3603
|
const stateClass = visible ? "enter" : "exit";
|
|
3641
3604
|
return (0, import_react_dom3.createPortal)(
|
|
3642
|
-
/* @__PURE__ */ (0,
|
|
3605
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
3643
3606
|
"div",
|
|
3644
3607
|
{
|
|
3645
3608
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
3646
3609
|
onClick: onClose,
|
|
3647
|
-
children: /* @__PURE__ */ (0,
|
|
3610
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)(
|
|
3648
3611
|
"div",
|
|
3649
3612
|
{
|
|
3650
3613
|
className: clsx_default("lib-xplat-drawer", placement, size, stateClass),
|
|
@@ -3652,11 +3615,11 @@ var Drawer = (props) => {
|
|
|
3652
3615
|
"aria-modal": "true",
|
|
3653
3616
|
onClick: (e) => e.stopPropagation(),
|
|
3654
3617
|
children: [
|
|
3655
|
-
title && /* @__PURE__ */ (0,
|
|
3656
|
-
/* @__PURE__ */ (0,
|
|
3657
|
-
/* @__PURE__ */ (0,
|
|
3618
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: "drawer-header", children: [
|
|
3619
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)("span", { className: "drawer-title", children: title }),
|
|
3620
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
3658
3621
|
] }),
|
|
3659
|
-
/* @__PURE__ */ (0,
|
|
3622
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)("div", { className: "drawer-body", children })
|
|
3660
3623
|
]
|
|
3661
3624
|
}
|
|
3662
3625
|
)
|
|
@@ -3669,16 +3632,16 @@ Drawer.displayName = "Drawer";
|
|
|
3669
3632
|
var Drawer_default = Drawer;
|
|
3670
3633
|
|
|
3671
3634
|
// src/components/Dropdown/Dropdown.tsx
|
|
3672
|
-
var
|
|
3635
|
+
var import_react21 = __toESM(require("react"), 1);
|
|
3673
3636
|
|
|
3674
3637
|
// src/tokens/hooks/useAutoPosition.ts
|
|
3675
|
-
var
|
|
3638
|
+
var import_react19 = __toESM(require("react"), 1);
|
|
3676
3639
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
3677
|
-
const [position, setPosition] =
|
|
3640
|
+
const [position, setPosition] = import_react19.default.useState({
|
|
3678
3641
|
position: {},
|
|
3679
3642
|
direction: "bottom"
|
|
3680
3643
|
});
|
|
3681
|
-
const calculatePosition =
|
|
3644
|
+
const calculatePosition = import_react19.default.useCallback(() => {
|
|
3682
3645
|
if (!triggerRef.current || !popRef.current) return;
|
|
3683
3646
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
3684
3647
|
const popW = popRef.current.offsetWidth;
|
|
@@ -3705,13 +3668,13 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3705
3668
|
direction
|
|
3706
3669
|
});
|
|
3707
3670
|
}, [triggerRef, popRef]);
|
|
3708
|
-
|
|
3671
|
+
import_react19.default.useLayoutEffect(() => {
|
|
3709
3672
|
if (!enabled) return;
|
|
3710
3673
|
calculatePosition();
|
|
3711
3674
|
const raf = requestAnimationFrame(calculatePosition);
|
|
3712
3675
|
return () => cancelAnimationFrame(raf);
|
|
3713
3676
|
}, [calculatePosition, enabled]);
|
|
3714
|
-
|
|
3677
|
+
import_react19.default.useEffect(() => {
|
|
3715
3678
|
if (!enabled || !popRef.current) return;
|
|
3716
3679
|
const observer = new ResizeObserver(() => {
|
|
3717
3680
|
calculatePosition();
|
|
@@ -3719,7 +3682,7 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3719
3682
|
observer.observe(popRef.current);
|
|
3720
3683
|
return () => observer.disconnect();
|
|
3721
3684
|
}, [calculatePosition, enabled, popRef]);
|
|
3722
|
-
|
|
3685
|
+
import_react19.default.useEffect(() => {
|
|
3723
3686
|
if (!enabled) return;
|
|
3724
3687
|
window.addEventListener("resize", calculatePosition);
|
|
3725
3688
|
window.addEventListener("scroll", calculatePosition, true);
|
|
@@ -3733,9 +3696,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3733
3696
|
var useAutoPosition_default = useAutoPosition;
|
|
3734
3697
|
|
|
3735
3698
|
// src/tokens/hooks/useClickOutside.ts
|
|
3736
|
-
var
|
|
3699
|
+
var import_react20 = __toESM(require("react"), 1);
|
|
3737
3700
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
3738
|
-
|
|
3701
|
+
import_react20.default.useEffect(() => {
|
|
3739
3702
|
if (!enabled) return;
|
|
3740
3703
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
3741
3704
|
const listener = (event) => {
|
|
@@ -3758,17 +3721,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
3758
3721
|
var useClickOutside_default = useClickOutside;
|
|
3759
3722
|
|
|
3760
3723
|
// src/components/Dropdown/Dropdown.tsx
|
|
3761
|
-
var
|
|
3724
|
+
var import_jsx_runtime322 = require("react/jsx-runtime");
|
|
3762
3725
|
var Dropdown = (props) => {
|
|
3763
3726
|
const { items, children } = props;
|
|
3764
|
-
const [isOpen, setIsOpen] =
|
|
3765
|
-
const [mounted, setMounted] =
|
|
3766
|
-
const [visible, setVisible] =
|
|
3767
|
-
const triggerRef =
|
|
3768
|
-
const menuRef =
|
|
3727
|
+
const [isOpen, setIsOpen] = import_react21.default.useState(false);
|
|
3728
|
+
const [mounted, setMounted] = import_react21.default.useState(false);
|
|
3729
|
+
const [visible, setVisible] = import_react21.default.useState(false);
|
|
3730
|
+
const triggerRef = import_react21.default.useRef(null);
|
|
3731
|
+
const menuRef = import_react21.default.useRef(null);
|
|
3769
3732
|
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
3770
3733
|
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
3771
|
-
|
|
3734
|
+
import_react21.default.useEffect(() => {
|
|
3772
3735
|
if (isOpen) {
|
|
3773
3736
|
setMounted(true);
|
|
3774
3737
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3783,8 +3746,8 @@ var Dropdown = (props) => {
|
|
|
3783
3746
|
item.onClick?.();
|
|
3784
3747
|
setIsOpen(false);
|
|
3785
3748
|
};
|
|
3786
|
-
return /* @__PURE__ */ (0,
|
|
3787
|
-
/* @__PURE__ */ (0,
|
|
3749
|
+
return /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)("div", { className: "lib-xplat-dropdown", children: [
|
|
3750
|
+
/* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
|
|
3788
3751
|
"div",
|
|
3789
3752
|
{
|
|
3790
3753
|
ref: triggerRef,
|
|
@@ -3793,14 +3756,14 @@ var Dropdown = (props) => {
|
|
|
3793
3756
|
children
|
|
3794
3757
|
}
|
|
3795
3758
|
),
|
|
3796
|
-
mounted && /* @__PURE__ */ (0,
|
|
3759
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
|
|
3797
3760
|
"div",
|
|
3798
3761
|
{
|
|
3799
3762
|
ref: menuRef,
|
|
3800
3763
|
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
3801
3764
|
style: { top: position.top, left: position.left },
|
|
3802
3765
|
role: "menu",
|
|
3803
|
-
children: items.map((item) => /* @__PURE__ */ (0,
|
|
3766
|
+
children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
|
|
3804
3767
|
"button",
|
|
3805
3768
|
{
|
|
3806
3769
|
className: clsx_default("dropdown-item", {
|
|
@@ -3822,23 +3785,23 @@ Dropdown.displayName = "Dropdown";
|
|
|
3822
3785
|
var Dropdown_default = Dropdown;
|
|
3823
3786
|
|
|
3824
3787
|
// src/components/EmptyState/EmptyState.tsx
|
|
3825
|
-
var
|
|
3788
|
+
var import_jsx_runtime323 = require("react/jsx-runtime");
|
|
3826
3789
|
var EmptyState = (props) => {
|
|
3827
3790
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
3828
|
-
return /* @__PURE__ */ (0,
|
|
3829
|
-
icon && /* @__PURE__ */ (0,
|
|
3830
|
-
!icon && /* @__PURE__ */ (0,
|
|
3831
|
-
/* @__PURE__ */ (0,
|
|
3832
|
-
description && /* @__PURE__ */ (0,
|
|
3833
|
-
action && /* @__PURE__ */ (0,
|
|
3791
|
+
return /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)("div", { className: "lib-xplat-empty-state", children: [
|
|
3792
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "empty-icon", children: icon }),
|
|
3793
|
+
!icon && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "empty-icon", children: /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("path", { d: "M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" }) }) }),
|
|
3794
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)("p", { className: "empty-title", children: title }),
|
|
3795
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("p", { className: "empty-description", children: description }),
|
|
3796
|
+
action && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "empty-action", children: action })
|
|
3834
3797
|
] });
|
|
3835
3798
|
};
|
|
3836
3799
|
EmptyState.displayName = "EmptyState";
|
|
3837
3800
|
var EmptyState_default = EmptyState;
|
|
3838
3801
|
|
|
3839
3802
|
// src/components/FileUpload/FileUpload.tsx
|
|
3840
|
-
var
|
|
3841
|
-
var
|
|
3803
|
+
var import_react22 = __toESM(require("react"), 1);
|
|
3804
|
+
var import_jsx_runtime324 = require("react/jsx-runtime");
|
|
3842
3805
|
var FileUpload = (props) => {
|
|
3843
3806
|
const {
|
|
3844
3807
|
accept,
|
|
@@ -3848,8 +3811,8 @@ var FileUpload = (props) => {
|
|
|
3848
3811
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
3849
3812
|
description
|
|
3850
3813
|
} = props;
|
|
3851
|
-
const [isDragOver, setIsDragOver] =
|
|
3852
|
-
const inputRef =
|
|
3814
|
+
const [isDragOver, setIsDragOver] = import_react22.default.useState(false);
|
|
3815
|
+
const inputRef = import_react22.default.useRef(null);
|
|
3853
3816
|
const handleFiles = (fileList) => {
|
|
3854
3817
|
let files = Array.from(fileList);
|
|
3855
3818
|
if (maxSize) {
|
|
@@ -3879,7 +3842,7 @@ var FileUpload = (props) => {
|
|
|
3879
3842
|
handleFiles(e.target.files);
|
|
3880
3843
|
}
|
|
3881
3844
|
};
|
|
3882
|
-
return /* @__PURE__ */ (0,
|
|
3845
|
+
return /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)(
|
|
3883
3846
|
"div",
|
|
3884
3847
|
{
|
|
3885
3848
|
className: clsx_default("lib-xplat-file-upload", { "drag-over": isDragOver }),
|
|
@@ -3888,7 +3851,7 @@ var FileUpload = (props) => {
|
|
|
3888
3851
|
onDragLeave: handleDragLeave,
|
|
3889
3852
|
onClick: () => inputRef.current?.click(),
|
|
3890
3853
|
children: [
|
|
3891
|
-
/* @__PURE__ */ (0,
|
|
3854
|
+
/* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
|
|
3892
3855
|
"input",
|
|
3893
3856
|
{
|
|
3894
3857
|
ref: inputRef,
|
|
@@ -3898,9 +3861,9 @@ var FileUpload = (props) => {
|
|
|
3898
3861
|
onChange: handleChange
|
|
3899
3862
|
}
|
|
3900
3863
|
),
|
|
3901
|
-
/* @__PURE__ */ (0,
|
|
3902
|
-
/* @__PURE__ */ (0,
|
|
3903
|
-
description && /* @__PURE__ */ (0,
|
|
3864
|
+
/* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(UploadIcon_default, {}) }),
|
|
3865
|
+
/* @__PURE__ */ (0, import_jsx_runtime324.jsx)("p", { className: "upload-label", children: label }),
|
|
3866
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("p", { className: "upload-description", children: description })
|
|
3904
3867
|
]
|
|
3905
3868
|
}
|
|
3906
3869
|
);
|
|
@@ -3909,10 +3872,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
3909
3872
|
var FileUpload_default = FileUpload;
|
|
3910
3873
|
|
|
3911
3874
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
3912
|
-
var
|
|
3875
|
+
var import_react24 = __toESM(require("react"), 1);
|
|
3913
3876
|
|
|
3914
3877
|
// src/components/HtmlTypeWriter/utils.ts
|
|
3915
|
-
var
|
|
3878
|
+
var import_react23 = __toESM(require("react"), 1);
|
|
3916
3879
|
var voidTags = /* @__PURE__ */ new Set([
|
|
3917
3880
|
"br",
|
|
3918
3881
|
"img",
|
|
@@ -3980,41 +3943,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
3980
3943
|
props[attr.name] = attr.value;
|
|
3981
3944
|
});
|
|
3982
3945
|
if (voidTags.has(tag)) {
|
|
3983
|
-
return
|
|
3946
|
+
return import_react23.default.createElement(tag, props);
|
|
3984
3947
|
}
|
|
3985
3948
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
3986
|
-
return
|
|
3949
|
+
return import_react23.default.createElement(tag, props, ...children);
|
|
3987
3950
|
};
|
|
3988
3951
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
3989
3952
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
3990
3953
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
3991
|
-
return node == null ? null :
|
|
3954
|
+
return node == null ? null : import_react23.default.createElement(import_react23.default.Fragment, { key: idx }, node);
|
|
3992
3955
|
}).filter(Boolean);
|
|
3993
3956
|
return nodes.length === 0 ? null : nodes;
|
|
3994
3957
|
};
|
|
3995
3958
|
|
|
3996
3959
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
3997
|
-
var
|
|
3960
|
+
var import_jsx_runtime325 = require("react/jsx-runtime");
|
|
3998
3961
|
var HtmlTypeWriter = ({
|
|
3999
3962
|
html,
|
|
4000
3963
|
duration = 20,
|
|
4001
3964
|
onDone,
|
|
4002
3965
|
onChange
|
|
4003
3966
|
}) => {
|
|
4004
|
-
const [typedLen, setTypedLen] =
|
|
4005
|
-
const doneCalledRef =
|
|
4006
|
-
const { doc, rangeMap, totalLength } =
|
|
3967
|
+
const [typedLen, setTypedLen] = import_react24.default.useState(0);
|
|
3968
|
+
const doneCalledRef = import_react24.default.useRef(false);
|
|
3969
|
+
const { doc, rangeMap, totalLength } = import_react24.default.useMemo(() => {
|
|
4007
3970
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
4008
3971
|
const decoded = decodeHtmlEntities(html);
|
|
4009
3972
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
4010
3973
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
4011
3974
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
4012
3975
|
}, [html]);
|
|
4013
|
-
|
|
3976
|
+
import_react24.default.useEffect(() => {
|
|
4014
3977
|
setTypedLen(0);
|
|
4015
3978
|
doneCalledRef.current = false;
|
|
4016
3979
|
}, [html]);
|
|
4017
|
-
|
|
3980
|
+
import_react24.default.useEffect(() => {
|
|
4018
3981
|
if (!totalLength) return;
|
|
4019
3982
|
if (typedLen >= totalLength) return;
|
|
4020
3983
|
const timer = window.setInterval(() => {
|
|
@@ -4022,33 +3985,33 @@ var HtmlTypeWriter = ({
|
|
|
4022
3985
|
}, duration);
|
|
4023
3986
|
return () => window.clearInterval(timer);
|
|
4024
3987
|
}, [typedLen, totalLength, duration]);
|
|
4025
|
-
|
|
3988
|
+
import_react24.default.useEffect(() => {
|
|
4026
3989
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
4027
3990
|
onChange?.();
|
|
4028
3991
|
}
|
|
4029
3992
|
}, [typedLen, totalLength, onChange]);
|
|
4030
|
-
|
|
3993
|
+
import_react24.default.useEffect(() => {
|
|
4031
3994
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
4032
3995
|
doneCalledRef.current = true;
|
|
4033
3996
|
onDone?.();
|
|
4034
3997
|
}
|
|
4035
3998
|
}, [typedLen, totalLength, onDone]);
|
|
4036
|
-
const parsed =
|
|
3999
|
+
const parsed = import_react24.default.useMemo(
|
|
4037
4000
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
4038
4001
|
[doc, typedLen, rangeMap]
|
|
4039
4002
|
);
|
|
4040
|
-
return /* @__PURE__ */ (0,
|
|
4003
|
+
return /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
4041
4004
|
};
|
|
4042
4005
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
4043
4006
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
4044
4007
|
|
|
4045
4008
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
4046
|
-
var
|
|
4047
|
-
var
|
|
4009
|
+
var import_react25 = __toESM(require("react"), 1);
|
|
4010
|
+
var import_jsx_runtime326 = require("react/jsx-runtime");
|
|
4048
4011
|
var ImageSelector = (props) => {
|
|
4049
4012
|
const { value, label, onChange } = props;
|
|
4050
|
-
const [previewUrl, setPreviewUrl] =
|
|
4051
|
-
|
|
4013
|
+
const [previewUrl, setPreviewUrl] = import_react25.default.useState();
|
|
4014
|
+
import_react25.default.useEffect(() => {
|
|
4052
4015
|
if (!value) {
|
|
4053
4016
|
setPreviewUrl(void 0);
|
|
4054
4017
|
return;
|
|
@@ -4057,7 +4020,7 @@ var ImageSelector = (props) => {
|
|
|
4057
4020
|
setPreviewUrl(url);
|
|
4058
4021
|
return () => URL.revokeObjectURL(url);
|
|
4059
4022
|
}, [value]);
|
|
4060
|
-
const inputRef =
|
|
4023
|
+
const inputRef = import_react25.default.useRef(null);
|
|
4061
4024
|
const handleFileChange = (e) => {
|
|
4062
4025
|
const selectedFile = e.target.files?.[0];
|
|
4063
4026
|
if (selectedFile) {
|
|
@@ -4070,8 +4033,8 @@ var ImageSelector = (props) => {
|
|
|
4070
4033
|
const handleOpenFileDialog = () => {
|
|
4071
4034
|
inputRef.current?.click();
|
|
4072
4035
|
};
|
|
4073
|
-
return /* @__PURE__ */ (0,
|
|
4074
|
-
/* @__PURE__ */ (0,
|
|
4036
|
+
return /* @__PURE__ */ (0, import_jsx_runtime326.jsxs)("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
4037
|
+
/* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
|
|
4075
4038
|
"input",
|
|
4076
4039
|
{
|
|
4077
4040
|
type: "file",
|
|
@@ -4081,13 +4044,13 @@ var ImageSelector = (props) => {
|
|
|
4081
4044
|
ref: inputRef
|
|
4082
4045
|
}
|
|
4083
4046
|
),
|
|
4084
|
-
value && /* @__PURE__ */ (0,
|
|
4085
|
-
/* @__PURE__ */ (0,
|
|
4086
|
-
/* @__PURE__ */ (0,
|
|
4047
|
+
value && /* @__PURE__ */ (0, import_jsx_runtime326.jsxs)("div", { className: "action-bar", children: [
|
|
4048
|
+
/* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(UploadIcon_default, {}) }),
|
|
4049
|
+
/* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(DeleteIcon_default, {}) })
|
|
4087
4050
|
] }),
|
|
4088
|
-
/* @__PURE__ */ (0,
|
|
4089
|
-
/* @__PURE__ */ (0,
|
|
4090
|
-
/* @__PURE__ */ (0,
|
|
4051
|
+
/* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "content", children: previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ (0, import_jsx_runtime326.jsxs)("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
|
|
4052
|
+
/* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(ImageIcon_default, {}) }),
|
|
4053
|
+
/* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
4091
4054
|
] }) })
|
|
4092
4055
|
] });
|
|
4093
4056
|
};
|
|
@@ -4095,7 +4058,7 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
4095
4058
|
var ImageSelector_default = ImageSelector;
|
|
4096
4059
|
|
|
4097
4060
|
// src/components/Pagination/Pagination.tsx
|
|
4098
|
-
var
|
|
4061
|
+
var import_jsx_runtime327 = require("react/jsx-runtime");
|
|
4099
4062
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
4100
4063
|
const totalNumbers = siblingCount * 2 + 5;
|
|
4101
4064
|
if (totalPages <= totalNumbers) {
|
|
@@ -4138,19 +4101,19 @@ var Pagination = (props) => {
|
|
|
4138
4101
|
onChange?.(page);
|
|
4139
4102
|
}
|
|
4140
4103
|
};
|
|
4141
|
-
return /* @__PURE__ */ (0,
|
|
4142
|
-
/* @__PURE__ */ (0,
|
|
4104
|
+
return /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
4105
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
|
|
4143
4106
|
"button",
|
|
4144
4107
|
{
|
|
4145
4108
|
className: "page-btn prev",
|
|
4146
4109
|
disabled: current <= 1,
|
|
4147
4110
|
onClick: () => handleClick(current - 1),
|
|
4148
4111
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
4149
|
-
children: /* @__PURE__ */ (0,
|
|
4112
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(ChevronLeftIcon_default, {})
|
|
4150
4113
|
}
|
|
4151
4114
|
),
|
|
4152
4115
|
pages.map(
|
|
4153
|
-
(page, i) => page === "..." ? /* @__PURE__ */ (0,
|
|
4116
|
+
(page, i) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime327.jsx)("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
|
|
4154
4117
|
"button",
|
|
4155
4118
|
{
|
|
4156
4119
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -4161,14 +4124,14 @@ var Pagination = (props) => {
|
|
|
4161
4124
|
page
|
|
4162
4125
|
)
|
|
4163
4126
|
),
|
|
4164
|
-
/* @__PURE__ */ (0,
|
|
4127
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
|
|
4165
4128
|
"button",
|
|
4166
4129
|
{
|
|
4167
4130
|
className: "page-btn next",
|
|
4168
4131
|
disabled: current >= totalPages,
|
|
4169
4132
|
onClick: () => handleClick(current + 1),
|
|
4170
4133
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
4171
|
-
children: /* @__PURE__ */ (0,
|
|
4134
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(ChevronRightIcon_default, {})
|
|
4172
4135
|
}
|
|
4173
4136
|
)
|
|
4174
4137
|
] });
|
|
@@ -4177,17 +4140,17 @@ Pagination.displayName = "Pagination";
|
|
|
4177
4140
|
var Pagination_default = Pagination;
|
|
4178
4141
|
|
|
4179
4142
|
// src/components/PopOver/PopOver.tsx
|
|
4180
|
-
var
|
|
4181
|
-
var
|
|
4143
|
+
var import_react26 = __toESM(require("react"), 1);
|
|
4144
|
+
var import_jsx_runtime328 = require("react/jsx-runtime");
|
|
4182
4145
|
var PopOver = (props) => {
|
|
4183
4146
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
4184
|
-
const popRef =
|
|
4185
|
-
const triggerRef =
|
|
4186
|
-
const [localOpen, setLocalOpen] =
|
|
4187
|
-
const [eventTrigger, setEventTrigger] =
|
|
4147
|
+
const popRef = import_react26.default.useRef(null);
|
|
4148
|
+
const triggerRef = import_react26.default.useRef(null);
|
|
4149
|
+
const [localOpen, setLocalOpen] = import_react26.default.useState(false);
|
|
4150
|
+
const [eventTrigger, setEventTrigger] = import_react26.default.useState(false);
|
|
4188
4151
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
4189
4152
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
4190
|
-
|
|
4153
|
+
import_react26.default.useEffect(() => {
|
|
4191
4154
|
if (isOpen) {
|
|
4192
4155
|
setLocalOpen(isOpen);
|
|
4193
4156
|
setTimeout(() => {
|
|
@@ -4200,7 +4163,7 @@ var PopOver = (props) => {
|
|
|
4200
4163
|
}, 200);
|
|
4201
4164
|
}
|
|
4202
4165
|
}, [isOpen]);
|
|
4203
|
-
return /* @__PURE__ */ (0,
|
|
4166
|
+
return /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)(
|
|
4204
4167
|
"div",
|
|
4205
4168
|
{
|
|
4206
4169
|
className: "lib-xplat-pop-over",
|
|
@@ -4210,7 +4173,7 @@ var PopOver = (props) => {
|
|
|
4210
4173
|
},
|
|
4211
4174
|
children: [
|
|
4212
4175
|
children,
|
|
4213
|
-
localOpen && /* @__PURE__ */ (0,
|
|
4176
|
+
localOpen && /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
|
|
4214
4177
|
"div",
|
|
4215
4178
|
{
|
|
4216
4179
|
className: clsx_default(
|
|
@@ -4233,7 +4196,7 @@ PopOver.displayName = "PopOver";
|
|
|
4233
4196
|
var PopOver_default = PopOver;
|
|
4234
4197
|
|
|
4235
4198
|
// src/components/Progress/Progress.tsx
|
|
4236
|
-
var
|
|
4199
|
+
var import_jsx_runtime329 = require("react/jsx-runtime");
|
|
4237
4200
|
var Progress = (props) => {
|
|
4238
4201
|
const {
|
|
4239
4202
|
value,
|
|
@@ -4243,8 +4206,8 @@ var Progress = (props) => {
|
|
|
4243
4206
|
showLabel = false
|
|
4244
4207
|
} = props;
|
|
4245
4208
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
4246
|
-
return /* @__PURE__ */ (0,
|
|
4247
|
-
/* @__PURE__ */ (0,
|
|
4209
|
+
return /* @__PURE__ */ (0, import_jsx_runtime329.jsxs)("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
4210
|
+
/* @__PURE__ */ (0, import_jsx_runtime329.jsx)(
|
|
4248
4211
|
"div",
|
|
4249
4212
|
{
|
|
4250
4213
|
className: "track",
|
|
@@ -4252,7 +4215,7 @@ var Progress = (props) => {
|
|
|
4252
4215
|
"aria-valuenow": value,
|
|
4253
4216
|
"aria-valuemin": 0,
|
|
4254
4217
|
"aria-valuemax": max,
|
|
4255
|
-
children: /* @__PURE__ */ (0,
|
|
4218
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(
|
|
4256
4219
|
"div",
|
|
4257
4220
|
{
|
|
4258
4221
|
className: "bar",
|
|
@@ -4261,7 +4224,7 @@ var Progress = (props) => {
|
|
|
4261
4224
|
)
|
|
4262
4225
|
}
|
|
4263
4226
|
),
|
|
4264
|
-
showLabel && /* @__PURE__ */ (0,
|
|
4227
|
+
showLabel && /* @__PURE__ */ (0, import_jsx_runtime329.jsxs)("span", { className: "label", children: [
|
|
4265
4228
|
Math.round(percentage),
|
|
4266
4229
|
"%"
|
|
4267
4230
|
] })
|
|
@@ -4271,17 +4234,17 @@ Progress.displayName = "Progress";
|
|
|
4271
4234
|
var Progress_default = Progress;
|
|
4272
4235
|
|
|
4273
4236
|
// src/components/Radio/RadioGroupContext.tsx
|
|
4274
|
-
var
|
|
4275
|
-
var RadioGroupContext =
|
|
4237
|
+
var import_react27 = __toESM(require("react"), 1);
|
|
4238
|
+
var RadioGroupContext = import_react27.default.createContext(
|
|
4276
4239
|
null
|
|
4277
4240
|
);
|
|
4278
4241
|
var useRadioGroupContext = () => {
|
|
4279
|
-
return
|
|
4242
|
+
return import_react27.default.useContext(RadioGroupContext);
|
|
4280
4243
|
};
|
|
4281
4244
|
var RadioGroupContext_default = RadioGroupContext;
|
|
4282
4245
|
|
|
4283
4246
|
// src/components/Radio/Radio.tsx
|
|
4284
|
-
var
|
|
4247
|
+
var import_jsx_runtime330 = require("react/jsx-runtime");
|
|
4285
4248
|
var Radio = (props) => {
|
|
4286
4249
|
const {
|
|
4287
4250
|
label,
|
|
@@ -4299,7 +4262,7 @@ var Radio = (props) => {
|
|
|
4299
4262
|
value,
|
|
4300
4263
|
onChange: rest.onChange
|
|
4301
4264
|
};
|
|
4302
|
-
return /* @__PURE__ */ (0,
|
|
4265
|
+
return /* @__PURE__ */ (0, import_jsx_runtime330.jsxs)(
|
|
4303
4266
|
"label",
|
|
4304
4267
|
{
|
|
4305
4268
|
className: clsx_default(
|
|
@@ -4309,18 +4272,18 @@ var Radio = (props) => {
|
|
|
4309
4272
|
localChecked ? "checked" : void 0
|
|
4310
4273
|
),
|
|
4311
4274
|
children: [
|
|
4312
|
-
/* @__PURE__ */ (0,
|
|
4313
|
-
/* @__PURE__ */ (0,
|
|
4275
|
+
/* @__PURE__ */ (0, import_jsx_runtime330.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
4276
|
+
/* @__PURE__ */ (0, import_jsx_runtime330.jsx)(
|
|
4314
4277
|
"div",
|
|
4315
4278
|
{
|
|
4316
4279
|
className: clsx_default(
|
|
4317
4280
|
"circle",
|
|
4318
4281
|
localChecked ? "checked" : void 0
|
|
4319
4282
|
),
|
|
4320
|
-
children: localChecked && /* @__PURE__ */ (0,
|
|
4283
|
+
children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime330.jsx)("div", { className: "inner-circle" })
|
|
4321
4284
|
}
|
|
4322
4285
|
),
|
|
4323
|
-
label && /* @__PURE__ */ (0,
|
|
4286
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime330.jsx)("span", { children: label })
|
|
4324
4287
|
]
|
|
4325
4288
|
}
|
|
4326
4289
|
);
|
|
@@ -4329,28 +4292,28 @@ Radio.displayName = "Radio";
|
|
|
4329
4292
|
var Radio_default = Radio;
|
|
4330
4293
|
|
|
4331
4294
|
// src/components/Radio/RadioGroup.tsx
|
|
4332
|
-
var
|
|
4295
|
+
var import_jsx_runtime331 = require("react/jsx-runtime");
|
|
4333
4296
|
var RadioGroup = (props) => {
|
|
4334
4297
|
const { children, ...rest } = props;
|
|
4335
|
-
return /* @__PURE__ */ (0,
|
|
4298
|
+
return /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(import_jsx_runtime331.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
4336
4299
|
};
|
|
4337
4300
|
RadioGroup.displayName = "RadioGroup";
|
|
4338
4301
|
var RadioGroup_default = RadioGroup;
|
|
4339
4302
|
|
|
4340
4303
|
// src/components/Select/Select.tsx
|
|
4341
|
-
var
|
|
4304
|
+
var import_react30 = __toESM(require("react"), 1);
|
|
4342
4305
|
|
|
4343
4306
|
// src/components/Select/context.ts
|
|
4344
|
-
var
|
|
4345
|
-
var SelectContext =
|
|
4307
|
+
var import_react28 = __toESM(require("react"), 1);
|
|
4308
|
+
var SelectContext = import_react28.default.createContext(null);
|
|
4346
4309
|
var context_default = SelectContext;
|
|
4347
4310
|
|
|
4348
4311
|
// src/components/Select/SelectItem.tsx
|
|
4349
|
-
var
|
|
4350
|
-
var
|
|
4312
|
+
var import_react29 = __toESM(require("react"), 1);
|
|
4313
|
+
var import_jsx_runtime332 = require("react/jsx-runtime");
|
|
4351
4314
|
var SelectItem = (props) => {
|
|
4352
4315
|
const { children, value, onClick, disabled = false } = props;
|
|
4353
|
-
const ctx =
|
|
4316
|
+
const ctx = import_react29.default.useContext(context_default);
|
|
4354
4317
|
const handleClick = (e) => {
|
|
4355
4318
|
e.preventDefault();
|
|
4356
4319
|
e.stopPropagation();
|
|
@@ -4359,7 +4322,7 @@ var SelectItem = (props) => {
|
|
|
4359
4322
|
ctx?.close();
|
|
4360
4323
|
onClick?.();
|
|
4361
4324
|
};
|
|
4362
|
-
return /* @__PURE__ */ (0,
|
|
4325
|
+
return /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
|
|
4363
4326
|
"div",
|
|
4364
4327
|
{
|
|
4365
4328
|
className: clsx_default("select-item", disabled && "disabled"),
|
|
@@ -4380,7 +4343,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
4380
4343
|
var SelectItem_default = SelectItem;
|
|
4381
4344
|
|
|
4382
4345
|
// src/components/Select/Select.tsx
|
|
4383
|
-
var
|
|
4346
|
+
var import_jsx_runtime333 = require("react/jsx-runtime");
|
|
4384
4347
|
var ANIMATION_DURATION_MS3 = 200;
|
|
4385
4348
|
var SelectRoot = (props) => {
|
|
4386
4349
|
const {
|
|
@@ -4392,26 +4355,26 @@ var SelectRoot = (props) => {
|
|
|
4392
4355
|
error = false,
|
|
4393
4356
|
size = "md"
|
|
4394
4357
|
} = props;
|
|
4395
|
-
const itemChildren =
|
|
4396
|
-
(child) =>
|
|
4358
|
+
const itemChildren = import_react30.default.Children.toArray(children).filter(
|
|
4359
|
+
(child) => import_react30.default.isValidElement(child) && child.type === SelectItem_default
|
|
4397
4360
|
);
|
|
4398
4361
|
const isControlled = valueProp !== void 0;
|
|
4399
|
-
const [isOpen, setOpen] =
|
|
4400
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
4401
|
-
const controlledLabel =
|
|
4362
|
+
const [isOpen, setOpen] = import_react30.default.useState(false);
|
|
4363
|
+
const [uncontrolledLabel, setUncontrolledLabel] = import_react30.default.useState(null);
|
|
4364
|
+
const controlledLabel = import_react30.default.useMemo(() => {
|
|
4402
4365
|
if (!isControlled) return null;
|
|
4403
4366
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
4404
4367
|
return match ? match.props.children : null;
|
|
4405
4368
|
}, [isControlled, valueProp, itemChildren]);
|
|
4406
4369
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
4407
|
-
const triggerRef =
|
|
4408
|
-
const contentRef =
|
|
4409
|
-
const [mounted, setMounted] =
|
|
4410
|
-
const [visible, setVisible] =
|
|
4411
|
-
|
|
4370
|
+
const triggerRef = import_react30.default.useRef(null);
|
|
4371
|
+
const contentRef = import_react30.default.useRef(null);
|
|
4372
|
+
const [mounted, setMounted] = import_react30.default.useState(false);
|
|
4373
|
+
const [visible, setVisible] = import_react30.default.useState(false);
|
|
4374
|
+
import_react30.default.useEffect(() => {
|
|
4412
4375
|
if (disabled && isOpen) setOpen(false);
|
|
4413
4376
|
}, [disabled, isOpen]);
|
|
4414
|
-
|
|
4377
|
+
import_react30.default.useEffect(() => {
|
|
4415
4378
|
if (isOpen) {
|
|
4416
4379
|
setMounted(true);
|
|
4417
4380
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -4421,12 +4384,12 @@ var SelectRoot = (props) => {
|
|
|
4421
4384
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
4422
4385
|
return () => clearTimeout(t);
|
|
4423
4386
|
}, [isOpen]);
|
|
4424
|
-
const open =
|
|
4425
|
-
const close =
|
|
4426
|
-
const toggle =
|
|
4387
|
+
const open = import_react30.default.useCallback(() => setOpen(true), []);
|
|
4388
|
+
const close = import_react30.default.useCallback(() => setOpen(false), []);
|
|
4389
|
+
const toggle = import_react30.default.useCallback(() => setOpen((prev) => !prev), []);
|
|
4427
4390
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
4428
4391
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
4429
|
-
const setSelected =
|
|
4392
|
+
const setSelected = import_react30.default.useCallback(
|
|
4430
4393
|
(label, itemValue) => {
|
|
4431
4394
|
if (!isControlled) {
|
|
4432
4395
|
setUncontrolledLabel(label);
|
|
@@ -4435,7 +4398,7 @@ var SelectRoot = (props) => {
|
|
|
4435
4398
|
},
|
|
4436
4399
|
[isControlled, onChange]
|
|
4437
4400
|
);
|
|
4438
|
-
const ctxValue =
|
|
4401
|
+
const ctxValue = import_react30.default.useMemo(
|
|
4439
4402
|
() => ({
|
|
4440
4403
|
isOpen,
|
|
4441
4404
|
mounted,
|
|
@@ -4456,7 +4419,7 @@ var SelectRoot = (props) => {
|
|
|
4456
4419
|
if (disabled) return;
|
|
4457
4420
|
toggle();
|
|
4458
4421
|
};
|
|
4459
|
-
return /* @__PURE__ */ (0,
|
|
4422
|
+
return /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime333.jsxs)(
|
|
4460
4423
|
"div",
|
|
4461
4424
|
{
|
|
4462
4425
|
className: clsx_default(
|
|
@@ -4467,7 +4430,7 @@ var SelectRoot = (props) => {
|
|
|
4467
4430
|
mounted && "is-open"
|
|
4468
4431
|
),
|
|
4469
4432
|
children: [
|
|
4470
|
-
/* @__PURE__ */ (0,
|
|
4433
|
+
/* @__PURE__ */ (0, import_jsx_runtime333.jsxs)(
|
|
4471
4434
|
"div",
|
|
4472
4435
|
{
|
|
4473
4436
|
ref: triggerRef,
|
|
@@ -4491,7 +4454,7 @@ var SelectRoot = (props) => {
|
|
|
4491
4454
|
}
|
|
4492
4455
|
},
|
|
4493
4456
|
children: [
|
|
4494
|
-
/* @__PURE__ */ (0,
|
|
4457
|
+
/* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
|
|
4495
4458
|
"span",
|
|
4496
4459
|
{
|
|
4497
4460
|
className: clsx_default(
|
|
@@ -4501,25 +4464,25 @@ var SelectRoot = (props) => {
|
|
|
4501
4464
|
children: selectedLabel ?? placeholder
|
|
4502
4465
|
}
|
|
4503
4466
|
),
|
|
4504
|
-
/* @__PURE__ */ (0,
|
|
4467
|
+
/* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
|
|
4505
4468
|
"span",
|
|
4506
4469
|
{
|
|
4507
4470
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
4508
4471
|
"aria-hidden": true,
|
|
4509
|
-
children: /* @__PURE__ */ (0,
|
|
4472
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(ChevronDownIcon_default, {})
|
|
4510
4473
|
}
|
|
4511
4474
|
)
|
|
4512
4475
|
]
|
|
4513
4476
|
}
|
|
4514
4477
|
),
|
|
4515
|
-
mounted && /* @__PURE__ */ (0,
|
|
4478
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
|
|
4516
4479
|
"div",
|
|
4517
4480
|
{
|
|
4518
4481
|
className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
|
|
4519
4482
|
ref: contentRef,
|
|
4520
4483
|
style: { ...position.position, width: triggerRef.current?.offsetWidth },
|
|
4521
4484
|
role: "listbox",
|
|
4522
|
-
children: /* @__PURE__ */ (0,
|
|
4485
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
4523
4486
|
}
|
|
4524
4487
|
) })
|
|
4525
4488
|
]
|
|
@@ -4533,7 +4496,7 @@ var Select = Object.assign(SelectRoot, {
|
|
|
4533
4496
|
var Select_default = Select;
|
|
4534
4497
|
|
|
4535
4498
|
// src/components/Skeleton/Skeleton.tsx
|
|
4536
|
-
var
|
|
4499
|
+
var import_jsx_runtime334 = require("react/jsx-runtime");
|
|
4537
4500
|
var SIZE_MAP = {
|
|
4538
4501
|
xs: "var(--spacing-size-1)",
|
|
4539
4502
|
sm: "var(--spacing-size-2)",
|
|
@@ -4549,7 +4512,7 @@ var Skeleton = (props) => {
|
|
|
4549
4512
|
...width != null && { width: SIZE_MAP[width] },
|
|
4550
4513
|
...height != null && { height: SIZE_MAP[height] }
|
|
4551
4514
|
};
|
|
4552
|
-
return /* @__PURE__ */ (0,
|
|
4515
|
+
return /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
4553
4516
|
"div",
|
|
4554
4517
|
{
|
|
4555
4518
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -4562,20 +4525,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
4562
4525
|
var Skeleton_default = Skeleton;
|
|
4563
4526
|
|
|
4564
4527
|
// src/components/Spinner/Spinner.tsx
|
|
4565
|
-
var
|
|
4528
|
+
var import_jsx_runtime335 = require("react/jsx-runtime");
|
|
4566
4529
|
var Spinner = (props) => {
|
|
4567
4530
|
const {
|
|
4568
4531
|
size = "md",
|
|
4569
4532
|
type = "brand"
|
|
4570
4533
|
} = props;
|
|
4571
|
-
return /* @__PURE__ */ (0,
|
|
4534
|
+
return /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
|
|
4572
4535
|
"div",
|
|
4573
4536
|
{
|
|
4574
4537
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
4575
4538
|
role: "status",
|
|
4576
4539
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
4577
|
-
children: /* @__PURE__ */ (0,
|
|
4578
|
-
/* @__PURE__ */ (0,
|
|
4540
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime335.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
4541
|
+
/* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
|
|
4579
4542
|
"circle",
|
|
4580
4543
|
{
|
|
4581
4544
|
className: "track",
|
|
@@ -4585,7 +4548,7 @@ var Spinner = (props) => {
|
|
|
4585
4548
|
strokeWidth: "3"
|
|
4586
4549
|
}
|
|
4587
4550
|
),
|
|
4588
|
-
/* @__PURE__ */ (0,
|
|
4551
|
+
/* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
|
|
4589
4552
|
"circle",
|
|
4590
4553
|
{
|
|
4591
4554
|
className: "indicator",
|
|
@@ -4604,20 +4567,20 @@ Spinner.displayName = "Spinner";
|
|
|
4604
4567
|
var Spinner_default = Spinner;
|
|
4605
4568
|
|
|
4606
4569
|
// src/components/Steps/Steps.tsx
|
|
4607
|
-
var
|
|
4570
|
+
var import_jsx_runtime336 = require("react/jsx-runtime");
|
|
4608
4571
|
var Steps = (props) => {
|
|
4609
4572
|
const {
|
|
4610
4573
|
items,
|
|
4611
4574
|
current,
|
|
4612
4575
|
type = "brand"
|
|
4613
4576
|
} = props;
|
|
4614
|
-
return /* @__PURE__ */ (0,
|
|
4577
|
+
return /* @__PURE__ */ (0, import_jsx_runtime336.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
4615
4578
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
4616
|
-
return /* @__PURE__ */ (0,
|
|
4617
|
-
/* @__PURE__ */ (0,
|
|
4618
|
-
/* @__PURE__ */ (0,
|
|
4619
|
-
/* @__PURE__ */ (0,
|
|
4620
|
-
item.description && /* @__PURE__ */ (0,
|
|
4579
|
+
return /* @__PURE__ */ (0, import_jsx_runtime336.jsxs)("div", { className: clsx_default("step-item", status), children: [
|
|
4580
|
+
/* @__PURE__ */ (0, import_jsx_runtime336.jsx)("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(CheckIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime336.jsx)("span", { children: index + 1 }) }),
|
|
4581
|
+
/* @__PURE__ */ (0, import_jsx_runtime336.jsxs)("div", { className: "step-content", children: [
|
|
4582
|
+
/* @__PURE__ */ (0, import_jsx_runtime336.jsx)("span", { className: "step-title", children: item.title }),
|
|
4583
|
+
item.description && /* @__PURE__ */ (0, import_jsx_runtime336.jsx)("span", { className: "step-description", children: item.description })
|
|
4621
4584
|
] })
|
|
4622
4585
|
] }, index);
|
|
4623
4586
|
}) });
|
|
@@ -4626,8 +4589,8 @@ Steps.displayName = "Steps";
|
|
|
4626
4589
|
var Steps_default = Steps;
|
|
4627
4590
|
|
|
4628
4591
|
// src/components/Swiper/Swiper.tsx
|
|
4629
|
-
var
|
|
4630
|
-
var
|
|
4592
|
+
var import_react31 = __toESM(require("react"), 1);
|
|
4593
|
+
var import_jsx_runtime337 = require("react/jsx-runtime");
|
|
4631
4594
|
var Swiper = (props) => {
|
|
4632
4595
|
const {
|
|
4633
4596
|
auto = false,
|
|
@@ -4650,23 +4613,23 @@ var Swiper = (props) => {
|
|
|
4650
4613
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
4651
4614
|
const useLoop = loop && canSlide;
|
|
4652
4615
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
4653
|
-
const extendedItems =
|
|
4616
|
+
const extendedItems = import_react31.default.useMemo(() => {
|
|
4654
4617
|
if (!useLoop) return items;
|
|
4655
4618
|
return [...items, ...items, ...items];
|
|
4656
4619
|
}, [items, useLoop]);
|
|
4657
4620
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
4658
|
-
const [innerIndex, setInnerIndex] =
|
|
4621
|
+
const [innerIndex, setInnerIndex] = import_react31.default.useState(
|
|
4659
4622
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
4660
4623
|
);
|
|
4661
|
-
const [isDragging, setIsDragging] =
|
|
4662
|
-
const [dragOffset, setDragOffset] =
|
|
4663
|
-
const [animated, setAnimated] =
|
|
4664
|
-
const [containerWidth, setContainerWidth] =
|
|
4665
|
-
const containerRef =
|
|
4666
|
-
const startXRef =
|
|
4667
|
-
const startTimeRef =
|
|
4668
|
-
const autoplayTimerRef =
|
|
4669
|
-
|
|
4624
|
+
const [isDragging, setIsDragging] = import_react31.default.useState(false);
|
|
4625
|
+
const [dragOffset, setDragOffset] = import_react31.default.useState(0);
|
|
4626
|
+
const [animated, setAnimated] = import_react31.default.useState(true);
|
|
4627
|
+
const [containerWidth, setContainerWidth] = import_react31.default.useState(0);
|
|
4628
|
+
const containerRef = import_react31.default.useRef(null);
|
|
4629
|
+
const startXRef = import_react31.default.useRef(0);
|
|
4630
|
+
const startTimeRef = import_react31.default.useRef(0);
|
|
4631
|
+
const autoplayTimerRef = import_react31.default.useRef(null);
|
|
4632
|
+
import_react31.default.useEffect(() => {
|
|
4670
4633
|
const el = containerRef.current;
|
|
4671
4634
|
if (!el) return;
|
|
4672
4635
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -4685,7 +4648,7 @@ var Swiper = (props) => {
|
|
|
4685
4648
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
4686
4649
|
};
|
|
4687
4650
|
const realIndex = getRealIndex(innerIndex);
|
|
4688
|
-
const moveToInner =
|
|
4651
|
+
const moveToInner = import_react31.default.useCallback(
|
|
4689
4652
|
(idx, withAnim = true) => {
|
|
4690
4653
|
if (!useLoop) {
|
|
4691
4654
|
setAnimated(withAnim);
|
|
@@ -4713,7 +4676,7 @@ var Swiper = (props) => {
|
|
|
4713
4676
|
},
|
|
4714
4677
|
[useLoop, cloneCount, totalSlides]
|
|
4715
4678
|
);
|
|
4716
|
-
const handleTransitionEnd =
|
|
4679
|
+
const handleTransitionEnd = import_react31.default.useCallback(() => {
|
|
4717
4680
|
if (!useLoop) return;
|
|
4718
4681
|
const real = getRealIndex(innerIndex);
|
|
4719
4682
|
const canonical = cloneCount + real;
|
|
@@ -4723,7 +4686,7 @@ var Swiper = (props) => {
|
|
|
4723
4686
|
}
|
|
4724
4687
|
onChange?.(Math.min(real, maxIndex));
|
|
4725
4688
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
4726
|
-
const slideTo =
|
|
4689
|
+
const slideTo = import_react31.default.useCallback(
|
|
4727
4690
|
(logicalIndex) => {
|
|
4728
4691
|
if (!canSlide) return;
|
|
4729
4692
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -4733,7 +4696,7 @@ var Swiper = (props) => {
|
|
|
4733
4696
|
},
|
|
4734
4697
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
4735
4698
|
);
|
|
4736
|
-
const slideNext =
|
|
4699
|
+
const slideNext = import_react31.default.useCallback(() => {
|
|
4737
4700
|
if (!canSlide) return;
|
|
4738
4701
|
const nextInner = innerIndex + slideBy;
|
|
4739
4702
|
if (useLoop) {
|
|
@@ -4742,7 +4705,7 @@ var Swiper = (props) => {
|
|
|
4742
4705
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
4743
4706
|
}
|
|
4744
4707
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
4745
|
-
const slidePrev =
|
|
4708
|
+
const slidePrev = import_react31.default.useCallback(() => {
|
|
4746
4709
|
if (!canSlide) return;
|
|
4747
4710
|
const prevInner = innerIndex - slideBy;
|
|
4748
4711
|
if (useLoop) {
|
|
@@ -4751,7 +4714,7 @@ var Swiper = (props) => {
|
|
|
4751
4714
|
moveToInner(Math.max(prevInner, 0), true);
|
|
4752
4715
|
}
|
|
4753
4716
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
4754
|
-
|
|
4717
|
+
import_react31.default.useEffect(() => {
|
|
4755
4718
|
if (indexProp === void 0) return;
|
|
4756
4719
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
4757
4720
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -4759,12 +4722,12 @@ var Swiper = (props) => {
|
|
|
4759
4722
|
moveToInner(target, true);
|
|
4760
4723
|
}
|
|
4761
4724
|
}, [indexProp]);
|
|
4762
|
-
|
|
4725
|
+
import_react31.default.useImperativeHandle(swiperRef, () => ({
|
|
4763
4726
|
slidePrev,
|
|
4764
4727
|
slideNext,
|
|
4765
4728
|
slideTo
|
|
4766
4729
|
}));
|
|
4767
|
-
|
|
4730
|
+
import_react31.default.useEffect(() => {
|
|
4768
4731
|
if (!auto || !canSlide) return;
|
|
4769
4732
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
4770
4733
|
return () => {
|
|
@@ -4787,7 +4750,7 @@ var Swiper = (props) => {
|
|
|
4787
4750
|
startXRef.current = getClientX(e);
|
|
4788
4751
|
startTimeRef.current = Date.now();
|
|
4789
4752
|
};
|
|
4790
|
-
|
|
4753
|
+
import_react31.default.useEffect(() => {
|
|
4791
4754
|
if (!isDragging) return;
|
|
4792
4755
|
const handleMove = (e) => {
|
|
4793
4756
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -4825,8 +4788,8 @@ var Swiper = (props) => {
|
|
|
4825
4788
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
4826
4789
|
const slideWidthPercent = 100 / viewItemCount;
|
|
4827
4790
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
4828
|
-
const slideElements =
|
|
4829
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0,
|
|
4791
|
+
const slideElements = import_react31.default.useMemo(
|
|
4792
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
|
|
4830
4793
|
"div",
|
|
4831
4794
|
{
|
|
4832
4795
|
className: "lib-xplat-swiper__slide",
|
|
@@ -4845,14 +4808,14 @@ var Swiper = (props) => {
|
|
|
4845
4808
|
Math.floor(realIndex / slideBy),
|
|
4846
4809
|
totalSteps - 1
|
|
4847
4810
|
);
|
|
4848
|
-
return /* @__PURE__ */ (0,
|
|
4849
|
-
/* @__PURE__ */ (0,
|
|
4811
|
+
return /* @__PURE__ */ (0, import_jsx_runtime337.jsxs)("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
4812
|
+
/* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
|
|
4850
4813
|
"div",
|
|
4851
4814
|
{
|
|
4852
4815
|
className: "lib-xplat-swiper__viewport",
|
|
4853
4816
|
onMouseDown: handleDragStart,
|
|
4854
4817
|
onTouchStart: handleDragStart,
|
|
4855
|
-
children: /* @__PURE__ */ (0,
|
|
4818
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
|
|
4856
4819
|
"div",
|
|
4857
4820
|
{
|
|
4858
4821
|
className: clsx_default(
|
|
@@ -4870,7 +4833,7 @@ var Swiper = (props) => {
|
|
|
4870
4833
|
)
|
|
4871
4834
|
}
|
|
4872
4835
|
),
|
|
4873
|
-
showProgress && canSlide && /* @__PURE__ */ (0,
|
|
4836
|
+
showProgress && canSlide && /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
|
|
4874
4837
|
"span",
|
|
4875
4838
|
{
|
|
4876
4839
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -4880,7 +4843,7 @@ var Swiper = (props) => {
|
|
|
4880
4843
|
}
|
|
4881
4844
|
}
|
|
4882
4845
|
) }) }),
|
|
4883
|
-
canSlide && /* @__PURE__ */ (0,
|
|
4846
|
+
canSlide && /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
|
|
4884
4847
|
"button",
|
|
4885
4848
|
{
|
|
4886
4849
|
className: clsx_default(
|
|
@@ -4898,8 +4861,8 @@ Swiper.displayName = "Swiper";
|
|
|
4898
4861
|
var Swiper_default = Swiper;
|
|
4899
4862
|
|
|
4900
4863
|
// src/components/Switch/Switch.tsx
|
|
4901
|
-
var
|
|
4902
|
-
var
|
|
4864
|
+
var import_react32 = __toESM(require("react"), 1);
|
|
4865
|
+
var import_jsx_runtime338 = require("react/jsx-runtime");
|
|
4903
4866
|
var KNOB_TRANSITION_MS = 250;
|
|
4904
4867
|
var Switch = (props) => {
|
|
4905
4868
|
const {
|
|
@@ -4909,9 +4872,9 @@ var Switch = (props) => {
|
|
|
4909
4872
|
disabled,
|
|
4910
4873
|
onChange
|
|
4911
4874
|
} = props;
|
|
4912
|
-
const [isAnimating, setIsAnimating] =
|
|
4913
|
-
const timeoutRef =
|
|
4914
|
-
|
|
4875
|
+
const [isAnimating, setIsAnimating] = import_react32.default.useState(false);
|
|
4876
|
+
const timeoutRef = import_react32.default.useRef(null);
|
|
4877
|
+
import_react32.default.useEffect(() => {
|
|
4915
4878
|
return () => {
|
|
4916
4879
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
4917
4880
|
};
|
|
@@ -4926,7 +4889,7 @@ var Switch = (props) => {
|
|
|
4926
4889
|
timeoutRef.current = null;
|
|
4927
4890
|
}, KNOB_TRANSITION_MS);
|
|
4928
4891
|
};
|
|
4929
|
-
return /* @__PURE__ */ (0,
|
|
4892
|
+
return /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
4930
4893
|
"div",
|
|
4931
4894
|
{
|
|
4932
4895
|
className: clsx_default(
|
|
@@ -4939,7 +4902,7 @@ var Switch = (props) => {
|
|
|
4939
4902
|
),
|
|
4940
4903
|
onClick: handleClick,
|
|
4941
4904
|
"aria-disabled": disabled || isAnimating,
|
|
4942
|
-
children: /* @__PURE__ */ (0,
|
|
4905
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
4943
4906
|
}
|
|
4944
4907
|
);
|
|
4945
4908
|
};
|
|
@@ -4947,17 +4910,17 @@ Switch.displayName = "Switch";
|
|
|
4947
4910
|
var Switch_default = Switch;
|
|
4948
4911
|
|
|
4949
4912
|
// src/components/Table/TableContext.tsx
|
|
4950
|
-
var
|
|
4951
|
-
var TableContext =
|
|
4913
|
+
var import_react33 = __toESM(require("react"), 1);
|
|
4914
|
+
var TableContext = import_react33.default.createContext(null);
|
|
4952
4915
|
var useTableContext = () => {
|
|
4953
|
-
const ctx =
|
|
4916
|
+
const ctx = import_react33.default.useContext(TableContext);
|
|
4954
4917
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
4955
4918
|
return ctx;
|
|
4956
4919
|
};
|
|
4957
4920
|
var TableContext_default = TableContext;
|
|
4958
4921
|
|
|
4959
4922
|
// src/components/Table/Table.tsx
|
|
4960
|
-
var
|
|
4923
|
+
var import_jsx_runtime339 = require("react/jsx-runtime");
|
|
4961
4924
|
var Table = (props) => {
|
|
4962
4925
|
const {
|
|
4963
4926
|
children,
|
|
@@ -4967,7 +4930,7 @@ var Table = (props) => {
|
|
|
4967
4930
|
headerSticky = false,
|
|
4968
4931
|
stickyShadow = true
|
|
4969
4932
|
} = props;
|
|
4970
|
-
return /* @__PURE__ */ (0,
|
|
4933
|
+
return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)("div", { className: `lib-xplat-table-wrapper ${size}`, children: /* @__PURE__ */ (0, import_jsx_runtime339.jsx)(
|
|
4971
4934
|
TableContext_default.Provider,
|
|
4972
4935
|
{
|
|
4973
4936
|
value: {
|
|
@@ -4976,7 +4939,7 @@ var Table = (props) => {
|
|
|
4976
4939
|
headerSticky,
|
|
4977
4940
|
stickyShadow
|
|
4978
4941
|
},
|
|
4979
|
-
children: /* @__PURE__ */ (0,
|
|
4942
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime339.jsx)("table", { className: "lib-xplat-table", children })
|
|
4980
4943
|
}
|
|
4981
4944
|
) });
|
|
4982
4945
|
};
|
|
@@ -4984,41 +4947,41 @@ Table.displayName = "Table";
|
|
|
4984
4947
|
var Table_default = Table;
|
|
4985
4948
|
|
|
4986
4949
|
// src/components/Table/TableBody.tsx
|
|
4987
|
-
var
|
|
4950
|
+
var import_jsx_runtime340 = require("react/jsx-runtime");
|
|
4988
4951
|
var TableBody = (props) => {
|
|
4989
4952
|
const { children } = props;
|
|
4990
|
-
return /* @__PURE__ */ (0,
|
|
4953
|
+
return /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("tbody", { children });
|
|
4991
4954
|
};
|
|
4992
4955
|
TableBody.displayName = "TableBody";
|
|
4993
4956
|
var TableBody_default = TableBody;
|
|
4994
4957
|
|
|
4995
4958
|
// src/components/Table/TableCell.tsx
|
|
4996
|
-
var
|
|
4959
|
+
var import_react36 = __toESM(require("react"), 1);
|
|
4997
4960
|
|
|
4998
4961
|
// src/components/Table/TableHeadContext.tsx
|
|
4999
|
-
var
|
|
5000
|
-
var TableHeadContext =
|
|
4962
|
+
var import_react34 = __toESM(require("react"), 1);
|
|
4963
|
+
var TableHeadContext = import_react34.default.createContext(
|
|
5001
4964
|
null
|
|
5002
4965
|
);
|
|
5003
4966
|
var useTableHeadContext = () => {
|
|
5004
|
-
const ctx =
|
|
4967
|
+
const ctx = import_react34.default.useContext(TableHeadContext);
|
|
5005
4968
|
return ctx;
|
|
5006
4969
|
};
|
|
5007
4970
|
var TableHeadContext_default = TableHeadContext;
|
|
5008
4971
|
|
|
5009
4972
|
// src/components/Table/TableRowContext.tsx
|
|
5010
|
-
var
|
|
5011
|
-
var TableRowContext =
|
|
4973
|
+
var import_react35 = __toESM(require("react"), 1);
|
|
4974
|
+
var TableRowContext = import_react35.default.createContext(null);
|
|
5012
4975
|
var useTableRowContext = () => {
|
|
5013
|
-
const ctx =
|
|
4976
|
+
const ctx = import_react35.default.useContext(TableRowContext);
|
|
5014
4977
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
5015
4978
|
return ctx;
|
|
5016
4979
|
};
|
|
5017
4980
|
var TableRowContext_default = TableRowContext;
|
|
5018
4981
|
|
|
5019
4982
|
// src/components/Table/TableCell.tsx
|
|
5020
|
-
var
|
|
5021
|
-
var TableCell =
|
|
4983
|
+
var import_jsx_runtime341 = require("react/jsx-runtime");
|
|
4984
|
+
var TableCell = import_react36.default.memo((props) => {
|
|
5022
4985
|
const {
|
|
5023
4986
|
children,
|
|
5024
4987
|
align = "center",
|
|
@@ -5030,9 +4993,9 @@ var TableCell = import_react37.default.memo((props) => {
|
|
|
5030
4993
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
5031
4994
|
const { stickyShadow } = useTableContext();
|
|
5032
4995
|
const headContext = useTableHeadContext();
|
|
5033
|
-
const [left, setLeft] =
|
|
5034
|
-
const cellRef =
|
|
5035
|
-
const calculateLeft =
|
|
4996
|
+
const [left, setLeft] = import_react36.default.useState(0);
|
|
4997
|
+
const cellRef = import_react36.default.useRef(null);
|
|
4998
|
+
const calculateLeft = import_react36.default.useCallback(() => {
|
|
5036
4999
|
if (!cellRef.current) return 0;
|
|
5037
5000
|
let totalLeft = 0;
|
|
5038
5001
|
for (const ref of stickyCells) {
|
|
@@ -5041,7 +5004,7 @@ var TableCell = import_react37.default.memo((props) => {
|
|
|
5041
5004
|
}
|
|
5042
5005
|
return totalLeft;
|
|
5043
5006
|
}, [stickyCells]);
|
|
5044
|
-
|
|
5007
|
+
import_react36.default.useEffect(() => {
|
|
5045
5008
|
if (!isSticky || !cellRef.current) return;
|
|
5046
5009
|
registerStickyCell(cellRef);
|
|
5047
5010
|
setLeft(calculateLeft());
|
|
@@ -5059,7 +5022,7 @@ var TableCell = import_react37.default.memo((props) => {
|
|
|
5059
5022
|
const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
|
|
5060
5023
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
5061
5024
|
const enableHover = headContext && headContext.cellHover;
|
|
5062
|
-
return /* @__PURE__ */ (0,
|
|
5025
|
+
return /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
|
|
5063
5026
|
CellTag,
|
|
5064
5027
|
{
|
|
5065
5028
|
ref: cellRef,
|
|
@@ -5084,21 +5047,21 @@ TableCell.displayName = "TableCell";
|
|
|
5084
5047
|
var TableCell_default = TableCell;
|
|
5085
5048
|
|
|
5086
5049
|
// src/components/Table/TableHead.tsx
|
|
5087
|
-
var
|
|
5050
|
+
var import_jsx_runtime342 = require("react/jsx-runtime");
|
|
5088
5051
|
var TableHead = ({
|
|
5089
5052
|
children,
|
|
5090
5053
|
cellHover = false
|
|
5091
5054
|
}) => {
|
|
5092
5055
|
const { headerSticky } = useTableContext();
|
|
5093
|
-
return /* @__PURE__ */ (0,
|
|
5056
|
+
return /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
|
|
5094
5057
|
};
|
|
5095
5058
|
TableHead.displayName = "TableHead";
|
|
5096
5059
|
var TableHead_default = TableHead;
|
|
5097
5060
|
|
|
5098
5061
|
// src/components/Table/TableRow.tsx
|
|
5099
|
-
var
|
|
5100
|
-
var
|
|
5101
|
-
var TableRow =
|
|
5062
|
+
var import_react37 = __toESM(require("react"), 1);
|
|
5063
|
+
var import_jsx_runtime343 = require("react/jsx-runtime");
|
|
5064
|
+
var TableRow = import_react37.default.memo((props) => {
|
|
5102
5065
|
const {
|
|
5103
5066
|
children,
|
|
5104
5067
|
type = "secondary",
|
|
@@ -5106,14 +5069,14 @@ var TableRow = import_react38.default.memo((props) => {
|
|
|
5106
5069
|
onClick
|
|
5107
5070
|
} = props;
|
|
5108
5071
|
const { rowBorderUse } = useTableContext();
|
|
5109
|
-
const [stickyCells, setStickyCells] =
|
|
5072
|
+
const [stickyCells, setStickyCells] = import_react37.default.useState([]);
|
|
5110
5073
|
const registerStickyCell = (ref) => {
|
|
5111
5074
|
setStickyCells((prev) => {
|
|
5112
5075
|
if (prev.includes(ref)) return prev;
|
|
5113
5076
|
return [...prev, ref];
|
|
5114
5077
|
});
|
|
5115
5078
|
};
|
|
5116
|
-
return /* @__PURE__ */ (0,
|
|
5079
|
+
return /* @__PURE__ */ (0, import_jsx_runtime343.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)(
|
|
5117
5080
|
"tr",
|
|
5118
5081
|
{
|
|
5119
5082
|
className: clsx_default(
|
|
@@ -5131,7 +5094,7 @@ TableRow.displayName = "TableRow";
|
|
|
5131
5094
|
var TableRow_default = TableRow;
|
|
5132
5095
|
|
|
5133
5096
|
// src/components/Tag/Tag.tsx
|
|
5134
|
-
var
|
|
5097
|
+
var import_jsx_runtime344 = require("react/jsx-runtime");
|
|
5135
5098
|
var Tag = (props) => {
|
|
5136
5099
|
const {
|
|
5137
5100
|
children,
|
|
@@ -5141,7 +5104,7 @@ var Tag = (props) => {
|
|
|
5141
5104
|
disabled = false,
|
|
5142
5105
|
colorIndex
|
|
5143
5106
|
} = props;
|
|
5144
|
-
return /* @__PURE__ */ (0,
|
|
5107
|
+
return /* @__PURE__ */ (0, import_jsx_runtime344.jsxs)(
|
|
5145
5108
|
"span",
|
|
5146
5109
|
{
|
|
5147
5110
|
className: clsx_default(
|
|
@@ -5152,8 +5115,8 @@ var Tag = (props) => {
|
|
|
5152
5115
|
disabled && "disabled"
|
|
5153
5116
|
),
|
|
5154
5117
|
children: [
|
|
5155
|
-
/* @__PURE__ */ (0,
|
|
5156
|
-
onClose && /* @__PURE__ */ (0,
|
|
5118
|
+
/* @__PURE__ */ (0, import_jsx_runtime344.jsx)("span", { className: "tag-label", children }),
|
|
5119
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(XIcon_default, {}) })
|
|
5157
5120
|
]
|
|
5158
5121
|
}
|
|
5159
5122
|
);
|
|
@@ -5161,6 +5124,63 @@ var Tag = (props) => {
|
|
|
5161
5124
|
Tag.displayName = "Tag";
|
|
5162
5125
|
var Tag_default = Tag;
|
|
5163
5126
|
|
|
5127
|
+
// src/components/TextArea/TextArea.tsx
|
|
5128
|
+
var import_react38 = __toESM(require("react"), 1);
|
|
5129
|
+
var import_jsx_runtime345 = require("react/jsx-runtime");
|
|
5130
|
+
var TextArea = import_react38.default.forwardRef(
|
|
5131
|
+
(props, ref) => {
|
|
5132
|
+
const { value, onChange, disabled, ...textareaProps } = props;
|
|
5133
|
+
const localRef = import_react38.default.useRef(null);
|
|
5134
|
+
const setRefs = (el) => {
|
|
5135
|
+
localRef.current = el;
|
|
5136
|
+
if (!ref) return;
|
|
5137
|
+
if (typeof ref === "function") {
|
|
5138
|
+
ref(el);
|
|
5139
|
+
} else if (ref && typeof ref === "object" && "current" in ref) {
|
|
5140
|
+
ref.current = el;
|
|
5141
|
+
}
|
|
5142
|
+
};
|
|
5143
|
+
const handleOnChange = (e) => {
|
|
5144
|
+
const val = e.target.value;
|
|
5145
|
+
if (onChange) {
|
|
5146
|
+
const event = {
|
|
5147
|
+
...e,
|
|
5148
|
+
target: { value: val }
|
|
5149
|
+
};
|
|
5150
|
+
onChange(event);
|
|
5151
|
+
}
|
|
5152
|
+
};
|
|
5153
|
+
import_react38.default.useEffect(() => {
|
|
5154
|
+
const el = localRef.current;
|
|
5155
|
+
if (!el) return;
|
|
5156
|
+
el.style.height = "0px";
|
|
5157
|
+
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
5158
|
+
el.style.height = `${nextHeight}px`;
|
|
5159
|
+
}, [value]);
|
|
5160
|
+
return /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime345.jsx)(
|
|
5161
|
+
"div",
|
|
5162
|
+
{
|
|
5163
|
+
className: clsx_default(
|
|
5164
|
+
"lib-xplat-textarea",
|
|
5165
|
+
disabled ? "disabled" : void 0
|
|
5166
|
+
),
|
|
5167
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime345.jsx)(
|
|
5168
|
+
"textarea",
|
|
5169
|
+
{
|
|
5170
|
+
...textareaProps,
|
|
5171
|
+
ref: setRefs,
|
|
5172
|
+
disabled,
|
|
5173
|
+
value,
|
|
5174
|
+
onChange: handleOnChange
|
|
5175
|
+
}
|
|
5176
|
+
)
|
|
5177
|
+
}
|
|
5178
|
+
) });
|
|
5179
|
+
}
|
|
5180
|
+
);
|
|
5181
|
+
TextArea.displayName = "TextArea";
|
|
5182
|
+
var TextArea_default = TextArea;
|
|
5183
|
+
|
|
5164
5184
|
// src/components/Toast/Toast.tsx
|
|
5165
5185
|
var import_react39 = __toESM(require("react"), 1);
|
|
5166
5186
|
var import_react_dom4 = require("react-dom");
|