@x-plat/design-system 0.5.21 → 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 +177 -0
- package/dist/components/ChatInput/index.css +87 -0
- package/dist/components/ChatInput/index.d.cts +14 -0
- package/dist/components/ChatInput/index.d.ts +14 -0
- package/dist/components/ChatInput/index.js +140 -0
- package/dist/components/Table/index.cjs +2 -1
- package/dist/components/Table/index.css +117 -0
- package/dist/components/Table/index.d.cts +3 -1
- package/dist/components/Table/index.d.ts +3 -1
- package/dist/components/Table/index.js +2 -1
- package/dist/components/index.cjs +625 -523
- package/dist/components/index.css +205 -0
- package/dist/components/index.d.cts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +623 -522
- package/dist/index.cjs +634 -547
- package/dist/index.css +205 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +632 -546
- package/package.json +1 -1
package/dist/components/index.js
CHANGED
|
@@ -387,6 +387,21 @@ import { jsx as jsx88 } from "react/jsx-runtime";
|
|
|
387
387
|
|
|
388
388
|
// src/tokens/svg/communication/SendIcon.tsx
|
|
389
389
|
import { jsx as jsx89, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
390
|
+
var SendIcon = () => /* @__PURE__ */ jsxs47(
|
|
391
|
+
"svg",
|
|
392
|
+
{
|
|
393
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
394
|
+
width: "1em",
|
|
395
|
+
height: "1em",
|
|
396
|
+
viewBox: "0 0 20 20",
|
|
397
|
+
fill: "none",
|
|
398
|
+
children: [
|
|
399
|
+
/* @__PURE__ */ jsx89("g", { clipPath: "url(#send-clip)", children: /* @__PURE__ */ jsx89("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M18.3558 0.918873C18.3887 0.919879 18.4212 0.9224 18.4535 0.927663C18.4642 0.929393 18.4751 0.930348 18.4857 0.932545C18.527 0.941123 18.5675 0.953269 18.6068 0.968678C18.6178 0.972968 18.6282 0.978499 18.639 0.983327C18.6672 0.995914 18.6945 1.01021 18.7211 1.0263C18.7403 1.03794 18.7594 1.04988 18.7777 1.0634C18.7803 1.06534 18.7829 1.0673 18.7855 1.06926C18.8126 1.08979 18.839 1.11195 18.8637 1.13665C18.8872 1.16018 18.9084 1.18517 18.9281 1.21087C18.9322 1.21625 18.9359 1.22198 18.9398 1.22747C18.9501 1.24168 18.959 1.25667 18.9681 1.27141C18.9866 1.30108 19.0029 1.33154 19.017 1.36321C19.0214 1.37309 19.0267 1.38248 19.0306 1.39251C19.0461 1.43186 19.0581 1.47231 19.0668 1.5136C19.069 1.52426 19.0699 1.5351 19.0717 1.54583C19.077 1.57815 19.0794 1.61062 19.0805 1.64348C19.0808 1.65621 19.0817 1.66884 19.0814 1.68157C19.0799 1.75981 19.0681 1.83872 19.0414 1.91497L13.2074 18.581C13.1058 18.871 12.8377 19.0703 12.5306 19.0829C12.2237 19.0954 11.9398 18.9192 11.8148 18.6386L8.59706 11.4003L1.3617 8.18547C1.08085 8.06057 0.90492 7.77678 0.917368 7.46965C0.929915 7.16252 1.12827 6.89358 1.41834 6.79192L18.0853 0.958913C18.1613 0.932334 18.2398 0.919479 18.3178 0.917897C18.3305 0.91763 18.3431 0.918498 18.3558 0.918873ZM10.0609 10.999L12.4164 16.2997L16.5375 4.52239L10.0609 10.999ZM3.69862 7.58294L9.00038 9.93841L15.4808 3.45794L3.69862 7.58294Z", fill: "currentColor" }) }),
|
|
400
|
+
/* @__PURE__ */ jsx89("defs", { children: /* @__PURE__ */ jsx89("clipPath", { id: "send-clip", children: /* @__PURE__ */ jsx89("rect", { width: "20", height: "20", fill: "currentColor" }) }) })
|
|
401
|
+
]
|
|
402
|
+
}
|
|
403
|
+
);
|
|
404
|
+
var SendIcon_default = SendIcon;
|
|
390
405
|
|
|
391
406
|
// src/tokens/svg/date/CalendarIcon.tsx
|
|
392
407
|
import { jsx as jsx90 } from "react/jsx-runtime";
|
|
@@ -1933,30 +1948,114 @@ var Calendar = (props) => {
|
|
|
1933
1948
|
Calendar.displayName = "Calendar";
|
|
1934
1949
|
var Calendar_default = Calendar;
|
|
1935
1950
|
|
|
1936
|
-
// src/components/
|
|
1951
|
+
// src/components/ChatInput/ChatInput.tsx
|
|
1952
|
+
import React4 from "react";
|
|
1937
1953
|
import { jsx as jsx302, jsxs as jsxs194 } from "react/jsx-runtime";
|
|
1954
|
+
var MAX_HEIGHT = 200;
|
|
1955
|
+
var ChatInput = React4.forwardRef(
|
|
1956
|
+
(props, ref) => {
|
|
1957
|
+
const {
|
|
1958
|
+
placeholder,
|
|
1959
|
+
value: valueProp,
|
|
1960
|
+
disabled = false,
|
|
1961
|
+
buttonType = "primary",
|
|
1962
|
+
onSubmit,
|
|
1963
|
+
onChange
|
|
1964
|
+
} = props;
|
|
1965
|
+
const isControlled = valueProp !== void 0;
|
|
1966
|
+
const [internalValue, setInternalValue] = React4.useState("");
|
|
1967
|
+
const value = isControlled ? valueProp : internalValue;
|
|
1968
|
+
const hasText = value.trim().length > 0;
|
|
1969
|
+
const textareaRef = React4.useRef(null);
|
|
1970
|
+
const setRefs = React4.useCallback(
|
|
1971
|
+
(el) => {
|
|
1972
|
+
textareaRef.current = el;
|
|
1973
|
+
if (typeof ref === "function") ref(el);
|
|
1974
|
+
else if (ref) ref.current = el;
|
|
1975
|
+
},
|
|
1976
|
+
[ref]
|
|
1977
|
+
);
|
|
1978
|
+
const updateHeight = React4.useCallback(() => {
|
|
1979
|
+
const el = textareaRef.current;
|
|
1980
|
+
if (!el) return;
|
|
1981
|
+
el.style.height = "0px";
|
|
1982
|
+
el.style.height = `${Math.min(el.scrollHeight, MAX_HEIGHT)}px`;
|
|
1983
|
+
}, []);
|
|
1984
|
+
const handleChange = (e) => {
|
|
1985
|
+
const val = e.target.value;
|
|
1986
|
+
if (!isControlled) setInternalValue(val);
|
|
1987
|
+
onChange?.(val);
|
|
1988
|
+
};
|
|
1989
|
+
const handleSubmit = () => {
|
|
1990
|
+
if (!hasText || disabled) return;
|
|
1991
|
+
onSubmit?.(value);
|
|
1992
|
+
if (!isControlled) setInternalValue("");
|
|
1993
|
+
requestAnimationFrame(updateHeight);
|
|
1994
|
+
};
|
|
1995
|
+
const handleKeyDown = (e) => {
|
|
1996
|
+
if (e.key === "Enter" && !e.shiftKey) {
|
|
1997
|
+
e.preventDefault();
|
|
1998
|
+
handleSubmit();
|
|
1999
|
+
}
|
|
2000
|
+
};
|
|
2001
|
+
React4.useEffect(() => {
|
|
2002
|
+
updateHeight();
|
|
2003
|
+
}, [value, updateHeight]);
|
|
2004
|
+
return /* @__PURE__ */ jsxs194("div", { className: clsx_default("lib-xplat-chat-input", disabled && "disabled"), children: [
|
|
2005
|
+
/* @__PURE__ */ jsx302(
|
|
2006
|
+
"textarea",
|
|
2007
|
+
{
|
|
2008
|
+
ref: setRefs,
|
|
2009
|
+
className: "chat-input-textarea",
|
|
2010
|
+
placeholder,
|
|
2011
|
+
value,
|
|
2012
|
+
disabled,
|
|
2013
|
+
rows: 1,
|
|
2014
|
+
onChange: handleChange,
|
|
2015
|
+
onKeyDown: handleKeyDown
|
|
2016
|
+
}
|
|
2017
|
+
),
|
|
2018
|
+
/* @__PURE__ */ jsx302(
|
|
2019
|
+
"button",
|
|
2020
|
+
{
|
|
2021
|
+
type: "button",
|
|
2022
|
+
className: clsx_default("chat-input-send", `btn-${buttonType}`),
|
|
2023
|
+
disabled: !hasText || disabled,
|
|
2024
|
+
onClick: handleSubmit,
|
|
2025
|
+
"aria-label": "\uC804\uC1A1",
|
|
2026
|
+
children: /* @__PURE__ */ jsx302(SendIcon_default, {})
|
|
2027
|
+
}
|
|
2028
|
+
)
|
|
2029
|
+
] });
|
|
2030
|
+
}
|
|
2031
|
+
);
|
|
2032
|
+
ChatInput.displayName = "ChatInput";
|
|
2033
|
+
var ChatInput_default = ChatInput;
|
|
2034
|
+
|
|
2035
|
+
// src/components/Box/Box.tsx
|
|
2036
|
+
import { jsx as jsx303, jsxs as jsxs195 } from "react/jsx-runtime";
|
|
1938
2037
|
var Box = ({
|
|
1939
2038
|
children,
|
|
1940
2039
|
title,
|
|
1941
2040
|
variant = "outlined",
|
|
1942
2041
|
padding = "md"
|
|
1943
2042
|
}) => {
|
|
1944
|
-
return /* @__PURE__ */
|
|
1945
|
-
title && /* @__PURE__ */
|
|
1946
|
-
/* @__PURE__ */
|
|
2043
|
+
return /* @__PURE__ */ jsxs195("div", { className: clsx_default("lib-xplat-box", variant, `pad-${padding}`), children: [
|
|
2044
|
+
title && /* @__PURE__ */ jsx303("div", { className: "box-title", children: title }),
|
|
2045
|
+
/* @__PURE__ */ jsx303("div", { className: "box-content", children })
|
|
1947
2046
|
] });
|
|
1948
2047
|
};
|
|
1949
2048
|
Box.displayName = "Box";
|
|
1950
2049
|
var Box_default = Box;
|
|
1951
2050
|
|
|
1952
2051
|
// src/components/CardTab/CardTab.tsx
|
|
1953
|
-
import
|
|
2052
|
+
import React5 from "react";
|
|
1954
2053
|
|
|
1955
2054
|
// src/components/CardTab/CardTabPanel.tsx
|
|
1956
|
-
import { jsx as
|
|
2055
|
+
import { jsx as jsx304 } from "react/jsx-runtime";
|
|
1957
2056
|
var CardTabPanel = (props) => {
|
|
1958
2057
|
const { children, columns = 3 } = props;
|
|
1959
|
-
return /* @__PURE__ */
|
|
2058
|
+
return /* @__PURE__ */ jsx304(
|
|
1960
2059
|
"div",
|
|
1961
2060
|
{
|
|
1962
2061
|
className: "card-tab-panel",
|
|
@@ -1969,7 +2068,7 @@ CardTabPanel.displayName = "CardTab.Panel";
|
|
|
1969
2068
|
var CardTabPanel_default = CardTabPanel;
|
|
1970
2069
|
|
|
1971
2070
|
// src/components/CardTab/CardTab.tsx
|
|
1972
|
-
import { jsx as
|
|
2071
|
+
import { jsx as jsx305, jsxs as jsxs196 } from "react/jsx-runtime";
|
|
1973
2072
|
var CardTabRoot = (props) => {
|
|
1974
2073
|
const {
|
|
1975
2074
|
tabs,
|
|
@@ -1979,7 +2078,7 @@ var CardTabRoot = (props) => {
|
|
|
1979
2078
|
children
|
|
1980
2079
|
} = props;
|
|
1981
2080
|
const isControlled = activeValueProp !== void 0;
|
|
1982
|
-
const [uncontrolledValue, setUncontrolledValue] =
|
|
2081
|
+
const [uncontrolledValue, setUncontrolledValue] = React5.useState(tabs[0]?.value ?? "");
|
|
1983
2082
|
const activeValue = isControlled ? activeValueProp : uncontrolledValue;
|
|
1984
2083
|
const handleTabClick = (tab) => {
|
|
1985
2084
|
if (!isControlled) {
|
|
@@ -1987,16 +2086,16 @@ var CardTabRoot = (props) => {
|
|
|
1987
2086
|
}
|
|
1988
2087
|
onChange?.(tab);
|
|
1989
2088
|
};
|
|
1990
|
-
const panels =
|
|
1991
|
-
(child) =>
|
|
2089
|
+
const panels = React5.Children.toArray(children).filter(
|
|
2090
|
+
(child) => React5.isValidElement(child) && child.type === CardTabPanel_default
|
|
1992
2091
|
);
|
|
1993
2092
|
const activePanel = panels.find(
|
|
1994
2093
|
(panel) => panel.props.value === activeValue
|
|
1995
2094
|
);
|
|
1996
|
-
return /* @__PURE__ */
|
|
1997
|
-
/* @__PURE__ */
|
|
2095
|
+
return /* @__PURE__ */ jsxs196("div", { className: clsx_default("lib-xplat-card-tab", size), children: [
|
|
2096
|
+
/* @__PURE__ */ jsx305("div", { className: "card-tab-bar", children: tabs.map((tab) => {
|
|
1998
2097
|
const isActive = tab.value === activeValue;
|
|
1999
|
-
return /* @__PURE__ */
|
|
2098
|
+
return /* @__PURE__ */ jsx305(
|
|
2000
2099
|
"button",
|
|
2001
2100
|
{
|
|
2002
2101
|
className: clsx_default("card-tab-trigger", isActive && "active"),
|
|
@@ -2008,7 +2107,7 @@ var CardTabRoot = (props) => {
|
|
|
2008
2107
|
tab.value
|
|
2009
2108
|
);
|
|
2010
2109
|
}) }),
|
|
2011
|
-
/* @__PURE__ */
|
|
2110
|
+
/* @__PURE__ */ jsx305("div", { className: "card-tab-body", children: activePanel })
|
|
2012
2111
|
] });
|
|
2013
2112
|
};
|
|
2014
2113
|
CardTabRoot.displayName = "CardTab";
|
|
@@ -2018,8 +2117,8 @@ var CardTab = Object.assign(CardTabRoot, {
|
|
|
2018
2117
|
var CardTab_default = CardTab;
|
|
2019
2118
|
|
|
2020
2119
|
// src/components/Chart/Chart.tsx
|
|
2021
|
-
import
|
|
2022
|
-
import { Fragment as Fragment2, jsx as
|
|
2120
|
+
import React6 from "react";
|
|
2121
|
+
import { Fragment as Fragment2, jsx as jsx306, jsxs as jsxs197 } from "react/jsx-runtime";
|
|
2023
2122
|
var CATEGORICAL_COUNT2 = 8;
|
|
2024
2123
|
var LINE_BAR_PALETTES = Array.from({ length: CATEGORICAL_COUNT2 }, (_, i) => {
|
|
2025
2124
|
const n = i + 1;
|
|
@@ -2065,11 +2164,11 @@ var toSmoothPath = (points) => {
|
|
|
2065
2164
|
};
|
|
2066
2165
|
var RESIZE_SETTLE_MS = 150;
|
|
2067
2166
|
var useChartSize = (ref) => {
|
|
2068
|
-
const [size, setSize] =
|
|
2069
|
-
const settleTimer =
|
|
2070
|
-
const committedSize =
|
|
2071
|
-
const initialRef =
|
|
2072
|
-
|
|
2167
|
+
const [size, setSize] = React6.useState({ width: 0, height: 0 });
|
|
2168
|
+
const settleTimer = React6.useRef(0);
|
|
2169
|
+
const committedSize = React6.useRef({ width: 0, height: 0 });
|
|
2170
|
+
const initialRef = React6.useRef(true);
|
|
2171
|
+
React6.useEffect(() => {
|
|
2073
2172
|
const el = ref.current;
|
|
2074
2173
|
if (!el) return;
|
|
2075
2174
|
const observer = new ResizeObserver((entries) => {
|
|
@@ -2111,10 +2210,10 @@ var useChartSize = (ref) => {
|
|
|
2111
2210
|
};
|
|
2112
2211
|
var prefersReducedMotion = () => typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
2113
2212
|
var useChartAnimation = (containerRef, dataKey) => {
|
|
2114
|
-
const [animate, setAnimate] =
|
|
2115
|
-
const prevDataKey =
|
|
2116
|
-
const hasAnimated =
|
|
2117
|
-
|
|
2213
|
+
const [animate, setAnimate] = React6.useState(false);
|
|
2214
|
+
const prevDataKey = React6.useRef(dataKey);
|
|
2215
|
+
const hasAnimated = React6.useRef(false);
|
|
2216
|
+
React6.useEffect(() => {
|
|
2118
2217
|
if (prefersReducedMotion()) return;
|
|
2119
2218
|
const el = containerRef.current;
|
|
2120
2219
|
if (!el) return;
|
|
@@ -2130,7 +2229,7 @@ var useChartAnimation = (containerRef, dataKey) => {
|
|
|
2130
2229
|
observer.observe(el);
|
|
2131
2230
|
return () => observer.disconnect();
|
|
2132
2231
|
}, [containerRef]);
|
|
2133
|
-
|
|
2232
|
+
React6.useEffect(() => {
|
|
2134
2233
|
if (dataKey !== prevDataKey.current) {
|
|
2135
2234
|
prevDataKey.current = dataKey;
|
|
2136
2235
|
if (prefersReducedMotion()) return;
|
|
@@ -2141,15 +2240,15 @@ var useChartAnimation = (containerRef, dataKey) => {
|
|
|
2141
2240
|
return animate || prefersReducedMotion();
|
|
2142
2241
|
};
|
|
2143
2242
|
var useChartTooltip = (enabled) => {
|
|
2144
|
-
const [tooltip, setTooltip] =
|
|
2243
|
+
const [tooltip, setTooltip] = React6.useState({
|
|
2145
2244
|
visible: false,
|
|
2146
2245
|
x: 0,
|
|
2147
2246
|
y: 0,
|
|
2148
2247
|
content: ""
|
|
2149
2248
|
});
|
|
2150
|
-
const containerRef =
|
|
2151
|
-
const rafRef =
|
|
2152
|
-
const move =
|
|
2249
|
+
const containerRef = React6.useRef(null);
|
|
2250
|
+
const rafRef = React6.useRef(0);
|
|
2251
|
+
const move = React6.useCallback((e) => {
|
|
2153
2252
|
if (!enabled) return;
|
|
2154
2253
|
const clientX = e.clientX;
|
|
2155
2254
|
const clientY = e.clientY;
|
|
@@ -2164,7 +2263,7 @@ var useChartTooltip = (enabled) => {
|
|
|
2164
2263
|
}));
|
|
2165
2264
|
});
|
|
2166
2265
|
}, [enabled]);
|
|
2167
|
-
const show =
|
|
2266
|
+
const show = React6.useCallback((e, content) => {
|
|
2168
2267
|
if (!enabled) return;
|
|
2169
2268
|
const rect = containerRef.current?.getBoundingClientRect();
|
|
2170
2269
|
if (!rect) return;
|
|
@@ -2175,18 +2274,18 @@ var useChartTooltip = (enabled) => {
|
|
|
2175
2274
|
content
|
|
2176
2275
|
});
|
|
2177
2276
|
}, [enabled]);
|
|
2178
|
-
const hide =
|
|
2277
|
+
const hide = React6.useCallback(() => {
|
|
2179
2278
|
cancelAnimationFrame(rafRef.current);
|
|
2180
2279
|
setTooltip((prev) => ({ ...prev, visible: false }));
|
|
2181
2280
|
}, []);
|
|
2182
2281
|
return { tooltip, show, hide, move, containerRef };
|
|
2183
2282
|
};
|
|
2184
|
-
var GridLines =
|
|
2283
|
+
var GridLines = React6.memo(({ width, height, chartH, maxVal }) => /* @__PURE__ */ jsx306(Fragment2, { children: [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
|
|
2185
2284
|
const y = PADDING.top + (1 - ratio) * chartH;
|
|
2186
2285
|
const val = Math.round(maxVal * ratio);
|
|
2187
|
-
return /* @__PURE__ */
|
|
2188
|
-
/* @__PURE__ */
|
|
2189
|
-
/* @__PURE__ */
|
|
2286
|
+
return /* @__PURE__ */ jsxs197("g", { children: [
|
|
2287
|
+
/* @__PURE__ */ jsx306("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
2288
|
+
/* @__PURE__ */ jsx306("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
2190
2289
|
] }, ratio);
|
|
2191
2290
|
}) }));
|
|
2192
2291
|
GridLines.displayName = "GridLines";
|
|
@@ -2196,25 +2295,25 @@ var getLabelStep = (count, chartW) => {
|
|
|
2196
2295
|
if (count <= maxLabels) return 1;
|
|
2197
2296
|
return Math.ceil(count / maxLabels);
|
|
2198
2297
|
};
|
|
2199
|
-
var AxisLabels =
|
|
2298
|
+
var AxisLabels = React6.memo(({ labels, count, chartW, height }) => {
|
|
2200
2299
|
const step = getLabelStep(count, chartW);
|
|
2201
|
-
return /* @__PURE__ */
|
|
2300
|
+
return /* @__PURE__ */ jsx306(Fragment2, { children: labels.map((label, i) => {
|
|
2202
2301
|
if (i % step !== 0) return null;
|
|
2203
2302
|
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
2204
|
-
return /* @__PURE__ */
|
|
2303
|
+
return /* @__PURE__ */ jsx306("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
2205
2304
|
}) });
|
|
2206
2305
|
});
|
|
2207
2306
|
AxisLabels.displayName = "AxisLabels";
|
|
2208
|
-
var LineChart =
|
|
2209
|
-
const entries =
|
|
2210
|
-
const maxVal =
|
|
2307
|
+
var LineChart = React6.memo(({ data, labels, width, height, animate, onHover, onMove, onLeave }) => {
|
|
2308
|
+
const entries = React6.useMemo(() => Object.entries(data), [data]);
|
|
2309
|
+
const maxVal = React6.useMemo(() => {
|
|
2211
2310
|
const allValues = entries.flatMap(([, v]) => v);
|
|
2212
2311
|
return Math.max(...allValues) * 1.2 || 1;
|
|
2213
2312
|
}, [entries]);
|
|
2214
2313
|
const count = labels.length;
|
|
2215
2314
|
const chartW = width - PADDING.left - PADDING.right;
|
|
2216
2315
|
const chartH = height - PADDING.top - PADDING.bottom;
|
|
2217
|
-
const seriesPoints =
|
|
2316
|
+
const seriesPoints = React6.useMemo(
|
|
2218
2317
|
() => entries.map(
|
|
2219
2318
|
([, values]) => values.map((v, i) => ({
|
|
2220
2319
|
x: PADDING.left + i / (count - 1 || 1) * chartW,
|
|
@@ -2225,8 +2324,8 @@ var LineChart = React5.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
2225
2324
|
[entries, count, chartW, chartH, maxVal]
|
|
2226
2325
|
);
|
|
2227
2326
|
const showPoints = count <= 100;
|
|
2228
|
-
const lineRefs =
|
|
2229
|
-
|
|
2327
|
+
const lineRefs = React6.useRef([]);
|
|
2328
|
+
React6.useEffect(() => {
|
|
2230
2329
|
if (!animate) return;
|
|
2231
2330
|
lineRefs.current.forEach((el) => {
|
|
2232
2331
|
if (!el) return;
|
|
@@ -2239,9 +2338,9 @@ var LineChart = React5.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
2239
2338
|
});
|
|
2240
2339
|
});
|
|
2241
2340
|
}, [animate, seriesPoints]);
|
|
2242
|
-
return /* @__PURE__ */
|
|
2243
|
-
/* @__PURE__ */
|
|
2244
|
-
/* @__PURE__ */
|
|
2341
|
+
return /* @__PURE__ */ jsxs197("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
2342
|
+
/* @__PURE__ */ jsx306(GridLines, { width, height, chartH, maxVal }),
|
|
2343
|
+
/* @__PURE__ */ jsx306(AxisLabels, { labels, count, chartW, height }),
|
|
2245
2344
|
entries.map(([key], di) => {
|
|
2246
2345
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
2247
2346
|
const color = palette[2];
|
|
@@ -2250,12 +2349,12 @@ var LineChart = React5.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
2250
2349
|
const gradientId = `line-gradient-${di}`;
|
|
2251
2350
|
const polyPoints = points.map((p) => `${p.x},${p.y}`).join(" ");
|
|
2252
2351
|
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`;
|
|
2253
|
-
return /* @__PURE__ */
|
|
2254
|
-
/* @__PURE__ */
|
|
2255
|
-
/* @__PURE__ */
|
|
2256
|
-
/* @__PURE__ */
|
|
2352
|
+
return /* @__PURE__ */ jsxs197("g", { children: [
|
|
2353
|
+
/* @__PURE__ */ jsx306("defs", { children: /* @__PURE__ */ jsxs197("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
2354
|
+
/* @__PURE__ */ jsx306("stop", { offset: "0%", stopColor: areaColor, stopOpacity: "0.2" }),
|
|
2355
|
+
/* @__PURE__ */ jsx306("stop", { offset: "100%", stopColor: areaColor, stopOpacity: "0" })
|
|
2257
2356
|
] }) }),
|
|
2258
|
-
/* @__PURE__ */
|
|
2357
|
+
/* @__PURE__ */ jsx306(
|
|
2259
2358
|
"path",
|
|
2260
2359
|
{
|
|
2261
2360
|
d: areaD,
|
|
@@ -2264,7 +2363,7 @@ var LineChart = React5.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
2264
2363
|
style: animate ? { animationDelay: "600ms" } : { opacity: 1 }
|
|
2265
2364
|
}
|
|
2266
2365
|
),
|
|
2267
|
-
/* @__PURE__ */
|
|
2366
|
+
/* @__PURE__ */ jsx306(
|
|
2268
2367
|
"polyline",
|
|
2269
2368
|
{
|
|
2270
2369
|
ref: (el) => {
|
|
@@ -2276,7 +2375,7 @@ var LineChart = React5.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
2276
2375
|
strokeWidth: "2"
|
|
2277
2376
|
}
|
|
2278
2377
|
),
|
|
2279
|
-
showPoints && points.map((p, i) => /* @__PURE__ */
|
|
2378
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ jsx306(
|
|
2280
2379
|
"circle",
|
|
2281
2380
|
{
|
|
2282
2381
|
cx: p.x,
|
|
@@ -2295,16 +2394,16 @@ var LineChart = React5.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
2295
2394
|
] });
|
|
2296
2395
|
});
|
|
2297
2396
|
LineChart.displayName = "LineChart";
|
|
2298
|
-
var CurveChart =
|
|
2299
|
-
const entries =
|
|
2300
|
-
const maxVal =
|
|
2397
|
+
var CurveChart = React6.memo(({ data, labels, width, height, animate, onHover, onMove, onLeave }) => {
|
|
2398
|
+
const entries = React6.useMemo(() => Object.entries(data), [data]);
|
|
2399
|
+
const maxVal = React6.useMemo(() => {
|
|
2301
2400
|
const allValues = entries.flatMap(([, v]) => v);
|
|
2302
2401
|
return Math.max(...allValues) * 1.2 || 1;
|
|
2303
2402
|
}, [entries]);
|
|
2304
2403
|
const count = labels.length;
|
|
2305
2404
|
const chartW = width - PADDING.left - PADDING.right;
|
|
2306
2405
|
const chartH = height - PADDING.top - PADDING.bottom;
|
|
2307
|
-
const seriesPoints =
|
|
2406
|
+
const seriesPoints = React6.useMemo(
|
|
2308
2407
|
() => entries.map(
|
|
2309
2408
|
([, values]) => values.map((v, i) => ({
|
|
2310
2409
|
x: PADDING.left + i / (count - 1 || 1) * chartW,
|
|
@@ -2315,8 +2414,8 @@ var CurveChart = React5.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
2315
2414
|
[entries, count, chartW, chartH, maxVal]
|
|
2316
2415
|
);
|
|
2317
2416
|
const showPoints = count <= 100;
|
|
2318
|
-
const lineRefs =
|
|
2319
|
-
|
|
2417
|
+
const lineRefs = React6.useRef([]);
|
|
2418
|
+
React6.useEffect(() => {
|
|
2320
2419
|
if (!animate) return;
|
|
2321
2420
|
lineRefs.current.forEach((el) => {
|
|
2322
2421
|
if (!el) return;
|
|
@@ -2329,9 +2428,9 @@ var CurveChart = React5.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
2329
2428
|
});
|
|
2330
2429
|
});
|
|
2331
2430
|
}, [animate, seriesPoints]);
|
|
2332
|
-
return /* @__PURE__ */
|
|
2333
|
-
/* @__PURE__ */
|
|
2334
|
-
/* @__PURE__ */
|
|
2431
|
+
return /* @__PURE__ */ jsxs197("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
2432
|
+
/* @__PURE__ */ jsx306(GridLines, { width, height, chartH, maxVal }),
|
|
2433
|
+
/* @__PURE__ */ jsx306(AxisLabels, { labels, count, chartW, height }),
|
|
2335
2434
|
entries.map(([key], di) => {
|
|
2336
2435
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
2337
2436
|
const color = palette[2];
|
|
@@ -2340,12 +2439,12 @@ var CurveChart = React5.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
2340
2439
|
const gradientId = `curve-gradient-${di}`;
|
|
2341
2440
|
const linePath = toSmoothPath(points);
|
|
2342
2441
|
const areaPath = linePath + ` L ${points[points.length - 1].x} ${PADDING.top + chartH} L ${points[0].x} ${PADDING.top + chartH} Z`;
|
|
2343
|
-
return /* @__PURE__ */
|
|
2344
|
-
/* @__PURE__ */
|
|
2345
|
-
/* @__PURE__ */
|
|
2346
|
-
/* @__PURE__ */
|
|
2442
|
+
return /* @__PURE__ */ jsxs197("g", { children: [
|
|
2443
|
+
/* @__PURE__ */ jsx306("defs", { children: /* @__PURE__ */ jsxs197("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
2444
|
+
/* @__PURE__ */ jsx306("stop", { offset: "0%", stopColor: areaColor, stopOpacity: "0.4" }),
|
|
2445
|
+
/* @__PURE__ */ jsx306("stop", { offset: "100%", stopColor: areaColor, stopOpacity: "0.02" })
|
|
2347
2446
|
] }) }),
|
|
2348
|
-
/* @__PURE__ */
|
|
2447
|
+
/* @__PURE__ */ jsx306(
|
|
2349
2448
|
"path",
|
|
2350
2449
|
{
|
|
2351
2450
|
d: areaPath,
|
|
@@ -2354,7 +2453,7 @@ var CurveChart = React5.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
2354
2453
|
style: animate ? { animationDelay: "600ms" } : { opacity: 1 }
|
|
2355
2454
|
}
|
|
2356
2455
|
),
|
|
2357
|
-
/* @__PURE__ */
|
|
2456
|
+
/* @__PURE__ */ jsx306(
|
|
2358
2457
|
"path",
|
|
2359
2458
|
{
|
|
2360
2459
|
ref: (el) => {
|
|
@@ -2366,7 +2465,7 @@ var CurveChart = React5.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
2366
2465
|
strokeWidth: "2"
|
|
2367
2466
|
}
|
|
2368
2467
|
),
|
|
2369
|
-
showPoints && points.map((p, i) => /* @__PURE__ */
|
|
2468
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ jsx306(
|
|
2370
2469
|
"circle",
|
|
2371
2470
|
{
|
|
2372
2471
|
cx: p.x,
|
|
@@ -2385,9 +2484,9 @@ var CurveChart = React5.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
2385
2484
|
] });
|
|
2386
2485
|
});
|
|
2387
2486
|
CurveChart.displayName = "CurveChart";
|
|
2388
|
-
var BarChart =
|
|
2389
|
-
const entries =
|
|
2390
|
-
const maxVal =
|
|
2487
|
+
var BarChart = React6.memo(({ data, labels, width, height, animate, onHover, onMove, onLeave }) => {
|
|
2488
|
+
const entries = React6.useMemo(() => Object.entries(data), [data]);
|
|
2489
|
+
const maxVal = React6.useMemo(() => {
|
|
2391
2490
|
const allValues = entries.flatMap(([, v]) => v);
|
|
2392
2491
|
return Math.max(...allValues) * 1.2 || 1;
|
|
2393
2492
|
}, [entries]);
|
|
@@ -2399,7 +2498,7 @@ var BarChart = React5.memo(({ data, labels, width, height, animate, onHover, onM
|
|
|
2399
2498
|
const barGap = groupCount > 1 ? 2 : 0;
|
|
2400
2499
|
const barW = Math.max(1, Math.min(32, (groupW * 0.7 - barGap * (groupCount - 1)) / groupCount));
|
|
2401
2500
|
const baseline = PADDING.top + chartH;
|
|
2402
|
-
const bars =
|
|
2501
|
+
const bars = React6.useMemo(
|
|
2403
2502
|
() => entries.map(
|
|
2404
2503
|
([, values], di) => values.map((v, i) => {
|
|
2405
2504
|
const totalBarsW = barW * groupCount + barGap * (groupCount - 1);
|
|
@@ -2412,11 +2511,11 @@ var BarChart = React5.memo(({ data, labels, width, height, animate, onHover, onM
|
|
|
2412
2511
|
[entries, maxVal, chartH, groupW, barW, barGap, groupCount]
|
|
2413
2512
|
);
|
|
2414
2513
|
const barLabelStep = getLabelStep(count, chartW);
|
|
2415
|
-
return /* @__PURE__ */
|
|
2416
|
-
/* @__PURE__ */
|
|
2514
|
+
return /* @__PURE__ */ jsxs197("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
2515
|
+
/* @__PURE__ */ jsx306(GridLines, { width, height, chartH, maxVal }),
|
|
2417
2516
|
labels.map((label, i) => {
|
|
2418
2517
|
if (i % barLabelStep !== 0) return null;
|
|
2419
|
-
return /* @__PURE__ */
|
|
2518
|
+
return /* @__PURE__ */ jsx306("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
2420
2519
|
}),
|
|
2421
2520
|
entries.map(([key], di) => {
|
|
2422
2521
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
@@ -2425,7 +2524,7 @@ var BarChart = React5.memo(({ data, labels, width, height, animate, onHover, onM
|
|
|
2425
2524
|
const r2 = Math.min(4, b.w / 2);
|
|
2426
2525
|
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`;
|
|
2427
2526
|
const delay = 100 + i * 80;
|
|
2428
|
-
return /* @__PURE__ */
|
|
2527
|
+
return /* @__PURE__ */ jsx306(
|
|
2429
2528
|
"path",
|
|
2430
2529
|
{
|
|
2431
2530
|
d,
|
|
@@ -2446,11 +2545,11 @@ var BarChart = React5.memo(({ data, labels, width, height, animate, onHover, onM
|
|
|
2446
2545
|
] });
|
|
2447
2546
|
});
|
|
2448
2547
|
BarChart.displayName = "BarChart";
|
|
2449
|
-
var PieDonutChart =
|
|
2548
|
+
var PieDonutChart = React6.memo(
|
|
2450
2549
|
({ data, labels, width, height, animate, isDoughnut, onHover, onMove, onLeave }) => {
|
|
2451
|
-
const entries =
|
|
2452
|
-
const values =
|
|
2453
|
-
const total =
|
|
2550
|
+
const entries = React6.useMemo(() => Object.entries(data), [data]);
|
|
2551
|
+
const values = React6.useMemo(() => entries.flatMap(([, v]) => v), [entries]);
|
|
2552
|
+
const total = React6.useMemo(() => values.reduce((a, b) => a + b, 0) || 1, [values]);
|
|
2454
2553
|
const size = Math.min(width, height);
|
|
2455
2554
|
const cx = size / 2;
|
|
2456
2555
|
const cy = size / 2;
|
|
@@ -2458,10 +2557,10 @@ var PieDonutChart = React5.memo(
|
|
|
2458
2557
|
const innerR = isDoughnut ? r2 * 0.5 : 0;
|
|
2459
2558
|
const firstKey = entries[0]?.[0] ?? "";
|
|
2460
2559
|
const colorOffset = hashString(firstKey);
|
|
2461
|
-
const maskRef =
|
|
2560
|
+
const maskRef = React6.useRef(null);
|
|
2462
2561
|
const maskR = r2 + 10;
|
|
2463
2562
|
const maskCircumference = 2 * Math.PI * maskR;
|
|
2464
|
-
|
|
2563
|
+
React6.useEffect(() => {
|
|
2465
2564
|
if (!animate || !maskRef.current) return;
|
|
2466
2565
|
const el = maskRef.current;
|
|
2467
2566
|
el.style.strokeDasharray = `${maskCircumference}`;
|
|
@@ -2471,7 +2570,7 @@ var PieDonutChart = React5.memo(
|
|
|
2471
2570
|
el.style.strokeDashoffset = "0";
|
|
2472
2571
|
});
|
|
2473
2572
|
}, [animate, maskCircumference]);
|
|
2474
|
-
const sliceData =
|
|
2573
|
+
const sliceData = React6.useMemo(() => {
|
|
2475
2574
|
let angle0 = -Math.PI / 2;
|
|
2476
2575
|
let cumulativeAngle = 0;
|
|
2477
2576
|
return values.map((v, i) => {
|
|
@@ -2505,8 +2604,8 @@ var PieDonutChart = React5.memo(
|
|
|
2505
2604
|
});
|
|
2506
2605
|
}, [values, total, cx, cy, r2, innerR, labels]);
|
|
2507
2606
|
const maskId = `pie-mask-${isDoughnut ? "d" : "p"}`;
|
|
2508
|
-
return /* @__PURE__ */
|
|
2509
|
-
animate && /* @__PURE__ */
|
|
2607
|
+
return /* @__PURE__ */ jsxs197("svg", { viewBox: `0 0 ${size} ${size}`, className: "chart-svg chart-pie", children: [
|
|
2608
|
+
animate && /* @__PURE__ */ jsx306("defs", { children: /* @__PURE__ */ jsx306("mask", { id: maskId, children: /* @__PURE__ */ jsx306(
|
|
2510
2609
|
"circle",
|
|
2511
2610
|
{
|
|
2512
2611
|
ref: maskRef,
|
|
@@ -2519,7 +2618,7 @@ var PieDonutChart = React5.memo(
|
|
|
2519
2618
|
transform: `rotate(-90 ${cx} ${cy})`
|
|
2520
2619
|
}
|
|
2521
2620
|
) }) }),
|
|
2522
|
-
/* @__PURE__ */
|
|
2621
|
+
/* @__PURE__ */ jsx306("g", { mask: animate ? `url(#${maskId})` : void 0, children: sliceData.map((s, i) => /* @__PURE__ */ jsx306("g", { children: /* @__PURE__ */ jsx306(
|
|
2523
2622
|
"path",
|
|
2524
2623
|
{
|
|
2525
2624
|
d: s.d,
|
|
@@ -2530,7 +2629,7 @@ var PieDonutChart = React5.memo(
|
|
|
2530
2629
|
onMouseLeave: onLeave
|
|
2531
2630
|
}
|
|
2532
2631
|
) }, i)) }),
|
|
2533
|
-
sliceData.map((s, i) => s.angle > 0.2 && /* @__PURE__ */
|
|
2632
|
+
sliceData.map((s, i) => s.angle > 0.2 && /* @__PURE__ */ jsx306(
|
|
2534
2633
|
"text",
|
|
2535
2634
|
{
|
|
2536
2635
|
x: s.lx,
|
|
@@ -2548,9 +2647,9 @@ var PieDonutChart = React5.memo(
|
|
|
2548
2647
|
);
|
|
2549
2648
|
PieDonutChart.displayName = "PieDonutChart";
|
|
2550
2649
|
var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
2551
|
-
const ref =
|
|
2552
|
-
const [adjustedX, setAdjustedX] =
|
|
2553
|
-
|
|
2650
|
+
const ref = React6.useRef(null);
|
|
2651
|
+
const [adjustedX, setAdjustedX] = React6.useState(x);
|
|
2652
|
+
React6.useEffect(() => {
|
|
2554
2653
|
const el = ref.current;
|
|
2555
2654
|
if (!el) return;
|
|
2556
2655
|
const w = el.offsetWidth;
|
|
@@ -2561,7 +2660,7 @@ var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
|
2561
2660
|
else if (x + half > containerWidth - margin) nx = containerWidth - half - margin;
|
|
2562
2661
|
setAdjustedX(nx);
|
|
2563
2662
|
}, [x, containerWidth]);
|
|
2564
|
-
return /* @__PURE__ */
|
|
2663
|
+
return /* @__PURE__ */ jsx306(
|
|
2565
2664
|
"div",
|
|
2566
2665
|
{
|
|
2567
2666
|
ref,
|
|
@@ -2571,22 +2670,22 @@ var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
|
2571
2670
|
}
|
|
2572
2671
|
);
|
|
2573
2672
|
};
|
|
2574
|
-
var Chart =
|
|
2673
|
+
var Chart = React6.memo((props) => {
|
|
2575
2674
|
const { type, data, labels, tooltip: showTooltip = true } = props;
|
|
2576
2675
|
const { tooltip, show, hide, move, containerRef } = useChartTooltip(showTooltip);
|
|
2577
2676
|
const { width, height } = useChartSize(containerRef);
|
|
2578
|
-
const stableData =
|
|
2579
|
-
const stableLabels =
|
|
2580
|
-
const dataKey =
|
|
2677
|
+
const stableData = React6.useMemo(() => data, [JSON.stringify(data)]);
|
|
2678
|
+
const stableLabels = React6.useMemo(() => labels, [JSON.stringify(labels)]);
|
|
2679
|
+
const dataKey = React6.useMemo(() => JSON.stringify(labels), [labels]);
|
|
2581
2680
|
const animate = useChartAnimation(containerRef, dataKey);
|
|
2582
2681
|
const ready = width > 0 && height > 0;
|
|
2583
|
-
return /* @__PURE__ */
|
|
2584
|
-
ready && type === "line" && /* @__PURE__ */
|
|
2585
|
-
ready && type === "curve" && /* @__PURE__ */
|
|
2586
|
-
ready && type === "bar" && /* @__PURE__ */
|
|
2587
|
-
ready && type === "pie" && /* @__PURE__ */
|
|
2588
|
-
ready && type === "doughnut" && /* @__PURE__ */
|
|
2589
|
-
tooltip.visible && /* @__PURE__ */
|
|
2682
|
+
return /* @__PURE__ */ jsxs197("div", { className: "lib-xplat-chart", ref: containerRef, children: [
|
|
2683
|
+
ready && type === "line" && /* @__PURE__ */ jsx306(LineChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
2684
|
+
ready && type === "curve" && /* @__PURE__ */ jsx306(CurveChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
2685
|
+
ready && type === "bar" && /* @__PURE__ */ jsx306(BarChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
2686
|
+
ready && type === "pie" && /* @__PURE__ */ jsx306(PieDonutChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
2687
|
+
ready && type === "doughnut" && /* @__PURE__ */ jsx306(PieDonutChart, { data: stableData, labels: stableLabels, width, height, animate, isDoughnut: true, onHover: show, onMove: move, onLeave: hide }),
|
|
2688
|
+
tooltip.visible && /* @__PURE__ */ jsx306(TooltipBubble, { x: tooltip.x, y: tooltip.y, containerWidth: width, children: tooltip.content })
|
|
2590
2689
|
] });
|
|
2591
2690
|
});
|
|
2592
2691
|
Chart.displayName = "Chart";
|
|
@@ -2599,7 +2698,7 @@ import { primitive, semantic } from "@x-plat/tokens-core";
|
|
|
2599
2698
|
import { cssVar } from "@x-plat/tokens-core";
|
|
2600
2699
|
|
|
2601
2700
|
// src/components/CheckBox/CheckBox.tsx
|
|
2602
|
-
import { jsx as
|
|
2701
|
+
import { jsx as jsx307, jsxs as jsxs198 } from "react/jsx-runtime";
|
|
2603
2702
|
var CheckBox = (props) => {
|
|
2604
2703
|
const {
|
|
2605
2704
|
checked,
|
|
@@ -2617,8 +2716,8 @@ var CheckBox = (props) => {
|
|
|
2617
2716
|
const checkedClasses = `checked`;
|
|
2618
2717
|
const disabledClasses = "disabled";
|
|
2619
2718
|
const boxClasses = disabled ? disabledClasses : checked ? checkedClasses : uncheckedClasses;
|
|
2620
|
-
return /* @__PURE__ */
|
|
2621
|
-
/* @__PURE__ */
|
|
2719
|
+
return /* @__PURE__ */ jsxs198("label", { className: clsx_default("lib-xplat-checkbox", size, type), children: [
|
|
2720
|
+
/* @__PURE__ */ jsx307(
|
|
2622
2721
|
"input",
|
|
2623
2722
|
{
|
|
2624
2723
|
type: "checkbox",
|
|
@@ -2628,44 +2727,44 @@ var CheckBox = (props) => {
|
|
|
2628
2727
|
...rest
|
|
2629
2728
|
}
|
|
2630
2729
|
),
|
|
2631
|
-
/* @__PURE__ */
|
|
2632
|
-
label && /* @__PURE__ */
|
|
2730
|
+
/* @__PURE__ */ jsx307("span", { className: clsx_default("checkbox", boxClasses), children: /* @__PURE__ */ jsx307("span", { className: clsx_default("check-icon", { visible: checked }), children: /* @__PURE__ */ jsx307(CheckIcon_default, {}) }) }),
|
|
2731
|
+
label && /* @__PURE__ */ jsx307("span", { className: "label", children: label })
|
|
2633
2732
|
] });
|
|
2634
2733
|
};
|
|
2635
2734
|
CheckBox.displayName = "CheckBox";
|
|
2636
2735
|
var CheckBox_default = CheckBox;
|
|
2637
2736
|
|
|
2638
2737
|
// src/components/Chip/Chip.tsx
|
|
2639
|
-
import { jsx as
|
|
2738
|
+
import { jsx as jsx308 } from "react/jsx-runtime";
|
|
2640
2739
|
var Chip = (props) => {
|
|
2641
2740
|
const {
|
|
2642
2741
|
children,
|
|
2643
2742
|
type = "primary",
|
|
2644
2743
|
size = "md"
|
|
2645
2744
|
} = props;
|
|
2646
|
-
return /* @__PURE__ */
|
|
2745
|
+
return /* @__PURE__ */ jsx308("div", { className: clsx_default("lib-xplat-chip", type, size), children });
|
|
2647
2746
|
};
|
|
2648
2747
|
Chip.displayName = "Chip";
|
|
2649
2748
|
var Chip_default = Chip;
|
|
2650
2749
|
|
|
2651
2750
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
2652
|
-
import
|
|
2751
|
+
import React12 from "react";
|
|
2653
2752
|
|
|
2654
2753
|
// src/components/Input/Input.tsx
|
|
2655
|
-
import
|
|
2754
|
+
import React7 from "react";
|
|
2656
2755
|
|
|
2657
2756
|
// src/components/Input/InputValidations.tsx
|
|
2658
|
-
import { jsx as
|
|
2757
|
+
import { jsx as jsx309, jsxs as jsxs199 } from "react/jsx-runtime";
|
|
2659
2758
|
var InputValidations = (props) => {
|
|
2660
2759
|
const { message, status = "default" } = props;
|
|
2661
|
-
return /* @__PURE__ */
|
|
2662
|
-
/* @__PURE__ */
|
|
2663
|
-
status === "default" && /* @__PURE__ */
|
|
2664
|
-
status === "success" && /* @__PURE__ */
|
|
2665
|
-
status === "warning" && /* @__PURE__ */
|
|
2666
|
-
status === "error" && /* @__PURE__ */
|
|
2760
|
+
return /* @__PURE__ */ jsxs199("div", { className: clsx_default("lib-xplat-input-validation", status), children: [
|
|
2761
|
+
/* @__PURE__ */ jsxs199("div", { className: "icon", children: [
|
|
2762
|
+
status === "default" && /* @__PURE__ */ jsx309(InfoIcon_default, {}),
|
|
2763
|
+
status === "success" && /* @__PURE__ */ jsx309(SuccessIcon_default, {}),
|
|
2764
|
+
status === "warning" && /* @__PURE__ */ jsx309(InfoIcon_default, {}),
|
|
2765
|
+
status === "error" && /* @__PURE__ */ jsx309(ErrorIcon_default, {})
|
|
2667
2766
|
] }),
|
|
2668
|
-
/* @__PURE__ */
|
|
2767
|
+
/* @__PURE__ */ jsx309("div", { className: "message", children: message })
|
|
2669
2768
|
] });
|
|
2670
2769
|
};
|
|
2671
2770
|
InputValidations.displayName = "InputValidations";
|
|
@@ -2706,7 +2805,7 @@ var handleTelBackspace = (prevValue, currValue) => {
|
|
|
2706
2805
|
};
|
|
2707
2806
|
|
|
2708
2807
|
// src/components/Input/Input.tsx
|
|
2709
|
-
import { jsx as
|
|
2808
|
+
import { jsx as jsx310, jsxs as jsxs200 } from "react/jsx-runtime";
|
|
2710
2809
|
import { createElement } from "react";
|
|
2711
2810
|
var formatValue = (type, value) => {
|
|
2712
2811
|
if (value === null || value === void 0) return "";
|
|
@@ -2755,7 +2854,7 @@ var parseValue = (type, value) => {
|
|
|
2755
2854
|
return value;
|
|
2756
2855
|
}
|
|
2757
2856
|
};
|
|
2758
|
-
var Input =
|
|
2857
|
+
var Input = React7.forwardRef((props, ref) => {
|
|
2759
2858
|
const {
|
|
2760
2859
|
value,
|
|
2761
2860
|
onChange,
|
|
@@ -2781,13 +2880,13 @@ var Input = React6.forwardRef((props, ref) => {
|
|
|
2781
2880
|
onChange(event);
|
|
2782
2881
|
}
|
|
2783
2882
|
};
|
|
2784
|
-
return /* @__PURE__ */
|
|
2785
|
-
/* @__PURE__ */
|
|
2883
|
+
return /* @__PURE__ */ jsxs200("div", { className: "lib-xplat-input-wrap", children: [
|
|
2884
|
+
/* @__PURE__ */ jsxs200(
|
|
2786
2885
|
"div",
|
|
2787
2886
|
{
|
|
2788
2887
|
className: clsx_default("lib-xplat-input", size, disabled ? "disabled" : void 0),
|
|
2789
2888
|
children: [
|
|
2790
|
-
/* @__PURE__ */
|
|
2889
|
+
/* @__PURE__ */ jsx310(
|
|
2791
2890
|
"input",
|
|
2792
2891
|
{
|
|
2793
2892
|
...inputProps,
|
|
@@ -2798,11 +2897,11 @@ var Input = React6.forwardRef((props, ref) => {
|
|
|
2798
2897
|
onChange: handleChange
|
|
2799
2898
|
}
|
|
2800
2899
|
),
|
|
2801
|
-
suffix && /* @__PURE__ */
|
|
2900
|
+
suffix && /* @__PURE__ */ jsx310("div", { className: "suffix", children: suffix })
|
|
2802
2901
|
]
|
|
2803
2902
|
}
|
|
2804
2903
|
),
|
|
2805
|
-
validations && /* @__PURE__ */
|
|
2904
|
+
validations && /* @__PURE__ */ jsx310("div", { className: "lib-xplat-input-validation-wrap", children: validations?.map((validation, idx) => /* @__PURE__ */ createElement(
|
|
2806
2905
|
InputValidations_default,
|
|
2807
2906
|
{
|
|
2808
2907
|
...validation,
|
|
@@ -2815,20 +2914,20 @@ Input.displayName = "Input";
|
|
|
2815
2914
|
var Input_default = Input;
|
|
2816
2915
|
|
|
2817
2916
|
// src/components/Input/PasswordInput/PasswordInput.tsx
|
|
2818
|
-
import
|
|
2819
|
-
import { jsx as
|
|
2820
|
-
var PasswordInput =
|
|
2917
|
+
import React8 from "react";
|
|
2918
|
+
import { jsx as jsx311 } from "react/jsx-runtime";
|
|
2919
|
+
var PasswordInput = React8.forwardRef(
|
|
2821
2920
|
(props, ref) => {
|
|
2822
2921
|
const { reg: _reg, ...inputProps } = props;
|
|
2823
|
-
const [isView, setIsView] =
|
|
2922
|
+
const [isView, setIsView] = React8.useState(false);
|
|
2824
2923
|
const handleChangeView = () => {
|
|
2825
2924
|
setIsView((prev) => !prev);
|
|
2826
2925
|
};
|
|
2827
|
-
return /* @__PURE__ */
|
|
2926
|
+
return /* @__PURE__ */ jsx311(
|
|
2828
2927
|
Input_default,
|
|
2829
2928
|
{
|
|
2830
2929
|
...inputProps,
|
|
2831
|
-
suffix: /* @__PURE__ */
|
|
2930
|
+
suffix: /* @__PURE__ */ jsx311("div", { className: "wrapper pointer", onClick: handleChangeView, children: isView ? /* @__PURE__ */ jsx311(OpenEyeIcon_default, {}) : /* @__PURE__ */ jsx311(CloseEyeIcon_default, {}) }),
|
|
2832
2931
|
type: isView ? "text" : "password",
|
|
2833
2932
|
ref
|
|
2834
2933
|
}
|
|
@@ -2839,17 +2938,17 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
2839
2938
|
var PasswordInput_default = PasswordInput;
|
|
2840
2939
|
|
|
2841
2940
|
// src/components/Modal/Modal.tsx
|
|
2842
|
-
import
|
|
2941
|
+
import React10 from "react";
|
|
2843
2942
|
import { createPortal } from "react-dom";
|
|
2844
2943
|
|
|
2845
2944
|
// src/tokens/hooks/Portal.tsx
|
|
2846
|
-
import
|
|
2945
|
+
import React9 from "react";
|
|
2847
2946
|
import ReactDOM from "react-dom";
|
|
2848
|
-
import { jsx as
|
|
2849
|
-
var PortalContainerContext =
|
|
2850
|
-
var PortalProvider = ({ container, children }) => /* @__PURE__ */
|
|
2947
|
+
import { jsx as jsx312 } from "react/jsx-runtime";
|
|
2948
|
+
var PortalContainerContext = React9.createContext(null);
|
|
2949
|
+
var PortalProvider = ({ container, children }) => /* @__PURE__ */ jsx312(PortalContainerContext.Provider, { value: container, children });
|
|
2851
2950
|
var Portal = ({ children }) => {
|
|
2852
|
-
const contextContainer =
|
|
2951
|
+
const contextContainer = React9.useContext(PortalContainerContext);
|
|
2853
2952
|
if (typeof document === "undefined") return null;
|
|
2854
2953
|
const container = contextContainer ?? document.body;
|
|
2855
2954
|
return ReactDOM.createPortal(children, container);
|
|
@@ -2858,14 +2957,14 @@ Portal.displayName = "Portal";
|
|
|
2858
2957
|
var Portal_default = Portal;
|
|
2859
2958
|
|
|
2860
2959
|
// src/components/Modal/Modal.tsx
|
|
2861
|
-
import { jsx as
|
|
2960
|
+
import { jsx as jsx313 } from "react/jsx-runtime";
|
|
2862
2961
|
var ANIMATION_DURATION_MS = 200;
|
|
2863
2962
|
var Modal = (props) => {
|
|
2864
2963
|
const { isOpen, onClose, children } = props;
|
|
2865
|
-
const [mounted, setMounted] =
|
|
2866
|
-
const [visible, setVisible] =
|
|
2867
|
-
const boxRef =
|
|
2868
|
-
|
|
2964
|
+
const [mounted, setMounted] = React10.useState(false);
|
|
2965
|
+
const [visible, setVisible] = React10.useState(false);
|
|
2966
|
+
const boxRef = React10.useRef(null);
|
|
2967
|
+
React10.useEffect(() => {
|
|
2869
2968
|
if (isOpen) {
|
|
2870
2969
|
setMounted(true);
|
|
2871
2970
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -2879,12 +2978,12 @@ var Modal = (props) => {
|
|
|
2879
2978
|
if (!mounted) return null;
|
|
2880
2979
|
const stateClass = visible ? "enter" : "exit";
|
|
2881
2980
|
return createPortal(
|
|
2882
|
-
/* @__PURE__ */
|
|
2981
|
+
/* @__PURE__ */ jsx313(
|
|
2883
2982
|
"div",
|
|
2884
2983
|
{
|
|
2885
2984
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
2886
2985
|
onClick: onClose,
|
|
2887
|
-
children: /* @__PURE__ */
|
|
2986
|
+
children: /* @__PURE__ */ jsx313(
|
|
2888
2987
|
"div",
|
|
2889
2988
|
{
|
|
2890
2989
|
ref: boxRef,
|
|
@@ -2892,7 +2991,7 @@ var Modal = (props) => {
|
|
|
2892
2991
|
role: "dialog",
|
|
2893
2992
|
"aria-modal": "true",
|
|
2894
2993
|
onClick: (e) => e.stopPropagation(),
|
|
2895
|
-
children: /* @__PURE__ */
|
|
2994
|
+
children: /* @__PURE__ */ jsx313(PortalProvider, { container: boxRef.current, children })
|
|
2896
2995
|
}
|
|
2897
2996
|
)
|
|
2898
2997
|
}
|
|
@@ -2904,9 +3003,9 @@ Modal.displayName = "Modal";
|
|
|
2904
3003
|
var Modal_default = Modal;
|
|
2905
3004
|
|
|
2906
3005
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
2907
|
-
import
|
|
2908
|
-
import { Fragment as Fragment3, jsx as
|
|
2909
|
-
var DayCell2 =
|
|
3006
|
+
import React11 from "react";
|
|
3007
|
+
import { Fragment as Fragment3, jsx as jsx314, jsxs as jsxs201 } from "react/jsx-runtime";
|
|
3008
|
+
var DayCell2 = React11.memo(
|
|
2910
3009
|
({
|
|
2911
3010
|
day,
|
|
2912
3011
|
disabled,
|
|
@@ -2916,7 +3015,7 @@ var DayCell2 = React10.memo(
|
|
|
2916
3015
|
isEnd,
|
|
2917
3016
|
inRange,
|
|
2918
3017
|
onSelect
|
|
2919
|
-
}) => /* @__PURE__ */
|
|
3018
|
+
}) => /* @__PURE__ */ jsx314(
|
|
2920
3019
|
"button",
|
|
2921
3020
|
{
|
|
2922
3021
|
type: "button",
|
|
@@ -2958,26 +3057,26 @@ var SingleDatePicker = (props) => {
|
|
|
2958
3057
|
initialYear,
|
|
2959
3058
|
initialMonth
|
|
2960
3059
|
);
|
|
2961
|
-
const [pickerMode, setPickerMode] =
|
|
2962
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
3060
|
+
const [pickerMode, setPickerMode] = React11.useState("days");
|
|
3061
|
+
const [yearRangeStart, setYearRangeStart] = React11.useState(
|
|
2963
3062
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
2964
3063
|
);
|
|
2965
|
-
const minTime =
|
|
3064
|
+
const minTime = React11.useMemo(
|
|
2966
3065
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
2967
3066
|
[minDate]
|
|
2968
3067
|
);
|
|
2969
|
-
const maxTime =
|
|
3068
|
+
const maxTime = React11.useMemo(
|
|
2970
3069
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
2971
3070
|
[maxDate]
|
|
2972
3071
|
);
|
|
2973
|
-
const highlightSet =
|
|
3072
|
+
const highlightSet = React11.useMemo(() => {
|
|
2974
3073
|
const set = /* @__PURE__ */ new Set();
|
|
2975
3074
|
for (const h of highlightDates) {
|
|
2976
3075
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
2977
3076
|
}
|
|
2978
3077
|
return set;
|
|
2979
3078
|
}, [highlightDates]);
|
|
2980
|
-
const handleSelect =
|
|
3079
|
+
const handleSelect = React11.useCallback(
|
|
2981
3080
|
(date) => {
|
|
2982
3081
|
onChange?.(date);
|
|
2983
3082
|
},
|
|
@@ -3014,20 +3113,20 @@ var SingleDatePicker = (props) => {
|
|
|
3014
3113
|
const monthLabels = MONTH_LABELS[locale];
|
|
3015
3114
|
const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
|
|
3016
3115
|
const hasRange = rangeStart != null && rangeEnd != null;
|
|
3017
|
-
return /* @__PURE__ */
|
|
3116
|
+
return /* @__PURE__ */ jsxs201(
|
|
3018
3117
|
"div",
|
|
3019
3118
|
{
|
|
3020
3119
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
3021
3120
|
children: [
|
|
3022
|
-
/* @__PURE__ */
|
|
3023
|
-
/* @__PURE__ */
|
|
3024
|
-
/* @__PURE__ */
|
|
3025
|
-
/* @__PURE__ */
|
|
3121
|
+
/* @__PURE__ */ jsxs201("div", { className: "datepicker-header", children: [
|
|
3122
|
+
/* @__PURE__ */ jsx314("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ jsx314(ChevronLeftIcon_default, {}) }),
|
|
3123
|
+
/* @__PURE__ */ jsx314("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
3124
|
+
/* @__PURE__ */ jsx314("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ jsx314(ChevronRightIcon_default, {}) })
|
|
3026
3125
|
] }),
|
|
3027
|
-
/* @__PURE__ */
|
|
3028
|
-
pickerMode === "years" && /* @__PURE__ */
|
|
3126
|
+
/* @__PURE__ */ jsxs201("div", { className: "datepicker-body", children: [
|
|
3127
|
+
pickerMode === "years" && /* @__PURE__ */ jsx314("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
3029
3128
|
const y = yearRangeStart + i;
|
|
3030
|
-
return /* @__PURE__ */
|
|
3129
|
+
return /* @__PURE__ */ jsx314(
|
|
3031
3130
|
"button",
|
|
3032
3131
|
{
|
|
3033
3132
|
type: "button",
|
|
@@ -3038,7 +3137,7 @@ var SingleDatePicker = (props) => {
|
|
|
3038
3137
|
y
|
|
3039
3138
|
);
|
|
3040
3139
|
}) }),
|
|
3041
|
-
pickerMode === "months" && /* @__PURE__ */
|
|
3140
|
+
pickerMode === "months" && /* @__PURE__ */ jsx314("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ jsx314(
|
|
3042
3141
|
"button",
|
|
3043
3142
|
{
|
|
3044
3143
|
type: "button",
|
|
@@ -3048,8 +3147,8 @@ var SingleDatePicker = (props) => {
|
|
|
3048
3147
|
},
|
|
3049
3148
|
i
|
|
3050
3149
|
)) }),
|
|
3051
|
-
pickerMode === "days" && /* @__PURE__ */
|
|
3052
|
-
/* @__PURE__ */
|
|
3150
|
+
pickerMode === "days" && /* @__PURE__ */ jsxs201(Fragment3, { children: [
|
|
3151
|
+
/* @__PURE__ */ jsx314("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ jsx314(
|
|
3053
3152
|
"div",
|
|
3054
3153
|
{
|
|
3055
3154
|
className: clsx_default(
|
|
@@ -3061,7 +3160,7 @@ var SingleDatePicker = (props) => {
|
|
|
3061
3160
|
},
|
|
3062
3161
|
label
|
|
3063
3162
|
)) }),
|
|
3064
|
-
/* @__PURE__ */
|
|
3163
|
+
/* @__PURE__ */ jsx314("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
3065
3164
|
const t = day.date.getTime();
|
|
3066
3165
|
const disabled = t < minTime || t > maxTime;
|
|
3067
3166
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -3071,7 +3170,7 @@ var SingleDatePicker = (props) => {
|
|
|
3071
3170
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
3072
3171
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
3073
3172
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
3074
|
-
return /* @__PURE__ */
|
|
3173
|
+
return /* @__PURE__ */ jsx314(
|
|
3075
3174
|
DayCell2,
|
|
3076
3175
|
{
|
|
3077
3176
|
day,
|
|
@@ -3096,7 +3195,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
3096
3195
|
var SingleDatePicker_default = SingleDatePicker;
|
|
3097
3196
|
|
|
3098
3197
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
3099
|
-
import { jsx as
|
|
3198
|
+
import { jsx as jsx315, jsxs as jsxs202 } from "react/jsx-runtime";
|
|
3100
3199
|
var formatDate = (date) => {
|
|
3101
3200
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
3102
3201
|
const y = date.getFullYear();
|
|
@@ -3106,8 +3205,8 @@ var formatDate = (date) => {
|
|
|
3106
3205
|
};
|
|
3107
3206
|
var InputDatePicker = (props) => {
|
|
3108
3207
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
3109
|
-
const [isOpen, setIsOpen] =
|
|
3110
|
-
const [tempDate, setTempDate] =
|
|
3208
|
+
const [isOpen, setIsOpen] = React12.useState(false);
|
|
3209
|
+
const [tempDate, setTempDate] = React12.useState(value ?? /* @__PURE__ */ new Date());
|
|
3111
3210
|
const handleOpen = () => {
|
|
3112
3211
|
if (disabled) return;
|
|
3113
3212
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -3123,19 +3222,19 @@ var InputDatePicker = (props) => {
|
|
|
3123
3222
|
const handleClose = () => {
|
|
3124
3223
|
setIsOpen(false);
|
|
3125
3224
|
};
|
|
3126
|
-
return /* @__PURE__ */
|
|
3127
|
-
/* @__PURE__ */
|
|
3225
|
+
return /* @__PURE__ */ jsxs202("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
|
|
3226
|
+
/* @__PURE__ */ jsx315("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ jsx315(
|
|
3128
3227
|
Input_default,
|
|
3129
3228
|
{
|
|
3130
3229
|
value: formatDate(value),
|
|
3131
3230
|
placeholder,
|
|
3132
|
-
suffix: /* @__PURE__ */
|
|
3231
|
+
suffix: /* @__PURE__ */ jsx315(CalenderIcon_default, {}),
|
|
3133
3232
|
disabled,
|
|
3134
3233
|
readOnly: true
|
|
3135
3234
|
}
|
|
3136
3235
|
) }),
|
|
3137
|
-
/* @__PURE__ */
|
|
3138
|
-
/* @__PURE__ */
|
|
3236
|
+
/* @__PURE__ */ jsx315(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs202("div", { className: "lib-xplat-popup-datepicker-card", children: [
|
|
3237
|
+
/* @__PURE__ */ jsx315("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ jsx315(
|
|
3139
3238
|
SingleDatePicker_default,
|
|
3140
3239
|
{
|
|
3141
3240
|
value: tempDate,
|
|
@@ -3145,9 +3244,9 @@ var InputDatePicker = (props) => {
|
|
|
3145
3244
|
locale
|
|
3146
3245
|
}
|
|
3147
3246
|
) }),
|
|
3148
|
-
/* @__PURE__ */
|
|
3149
|
-
/* @__PURE__ */
|
|
3150
|
-
/* @__PURE__ */
|
|
3247
|
+
/* @__PURE__ */ jsxs202("div", { className: "popup-datepicker-footer", children: [
|
|
3248
|
+
/* @__PURE__ */ jsx315(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
|
|
3249
|
+
/* @__PURE__ */ jsx315(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
3151
3250
|
] })
|
|
3152
3251
|
] }) })
|
|
3153
3252
|
] });
|
|
@@ -3156,20 +3255,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
3156
3255
|
var InputDatePicker_default = InputDatePicker;
|
|
3157
3256
|
|
|
3158
3257
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
3159
|
-
import
|
|
3258
|
+
import React16 from "react";
|
|
3160
3259
|
|
|
3161
3260
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
3162
|
-
import
|
|
3261
|
+
import React15 from "react";
|
|
3163
3262
|
|
|
3164
3263
|
// src/components/Tab/Tab.tsx
|
|
3165
|
-
import
|
|
3264
|
+
import React14 from "react";
|
|
3166
3265
|
|
|
3167
3266
|
// src/components/Tab/TabItem.tsx
|
|
3168
|
-
import
|
|
3169
|
-
import { jsx as
|
|
3170
|
-
var TabItem =
|
|
3267
|
+
import React13 from "react";
|
|
3268
|
+
import { jsx as jsx316 } from "react/jsx-runtime";
|
|
3269
|
+
var TabItem = React13.forwardRef((props, ref) => {
|
|
3171
3270
|
const { isActive, title, onClick } = props;
|
|
3172
|
-
return /* @__PURE__ */
|
|
3271
|
+
return /* @__PURE__ */ jsx316(
|
|
3173
3272
|
"div",
|
|
3174
3273
|
{
|
|
3175
3274
|
ref,
|
|
@@ -3183,25 +3282,25 @@ TabItem.displayName = "TabItem";
|
|
|
3183
3282
|
var TabItem_default = TabItem;
|
|
3184
3283
|
|
|
3185
3284
|
// src/components/Tab/Tab.tsx
|
|
3186
|
-
import { jsx as
|
|
3285
|
+
import { jsx as jsx317, jsxs as jsxs203 } from "react/jsx-runtime";
|
|
3187
3286
|
var Tab = (props) => {
|
|
3188
3287
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
3189
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
3288
|
+
const [underlineStyle, setUnderlineStyle] = React14.useState({
|
|
3190
3289
|
left: 0,
|
|
3191
3290
|
width: 0
|
|
3192
3291
|
});
|
|
3193
|
-
const itemRefs =
|
|
3292
|
+
const itemRefs = React14.useRef([]);
|
|
3194
3293
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
3195
3294
|
onChange(tabItem, tabIdx);
|
|
3196
3295
|
};
|
|
3197
|
-
|
|
3296
|
+
React14.useEffect(() => {
|
|
3198
3297
|
const el = itemRefs.current[activeIndex];
|
|
3199
3298
|
if (el) {
|
|
3200
3299
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
3201
3300
|
}
|
|
3202
3301
|
}, [activeIndex, tabs.length]);
|
|
3203
|
-
return /* @__PURE__ */
|
|
3204
|
-
tabs.map((tab, idx) => /* @__PURE__ */
|
|
3302
|
+
return /* @__PURE__ */ jsxs203("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
|
|
3303
|
+
tabs.map((tab, idx) => /* @__PURE__ */ jsx317(
|
|
3205
3304
|
TabItem_default,
|
|
3206
3305
|
{
|
|
3207
3306
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -3213,7 +3312,7 @@ var Tab = (props) => {
|
|
|
3213
3312
|
},
|
|
3214
3313
|
`${tab.value}_${idx}`
|
|
3215
3314
|
)),
|
|
3216
|
-
type === "toggle" && /* @__PURE__ */
|
|
3315
|
+
type === "toggle" && /* @__PURE__ */ jsx317(
|
|
3217
3316
|
"div",
|
|
3218
3317
|
{
|
|
3219
3318
|
className: "tab-toggle-underline",
|
|
@@ -3229,7 +3328,7 @@ Tab.displayName = "Tab";
|
|
|
3229
3328
|
var Tab_default = Tab;
|
|
3230
3329
|
|
|
3231
3330
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
3232
|
-
import { jsx as
|
|
3331
|
+
import { jsx as jsx318, jsxs as jsxs204 } from "react/jsx-runtime";
|
|
3233
3332
|
var RangePicker = (props) => {
|
|
3234
3333
|
const {
|
|
3235
3334
|
startDate,
|
|
@@ -3239,7 +3338,7 @@ var RangePicker = (props) => {
|
|
|
3239
3338
|
maxDate,
|
|
3240
3339
|
locale = "ko"
|
|
3241
3340
|
} = props;
|
|
3242
|
-
const [activeTab, setActiveTab] =
|
|
3341
|
+
const [activeTab, setActiveTab] = React15.useState("start");
|
|
3243
3342
|
const handleStartChange = (date) => {
|
|
3244
3343
|
if (!date) return;
|
|
3245
3344
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -3252,8 +3351,8 @@ var RangePicker = (props) => {
|
|
|
3252
3351
|
};
|
|
3253
3352
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
3254
3353
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
3255
|
-
return /* @__PURE__ */
|
|
3256
|
-
/* @__PURE__ */
|
|
3354
|
+
return /* @__PURE__ */ jsxs204("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
|
|
3355
|
+
/* @__PURE__ */ jsx318("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ jsx318(
|
|
3257
3356
|
Tab_default,
|
|
3258
3357
|
{
|
|
3259
3358
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -3266,8 +3365,8 @@ var RangePicker = (props) => {
|
|
|
3266
3365
|
size: "sm"
|
|
3267
3366
|
}
|
|
3268
3367
|
) }),
|
|
3269
|
-
/* @__PURE__ */
|
|
3270
|
-
/* @__PURE__ */
|
|
3368
|
+
/* @__PURE__ */ jsxs204("div", { className: "datepicker-range-panels", children: [
|
|
3369
|
+
/* @__PURE__ */ jsx318(
|
|
3271
3370
|
SingleDatePicker_default,
|
|
3272
3371
|
{
|
|
3273
3372
|
value: startDate,
|
|
@@ -3279,7 +3378,7 @@ var RangePicker = (props) => {
|
|
|
3279
3378
|
locale
|
|
3280
3379
|
}
|
|
3281
3380
|
),
|
|
3282
|
-
/* @__PURE__ */
|
|
3381
|
+
/* @__PURE__ */ jsx318(
|
|
3283
3382
|
SingleDatePicker_default,
|
|
3284
3383
|
{
|
|
3285
3384
|
value: endDate,
|
|
@@ -3292,7 +3391,7 @@ var RangePicker = (props) => {
|
|
|
3292
3391
|
}
|
|
3293
3392
|
)
|
|
3294
3393
|
] }),
|
|
3295
|
-
/* @__PURE__ */
|
|
3394
|
+
/* @__PURE__ */ jsx318("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ jsx318(
|
|
3296
3395
|
SingleDatePicker_default,
|
|
3297
3396
|
{
|
|
3298
3397
|
value: startDate,
|
|
@@ -3303,7 +3402,7 @@ var RangePicker = (props) => {
|
|
|
3303
3402
|
rangeEnd: endDate,
|
|
3304
3403
|
locale
|
|
3305
3404
|
}
|
|
3306
|
-
) : /* @__PURE__ */
|
|
3405
|
+
) : /* @__PURE__ */ jsx318(
|
|
3307
3406
|
SingleDatePicker_default,
|
|
3308
3407
|
{
|
|
3309
3408
|
value: endDate,
|
|
@@ -3321,10 +3420,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
3321
3420
|
var RangePicker_default = RangePicker;
|
|
3322
3421
|
|
|
3323
3422
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
3324
|
-
import { jsx as
|
|
3423
|
+
import { jsx as jsx319, jsxs as jsxs205 } from "react/jsx-runtime";
|
|
3325
3424
|
var PopupPicker = (props) => {
|
|
3326
3425
|
const { component, type, locale } = props;
|
|
3327
|
-
const [isOpen, setIsOpen] =
|
|
3426
|
+
const [isOpen, setIsOpen] = React16.useState(false);
|
|
3328
3427
|
const handleClick = () => setIsOpen(true);
|
|
3329
3428
|
const handleClose = () => setIsOpen(false);
|
|
3330
3429
|
const handleSingleChange = (date) => {
|
|
@@ -3332,11 +3431,11 @@ var PopupPicker = (props) => {
|
|
|
3332
3431
|
props.onChange?.(date);
|
|
3333
3432
|
handleClose();
|
|
3334
3433
|
};
|
|
3335
|
-
return /* @__PURE__ */
|
|
3336
|
-
|
|
3337
|
-
/* @__PURE__ */
|
|
3338
|
-
/* @__PURE__ */
|
|
3339
|
-
type === "single" && /* @__PURE__ */
|
|
3434
|
+
return /* @__PURE__ */ jsxs205("div", { className: "lib-xplat-popup-datepicker", children: [
|
|
3435
|
+
React16.cloneElement(component, { onClick: handleClick }),
|
|
3436
|
+
/* @__PURE__ */ jsx319(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs205("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
|
|
3437
|
+
/* @__PURE__ */ jsxs205("div", { className: "popup-datepicker-content", children: [
|
|
3438
|
+
type === "single" && /* @__PURE__ */ jsx319(
|
|
3340
3439
|
SingleDatePicker_default,
|
|
3341
3440
|
{
|
|
3342
3441
|
value: props.value,
|
|
@@ -3346,7 +3445,7 @@ var PopupPicker = (props) => {
|
|
|
3346
3445
|
locale
|
|
3347
3446
|
}
|
|
3348
3447
|
),
|
|
3349
|
-
type === "range" && /* @__PURE__ */
|
|
3448
|
+
type === "range" && /* @__PURE__ */ jsx319(
|
|
3350
3449
|
RangePicker_default,
|
|
3351
3450
|
{
|
|
3352
3451
|
startDate: props.startDate,
|
|
@@ -3358,8 +3457,8 @@ var PopupPicker = (props) => {
|
|
|
3358
3457
|
}
|
|
3359
3458
|
)
|
|
3360
3459
|
] }),
|
|
3361
|
-
/* @__PURE__ */
|
|
3362
|
-
/* @__PURE__ */
|
|
3460
|
+
/* @__PURE__ */ jsxs205("div", { className: "popup-datepicker-footer", children: [
|
|
3461
|
+
/* @__PURE__ */ jsx319(
|
|
3363
3462
|
Button_default,
|
|
3364
3463
|
{
|
|
3365
3464
|
type: "secondary",
|
|
@@ -3367,7 +3466,7 @@ var PopupPicker = (props) => {
|
|
|
3367
3466
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
3368
3467
|
}
|
|
3369
3468
|
),
|
|
3370
|
-
/* @__PURE__ */
|
|
3469
|
+
/* @__PURE__ */ jsx319(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
3371
3470
|
] })
|
|
3372
3471
|
] }) })
|
|
3373
3472
|
] });
|
|
@@ -3376,10 +3475,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
3376
3475
|
var PopupPicker_default = PopupPicker;
|
|
3377
3476
|
|
|
3378
3477
|
// src/components/Divider/Divider.tsx
|
|
3379
|
-
import { jsx as
|
|
3478
|
+
import { jsx as jsx320 } from "react/jsx-runtime";
|
|
3380
3479
|
var Divider = (props) => {
|
|
3381
3480
|
const { orientation = "horizontal" } = props;
|
|
3382
|
-
return /* @__PURE__ */
|
|
3481
|
+
return /* @__PURE__ */ jsx320(
|
|
3383
3482
|
"div",
|
|
3384
3483
|
{
|
|
3385
3484
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -3392,15 +3491,15 @@ Divider.displayName = "Divider";
|
|
|
3392
3491
|
var Divider_default = Divider;
|
|
3393
3492
|
|
|
3394
3493
|
// src/components/Drawer/Drawer.tsx
|
|
3395
|
-
import
|
|
3494
|
+
import React17 from "react";
|
|
3396
3495
|
import { createPortal as createPortal2 } from "react-dom";
|
|
3397
|
-
import { jsx as
|
|
3496
|
+
import { jsx as jsx321, jsxs as jsxs206 } from "react/jsx-runtime";
|
|
3398
3497
|
var ANIMATION_DURATION_MS2 = 250;
|
|
3399
3498
|
var Drawer = (props) => {
|
|
3400
3499
|
const { isOpen, onClose, placement = "right", size = "md", title, children } = props;
|
|
3401
|
-
const [mounted, setMounted] =
|
|
3402
|
-
const [visible, setVisible] =
|
|
3403
|
-
|
|
3500
|
+
const [mounted, setMounted] = React17.useState(false);
|
|
3501
|
+
const [visible, setVisible] = React17.useState(false);
|
|
3502
|
+
React17.useEffect(() => {
|
|
3404
3503
|
if (isOpen) {
|
|
3405
3504
|
setMounted(true);
|
|
3406
3505
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3414,12 +3513,12 @@ var Drawer = (props) => {
|
|
|
3414
3513
|
if (!mounted) return null;
|
|
3415
3514
|
const stateClass = visible ? "enter" : "exit";
|
|
3416
3515
|
return createPortal2(
|
|
3417
|
-
/* @__PURE__ */
|
|
3516
|
+
/* @__PURE__ */ jsx321(
|
|
3418
3517
|
"div",
|
|
3419
3518
|
{
|
|
3420
3519
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
3421
3520
|
onClick: onClose,
|
|
3422
|
-
children: /* @__PURE__ */
|
|
3521
|
+
children: /* @__PURE__ */ jsxs206(
|
|
3423
3522
|
"div",
|
|
3424
3523
|
{
|
|
3425
3524
|
className: clsx_default("lib-xplat-drawer", placement, size, stateClass),
|
|
@@ -3427,11 +3526,11 @@ var Drawer = (props) => {
|
|
|
3427
3526
|
"aria-modal": "true",
|
|
3428
3527
|
onClick: (e) => e.stopPropagation(),
|
|
3429
3528
|
children: [
|
|
3430
|
-
title && /* @__PURE__ */
|
|
3431
|
-
/* @__PURE__ */
|
|
3432
|
-
/* @__PURE__ */
|
|
3529
|
+
title && /* @__PURE__ */ jsxs206("div", { className: "drawer-header", children: [
|
|
3530
|
+
/* @__PURE__ */ jsx321("span", { className: "drawer-title", children: title }),
|
|
3531
|
+
/* @__PURE__ */ jsx321("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
3433
3532
|
] }),
|
|
3434
|
-
/* @__PURE__ */
|
|
3533
|
+
/* @__PURE__ */ jsx321("div", { className: "drawer-body", children })
|
|
3435
3534
|
]
|
|
3436
3535
|
}
|
|
3437
3536
|
)
|
|
@@ -3444,16 +3543,16 @@ Drawer.displayName = "Drawer";
|
|
|
3444
3543
|
var Drawer_default = Drawer;
|
|
3445
3544
|
|
|
3446
3545
|
// src/components/Dropdown/Dropdown.tsx
|
|
3447
|
-
import
|
|
3546
|
+
import React20 from "react";
|
|
3448
3547
|
|
|
3449
3548
|
// src/tokens/hooks/useAutoPosition.ts
|
|
3450
|
-
import
|
|
3549
|
+
import React18 from "react";
|
|
3451
3550
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
3452
|
-
const [position, setPosition] =
|
|
3551
|
+
const [position, setPosition] = React18.useState({
|
|
3453
3552
|
position: {},
|
|
3454
3553
|
direction: "bottom"
|
|
3455
3554
|
});
|
|
3456
|
-
const calculatePosition =
|
|
3555
|
+
const calculatePosition = React18.useCallback(() => {
|
|
3457
3556
|
if (!triggerRef.current || !popRef.current) return;
|
|
3458
3557
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
3459
3558
|
const popW = popRef.current.offsetWidth;
|
|
@@ -3480,13 +3579,13 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3480
3579
|
direction
|
|
3481
3580
|
});
|
|
3482
3581
|
}, [triggerRef, popRef]);
|
|
3483
|
-
|
|
3582
|
+
React18.useLayoutEffect(() => {
|
|
3484
3583
|
if (!enabled) return;
|
|
3485
3584
|
calculatePosition();
|
|
3486
3585
|
const raf = requestAnimationFrame(calculatePosition);
|
|
3487
3586
|
return () => cancelAnimationFrame(raf);
|
|
3488
3587
|
}, [calculatePosition, enabled]);
|
|
3489
|
-
|
|
3588
|
+
React18.useEffect(() => {
|
|
3490
3589
|
if (!enabled || !popRef.current) return;
|
|
3491
3590
|
const observer = new ResizeObserver(() => {
|
|
3492
3591
|
calculatePosition();
|
|
@@ -3494,7 +3593,7 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3494
3593
|
observer.observe(popRef.current);
|
|
3495
3594
|
return () => observer.disconnect();
|
|
3496
3595
|
}, [calculatePosition, enabled, popRef]);
|
|
3497
|
-
|
|
3596
|
+
React18.useEffect(() => {
|
|
3498
3597
|
if (!enabled) return;
|
|
3499
3598
|
window.addEventListener("resize", calculatePosition);
|
|
3500
3599
|
window.addEventListener("scroll", calculatePosition, true);
|
|
@@ -3508,9 +3607,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3508
3607
|
var useAutoPosition_default = useAutoPosition;
|
|
3509
3608
|
|
|
3510
3609
|
// src/tokens/hooks/useClickOutside.ts
|
|
3511
|
-
import
|
|
3610
|
+
import React19 from "react";
|
|
3512
3611
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
3513
|
-
|
|
3612
|
+
React19.useEffect(() => {
|
|
3514
3613
|
if (!enabled) return;
|
|
3515
3614
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
3516
3615
|
const listener = (event) => {
|
|
@@ -3533,17 +3632,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
3533
3632
|
var useClickOutside_default = useClickOutside;
|
|
3534
3633
|
|
|
3535
3634
|
// src/components/Dropdown/Dropdown.tsx
|
|
3536
|
-
import { jsx as
|
|
3635
|
+
import { jsx as jsx322, jsxs as jsxs207 } from "react/jsx-runtime";
|
|
3537
3636
|
var Dropdown = (props) => {
|
|
3538
3637
|
const { items, children } = props;
|
|
3539
|
-
const [isOpen, setIsOpen] =
|
|
3540
|
-
const [mounted, setMounted] =
|
|
3541
|
-
const [visible, setVisible] =
|
|
3542
|
-
const triggerRef =
|
|
3543
|
-
const menuRef =
|
|
3638
|
+
const [isOpen, setIsOpen] = React20.useState(false);
|
|
3639
|
+
const [mounted, setMounted] = React20.useState(false);
|
|
3640
|
+
const [visible, setVisible] = React20.useState(false);
|
|
3641
|
+
const triggerRef = React20.useRef(null);
|
|
3642
|
+
const menuRef = React20.useRef(null);
|
|
3544
3643
|
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
3545
3644
|
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
3546
|
-
|
|
3645
|
+
React20.useEffect(() => {
|
|
3547
3646
|
if (isOpen) {
|
|
3548
3647
|
setMounted(true);
|
|
3549
3648
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3558,8 +3657,8 @@ var Dropdown = (props) => {
|
|
|
3558
3657
|
item.onClick?.();
|
|
3559
3658
|
setIsOpen(false);
|
|
3560
3659
|
};
|
|
3561
|
-
return /* @__PURE__ */
|
|
3562
|
-
/* @__PURE__ */
|
|
3660
|
+
return /* @__PURE__ */ jsxs207("div", { className: "lib-xplat-dropdown", children: [
|
|
3661
|
+
/* @__PURE__ */ jsx322(
|
|
3563
3662
|
"div",
|
|
3564
3663
|
{
|
|
3565
3664
|
ref: triggerRef,
|
|
@@ -3568,14 +3667,14 @@ var Dropdown = (props) => {
|
|
|
3568
3667
|
children
|
|
3569
3668
|
}
|
|
3570
3669
|
),
|
|
3571
|
-
mounted && /* @__PURE__ */
|
|
3670
|
+
mounted && /* @__PURE__ */ jsx322(Portal_default, { children: /* @__PURE__ */ jsx322(
|
|
3572
3671
|
"div",
|
|
3573
3672
|
{
|
|
3574
3673
|
ref: menuRef,
|
|
3575
3674
|
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
3576
3675
|
style: { top: position.top, left: position.left },
|
|
3577
3676
|
role: "menu",
|
|
3578
|
-
children: items.map((item) => /* @__PURE__ */
|
|
3677
|
+
children: items.map((item) => /* @__PURE__ */ jsx322(
|
|
3579
3678
|
"button",
|
|
3580
3679
|
{
|
|
3581
3680
|
className: clsx_default("dropdown-item", {
|
|
@@ -3597,23 +3696,23 @@ Dropdown.displayName = "Dropdown";
|
|
|
3597
3696
|
var Dropdown_default = Dropdown;
|
|
3598
3697
|
|
|
3599
3698
|
// src/components/EmptyState/EmptyState.tsx
|
|
3600
|
-
import { jsx as
|
|
3699
|
+
import { jsx as jsx323, jsxs as jsxs208 } from "react/jsx-runtime";
|
|
3601
3700
|
var EmptyState = (props) => {
|
|
3602
3701
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
3603
|
-
return /* @__PURE__ */
|
|
3604
|
-
icon && /* @__PURE__ */
|
|
3605
|
-
!icon && /* @__PURE__ */
|
|
3606
|
-
/* @__PURE__ */
|
|
3607
|
-
description && /* @__PURE__ */
|
|
3608
|
-
action && /* @__PURE__ */
|
|
3702
|
+
return /* @__PURE__ */ jsxs208("div", { className: "lib-xplat-empty-state", children: [
|
|
3703
|
+
icon && /* @__PURE__ */ jsx323("div", { className: "empty-icon", children: icon }),
|
|
3704
|
+
!icon && /* @__PURE__ */ jsx323("div", { className: "empty-icon", children: /* @__PURE__ */ jsx323("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx323("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" }) }) }),
|
|
3705
|
+
/* @__PURE__ */ jsx323("p", { className: "empty-title", children: title }),
|
|
3706
|
+
description && /* @__PURE__ */ jsx323("p", { className: "empty-description", children: description }),
|
|
3707
|
+
action && /* @__PURE__ */ jsx323("div", { className: "empty-action", children: action })
|
|
3609
3708
|
] });
|
|
3610
3709
|
};
|
|
3611
3710
|
EmptyState.displayName = "EmptyState";
|
|
3612
3711
|
var EmptyState_default = EmptyState;
|
|
3613
3712
|
|
|
3614
3713
|
// src/components/FileUpload/FileUpload.tsx
|
|
3615
|
-
import
|
|
3616
|
-
import { jsx as
|
|
3714
|
+
import React21 from "react";
|
|
3715
|
+
import { jsx as jsx324, jsxs as jsxs209 } from "react/jsx-runtime";
|
|
3617
3716
|
var FileUpload = (props) => {
|
|
3618
3717
|
const {
|
|
3619
3718
|
accept,
|
|
@@ -3623,8 +3722,8 @@ var FileUpload = (props) => {
|
|
|
3623
3722
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
3624
3723
|
description
|
|
3625
3724
|
} = props;
|
|
3626
|
-
const [isDragOver, setIsDragOver] =
|
|
3627
|
-
const inputRef =
|
|
3725
|
+
const [isDragOver, setIsDragOver] = React21.useState(false);
|
|
3726
|
+
const inputRef = React21.useRef(null);
|
|
3628
3727
|
const handleFiles = (fileList) => {
|
|
3629
3728
|
let files = Array.from(fileList);
|
|
3630
3729
|
if (maxSize) {
|
|
@@ -3654,7 +3753,7 @@ var FileUpload = (props) => {
|
|
|
3654
3753
|
handleFiles(e.target.files);
|
|
3655
3754
|
}
|
|
3656
3755
|
};
|
|
3657
|
-
return /* @__PURE__ */
|
|
3756
|
+
return /* @__PURE__ */ jsxs209(
|
|
3658
3757
|
"div",
|
|
3659
3758
|
{
|
|
3660
3759
|
className: clsx_default("lib-xplat-file-upload", { "drag-over": isDragOver }),
|
|
@@ -3663,7 +3762,7 @@ var FileUpload = (props) => {
|
|
|
3663
3762
|
onDragLeave: handleDragLeave,
|
|
3664
3763
|
onClick: () => inputRef.current?.click(),
|
|
3665
3764
|
children: [
|
|
3666
|
-
/* @__PURE__ */
|
|
3765
|
+
/* @__PURE__ */ jsx324(
|
|
3667
3766
|
"input",
|
|
3668
3767
|
{
|
|
3669
3768
|
ref: inputRef,
|
|
@@ -3673,9 +3772,9 @@ var FileUpload = (props) => {
|
|
|
3673
3772
|
onChange: handleChange
|
|
3674
3773
|
}
|
|
3675
3774
|
),
|
|
3676
|
-
/* @__PURE__ */
|
|
3677
|
-
/* @__PURE__ */
|
|
3678
|
-
description && /* @__PURE__ */
|
|
3775
|
+
/* @__PURE__ */ jsx324("div", { className: "upload-icon", children: /* @__PURE__ */ jsx324(UploadIcon_default, {}) }),
|
|
3776
|
+
/* @__PURE__ */ jsx324("p", { className: "upload-label", children: label }),
|
|
3777
|
+
description && /* @__PURE__ */ jsx324("p", { className: "upload-description", children: description })
|
|
3679
3778
|
]
|
|
3680
3779
|
}
|
|
3681
3780
|
);
|
|
@@ -3684,10 +3783,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
3684
3783
|
var FileUpload_default = FileUpload;
|
|
3685
3784
|
|
|
3686
3785
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
3687
|
-
import
|
|
3786
|
+
import React23 from "react";
|
|
3688
3787
|
|
|
3689
3788
|
// src/components/HtmlTypeWriter/utils.ts
|
|
3690
|
-
import
|
|
3789
|
+
import React22 from "react";
|
|
3691
3790
|
var voidTags = /* @__PURE__ */ new Set([
|
|
3692
3791
|
"br",
|
|
3693
3792
|
"img",
|
|
@@ -3755,41 +3854,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
3755
3854
|
props[attr.name] = attr.value;
|
|
3756
3855
|
});
|
|
3757
3856
|
if (voidTags.has(tag)) {
|
|
3758
|
-
return
|
|
3857
|
+
return React22.createElement(tag, props);
|
|
3759
3858
|
}
|
|
3760
3859
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
3761
|
-
return
|
|
3860
|
+
return React22.createElement(tag, props, ...children);
|
|
3762
3861
|
};
|
|
3763
3862
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
3764
3863
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
3765
3864
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
3766
|
-
return node == null ? null :
|
|
3865
|
+
return node == null ? null : React22.createElement(React22.Fragment, { key: idx }, node);
|
|
3767
3866
|
}).filter(Boolean);
|
|
3768
3867
|
return nodes.length === 0 ? null : nodes;
|
|
3769
3868
|
};
|
|
3770
3869
|
|
|
3771
3870
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
3772
|
-
import { jsx as
|
|
3871
|
+
import { jsx as jsx325 } from "react/jsx-runtime";
|
|
3773
3872
|
var HtmlTypeWriter = ({
|
|
3774
3873
|
html,
|
|
3775
3874
|
duration = 20,
|
|
3776
3875
|
onDone,
|
|
3777
3876
|
onChange
|
|
3778
3877
|
}) => {
|
|
3779
|
-
const [typedLen, setTypedLen] =
|
|
3780
|
-
const doneCalledRef =
|
|
3781
|
-
const { doc, rangeMap, totalLength } =
|
|
3878
|
+
const [typedLen, setTypedLen] = React23.useState(0);
|
|
3879
|
+
const doneCalledRef = React23.useRef(false);
|
|
3880
|
+
const { doc, rangeMap, totalLength } = React23.useMemo(() => {
|
|
3782
3881
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
3783
3882
|
const decoded = decodeHtmlEntities(html);
|
|
3784
3883
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
3785
3884
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
3786
3885
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
3787
3886
|
}, [html]);
|
|
3788
|
-
|
|
3887
|
+
React23.useEffect(() => {
|
|
3789
3888
|
setTypedLen(0);
|
|
3790
3889
|
doneCalledRef.current = false;
|
|
3791
3890
|
}, [html]);
|
|
3792
|
-
|
|
3891
|
+
React23.useEffect(() => {
|
|
3793
3892
|
if (!totalLength) return;
|
|
3794
3893
|
if (typedLen >= totalLength) return;
|
|
3795
3894
|
const timer = window.setInterval(() => {
|
|
@@ -3797,33 +3896,33 @@ var HtmlTypeWriter = ({
|
|
|
3797
3896
|
}, duration);
|
|
3798
3897
|
return () => window.clearInterval(timer);
|
|
3799
3898
|
}, [typedLen, totalLength, duration]);
|
|
3800
|
-
|
|
3899
|
+
React23.useEffect(() => {
|
|
3801
3900
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
3802
3901
|
onChange?.();
|
|
3803
3902
|
}
|
|
3804
3903
|
}, [typedLen, totalLength, onChange]);
|
|
3805
|
-
|
|
3904
|
+
React23.useEffect(() => {
|
|
3806
3905
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
3807
3906
|
doneCalledRef.current = true;
|
|
3808
3907
|
onDone?.();
|
|
3809
3908
|
}
|
|
3810
3909
|
}, [typedLen, totalLength, onDone]);
|
|
3811
|
-
const parsed =
|
|
3910
|
+
const parsed = React23.useMemo(
|
|
3812
3911
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
3813
3912
|
[doc, typedLen, rangeMap]
|
|
3814
3913
|
);
|
|
3815
|
-
return /* @__PURE__ */
|
|
3914
|
+
return /* @__PURE__ */ jsx325("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
3816
3915
|
};
|
|
3817
3916
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
3818
3917
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
3819
3918
|
|
|
3820
3919
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
3821
|
-
import
|
|
3822
|
-
import { jsx as
|
|
3920
|
+
import React24 from "react";
|
|
3921
|
+
import { jsx as jsx326, jsxs as jsxs210 } from "react/jsx-runtime";
|
|
3823
3922
|
var ImageSelector = (props) => {
|
|
3824
3923
|
const { value, label, onChange } = props;
|
|
3825
|
-
const [previewUrl, setPreviewUrl] =
|
|
3826
|
-
|
|
3924
|
+
const [previewUrl, setPreviewUrl] = React24.useState();
|
|
3925
|
+
React24.useEffect(() => {
|
|
3827
3926
|
if (!value) {
|
|
3828
3927
|
setPreviewUrl(void 0);
|
|
3829
3928
|
return;
|
|
@@ -3832,7 +3931,7 @@ var ImageSelector = (props) => {
|
|
|
3832
3931
|
setPreviewUrl(url);
|
|
3833
3932
|
return () => URL.revokeObjectURL(url);
|
|
3834
3933
|
}, [value]);
|
|
3835
|
-
const inputRef =
|
|
3934
|
+
const inputRef = React24.useRef(null);
|
|
3836
3935
|
const handleFileChange = (e) => {
|
|
3837
3936
|
const selectedFile = e.target.files?.[0];
|
|
3838
3937
|
if (selectedFile) {
|
|
@@ -3845,8 +3944,8 @@ var ImageSelector = (props) => {
|
|
|
3845
3944
|
const handleOpenFileDialog = () => {
|
|
3846
3945
|
inputRef.current?.click();
|
|
3847
3946
|
};
|
|
3848
|
-
return /* @__PURE__ */
|
|
3849
|
-
/* @__PURE__ */
|
|
3947
|
+
return /* @__PURE__ */ jsxs210("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
3948
|
+
/* @__PURE__ */ jsx326(
|
|
3850
3949
|
"input",
|
|
3851
3950
|
{
|
|
3852
3951
|
type: "file",
|
|
@@ -3856,13 +3955,13 @@ var ImageSelector = (props) => {
|
|
|
3856
3955
|
ref: inputRef
|
|
3857
3956
|
}
|
|
3858
3957
|
),
|
|
3859
|
-
value && /* @__PURE__ */
|
|
3860
|
-
/* @__PURE__ */
|
|
3861
|
-
/* @__PURE__ */
|
|
3958
|
+
value && /* @__PURE__ */ jsxs210("div", { className: "action-bar", children: [
|
|
3959
|
+
/* @__PURE__ */ jsx326("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ jsx326(UploadIcon_default, {}) }),
|
|
3960
|
+
/* @__PURE__ */ jsx326("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ jsx326(DeleteIcon_default, {}) })
|
|
3862
3961
|
] }),
|
|
3863
|
-
/* @__PURE__ */
|
|
3864
|
-
/* @__PURE__ */
|
|
3865
|
-
/* @__PURE__ */
|
|
3962
|
+
/* @__PURE__ */ jsx326("div", { className: "content", children: previewUrl ? /* @__PURE__ */ jsx326("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ jsxs210("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
|
|
3963
|
+
/* @__PURE__ */ jsx326("div", { className: "icon-wrapper", children: /* @__PURE__ */ jsx326(ImageIcon_default, {}) }),
|
|
3964
|
+
/* @__PURE__ */ jsx326("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
3866
3965
|
] }) })
|
|
3867
3966
|
] });
|
|
3868
3967
|
};
|
|
@@ -3870,7 +3969,7 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
3870
3969
|
var ImageSelector_default = ImageSelector;
|
|
3871
3970
|
|
|
3872
3971
|
// src/components/Pagination/Pagination.tsx
|
|
3873
|
-
import { jsx as
|
|
3972
|
+
import { jsx as jsx327, jsxs as jsxs211 } from "react/jsx-runtime";
|
|
3874
3973
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
3875
3974
|
const totalNumbers = siblingCount * 2 + 5;
|
|
3876
3975
|
if (totalPages <= totalNumbers) {
|
|
@@ -3913,19 +4012,19 @@ var Pagination = (props) => {
|
|
|
3913
4012
|
onChange?.(page);
|
|
3914
4013
|
}
|
|
3915
4014
|
};
|
|
3916
|
-
return /* @__PURE__ */
|
|
3917
|
-
/* @__PURE__ */
|
|
4015
|
+
return /* @__PURE__ */ jsxs211("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
4016
|
+
/* @__PURE__ */ jsx327(
|
|
3918
4017
|
"button",
|
|
3919
4018
|
{
|
|
3920
4019
|
className: "page-btn prev",
|
|
3921
4020
|
disabled: current <= 1,
|
|
3922
4021
|
onClick: () => handleClick(current - 1),
|
|
3923
4022
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
3924
|
-
children: /* @__PURE__ */
|
|
4023
|
+
children: /* @__PURE__ */ jsx327(ChevronLeftIcon_default, {})
|
|
3925
4024
|
}
|
|
3926
4025
|
),
|
|
3927
4026
|
pages.map(
|
|
3928
|
-
(page, i) => page === "..." ? /* @__PURE__ */
|
|
4027
|
+
(page, i) => page === "..." ? /* @__PURE__ */ jsx327("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ jsx327(
|
|
3929
4028
|
"button",
|
|
3930
4029
|
{
|
|
3931
4030
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -3936,14 +4035,14 @@ var Pagination = (props) => {
|
|
|
3936
4035
|
page
|
|
3937
4036
|
)
|
|
3938
4037
|
),
|
|
3939
|
-
/* @__PURE__ */
|
|
4038
|
+
/* @__PURE__ */ jsx327(
|
|
3940
4039
|
"button",
|
|
3941
4040
|
{
|
|
3942
4041
|
className: "page-btn next",
|
|
3943
4042
|
disabled: current >= totalPages,
|
|
3944
4043
|
onClick: () => handleClick(current + 1),
|
|
3945
4044
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
3946
|
-
children: /* @__PURE__ */
|
|
4045
|
+
children: /* @__PURE__ */ jsx327(ChevronRightIcon_default, {})
|
|
3947
4046
|
}
|
|
3948
4047
|
)
|
|
3949
4048
|
] });
|
|
@@ -3952,17 +4051,17 @@ Pagination.displayName = "Pagination";
|
|
|
3952
4051
|
var Pagination_default = Pagination;
|
|
3953
4052
|
|
|
3954
4053
|
// src/components/PopOver/PopOver.tsx
|
|
3955
|
-
import
|
|
3956
|
-
import { jsx as
|
|
4054
|
+
import React25 from "react";
|
|
4055
|
+
import { jsx as jsx328, jsxs as jsxs212 } from "react/jsx-runtime";
|
|
3957
4056
|
var PopOver = (props) => {
|
|
3958
4057
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
3959
|
-
const popRef =
|
|
3960
|
-
const triggerRef =
|
|
3961
|
-
const [localOpen, setLocalOpen] =
|
|
3962
|
-
const [eventTrigger, setEventTrigger] =
|
|
4058
|
+
const popRef = React25.useRef(null);
|
|
4059
|
+
const triggerRef = React25.useRef(null);
|
|
4060
|
+
const [localOpen, setLocalOpen] = React25.useState(false);
|
|
4061
|
+
const [eventTrigger, setEventTrigger] = React25.useState(false);
|
|
3963
4062
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
3964
4063
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
3965
|
-
|
|
4064
|
+
React25.useEffect(() => {
|
|
3966
4065
|
if (isOpen) {
|
|
3967
4066
|
setLocalOpen(isOpen);
|
|
3968
4067
|
setTimeout(() => {
|
|
@@ -3975,7 +4074,7 @@ var PopOver = (props) => {
|
|
|
3975
4074
|
}, 200);
|
|
3976
4075
|
}
|
|
3977
4076
|
}, [isOpen]);
|
|
3978
|
-
return /* @__PURE__ */
|
|
4077
|
+
return /* @__PURE__ */ jsxs212(
|
|
3979
4078
|
"div",
|
|
3980
4079
|
{
|
|
3981
4080
|
className: "lib-xplat-pop-over",
|
|
@@ -3985,7 +4084,7 @@ var PopOver = (props) => {
|
|
|
3985
4084
|
},
|
|
3986
4085
|
children: [
|
|
3987
4086
|
children,
|
|
3988
|
-
localOpen && /* @__PURE__ */
|
|
4087
|
+
localOpen && /* @__PURE__ */ jsx328(Portal_default, { children: /* @__PURE__ */ jsx328(
|
|
3989
4088
|
"div",
|
|
3990
4089
|
{
|
|
3991
4090
|
className: clsx_default(
|
|
@@ -4008,7 +4107,7 @@ PopOver.displayName = "PopOver";
|
|
|
4008
4107
|
var PopOver_default = PopOver;
|
|
4009
4108
|
|
|
4010
4109
|
// src/components/Progress/Progress.tsx
|
|
4011
|
-
import { jsx as
|
|
4110
|
+
import { jsx as jsx329, jsxs as jsxs213 } from "react/jsx-runtime";
|
|
4012
4111
|
var Progress = (props) => {
|
|
4013
4112
|
const {
|
|
4014
4113
|
value,
|
|
@@ -4018,8 +4117,8 @@ var Progress = (props) => {
|
|
|
4018
4117
|
showLabel = false
|
|
4019
4118
|
} = props;
|
|
4020
4119
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
4021
|
-
return /* @__PURE__ */
|
|
4022
|
-
/* @__PURE__ */
|
|
4120
|
+
return /* @__PURE__ */ jsxs213("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
4121
|
+
/* @__PURE__ */ jsx329(
|
|
4023
4122
|
"div",
|
|
4024
4123
|
{
|
|
4025
4124
|
className: "track",
|
|
@@ -4027,7 +4126,7 @@ var Progress = (props) => {
|
|
|
4027
4126
|
"aria-valuenow": value,
|
|
4028
4127
|
"aria-valuemin": 0,
|
|
4029
4128
|
"aria-valuemax": max,
|
|
4030
|
-
children: /* @__PURE__ */
|
|
4129
|
+
children: /* @__PURE__ */ jsx329(
|
|
4031
4130
|
"div",
|
|
4032
4131
|
{
|
|
4033
4132
|
className: "bar",
|
|
@@ -4036,7 +4135,7 @@ var Progress = (props) => {
|
|
|
4036
4135
|
)
|
|
4037
4136
|
}
|
|
4038
4137
|
),
|
|
4039
|
-
showLabel && /* @__PURE__ */
|
|
4138
|
+
showLabel && /* @__PURE__ */ jsxs213("span", { className: "label", children: [
|
|
4040
4139
|
Math.round(percentage),
|
|
4041
4140
|
"%"
|
|
4042
4141
|
] })
|
|
@@ -4046,17 +4145,17 @@ Progress.displayName = "Progress";
|
|
|
4046
4145
|
var Progress_default = Progress;
|
|
4047
4146
|
|
|
4048
4147
|
// src/components/Radio/RadioGroupContext.tsx
|
|
4049
|
-
import
|
|
4050
|
-
var RadioGroupContext =
|
|
4148
|
+
import React26 from "react";
|
|
4149
|
+
var RadioGroupContext = React26.createContext(
|
|
4051
4150
|
null
|
|
4052
4151
|
);
|
|
4053
4152
|
var useRadioGroupContext = () => {
|
|
4054
|
-
return
|
|
4153
|
+
return React26.useContext(RadioGroupContext);
|
|
4055
4154
|
};
|
|
4056
4155
|
var RadioGroupContext_default = RadioGroupContext;
|
|
4057
4156
|
|
|
4058
4157
|
// src/components/Radio/Radio.tsx
|
|
4059
|
-
import { jsx as
|
|
4158
|
+
import { jsx as jsx330, jsxs as jsxs214 } from "react/jsx-runtime";
|
|
4060
4159
|
var Radio = (props) => {
|
|
4061
4160
|
const {
|
|
4062
4161
|
label,
|
|
@@ -4074,7 +4173,7 @@ var Radio = (props) => {
|
|
|
4074
4173
|
value,
|
|
4075
4174
|
onChange: rest.onChange
|
|
4076
4175
|
};
|
|
4077
|
-
return /* @__PURE__ */
|
|
4176
|
+
return /* @__PURE__ */ jsxs214(
|
|
4078
4177
|
"label",
|
|
4079
4178
|
{
|
|
4080
4179
|
className: clsx_default(
|
|
@@ -4084,18 +4183,18 @@ var Radio = (props) => {
|
|
|
4084
4183
|
localChecked ? "checked" : void 0
|
|
4085
4184
|
),
|
|
4086
4185
|
children: [
|
|
4087
|
-
/* @__PURE__ */
|
|
4088
|
-
/* @__PURE__ */
|
|
4186
|
+
/* @__PURE__ */ jsx330("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
4187
|
+
/* @__PURE__ */ jsx330(
|
|
4089
4188
|
"div",
|
|
4090
4189
|
{
|
|
4091
4190
|
className: clsx_default(
|
|
4092
4191
|
"circle",
|
|
4093
4192
|
localChecked ? "checked" : void 0
|
|
4094
4193
|
),
|
|
4095
|
-
children: localChecked && /* @__PURE__ */
|
|
4194
|
+
children: localChecked && /* @__PURE__ */ jsx330("div", { className: "inner-circle" })
|
|
4096
4195
|
}
|
|
4097
4196
|
),
|
|
4098
|
-
label && /* @__PURE__ */
|
|
4197
|
+
label && /* @__PURE__ */ jsx330("span", { children: label })
|
|
4099
4198
|
]
|
|
4100
4199
|
}
|
|
4101
4200
|
);
|
|
@@ -4104,28 +4203,28 @@ Radio.displayName = "Radio";
|
|
|
4104
4203
|
var Radio_default = Radio;
|
|
4105
4204
|
|
|
4106
4205
|
// src/components/Radio/RadioGroup.tsx
|
|
4107
|
-
import { Fragment as Fragment4, jsx as
|
|
4206
|
+
import { Fragment as Fragment4, jsx as jsx331 } from "react/jsx-runtime";
|
|
4108
4207
|
var RadioGroup = (props) => {
|
|
4109
4208
|
const { children, ...rest } = props;
|
|
4110
|
-
return /* @__PURE__ */
|
|
4209
|
+
return /* @__PURE__ */ jsx331(Fragment4, { children: /* @__PURE__ */ jsx331(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
4111
4210
|
};
|
|
4112
4211
|
RadioGroup.displayName = "RadioGroup";
|
|
4113
4212
|
var RadioGroup_default = RadioGroup;
|
|
4114
4213
|
|
|
4115
4214
|
// src/components/Select/Select.tsx
|
|
4116
|
-
import
|
|
4215
|
+
import React29 from "react";
|
|
4117
4216
|
|
|
4118
4217
|
// src/components/Select/context.ts
|
|
4119
|
-
import
|
|
4120
|
-
var SelectContext =
|
|
4218
|
+
import React27 from "react";
|
|
4219
|
+
var SelectContext = React27.createContext(null);
|
|
4121
4220
|
var context_default = SelectContext;
|
|
4122
4221
|
|
|
4123
4222
|
// src/components/Select/SelectItem.tsx
|
|
4124
|
-
import
|
|
4125
|
-
import { jsx as
|
|
4223
|
+
import React28 from "react";
|
|
4224
|
+
import { jsx as jsx332 } from "react/jsx-runtime";
|
|
4126
4225
|
var SelectItem = (props) => {
|
|
4127
4226
|
const { children, value, onClick, disabled = false } = props;
|
|
4128
|
-
const ctx =
|
|
4227
|
+
const ctx = React28.useContext(context_default);
|
|
4129
4228
|
const handleClick = (e) => {
|
|
4130
4229
|
e.preventDefault();
|
|
4131
4230
|
e.stopPropagation();
|
|
@@ -4134,7 +4233,7 @@ var SelectItem = (props) => {
|
|
|
4134
4233
|
ctx?.close();
|
|
4135
4234
|
onClick?.();
|
|
4136
4235
|
};
|
|
4137
|
-
return /* @__PURE__ */
|
|
4236
|
+
return /* @__PURE__ */ jsx332(
|
|
4138
4237
|
"div",
|
|
4139
4238
|
{
|
|
4140
4239
|
className: clsx_default("select-item", disabled && "disabled"),
|
|
@@ -4155,7 +4254,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
4155
4254
|
var SelectItem_default = SelectItem;
|
|
4156
4255
|
|
|
4157
4256
|
// src/components/Select/Select.tsx
|
|
4158
|
-
import { jsx as
|
|
4257
|
+
import { jsx as jsx333, jsxs as jsxs215 } from "react/jsx-runtime";
|
|
4159
4258
|
var ANIMATION_DURATION_MS3 = 200;
|
|
4160
4259
|
var SelectRoot = (props) => {
|
|
4161
4260
|
const {
|
|
@@ -4167,26 +4266,26 @@ var SelectRoot = (props) => {
|
|
|
4167
4266
|
error = false,
|
|
4168
4267
|
size = "md"
|
|
4169
4268
|
} = props;
|
|
4170
|
-
const itemChildren =
|
|
4171
|
-
(child) =>
|
|
4269
|
+
const itemChildren = React29.Children.toArray(children).filter(
|
|
4270
|
+
(child) => React29.isValidElement(child) && child.type === SelectItem_default
|
|
4172
4271
|
);
|
|
4173
4272
|
const isControlled = valueProp !== void 0;
|
|
4174
|
-
const [isOpen, setOpen] =
|
|
4175
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
4176
|
-
const controlledLabel =
|
|
4273
|
+
const [isOpen, setOpen] = React29.useState(false);
|
|
4274
|
+
const [uncontrolledLabel, setUncontrolledLabel] = React29.useState(null);
|
|
4275
|
+
const controlledLabel = React29.useMemo(() => {
|
|
4177
4276
|
if (!isControlled) return null;
|
|
4178
4277
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
4179
4278
|
return match ? match.props.children : null;
|
|
4180
4279
|
}, [isControlled, valueProp, itemChildren]);
|
|
4181
4280
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
4182
|
-
const triggerRef =
|
|
4183
|
-
const contentRef =
|
|
4184
|
-
const [mounted, setMounted] =
|
|
4185
|
-
const [visible, setVisible] =
|
|
4186
|
-
|
|
4281
|
+
const triggerRef = React29.useRef(null);
|
|
4282
|
+
const contentRef = React29.useRef(null);
|
|
4283
|
+
const [mounted, setMounted] = React29.useState(false);
|
|
4284
|
+
const [visible, setVisible] = React29.useState(false);
|
|
4285
|
+
React29.useEffect(() => {
|
|
4187
4286
|
if (disabled && isOpen) setOpen(false);
|
|
4188
4287
|
}, [disabled, isOpen]);
|
|
4189
|
-
|
|
4288
|
+
React29.useEffect(() => {
|
|
4190
4289
|
if (isOpen) {
|
|
4191
4290
|
setMounted(true);
|
|
4192
4291
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -4196,12 +4295,12 @@ var SelectRoot = (props) => {
|
|
|
4196
4295
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
4197
4296
|
return () => clearTimeout(t);
|
|
4198
4297
|
}, [isOpen]);
|
|
4199
|
-
const open =
|
|
4200
|
-
const close =
|
|
4201
|
-
const toggle =
|
|
4298
|
+
const open = React29.useCallback(() => setOpen(true), []);
|
|
4299
|
+
const close = React29.useCallback(() => setOpen(false), []);
|
|
4300
|
+
const toggle = React29.useCallback(() => setOpen((prev) => !prev), []);
|
|
4202
4301
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
4203
4302
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
4204
|
-
const setSelected =
|
|
4303
|
+
const setSelected = React29.useCallback(
|
|
4205
4304
|
(label, itemValue) => {
|
|
4206
4305
|
if (!isControlled) {
|
|
4207
4306
|
setUncontrolledLabel(label);
|
|
@@ -4210,7 +4309,7 @@ var SelectRoot = (props) => {
|
|
|
4210
4309
|
},
|
|
4211
4310
|
[isControlled, onChange]
|
|
4212
4311
|
);
|
|
4213
|
-
const ctxValue =
|
|
4312
|
+
const ctxValue = React29.useMemo(
|
|
4214
4313
|
() => ({
|
|
4215
4314
|
isOpen,
|
|
4216
4315
|
mounted,
|
|
@@ -4231,7 +4330,7 @@ var SelectRoot = (props) => {
|
|
|
4231
4330
|
if (disabled) return;
|
|
4232
4331
|
toggle();
|
|
4233
4332
|
};
|
|
4234
|
-
return /* @__PURE__ */
|
|
4333
|
+
return /* @__PURE__ */ jsx333(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs215(
|
|
4235
4334
|
"div",
|
|
4236
4335
|
{
|
|
4237
4336
|
className: clsx_default(
|
|
@@ -4242,7 +4341,7 @@ var SelectRoot = (props) => {
|
|
|
4242
4341
|
mounted && "is-open"
|
|
4243
4342
|
),
|
|
4244
4343
|
children: [
|
|
4245
|
-
/* @__PURE__ */
|
|
4344
|
+
/* @__PURE__ */ jsxs215(
|
|
4246
4345
|
"div",
|
|
4247
4346
|
{
|
|
4248
4347
|
ref: triggerRef,
|
|
@@ -4266,7 +4365,7 @@ var SelectRoot = (props) => {
|
|
|
4266
4365
|
}
|
|
4267
4366
|
},
|
|
4268
4367
|
children: [
|
|
4269
|
-
/* @__PURE__ */
|
|
4368
|
+
/* @__PURE__ */ jsx333(
|
|
4270
4369
|
"span",
|
|
4271
4370
|
{
|
|
4272
4371
|
className: clsx_default(
|
|
@@ -4276,25 +4375,25 @@ var SelectRoot = (props) => {
|
|
|
4276
4375
|
children: selectedLabel ?? placeholder
|
|
4277
4376
|
}
|
|
4278
4377
|
),
|
|
4279
|
-
/* @__PURE__ */
|
|
4378
|
+
/* @__PURE__ */ jsx333(
|
|
4280
4379
|
"span",
|
|
4281
4380
|
{
|
|
4282
4381
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
4283
4382
|
"aria-hidden": true,
|
|
4284
|
-
children: /* @__PURE__ */
|
|
4383
|
+
children: /* @__PURE__ */ jsx333(ChevronDownIcon_default, {})
|
|
4285
4384
|
}
|
|
4286
4385
|
)
|
|
4287
4386
|
]
|
|
4288
4387
|
}
|
|
4289
4388
|
),
|
|
4290
|
-
mounted && /* @__PURE__ */
|
|
4389
|
+
mounted && /* @__PURE__ */ jsx333(Portal_default, { children: /* @__PURE__ */ jsx333(
|
|
4291
4390
|
"div",
|
|
4292
4391
|
{
|
|
4293
4392
|
className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
|
|
4294
4393
|
ref: contentRef,
|
|
4295
4394
|
style: { ...position.position, width: triggerRef.current?.offsetWidth },
|
|
4296
4395
|
role: "listbox",
|
|
4297
|
-
children: /* @__PURE__ */
|
|
4396
|
+
children: /* @__PURE__ */ jsx333(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
4298
4397
|
}
|
|
4299
4398
|
) })
|
|
4300
4399
|
]
|
|
@@ -4308,7 +4407,7 @@ var Select = Object.assign(SelectRoot, {
|
|
|
4308
4407
|
var Select_default = Select;
|
|
4309
4408
|
|
|
4310
4409
|
// src/components/Skeleton/Skeleton.tsx
|
|
4311
|
-
import { jsx as
|
|
4410
|
+
import { jsx as jsx334 } from "react/jsx-runtime";
|
|
4312
4411
|
var SIZE_MAP = {
|
|
4313
4412
|
xs: "var(--spacing-size-1)",
|
|
4314
4413
|
sm: "var(--spacing-size-2)",
|
|
@@ -4324,7 +4423,7 @@ var Skeleton = (props) => {
|
|
|
4324
4423
|
...width != null && { width: SIZE_MAP[width] },
|
|
4325
4424
|
...height != null && { height: SIZE_MAP[height] }
|
|
4326
4425
|
};
|
|
4327
|
-
return /* @__PURE__ */
|
|
4426
|
+
return /* @__PURE__ */ jsx334(
|
|
4328
4427
|
"div",
|
|
4329
4428
|
{
|
|
4330
4429
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -4337,20 +4436,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
4337
4436
|
var Skeleton_default = Skeleton;
|
|
4338
4437
|
|
|
4339
4438
|
// src/components/Spinner/Spinner.tsx
|
|
4340
|
-
import { jsx as
|
|
4439
|
+
import { jsx as jsx335, jsxs as jsxs216 } from "react/jsx-runtime";
|
|
4341
4440
|
var Spinner = (props) => {
|
|
4342
4441
|
const {
|
|
4343
4442
|
size = "md",
|
|
4344
4443
|
type = "brand"
|
|
4345
4444
|
} = props;
|
|
4346
|
-
return /* @__PURE__ */
|
|
4445
|
+
return /* @__PURE__ */ jsx335(
|
|
4347
4446
|
"div",
|
|
4348
4447
|
{
|
|
4349
4448
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
4350
4449
|
role: "status",
|
|
4351
4450
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
4352
|
-
children: /* @__PURE__ */
|
|
4353
|
-
/* @__PURE__ */
|
|
4451
|
+
children: /* @__PURE__ */ jsxs216("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
4452
|
+
/* @__PURE__ */ jsx335(
|
|
4354
4453
|
"circle",
|
|
4355
4454
|
{
|
|
4356
4455
|
className: "track",
|
|
@@ -4360,7 +4459,7 @@ var Spinner = (props) => {
|
|
|
4360
4459
|
strokeWidth: "3"
|
|
4361
4460
|
}
|
|
4362
4461
|
),
|
|
4363
|
-
/* @__PURE__ */
|
|
4462
|
+
/* @__PURE__ */ jsx335(
|
|
4364
4463
|
"circle",
|
|
4365
4464
|
{
|
|
4366
4465
|
className: "indicator",
|
|
@@ -4379,20 +4478,20 @@ Spinner.displayName = "Spinner";
|
|
|
4379
4478
|
var Spinner_default = Spinner;
|
|
4380
4479
|
|
|
4381
4480
|
// src/components/Steps/Steps.tsx
|
|
4382
|
-
import { jsx as
|
|
4481
|
+
import { jsx as jsx336, jsxs as jsxs217 } from "react/jsx-runtime";
|
|
4383
4482
|
var Steps = (props) => {
|
|
4384
4483
|
const {
|
|
4385
4484
|
items,
|
|
4386
4485
|
current,
|
|
4387
4486
|
type = "brand"
|
|
4388
4487
|
} = props;
|
|
4389
|
-
return /* @__PURE__ */
|
|
4488
|
+
return /* @__PURE__ */ jsx336("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
4390
4489
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
4391
|
-
return /* @__PURE__ */
|
|
4392
|
-
/* @__PURE__ */
|
|
4393
|
-
/* @__PURE__ */
|
|
4394
|
-
/* @__PURE__ */
|
|
4395
|
-
item.description && /* @__PURE__ */
|
|
4490
|
+
return /* @__PURE__ */ jsxs217("div", { className: clsx_default("step-item", status), children: [
|
|
4491
|
+
/* @__PURE__ */ jsx336("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ jsx336(CheckIcon_default, {}) : /* @__PURE__ */ jsx336("span", { children: index + 1 }) }),
|
|
4492
|
+
/* @__PURE__ */ jsxs217("div", { className: "step-content", children: [
|
|
4493
|
+
/* @__PURE__ */ jsx336("span", { className: "step-title", children: item.title }),
|
|
4494
|
+
item.description && /* @__PURE__ */ jsx336("span", { className: "step-description", children: item.description })
|
|
4396
4495
|
] })
|
|
4397
4496
|
] }, index);
|
|
4398
4497
|
}) });
|
|
@@ -4401,8 +4500,8 @@ Steps.displayName = "Steps";
|
|
|
4401
4500
|
var Steps_default = Steps;
|
|
4402
4501
|
|
|
4403
4502
|
// src/components/Swiper/Swiper.tsx
|
|
4404
|
-
import
|
|
4405
|
-
import { jsx as
|
|
4503
|
+
import React30 from "react";
|
|
4504
|
+
import { jsx as jsx337, jsxs as jsxs218 } from "react/jsx-runtime";
|
|
4406
4505
|
var Swiper = (props) => {
|
|
4407
4506
|
const {
|
|
4408
4507
|
auto = false,
|
|
@@ -4425,23 +4524,23 @@ var Swiper = (props) => {
|
|
|
4425
4524
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
4426
4525
|
const useLoop = loop && canSlide;
|
|
4427
4526
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
4428
|
-
const extendedItems =
|
|
4527
|
+
const extendedItems = React30.useMemo(() => {
|
|
4429
4528
|
if (!useLoop) return items;
|
|
4430
4529
|
return [...items, ...items, ...items];
|
|
4431
4530
|
}, [items, useLoop]);
|
|
4432
4531
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
4433
|
-
const [innerIndex, setInnerIndex] =
|
|
4532
|
+
const [innerIndex, setInnerIndex] = React30.useState(
|
|
4434
4533
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
4435
4534
|
);
|
|
4436
|
-
const [isDragging, setIsDragging] =
|
|
4437
|
-
const [dragOffset, setDragOffset] =
|
|
4438
|
-
const [animated, setAnimated] =
|
|
4439
|
-
const [containerWidth, setContainerWidth] =
|
|
4440
|
-
const containerRef =
|
|
4441
|
-
const startXRef =
|
|
4442
|
-
const startTimeRef =
|
|
4443
|
-
const autoplayTimerRef =
|
|
4444
|
-
|
|
4535
|
+
const [isDragging, setIsDragging] = React30.useState(false);
|
|
4536
|
+
const [dragOffset, setDragOffset] = React30.useState(0);
|
|
4537
|
+
const [animated, setAnimated] = React30.useState(true);
|
|
4538
|
+
const [containerWidth, setContainerWidth] = React30.useState(0);
|
|
4539
|
+
const containerRef = React30.useRef(null);
|
|
4540
|
+
const startXRef = React30.useRef(0);
|
|
4541
|
+
const startTimeRef = React30.useRef(0);
|
|
4542
|
+
const autoplayTimerRef = React30.useRef(null);
|
|
4543
|
+
React30.useEffect(() => {
|
|
4445
4544
|
const el = containerRef.current;
|
|
4446
4545
|
if (!el) return;
|
|
4447
4546
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -4460,7 +4559,7 @@ var Swiper = (props) => {
|
|
|
4460
4559
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
4461
4560
|
};
|
|
4462
4561
|
const realIndex = getRealIndex(innerIndex);
|
|
4463
|
-
const moveToInner =
|
|
4562
|
+
const moveToInner = React30.useCallback(
|
|
4464
4563
|
(idx, withAnim = true) => {
|
|
4465
4564
|
if (!useLoop) {
|
|
4466
4565
|
setAnimated(withAnim);
|
|
@@ -4488,7 +4587,7 @@ var Swiper = (props) => {
|
|
|
4488
4587
|
},
|
|
4489
4588
|
[useLoop, cloneCount, totalSlides]
|
|
4490
4589
|
);
|
|
4491
|
-
const handleTransitionEnd =
|
|
4590
|
+
const handleTransitionEnd = React30.useCallback(() => {
|
|
4492
4591
|
if (!useLoop) return;
|
|
4493
4592
|
const real = getRealIndex(innerIndex);
|
|
4494
4593
|
const canonical = cloneCount + real;
|
|
@@ -4498,7 +4597,7 @@ var Swiper = (props) => {
|
|
|
4498
4597
|
}
|
|
4499
4598
|
onChange?.(Math.min(real, maxIndex));
|
|
4500
4599
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
4501
|
-
const slideTo =
|
|
4600
|
+
const slideTo = React30.useCallback(
|
|
4502
4601
|
(logicalIndex) => {
|
|
4503
4602
|
if (!canSlide) return;
|
|
4504
4603
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -4508,7 +4607,7 @@ var Swiper = (props) => {
|
|
|
4508
4607
|
},
|
|
4509
4608
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
4510
4609
|
);
|
|
4511
|
-
const slideNext =
|
|
4610
|
+
const slideNext = React30.useCallback(() => {
|
|
4512
4611
|
if (!canSlide) return;
|
|
4513
4612
|
const nextInner = innerIndex + slideBy;
|
|
4514
4613
|
if (useLoop) {
|
|
@@ -4517,7 +4616,7 @@ var Swiper = (props) => {
|
|
|
4517
4616
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
4518
4617
|
}
|
|
4519
4618
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
4520
|
-
const slidePrev =
|
|
4619
|
+
const slidePrev = React30.useCallback(() => {
|
|
4521
4620
|
if (!canSlide) return;
|
|
4522
4621
|
const prevInner = innerIndex - slideBy;
|
|
4523
4622
|
if (useLoop) {
|
|
@@ -4526,7 +4625,7 @@ var Swiper = (props) => {
|
|
|
4526
4625
|
moveToInner(Math.max(prevInner, 0), true);
|
|
4527
4626
|
}
|
|
4528
4627
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
4529
|
-
|
|
4628
|
+
React30.useEffect(() => {
|
|
4530
4629
|
if (indexProp === void 0) return;
|
|
4531
4630
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
4532
4631
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -4534,12 +4633,12 @@ var Swiper = (props) => {
|
|
|
4534
4633
|
moveToInner(target, true);
|
|
4535
4634
|
}
|
|
4536
4635
|
}, [indexProp]);
|
|
4537
|
-
|
|
4636
|
+
React30.useImperativeHandle(swiperRef, () => ({
|
|
4538
4637
|
slidePrev,
|
|
4539
4638
|
slideNext,
|
|
4540
4639
|
slideTo
|
|
4541
4640
|
}));
|
|
4542
|
-
|
|
4641
|
+
React30.useEffect(() => {
|
|
4543
4642
|
if (!auto || !canSlide) return;
|
|
4544
4643
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
4545
4644
|
return () => {
|
|
@@ -4562,7 +4661,7 @@ var Swiper = (props) => {
|
|
|
4562
4661
|
startXRef.current = getClientX(e);
|
|
4563
4662
|
startTimeRef.current = Date.now();
|
|
4564
4663
|
};
|
|
4565
|
-
|
|
4664
|
+
React30.useEffect(() => {
|
|
4566
4665
|
if (!isDragging) return;
|
|
4567
4666
|
const handleMove = (e) => {
|
|
4568
4667
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -4600,8 +4699,8 @@ var Swiper = (props) => {
|
|
|
4600
4699
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
4601
4700
|
const slideWidthPercent = 100 / viewItemCount;
|
|
4602
4701
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
4603
|
-
const slideElements =
|
|
4604
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */
|
|
4702
|
+
const slideElements = React30.useMemo(
|
|
4703
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ jsx337(
|
|
4605
4704
|
"div",
|
|
4606
4705
|
{
|
|
4607
4706
|
className: "lib-xplat-swiper__slide",
|
|
@@ -4620,14 +4719,14 @@ var Swiper = (props) => {
|
|
|
4620
4719
|
Math.floor(realIndex / slideBy),
|
|
4621
4720
|
totalSteps - 1
|
|
4622
4721
|
);
|
|
4623
|
-
return /* @__PURE__ */
|
|
4624
|
-
/* @__PURE__ */
|
|
4722
|
+
return /* @__PURE__ */ jsxs218("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
4723
|
+
/* @__PURE__ */ jsx337(
|
|
4625
4724
|
"div",
|
|
4626
4725
|
{
|
|
4627
4726
|
className: "lib-xplat-swiper__viewport",
|
|
4628
4727
|
onMouseDown: handleDragStart,
|
|
4629
4728
|
onTouchStart: handleDragStart,
|
|
4630
|
-
children: /* @__PURE__ */
|
|
4729
|
+
children: /* @__PURE__ */ jsx337(
|
|
4631
4730
|
"div",
|
|
4632
4731
|
{
|
|
4633
4732
|
className: clsx_default(
|
|
@@ -4645,7 +4744,7 @@ var Swiper = (props) => {
|
|
|
4645
4744
|
)
|
|
4646
4745
|
}
|
|
4647
4746
|
),
|
|
4648
|
-
showProgress && canSlide && /* @__PURE__ */
|
|
4747
|
+
showProgress && canSlide && /* @__PURE__ */ jsx337("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ jsx337("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ jsx337(
|
|
4649
4748
|
"span",
|
|
4650
4749
|
{
|
|
4651
4750
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -4655,7 +4754,7 @@ var Swiper = (props) => {
|
|
|
4655
4754
|
}
|
|
4656
4755
|
}
|
|
4657
4756
|
) }) }),
|
|
4658
|
-
canSlide && /* @__PURE__ */
|
|
4757
|
+
canSlide && /* @__PURE__ */ jsx337("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ jsx337(
|
|
4659
4758
|
"button",
|
|
4660
4759
|
{
|
|
4661
4760
|
className: clsx_default(
|
|
@@ -4673,8 +4772,8 @@ Swiper.displayName = "Swiper";
|
|
|
4673
4772
|
var Swiper_default = Swiper;
|
|
4674
4773
|
|
|
4675
4774
|
// src/components/Switch/Switch.tsx
|
|
4676
|
-
import
|
|
4677
|
-
import { jsx as
|
|
4775
|
+
import React31 from "react";
|
|
4776
|
+
import { jsx as jsx338 } from "react/jsx-runtime";
|
|
4678
4777
|
var KNOB_TRANSITION_MS = 250;
|
|
4679
4778
|
var Switch = (props) => {
|
|
4680
4779
|
const {
|
|
@@ -4684,9 +4783,9 @@ var Switch = (props) => {
|
|
|
4684
4783
|
disabled,
|
|
4685
4784
|
onChange
|
|
4686
4785
|
} = props;
|
|
4687
|
-
const [isAnimating, setIsAnimating] =
|
|
4688
|
-
const timeoutRef =
|
|
4689
|
-
|
|
4786
|
+
const [isAnimating, setIsAnimating] = React31.useState(false);
|
|
4787
|
+
const timeoutRef = React31.useRef(null);
|
|
4788
|
+
React31.useEffect(() => {
|
|
4690
4789
|
return () => {
|
|
4691
4790
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
4692
4791
|
};
|
|
@@ -4701,7 +4800,7 @@ var Switch = (props) => {
|
|
|
4701
4800
|
timeoutRef.current = null;
|
|
4702
4801
|
}, KNOB_TRANSITION_MS);
|
|
4703
4802
|
};
|
|
4704
|
-
return /* @__PURE__ */
|
|
4803
|
+
return /* @__PURE__ */ jsx338(
|
|
4705
4804
|
"div",
|
|
4706
4805
|
{
|
|
4707
4806
|
className: clsx_default(
|
|
@@ -4714,7 +4813,7 @@ var Switch = (props) => {
|
|
|
4714
4813
|
),
|
|
4715
4814
|
onClick: handleClick,
|
|
4716
4815
|
"aria-disabled": disabled || isAnimating,
|
|
4717
|
-
children: /* @__PURE__ */
|
|
4816
|
+
children: /* @__PURE__ */ jsx338("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
4718
4817
|
}
|
|
4719
4818
|
);
|
|
4720
4819
|
};
|
|
@@ -4722,26 +4821,27 @@ Switch.displayName = "Switch";
|
|
|
4722
4821
|
var Switch_default = Switch;
|
|
4723
4822
|
|
|
4724
4823
|
// src/components/Table/TableContext.tsx
|
|
4725
|
-
import
|
|
4726
|
-
var TableContext =
|
|
4824
|
+
import React32 from "react";
|
|
4825
|
+
var TableContext = React32.createContext(null);
|
|
4727
4826
|
var useTableContext = () => {
|
|
4728
|
-
const ctx =
|
|
4827
|
+
const ctx = React32.useContext(TableContext);
|
|
4729
4828
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
4730
4829
|
return ctx;
|
|
4731
4830
|
};
|
|
4732
4831
|
var TableContext_default = TableContext;
|
|
4733
4832
|
|
|
4734
4833
|
// src/components/Table/Table.tsx
|
|
4735
|
-
import { jsx as
|
|
4834
|
+
import { jsx as jsx339 } from "react/jsx-runtime";
|
|
4736
4835
|
var Table = (props) => {
|
|
4737
4836
|
const {
|
|
4738
4837
|
children,
|
|
4838
|
+
size = "md",
|
|
4739
4839
|
rowBorderUse = true,
|
|
4740
4840
|
colBorderUse = true,
|
|
4741
4841
|
headerSticky = false,
|
|
4742
4842
|
stickyShadow = true
|
|
4743
4843
|
} = props;
|
|
4744
|
-
return /* @__PURE__ */
|
|
4844
|
+
return /* @__PURE__ */ jsx339("div", { className: `lib-xplat-table-wrapper ${size}`, children: /* @__PURE__ */ jsx339(
|
|
4745
4845
|
TableContext_default.Provider,
|
|
4746
4846
|
{
|
|
4747
4847
|
value: {
|
|
@@ -4750,7 +4850,7 @@ var Table = (props) => {
|
|
|
4750
4850
|
headerSticky,
|
|
4751
4851
|
stickyShadow
|
|
4752
4852
|
},
|
|
4753
|
-
children: /* @__PURE__ */
|
|
4853
|
+
children: /* @__PURE__ */ jsx339("table", { className: "lib-xplat-table", children })
|
|
4754
4854
|
}
|
|
4755
4855
|
) });
|
|
4756
4856
|
};
|
|
@@ -4758,41 +4858,41 @@ Table.displayName = "Table";
|
|
|
4758
4858
|
var Table_default = Table;
|
|
4759
4859
|
|
|
4760
4860
|
// src/components/Table/TableBody.tsx
|
|
4761
|
-
import { jsx as
|
|
4861
|
+
import { jsx as jsx340 } from "react/jsx-runtime";
|
|
4762
4862
|
var TableBody = (props) => {
|
|
4763
4863
|
const { children } = props;
|
|
4764
|
-
return /* @__PURE__ */
|
|
4864
|
+
return /* @__PURE__ */ jsx340("tbody", { children });
|
|
4765
4865
|
};
|
|
4766
4866
|
TableBody.displayName = "TableBody";
|
|
4767
4867
|
var TableBody_default = TableBody;
|
|
4768
4868
|
|
|
4769
4869
|
// src/components/Table/TableCell.tsx
|
|
4770
|
-
import
|
|
4870
|
+
import React35 from "react";
|
|
4771
4871
|
|
|
4772
4872
|
// src/components/Table/TableHeadContext.tsx
|
|
4773
|
-
import
|
|
4774
|
-
var TableHeadContext =
|
|
4873
|
+
import React33 from "react";
|
|
4874
|
+
var TableHeadContext = React33.createContext(
|
|
4775
4875
|
null
|
|
4776
4876
|
);
|
|
4777
4877
|
var useTableHeadContext = () => {
|
|
4778
|
-
const ctx =
|
|
4878
|
+
const ctx = React33.useContext(TableHeadContext);
|
|
4779
4879
|
return ctx;
|
|
4780
4880
|
};
|
|
4781
4881
|
var TableHeadContext_default = TableHeadContext;
|
|
4782
4882
|
|
|
4783
4883
|
// src/components/Table/TableRowContext.tsx
|
|
4784
|
-
import
|
|
4785
|
-
var TableRowContext =
|
|
4884
|
+
import React34 from "react";
|
|
4885
|
+
var TableRowContext = React34.createContext(null);
|
|
4786
4886
|
var useTableRowContext = () => {
|
|
4787
|
-
const ctx =
|
|
4887
|
+
const ctx = React34.useContext(TableRowContext);
|
|
4788
4888
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
4789
4889
|
return ctx;
|
|
4790
4890
|
};
|
|
4791
4891
|
var TableRowContext_default = TableRowContext;
|
|
4792
4892
|
|
|
4793
4893
|
// src/components/Table/TableCell.tsx
|
|
4794
|
-
import { jsx as
|
|
4795
|
-
var TableCell =
|
|
4894
|
+
import { jsx as jsx341 } from "react/jsx-runtime";
|
|
4895
|
+
var TableCell = React35.memo((props) => {
|
|
4796
4896
|
const {
|
|
4797
4897
|
children,
|
|
4798
4898
|
align = "center",
|
|
@@ -4804,9 +4904,9 @@ var TableCell = React34.memo((props) => {
|
|
|
4804
4904
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
4805
4905
|
const { stickyShadow } = useTableContext();
|
|
4806
4906
|
const headContext = useTableHeadContext();
|
|
4807
|
-
const [left, setLeft] =
|
|
4808
|
-
const cellRef =
|
|
4809
|
-
const calculateLeft =
|
|
4907
|
+
const [left, setLeft] = React35.useState(0);
|
|
4908
|
+
const cellRef = React35.useRef(null);
|
|
4909
|
+
const calculateLeft = React35.useCallback(() => {
|
|
4810
4910
|
if (!cellRef.current) return 0;
|
|
4811
4911
|
let totalLeft = 0;
|
|
4812
4912
|
for (const ref of stickyCells) {
|
|
@@ -4815,7 +4915,7 @@ var TableCell = React34.memo((props) => {
|
|
|
4815
4915
|
}
|
|
4816
4916
|
return totalLeft;
|
|
4817
4917
|
}, [stickyCells]);
|
|
4818
|
-
|
|
4918
|
+
React35.useEffect(() => {
|
|
4819
4919
|
if (!isSticky || !cellRef.current) return;
|
|
4820
4920
|
registerStickyCell(cellRef);
|
|
4821
4921
|
setLeft(calculateLeft());
|
|
@@ -4833,7 +4933,7 @@ var TableCell = React34.memo((props) => {
|
|
|
4833
4933
|
const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
|
|
4834
4934
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
4835
4935
|
const enableHover = headContext && headContext.cellHover;
|
|
4836
|
-
return /* @__PURE__ */
|
|
4936
|
+
return /* @__PURE__ */ jsx341(
|
|
4837
4937
|
CellTag,
|
|
4838
4938
|
{
|
|
4839
4939
|
ref: cellRef,
|
|
@@ -4858,21 +4958,21 @@ TableCell.displayName = "TableCell";
|
|
|
4858
4958
|
var TableCell_default = TableCell;
|
|
4859
4959
|
|
|
4860
4960
|
// src/components/Table/TableHead.tsx
|
|
4861
|
-
import { jsx as
|
|
4961
|
+
import { jsx as jsx342 } from "react/jsx-runtime";
|
|
4862
4962
|
var TableHead = ({
|
|
4863
4963
|
children,
|
|
4864
4964
|
cellHover = false
|
|
4865
4965
|
}) => {
|
|
4866
4966
|
const { headerSticky } = useTableContext();
|
|
4867
|
-
return /* @__PURE__ */
|
|
4967
|
+
return /* @__PURE__ */ jsx342(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ jsx342("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
|
|
4868
4968
|
};
|
|
4869
4969
|
TableHead.displayName = "TableHead";
|
|
4870
4970
|
var TableHead_default = TableHead;
|
|
4871
4971
|
|
|
4872
4972
|
// src/components/Table/TableRow.tsx
|
|
4873
|
-
import
|
|
4874
|
-
import { jsx as
|
|
4875
|
-
var TableRow =
|
|
4973
|
+
import React36 from "react";
|
|
4974
|
+
import { jsx as jsx343 } from "react/jsx-runtime";
|
|
4975
|
+
var TableRow = React36.memo((props) => {
|
|
4876
4976
|
const {
|
|
4877
4977
|
children,
|
|
4878
4978
|
type = "secondary",
|
|
@@ -4880,14 +4980,14 @@ var TableRow = React35.memo((props) => {
|
|
|
4880
4980
|
onClick
|
|
4881
4981
|
} = props;
|
|
4882
4982
|
const { rowBorderUse } = useTableContext();
|
|
4883
|
-
const [stickyCells, setStickyCells] =
|
|
4983
|
+
const [stickyCells, setStickyCells] = React36.useState([]);
|
|
4884
4984
|
const registerStickyCell = (ref) => {
|
|
4885
4985
|
setStickyCells((prev) => {
|
|
4886
4986
|
if (prev.includes(ref)) return prev;
|
|
4887
4987
|
return [...prev, ref];
|
|
4888
4988
|
});
|
|
4889
4989
|
};
|
|
4890
|
-
return /* @__PURE__ */
|
|
4990
|
+
return /* @__PURE__ */ jsx343(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ jsx343(
|
|
4891
4991
|
"tr",
|
|
4892
4992
|
{
|
|
4893
4993
|
className: clsx_default(
|
|
@@ -4905,7 +5005,7 @@ TableRow.displayName = "TableRow";
|
|
|
4905
5005
|
var TableRow_default = TableRow;
|
|
4906
5006
|
|
|
4907
5007
|
// src/components/Tag/Tag.tsx
|
|
4908
|
-
import { jsx as
|
|
5008
|
+
import { jsx as jsx344, jsxs as jsxs219 } from "react/jsx-runtime";
|
|
4909
5009
|
var Tag = (props) => {
|
|
4910
5010
|
const {
|
|
4911
5011
|
children,
|
|
@@ -4915,7 +5015,7 @@ var Tag = (props) => {
|
|
|
4915
5015
|
disabled = false,
|
|
4916
5016
|
colorIndex
|
|
4917
5017
|
} = props;
|
|
4918
|
-
return /* @__PURE__ */
|
|
5018
|
+
return /* @__PURE__ */ jsxs219(
|
|
4919
5019
|
"span",
|
|
4920
5020
|
{
|
|
4921
5021
|
className: clsx_default(
|
|
@@ -4926,8 +5026,8 @@ var Tag = (props) => {
|
|
|
4926
5026
|
disabled && "disabled"
|
|
4927
5027
|
),
|
|
4928
5028
|
children: [
|
|
4929
|
-
/* @__PURE__ */
|
|
4930
|
-
onClose && /* @__PURE__ */
|
|
5029
|
+
/* @__PURE__ */ jsx344("span", { className: "tag-label", children }),
|
|
5030
|
+
onClose && /* @__PURE__ */ jsx344("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ jsx344(XIcon_default, {}) })
|
|
4931
5031
|
]
|
|
4932
5032
|
}
|
|
4933
5033
|
);
|
|
@@ -4936,12 +5036,12 @@ Tag.displayName = "Tag";
|
|
|
4936
5036
|
var Tag_default = Tag;
|
|
4937
5037
|
|
|
4938
5038
|
// src/components/TextArea/TextArea.tsx
|
|
4939
|
-
import
|
|
4940
|
-
import { jsx as
|
|
4941
|
-
var TextArea =
|
|
5039
|
+
import React37 from "react";
|
|
5040
|
+
import { jsx as jsx345 } from "react/jsx-runtime";
|
|
5041
|
+
var TextArea = React37.forwardRef(
|
|
4942
5042
|
(props, ref) => {
|
|
4943
5043
|
const { value, onChange, disabled, ...textareaProps } = props;
|
|
4944
|
-
const localRef =
|
|
5044
|
+
const localRef = React37.useRef(null);
|
|
4945
5045
|
const setRefs = (el) => {
|
|
4946
5046
|
localRef.current = el;
|
|
4947
5047
|
if (!ref) return;
|
|
@@ -4961,21 +5061,21 @@ var TextArea = React36.forwardRef(
|
|
|
4961
5061
|
onChange(event);
|
|
4962
5062
|
}
|
|
4963
5063
|
};
|
|
4964
|
-
|
|
5064
|
+
React37.useEffect(() => {
|
|
4965
5065
|
const el = localRef.current;
|
|
4966
5066
|
if (!el) return;
|
|
4967
5067
|
el.style.height = "0px";
|
|
4968
5068
|
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
4969
5069
|
el.style.height = `${nextHeight}px`;
|
|
4970
5070
|
}, [value]);
|
|
4971
|
-
return /* @__PURE__ */
|
|
5071
|
+
return /* @__PURE__ */ jsx345("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ jsx345(
|
|
4972
5072
|
"div",
|
|
4973
5073
|
{
|
|
4974
5074
|
className: clsx_default(
|
|
4975
5075
|
"lib-xplat-textarea",
|
|
4976
5076
|
disabled ? "disabled" : void 0
|
|
4977
5077
|
),
|
|
4978
|
-
children: /* @__PURE__ */
|
|
5078
|
+
children: /* @__PURE__ */ jsx345(
|
|
4979
5079
|
"textarea",
|
|
4980
5080
|
{
|
|
4981
5081
|
...textareaProps,
|
|
@@ -4993,25 +5093,25 @@ TextArea.displayName = "TextArea";
|
|
|
4993
5093
|
var TextArea_default = TextArea;
|
|
4994
5094
|
|
|
4995
5095
|
// src/components/Toast/Toast.tsx
|
|
4996
|
-
import
|
|
5096
|
+
import React38 from "react";
|
|
4997
5097
|
import { createPortal as createPortal3 } from "react-dom";
|
|
4998
|
-
import { jsx as
|
|
4999
|
-
var ToastContext =
|
|
5098
|
+
import { jsx as jsx346, jsxs as jsxs220 } from "react/jsx-runtime";
|
|
5099
|
+
var ToastContext = React38.createContext(null);
|
|
5000
5100
|
var useToast = () => {
|
|
5001
|
-
const ctx =
|
|
5101
|
+
const ctx = React38.useContext(ToastContext);
|
|
5002
5102
|
if (!ctx) throw new Error("useToast must be used within ToastProvider");
|
|
5003
5103
|
return ctx;
|
|
5004
5104
|
};
|
|
5005
5105
|
var EXIT_DURATION = 300;
|
|
5006
5106
|
var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
5007
|
-
const ref =
|
|
5008
|
-
const [height, setHeight] =
|
|
5009
|
-
|
|
5107
|
+
const ref = React38.useRef(null);
|
|
5108
|
+
const [height, setHeight] = React38.useState(void 0);
|
|
5109
|
+
React38.useEffect(() => {
|
|
5010
5110
|
if (ref.current && !isExiting) {
|
|
5011
5111
|
setHeight(ref.current.offsetHeight);
|
|
5012
5112
|
}
|
|
5013
5113
|
}, [isExiting]);
|
|
5014
|
-
return /* @__PURE__ */
|
|
5114
|
+
return /* @__PURE__ */ jsx346(
|
|
5015
5115
|
"div",
|
|
5016
5116
|
{
|
|
5017
5117
|
className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
|
|
@@ -5019,15 +5119,15 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
5019
5119
|
maxHeight: isExiting ? 0 : height ?? "none",
|
|
5020
5120
|
marginBottom: isExiting ? 0 : void 0
|
|
5021
5121
|
},
|
|
5022
|
-
children: /* @__PURE__ */
|
|
5122
|
+
children: /* @__PURE__ */ jsxs220(
|
|
5023
5123
|
"div",
|
|
5024
5124
|
{
|
|
5025
5125
|
ref,
|
|
5026
5126
|
className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
|
|
5027
5127
|
role: "alert",
|
|
5028
5128
|
children: [
|
|
5029
|
-
/* @__PURE__ */
|
|
5030
|
-
/* @__PURE__ */
|
|
5129
|
+
/* @__PURE__ */ jsx346("span", { className: "message", children: item.message }),
|
|
5130
|
+
/* @__PURE__ */ jsx346("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
5031
5131
|
]
|
|
5032
5132
|
}
|
|
5033
5133
|
)
|
|
@@ -5038,13 +5138,13 @@ var ToastProvider = ({
|
|
|
5038
5138
|
children,
|
|
5039
5139
|
position = "top-right"
|
|
5040
5140
|
}) => {
|
|
5041
|
-
const [toasts, setToasts] =
|
|
5042
|
-
const [removing, setRemoving] =
|
|
5043
|
-
const [mounted, setMounted] =
|
|
5044
|
-
|
|
5141
|
+
const [toasts, setToasts] = React38.useState([]);
|
|
5142
|
+
const [removing, setRemoving] = React38.useState(/* @__PURE__ */ new Set());
|
|
5143
|
+
const [mounted, setMounted] = React38.useState(false);
|
|
5144
|
+
React38.useEffect(() => {
|
|
5045
5145
|
setMounted(true);
|
|
5046
5146
|
}, []);
|
|
5047
|
-
const remove =
|
|
5147
|
+
const remove = React38.useCallback((id) => {
|
|
5048
5148
|
setRemoving((prev) => new Set(prev).add(id));
|
|
5049
5149
|
setTimeout(() => {
|
|
5050
5150
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
@@ -5055,7 +5155,7 @@ var ToastProvider = ({
|
|
|
5055
5155
|
});
|
|
5056
5156
|
}, EXIT_DURATION);
|
|
5057
5157
|
}, []);
|
|
5058
|
-
const toast =
|
|
5158
|
+
const toast = React38.useCallback(
|
|
5059
5159
|
(type, message, duration = 3e3) => {
|
|
5060
5160
|
const id = `${Date.now()}-${Math.random()}`;
|
|
5061
5161
|
setToasts((prev) => [...prev, { id, type, message }]);
|
|
@@ -5065,10 +5165,10 @@ var ToastProvider = ({
|
|
|
5065
5165
|
},
|
|
5066
5166
|
[remove]
|
|
5067
5167
|
);
|
|
5068
|
-
return /* @__PURE__ */
|
|
5168
|
+
return /* @__PURE__ */ jsxs220(ToastContext.Provider, { value: { toast }, children: [
|
|
5069
5169
|
children,
|
|
5070
5170
|
mounted && createPortal3(
|
|
5071
|
-
/* @__PURE__ */
|
|
5171
|
+
/* @__PURE__ */ jsx346("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ jsx346(
|
|
5072
5172
|
ToastItemComponent,
|
|
5073
5173
|
{
|
|
5074
5174
|
item: t,
|
|
@@ -5084,29 +5184,29 @@ var ToastProvider = ({
|
|
|
5084
5184
|
ToastProvider.displayName = "ToastProvider";
|
|
5085
5185
|
|
|
5086
5186
|
// src/components/Tooltip/Tooltip.tsx
|
|
5087
|
-
import
|
|
5088
|
-
import { jsx as
|
|
5187
|
+
import React39 from "react";
|
|
5188
|
+
import { jsx as jsx347, jsxs as jsxs221 } from "react/jsx-runtime";
|
|
5089
5189
|
var Tooltip = (props) => {
|
|
5090
5190
|
const {
|
|
5091
5191
|
type = "primary",
|
|
5092
5192
|
description,
|
|
5093
5193
|
children
|
|
5094
5194
|
} = props;
|
|
5095
|
-
const iconRef =
|
|
5096
|
-
return /* @__PURE__ */
|
|
5097
|
-
/* @__PURE__ */
|
|
5098
|
-
/* @__PURE__ */
|
|
5195
|
+
const iconRef = React39.useRef(null);
|
|
5196
|
+
return /* @__PURE__ */ jsxs221("div", { className: "lib-xplat-tooltip", children: [
|
|
5197
|
+
/* @__PURE__ */ jsx347("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
|
|
5198
|
+
/* @__PURE__ */ jsx347("div", { className: clsx_default("tooltip-wrapper", type), children: description })
|
|
5099
5199
|
] });
|
|
5100
5200
|
};
|
|
5101
5201
|
Tooltip.displayName = "Tooltip";
|
|
5102
5202
|
var Tooltip_default = Tooltip;
|
|
5103
5203
|
|
|
5104
5204
|
// src/components/Video/Video.tsx
|
|
5105
|
-
import
|
|
5106
|
-
import { jsx as
|
|
5107
|
-
var PipIcon = () => /* @__PURE__ */
|
|
5108
|
-
/* @__PURE__ */
|
|
5109
|
-
/* @__PURE__ */
|
|
5205
|
+
import React40 from "react";
|
|
5206
|
+
import { jsx as jsx348, jsxs as jsxs222 } from "react/jsx-runtime";
|
|
5207
|
+
var PipIcon = () => /* @__PURE__ */ jsxs222("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
5208
|
+
/* @__PURE__ */ jsx348("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
5209
|
+
/* @__PURE__ */ jsx348("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
|
|
5110
5210
|
] });
|
|
5111
5211
|
var formatTime = (sec) => {
|
|
5112
5212
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -5114,7 +5214,7 @@ var formatTime = (sec) => {
|
|
|
5114
5214
|
const s = Math.floor(sec % 60);
|
|
5115
5215
|
return `${m}:${s.toString().padStart(2, "0")}`;
|
|
5116
5216
|
};
|
|
5117
|
-
var Video =
|
|
5217
|
+
var Video = React40.forwardRef((props, ref) => {
|
|
5118
5218
|
const {
|
|
5119
5219
|
src,
|
|
5120
5220
|
poster,
|
|
@@ -5138,21 +5238,21 @@ var Video = React39.forwardRef((props, ref) => {
|
|
|
5138
5238
|
children,
|
|
5139
5239
|
...rest
|
|
5140
5240
|
} = props;
|
|
5141
|
-
const containerRef =
|
|
5142
|
-
const videoRef =
|
|
5143
|
-
const [isPlaying, setIsPlaying] =
|
|
5144
|
-
const [isLoaded, setIsLoaded] =
|
|
5145
|
-
const [currentTime, setCurrentTime] =
|
|
5146
|
-
const [duration, setDuration] =
|
|
5147
|
-
const [buffered, setBuffered] =
|
|
5148
|
-
const [volume, setVolume] =
|
|
5149
|
-
const [isMuted, setIsMuted] =
|
|
5150
|
-
const [isFullscreen, setIsFullscreen] =
|
|
5151
|
-
const [playbackRate, setPlaybackRate] =
|
|
5152
|
-
const [rateMenuOpen, setRateMenuOpen] =
|
|
5153
|
-
const [captionsOn, setCaptionsOn] =
|
|
5154
|
-
const [isPip, setIsPip] =
|
|
5155
|
-
const setRefs =
|
|
5241
|
+
const containerRef = React40.useRef(null);
|
|
5242
|
+
const videoRef = React40.useRef(null);
|
|
5243
|
+
const [isPlaying, setIsPlaying] = React40.useState(Boolean(autoPlay));
|
|
5244
|
+
const [isLoaded, setIsLoaded] = React40.useState(false);
|
|
5245
|
+
const [currentTime, setCurrentTime] = React40.useState(0);
|
|
5246
|
+
const [duration, setDuration] = React40.useState(0);
|
|
5247
|
+
const [buffered, setBuffered] = React40.useState(0);
|
|
5248
|
+
const [volume, setVolume] = React40.useState(1);
|
|
5249
|
+
const [isMuted, setIsMuted] = React40.useState(Boolean(muted));
|
|
5250
|
+
const [isFullscreen, setIsFullscreen] = React40.useState(false);
|
|
5251
|
+
const [playbackRate, setPlaybackRate] = React40.useState(1);
|
|
5252
|
+
const [rateMenuOpen, setRateMenuOpen] = React40.useState(false);
|
|
5253
|
+
const [captionsOn, setCaptionsOn] = React40.useState(false);
|
|
5254
|
+
const [isPip, setIsPip] = React40.useState(false);
|
|
5255
|
+
const setRefs = React40.useCallback(
|
|
5156
5256
|
(el) => {
|
|
5157
5257
|
videoRef.current = el;
|
|
5158
5258
|
if (typeof ref === "function") ref(el);
|
|
@@ -5160,14 +5260,14 @@ var Video = React39.forwardRef((props, ref) => {
|
|
|
5160
5260
|
},
|
|
5161
5261
|
[ref]
|
|
5162
5262
|
);
|
|
5163
|
-
|
|
5263
|
+
React40.useEffect(() => {
|
|
5164
5264
|
const onFsChange = () => {
|
|
5165
5265
|
setIsFullscreen(document.fullscreenElement === containerRef.current);
|
|
5166
5266
|
};
|
|
5167
5267
|
document.addEventListener("fullscreenchange", onFsChange);
|
|
5168
5268
|
return () => document.removeEventListener("fullscreenchange", onFsChange);
|
|
5169
5269
|
}, []);
|
|
5170
|
-
|
|
5270
|
+
React40.useEffect(() => {
|
|
5171
5271
|
const v = videoRef.current;
|
|
5172
5272
|
if (!v) return;
|
|
5173
5273
|
const onEnter = () => setIsPip(true);
|
|
@@ -5281,13 +5381,13 @@ var Video = React39.forwardRef((props, ref) => {
|
|
|
5281
5381
|
const volumePct = (isMuted ? 0 : volume) * 100;
|
|
5282
5382
|
const VolumeGlyph = isMuted || volume === 0 ? VolumeXIcon_default : volume < 0.5 ? VolumeIcon_default : Volume2Icon_default;
|
|
5283
5383
|
const pipSupported = typeof document !== "undefined" && "pictureInPictureEnabled" in document && document.pictureInPictureEnabled;
|
|
5284
|
-
return /* @__PURE__ */
|
|
5384
|
+
return /* @__PURE__ */ jsxs222(
|
|
5285
5385
|
"div",
|
|
5286
5386
|
{
|
|
5287
5387
|
ref: containerRef,
|
|
5288
5388
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
5289
5389
|
children: [
|
|
5290
|
-
/* @__PURE__ */
|
|
5390
|
+
/* @__PURE__ */ jsx348(
|
|
5291
5391
|
"video",
|
|
5292
5392
|
{
|
|
5293
5393
|
ref: setRefs,
|
|
@@ -5308,7 +5408,7 @@ var Video = React39.forwardRef((props, ref) => {
|
|
|
5308
5408
|
children
|
|
5309
5409
|
}
|
|
5310
5410
|
),
|
|
5311
|
-
showCenterPlay && /* @__PURE__ */
|
|
5411
|
+
showCenterPlay && /* @__PURE__ */ jsx348(
|
|
5312
5412
|
"button",
|
|
5313
5413
|
{
|
|
5314
5414
|
type: "button",
|
|
@@ -5320,11 +5420,11 @@ var Video = React39.forwardRef((props, ref) => {
|
|
|
5320
5420
|
onClick: togglePlay,
|
|
5321
5421
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
5322
5422
|
tabIndex: -1,
|
|
5323
|
-
children: /* @__PURE__ */
|
|
5423
|
+
children: /* @__PURE__ */ jsx348("span", { className: "center-play-icon", children: /* @__PURE__ */ jsx348(PlayCircleIcon_default, {}) })
|
|
5324
5424
|
}
|
|
5325
5425
|
),
|
|
5326
|
-
showControls && /* @__PURE__ */
|
|
5327
|
-
/* @__PURE__ */
|
|
5426
|
+
showControls && /* @__PURE__ */ jsxs222("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
|
|
5427
|
+
/* @__PURE__ */ jsx348(
|
|
5328
5428
|
"input",
|
|
5329
5429
|
{
|
|
5330
5430
|
type: "range",
|
|
@@ -5341,29 +5441,29 @@ var Video = React39.forwardRef((props, ref) => {
|
|
|
5341
5441
|
}
|
|
5342
5442
|
}
|
|
5343
5443
|
),
|
|
5344
|
-
/* @__PURE__ */
|
|
5345
|
-
/* @__PURE__ */
|
|
5444
|
+
/* @__PURE__ */ jsxs222("div", { className: "controls-row", children: [
|
|
5445
|
+
/* @__PURE__ */ jsx348(
|
|
5346
5446
|
"button",
|
|
5347
5447
|
{
|
|
5348
5448
|
type: "button",
|
|
5349
5449
|
className: "control-btn",
|
|
5350
5450
|
onClick: togglePlay,
|
|
5351
5451
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
5352
|
-
children: isPlaying ? /* @__PURE__ */
|
|
5452
|
+
children: isPlaying ? /* @__PURE__ */ jsx348(PauseIcon_default, {}) : /* @__PURE__ */ jsx348(PlayIcon_default, {})
|
|
5353
5453
|
}
|
|
5354
5454
|
),
|
|
5355
|
-
/* @__PURE__ */
|
|
5356
|
-
/* @__PURE__ */
|
|
5455
|
+
/* @__PURE__ */ jsxs222("div", { className: "volume-group", children: [
|
|
5456
|
+
/* @__PURE__ */ jsx348(
|
|
5357
5457
|
"button",
|
|
5358
5458
|
{
|
|
5359
5459
|
type: "button",
|
|
5360
5460
|
className: "control-btn",
|
|
5361
5461
|
onClick: toggleMute,
|
|
5362
5462
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
5363
|
-
children: /* @__PURE__ */
|
|
5463
|
+
children: /* @__PURE__ */ jsx348(VolumeGlyph, {})
|
|
5364
5464
|
}
|
|
5365
5465
|
),
|
|
5366
|
-
/* @__PURE__ */
|
|
5466
|
+
/* @__PURE__ */ jsx348(
|
|
5367
5467
|
"input",
|
|
5368
5468
|
{
|
|
5369
5469
|
type: "range",
|
|
@@ -5378,14 +5478,14 @@ var Video = React39.forwardRef((props, ref) => {
|
|
|
5378
5478
|
}
|
|
5379
5479
|
)
|
|
5380
5480
|
] }),
|
|
5381
|
-
/* @__PURE__ */
|
|
5481
|
+
/* @__PURE__ */ jsxs222("span", { className: "time", children: [
|
|
5382
5482
|
formatTime(currentTime),
|
|
5383
5483
|
" / ",
|
|
5384
5484
|
formatTime(duration)
|
|
5385
5485
|
] }),
|
|
5386
|
-
/* @__PURE__ */
|
|
5387
|
-
playbackRates && playbackRates.length > 0 && /* @__PURE__ */
|
|
5388
|
-
/* @__PURE__ */
|
|
5486
|
+
/* @__PURE__ */ jsx348("div", { className: "controls-spacer" }),
|
|
5487
|
+
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ jsxs222("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
|
|
5488
|
+
/* @__PURE__ */ jsxs222(
|
|
5389
5489
|
"button",
|
|
5390
5490
|
{
|
|
5391
5491
|
type: "button",
|
|
@@ -5399,7 +5499,7 @@ var Video = React39.forwardRef((props, ref) => {
|
|
|
5399
5499
|
]
|
|
5400
5500
|
}
|
|
5401
5501
|
),
|
|
5402
|
-
rateMenuOpen && /* @__PURE__ */
|
|
5502
|
+
rateMenuOpen && /* @__PURE__ */ jsx348("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ jsx348("li", { children: /* @__PURE__ */ jsxs222(
|
|
5403
5503
|
"button",
|
|
5404
5504
|
{
|
|
5405
5505
|
type: "button",
|
|
@@ -5413,7 +5513,7 @@ var Video = React39.forwardRef((props, ref) => {
|
|
|
5413
5513
|
}
|
|
5414
5514
|
) }, r2)) })
|
|
5415
5515
|
] }),
|
|
5416
|
-
showCaptions && /* @__PURE__ */
|
|
5516
|
+
showCaptions && /* @__PURE__ */ jsx348(
|
|
5417
5517
|
"button",
|
|
5418
5518
|
{
|
|
5419
5519
|
type: "button",
|
|
@@ -5421,37 +5521,37 @@ var Video = React39.forwardRef((props, ref) => {
|
|
|
5421
5521
|
onClick: toggleCaptions,
|
|
5422
5522
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
5423
5523
|
"aria-pressed": captionsOn,
|
|
5424
|
-
children: /* @__PURE__ */
|
|
5524
|
+
children: /* @__PURE__ */ jsx348(TypeIcon_default, {})
|
|
5425
5525
|
}
|
|
5426
5526
|
),
|
|
5427
|
-
showPip && pipSupported && /* @__PURE__ */
|
|
5527
|
+
showPip && pipSupported && /* @__PURE__ */ jsx348(
|
|
5428
5528
|
"button",
|
|
5429
5529
|
{
|
|
5430
5530
|
type: "button",
|
|
5431
5531
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
5432
5532
|
onClick: togglePip,
|
|
5433
5533
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
5434
|
-
children: /* @__PURE__ */
|
|
5534
|
+
children: /* @__PURE__ */ jsx348(PipIcon, {})
|
|
5435
5535
|
}
|
|
5436
5536
|
),
|
|
5437
|
-
showDownload && /* @__PURE__ */
|
|
5537
|
+
showDownload && /* @__PURE__ */ jsx348(
|
|
5438
5538
|
"a",
|
|
5439
5539
|
{
|
|
5440
5540
|
className: "control-btn",
|
|
5441
5541
|
href: src,
|
|
5442
5542
|
download: downloadFileName ?? true,
|
|
5443
5543
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
5444
|
-
children: /* @__PURE__ */
|
|
5544
|
+
children: /* @__PURE__ */ jsx348(DownloadIcon_default, {})
|
|
5445
5545
|
}
|
|
5446
5546
|
),
|
|
5447
|
-
/* @__PURE__ */
|
|
5547
|
+
/* @__PURE__ */ jsx348(
|
|
5448
5548
|
"button",
|
|
5449
5549
|
{
|
|
5450
5550
|
type: "button",
|
|
5451
5551
|
className: "control-btn",
|
|
5452
5552
|
onClick: toggleFullscreen,
|
|
5453
5553
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
5454
|
-
children: isFullscreen ? /* @__PURE__ */
|
|
5554
|
+
children: isFullscreen ? /* @__PURE__ */ jsx348(MinimizeIcon_default, {}) : /* @__PURE__ */ jsx348(MaximizeIcon_default, {})
|
|
5455
5555
|
}
|
|
5456
5556
|
)
|
|
5457
5557
|
] })
|
|
@@ -5473,6 +5573,7 @@ export {
|
|
|
5473
5573
|
Calendar_default as Calendar,
|
|
5474
5574
|
CardTab_default as CardTab,
|
|
5475
5575
|
Chart_default as Chart,
|
|
5576
|
+
ChatInput_default as ChatInput,
|
|
5476
5577
|
CheckBox_default as CheckBox,
|
|
5477
5578
|
Chip_default as Chip,
|
|
5478
5579
|
Divider_default as Divider,
|