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