@x-plat/design-system 0.5.22 → 0.5.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ChatInput/index.cjs +57 -94
- package/dist/components/ChatInput/index.css +2 -48
- package/dist/components/ChatInput/index.js +55 -92
- package/dist/components/index.cjs +529 -509
- package/dist/components/index.css +48 -48
- package/dist/components/index.js +483 -463
- package/dist/index.cjs +529 -509
- package/dist/index.css +48 -48
- package/dist/index.js +483 -463
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6036,68 +6036,10 @@ Calendar.displayName = "Calendar";
|
|
|
6036
6036
|
var Calendar_default = Calendar;
|
|
6037
6037
|
|
|
6038
6038
|
// src/components/ChatInput/ChatInput.tsx
|
|
6039
|
-
import React5 from "react";
|
|
6040
|
-
|
|
6041
|
-
// src/components/TextArea/TextArea.tsx
|
|
6042
6039
|
import React4 from "react";
|
|
6043
|
-
import { jsx as jsx302 } from "react/jsx-runtime";
|
|
6044
|
-
var
|
|
6045
|
-
|
|
6046
|
-
const { value, onChange, disabled, ...textareaProps } = props;
|
|
6047
|
-
const localRef = React4.useRef(null);
|
|
6048
|
-
const setRefs = (el) => {
|
|
6049
|
-
localRef.current = el;
|
|
6050
|
-
if (!ref) return;
|
|
6051
|
-
if (typeof ref === "function") {
|
|
6052
|
-
ref(el);
|
|
6053
|
-
} else if (ref && typeof ref === "object" && "current" in ref) {
|
|
6054
|
-
ref.current = el;
|
|
6055
|
-
}
|
|
6056
|
-
};
|
|
6057
|
-
const handleOnChange = (e) => {
|
|
6058
|
-
const val = e.target.value;
|
|
6059
|
-
if (onChange) {
|
|
6060
|
-
const event = {
|
|
6061
|
-
...e,
|
|
6062
|
-
target: { value: val }
|
|
6063
|
-
};
|
|
6064
|
-
onChange(event);
|
|
6065
|
-
}
|
|
6066
|
-
};
|
|
6067
|
-
React4.useEffect(() => {
|
|
6068
|
-
const el = localRef.current;
|
|
6069
|
-
if (!el) return;
|
|
6070
|
-
el.style.height = "0px";
|
|
6071
|
-
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
6072
|
-
el.style.height = `${nextHeight}px`;
|
|
6073
|
-
}, [value]);
|
|
6074
|
-
return /* @__PURE__ */ jsx302("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ jsx302(
|
|
6075
|
-
"div",
|
|
6076
|
-
{
|
|
6077
|
-
className: clsx_default(
|
|
6078
|
-
"lib-xplat-textarea",
|
|
6079
|
-
disabled ? "disabled" : void 0
|
|
6080
|
-
),
|
|
6081
|
-
children: /* @__PURE__ */ jsx302(
|
|
6082
|
-
"textarea",
|
|
6083
|
-
{
|
|
6084
|
-
...textareaProps,
|
|
6085
|
-
ref: setRefs,
|
|
6086
|
-
disabled,
|
|
6087
|
-
value,
|
|
6088
|
-
onChange: handleOnChange
|
|
6089
|
-
}
|
|
6090
|
-
)
|
|
6091
|
-
}
|
|
6092
|
-
) });
|
|
6093
|
-
}
|
|
6094
|
-
);
|
|
6095
|
-
TextArea.displayName = "TextArea";
|
|
6096
|
-
var TextArea_default = TextArea;
|
|
6097
|
-
|
|
6098
|
-
// src/components/ChatInput/ChatInput.tsx
|
|
6099
|
-
import { jsx as jsx303, jsxs as jsxs194 } from "react/jsx-runtime";
|
|
6100
|
-
var ChatInput = React5.forwardRef(
|
|
6040
|
+
import { jsx as jsx302, jsxs as jsxs194 } from "react/jsx-runtime";
|
|
6041
|
+
var MAX_HEIGHT = 200;
|
|
6042
|
+
var ChatInput = React4.forwardRef(
|
|
6101
6043
|
(props, ref) => {
|
|
6102
6044
|
const {
|
|
6103
6045
|
placeholder,
|
|
@@ -6108,9 +6050,24 @@ var ChatInput = React5.forwardRef(
|
|
|
6108
6050
|
onChange
|
|
6109
6051
|
} = props;
|
|
6110
6052
|
const isControlled = valueProp !== void 0;
|
|
6111
|
-
const [internalValue, setInternalValue] =
|
|
6053
|
+
const [internalValue, setInternalValue] = React4.useState("");
|
|
6112
6054
|
const value = isControlled ? valueProp : internalValue;
|
|
6113
6055
|
const hasText = value.trim().length > 0;
|
|
6056
|
+
const textareaRef = React4.useRef(null);
|
|
6057
|
+
const setRefs = React4.useCallback(
|
|
6058
|
+
(el) => {
|
|
6059
|
+
textareaRef.current = el;
|
|
6060
|
+
if (typeof ref === "function") ref(el);
|
|
6061
|
+
else if (ref) ref.current = el;
|
|
6062
|
+
},
|
|
6063
|
+
[ref]
|
|
6064
|
+
);
|
|
6065
|
+
const updateHeight = React4.useCallback(() => {
|
|
6066
|
+
const el = textareaRef.current;
|
|
6067
|
+
if (!el) return;
|
|
6068
|
+
el.style.height = "0px";
|
|
6069
|
+
el.style.height = `${Math.min(el.scrollHeight, MAX_HEIGHT)}px`;
|
|
6070
|
+
}, []);
|
|
6114
6071
|
const handleChange = (e) => {
|
|
6115
6072
|
const val = e.target.value;
|
|
6116
6073
|
if (!isControlled) setInternalValue(val);
|
|
@@ -6120,6 +6077,7 @@ var ChatInput = React5.forwardRef(
|
|
|
6120
6077
|
if (!hasText || disabled) return;
|
|
6121
6078
|
onSubmit?.(value);
|
|
6122
6079
|
if (!isControlled) setInternalValue("");
|
|
6080
|
+
requestAnimationFrame(updateHeight);
|
|
6123
6081
|
};
|
|
6124
6082
|
const handleKeyDown = (e) => {
|
|
6125
6083
|
if (e.key === "Enter" && !e.shiftKey) {
|
|
@@ -6127,19 +6085,24 @@ var ChatInput = React5.forwardRef(
|
|
|
6127
6085
|
handleSubmit();
|
|
6128
6086
|
}
|
|
6129
6087
|
};
|
|
6088
|
+
React4.useEffect(() => {
|
|
6089
|
+
updateHeight();
|
|
6090
|
+
}, [value, updateHeight]);
|
|
6130
6091
|
return /* @__PURE__ */ jsxs194("div", { className: clsx_default("lib-xplat-chat-input", disabled && "disabled"), children: [
|
|
6131
|
-
/* @__PURE__ */
|
|
6132
|
-
|
|
6092
|
+
/* @__PURE__ */ jsx302(
|
|
6093
|
+
"textarea",
|
|
6133
6094
|
{
|
|
6134
|
-
ref,
|
|
6095
|
+
ref: setRefs,
|
|
6096
|
+
className: "chat-input-textarea",
|
|
6135
6097
|
placeholder,
|
|
6136
6098
|
value,
|
|
6137
6099
|
disabled,
|
|
6100
|
+
rows: 1,
|
|
6138
6101
|
onChange: handleChange,
|
|
6139
6102
|
onKeyDown: handleKeyDown
|
|
6140
6103
|
}
|
|
6141
6104
|
),
|
|
6142
|
-
/* @__PURE__ */
|
|
6105
|
+
/* @__PURE__ */ jsx302(
|
|
6143
6106
|
"button",
|
|
6144
6107
|
{
|
|
6145
6108
|
type: "button",
|
|
@@ -6147,7 +6110,7 @@ var ChatInput = React5.forwardRef(
|
|
|
6147
6110
|
disabled: !hasText || disabled,
|
|
6148
6111
|
onClick: handleSubmit,
|
|
6149
6112
|
"aria-label": "\uC804\uC1A1",
|
|
6150
|
-
children: /* @__PURE__ */
|
|
6113
|
+
children: /* @__PURE__ */ jsx302(SendIcon_default, {})
|
|
6151
6114
|
}
|
|
6152
6115
|
)
|
|
6153
6116
|
] });
|
|
@@ -6157,7 +6120,7 @@ ChatInput.displayName = "ChatInput";
|
|
|
6157
6120
|
var ChatInput_default = ChatInput;
|
|
6158
6121
|
|
|
6159
6122
|
// src/components/Box/Box.tsx
|
|
6160
|
-
import { jsx as
|
|
6123
|
+
import { jsx as jsx303, jsxs as jsxs195 } from "react/jsx-runtime";
|
|
6161
6124
|
var Box = ({
|
|
6162
6125
|
children,
|
|
6163
6126
|
title,
|
|
@@ -6165,21 +6128,21 @@ var Box = ({
|
|
|
6165
6128
|
padding = "md"
|
|
6166
6129
|
}) => {
|
|
6167
6130
|
return /* @__PURE__ */ jsxs195("div", { className: clsx_default("lib-xplat-box", variant, `pad-${padding}`), children: [
|
|
6168
|
-
title && /* @__PURE__ */
|
|
6169
|
-
/* @__PURE__ */
|
|
6131
|
+
title && /* @__PURE__ */ jsx303("div", { className: "box-title", children: title }),
|
|
6132
|
+
/* @__PURE__ */ jsx303("div", { className: "box-content", children })
|
|
6170
6133
|
] });
|
|
6171
6134
|
};
|
|
6172
6135
|
Box.displayName = "Box";
|
|
6173
6136
|
var Box_default = Box;
|
|
6174
6137
|
|
|
6175
6138
|
// src/components/CardTab/CardTab.tsx
|
|
6176
|
-
import
|
|
6139
|
+
import React5 from "react";
|
|
6177
6140
|
|
|
6178
6141
|
// src/components/CardTab/CardTabPanel.tsx
|
|
6179
|
-
import { jsx as
|
|
6142
|
+
import { jsx as jsx304 } from "react/jsx-runtime";
|
|
6180
6143
|
var CardTabPanel = (props) => {
|
|
6181
6144
|
const { children, columns = 3 } = props;
|
|
6182
|
-
return /* @__PURE__ */
|
|
6145
|
+
return /* @__PURE__ */ jsx304(
|
|
6183
6146
|
"div",
|
|
6184
6147
|
{
|
|
6185
6148
|
className: "card-tab-panel",
|
|
@@ -6192,7 +6155,7 @@ CardTabPanel.displayName = "CardTab.Panel";
|
|
|
6192
6155
|
var CardTabPanel_default = CardTabPanel;
|
|
6193
6156
|
|
|
6194
6157
|
// src/components/CardTab/CardTab.tsx
|
|
6195
|
-
import { jsx as
|
|
6158
|
+
import { jsx as jsx305, jsxs as jsxs196 } from "react/jsx-runtime";
|
|
6196
6159
|
var CardTabRoot = (props) => {
|
|
6197
6160
|
const {
|
|
6198
6161
|
tabs,
|
|
@@ -6202,7 +6165,7 @@ var CardTabRoot = (props) => {
|
|
|
6202
6165
|
children
|
|
6203
6166
|
} = props;
|
|
6204
6167
|
const isControlled = activeValueProp !== void 0;
|
|
6205
|
-
const [uncontrolledValue, setUncontrolledValue] =
|
|
6168
|
+
const [uncontrolledValue, setUncontrolledValue] = React5.useState(tabs[0]?.value ?? "");
|
|
6206
6169
|
const activeValue = isControlled ? activeValueProp : uncontrolledValue;
|
|
6207
6170
|
const handleTabClick = (tab) => {
|
|
6208
6171
|
if (!isControlled) {
|
|
@@ -6210,16 +6173,16 @@ var CardTabRoot = (props) => {
|
|
|
6210
6173
|
}
|
|
6211
6174
|
onChange?.(tab);
|
|
6212
6175
|
};
|
|
6213
|
-
const panels =
|
|
6214
|
-
(child) =>
|
|
6176
|
+
const panels = React5.Children.toArray(children).filter(
|
|
6177
|
+
(child) => React5.isValidElement(child) && child.type === CardTabPanel_default
|
|
6215
6178
|
);
|
|
6216
6179
|
const activePanel = panels.find(
|
|
6217
6180
|
(panel) => panel.props.value === activeValue
|
|
6218
6181
|
);
|
|
6219
6182
|
return /* @__PURE__ */ jsxs196("div", { className: clsx_default("lib-xplat-card-tab", size), children: [
|
|
6220
|
-
/* @__PURE__ */
|
|
6183
|
+
/* @__PURE__ */ jsx305("div", { className: "card-tab-bar", children: tabs.map((tab) => {
|
|
6221
6184
|
const isActive = tab.value === activeValue;
|
|
6222
|
-
return /* @__PURE__ */
|
|
6185
|
+
return /* @__PURE__ */ jsx305(
|
|
6223
6186
|
"button",
|
|
6224
6187
|
{
|
|
6225
6188
|
className: clsx_default("card-tab-trigger", isActive && "active"),
|
|
@@ -6231,7 +6194,7 @@ var CardTabRoot = (props) => {
|
|
|
6231
6194
|
tab.value
|
|
6232
6195
|
);
|
|
6233
6196
|
}) }),
|
|
6234
|
-
/* @__PURE__ */
|
|
6197
|
+
/* @__PURE__ */ jsx305("div", { className: "card-tab-body", children: activePanel })
|
|
6235
6198
|
] });
|
|
6236
6199
|
};
|
|
6237
6200
|
CardTabRoot.displayName = "CardTab";
|
|
@@ -6241,8 +6204,8 @@ var CardTab = Object.assign(CardTabRoot, {
|
|
|
6241
6204
|
var CardTab_default = CardTab;
|
|
6242
6205
|
|
|
6243
6206
|
// src/components/Chart/Chart.tsx
|
|
6244
|
-
import
|
|
6245
|
-
import { Fragment as Fragment2, jsx as
|
|
6207
|
+
import React6 from "react";
|
|
6208
|
+
import { Fragment as Fragment2, jsx as jsx306, jsxs as jsxs197 } from "react/jsx-runtime";
|
|
6246
6209
|
var CATEGORICAL_COUNT2 = 8;
|
|
6247
6210
|
var LINE_BAR_PALETTES = Array.from({ length: CATEGORICAL_COUNT2 }, (_, i) => {
|
|
6248
6211
|
const n = i + 1;
|
|
@@ -6288,11 +6251,11 @@ var toSmoothPath = (points) => {
|
|
|
6288
6251
|
};
|
|
6289
6252
|
var RESIZE_SETTLE_MS = 150;
|
|
6290
6253
|
var useChartSize = (ref) => {
|
|
6291
|
-
const [size, setSize] =
|
|
6292
|
-
const settleTimer =
|
|
6293
|
-
const committedSize =
|
|
6294
|
-
const initialRef =
|
|
6295
|
-
|
|
6254
|
+
const [size, setSize] = React6.useState({ width: 0, height: 0 });
|
|
6255
|
+
const settleTimer = React6.useRef(0);
|
|
6256
|
+
const committedSize = React6.useRef({ width: 0, height: 0 });
|
|
6257
|
+
const initialRef = React6.useRef(true);
|
|
6258
|
+
React6.useEffect(() => {
|
|
6296
6259
|
const el = ref.current;
|
|
6297
6260
|
if (!el) return;
|
|
6298
6261
|
const observer = new ResizeObserver((entries) => {
|
|
@@ -6334,10 +6297,10 @@ var useChartSize = (ref) => {
|
|
|
6334
6297
|
};
|
|
6335
6298
|
var prefersReducedMotion = () => typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
6336
6299
|
var useChartAnimation = (containerRef, dataKey) => {
|
|
6337
|
-
const [animate, setAnimate] =
|
|
6338
|
-
const prevDataKey =
|
|
6339
|
-
const hasAnimated =
|
|
6340
|
-
|
|
6300
|
+
const [animate, setAnimate] = React6.useState(false);
|
|
6301
|
+
const prevDataKey = React6.useRef(dataKey);
|
|
6302
|
+
const hasAnimated = React6.useRef(false);
|
|
6303
|
+
React6.useEffect(() => {
|
|
6341
6304
|
if (prefersReducedMotion()) return;
|
|
6342
6305
|
const el = containerRef.current;
|
|
6343
6306
|
if (!el) return;
|
|
@@ -6353,7 +6316,7 @@ var useChartAnimation = (containerRef, dataKey) => {
|
|
|
6353
6316
|
observer.observe(el);
|
|
6354
6317
|
return () => observer.disconnect();
|
|
6355
6318
|
}, [containerRef]);
|
|
6356
|
-
|
|
6319
|
+
React6.useEffect(() => {
|
|
6357
6320
|
if (dataKey !== prevDataKey.current) {
|
|
6358
6321
|
prevDataKey.current = dataKey;
|
|
6359
6322
|
if (prefersReducedMotion()) return;
|
|
@@ -6364,15 +6327,15 @@ var useChartAnimation = (containerRef, dataKey) => {
|
|
|
6364
6327
|
return animate || prefersReducedMotion();
|
|
6365
6328
|
};
|
|
6366
6329
|
var useChartTooltip = (enabled) => {
|
|
6367
|
-
const [tooltip, setTooltip] =
|
|
6330
|
+
const [tooltip, setTooltip] = React6.useState({
|
|
6368
6331
|
visible: false,
|
|
6369
6332
|
x: 0,
|
|
6370
6333
|
y: 0,
|
|
6371
6334
|
content: ""
|
|
6372
6335
|
});
|
|
6373
|
-
const containerRef =
|
|
6374
|
-
const rafRef =
|
|
6375
|
-
const move =
|
|
6336
|
+
const containerRef = React6.useRef(null);
|
|
6337
|
+
const rafRef = React6.useRef(0);
|
|
6338
|
+
const move = React6.useCallback((e) => {
|
|
6376
6339
|
if (!enabled) return;
|
|
6377
6340
|
const clientX = e.clientX;
|
|
6378
6341
|
const clientY = e.clientY;
|
|
@@ -6387,7 +6350,7 @@ var useChartTooltip = (enabled) => {
|
|
|
6387
6350
|
}));
|
|
6388
6351
|
});
|
|
6389
6352
|
}, [enabled]);
|
|
6390
|
-
const show =
|
|
6353
|
+
const show = React6.useCallback((e, content) => {
|
|
6391
6354
|
if (!enabled) return;
|
|
6392
6355
|
const rect = containerRef.current?.getBoundingClientRect();
|
|
6393
6356
|
if (!rect) return;
|
|
@@ -6398,18 +6361,18 @@ var useChartTooltip = (enabled) => {
|
|
|
6398
6361
|
content
|
|
6399
6362
|
});
|
|
6400
6363
|
}, [enabled]);
|
|
6401
|
-
const hide =
|
|
6364
|
+
const hide = React6.useCallback(() => {
|
|
6402
6365
|
cancelAnimationFrame(rafRef.current);
|
|
6403
6366
|
setTooltip((prev) => ({ ...prev, visible: false }));
|
|
6404
6367
|
}, []);
|
|
6405
6368
|
return { tooltip, show, hide, move, containerRef };
|
|
6406
6369
|
};
|
|
6407
|
-
var GridLines =
|
|
6370
|
+
var GridLines = React6.memo(({ width, height, chartH, maxVal }) => /* @__PURE__ */ jsx306(Fragment2, { children: [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
|
|
6408
6371
|
const y = PADDING.top + (1 - ratio) * chartH;
|
|
6409
6372
|
const val = Math.round(maxVal * ratio);
|
|
6410
6373
|
return /* @__PURE__ */ jsxs197("g", { children: [
|
|
6411
|
-
/* @__PURE__ */
|
|
6412
|
-
/* @__PURE__ */
|
|
6374
|
+
/* @__PURE__ */ jsx306("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
6375
|
+
/* @__PURE__ */ jsx306("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
6413
6376
|
] }, ratio);
|
|
6414
6377
|
}) }));
|
|
6415
6378
|
GridLines.displayName = "GridLines";
|
|
@@ -6419,25 +6382,25 @@ var getLabelStep = (count, chartW) => {
|
|
|
6419
6382
|
if (count <= maxLabels) return 1;
|
|
6420
6383
|
return Math.ceil(count / maxLabels);
|
|
6421
6384
|
};
|
|
6422
|
-
var AxisLabels =
|
|
6385
|
+
var AxisLabels = React6.memo(({ labels, count, chartW, height }) => {
|
|
6423
6386
|
const step = getLabelStep(count, chartW);
|
|
6424
|
-
return /* @__PURE__ */
|
|
6387
|
+
return /* @__PURE__ */ jsx306(Fragment2, { children: labels.map((label, i) => {
|
|
6425
6388
|
if (i % step !== 0) return null;
|
|
6426
6389
|
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
6427
|
-
return /* @__PURE__ */
|
|
6390
|
+
return /* @__PURE__ */ jsx306("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
6428
6391
|
}) });
|
|
6429
6392
|
});
|
|
6430
6393
|
AxisLabels.displayName = "AxisLabels";
|
|
6431
|
-
var LineChart =
|
|
6432
|
-
const entries =
|
|
6433
|
-
const maxVal =
|
|
6394
|
+
var LineChart = React6.memo(({ data, labels, width, height, animate, onHover, onMove, onLeave }) => {
|
|
6395
|
+
const entries = React6.useMemo(() => Object.entries(data), [data]);
|
|
6396
|
+
const maxVal = React6.useMemo(() => {
|
|
6434
6397
|
const allValues = entries.flatMap(([, v]) => v);
|
|
6435
6398
|
return Math.max(...allValues) * 1.2 || 1;
|
|
6436
6399
|
}, [entries]);
|
|
6437
6400
|
const count = labels.length;
|
|
6438
6401
|
const chartW = width - PADDING.left - PADDING.right;
|
|
6439
6402
|
const chartH = height - PADDING.top - PADDING.bottom;
|
|
6440
|
-
const seriesPoints =
|
|
6403
|
+
const seriesPoints = React6.useMemo(
|
|
6441
6404
|
() => entries.map(
|
|
6442
6405
|
([, values]) => values.map((v, i) => ({
|
|
6443
6406
|
x: PADDING.left + i / (count - 1 || 1) * chartW,
|
|
@@ -6448,8 +6411,8 @@ var LineChart = React7.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
6448
6411
|
[entries, count, chartW, chartH, maxVal]
|
|
6449
6412
|
);
|
|
6450
6413
|
const showPoints = count <= 100;
|
|
6451
|
-
const lineRefs =
|
|
6452
|
-
|
|
6414
|
+
const lineRefs = React6.useRef([]);
|
|
6415
|
+
React6.useEffect(() => {
|
|
6453
6416
|
if (!animate) return;
|
|
6454
6417
|
lineRefs.current.forEach((el) => {
|
|
6455
6418
|
if (!el) return;
|
|
@@ -6463,8 +6426,8 @@ var LineChart = React7.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
6463
6426
|
});
|
|
6464
6427
|
}, [animate, seriesPoints]);
|
|
6465
6428
|
return /* @__PURE__ */ jsxs197("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
6466
|
-
/* @__PURE__ */
|
|
6467
|
-
/* @__PURE__ */
|
|
6429
|
+
/* @__PURE__ */ jsx306(GridLines, { width, height, chartH, maxVal }),
|
|
6430
|
+
/* @__PURE__ */ jsx306(AxisLabels, { labels, count, chartW, height }),
|
|
6468
6431
|
entries.map(([key], di) => {
|
|
6469
6432
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
6470
6433
|
const color = palette[2];
|
|
@@ -6474,11 +6437,11 @@ var LineChart = React7.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
6474
6437
|
const polyPoints = points.map((p) => `${p.x},${p.y}`).join(" ");
|
|
6475
6438
|
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`;
|
|
6476
6439
|
return /* @__PURE__ */ jsxs197("g", { children: [
|
|
6477
|
-
/* @__PURE__ */
|
|
6478
|
-
/* @__PURE__ */
|
|
6479
|
-
/* @__PURE__ */
|
|
6440
|
+
/* @__PURE__ */ jsx306("defs", { children: /* @__PURE__ */ jsxs197("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
6441
|
+
/* @__PURE__ */ jsx306("stop", { offset: "0%", stopColor: areaColor, stopOpacity: "0.2" }),
|
|
6442
|
+
/* @__PURE__ */ jsx306("stop", { offset: "100%", stopColor: areaColor, stopOpacity: "0" })
|
|
6480
6443
|
] }) }),
|
|
6481
|
-
/* @__PURE__ */
|
|
6444
|
+
/* @__PURE__ */ jsx306(
|
|
6482
6445
|
"path",
|
|
6483
6446
|
{
|
|
6484
6447
|
d: areaD,
|
|
@@ -6487,7 +6450,7 @@ var LineChart = React7.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
6487
6450
|
style: animate ? { animationDelay: "600ms" } : { opacity: 1 }
|
|
6488
6451
|
}
|
|
6489
6452
|
),
|
|
6490
|
-
/* @__PURE__ */
|
|
6453
|
+
/* @__PURE__ */ jsx306(
|
|
6491
6454
|
"polyline",
|
|
6492
6455
|
{
|
|
6493
6456
|
ref: (el) => {
|
|
@@ -6499,7 +6462,7 @@ var LineChart = React7.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
6499
6462
|
strokeWidth: "2"
|
|
6500
6463
|
}
|
|
6501
6464
|
),
|
|
6502
|
-
showPoints && points.map((p, i) => /* @__PURE__ */
|
|
6465
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ jsx306(
|
|
6503
6466
|
"circle",
|
|
6504
6467
|
{
|
|
6505
6468
|
cx: p.x,
|
|
@@ -6518,16 +6481,16 @@ var LineChart = React7.memo(({ data, labels, width, height, animate, onHover, on
|
|
|
6518
6481
|
] });
|
|
6519
6482
|
});
|
|
6520
6483
|
LineChart.displayName = "LineChart";
|
|
6521
|
-
var CurveChart =
|
|
6522
|
-
const entries =
|
|
6523
|
-
const maxVal =
|
|
6484
|
+
var CurveChart = React6.memo(({ data, labels, width, height, animate, onHover, onMove, onLeave }) => {
|
|
6485
|
+
const entries = React6.useMemo(() => Object.entries(data), [data]);
|
|
6486
|
+
const maxVal = React6.useMemo(() => {
|
|
6524
6487
|
const allValues = entries.flatMap(([, v]) => v);
|
|
6525
6488
|
return Math.max(...allValues) * 1.2 || 1;
|
|
6526
6489
|
}, [entries]);
|
|
6527
6490
|
const count = labels.length;
|
|
6528
6491
|
const chartW = width - PADDING.left - PADDING.right;
|
|
6529
6492
|
const chartH = height - PADDING.top - PADDING.bottom;
|
|
6530
|
-
const seriesPoints =
|
|
6493
|
+
const seriesPoints = React6.useMemo(
|
|
6531
6494
|
() => entries.map(
|
|
6532
6495
|
([, values]) => values.map((v, i) => ({
|
|
6533
6496
|
x: PADDING.left + i / (count - 1 || 1) * chartW,
|
|
@@ -6538,8 +6501,8 @@ var CurveChart = React7.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
6538
6501
|
[entries, count, chartW, chartH, maxVal]
|
|
6539
6502
|
);
|
|
6540
6503
|
const showPoints = count <= 100;
|
|
6541
|
-
const lineRefs =
|
|
6542
|
-
|
|
6504
|
+
const lineRefs = React6.useRef([]);
|
|
6505
|
+
React6.useEffect(() => {
|
|
6543
6506
|
if (!animate) return;
|
|
6544
6507
|
lineRefs.current.forEach((el) => {
|
|
6545
6508
|
if (!el) return;
|
|
@@ -6553,8 +6516,8 @@ var CurveChart = React7.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
6553
6516
|
});
|
|
6554
6517
|
}, [animate, seriesPoints]);
|
|
6555
6518
|
return /* @__PURE__ */ jsxs197("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
6556
|
-
/* @__PURE__ */
|
|
6557
|
-
/* @__PURE__ */
|
|
6519
|
+
/* @__PURE__ */ jsx306(GridLines, { width, height, chartH, maxVal }),
|
|
6520
|
+
/* @__PURE__ */ jsx306(AxisLabels, { labels, count, chartW, height }),
|
|
6558
6521
|
entries.map(([key], di) => {
|
|
6559
6522
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
6560
6523
|
const color = palette[2];
|
|
@@ -6564,11 +6527,11 @@ var CurveChart = React7.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
6564
6527
|
const linePath = toSmoothPath(points);
|
|
6565
6528
|
const areaPath = linePath + ` L ${points[points.length - 1].x} ${PADDING.top + chartH} L ${points[0].x} ${PADDING.top + chartH} Z`;
|
|
6566
6529
|
return /* @__PURE__ */ jsxs197("g", { children: [
|
|
6567
|
-
/* @__PURE__ */
|
|
6568
|
-
/* @__PURE__ */
|
|
6569
|
-
/* @__PURE__ */
|
|
6530
|
+
/* @__PURE__ */ jsx306("defs", { children: /* @__PURE__ */ jsxs197("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
6531
|
+
/* @__PURE__ */ jsx306("stop", { offset: "0%", stopColor: areaColor, stopOpacity: "0.4" }),
|
|
6532
|
+
/* @__PURE__ */ jsx306("stop", { offset: "100%", stopColor: areaColor, stopOpacity: "0.02" })
|
|
6570
6533
|
] }) }),
|
|
6571
|
-
/* @__PURE__ */
|
|
6534
|
+
/* @__PURE__ */ jsx306(
|
|
6572
6535
|
"path",
|
|
6573
6536
|
{
|
|
6574
6537
|
d: areaPath,
|
|
@@ -6577,7 +6540,7 @@ var CurveChart = React7.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
6577
6540
|
style: animate ? { animationDelay: "600ms" } : { opacity: 1 }
|
|
6578
6541
|
}
|
|
6579
6542
|
),
|
|
6580
|
-
/* @__PURE__ */
|
|
6543
|
+
/* @__PURE__ */ jsx306(
|
|
6581
6544
|
"path",
|
|
6582
6545
|
{
|
|
6583
6546
|
ref: (el) => {
|
|
@@ -6589,7 +6552,7 @@ var CurveChart = React7.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
6589
6552
|
strokeWidth: "2"
|
|
6590
6553
|
}
|
|
6591
6554
|
),
|
|
6592
|
-
showPoints && points.map((p, i) => /* @__PURE__ */
|
|
6555
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ jsx306(
|
|
6593
6556
|
"circle",
|
|
6594
6557
|
{
|
|
6595
6558
|
cx: p.x,
|
|
@@ -6608,9 +6571,9 @@ var CurveChart = React7.memo(({ data, labels, width, height, animate, onHover, o
|
|
|
6608
6571
|
] });
|
|
6609
6572
|
});
|
|
6610
6573
|
CurveChart.displayName = "CurveChart";
|
|
6611
|
-
var BarChart =
|
|
6612
|
-
const entries =
|
|
6613
|
-
const maxVal =
|
|
6574
|
+
var BarChart = React6.memo(({ data, labels, width, height, animate, onHover, onMove, onLeave }) => {
|
|
6575
|
+
const entries = React6.useMemo(() => Object.entries(data), [data]);
|
|
6576
|
+
const maxVal = React6.useMemo(() => {
|
|
6614
6577
|
const allValues = entries.flatMap(([, v]) => v);
|
|
6615
6578
|
return Math.max(...allValues) * 1.2 || 1;
|
|
6616
6579
|
}, [entries]);
|
|
@@ -6622,7 +6585,7 @@ var BarChart = React7.memo(({ data, labels, width, height, animate, onHover, onM
|
|
|
6622
6585
|
const barGap = groupCount > 1 ? 2 : 0;
|
|
6623
6586
|
const barW = Math.max(1, Math.min(32, (groupW * 0.7 - barGap * (groupCount - 1)) / groupCount));
|
|
6624
6587
|
const baseline = PADDING.top + chartH;
|
|
6625
|
-
const bars =
|
|
6588
|
+
const bars = React6.useMemo(
|
|
6626
6589
|
() => entries.map(
|
|
6627
6590
|
([, values], di) => values.map((v, i) => {
|
|
6628
6591
|
const totalBarsW = barW * groupCount + barGap * (groupCount - 1);
|
|
@@ -6636,10 +6599,10 @@ var BarChart = React7.memo(({ data, labels, width, height, animate, onHover, onM
|
|
|
6636
6599
|
);
|
|
6637
6600
|
const barLabelStep = getLabelStep(count, chartW);
|
|
6638
6601
|
return /* @__PURE__ */ jsxs197("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
6639
|
-
/* @__PURE__ */
|
|
6602
|
+
/* @__PURE__ */ jsx306(GridLines, { width, height, chartH, maxVal }),
|
|
6640
6603
|
labels.map((label, i) => {
|
|
6641
6604
|
if (i % barLabelStep !== 0) return null;
|
|
6642
|
-
return /* @__PURE__ */
|
|
6605
|
+
return /* @__PURE__ */ jsx306("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
6643
6606
|
}),
|
|
6644
6607
|
entries.map(([key], di) => {
|
|
6645
6608
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
@@ -6648,7 +6611,7 @@ var BarChart = React7.memo(({ data, labels, width, height, animate, onHover, onM
|
|
|
6648
6611
|
const r2 = Math.min(4, b.w / 2);
|
|
6649
6612
|
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`;
|
|
6650
6613
|
const delay = 100 + i * 80;
|
|
6651
|
-
return /* @__PURE__ */
|
|
6614
|
+
return /* @__PURE__ */ jsx306(
|
|
6652
6615
|
"path",
|
|
6653
6616
|
{
|
|
6654
6617
|
d,
|
|
@@ -6669,11 +6632,11 @@ var BarChart = React7.memo(({ data, labels, width, height, animate, onHover, onM
|
|
|
6669
6632
|
] });
|
|
6670
6633
|
});
|
|
6671
6634
|
BarChart.displayName = "BarChart";
|
|
6672
|
-
var PieDonutChart =
|
|
6635
|
+
var PieDonutChart = React6.memo(
|
|
6673
6636
|
({ data, labels, width, height, animate, isDoughnut, onHover, onMove, onLeave }) => {
|
|
6674
|
-
const entries =
|
|
6675
|
-
const values =
|
|
6676
|
-
const total =
|
|
6637
|
+
const entries = React6.useMemo(() => Object.entries(data), [data]);
|
|
6638
|
+
const values = React6.useMemo(() => entries.flatMap(([, v]) => v), [entries]);
|
|
6639
|
+
const total = React6.useMemo(() => values.reduce((a, b) => a + b, 0) || 1, [values]);
|
|
6677
6640
|
const size = Math.min(width, height);
|
|
6678
6641
|
const cx = size / 2;
|
|
6679
6642
|
const cy = size / 2;
|
|
@@ -6681,10 +6644,10 @@ var PieDonutChart = React7.memo(
|
|
|
6681
6644
|
const innerR = isDoughnut ? r2 * 0.5 : 0;
|
|
6682
6645
|
const firstKey = entries[0]?.[0] ?? "";
|
|
6683
6646
|
const colorOffset = hashString(firstKey);
|
|
6684
|
-
const maskRef =
|
|
6647
|
+
const maskRef = React6.useRef(null);
|
|
6685
6648
|
const maskR = r2 + 10;
|
|
6686
6649
|
const maskCircumference = 2 * Math.PI * maskR;
|
|
6687
|
-
|
|
6650
|
+
React6.useEffect(() => {
|
|
6688
6651
|
if (!animate || !maskRef.current) return;
|
|
6689
6652
|
const el = maskRef.current;
|
|
6690
6653
|
el.style.strokeDasharray = `${maskCircumference}`;
|
|
@@ -6694,7 +6657,7 @@ var PieDonutChart = React7.memo(
|
|
|
6694
6657
|
el.style.strokeDashoffset = "0";
|
|
6695
6658
|
});
|
|
6696
6659
|
}, [animate, maskCircumference]);
|
|
6697
|
-
const sliceData =
|
|
6660
|
+
const sliceData = React6.useMemo(() => {
|
|
6698
6661
|
let angle0 = -Math.PI / 2;
|
|
6699
6662
|
let cumulativeAngle = 0;
|
|
6700
6663
|
return values.map((v, i) => {
|
|
@@ -6729,7 +6692,7 @@ var PieDonutChart = React7.memo(
|
|
|
6729
6692
|
}, [values, total, cx, cy, r2, innerR, labels]);
|
|
6730
6693
|
const maskId = `pie-mask-${isDoughnut ? "d" : "p"}`;
|
|
6731
6694
|
return /* @__PURE__ */ jsxs197("svg", { viewBox: `0 0 ${size} ${size}`, className: "chart-svg chart-pie", children: [
|
|
6732
|
-
animate && /* @__PURE__ */
|
|
6695
|
+
animate && /* @__PURE__ */ jsx306("defs", { children: /* @__PURE__ */ jsx306("mask", { id: maskId, children: /* @__PURE__ */ jsx306(
|
|
6733
6696
|
"circle",
|
|
6734
6697
|
{
|
|
6735
6698
|
ref: maskRef,
|
|
@@ -6742,7 +6705,7 @@ var PieDonutChart = React7.memo(
|
|
|
6742
6705
|
transform: `rotate(-90 ${cx} ${cy})`
|
|
6743
6706
|
}
|
|
6744
6707
|
) }) }),
|
|
6745
|
-
/* @__PURE__ */
|
|
6708
|
+
/* @__PURE__ */ jsx306("g", { mask: animate ? `url(#${maskId})` : void 0, children: sliceData.map((s, i) => /* @__PURE__ */ jsx306("g", { children: /* @__PURE__ */ jsx306(
|
|
6746
6709
|
"path",
|
|
6747
6710
|
{
|
|
6748
6711
|
d: s.d,
|
|
@@ -6753,7 +6716,7 @@ var PieDonutChart = React7.memo(
|
|
|
6753
6716
|
onMouseLeave: onLeave
|
|
6754
6717
|
}
|
|
6755
6718
|
) }, i)) }),
|
|
6756
|
-
sliceData.map((s, i) => s.angle > 0.2 && /* @__PURE__ */
|
|
6719
|
+
sliceData.map((s, i) => s.angle > 0.2 && /* @__PURE__ */ jsx306(
|
|
6757
6720
|
"text",
|
|
6758
6721
|
{
|
|
6759
6722
|
x: s.lx,
|
|
@@ -6771,9 +6734,9 @@ var PieDonutChart = React7.memo(
|
|
|
6771
6734
|
);
|
|
6772
6735
|
PieDonutChart.displayName = "PieDonutChart";
|
|
6773
6736
|
var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
6774
|
-
const ref =
|
|
6775
|
-
const [adjustedX, setAdjustedX] =
|
|
6776
|
-
|
|
6737
|
+
const ref = React6.useRef(null);
|
|
6738
|
+
const [adjustedX, setAdjustedX] = React6.useState(x);
|
|
6739
|
+
React6.useEffect(() => {
|
|
6777
6740
|
const el = ref.current;
|
|
6778
6741
|
if (!el) return;
|
|
6779
6742
|
const w = el.offsetWidth;
|
|
@@ -6784,7 +6747,7 @@ var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
|
6784
6747
|
else if (x + half > containerWidth - margin) nx = containerWidth - half - margin;
|
|
6785
6748
|
setAdjustedX(nx);
|
|
6786
6749
|
}, [x, containerWidth]);
|
|
6787
|
-
return /* @__PURE__ */
|
|
6750
|
+
return /* @__PURE__ */ jsx306(
|
|
6788
6751
|
"div",
|
|
6789
6752
|
{
|
|
6790
6753
|
ref,
|
|
@@ -6794,22 +6757,22 @@ var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
|
6794
6757
|
}
|
|
6795
6758
|
);
|
|
6796
6759
|
};
|
|
6797
|
-
var Chart =
|
|
6760
|
+
var Chart = React6.memo((props) => {
|
|
6798
6761
|
const { type, data, labels, tooltip: showTooltip = true } = props;
|
|
6799
6762
|
const { tooltip, show, hide, move, containerRef } = useChartTooltip(showTooltip);
|
|
6800
6763
|
const { width, height } = useChartSize(containerRef);
|
|
6801
|
-
const stableData =
|
|
6802
|
-
const stableLabels =
|
|
6803
|
-
const dataKey =
|
|
6764
|
+
const stableData = React6.useMemo(() => data, [JSON.stringify(data)]);
|
|
6765
|
+
const stableLabels = React6.useMemo(() => labels, [JSON.stringify(labels)]);
|
|
6766
|
+
const dataKey = React6.useMemo(() => JSON.stringify(labels), [labels]);
|
|
6804
6767
|
const animate = useChartAnimation(containerRef, dataKey);
|
|
6805
6768
|
const ready = width > 0 && height > 0;
|
|
6806
6769
|
return /* @__PURE__ */ jsxs197("div", { className: "lib-xplat-chart", ref: containerRef, children: [
|
|
6807
|
-
ready && type === "line" && /* @__PURE__ */
|
|
6808
|
-
ready && type === "curve" && /* @__PURE__ */
|
|
6809
|
-
ready && type === "bar" && /* @__PURE__ */
|
|
6810
|
-
ready && type === "pie" && /* @__PURE__ */
|
|
6811
|
-
ready && type === "doughnut" && /* @__PURE__ */
|
|
6812
|
-
tooltip.visible && /* @__PURE__ */
|
|
6770
|
+
ready && type === "line" && /* @__PURE__ */ jsx306(LineChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
6771
|
+
ready && type === "curve" && /* @__PURE__ */ jsx306(CurveChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
6772
|
+
ready && type === "bar" && /* @__PURE__ */ jsx306(BarChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
6773
|
+
ready && type === "pie" && /* @__PURE__ */ jsx306(PieDonutChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
6774
|
+
ready && type === "doughnut" && /* @__PURE__ */ jsx306(PieDonutChart, { data: stableData, labels: stableLabels, width, height, animate, isDoughnut: true, onHover: show, onMove: move, onLeave: hide }),
|
|
6775
|
+
tooltip.visible && /* @__PURE__ */ jsx306(TooltipBubble, { x: tooltip.x, y: tooltip.y, containerWidth: width, children: tooltip.content })
|
|
6813
6776
|
] });
|
|
6814
6777
|
});
|
|
6815
6778
|
Chart.displayName = "Chart";
|
|
@@ -6835,7 +6798,7 @@ import { primitive, semantic } from "@x-plat/tokens-core";
|
|
|
6835
6798
|
import { cssVar } from "@x-plat/tokens-core";
|
|
6836
6799
|
|
|
6837
6800
|
// src/components/CheckBox/CheckBox.tsx
|
|
6838
|
-
import { jsx as
|
|
6801
|
+
import { jsx as jsx307, jsxs as jsxs198 } from "react/jsx-runtime";
|
|
6839
6802
|
var CheckBox = (props) => {
|
|
6840
6803
|
const {
|
|
6841
6804
|
checked,
|
|
@@ -6854,7 +6817,7 @@ var CheckBox = (props) => {
|
|
|
6854
6817
|
const disabledClasses = "disabled";
|
|
6855
6818
|
const boxClasses = disabled ? disabledClasses : checked ? checkedClasses : uncheckedClasses;
|
|
6856
6819
|
return /* @__PURE__ */ jsxs198("label", { className: clsx_default("lib-xplat-checkbox", size, type), children: [
|
|
6857
|
-
/* @__PURE__ */
|
|
6820
|
+
/* @__PURE__ */ jsx307(
|
|
6858
6821
|
"input",
|
|
6859
6822
|
{
|
|
6860
6823
|
type: "checkbox",
|
|
@@ -6864,44 +6827,44 @@ var CheckBox = (props) => {
|
|
|
6864
6827
|
...rest
|
|
6865
6828
|
}
|
|
6866
6829
|
),
|
|
6867
|
-
/* @__PURE__ */
|
|
6868
|
-
label && /* @__PURE__ */
|
|
6830
|
+
/* @__PURE__ */ jsx307("span", { className: clsx_default("checkbox", boxClasses), children: /* @__PURE__ */ jsx307("span", { className: clsx_default("check-icon", { visible: checked }), children: /* @__PURE__ */ jsx307(CheckIcon_default, {}) }) }),
|
|
6831
|
+
label && /* @__PURE__ */ jsx307("span", { className: "label", children: label })
|
|
6869
6832
|
] });
|
|
6870
6833
|
};
|
|
6871
6834
|
CheckBox.displayName = "CheckBox";
|
|
6872
6835
|
var CheckBox_default = CheckBox;
|
|
6873
6836
|
|
|
6874
6837
|
// src/components/Chip/Chip.tsx
|
|
6875
|
-
import { jsx as
|
|
6838
|
+
import { jsx as jsx308 } from "react/jsx-runtime";
|
|
6876
6839
|
var Chip = (props) => {
|
|
6877
6840
|
const {
|
|
6878
6841
|
children,
|
|
6879
6842
|
type = "primary",
|
|
6880
6843
|
size = "md"
|
|
6881
6844
|
} = props;
|
|
6882
|
-
return /* @__PURE__ */
|
|
6845
|
+
return /* @__PURE__ */ jsx308("div", { className: clsx_default("lib-xplat-chip", type, size), children });
|
|
6883
6846
|
};
|
|
6884
6847
|
Chip.displayName = "Chip";
|
|
6885
6848
|
var Chip_default = Chip;
|
|
6886
6849
|
|
|
6887
6850
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
6888
|
-
import
|
|
6851
|
+
import React12 from "react";
|
|
6889
6852
|
|
|
6890
6853
|
// src/components/Input/Input.tsx
|
|
6891
|
-
import
|
|
6854
|
+
import React7 from "react";
|
|
6892
6855
|
|
|
6893
6856
|
// src/components/Input/InputValidations.tsx
|
|
6894
|
-
import { jsx as
|
|
6857
|
+
import { jsx as jsx309, jsxs as jsxs199 } from "react/jsx-runtime";
|
|
6895
6858
|
var InputValidations = (props) => {
|
|
6896
6859
|
const { message, status = "default" } = props;
|
|
6897
6860
|
return /* @__PURE__ */ jsxs199("div", { className: clsx_default("lib-xplat-input-validation", status), children: [
|
|
6898
6861
|
/* @__PURE__ */ jsxs199("div", { className: "icon", children: [
|
|
6899
|
-
status === "default" && /* @__PURE__ */
|
|
6900
|
-
status === "success" && /* @__PURE__ */
|
|
6901
|
-
status === "warning" && /* @__PURE__ */
|
|
6902
|
-
status === "error" && /* @__PURE__ */
|
|
6862
|
+
status === "default" && /* @__PURE__ */ jsx309(InfoIcon_default, {}),
|
|
6863
|
+
status === "success" && /* @__PURE__ */ jsx309(SuccessIcon_default, {}),
|
|
6864
|
+
status === "warning" && /* @__PURE__ */ jsx309(InfoIcon_default, {}),
|
|
6865
|
+
status === "error" && /* @__PURE__ */ jsx309(ErrorIcon_default, {})
|
|
6903
6866
|
] }),
|
|
6904
|
-
/* @__PURE__ */
|
|
6867
|
+
/* @__PURE__ */ jsx309("div", { className: "message", children: message })
|
|
6905
6868
|
] });
|
|
6906
6869
|
};
|
|
6907
6870
|
InputValidations.displayName = "InputValidations";
|
|
@@ -6942,7 +6905,7 @@ var handleTelBackspace = (prevValue, currValue) => {
|
|
|
6942
6905
|
};
|
|
6943
6906
|
|
|
6944
6907
|
// src/components/Input/Input.tsx
|
|
6945
|
-
import { jsx as
|
|
6908
|
+
import { jsx as jsx310, jsxs as jsxs200 } from "react/jsx-runtime";
|
|
6946
6909
|
import { createElement } from "react";
|
|
6947
6910
|
var formatValue = (type, value) => {
|
|
6948
6911
|
if (value === null || value === void 0) return "";
|
|
@@ -6991,7 +6954,7 @@ var parseValue = (type, value) => {
|
|
|
6991
6954
|
return value;
|
|
6992
6955
|
}
|
|
6993
6956
|
};
|
|
6994
|
-
var Input =
|
|
6957
|
+
var Input = React7.forwardRef((props, ref) => {
|
|
6995
6958
|
const {
|
|
6996
6959
|
value,
|
|
6997
6960
|
onChange,
|
|
@@ -7023,7 +6986,7 @@ var Input = React8.forwardRef((props, ref) => {
|
|
|
7023
6986
|
{
|
|
7024
6987
|
className: clsx_default("lib-xplat-input", size, disabled ? "disabled" : void 0),
|
|
7025
6988
|
children: [
|
|
7026
|
-
/* @__PURE__ */
|
|
6989
|
+
/* @__PURE__ */ jsx310(
|
|
7027
6990
|
"input",
|
|
7028
6991
|
{
|
|
7029
6992
|
...inputProps,
|
|
@@ -7034,11 +6997,11 @@ var Input = React8.forwardRef((props, ref) => {
|
|
|
7034
6997
|
onChange: handleChange
|
|
7035
6998
|
}
|
|
7036
6999
|
),
|
|
7037
|
-
suffix && /* @__PURE__ */
|
|
7000
|
+
suffix && /* @__PURE__ */ jsx310("div", { className: "suffix", children: suffix })
|
|
7038
7001
|
]
|
|
7039
7002
|
}
|
|
7040
7003
|
),
|
|
7041
|
-
validations && /* @__PURE__ */
|
|
7004
|
+
validations && /* @__PURE__ */ jsx310("div", { className: "lib-xplat-input-validation-wrap", children: validations?.map((validation, idx) => /* @__PURE__ */ createElement(
|
|
7042
7005
|
InputValidations_default,
|
|
7043
7006
|
{
|
|
7044
7007
|
...validation,
|
|
@@ -7051,20 +7014,20 @@ Input.displayName = "Input";
|
|
|
7051
7014
|
var Input_default = Input;
|
|
7052
7015
|
|
|
7053
7016
|
// src/components/Input/PasswordInput/PasswordInput.tsx
|
|
7054
|
-
import
|
|
7055
|
-
import { jsx as
|
|
7056
|
-
var PasswordInput =
|
|
7017
|
+
import React8 from "react";
|
|
7018
|
+
import { jsx as jsx311 } from "react/jsx-runtime";
|
|
7019
|
+
var PasswordInput = React8.forwardRef(
|
|
7057
7020
|
(props, ref) => {
|
|
7058
7021
|
const { reg: _reg, ...inputProps } = props;
|
|
7059
|
-
const [isView, setIsView] =
|
|
7022
|
+
const [isView, setIsView] = React8.useState(false);
|
|
7060
7023
|
const handleChangeView = () => {
|
|
7061
7024
|
setIsView((prev) => !prev);
|
|
7062
7025
|
};
|
|
7063
|
-
return /* @__PURE__ */
|
|
7026
|
+
return /* @__PURE__ */ jsx311(
|
|
7064
7027
|
Input_default,
|
|
7065
7028
|
{
|
|
7066
7029
|
...inputProps,
|
|
7067
|
-
suffix: /* @__PURE__ */
|
|
7030
|
+
suffix: /* @__PURE__ */ jsx311("div", { className: "wrapper pointer", onClick: handleChangeView, children: isView ? /* @__PURE__ */ jsx311(OpenEyeIcon_default, {}) : /* @__PURE__ */ jsx311(CloseEyeIcon_default, {}) }),
|
|
7068
7031
|
type: isView ? "text" : "password",
|
|
7069
7032
|
ref
|
|
7070
7033
|
}
|
|
@@ -7075,17 +7038,17 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
7075
7038
|
var PasswordInput_default = PasswordInput;
|
|
7076
7039
|
|
|
7077
7040
|
// src/components/Modal/Modal.tsx
|
|
7078
|
-
import
|
|
7041
|
+
import React10 from "react";
|
|
7079
7042
|
import { createPortal } from "react-dom";
|
|
7080
7043
|
|
|
7081
7044
|
// src/tokens/hooks/Portal.tsx
|
|
7082
|
-
import
|
|
7045
|
+
import React9 from "react";
|
|
7083
7046
|
import ReactDOM from "react-dom";
|
|
7084
|
-
import { jsx as
|
|
7085
|
-
var PortalContainerContext =
|
|
7086
|
-
var PortalProvider = ({ container, children }) => /* @__PURE__ */
|
|
7047
|
+
import { jsx as jsx312 } from "react/jsx-runtime";
|
|
7048
|
+
var PortalContainerContext = React9.createContext(null);
|
|
7049
|
+
var PortalProvider = ({ container, children }) => /* @__PURE__ */ jsx312(PortalContainerContext.Provider, { value: container, children });
|
|
7087
7050
|
var Portal = ({ children }) => {
|
|
7088
|
-
const contextContainer =
|
|
7051
|
+
const contextContainer = React9.useContext(PortalContainerContext);
|
|
7089
7052
|
if (typeof document === "undefined") return null;
|
|
7090
7053
|
const container = contextContainer ?? document.body;
|
|
7091
7054
|
return ReactDOM.createPortal(children, container);
|
|
@@ -7094,14 +7057,14 @@ Portal.displayName = "Portal";
|
|
|
7094
7057
|
var Portal_default = Portal;
|
|
7095
7058
|
|
|
7096
7059
|
// src/components/Modal/Modal.tsx
|
|
7097
|
-
import { jsx as
|
|
7060
|
+
import { jsx as jsx313 } from "react/jsx-runtime";
|
|
7098
7061
|
var ANIMATION_DURATION_MS = 200;
|
|
7099
7062
|
var Modal = (props) => {
|
|
7100
7063
|
const { isOpen, onClose, children } = props;
|
|
7101
|
-
const [mounted, setMounted] =
|
|
7102
|
-
const [visible, setVisible] =
|
|
7103
|
-
const boxRef =
|
|
7104
|
-
|
|
7064
|
+
const [mounted, setMounted] = React10.useState(false);
|
|
7065
|
+
const [visible, setVisible] = React10.useState(false);
|
|
7066
|
+
const boxRef = React10.useRef(null);
|
|
7067
|
+
React10.useEffect(() => {
|
|
7105
7068
|
if (isOpen) {
|
|
7106
7069
|
setMounted(true);
|
|
7107
7070
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7115,12 +7078,12 @@ var Modal = (props) => {
|
|
|
7115
7078
|
if (!mounted) return null;
|
|
7116
7079
|
const stateClass = visible ? "enter" : "exit";
|
|
7117
7080
|
return createPortal(
|
|
7118
|
-
/* @__PURE__ */
|
|
7081
|
+
/* @__PURE__ */ jsx313(
|
|
7119
7082
|
"div",
|
|
7120
7083
|
{
|
|
7121
7084
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
7122
7085
|
onClick: onClose,
|
|
7123
|
-
children: /* @__PURE__ */
|
|
7086
|
+
children: /* @__PURE__ */ jsx313(
|
|
7124
7087
|
"div",
|
|
7125
7088
|
{
|
|
7126
7089
|
ref: boxRef,
|
|
@@ -7128,7 +7091,7 @@ var Modal = (props) => {
|
|
|
7128
7091
|
role: "dialog",
|
|
7129
7092
|
"aria-modal": "true",
|
|
7130
7093
|
onClick: (e) => e.stopPropagation(),
|
|
7131
|
-
children: /* @__PURE__ */
|
|
7094
|
+
children: /* @__PURE__ */ jsx313(PortalProvider, { container: boxRef.current, children })
|
|
7132
7095
|
}
|
|
7133
7096
|
)
|
|
7134
7097
|
}
|
|
@@ -7140,9 +7103,9 @@ Modal.displayName = "Modal";
|
|
|
7140
7103
|
var Modal_default = Modal;
|
|
7141
7104
|
|
|
7142
7105
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
7143
|
-
import
|
|
7144
|
-
import { Fragment as Fragment3, jsx as
|
|
7145
|
-
var DayCell2 =
|
|
7106
|
+
import React11 from "react";
|
|
7107
|
+
import { Fragment as Fragment3, jsx as jsx314, jsxs as jsxs201 } from "react/jsx-runtime";
|
|
7108
|
+
var DayCell2 = React11.memo(
|
|
7146
7109
|
({
|
|
7147
7110
|
day,
|
|
7148
7111
|
disabled,
|
|
@@ -7152,7 +7115,7 @@ var DayCell2 = React12.memo(
|
|
|
7152
7115
|
isEnd,
|
|
7153
7116
|
inRange,
|
|
7154
7117
|
onSelect
|
|
7155
|
-
}) => /* @__PURE__ */
|
|
7118
|
+
}) => /* @__PURE__ */ jsx314(
|
|
7156
7119
|
"button",
|
|
7157
7120
|
{
|
|
7158
7121
|
type: "button",
|
|
@@ -7194,26 +7157,26 @@ var SingleDatePicker = (props) => {
|
|
|
7194
7157
|
initialYear,
|
|
7195
7158
|
initialMonth
|
|
7196
7159
|
);
|
|
7197
|
-
const [pickerMode, setPickerMode] =
|
|
7198
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
7160
|
+
const [pickerMode, setPickerMode] = React11.useState("days");
|
|
7161
|
+
const [yearRangeStart, setYearRangeStart] = React11.useState(
|
|
7199
7162
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
7200
7163
|
);
|
|
7201
|
-
const minTime =
|
|
7164
|
+
const minTime = React11.useMemo(
|
|
7202
7165
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
7203
7166
|
[minDate]
|
|
7204
7167
|
);
|
|
7205
|
-
const maxTime =
|
|
7168
|
+
const maxTime = React11.useMemo(
|
|
7206
7169
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
7207
7170
|
[maxDate]
|
|
7208
7171
|
);
|
|
7209
|
-
const highlightSet =
|
|
7172
|
+
const highlightSet = React11.useMemo(() => {
|
|
7210
7173
|
const set = /* @__PURE__ */ new Set();
|
|
7211
7174
|
for (const h of highlightDates) {
|
|
7212
7175
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
7213
7176
|
}
|
|
7214
7177
|
return set;
|
|
7215
7178
|
}, [highlightDates]);
|
|
7216
|
-
const handleSelect =
|
|
7179
|
+
const handleSelect = React11.useCallback(
|
|
7217
7180
|
(date) => {
|
|
7218
7181
|
onChange?.(date);
|
|
7219
7182
|
},
|
|
@@ -7256,14 +7219,14 @@ var SingleDatePicker = (props) => {
|
|
|
7256
7219
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
7257
7220
|
children: [
|
|
7258
7221
|
/* @__PURE__ */ jsxs201("div", { className: "datepicker-header", children: [
|
|
7259
|
-
/* @__PURE__ */
|
|
7260
|
-
/* @__PURE__ */
|
|
7261
|
-
/* @__PURE__ */
|
|
7222
|
+
/* @__PURE__ */ jsx314("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ jsx314(ChevronLeftIcon_default, {}) }),
|
|
7223
|
+
/* @__PURE__ */ jsx314("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
7224
|
+
/* @__PURE__ */ jsx314("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ jsx314(ChevronRightIcon_default, {}) })
|
|
7262
7225
|
] }),
|
|
7263
7226
|
/* @__PURE__ */ jsxs201("div", { className: "datepicker-body", children: [
|
|
7264
|
-
pickerMode === "years" && /* @__PURE__ */
|
|
7227
|
+
pickerMode === "years" && /* @__PURE__ */ jsx314("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
7265
7228
|
const y = yearRangeStart + i;
|
|
7266
|
-
return /* @__PURE__ */
|
|
7229
|
+
return /* @__PURE__ */ jsx314(
|
|
7267
7230
|
"button",
|
|
7268
7231
|
{
|
|
7269
7232
|
type: "button",
|
|
@@ -7274,7 +7237,7 @@ var SingleDatePicker = (props) => {
|
|
|
7274
7237
|
y
|
|
7275
7238
|
);
|
|
7276
7239
|
}) }),
|
|
7277
|
-
pickerMode === "months" && /* @__PURE__ */
|
|
7240
|
+
pickerMode === "months" && /* @__PURE__ */ jsx314("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ jsx314(
|
|
7278
7241
|
"button",
|
|
7279
7242
|
{
|
|
7280
7243
|
type: "button",
|
|
@@ -7285,7 +7248,7 @@ var SingleDatePicker = (props) => {
|
|
|
7285
7248
|
i
|
|
7286
7249
|
)) }),
|
|
7287
7250
|
pickerMode === "days" && /* @__PURE__ */ jsxs201(Fragment3, { children: [
|
|
7288
|
-
/* @__PURE__ */
|
|
7251
|
+
/* @__PURE__ */ jsx314("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ jsx314(
|
|
7289
7252
|
"div",
|
|
7290
7253
|
{
|
|
7291
7254
|
className: clsx_default(
|
|
@@ -7297,7 +7260,7 @@ var SingleDatePicker = (props) => {
|
|
|
7297
7260
|
},
|
|
7298
7261
|
label
|
|
7299
7262
|
)) }),
|
|
7300
|
-
/* @__PURE__ */
|
|
7263
|
+
/* @__PURE__ */ jsx314("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
7301
7264
|
const t = day.date.getTime();
|
|
7302
7265
|
const disabled = t < minTime || t > maxTime;
|
|
7303
7266
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -7307,7 +7270,7 @@ var SingleDatePicker = (props) => {
|
|
|
7307
7270
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
7308
7271
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
7309
7272
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
7310
|
-
return /* @__PURE__ */
|
|
7273
|
+
return /* @__PURE__ */ jsx314(
|
|
7311
7274
|
DayCell2,
|
|
7312
7275
|
{
|
|
7313
7276
|
day,
|
|
@@ -7332,7 +7295,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
7332
7295
|
var SingleDatePicker_default = SingleDatePicker;
|
|
7333
7296
|
|
|
7334
7297
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
7335
|
-
import { jsx as
|
|
7298
|
+
import { jsx as jsx315, jsxs as jsxs202 } from "react/jsx-runtime";
|
|
7336
7299
|
var formatDate = (date) => {
|
|
7337
7300
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
7338
7301
|
const y = date.getFullYear();
|
|
@@ -7342,8 +7305,8 @@ var formatDate = (date) => {
|
|
|
7342
7305
|
};
|
|
7343
7306
|
var InputDatePicker = (props) => {
|
|
7344
7307
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
7345
|
-
const [isOpen, setIsOpen] =
|
|
7346
|
-
const [tempDate, setTempDate] =
|
|
7308
|
+
const [isOpen, setIsOpen] = React12.useState(false);
|
|
7309
|
+
const [tempDate, setTempDate] = React12.useState(value ?? /* @__PURE__ */ new Date());
|
|
7347
7310
|
const handleOpen = () => {
|
|
7348
7311
|
if (disabled) return;
|
|
7349
7312
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -7360,18 +7323,18 @@ var InputDatePicker = (props) => {
|
|
|
7360
7323
|
setIsOpen(false);
|
|
7361
7324
|
};
|
|
7362
7325
|
return /* @__PURE__ */ jsxs202("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
|
|
7363
|
-
/* @__PURE__ */
|
|
7326
|
+
/* @__PURE__ */ jsx315("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ jsx315(
|
|
7364
7327
|
Input_default,
|
|
7365
7328
|
{
|
|
7366
7329
|
value: formatDate(value),
|
|
7367
7330
|
placeholder,
|
|
7368
|
-
suffix: /* @__PURE__ */
|
|
7331
|
+
suffix: /* @__PURE__ */ jsx315(CalenderIcon_default, {}),
|
|
7369
7332
|
disabled,
|
|
7370
7333
|
readOnly: true
|
|
7371
7334
|
}
|
|
7372
7335
|
) }),
|
|
7373
|
-
/* @__PURE__ */
|
|
7374
|
-
/* @__PURE__ */
|
|
7336
|
+
/* @__PURE__ */ jsx315(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs202("div", { className: "lib-xplat-popup-datepicker-card", children: [
|
|
7337
|
+
/* @__PURE__ */ jsx315("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ jsx315(
|
|
7375
7338
|
SingleDatePicker_default,
|
|
7376
7339
|
{
|
|
7377
7340
|
value: tempDate,
|
|
@@ -7382,8 +7345,8 @@ var InputDatePicker = (props) => {
|
|
|
7382
7345
|
}
|
|
7383
7346
|
) }),
|
|
7384
7347
|
/* @__PURE__ */ jsxs202("div", { className: "popup-datepicker-footer", children: [
|
|
7385
|
-
/* @__PURE__ */
|
|
7386
|
-
/* @__PURE__ */
|
|
7348
|
+
/* @__PURE__ */ jsx315(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
|
|
7349
|
+
/* @__PURE__ */ jsx315(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
7387
7350
|
] })
|
|
7388
7351
|
] }) })
|
|
7389
7352
|
] });
|
|
@@ -7392,20 +7355,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
7392
7355
|
var InputDatePicker_default = InputDatePicker;
|
|
7393
7356
|
|
|
7394
7357
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7395
|
-
import
|
|
7358
|
+
import React16 from "react";
|
|
7396
7359
|
|
|
7397
7360
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7398
|
-
import
|
|
7361
|
+
import React15 from "react";
|
|
7399
7362
|
|
|
7400
7363
|
// src/components/Tab/Tab.tsx
|
|
7401
|
-
import
|
|
7364
|
+
import React14 from "react";
|
|
7402
7365
|
|
|
7403
7366
|
// src/components/Tab/TabItem.tsx
|
|
7404
|
-
import
|
|
7405
|
-
import { jsx as
|
|
7406
|
-
var TabItem =
|
|
7367
|
+
import React13 from "react";
|
|
7368
|
+
import { jsx as jsx316 } from "react/jsx-runtime";
|
|
7369
|
+
var TabItem = React13.forwardRef((props, ref) => {
|
|
7407
7370
|
const { isActive, title, onClick } = props;
|
|
7408
|
-
return /* @__PURE__ */
|
|
7371
|
+
return /* @__PURE__ */ jsx316(
|
|
7409
7372
|
"div",
|
|
7410
7373
|
{
|
|
7411
7374
|
ref,
|
|
@@ -7419,25 +7382,25 @@ TabItem.displayName = "TabItem";
|
|
|
7419
7382
|
var TabItem_default = TabItem;
|
|
7420
7383
|
|
|
7421
7384
|
// src/components/Tab/Tab.tsx
|
|
7422
|
-
import { jsx as
|
|
7385
|
+
import { jsx as jsx317, jsxs as jsxs203 } from "react/jsx-runtime";
|
|
7423
7386
|
var Tab = (props) => {
|
|
7424
7387
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
7425
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
7388
|
+
const [underlineStyle, setUnderlineStyle] = React14.useState({
|
|
7426
7389
|
left: 0,
|
|
7427
7390
|
width: 0
|
|
7428
7391
|
});
|
|
7429
|
-
const itemRefs =
|
|
7392
|
+
const itemRefs = React14.useRef([]);
|
|
7430
7393
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
7431
7394
|
onChange(tabItem, tabIdx);
|
|
7432
7395
|
};
|
|
7433
|
-
|
|
7396
|
+
React14.useEffect(() => {
|
|
7434
7397
|
const el = itemRefs.current[activeIndex];
|
|
7435
7398
|
if (el) {
|
|
7436
7399
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
7437
7400
|
}
|
|
7438
7401
|
}, [activeIndex, tabs.length]);
|
|
7439
7402
|
return /* @__PURE__ */ jsxs203("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
|
|
7440
|
-
tabs.map((tab, idx) => /* @__PURE__ */
|
|
7403
|
+
tabs.map((tab, idx) => /* @__PURE__ */ jsx317(
|
|
7441
7404
|
TabItem_default,
|
|
7442
7405
|
{
|
|
7443
7406
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -7449,7 +7412,7 @@ var Tab = (props) => {
|
|
|
7449
7412
|
},
|
|
7450
7413
|
`${tab.value}_${idx}`
|
|
7451
7414
|
)),
|
|
7452
|
-
type === "toggle" && /* @__PURE__ */
|
|
7415
|
+
type === "toggle" && /* @__PURE__ */ jsx317(
|
|
7453
7416
|
"div",
|
|
7454
7417
|
{
|
|
7455
7418
|
className: "tab-toggle-underline",
|
|
@@ -7465,7 +7428,7 @@ Tab.displayName = "Tab";
|
|
|
7465
7428
|
var Tab_default = Tab;
|
|
7466
7429
|
|
|
7467
7430
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7468
|
-
import { jsx as
|
|
7431
|
+
import { jsx as jsx318, jsxs as jsxs204 } from "react/jsx-runtime";
|
|
7469
7432
|
var RangePicker = (props) => {
|
|
7470
7433
|
const {
|
|
7471
7434
|
startDate,
|
|
@@ -7475,7 +7438,7 @@ var RangePicker = (props) => {
|
|
|
7475
7438
|
maxDate,
|
|
7476
7439
|
locale = "ko"
|
|
7477
7440
|
} = props;
|
|
7478
|
-
const [activeTab, setActiveTab] =
|
|
7441
|
+
const [activeTab, setActiveTab] = React15.useState("start");
|
|
7479
7442
|
const handleStartChange = (date) => {
|
|
7480
7443
|
if (!date) return;
|
|
7481
7444
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -7489,7 +7452,7 @@ var RangePicker = (props) => {
|
|
|
7489
7452
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
7490
7453
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
7491
7454
|
return /* @__PURE__ */ jsxs204("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
|
|
7492
|
-
/* @__PURE__ */
|
|
7455
|
+
/* @__PURE__ */ jsx318("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ jsx318(
|
|
7493
7456
|
Tab_default,
|
|
7494
7457
|
{
|
|
7495
7458
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -7503,7 +7466,7 @@ var RangePicker = (props) => {
|
|
|
7503
7466
|
}
|
|
7504
7467
|
) }),
|
|
7505
7468
|
/* @__PURE__ */ jsxs204("div", { className: "datepicker-range-panels", children: [
|
|
7506
|
-
/* @__PURE__ */
|
|
7469
|
+
/* @__PURE__ */ jsx318(
|
|
7507
7470
|
SingleDatePicker_default,
|
|
7508
7471
|
{
|
|
7509
7472
|
value: startDate,
|
|
@@ -7515,7 +7478,7 @@ var RangePicker = (props) => {
|
|
|
7515
7478
|
locale
|
|
7516
7479
|
}
|
|
7517
7480
|
),
|
|
7518
|
-
/* @__PURE__ */
|
|
7481
|
+
/* @__PURE__ */ jsx318(
|
|
7519
7482
|
SingleDatePicker_default,
|
|
7520
7483
|
{
|
|
7521
7484
|
value: endDate,
|
|
@@ -7528,7 +7491,7 @@ var RangePicker = (props) => {
|
|
|
7528
7491
|
}
|
|
7529
7492
|
)
|
|
7530
7493
|
] }),
|
|
7531
|
-
/* @__PURE__ */
|
|
7494
|
+
/* @__PURE__ */ jsx318("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ jsx318(
|
|
7532
7495
|
SingleDatePicker_default,
|
|
7533
7496
|
{
|
|
7534
7497
|
value: startDate,
|
|
@@ -7539,7 +7502,7 @@ var RangePicker = (props) => {
|
|
|
7539
7502
|
rangeEnd: endDate,
|
|
7540
7503
|
locale
|
|
7541
7504
|
}
|
|
7542
|
-
) : /* @__PURE__ */
|
|
7505
|
+
) : /* @__PURE__ */ jsx318(
|
|
7543
7506
|
SingleDatePicker_default,
|
|
7544
7507
|
{
|
|
7545
7508
|
value: endDate,
|
|
@@ -7557,10 +7520,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
7557
7520
|
var RangePicker_default = RangePicker;
|
|
7558
7521
|
|
|
7559
7522
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7560
|
-
import { jsx as
|
|
7523
|
+
import { jsx as jsx319, jsxs as jsxs205 } from "react/jsx-runtime";
|
|
7561
7524
|
var PopupPicker = (props) => {
|
|
7562
7525
|
const { component, type, locale } = props;
|
|
7563
|
-
const [isOpen, setIsOpen] =
|
|
7526
|
+
const [isOpen, setIsOpen] = React16.useState(false);
|
|
7564
7527
|
const handleClick = () => setIsOpen(true);
|
|
7565
7528
|
const handleClose = () => setIsOpen(false);
|
|
7566
7529
|
const handleSingleChange = (date) => {
|
|
@@ -7569,10 +7532,10 @@ var PopupPicker = (props) => {
|
|
|
7569
7532
|
handleClose();
|
|
7570
7533
|
};
|
|
7571
7534
|
return /* @__PURE__ */ jsxs205("div", { className: "lib-xplat-popup-datepicker", children: [
|
|
7572
|
-
|
|
7573
|
-
/* @__PURE__ */
|
|
7535
|
+
React16.cloneElement(component, { onClick: handleClick }),
|
|
7536
|
+
/* @__PURE__ */ jsx319(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs205("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
|
|
7574
7537
|
/* @__PURE__ */ jsxs205("div", { className: "popup-datepicker-content", children: [
|
|
7575
|
-
type === "single" && /* @__PURE__ */
|
|
7538
|
+
type === "single" && /* @__PURE__ */ jsx319(
|
|
7576
7539
|
SingleDatePicker_default,
|
|
7577
7540
|
{
|
|
7578
7541
|
value: props.value,
|
|
@@ -7582,7 +7545,7 @@ var PopupPicker = (props) => {
|
|
|
7582
7545
|
locale
|
|
7583
7546
|
}
|
|
7584
7547
|
),
|
|
7585
|
-
type === "range" && /* @__PURE__ */
|
|
7548
|
+
type === "range" && /* @__PURE__ */ jsx319(
|
|
7586
7549
|
RangePicker_default,
|
|
7587
7550
|
{
|
|
7588
7551
|
startDate: props.startDate,
|
|
@@ -7595,7 +7558,7 @@ var PopupPicker = (props) => {
|
|
|
7595
7558
|
)
|
|
7596
7559
|
] }),
|
|
7597
7560
|
/* @__PURE__ */ jsxs205("div", { className: "popup-datepicker-footer", children: [
|
|
7598
|
-
/* @__PURE__ */
|
|
7561
|
+
/* @__PURE__ */ jsx319(
|
|
7599
7562
|
Button_default,
|
|
7600
7563
|
{
|
|
7601
7564
|
type: "secondary",
|
|
@@ -7603,7 +7566,7 @@ var PopupPicker = (props) => {
|
|
|
7603
7566
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
7604
7567
|
}
|
|
7605
7568
|
),
|
|
7606
|
-
/* @__PURE__ */
|
|
7569
|
+
/* @__PURE__ */ jsx319(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
7607
7570
|
] })
|
|
7608
7571
|
] }) })
|
|
7609
7572
|
] });
|
|
@@ -7612,10 +7575,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
7612
7575
|
var PopupPicker_default = PopupPicker;
|
|
7613
7576
|
|
|
7614
7577
|
// src/components/Divider/Divider.tsx
|
|
7615
|
-
import { jsx as
|
|
7578
|
+
import { jsx as jsx320 } from "react/jsx-runtime";
|
|
7616
7579
|
var Divider = (props) => {
|
|
7617
7580
|
const { orientation = "horizontal" } = props;
|
|
7618
|
-
return /* @__PURE__ */
|
|
7581
|
+
return /* @__PURE__ */ jsx320(
|
|
7619
7582
|
"div",
|
|
7620
7583
|
{
|
|
7621
7584
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -7628,15 +7591,15 @@ Divider.displayName = "Divider";
|
|
|
7628
7591
|
var Divider_default = Divider;
|
|
7629
7592
|
|
|
7630
7593
|
// src/components/Drawer/Drawer.tsx
|
|
7631
|
-
import
|
|
7594
|
+
import React17 from "react";
|
|
7632
7595
|
import { createPortal as createPortal2 } from "react-dom";
|
|
7633
|
-
import { jsx as
|
|
7596
|
+
import { jsx as jsx321, jsxs as jsxs206 } from "react/jsx-runtime";
|
|
7634
7597
|
var ANIMATION_DURATION_MS2 = 250;
|
|
7635
7598
|
var Drawer = (props) => {
|
|
7636
7599
|
const { isOpen, onClose, placement = "right", size = "md", title, children } = props;
|
|
7637
|
-
const [mounted, setMounted] =
|
|
7638
|
-
const [visible, setVisible] =
|
|
7639
|
-
|
|
7600
|
+
const [mounted, setMounted] = React17.useState(false);
|
|
7601
|
+
const [visible, setVisible] = React17.useState(false);
|
|
7602
|
+
React17.useEffect(() => {
|
|
7640
7603
|
if (isOpen) {
|
|
7641
7604
|
setMounted(true);
|
|
7642
7605
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7650,7 +7613,7 @@ var Drawer = (props) => {
|
|
|
7650
7613
|
if (!mounted) return null;
|
|
7651
7614
|
const stateClass = visible ? "enter" : "exit";
|
|
7652
7615
|
return createPortal2(
|
|
7653
|
-
/* @__PURE__ */
|
|
7616
|
+
/* @__PURE__ */ jsx321(
|
|
7654
7617
|
"div",
|
|
7655
7618
|
{
|
|
7656
7619
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
@@ -7664,10 +7627,10 @@ var Drawer = (props) => {
|
|
|
7664
7627
|
onClick: (e) => e.stopPropagation(),
|
|
7665
7628
|
children: [
|
|
7666
7629
|
title && /* @__PURE__ */ jsxs206("div", { className: "drawer-header", children: [
|
|
7667
|
-
/* @__PURE__ */
|
|
7668
|
-
/* @__PURE__ */
|
|
7630
|
+
/* @__PURE__ */ jsx321("span", { className: "drawer-title", children: title }),
|
|
7631
|
+
/* @__PURE__ */ jsx321("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
7669
7632
|
] }),
|
|
7670
|
-
/* @__PURE__ */
|
|
7633
|
+
/* @__PURE__ */ jsx321("div", { className: "drawer-body", children })
|
|
7671
7634
|
]
|
|
7672
7635
|
}
|
|
7673
7636
|
)
|
|
@@ -7680,16 +7643,16 @@ Drawer.displayName = "Drawer";
|
|
|
7680
7643
|
var Drawer_default = Drawer;
|
|
7681
7644
|
|
|
7682
7645
|
// src/components/Dropdown/Dropdown.tsx
|
|
7683
|
-
import
|
|
7646
|
+
import React20 from "react";
|
|
7684
7647
|
|
|
7685
7648
|
// src/tokens/hooks/useAutoPosition.ts
|
|
7686
|
-
import
|
|
7649
|
+
import React18 from "react";
|
|
7687
7650
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
7688
|
-
const [position, setPosition] =
|
|
7651
|
+
const [position, setPosition] = React18.useState({
|
|
7689
7652
|
position: {},
|
|
7690
7653
|
direction: "bottom"
|
|
7691
7654
|
});
|
|
7692
|
-
const calculatePosition =
|
|
7655
|
+
const calculatePosition = React18.useCallback(() => {
|
|
7693
7656
|
if (!triggerRef.current || !popRef.current) return;
|
|
7694
7657
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
7695
7658
|
const popW = popRef.current.offsetWidth;
|
|
@@ -7716,13 +7679,13 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7716
7679
|
direction
|
|
7717
7680
|
});
|
|
7718
7681
|
}, [triggerRef, popRef]);
|
|
7719
|
-
|
|
7682
|
+
React18.useLayoutEffect(() => {
|
|
7720
7683
|
if (!enabled) return;
|
|
7721
7684
|
calculatePosition();
|
|
7722
7685
|
const raf = requestAnimationFrame(calculatePosition);
|
|
7723
7686
|
return () => cancelAnimationFrame(raf);
|
|
7724
7687
|
}, [calculatePosition, enabled]);
|
|
7725
|
-
|
|
7688
|
+
React18.useEffect(() => {
|
|
7726
7689
|
if (!enabled || !popRef.current) return;
|
|
7727
7690
|
const observer = new ResizeObserver(() => {
|
|
7728
7691
|
calculatePosition();
|
|
@@ -7730,7 +7693,7 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7730
7693
|
observer.observe(popRef.current);
|
|
7731
7694
|
return () => observer.disconnect();
|
|
7732
7695
|
}, [calculatePosition, enabled, popRef]);
|
|
7733
|
-
|
|
7696
|
+
React18.useEffect(() => {
|
|
7734
7697
|
if (!enabled) return;
|
|
7735
7698
|
window.addEventListener("resize", calculatePosition);
|
|
7736
7699
|
window.addEventListener("scroll", calculatePosition, true);
|
|
@@ -7744,9 +7707,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7744
7707
|
var useAutoPosition_default = useAutoPosition;
|
|
7745
7708
|
|
|
7746
7709
|
// src/tokens/hooks/useClickOutside.ts
|
|
7747
|
-
import
|
|
7710
|
+
import React19 from "react";
|
|
7748
7711
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
7749
|
-
|
|
7712
|
+
React19.useEffect(() => {
|
|
7750
7713
|
if (!enabled) return;
|
|
7751
7714
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
7752
7715
|
const listener = (event) => {
|
|
@@ -7769,17 +7732,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
7769
7732
|
var useClickOutside_default = useClickOutside;
|
|
7770
7733
|
|
|
7771
7734
|
// src/components/Dropdown/Dropdown.tsx
|
|
7772
|
-
import { jsx as
|
|
7735
|
+
import { jsx as jsx322, jsxs as jsxs207 } from "react/jsx-runtime";
|
|
7773
7736
|
var Dropdown = (props) => {
|
|
7774
7737
|
const { items, children } = props;
|
|
7775
|
-
const [isOpen, setIsOpen] =
|
|
7776
|
-
const [mounted, setMounted] =
|
|
7777
|
-
const [visible, setVisible] =
|
|
7778
|
-
const triggerRef =
|
|
7779
|
-
const menuRef =
|
|
7738
|
+
const [isOpen, setIsOpen] = React20.useState(false);
|
|
7739
|
+
const [mounted, setMounted] = React20.useState(false);
|
|
7740
|
+
const [visible, setVisible] = React20.useState(false);
|
|
7741
|
+
const triggerRef = React20.useRef(null);
|
|
7742
|
+
const menuRef = React20.useRef(null);
|
|
7780
7743
|
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
7781
7744
|
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
7782
|
-
|
|
7745
|
+
React20.useEffect(() => {
|
|
7783
7746
|
if (isOpen) {
|
|
7784
7747
|
setMounted(true);
|
|
7785
7748
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7795,7 +7758,7 @@ var Dropdown = (props) => {
|
|
|
7795
7758
|
setIsOpen(false);
|
|
7796
7759
|
};
|
|
7797
7760
|
return /* @__PURE__ */ jsxs207("div", { className: "lib-xplat-dropdown", children: [
|
|
7798
|
-
/* @__PURE__ */
|
|
7761
|
+
/* @__PURE__ */ jsx322(
|
|
7799
7762
|
"div",
|
|
7800
7763
|
{
|
|
7801
7764
|
ref: triggerRef,
|
|
@@ -7804,14 +7767,14 @@ var Dropdown = (props) => {
|
|
|
7804
7767
|
children
|
|
7805
7768
|
}
|
|
7806
7769
|
),
|
|
7807
|
-
mounted && /* @__PURE__ */
|
|
7770
|
+
mounted && /* @__PURE__ */ jsx322(Portal_default, { children: /* @__PURE__ */ jsx322(
|
|
7808
7771
|
"div",
|
|
7809
7772
|
{
|
|
7810
7773
|
ref: menuRef,
|
|
7811
7774
|
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
7812
7775
|
style: { top: position.top, left: position.left },
|
|
7813
7776
|
role: "menu",
|
|
7814
|
-
children: items.map((item) => /* @__PURE__ */
|
|
7777
|
+
children: items.map((item) => /* @__PURE__ */ jsx322(
|
|
7815
7778
|
"button",
|
|
7816
7779
|
{
|
|
7817
7780
|
className: clsx_default("dropdown-item", {
|
|
@@ -7833,23 +7796,23 @@ Dropdown.displayName = "Dropdown";
|
|
|
7833
7796
|
var Dropdown_default = Dropdown;
|
|
7834
7797
|
|
|
7835
7798
|
// src/components/EmptyState/EmptyState.tsx
|
|
7836
|
-
import { jsx as
|
|
7799
|
+
import { jsx as jsx323, jsxs as jsxs208 } from "react/jsx-runtime";
|
|
7837
7800
|
var EmptyState = (props) => {
|
|
7838
7801
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
7839
7802
|
return /* @__PURE__ */ jsxs208("div", { className: "lib-xplat-empty-state", children: [
|
|
7840
|
-
icon && /* @__PURE__ */
|
|
7841
|
-
!icon && /* @__PURE__ */
|
|
7842
|
-
/* @__PURE__ */
|
|
7843
|
-
description && /* @__PURE__ */
|
|
7844
|
-
action && /* @__PURE__ */
|
|
7803
|
+
icon && /* @__PURE__ */ jsx323("div", { className: "empty-icon", children: icon }),
|
|
7804
|
+
!icon && /* @__PURE__ */ jsx323("div", { className: "empty-icon", children: /* @__PURE__ */ jsx323("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx323("path", { d: "M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" }) }) }),
|
|
7805
|
+
/* @__PURE__ */ jsx323("p", { className: "empty-title", children: title }),
|
|
7806
|
+
description && /* @__PURE__ */ jsx323("p", { className: "empty-description", children: description }),
|
|
7807
|
+
action && /* @__PURE__ */ jsx323("div", { className: "empty-action", children: action })
|
|
7845
7808
|
] });
|
|
7846
7809
|
};
|
|
7847
7810
|
EmptyState.displayName = "EmptyState";
|
|
7848
7811
|
var EmptyState_default = EmptyState;
|
|
7849
7812
|
|
|
7850
7813
|
// src/components/FileUpload/FileUpload.tsx
|
|
7851
|
-
import
|
|
7852
|
-
import { jsx as
|
|
7814
|
+
import React21 from "react";
|
|
7815
|
+
import { jsx as jsx324, jsxs as jsxs209 } from "react/jsx-runtime";
|
|
7853
7816
|
var FileUpload = (props) => {
|
|
7854
7817
|
const {
|
|
7855
7818
|
accept,
|
|
@@ -7859,8 +7822,8 @@ var FileUpload = (props) => {
|
|
|
7859
7822
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
7860
7823
|
description
|
|
7861
7824
|
} = props;
|
|
7862
|
-
const [isDragOver, setIsDragOver] =
|
|
7863
|
-
const inputRef =
|
|
7825
|
+
const [isDragOver, setIsDragOver] = React21.useState(false);
|
|
7826
|
+
const inputRef = React21.useRef(null);
|
|
7864
7827
|
const handleFiles = (fileList) => {
|
|
7865
7828
|
let files = Array.from(fileList);
|
|
7866
7829
|
if (maxSize) {
|
|
@@ -7899,7 +7862,7 @@ var FileUpload = (props) => {
|
|
|
7899
7862
|
onDragLeave: handleDragLeave,
|
|
7900
7863
|
onClick: () => inputRef.current?.click(),
|
|
7901
7864
|
children: [
|
|
7902
|
-
/* @__PURE__ */
|
|
7865
|
+
/* @__PURE__ */ jsx324(
|
|
7903
7866
|
"input",
|
|
7904
7867
|
{
|
|
7905
7868
|
ref: inputRef,
|
|
@@ -7909,9 +7872,9 @@ var FileUpload = (props) => {
|
|
|
7909
7872
|
onChange: handleChange
|
|
7910
7873
|
}
|
|
7911
7874
|
),
|
|
7912
|
-
/* @__PURE__ */
|
|
7913
|
-
/* @__PURE__ */
|
|
7914
|
-
description && /* @__PURE__ */
|
|
7875
|
+
/* @__PURE__ */ jsx324("div", { className: "upload-icon", children: /* @__PURE__ */ jsx324(UploadIcon_default, {}) }),
|
|
7876
|
+
/* @__PURE__ */ jsx324("p", { className: "upload-label", children: label }),
|
|
7877
|
+
description && /* @__PURE__ */ jsx324("p", { className: "upload-description", children: description })
|
|
7915
7878
|
]
|
|
7916
7879
|
}
|
|
7917
7880
|
);
|
|
@@ -7920,10 +7883,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
7920
7883
|
var FileUpload_default = FileUpload;
|
|
7921
7884
|
|
|
7922
7885
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
7923
|
-
import
|
|
7886
|
+
import React23 from "react";
|
|
7924
7887
|
|
|
7925
7888
|
// src/components/HtmlTypeWriter/utils.ts
|
|
7926
|
-
import
|
|
7889
|
+
import React22 from "react";
|
|
7927
7890
|
var voidTags = /* @__PURE__ */ new Set([
|
|
7928
7891
|
"br",
|
|
7929
7892
|
"img",
|
|
@@ -7991,41 +7954,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
7991
7954
|
props[attr.name] = attr.value;
|
|
7992
7955
|
});
|
|
7993
7956
|
if (voidTags.has(tag)) {
|
|
7994
|
-
return
|
|
7957
|
+
return React22.createElement(tag, props);
|
|
7995
7958
|
}
|
|
7996
7959
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
7997
|
-
return
|
|
7960
|
+
return React22.createElement(tag, props, ...children);
|
|
7998
7961
|
};
|
|
7999
7962
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
8000
7963
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
8001
7964
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
8002
|
-
return node == null ? null :
|
|
7965
|
+
return node == null ? null : React22.createElement(React22.Fragment, { key: idx }, node);
|
|
8003
7966
|
}).filter(Boolean);
|
|
8004
7967
|
return nodes.length === 0 ? null : nodes;
|
|
8005
7968
|
};
|
|
8006
7969
|
|
|
8007
7970
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
8008
|
-
import { jsx as
|
|
7971
|
+
import { jsx as jsx325 } from "react/jsx-runtime";
|
|
8009
7972
|
var HtmlTypeWriter = ({
|
|
8010
7973
|
html,
|
|
8011
7974
|
duration = 20,
|
|
8012
7975
|
onDone,
|
|
8013
7976
|
onChange
|
|
8014
7977
|
}) => {
|
|
8015
|
-
const [typedLen, setTypedLen] =
|
|
8016
|
-
const doneCalledRef =
|
|
8017
|
-
const { doc, rangeMap, totalLength } =
|
|
7978
|
+
const [typedLen, setTypedLen] = React23.useState(0);
|
|
7979
|
+
const doneCalledRef = React23.useRef(false);
|
|
7980
|
+
const { doc, rangeMap, totalLength } = React23.useMemo(() => {
|
|
8018
7981
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
8019
7982
|
const decoded = decodeHtmlEntities(html);
|
|
8020
7983
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
8021
7984
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
8022
7985
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
8023
7986
|
}, [html]);
|
|
8024
|
-
|
|
7987
|
+
React23.useEffect(() => {
|
|
8025
7988
|
setTypedLen(0);
|
|
8026
7989
|
doneCalledRef.current = false;
|
|
8027
7990
|
}, [html]);
|
|
8028
|
-
|
|
7991
|
+
React23.useEffect(() => {
|
|
8029
7992
|
if (!totalLength) return;
|
|
8030
7993
|
if (typedLen >= totalLength) return;
|
|
8031
7994
|
const timer = window.setInterval(() => {
|
|
@@ -8033,33 +7996,33 @@ var HtmlTypeWriter = ({
|
|
|
8033
7996
|
}, duration);
|
|
8034
7997
|
return () => window.clearInterval(timer);
|
|
8035
7998
|
}, [typedLen, totalLength, duration]);
|
|
8036
|
-
|
|
7999
|
+
React23.useEffect(() => {
|
|
8037
8000
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
8038
8001
|
onChange?.();
|
|
8039
8002
|
}
|
|
8040
8003
|
}, [typedLen, totalLength, onChange]);
|
|
8041
|
-
|
|
8004
|
+
React23.useEffect(() => {
|
|
8042
8005
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
8043
8006
|
doneCalledRef.current = true;
|
|
8044
8007
|
onDone?.();
|
|
8045
8008
|
}
|
|
8046
8009
|
}, [typedLen, totalLength, onDone]);
|
|
8047
|
-
const parsed =
|
|
8010
|
+
const parsed = React23.useMemo(
|
|
8048
8011
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
8049
8012
|
[doc, typedLen, rangeMap]
|
|
8050
8013
|
);
|
|
8051
|
-
return /* @__PURE__ */
|
|
8014
|
+
return /* @__PURE__ */ jsx325("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
8052
8015
|
};
|
|
8053
8016
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
8054
8017
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
8055
8018
|
|
|
8056
8019
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
8057
|
-
import
|
|
8058
|
-
import { jsx as
|
|
8020
|
+
import React24 from "react";
|
|
8021
|
+
import { jsx as jsx326, jsxs as jsxs210 } from "react/jsx-runtime";
|
|
8059
8022
|
var ImageSelector = (props) => {
|
|
8060
8023
|
const { value, label, onChange } = props;
|
|
8061
|
-
const [previewUrl, setPreviewUrl] =
|
|
8062
|
-
|
|
8024
|
+
const [previewUrl, setPreviewUrl] = React24.useState();
|
|
8025
|
+
React24.useEffect(() => {
|
|
8063
8026
|
if (!value) {
|
|
8064
8027
|
setPreviewUrl(void 0);
|
|
8065
8028
|
return;
|
|
@@ -8068,7 +8031,7 @@ var ImageSelector = (props) => {
|
|
|
8068
8031
|
setPreviewUrl(url);
|
|
8069
8032
|
return () => URL.revokeObjectURL(url);
|
|
8070
8033
|
}, [value]);
|
|
8071
|
-
const inputRef =
|
|
8034
|
+
const inputRef = React24.useRef(null);
|
|
8072
8035
|
const handleFileChange = (e) => {
|
|
8073
8036
|
const selectedFile = e.target.files?.[0];
|
|
8074
8037
|
if (selectedFile) {
|
|
@@ -8082,7 +8045,7 @@ var ImageSelector = (props) => {
|
|
|
8082
8045
|
inputRef.current?.click();
|
|
8083
8046
|
};
|
|
8084
8047
|
return /* @__PURE__ */ jsxs210("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
8085
|
-
/* @__PURE__ */
|
|
8048
|
+
/* @__PURE__ */ jsx326(
|
|
8086
8049
|
"input",
|
|
8087
8050
|
{
|
|
8088
8051
|
type: "file",
|
|
@@ -8093,12 +8056,12 @@ var ImageSelector = (props) => {
|
|
|
8093
8056
|
}
|
|
8094
8057
|
),
|
|
8095
8058
|
value && /* @__PURE__ */ jsxs210("div", { className: "action-bar", children: [
|
|
8096
|
-
/* @__PURE__ */
|
|
8097
|
-
/* @__PURE__ */
|
|
8059
|
+
/* @__PURE__ */ jsx326("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ jsx326(UploadIcon_default, {}) }),
|
|
8060
|
+
/* @__PURE__ */ jsx326("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ jsx326(DeleteIcon_default, {}) })
|
|
8098
8061
|
] }),
|
|
8099
|
-
/* @__PURE__ */
|
|
8100
|
-
/* @__PURE__ */
|
|
8101
|
-
/* @__PURE__ */
|
|
8062
|
+
/* @__PURE__ */ jsx326("div", { className: "content", children: previewUrl ? /* @__PURE__ */ jsx326("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ jsxs210("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
|
|
8063
|
+
/* @__PURE__ */ jsx326("div", { className: "icon-wrapper", children: /* @__PURE__ */ jsx326(ImageIcon_default, {}) }),
|
|
8064
|
+
/* @__PURE__ */ jsx326("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
8102
8065
|
] }) })
|
|
8103
8066
|
] });
|
|
8104
8067
|
};
|
|
@@ -8106,7 +8069,7 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
8106
8069
|
var ImageSelector_default = ImageSelector;
|
|
8107
8070
|
|
|
8108
8071
|
// src/components/Pagination/Pagination.tsx
|
|
8109
|
-
import { jsx as
|
|
8072
|
+
import { jsx as jsx327, jsxs as jsxs211 } from "react/jsx-runtime";
|
|
8110
8073
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
8111
8074
|
const totalNumbers = siblingCount * 2 + 5;
|
|
8112
8075
|
if (totalPages <= totalNumbers) {
|
|
@@ -8150,18 +8113,18 @@ var Pagination = (props) => {
|
|
|
8150
8113
|
}
|
|
8151
8114
|
};
|
|
8152
8115
|
return /* @__PURE__ */ jsxs211("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
8153
|
-
/* @__PURE__ */
|
|
8116
|
+
/* @__PURE__ */ jsx327(
|
|
8154
8117
|
"button",
|
|
8155
8118
|
{
|
|
8156
8119
|
className: "page-btn prev",
|
|
8157
8120
|
disabled: current <= 1,
|
|
8158
8121
|
onClick: () => handleClick(current - 1),
|
|
8159
8122
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
8160
|
-
children: /* @__PURE__ */
|
|
8123
|
+
children: /* @__PURE__ */ jsx327(ChevronLeftIcon_default, {})
|
|
8161
8124
|
}
|
|
8162
8125
|
),
|
|
8163
8126
|
pages.map(
|
|
8164
|
-
(page, i) => page === "..." ? /* @__PURE__ */
|
|
8127
|
+
(page, i) => page === "..." ? /* @__PURE__ */ jsx327("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ jsx327(
|
|
8165
8128
|
"button",
|
|
8166
8129
|
{
|
|
8167
8130
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -8172,14 +8135,14 @@ var Pagination = (props) => {
|
|
|
8172
8135
|
page
|
|
8173
8136
|
)
|
|
8174
8137
|
),
|
|
8175
|
-
/* @__PURE__ */
|
|
8138
|
+
/* @__PURE__ */ jsx327(
|
|
8176
8139
|
"button",
|
|
8177
8140
|
{
|
|
8178
8141
|
className: "page-btn next",
|
|
8179
8142
|
disabled: current >= totalPages,
|
|
8180
8143
|
onClick: () => handleClick(current + 1),
|
|
8181
8144
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
8182
|
-
children: /* @__PURE__ */
|
|
8145
|
+
children: /* @__PURE__ */ jsx327(ChevronRightIcon_default, {})
|
|
8183
8146
|
}
|
|
8184
8147
|
)
|
|
8185
8148
|
] });
|
|
@@ -8188,17 +8151,17 @@ Pagination.displayName = "Pagination";
|
|
|
8188
8151
|
var Pagination_default = Pagination;
|
|
8189
8152
|
|
|
8190
8153
|
// src/components/PopOver/PopOver.tsx
|
|
8191
|
-
import
|
|
8192
|
-
import { jsx as
|
|
8154
|
+
import React25 from "react";
|
|
8155
|
+
import { jsx as jsx328, jsxs as jsxs212 } from "react/jsx-runtime";
|
|
8193
8156
|
var PopOver = (props) => {
|
|
8194
8157
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
8195
|
-
const popRef =
|
|
8196
|
-
const triggerRef =
|
|
8197
|
-
const [localOpen, setLocalOpen] =
|
|
8198
|
-
const [eventTrigger, setEventTrigger] =
|
|
8158
|
+
const popRef = React25.useRef(null);
|
|
8159
|
+
const triggerRef = React25.useRef(null);
|
|
8160
|
+
const [localOpen, setLocalOpen] = React25.useState(false);
|
|
8161
|
+
const [eventTrigger, setEventTrigger] = React25.useState(false);
|
|
8199
8162
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
8200
8163
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
8201
|
-
|
|
8164
|
+
React25.useEffect(() => {
|
|
8202
8165
|
if (isOpen) {
|
|
8203
8166
|
setLocalOpen(isOpen);
|
|
8204
8167
|
setTimeout(() => {
|
|
@@ -8221,7 +8184,7 @@ var PopOver = (props) => {
|
|
|
8221
8184
|
},
|
|
8222
8185
|
children: [
|
|
8223
8186
|
children,
|
|
8224
|
-
localOpen && /* @__PURE__ */
|
|
8187
|
+
localOpen && /* @__PURE__ */ jsx328(Portal_default, { children: /* @__PURE__ */ jsx328(
|
|
8225
8188
|
"div",
|
|
8226
8189
|
{
|
|
8227
8190
|
className: clsx_default(
|
|
@@ -8244,7 +8207,7 @@ PopOver.displayName = "PopOver";
|
|
|
8244
8207
|
var PopOver_default = PopOver;
|
|
8245
8208
|
|
|
8246
8209
|
// src/components/Progress/Progress.tsx
|
|
8247
|
-
import { jsx as
|
|
8210
|
+
import { jsx as jsx329, jsxs as jsxs213 } from "react/jsx-runtime";
|
|
8248
8211
|
var Progress = (props) => {
|
|
8249
8212
|
const {
|
|
8250
8213
|
value,
|
|
@@ -8255,7 +8218,7 @@ var Progress = (props) => {
|
|
|
8255
8218
|
} = props;
|
|
8256
8219
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
8257
8220
|
return /* @__PURE__ */ jsxs213("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
8258
|
-
/* @__PURE__ */
|
|
8221
|
+
/* @__PURE__ */ jsx329(
|
|
8259
8222
|
"div",
|
|
8260
8223
|
{
|
|
8261
8224
|
className: "track",
|
|
@@ -8263,7 +8226,7 @@ var Progress = (props) => {
|
|
|
8263
8226
|
"aria-valuenow": value,
|
|
8264
8227
|
"aria-valuemin": 0,
|
|
8265
8228
|
"aria-valuemax": max,
|
|
8266
|
-
children: /* @__PURE__ */
|
|
8229
|
+
children: /* @__PURE__ */ jsx329(
|
|
8267
8230
|
"div",
|
|
8268
8231
|
{
|
|
8269
8232
|
className: "bar",
|
|
@@ -8282,17 +8245,17 @@ Progress.displayName = "Progress";
|
|
|
8282
8245
|
var Progress_default = Progress;
|
|
8283
8246
|
|
|
8284
8247
|
// src/components/Radio/RadioGroupContext.tsx
|
|
8285
|
-
import
|
|
8286
|
-
var RadioGroupContext =
|
|
8248
|
+
import React26 from "react";
|
|
8249
|
+
var RadioGroupContext = React26.createContext(
|
|
8287
8250
|
null
|
|
8288
8251
|
);
|
|
8289
8252
|
var useRadioGroupContext = () => {
|
|
8290
|
-
return
|
|
8253
|
+
return React26.useContext(RadioGroupContext);
|
|
8291
8254
|
};
|
|
8292
8255
|
var RadioGroupContext_default = RadioGroupContext;
|
|
8293
8256
|
|
|
8294
8257
|
// src/components/Radio/Radio.tsx
|
|
8295
|
-
import { jsx as
|
|
8258
|
+
import { jsx as jsx330, jsxs as jsxs214 } from "react/jsx-runtime";
|
|
8296
8259
|
var Radio = (props) => {
|
|
8297
8260
|
const {
|
|
8298
8261
|
label,
|
|
@@ -8320,18 +8283,18 @@ var Radio = (props) => {
|
|
|
8320
8283
|
localChecked ? "checked" : void 0
|
|
8321
8284
|
),
|
|
8322
8285
|
children: [
|
|
8323
|
-
/* @__PURE__ */
|
|
8324
|
-
/* @__PURE__ */
|
|
8286
|
+
/* @__PURE__ */ jsx330("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
8287
|
+
/* @__PURE__ */ jsx330(
|
|
8325
8288
|
"div",
|
|
8326
8289
|
{
|
|
8327
8290
|
className: clsx_default(
|
|
8328
8291
|
"circle",
|
|
8329
8292
|
localChecked ? "checked" : void 0
|
|
8330
8293
|
),
|
|
8331
|
-
children: localChecked && /* @__PURE__ */
|
|
8294
|
+
children: localChecked && /* @__PURE__ */ jsx330("div", { className: "inner-circle" })
|
|
8332
8295
|
}
|
|
8333
8296
|
),
|
|
8334
|
-
label && /* @__PURE__ */
|
|
8297
|
+
label && /* @__PURE__ */ jsx330("span", { children: label })
|
|
8335
8298
|
]
|
|
8336
8299
|
}
|
|
8337
8300
|
);
|
|
@@ -8340,28 +8303,28 @@ Radio.displayName = "Radio";
|
|
|
8340
8303
|
var Radio_default = Radio;
|
|
8341
8304
|
|
|
8342
8305
|
// src/components/Radio/RadioGroup.tsx
|
|
8343
|
-
import { Fragment as Fragment4, jsx as
|
|
8306
|
+
import { Fragment as Fragment4, jsx as jsx331 } from "react/jsx-runtime";
|
|
8344
8307
|
var RadioGroup = (props) => {
|
|
8345
8308
|
const { children, ...rest } = props;
|
|
8346
|
-
return /* @__PURE__ */
|
|
8309
|
+
return /* @__PURE__ */ jsx331(Fragment4, { children: /* @__PURE__ */ jsx331(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
8347
8310
|
};
|
|
8348
8311
|
RadioGroup.displayName = "RadioGroup";
|
|
8349
8312
|
var RadioGroup_default = RadioGroup;
|
|
8350
8313
|
|
|
8351
8314
|
// src/components/Select/Select.tsx
|
|
8352
|
-
import
|
|
8315
|
+
import React29 from "react";
|
|
8353
8316
|
|
|
8354
8317
|
// src/components/Select/context.ts
|
|
8355
|
-
import
|
|
8356
|
-
var SelectContext =
|
|
8318
|
+
import React27 from "react";
|
|
8319
|
+
var SelectContext = React27.createContext(null);
|
|
8357
8320
|
var context_default = SelectContext;
|
|
8358
8321
|
|
|
8359
8322
|
// src/components/Select/SelectItem.tsx
|
|
8360
|
-
import
|
|
8361
|
-
import { jsx as
|
|
8323
|
+
import React28 from "react";
|
|
8324
|
+
import { jsx as jsx332 } from "react/jsx-runtime";
|
|
8362
8325
|
var SelectItem = (props) => {
|
|
8363
8326
|
const { children, value, onClick, disabled = false } = props;
|
|
8364
|
-
const ctx =
|
|
8327
|
+
const ctx = React28.useContext(context_default);
|
|
8365
8328
|
const handleClick = (e) => {
|
|
8366
8329
|
e.preventDefault();
|
|
8367
8330
|
e.stopPropagation();
|
|
@@ -8370,7 +8333,7 @@ var SelectItem = (props) => {
|
|
|
8370
8333
|
ctx?.close();
|
|
8371
8334
|
onClick?.();
|
|
8372
8335
|
};
|
|
8373
|
-
return /* @__PURE__ */
|
|
8336
|
+
return /* @__PURE__ */ jsx332(
|
|
8374
8337
|
"div",
|
|
8375
8338
|
{
|
|
8376
8339
|
className: clsx_default("select-item", disabled && "disabled"),
|
|
@@ -8391,7 +8354,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
8391
8354
|
var SelectItem_default = SelectItem;
|
|
8392
8355
|
|
|
8393
8356
|
// src/components/Select/Select.tsx
|
|
8394
|
-
import { jsx as
|
|
8357
|
+
import { jsx as jsx333, jsxs as jsxs215 } from "react/jsx-runtime";
|
|
8395
8358
|
var ANIMATION_DURATION_MS3 = 200;
|
|
8396
8359
|
var SelectRoot = (props) => {
|
|
8397
8360
|
const {
|
|
@@ -8403,26 +8366,26 @@ var SelectRoot = (props) => {
|
|
|
8403
8366
|
error = false,
|
|
8404
8367
|
size = "md"
|
|
8405
8368
|
} = props;
|
|
8406
|
-
const itemChildren =
|
|
8407
|
-
(child) =>
|
|
8369
|
+
const itemChildren = React29.Children.toArray(children).filter(
|
|
8370
|
+
(child) => React29.isValidElement(child) && child.type === SelectItem_default
|
|
8408
8371
|
);
|
|
8409
8372
|
const isControlled = valueProp !== void 0;
|
|
8410
|
-
const [isOpen, setOpen] =
|
|
8411
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
8412
|
-
const controlledLabel =
|
|
8373
|
+
const [isOpen, setOpen] = React29.useState(false);
|
|
8374
|
+
const [uncontrolledLabel, setUncontrolledLabel] = React29.useState(null);
|
|
8375
|
+
const controlledLabel = React29.useMemo(() => {
|
|
8413
8376
|
if (!isControlled) return null;
|
|
8414
8377
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
8415
8378
|
return match ? match.props.children : null;
|
|
8416
8379
|
}, [isControlled, valueProp, itemChildren]);
|
|
8417
8380
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
8418
|
-
const triggerRef =
|
|
8419
|
-
const contentRef =
|
|
8420
|
-
const [mounted, setMounted] =
|
|
8421
|
-
const [visible, setVisible] =
|
|
8422
|
-
|
|
8381
|
+
const triggerRef = React29.useRef(null);
|
|
8382
|
+
const contentRef = React29.useRef(null);
|
|
8383
|
+
const [mounted, setMounted] = React29.useState(false);
|
|
8384
|
+
const [visible, setVisible] = React29.useState(false);
|
|
8385
|
+
React29.useEffect(() => {
|
|
8423
8386
|
if (disabled && isOpen) setOpen(false);
|
|
8424
8387
|
}, [disabled, isOpen]);
|
|
8425
|
-
|
|
8388
|
+
React29.useEffect(() => {
|
|
8426
8389
|
if (isOpen) {
|
|
8427
8390
|
setMounted(true);
|
|
8428
8391
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -8432,12 +8395,12 @@ var SelectRoot = (props) => {
|
|
|
8432
8395
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
8433
8396
|
return () => clearTimeout(t);
|
|
8434
8397
|
}, [isOpen]);
|
|
8435
|
-
const open =
|
|
8436
|
-
const close =
|
|
8437
|
-
const toggle =
|
|
8398
|
+
const open = React29.useCallback(() => setOpen(true), []);
|
|
8399
|
+
const close = React29.useCallback(() => setOpen(false), []);
|
|
8400
|
+
const toggle = React29.useCallback(() => setOpen((prev) => !prev), []);
|
|
8438
8401
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
8439
8402
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
8440
|
-
const setSelected =
|
|
8403
|
+
const setSelected = React29.useCallback(
|
|
8441
8404
|
(label, itemValue) => {
|
|
8442
8405
|
if (!isControlled) {
|
|
8443
8406
|
setUncontrolledLabel(label);
|
|
@@ -8446,7 +8409,7 @@ var SelectRoot = (props) => {
|
|
|
8446
8409
|
},
|
|
8447
8410
|
[isControlled, onChange]
|
|
8448
8411
|
);
|
|
8449
|
-
const ctxValue =
|
|
8412
|
+
const ctxValue = React29.useMemo(
|
|
8450
8413
|
() => ({
|
|
8451
8414
|
isOpen,
|
|
8452
8415
|
mounted,
|
|
@@ -8467,7 +8430,7 @@ var SelectRoot = (props) => {
|
|
|
8467
8430
|
if (disabled) return;
|
|
8468
8431
|
toggle();
|
|
8469
8432
|
};
|
|
8470
|
-
return /* @__PURE__ */
|
|
8433
|
+
return /* @__PURE__ */ jsx333(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs215(
|
|
8471
8434
|
"div",
|
|
8472
8435
|
{
|
|
8473
8436
|
className: clsx_default(
|
|
@@ -8502,7 +8465,7 @@ var SelectRoot = (props) => {
|
|
|
8502
8465
|
}
|
|
8503
8466
|
},
|
|
8504
8467
|
children: [
|
|
8505
|
-
/* @__PURE__ */
|
|
8468
|
+
/* @__PURE__ */ jsx333(
|
|
8506
8469
|
"span",
|
|
8507
8470
|
{
|
|
8508
8471
|
className: clsx_default(
|
|
@@ -8512,25 +8475,25 @@ var SelectRoot = (props) => {
|
|
|
8512
8475
|
children: selectedLabel ?? placeholder
|
|
8513
8476
|
}
|
|
8514
8477
|
),
|
|
8515
|
-
/* @__PURE__ */
|
|
8478
|
+
/* @__PURE__ */ jsx333(
|
|
8516
8479
|
"span",
|
|
8517
8480
|
{
|
|
8518
8481
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
8519
8482
|
"aria-hidden": true,
|
|
8520
|
-
children: /* @__PURE__ */
|
|
8483
|
+
children: /* @__PURE__ */ jsx333(ChevronDownIcon_default, {})
|
|
8521
8484
|
}
|
|
8522
8485
|
)
|
|
8523
8486
|
]
|
|
8524
8487
|
}
|
|
8525
8488
|
),
|
|
8526
|
-
mounted && /* @__PURE__ */
|
|
8489
|
+
mounted && /* @__PURE__ */ jsx333(Portal_default, { children: /* @__PURE__ */ jsx333(
|
|
8527
8490
|
"div",
|
|
8528
8491
|
{
|
|
8529
8492
|
className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
|
|
8530
8493
|
ref: contentRef,
|
|
8531
8494
|
style: { ...position.position, width: triggerRef.current?.offsetWidth },
|
|
8532
8495
|
role: "listbox",
|
|
8533
|
-
children: /* @__PURE__ */
|
|
8496
|
+
children: /* @__PURE__ */ jsx333(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
8534
8497
|
}
|
|
8535
8498
|
) })
|
|
8536
8499
|
]
|
|
@@ -8544,7 +8507,7 @@ var Select = Object.assign(SelectRoot, {
|
|
|
8544
8507
|
var Select_default = Select;
|
|
8545
8508
|
|
|
8546
8509
|
// src/components/Skeleton/Skeleton.tsx
|
|
8547
|
-
import { jsx as
|
|
8510
|
+
import { jsx as jsx334 } from "react/jsx-runtime";
|
|
8548
8511
|
var SIZE_MAP = {
|
|
8549
8512
|
xs: "var(--spacing-size-1)",
|
|
8550
8513
|
sm: "var(--spacing-size-2)",
|
|
@@ -8560,7 +8523,7 @@ var Skeleton = (props) => {
|
|
|
8560
8523
|
...width != null && { width: SIZE_MAP[width] },
|
|
8561
8524
|
...height != null && { height: SIZE_MAP[height] }
|
|
8562
8525
|
};
|
|
8563
|
-
return /* @__PURE__ */
|
|
8526
|
+
return /* @__PURE__ */ jsx334(
|
|
8564
8527
|
"div",
|
|
8565
8528
|
{
|
|
8566
8529
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -8573,20 +8536,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
8573
8536
|
var Skeleton_default = Skeleton;
|
|
8574
8537
|
|
|
8575
8538
|
// src/components/Spinner/Spinner.tsx
|
|
8576
|
-
import { jsx as
|
|
8539
|
+
import { jsx as jsx335, jsxs as jsxs216 } from "react/jsx-runtime";
|
|
8577
8540
|
var Spinner = (props) => {
|
|
8578
8541
|
const {
|
|
8579
8542
|
size = "md",
|
|
8580
8543
|
type = "brand"
|
|
8581
8544
|
} = props;
|
|
8582
|
-
return /* @__PURE__ */
|
|
8545
|
+
return /* @__PURE__ */ jsx335(
|
|
8583
8546
|
"div",
|
|
8584
8547
|
{
|
|
8585
8548
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
8586
8549
|
role: "status",
|
|
8587
8550
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
8588
8551
|
children: /* @__PURE__ */ jsxs216("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
8589
|
-
/* @__PURE__ */
|
|
8552
|
+
/* @__PURE__ */ jsx335(
|
|
8590
8553
|
"circle",
|
|
8591
8554
|
{
|
|
8592
8555
|
className: "track",
|
|
@@ -8596,7 +8559,7 @@ var Spinner = (props) => {
|
|
|
8596
8559
|
strokeWidth: "3"
|
|
8597
8560
|
}
|
|
8598
8561
|
),
|
|
8599
|
-
/* @__PURE__ */
|
|
8562
|
+
/* @__PURE__ */ jsx335(
|
|
8600
8563
|
"circle",
|
|
8601
8564
|
{
|
|
8602
8565
|
className: "indicator",
|
|
@@ -8615,20 +8578,20 @@ Spinner.displayName = "Spinner";
|
|
|
8615
8578
|
var Spinner_default = Spinner;
|
|
8616
8579
|
|
|
8617
8580
|
// src/components/Steps/Steps.tsx
|
|
8618
|
-
import { jsx as
|
|
8581
|
+
import { jsx as jsx336, jsxs as jsxs217 } from "react/jsx-runtime";
|
|
8619
8582
|
var Steps = (props) => {
|
|
8620
8583
|
const {
|
|
8621
8584
|
items,
|
|
8622
8585
|
current,
|
|
8623
8586
|
type = "brand"
|
|
8624
8587
|
} = props;
|
|
8625
|
-
return /* @__PURE__ */
|
|
8588
|
+
return /* @__PURE__ */ jsx336("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
8626
8589
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
8627
8590
|
return /* @__PURE__ */ jsxs217("div", { className: clsx_default("step-item", status), children: [
|
|
8628
|
-
/* @__PURE__ */
|
|
8591
|
+
/* @__PURE__ */ jsx336("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ jsx336(CheckIcon_default, {}) : /* @__PURE__ */ jsx336("span", { children: index + 1 }) }),
|
|
8629
8592
|
/* @__PURE__ */ jsxs217("div", { className: "step-content", children: [
|
|
8630
|
-
/* @__PURE__ */
|
|
8631
|
-
item.description && /* @__PURE__ */
|
|
8593
|
+
/* @__PURE__ */ jsx336("span", { className: "step-title", children: item.title }),
|
|
8594
|
+
item.description && /* @__PURE__ */ jsx336("span", { className: "step-description", children: item.description })
|
|
8632
8595
|
] })
|
|
8633
8596
|
] }, index);
|
|
8634
8597
|
}) });
|
|
@@ -8637,8 +8600,8 @@ Steps.displayName = "Steps";
|
|
|
8637
8600
|
var Steps_default = Steps;
|
|
8638
8601
|
|
|
8639
8602
|
// src/components/Swiper/Swiper.tsx
|
|
8640
|
-
import
|
|
8641
|
-
import { jsx as
|
|
8603
|
+
import React30 from "react";
|
|
8604
|
+
import { jsx as jsx337, jsxs as jsxs218 } from "react/jsx-runtime";
|
|
8642
8605
|
var Swiper = (props) => {
|
|
8643
8606
|
const {
|
|
8644
8607
|
auto = false,
|
|
@@ -8661,23 +8624,23 @@ var Swiper = (props) => {
|
|
|
8661
8624
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
8662
8625
|
const useLoop = loop && canSlide;
|
|
8663
8626
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
8664
|
-
const extendedItems =
|
|
8627
|
+
const extendedItems = React30.useMemo(() => {
|
|
8665
8628
|
if (!useLoop) return items;
|
|
8666
8629
|
return [...items, ...items, ...items];
|
|
8667
8630
|
}, [items, useLoop]);
|
|
8668
8631
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
8669
|
-
const [innerIndex, setInnerIndex] =
|
|
8632
|
+
const [innerIndex, setInnerIndex] = React30.useState(
|
|
8670
8633
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
8671
8634
|
);
|
|
8672
|
-
const [isDragging, setIsDragging] =
|
|
8673
|
-
const [dragOffset, setDragOffset] =
|
|
8674
|
-
const [animated, setAnimated] =
|
|
8675
|
-
const [containerWidth, setContainerWidth] =
|
|
8676
|
-
const containerRef =
|
|
8677
|
-
const startXRef =
|
|
8678
|
-
const startTimeRef =
|
|
8679
|
-
const autoplayTimerRef =
|
|
8680
|
-
|
|
8635
|
+
const [isDragging, setIsDragging] = React30.useState(false);
|
|
8636
|
+
const [dragOffset, setDragOffset] = React30.useState(0);
|
|
8637
|
+
const [animated, setAnimated] = React30.useState(true);
|
|
8638
|
+
const [containerWidth, setContainerWidth] = React30.useState(0);
|
|
8639
|
+
const containerRef = React30.useRef(null);
|
|
8640
|
+
const startXRef = React30.useRef(0);
|
|
8641
|
+
const startTimeRef = React30.useRef(0);
|
|
8642
|
+
const autoplayTimerRef = React30.useRef(null);
|
|
8643
|
+
React30.useEffect(() => {
|
|
8681
8644
|
const el = containerRef.current;
|
|
8682
8645
|
if (!el) return;
|
|
8683
8646
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -8696,7 +8659,7 @@ var Swiper = (props) => {
|
|
|
8696
8659
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
8697
8660
|
};
|
|
8698
8661
|
const realIndex = getRealIndex(innerIndex);
|
|
8699
|
-
const moveToInner =
|
|
8662
|
+
const moveToInner = React30.useCallback(
|
|
8700
8663
|
(idx, withAnim = true) => {
|
|
8701
8664
|
if (!useLoop) {
|
|
8702
8665
|
setAnimated(withAnim);
|
|
@@ -8724,7 +8687,7 @@ var Swiper = (props) => {
|
|
|
8724
8687
|
},
|
|
8725
8688
|
[useLoop, cloneCount, totalSlides]
|
|
8726
8689
|
);
|
|
8727
|
-
const handleTransitionEnd =
|
|
8690
|
+
const handleTransitionEnd = React30.useCallback(() => {
|
|
8728
8691
|
if (!useLoop) return;
|
|
8729
8692
|
const real = getRealIndex(innerIndex);
|
|
8730
8693
|
const canonical = cloneCount + real;
|
|
@@ -8734,7 +8697,7 @@ var Swiper = (props) => {
|
|
|
8734
8697
|
}
|
|
8735
8698
|
onChange?.(Math.min(real, maxIndex));
|
|
8736
8699
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
8737
|
-
const slideTo =
|
|
8700
|
+
const slideTo = React30.useCallback(
|
|
8738
8701
|
(logicalIndex) => {
|
|
8739
8702
|
if (!canSlide) return;
|
|
8740
8703
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -8744,7 +8707,7 @@ var Swiper = (props) => {
|
|
|
8744
8707
|
},
|
|
8745
8708
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
8746
8709
|
);
|
|
8747
|
-
const slideNext =
|
|
8710
|
+
const slideNext = React30.useCallback(() => {
|
|
8748
8711
|
if (!canSlide) return;
|
|
8749
8712
|
const nextInner = innerIndex + slideBy;
|
|
8750
8713
|
if (useLoop) {
|
|
@@ -8753,7 +8716,7 @@ var Swiper = (props) => {
|
|
|
8753
8716
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
8754
8717
|
}
|
|
8755
8718
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
8756
|
-
const slidePrev =
|
|
8719
|
+
const slidePrev = React30.useCallback(() => {
|
|
8757
8720
|
if (!canSlide) return;
|
|
8758
8721
|
const prevInner = innerIndex - slideBy;
|
|
8759
8722
|
if (useLoop) {
|
|
@@ -8762,7 +8725,7 @@ var Swiper = (props) => {
|
|
|
8762
8725
|
moveToInner(Math.max(prevInner, 0), true);
|
|
8763
8726
|
}
|
|
8764
8727
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
8765
|
-
|
|
8728
|
+
React30.useEffect(() => {
|
|
8766
8729
|
if (indexProp === void 0) return;
|
|
8767
8730
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
8768
8731
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -8770,12 +8733,12 @@ var Swiper = (props) => {
|
|
|
8770
8733
|
moveToInner(target, true);
|
|
8771
8734
|
}
|
|
8772
8735
|
}, [indexProp]);
|
|
8773
|
-
|
|
8736
|
+
React30.useImperativeHandle(swiperRef, () => ({
|
|
8774
8737
|
slidePrev,
|
|
8775
8738
|
slideNext,
|
|
8776
8739
|
slideTo
|
|
8777
8740
|
}));
|
|
8778
|
-
|
|
8741
|
+
React30.useEffect(() => {
|
|
8779
8742
|
if (!auto || !canSlide) return;
|
|
8780
8743
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
8781
8744
|
return () => {
|
|
@@ -8798,7 +8761,7 @@ var Swiper = (props) => {
|
|
|
8798
8761
|
startXRef.current = getClientX(e);
|
|
8799
8762
|
startTimeRef.current = Date.now();
|
|
8800
8763
|
};
|
|
8801
|
-
|
|
8764
|
+
React30.useEffect(() => {
|
|
8802
8765
|
if (!isDragging) return;
|
|
8803
8766
|
const handleMove = (e) => {
|
|
8804
8767
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -8836,8 +8799,8 @@ var Swiper = (props) => {
|
|
|
8836
8799
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
8837
8800
|
const slideWidthPercent = 100 / viewItemCount;
|
|
8838
8801
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
8839
|
-
const slideElements =
|
|
8840
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */
|
|
8802
|
+
const slideElements = React30.useMemo(
|
|
8803
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ jsx337(
|
|
8841
8804
|
"div",
|
|
8842
8805
|
{
|
|
8843
8806
|
className: "lib-xplat-swiper__slide",
|
|
@@ -8857,13 +8820,13 @@ var Swiper = (props) => {
|
|
|
8857
8820
|
totalSteps - 1
|
|
8858
8821
|
);
|
|
8859
8822
|
return /* @__PURE__ */ jsxs218("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
8860
|
-
/* @__PURE__ */
|
|
8823
|
+
/* @__PURE__ */ jsx337(
|
|
8861
8824
|
"div",
|
|
8862
8825
|
{
|
|
8863
8826
|
className: "lib-xplat-swiper__viewport",
|
|
8864
8827
|
onMouseDown: handleDragStart,
|
|
8865
8828
|
onTouchStart: handleDragStart,
|
|
8866
|
-
children: /* @__PURE__ */
|
|
8829
|
+
children: /* @__PURE__ */ jsx337(
|
|
8867
8830
|
"div",
|
|
8868
8831
|
{
|
|
8869
8832
|
className: clsx_default(
|
|
@@ -8881,7 +8844,7 @@ var Swiper = (props) => {
|
|
|
8881
8844
|
)
|
|
8882
8845
|
}
|
|
8883
8846
|
),
|
|
8884
|
-
showProgress && canSlide && /* @__PURE__ */
|
|
8847
|
+
showProgress && canSlide && /* @__PURE__ */ jsx337("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ jsx337("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ jsx337(
|
|
8885
8848
|
"span",
|
|
8886
8849
|
{
|
|
8887
8850
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -8891,7 +8854,7 @@ var Swiper = (props) => {
|
|
|
8891
8854
|
}
|
|
8892
8855
|
}
|
|
8893
8856
|
) }) }),
|
|
8894
|
-
canSlide && /* @__PURE__ */
|
|
8857
|
+
canSlide && /* @__PURE__ */ jsx337("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ jsx337(
|
|
8895
8858
|
"button",
|
|
8896
8859
|
{
|
|
8897
8860
|
className: clsx_default(
|
|
@@ -8909,8 +8872,8 @@ Swiper.displayName = "Swiper";
|
|
|
8909
8872
|
var Swiper_default = Swiper;
|
|
8910
8873
|
|
|
8911
8874
|
// src/components/Switch/Switch.tsx
|
|
8912
|
-
import
|
|
8913
|
-
import { jsx as
|
|
8875
|
+
import React31 from "react";
|
|
8876
|
+
import { jsx as jsx338 } from "react/jsx-runtime";
|
|
8914
8877
|
var KNOB_TRANSITION_MS = 250;
|
|
8915
8878
|
var Switch = (props) => {
|
|
8916
8879
|
const {
|
|
@@ -8920,9 +8883,9 @@ var Switch = (props) => {
|
|
|
8920
8883
|
disabled,
|
|
8921
8884
|
onChange
|
|
8922
8885
|
} = props;
|
|
8923
|
-
const [isAnimating, setIsAnimating] =
|
|
8924
|
-
const timeoutRef =
|
|
8925
|
-
|
|
8886
|
+
const [isAnimating, setIsAnimating] = React31.useState(false);
|
|
8887
|
+
const timeoutRef = React31.useRef(null);
|
|
8888
|
+
React31.useEffect(() => {
|
|
8926
8889
|
return () => {
|
|
8927
8890
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
8928
8891
|
};
|
|
@@ -8937,7 +8900,7 @@ var Switch = (props) => {
|
|
|
8937
8900
|
timeoutRef.current = null;
|
|
8938
8901
|
}, KNOB_TRANSITION_MS);
|
|
8939
8902
|
};
|
|
8940
|
-
return /* @__PURE__ */
|
|
8903
|
+
return /* @__PURE__ */ jsx338(
|
|
8941
8904
|
"div",
|
|
8942
8905
|
{
|
|
8943
8906
|
className: clsx_default(
|
|
@@ -8950,7 +8913,7 @@ var Switch = (props) => {
|
|
|
8950
8913
|
),
|
|
8951
8914
|
onClick: handleClick,
|
|
8952
8915
|
"aria-disabled": disabled || isAnimating,
|
|
8953
|
-
children: /* @__PURE__ */
|
|
8916
|
+
children: /* @__PURE__ */ jsx338("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
8954
8917
|
}
|
|
8955
8918
|
);
|
|
8956
8919
|
};
|
|
@@ -8958,17 +8921,17 @@ Switch.displayName = "Switch";
|
|
|
8958
8921
|
var Switch_default = Switch;
|
|
8959
8922
|
|
|
8960
8923
|
// src/components/Table/TableContext.tsx
|
|
8961
|
-
import
|
|
8962
|
-
var TableContext =
|
|
8924
|
+
import React32 from "react";
|
|
8925
|
+
var TableContext = React32.createContext(null);
|
|
8963
8926
|
var useTableContext = () => {
|
|
8964
|
-
const ctx =
|
|
8927
|
+
const ctx = React32.useContext(TableContext);
|
|
8965
8928
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
8966
8929
|
return ctx;
|
|
8967
8930
|
};
|
|
8968
8931
|
var TableContext_default = TableContext;
|
|
8969
8932
|
|
|
8970
8933
|
// src/components/Table/Table.tsx
|
|
8971
|
-
import { jsx as
|
|
8934
|
+
import { jsx as jsx339 } from "react/jsx-runtime";
|
|
8972
8935
|
var Table = (props) => {
|
|
8973
8936
|
const {
|
|
8974
8937
|
children,
|
|
@@ -8978,7 +8941,7 @@ var Table = (props) => {
|
|
|
8978
8941
|
headerSticky = false,
|
|
8979
8942
|
stickyShadow = true
|
|
8980
8943
|
} = props;
|
|
8981
|
-
return /* @__PURE__ */
|
|
8944
|
+
return /* @__PURE__ */ jsx339("div", { className: `lib-xplat-table-wrapper ${size}`, children: /* @__PURE__ */ jsx339(
|
|
8982
8945
|
TableContext_default.Provider,
|
|
8983
8946
|
{
|
|
8984
8947
|
value: {
|
|
@@ -8987,7 +8950,7 @@ var Table = (props) => {
|
|
|
8987
8950
|
headerSticky,
|
|
8988
8951
|
stickyShadow
|
|
8989
8952
|
},
|
|
8990
|
-
children: /* @__PURE__ */
|
|
8953
|
+
children: /* @__PURE__ */ jsx339("table", { className: "lib-xplat-table", children })
|
|
8991
8954
|
}
|
|
8992
8955
|
) });
|
|
8993
8956
|
};
|
|
@@ -8995,41 +8958,41 @@ Table.displayName = "Table";
|
|
|
8995
8958
|
var Table_default = Table;
|
|
8996
8959
|
|
|
8997
8960
|
// src/components/Table/TableBody.tsx
|
|
8998
|
-
import { jsx as
|
|
8961
|
+
import { jsx as jsx340 } from "react/jsx-runtime";
|
|
8999
8962
|
var TableBody = (props) => {
|
|
9000
8963
|
const { children } = props;
|
|
9001
|
-
return /* @__PURE__ */
|
|
8964
|
+
return /* @__PURE__ */ jsx340("tbody", { children });
|
|
9002
8965
|
};
|
|
9003
8966
|
TableBody.displayName = "TableBody";
|
|
9004
8967
|
var TableBody_default = TableBody;
|
|
9005
8968
|
|
|
9006
8969
|
// src/components/Table/TableCell.tsx
|
|
9007
|
-
import
|
|
8970
|
+
import React35 from "react";
|
|
9008
8971
|
|
|
9009
8972
|
// src/components/Table/TableHeadContext.tsx
|
|
9010
|
-
import
|
|
9011
|
-
var TableHeadContext =
|
|
8973
|
+
import React33 from "react";
|
|
8974
|
+
var TableHeadContext = React33.createContext(
|
|
9012
8975
|
null
|
|
9013
8976
|
);
|
|
9014
8977
|
var useTableHeadContext = () => {
|
|
9015
|
-
const ctx =
|
|
8978
|
+
const ctx = React33.useContext(TableHeadContext);
|
|
9016
8979
|
return ctx;
|
|
9017
8980
|
};
|
|
9018
8981
|
var TableHeadContext_default = TableHeadContext;
|
|
9019
8982
|
|
|
9020
8983
|
// src/components/Table/TableRowContext.tsx
|
|
9021
|
-
import
|
|
9022
|
-
var TableRowContext =
|
|
8984
|
+
import React34 from "react";
|
|
8985
|
+
var TableRowContext = React34.createContext(null);
|
|
9023
8986
|
var useTableRowContext = () => {
|
|
9024
|
-
const ctx =
|
|
8987
|
+
const ctx = React34.useContext(TableRowContext);
|
|
9025
8988
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
9026
8989
|
return ctx;
|
|
9027
8990
|
};
|
|
9028
8991
|
var TableRowContext_default = TableRowContext;
|
|
9029
8992
|
|
|
9030
8993
|
// src/components/Table/TableCell.tsx
|
|
9031
|
-
import { jsx as
|
|
9032
|
-
var TableCell =
|
|
8994
|
+
import { jsx as jsx341 } from "react/jsx-runtime";
|
|
8995
|
+
var TableCell = React35.memo((props) => {
|
|
9033
8996
|
const {
|
|
9034
8997
|
children,
|
|
9035
8998
|
align = "center",
|
|
@@ -9041,9 +9004,9 @@ var TableCell = React36.memo((props) => {
|
|
|
9041
9004
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
9042
9005
|
const { stickyShadow } = useTableContext();
|
|
9043
9006
|
const headContext = useTableHeadContext();
|
|
9044
|
-
const [left, setLeft] =
|
|
9045
|
-
const cellRef =
|
|
9046
|
-
const calculateLeft =
|
|
9007
|
+
const [left, setLeft] = React35.useState(0);
|
|
9008
|
+
const cellRef = React35.useRef(null);
|
|
9009
|
+
const calculateLeft = React35.useCallback(() => {
|
|
9047
9010
|
if (!cellRef.current) return 0;
|
|
9048
9011
|
let totalLeft = 0;
|
|
9049
9012
|
for (const ref of stickyCells) {
|
|
@@ -9052,7 +9015,7 @@ var TableCell = React36.memo((props) => {
|
|
|
9052
9015
|
}
|
|
9053
9016
|
return totalLeft;
|
|
9054
9017
|
}, [stickyCells]);
|
|
9055
|
-
|
|
9018
|
+
React35.useEffect(() => {
|
|
9056
9019
|
if (!isSticky || !cellRef.current) return;
|
|
9057
9020
|
registerStickyCell(cellRef);
|
|
9058
9021
|
setLeft(calculateLeft());
|
|
@@ -9070,7 +9033,7 @@ var TableCell = React36.memo((props) => {
|
|
|
9070
9033
|
const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
|
|
9071
9034
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
9072
9035
|
const enableHover = headContext && headContext.cellHover;
|
|
9073
|
-
return /* @__PURE__ */
|
|
9036
|
+
return /* @__PURE__ */ jsx341(
|
|
9074
9037
|
CellTag,
|
|
9075
9038
|
{
|
|
9076
9039
|
ref: cellRef,
|
|
@@ -9095,21 +9058,21 @@ TableCell.displayName = "TableCell";
|
|
|
9095
9058
|
var TableCell_default = TableCell;
|
|
9096
9059
|
|
|
9097
9060
|
// src/components/Table/TableHead.tsx
|
|
9098
|
-
import { jsx as
|
|
9061
|
+
import { jsx as jsx342 } from "react/jsx-runtime";
|
|
9099
9062
|
var TableHead = ({
|
|
9100
9063
|
children,
|
|
9101
9064
|
cellHover = false
|
|
9102
9065
|
}) => {
|
|
9103
9066
|
const { headerSticky } = useTableContext();
|
|
9104
|
-
return /* @__PURE__ */
|
|
9067
|
+
return /* @__PURE__ */ jsx342(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ jsx342("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
|
|
9105
9068
|
};
|
|
9106
9069
|
TableHead.displayName = "TableHead";
|
|
9107
9070
|
var TableHead_default = TableHead;
|
|
9108
9071
|
|
|
9109
9072
|
// src/components/Table/TableRow.tsx
|
|
9110
|
-
import
|
|
9111
|
-
import { jsx as
|
|
9112
|
-
var TableRow =
|
|
9073
|
+
import React36 from "react";
|
|
9074
|
+
import { jsx as jsx343 } from "react/jsx-runtime";
|
|
9075
|
+
var TableRow = React36.memo((props) => {
|
|
9113
9076
|
const {
|
|
9114
9077
|
children,
|
|
9115
9078
|
type = "secondary",
|
|
@@ -9117,14 +9080,14 @@ var TableRow = React37.memo((props) => {
|
|
|
9117
9080
|
onClick
|
|
9118
9081
|
} = props;
|
|
9119
9082
|
const { rowBorderUse } = useTableContext();
|
|
9120
|
-
const [stickyCells, setStickyCells] =
|
|
9083
|
+
const [stickyCells, setStickyCells] = React36.useState([]);
|
|
9121
9084
|
const registerStickyCell = (ref) => {
|
|
9122
9085
|
setStickyCells((prev) => {
|
|
9123
9086
|
if (prev.includes(ref)) return prev;
|
|
9124
9087
|
return [...prev, ref];
|
|
9125
9088
|
});
|
|
9126
9089
|
};
|
|
9127
|
-
return /* @__PURE__ */
|
|
9090
|
+
return /* @__PURE__ */ jsx343(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ jsx343(
|
|
9128
9091
|
"tr",
|
|
9129
9092
|
{
|
|
9130
9093
|
className: clsx_default(
|
|
@@ -9142,7 +9105,7 @@ TableRow.displayName = "TableRow";
|
|
|
9142
9105
|
var TableRow_default = TableRow;
|
|
9143
9106
|
|
|
9144
9107
|
// src/components/Tag/Tag.tsx
|
|
9145
|
-
import { jsx as
|
|
9108
|
+
import { jsx as jsx344, jsxs as jsxs219 } from "react/jsx-runtime";
|
|
9146
9109
|
var Tag = (props) => {
|
|
9147
9110
|
const {
|
|
9148
9111
|
children,
|
|
@@ -9163,8 +9126,8 @@ var Tag = (props) => {
|
|
|
9163
9126
|
disabled && "disabled"
|
|
9164
9127
|
),
|
|
9165
9128
|
children: [
|
|
9166
|
-
/* @__PURE__ */
|
|
9167
|
-
onClose && /* @__PURE__ */
|
|
9129
|
+
/* @__PURE__ */ jsx344("span", { className: "tag-label", children }),
|
|
9130
|
+
onClose && /* @__PURE__ */ jsx344("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ jsx344(XIcon_default, {}) })
|
|
9168
9131
|
]
|
|
9169
9132
|
}
|
|
9170
9133
|
);
|
|
@@ -9172,6 +9135,63 @@ var Tag = (props) => {
|
|
|
9172
9135
|
Tag.displayName = "Tag";
|
|
9173
9136
|
var Tag_default = Tag;
|
|
9174
9137
|
|
|
9138
|
+
// src/components/TextArea/TextArea.tsx
|
|
9139
|
+
import React37 from "react";
|
|
9140
|
+
import { jsx as jsx345 } from "react/jsx-runtime";
|
|
9141
|
+
var TextArea = React37.forwardRef(
|
|
9142
|
+
(props, ref) => {
|
|
9143
|
+
const { value, onChange, disabled, ...textareaProps } = props;
|
|
9144
|
+
const localRef = React37.useRef(null);
|
|
9145
|
+
const setRefs = (el) => {
|
|
9146
|
+
localRef.current = el;
|
|
9147
|
+
if (!ref) return;
|
|
9148
|
+
if (typeof ref === "function") {
|
|
9149
|
+
ref(el);
|
|
9150
|
+
} else if (ref && typeof ref === "object" && "current" in ref) {
|
|
9151
|
+
ref.current = el;
|
|
9152
|
+
}
|
|
9153
|
+
};
|
|
9154
|
+
const handleOnChange = (e) => {
|
|
9155
|
+
const val = e.target.value;
|
|
9156
|
+
if (onChange) {
|
|
9157
|
+
const event = {
|
|
9158
|
+
...e,
|
|
9159
|
+
target: { value: val }
|
|
9160
|
+
};
|
|
9161
|
+
onChange(event);
|
|
9162
|
+
}
|
|
9163
|
+
};
|
|
9164
|
+
React37.useEffect(() => {
|
|
9165
|
+
const el = localRef.current;
|
|
9166
|
+
if (!el) return;
|
|
9167
|
+
el.style.height = "0px";
|
|
9168
|
+
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
9169
|
+
el.style.height = `${nextHeight}px`;
|
|
9170
|
+
}, [value]);
|
|
9171
|
+
return /* @__PURE__ */ jsx345("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ jsx345(
|
|
9172
|
+
"div",
|
|
9173
|
+
{
|
|
9174
|
+
className: clsx_default(
|
|
9175
|
+
"lib-xplat-textarea",
|
|
9176
|
+
disabled ? "disabled" : void 0
|
|
9177
|
+
),
|
|
9178
|
+
children: /* @__PURE__ */ jsx345(
|
|
9179
|
+
"textarea",
|
|
9180
|
+
{
|
|
9181
|
+
...textareaProps,
|
|
9182
|
+
ref: setRefs,
|
|
9183
|
+
disabled,
|
|
9184
|
+
value,
|
|
9185
|
+
onChange: handleOnChange
|
|
9186
|
+
}
|
|
9187
|
+
)
|
|
9188
|
+
}
|
|
9189
|
+
) });
|
|
9190
|
+
}
|
|
9191
|
+
);
|
|
9192
|
+
TextArea.displayName = "TextArea";
|
|
9193
|
+
var TextArea_default = TextArea;
|
|
9194
|
+
|
|
9175
9195
|
// src/components/Toast/Toast.tsx
|
|
9176
9196
|
import React38 from "react";
|
|
9177
9197
|
import { createPortal as createPortal3 } from "react-dom";
|