@x-plat/design-system 0.5.64 → 0.5.66
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/AutoResizeTextArea/index.cjs +118 -0
- package/dist/components/AutoResizeTextArea/index.css +46 -0
- package/dist/components/AutoResizeTextArea/index.d.cts +10 -0
- package/dist/components/AutoResizeTextArea/index.d.ts +10 -0
- package/dist/components/AutoResizeTextArea/index.js +81 -0
- package/dist/components/ChatInput/index.cjs +72 -30
- package/dist/components/ChatInput/index.css +47 -0
- package/dist/components/ChatInput/index.js +71 -29
- package/dist/components/CheckBox/index.css +0 -2
- package/dist/components/TextArea/index.cjs +16 -44
- package/dist/components/TextArea/index.css +26 -28
- package/dist/components/TextArea/index.d.cts +8 -1
- package/dist/components/TextArea/index.d.ts +8 -1
- package/dist/components/TextArea/index.js +16 -44
- package/dist/components/index.cjs +561 -545
- package/dist/components/index.css +73 -30
- package/dist/components/index.d.cts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +508 -493
- package/dist/index.cjs +585 -569
- package/dist/index.css +73 -30
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +530 -515
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6782,11 +6782,72 @@ var Chart = React5.memo((props) => {
|
|
|
6782
6782
|
Chart.displayName = "Chart";
|
|
6783
6783
|
var Chart_default = Chart;
|
|
6784
6784
|
|
|
6785
|
-
// src/components/
|
|
6785
|
+
// src/components/AutoResizeTextArea/AutoResizeTextArea.tsx
|
|
6786
6786
|
import React6 from "react";
|
|
6787
|
+
import { jsx as jsx306 } from "react/jsx-runtime";
|
|
6788
|
+
var MAX_HEIGHT = 400;
|
|
6789
|
+
var AutoResizeTextArea = React6.forwardRef(
|
|
6790
|
+
(props, ref) => {
|
|
6791
|
+
const { value, className, onChange, disabled, bare = false, ...textareaProps } = props;
|
|
6792
|
+
const localRef = React6.useRef(null);
|
|
6793
|
+
const setRefs = (el) => {
|
|
6794
|
+
localRef.current = el;
|
|
6795
|
+
if (!ref) return;
|
|
6796
|
+
if (typeof ref === "function") ref(el);
|
|
6797
|
+
else if (ref && "current" in ref)
|
|
6798
|
+
ref.current = el;
|
|
6799
|
+
};
|
|
6800
|
+
const updateHeight = () => {
|
|
6801
|
+
const el = localRef.current;
|
|
6802
|
+
if (!el) return;
|
|
6803
|
+
el.style.height = "0px";
|
|
6804
|
+
el.style.height = `${Math.min(el.scrollHeight, MAX_HEIGHT)}px`;
|
|
6805
|
+
};
|
|
6806
|
+
const handleChange = (e) => {
|
|
6807
|
+
if (onChange) {
|
|
6808
|
+
const event = {
|
|
6809
|
+
...e,
|
|
6810
|
+
target: { value: e.target.value }
|
|
6811
|
+
};
|
|
6812
|
+
onChange(event);
|
|
6813
|
+
}
|
|
6814
|
+
};
|
|
6815
|
+
React6.useEffect(() => {
|
|
6816
|
+
updateHeight();
|
|
6817
|
+
}, [value]);
|
|
6818
|
+
if (bare) {
|
|
6819
|
+
return /* @__PURE__ */ jsx306(
|
|
6820
|
+
"textarea",
|
|
6821
|
+
{
|
|
6822
|
+
...textareaProps,
|
|
6823
|
+
ref: setRefs,
|
|
6824
|
+
className,
|
|
6825
|
+
disabled,
|
|
6826
|
+
value,
|
|
6827
|
+
onChange: handleChange
|
|
6828
|
+
}
|
|
6829
|
+
);
|
|
6830
|
+
}
|
|
6831
|
+
return /* @__PURE__ */ jsx306("div", { className: clsx_default("lib-xplat-auto-resize-textarea-wrapper", className), children: /* @__PURE__ */ jsx306("div", { className: clsx_default("lib-xplat-auto-resize-textarea", disabled && "disabled"), children: /* @__PURE__ */ jsx306(
|
|
6832
|
+
"textarea",
|
|
6833
|
+
{
|
|
6834
|
+
...textareaProps,
|
|
6835
|
+
ref: setRefs,
|
|
6836
|
+
disabled,
|
|
6837
|
+
value,
|
|
6838
|
+
onChange: handleChange
|
|
6839
|
+
}
|
|
6840
|
+
) }) });
|
|
6841
|
+
}
|
|
6842
|
+
);
|
|
6843
|
+
AutoResizeTextArea.displayName = "AutoResizeTextArea";
|
|
6844
|
+
var AutoResizeTextArea_default = AutoResizeTextArea;
|
|
6845
|
+
|
|
6846
|
+
// src/components/ChatInput/ChatInput.tsx
|
|
6847
|
+
import React7 from "react";
|
|
6787
6848
|
|
|
6788
6849
|
// src/components/IconButton/IconButton.tsx
|
|
6789
|
-
import { jsx as
|
|
6850
|
+
import { jsx as jsx307 } from "react/jsx-runtime";
|
|
6790
6851
|
var IconButton = (props) => {
|
|
6791
6852
|
const {
|
|
6792
6853
|
icon,
|
|
@@ -6796,7 +6857,7 @@ var IconButton = (props) => {
|
|
|
6796
6857
|
disabled,
|
|
6797
6858
|
...rest
|
|
6798
6859
|
} = props;
|
|
6799
|
-
return /* @__PURE__ */
|
|
6860
|
+
return /* @__PURE__ */ jsx307(
|
|
6800
6861
|
"button",
|
|
6801
6862
|
{
|
|
6802
6863
|
className: clsx_default("lib-xplat-icon-button", type, size, className),
|
|
@@ -6810,9 +6871,8 @@ IconButton.displayName = "IconButton";
|
|
|
6810
6871
|
var IconButton_default = IconButton;
|
|
6811
6872
|
|
|
6812
6873
|
// src/components/ChatInput/ChatInput.tsx
|
|
6813
|
-
import { jsx as
|
|
6814
|
-
var
|
|
6815
|
-
var ChatInput = React6.forwardRef(
|
|
6874
|
+
import { jsx as jsx308, jsxs as jsxs197 } from "react/jsx-runtime";
|
|
6875
|
+
var ChatInput = React7.forwardRef(
|
|
6816
6876
|
(props, ref) => {
|
|
6817
6877
|
const {
|
|
6818
6878
|
placeholder,
|
|
@@ -6823,24 +6883,9 @@ var ChatInput = React6.forwardRef(
|
|
|
6823
6883
|
onChange
|
|
6824
6884
|
} = props;
|
|
6825
6885
|
const isControlled = valueProp !== void 0;
|
|
6826
|
-
const [internalValue, setInternalValue] =
|
|
6886
|
+
const [internalValue, setInternalValue] = React7.useState("");
|
|
6827
6887
|
const value = isControlled ? valueProp : internalValue;
|
|
6828
6888
|
const hasText = value.trim().length > 0;
|
|
6829
|
-
const textareaRef = React6.useRef(null);
|
|
6830
|
-
const setRefs = React6.useCallback(
|
|
6831
|
-
(el) => {
|
|
6832
|
-
textareaRef.current = el;
|
|
6833
|
-
if (typeof ref === "function") ref(el);
|
|
6834
|
-
else if (ref) ref.current = el;
|
|
6835
|
-
},
|
|
6836
|
-
[ref]
|
|
6837
|
-
);
|
|
6838
|
-
const updateHeight = React6.useCallback(() => {
|
|
6839
|
-
const el = textareaRef.current;
|
|
6840
|
-
if (!el) return;
|
|
6841
|
-
el.style.height = "0px";
|
|
6842
|
-
el.style.height = `${Math.min(el.scrollHeight, MAX_HEIGHT)}px`;
|
|
6843
|
-
}, []);
|
|
6844
6889
|
const handleChange = (e) => {
|
|
6845
6890
|
const val = e.target.value;
|
|
6846
6891
|
if (!isControlled) setInternalValue(val);
|
|
@@ -6850,7 +6895,6 @@ var ChatInput = React6.forwardRef(
|
|
|
6850
6895
|
if (!hasText || disabled) return;
|
|
6851
6896
|
onSubmit?.(value);
|
|
6852
6897
|
if (!isControlled) setInternalValue("");
|
|
6853
|
-
requestAnimationFrame(updateHeight);
|
|
6854
6898
|
};
|
|
6855
6899
|
const handleKeyDown = (e) => {
|
|
6856
6900
|
if (e.key === "Enter" && !e.shiftKey) {
|
|
@@ -6858,14 +6902,12 @@ var ChatInput = React6.forwardRef(
|
|
|
6858
6902
|
handleSubmit();
|
|
6859
6903
|
}
|
|
6860
6904
|
};
|
|
6861
|
-
React6.useEffect(() => {
|
|
6862
|
-
updateHeight();
|
|
6863
|
-
}, [value, updateHeight]);
|
|
6864
6905
|
return /* @__PURE__ */ jsxs197("div", { className: clsx_default("lib-xplat-chat-input", disabled && "disabled"), children: [
|
|
6865
|
-
/* @__PURE__ */
|
|
6866
|
-
|
|
6906
|
+
/* @__PURE__ */ jsx308(
|
|
6907
|
+
AutoResizeTextArea_default,
|
|
6867
6908
|
{
|
|
6868
|
-
ref
|
|
6909
|
+
ref,
|
|
6910
|
+
bare: true,
|
|
6869
6911
|
className: "chat-input-textarea",
|
|
6870
6912
|
placeholder,
|
|
6871
6913
|
value,
|
|
@@ -6875,10 +6917,10 @@ var ChatInput = React6.forwardRef(
|
|
|
6875
6917
|
onKeyDown: handleKeyDown
|
|
6876
6918
|
}
|
|
6877
6919
|
),
|
|
6878
|
-
/* @__PURE__ */
|
|
6920
|
+
/* @__PURE__ */ jsx308(
|
|
6879
6921
|
IconButton_default,
|
|
6880
6922
|
{
|
|
6881
|
-
icon: /* @__PURE__ */
|
|
6923
|
+
icon: /* @__PURE__ */ jsx308(MessageSquareIcon_default, {}),
|
|
6882
6924
|
type: buttonType,
|
|
6883
6925
|
size: "sm",
|
|
6884
6926
|
disabled: !hasText || disabled,
|
|
@@ -6912,7 +6954,7 @@ import { primitive, semantic } from "@x-plat/tokens-core";
|
|
|
6912
6954
|
import { cssVar } from "@x-plat/tokens-core";
|
|
6913
6955
|
|
|
6914
6956
|
// src/components/CheckBox/CheckBox.tsx
|
|
6915
|
-
import { jsx as
|
|
6957
|
+
import { jsx as jsx309, jsxs as jsxs198 } from "react/jsx-runtime";
|
|
6916
6958
|
var CheckBox = (props) => {
|
|
6917
6959
|
const {
|
|
6918
6960
|
checked,
|
|
@@ -6932,7 +6974,7 @@ var CheckBox = (props) => {
|
|
|
6932
6974
|
const disabledClasses = "disabled";
|
|
6933
6975
|
const boxClasses = disabled ? disabledClasses : checked ? checkedClasses : uncheckedClasses;
|
|
6934
6976
|
return /* @__PURE__ */ jsxs198("label", { className: clsx_default("lib-xplat-checkbox", size, type, className), children: [
|
|
6935
|
-
/* @__PURE__ */
|
|
6977
|
+
/* @__PURE__ */ jsx309(
|
|
6936
6978
|
"input",
|
|
6937
6979
|
{
|
|
6938
6980
|
type: "checkbox",
|
|
@@ -6942,44 +6984,44 @@ var CheckBox = (props) => {
|
|
|
6942
6984
|
...rest
|
|
6943
6985
|
}
|
|
6944
6986
|
),
|
|
6945
|
-
/* @__PURE__ */
|
|
6946
|
-
label && /* @__PURE__ */
|
|
6987
|
+
/* @__PURE__ */ jsx309("span", { className: clsx_default("checkbox", boxClasses), children: /* @__PURE__ */ jsx309("span", { className: clsx_default("check-icon", { visible: checked }), children: /* @__PURE__ */ jsx309(CheckIcon_default, {}) }) }),
|
|
6988
|
+
label && /* @__PURE__ */ jsx309("span", { className: "label", children: label })
|
|
6947
6989
|
] });
|
|
6948
6990
|
};
|
|
6949
6991
|
CheckBox.displayName = "CheckBox";
|
|
6950
6992
|
var CheckBox_default = CheckBox;
|
|
6951
6993
|
|
|
6952
6994
|
// src/components/Chip/Chip.tsx
|
|
6953
|
-
import { jsx as
|
|
6995
|
+
import { jsx as jsx310 } from "react/jsx-runtime";
|
|
6954
6996
|
var Chip = (props) => {
|
|
6955
6997
|
const {
|
|
6956
6998
|
children,
|
|
6957
6999
|
type = "primary",
|
|
6958
7000
|
size = "md"
|
|
6959
7001
|
} = props;
|
|
6960
|
-
return /* @__PURE__ */
|
|
7002
|
+
return /* @__PURE__ */ jsx310("div", { className: clsx_default("lib-xplat-chip", type, size), children });
|
|
6961
7003
|
};
|
|
6962
7004
|
Chip.displayName = "Chip";
|
|
6963
7005
|
var Chip_default = Chip;
|
|
6964
7006
|
|
|
6965
7007
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
6966
|
-
import
|
|
7008
|
+
import React13 from "react";
|
|
6967
7009
|
|
|
6968
7010
|
// src/components/Input/Input.tsx
|
|
6969
|
-
import
|
|
7011
|
+
import React8 from "react";
|
|
6970
7012
|
|
|
6971
7013
|
// src/components/Input/InputValidations.tsx
|
|
6972
|
-
import { jsx as
|
|
7014
|
+
import { jsx as jsx311, jsxs as jsxs199 } from "react/jsx-runtime";
|
|
6973
7015
|
var InputValidations = (props) => {
|
|
6974
7016
|
const { message, status = "default" } = props;
|
|
6975
7017
|
return /* @__PURE__ */ jsxs199("div", { className: clsx_default("lib-xplat-input-validation", status), children: [
|
|
6976
7018
|
/* @__PURE__ */ jsxs199("div", { className: "icon", children: [
|
|
6977
|
-
status === "default" && /* @__PURE__ */
|
|
6978
|
-
status === "success" && /* @__PURE__ */
|
|
6979
|
-
status === "warning" && /* @__PURE__ */
|
|
6980
|
-
status === "error" && /* @__PURE__ */
|
|
7019
|
+
status === "default" && /* @__PURE__ */ jsx311(InfoIcon_default, {}),
|
|
7020
|
+
status === "success" && /* @__PURE__ */ jsx311(SuccessIcon_default, {}),
|
|
7021
|
+
status === "warning" && /* @__PURE__ */ jsx311(InfoIcon_default, {}),
|
|
7022
|
+
status === "error" && /* @__PURE__ */ jsx311(ErrorIcon_default, {})
|
|
6981
7023
|
] }),
|
|
6982
|
-
/* @__PURE__ */
|
|
7024
|
+
/* @__PURE__ */ jsx311("div", { className: "message", children: message })
|
|
6983
7025
|
] });
|
|
6984
7026
|
};
|
|
6985
7027
|
InputValidations.displayName = "InputValidations";
|
|
@@ -7020,7 +7062,7 @@ var handleTelBackspace = (prevValue, currValue) => {
|
|
|
7020
7062
|
};
|
|
7021
7063
|
|
|
7022
7064
|
// src/components/Input/Input.tsx
|
|
7023
|
-
import { jsx as
|
|
7065
|
+
import { jsx as jsx312, jsxs as jsxs200 } from "react/jsx-runtime";
|
|
7024
7066
|
import { createElement } from "react";
|
|
7025
7067
|
var formatValue = (type, value) => {
|
|
7026
7068
|
if (value === null || value === void 0) return "";
|
|
@@ -7069,7 +7111,7 @@ var parseValue = (type, value) => {
|
|
|
7069
7111
|
return value;
|
|
7070
7112
|
}
|
|
7071
7113
|
};
|
|
7072
|
-
var Input =
|
|
7114
|
+
var Input = React8.forwardRef((props, ref) => {
|
|
7073
7115
|
const {
|
|
7074
7116
|
value,
|
|
7075
7117
|
className,
|
|
@@ -7102,7 +7144,7 @@ var Input = React7.forwardRef((props, ref) => {
|
|
|
7102
7144
|
{
|
|
7103
7145
|
className: clsx_default("lib-xplat-input", size, disabled ? "disabled" : void 0),
|
|
7104
7146
|
children: [
|
|
7105
|
-
/* @__PURE__ */
|
|
7147
|
+
/* @__PURE__ */ jsx312(
|
|
7106
7148
|
"input",
|
|
7107
7149
|
{
|
|
7108
7150
|
...inputProps,
|
|
@@ -7113,11 +7155,11 @@ var Input = React7.forwardRef((props, ref) => {
|
|
|
7113
7155
|
onChange: handleChange
|
|
7114
7156
|
}
|
|
7115
7157
|
),
|
|
7116
|
-
suffix && /* @__PURE__ */
|
|
7158
|
+
suffix && /* @__PURE__ */ jsx312("div", { className: "suffix", children: suffix })
|
|
7117
7159
|
]
|
|
7118
7160
|
}
|
|
7119
7161
|
),
|
|
7120
|
-
validations && /* @__PURE__ */
|
|
7162
|
+
validations && /* @__PURE__ */ jsx312("div", { className: "lib-xplat-input-validation-wrap", children: validations?.map((validation, idx) => /* @__PURE__ */ createElement(
|
|
7121
7163
|
InputValidations_default,
|
|
7122
7164
|
{
|
|
7123
7165
|
...validation,
|
|
@@ -7130,20 +7172,20 @@ Input.displayName = "Input";
|
|
|
7130
7172
|
var Input_default = Input;
|
|
7131
7173
|
|
|
7132
7174
|
// src/components/Input/PasswordInput/PasswordInput.tsx
|
|
7133
|
-
import
|
|
7134
|
-
import { jsx as
|
|
7135
|
-
var PasswordInput =
|
|
7175
|
+
import React9 from "react";
|
|
7176
|
+
import { jsx as jsx313 } from "react/jsx-runtime";
|
|
7177
|
+
var PasswordInput = React9.forwardRef(
|
|
7136
7178
|
(props, ref) => {
|
|
7137
7179
|
const { reg: _reg, ...inputProps } = props;
|
|
7138
|
-
const [isView, setIsView] =
|
|
7180
|
+
const [isView, setIsView] = React9.useState(false);
|
|
7139
7181
|
const handleChangeView = () => {
|
|
7140
7182
|
setIsView((prev) => !prev);
|
|
7141
7183
|
};
|
|
7142
|
-
return /* @__PURE__ */
|
|
7184
|
+
return /* @__PURE__ */ jsx313(
|
|
7143
7185
|
Input_default,
|
|
7144
7186
|
{
|
|
7145
7187
|
...inputProps,
|
|
7146
|
-
suffix: /* @__PURE__ */
|
|
7188
|
+
suffix: /* @__PURE__ */ jsx313("div", { className: "wrapper pointer", onClick: handleChangeView, children: isView ? /* @__PURE__ */ jsx313(OpenEyeIcon_default, {}) : /* @__PURE__ */ jsx313(CloseEyeIcon_default, {}) }),
|
|
7147
7189
|
type: isView ? "text" : "password",
|
|
7148
7190
|
ref
|
|
7149
7191
|
}
|
|
@@ -7154,17 +7196,17 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
7154
7196
|
var PasswordInput_default = PasswordInput;
|
|
7155
7197
|
|
|
7156
7198
|
// src/components/Modal/Modal.tsx
|
|
7157
|
-
import
|
|
7199
|
+
import React11 from "react";
|
|
7158
7200
|
import { createPortal } from "react-dom";
|
|
7159
7201
|
|
|
7160
7202
|
// src/tokens/hooks/Portal.tsx
|
|
7161
|
-
import
|
|
7203
|
+
import React10 from "react";
|
|
7162
7204
|
import ReactDOM from "react-dom";
|
|
7163
|
-
import { jsx as
|
|
7164
|
-
var PortalContainerContext =
|
|
7165
|
-
var PortalProvider = ({ container, children }) => /* @__PURE__ */
|
|
7205
|
+
import { jsx as jsx314 } from "react/jsx-runtime";
|
|
7206
|
+
var PortalContainerContext = React10.createContext(null);
|
|
7207
|
+
var PortalProvider = ({ container, children }) => /* @__PURE__ */ jsx314(PortalContainerContext.Provider, { value: container, children });
|
|
7166
7208
|
var Portal = ({ children }) => {
|
|
7167
|
-
const contextContainer =
|
|
7209
|
+
const contextContainer = React10.useContext(PortalContainerContext);
|
|
7168
7210
|
if (typeof document === "undefined") return null;
|
|
7169
7211
|
const container = contextContainer ?? document.body;
|
|
7170
7212
|
return ReactDOM.createPortal(children, container);
|
|
@@ -7173,14 +7215,14 @@ Portal.displayName = "Portal";
|
|
|
7173
7215
|
var Portal_default = Portal;
|
|
7174
7216
|
|
|
7175
7217
|
// src/components/Modal/Modal.tsx
|
|
7176
|
-
import { jsx as
|
|
7218
|
+
import { jsx as jsx315 } from "react/jsx-runtime";
|
|
7177
7219
|
var ANIMATION_DURATION_MS = 200;
|
|
7178
7220
|
var Modal = (props) => {
|
|
7179
7221
|
const { isOpen, onClose, children } = props;
|
|
7180
|
-
const [mounted, setMounted] =
|
|
7181
|
-
const [visible, setVisible] =
|
|
7182
|
-
const boxRef =
|
|
7183
|
-
|
|
7222
|
+
const [mounted, setMounted] = React11.useState(false);
|
|
7223
|
+
const [visible, setVisible] = React11.useState(false);
|
|
7224
|
+
const boxRef = React11.useRef(null);
|
|
7225
|
+
React11.useEffect(() => {
|
|
7184
7226
|
if (isOpen) {
|
|
7185
7227
|
setMounted(true);
|
|
7186
7228
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7194,12 +7236,12 @@ var Modal = (props) => {
|
|
|
7194
7236
|
if (!mounted) return null;
|
|
7195
7237
|
const stateClass = visible ? "enter" : "exit";
|
|
7196
7238
|
return createPortal(
|
|
7197
|
-
/* @__PURE__ */
|
|
7239
|
+
/* @__PURE__ */ jsx315(
|
|
7198
7240
|
"div",
|
|
7199
7241
|
{
|
|
7200
7242
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
7201
7243
|
onClick: onClose,
|
|
7202
|
-
children: /* @__PURE__ */
|
|
7244
|
+
children: /* @__PURE__ */ jsx315(
|
|
7203
7245
|
"div",
|
|
7204
7246
|
{
|
|
7205
7247
|
ref: boxRef,
|
|
@@ -7207,7 +7249,7 @@ var Modal = (props) => {
|
|
|
7207
7249
|
role: "dialog",
|
|
7208
7250
|
"aria-modal": "true",
|
|
7209
7251
|
onClick: (e) => e.stopPropagation(),
|
|
7210
|
-
children: /* @__PURE__ */
|
|
7252
|
+
children: /* @__PURE__ */ jsx315(PortalProvider, { container: boxRef.current, children })
|
|
7211
7253
|
}
|
|
7212
7254
|
)
|
|
7213
7255
|
}
|
|
@@ -7219,9 +7261,9 @@ Modal.displayName = "Modal";
|
|
|
7219
7261
|
var Modal_default = Modal;
|
|
7220
7262
|
|
|
7221
7263
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
7222
|
-
import
|
|
7223
|
-
import { Fragment as Fragment3, jsx as
|
|
7224
|
-
var DayCell2 =
|
|
7264
|
+
import React12 from "react";
|
|
7265
|
+
import { Fragment as Fragment3, jsx as jsx316, jsxs as jsxs201 } from "react/jsx-runtime";
|
|
7266
|
+
var DayCell2 = React12.memo(
|
|
7225
7267
|
({
|
|
7226
7268
|
day,
|
|
7227
7269
|
disabled,
|
|
@@ -7231,7 +7273,7 @@ var DayCell2 = React11.memo(
|
|
|
7231
7273
|
isEnd,
|
|
7232
7274
|
inRange,
|
|
7233
7275
|
onSelect
|
|
7234
|
-
}) => /* @__PURE__ */
|
|
7276
|
+
}) => /* @__PURE__ */ jsx316(
|
|
7235
7277
|
"button",
|
|
7236
7278
|
{
|
|
7237
7279
|
type: "button",
|
|
@@ -7273,26 +7315,26 @@ var SingleDatePicker = (props) => {
|
|
|
7273
7315
|
initialYear,
|
|
7274
7316
|
initialMonth
|
|
7275
7317
|
);
|
|
7276
|
-
const [pickerMode, setPickerMode] =
|
|
7277
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
7318
|
+
const [pickerMode, setPickerMode] = React12.useState("days");
|
|
7319
|
+
const [yearRangeStart, setYearRangeStart] = React12.useState(
|
|
7278
7320
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
7279
7321
|
);
|
|
7280
|
-
const minTime =
|
|
7322
|
+
const minTime = React12.useMemo(
|
|
7281
7323
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
7282
7324
|
[minDate]
|
|
7283
7325
|
);
|
|
7284
|
-
const maxTime =
|
|
7326
|
+
const maxTime = React12.useMemo(
|
|
7285
7327
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
7286
7328
|
[maxDate]
|
|
7287
7329
|
);
|
|
7288
|
-
const highlightSet =
|
|
7330
|
+
const highlightSet = React12.useMemo(() => {
|
|
7289
7331
|
const set = /* @__PURE__ */ new Set();
|
|
7290
7332
|
for (const h of highlightDates) {
|
|
7291
7333
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
7292
7334
|
}
|
|
7293
7335
|
return set;
|
|
7294
7336
|
}, [highlightDates]);
|
|
7295
|
-
const handleSelect =
|
|
7337
|
+
const handleSelect = React12.useCallback(
|
|
7296
7338
|
(date) => {
|
|
7297
7339
|
onChange?.(date);
|
|
7298
7340
|
},
|
|
@@ -7335,14 +7377,14 @@ var SingleDatePicker = (props) => {
|
|
|
7335
7377
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
7336
7378
|
children: [
|
|
7337
7379
|
/* @__PURE__ */ jsxs201("div", { className: "datepicker-header", children: [
|
|
7338
|
-
/* @__PURE__ */
|
|
7339
|
-
/* @__PURE__ */
|
|
7340
|
-
/* @__PURE__ */
|
|
7380
|
+
/* @__PURE__ */ jsx316("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ jsx316(ChevronLeftIcon_default, {}) }),
|
|
7381
|
+
/* @__PURE__ */ jsx316("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
7382
|
+
/* @__PURE__ */ jsx316("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ jsx316(ChevronRightIcon_default, {}) })
|
|
7341
7383
|
] }),
|
|
7342
7384
|
/* @__PURE__ */ jsxs201("div", { className: "datepicker-body", children: [
|
|
7343
|
-
pickerMode === "years" && /* @__PURE__ */
|
|
7385
|
+
pickerMode === "years" && /* @__PURE__ */ jsx316("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
7344
7386
|
const y = yearRangeStart + i;
|
|
7345
|
-
return /* @__PURE__ */
|
|
7387
|
+
return /* @__PURE__ */ jsx316(
|
|
7346
7388
|
"button",
|
|
7347
7389
|
{
|
|
7348
7390
|
type: "button",
|
|
@@ -7353,7 +7395,7 @@ var SingleDatePicker = (props) => {
|
|
|
7353
7395
|
y
|
|
7354
7396
|
);
|
|
7355
7397
|
}) }),
|
|
7356
|
-
pickerMode === "months" && /* @__PURE__ */
|
|
7398
|
+
pickerMode === "months" && /* @__PURE__ */ jsx316("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ jsx316(
|
|
7357
7399
|
"button",
|
|
7358
7400
|
{
|
|
7359
7401
|
type: "button",
|
|
@@ -7364,7 +7406,7 @@ var SingleDatePicker = (props) => {
|
|
|
7364
7406
|
i
|
|
7365
7407
|
)) }),
|
|
7366
7408
|
pickerMode === "days" && /* @__PURE__ */ jsxs201(Fragment3, { children: [
|
|
7367
|
-
/* @__PURE__ */
|
|
7409
|
+
/* @__PURE__ */ jsx316("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ jsx316(
|
|
7368
7410
|
"div",
|
|
7369
7411
|
{
|
|
7370
7412
|
className: clsx_default(
|
|
@@ -7376,7 +7418,7 @@ var SingleDatePicker = (props) => {
|
|
|
7376
7418
|
},
|
|
7377
7419
|
label
|
|
7378
7420
|
)) }),
|
|
7379
|
-
/* @__PURE__ */
|
|
7421
|
+
/* @__PURE__ */ jsx316("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
7380
7422
|
const t = day.date.getTime();
|
|
7381
7423
|
const disabled = t < minTime || t > maxTime;
|
|
7382
7424
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -7386,7 +7428,7 @@ var SingleDatePicker = (props) => {
|
|
|
7386
7428
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
7387
7429
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
7388
7430
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
7389
|
-
return /* @__PURE__ */
|
|
7431
|
+
return /* @__PURE__ */ jsx316(
|
|
7390
7432
|
DayCell2,
|
|
7391
7433
|
{
|
|
7392
7434
|
day,
|
|
@@ -7411,7 +7453,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
7411
7453
|
var SingleDatePicker_default = SingleDatePicker;
|
|
7412
7454
|
|
|
7413
7455
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
7414
|
-
import { jsx as
|
|
7456
|
+
import { jsx as jsx317, jsxs as jsxs202 } from "react/jsx-runtime";
|
|
7415
7457
|
var formatDate = (date) => {
|
|
7416
7458
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
7417
7459
|
const y = date.getFullYear();
|
|
@@ -7421,8 +7463,8 @@ var formatDate = (date) => {
|
|
|
7421
7463
|
};
|
|
7422
7464
|
var InputDatePicker = (props) => {
|
|
7423
7465
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
7424
|
-
const [isOpen, setIsOpen] =
|
|
7425
|
-
const [tempDate, setTempDate] =
|
|
7466
|
+
const [isOpen, setIsOpen] = React13.useState(false);
|
|
7467
|
+
const [tempDate, setTempDate] = React13.useState(value ?? /* @__PURE__ */ new Date());
|
|
7426
7468
|
const handleOpen = () => {
|
|
7427
7469
|
if (disabled) return;
|
|
7428
7470
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -7439,18 +7481,18 @@ var InputDatePicker = (props) => {
|
|
|
7439
7481
|
setIsOpen(false);
|
|
7440
7482
|
};
|
|
7441
7483
|
return /* @__PURE__ */ jsxs202("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
|
|
7442
|
-
/* @__PURE__ */
|
|
7484
|
+
/* @__PURE__ */ jsx317("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ jsx317(
|
|
7443
7485
|
Input_default,
|
|
7444
7486
|
{
|
|
7445
7487
|
value: formatDate(value),
|
|
7446
7488
|
placeholder,
|
|
7447
|
-
suffix: /* @__PURE__ */
|
|
7489
|
+
suffix: /* @__PURE__ */ jsx317(CalenderIcon_default, {}),
|
|
7448
7490
|
disabled,
|
|
7449
7491
|
readOnly: true
|
|
7450
7492
|
}
|
|
7451
7493
|
) }),
|
|
7452
|
-
/* @__PURE__ */
|
|
7453
|
-
/* @__PURE__ */
|
|
7494
|
+
/* @__PURE__ */ jsx317(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs202("div", { className: "lib-xplat-popup-datepicker-card", children: [
|
|
7495
|
+
/* @__PURE__ */ jsx317("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ jsx317(
|
|
7454
7496
|
SingleDatePicker_default,
|
|
7455
7497
|
{
|
|
7456
7498
|
value: tempDate,
|
|
@@ -7461,8 +7503,8 @@ var InputDatePicker = (props) => {
|
|
|
7461
7503
|
}
|
|
7462
7504
|
) }),
|
|
7463
7505
|
/* @__PURE__ */ jsxs202("div", { className: "popup-datepicker-footer", children: [
|
|
7464
|
-
/* @__PURE__ */
|
|
7465
|
-
/* @__PURE__ */
|
|
7506
|
+
/* @__PURE__ */ jsx317(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
|
|
7507
|
+
/* @__PURE__ */ jsx317(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
7466
7508
|
] })
|
|
7467
7509
|
] }) })
|
|
7468
7510
|
] });
|
|
@@ -7471,20 +7513,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
7471
7513
|
var InputDatePicker_default = InputDatePicker;
|
|
7472
7514
|
|
|
7473
7515
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7474
|
-
import
|
|
7516
|
+
import React17 from "react";
|
|
7475
7517
|
|
|
7476
7518
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7477
|
-
import
|
|
7519
|
+
import React16 from "react";
|
|
7478
7520
|
|
|
7479
7521
|
// src/components/Tab/Tab.tsx
|
|
7480
|
-
import
|
|
7522
|
+
import React15 from "react";
|
|
7481
7523
|
|
|
7482
7524
|
// src/components/Tab/TabItem.tsx
|
|
7483
|
-
import
|
|
7484
|
-
import { jsx as
|
|
7485
|
-
var TabItem =
|
|
7525
|
+
import React14 from "react";
|
|
7526
|
+
import { jsx as jsx318 } from "react/jsx-runtime";
|
|
7527
|
+
var TabItem = React14.forwardRef((props, ref) => {
|
|
7486
7528
|
const { isActive: isActive2, title, onClick } = props;
|
|
7487
|
-
return /* @__PURE__ */
|
|
7529
|
+
return /* @__PURE__ */ jsx318(
|
|
7488
7530
|
"div",
|
|
7489
7531
|
{
|
|
7490
7532
|
ref,
|
|
@@ -7498,25 +7540,25 @@ TabItem.displayName = "TabItem";
|
|
|
7498
7540
|
var TabItem_default = TabItem;
|
|
7499
7541
|
|
|
7500
7542
|
// src/components/Tab/Tab.tsx
|
|
7501
|
-
import { jsx as
|
|
7543
|
+
import { jsx as jsx319, jsxs as jsxs203 } from "react/jsx-runtime";
|
|
7502
7544
|
var Tab = (props) => {
|
|
7503
7545
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
7504
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
7546
|
+
const [underlineStyle, setUnderlineStyle] = React15.useState({
|
|
7505
7547
|
left: 0,
|
|
7506
7548
|
width: 0
|
|
7507
7549
|
});
|
|
7508
|
-
const itemRefs =
|
|
7550
|
+
const itemRefs = React15.useRef([]);
|
|
7509
7551
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
7510
7552
|
onChange(tabItem, tabIdx);
|
|
7511
7553
|
};
|
|
7512
|
-
|
|
7554
|
+
React15.useEffect(() => {
|
|
7513
7555
|
const el = itemRefs.current[activeIndex];
|
|
7514
7556
|
if (el) {
|
|
7515
7557
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
7516
7558
|
}
|
|
7517
7559
|
}, [activeIndex, tabs.length]);
|
|
7518
7560
|
return /* @__PURE__ */ jsxs203("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
|
|
7519
|
-
tabs.map((tab, idx) => /* @__PURE__ */
|
|
7561
|
+
tabs.map((tab, idx) => /* @__PURE__ */ jsx319(
|
|
7520
7562
|
TabItem_default,
|
|
7521
7563
|
{
|
|
7522
7564
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -7528,7 +7570,7 @@ var Tab = (props) => {
|
|
|
7528
7570
|
},
|
|
7529
7571
|
`${tab.value}_${idx}`
|
|
7530
7572
|
)),
|
|
7531
|
-
type === "toggle" && /* @__PURE__ */
|
|
7573
|
+
type === "toggle" && /* @__PURE__ */ jsx319(
|
|
7532
7574
|
"div",
|
|
7533
7575
|
{
|
|
7534
7576
|
className: "tab-toggle-underline",
|
|
@@ -7544,7 +7586,7 @@ Tab.displayName = "Tab";
|
|
|
7544
7586
|
var Tab_default = Tab;
|
|
7545
7587
|
|
|
7546
7588
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7547
|
-
import { jsx as
|
|
7589
|
+
import { jsx as jsx320, jsxs as jsxs204 } from "react/jsx-runtime";
|
|
7548
7590
|
var RangePicker = (props) => {
|
|
7549
7591
|
const {
|
|
7550
7592
|
startDate,
|
|
@@ -7554,7 +7596,7 @@ var RangePicker = (props) => {
|
|
|
7554
7596
|
maxDate,
|
|
7555
7597
|
locale = "ko"
|
|
7556
7598
|
} = props;
|
|
7557
|
-
const [activeTab, setActiveTab] =
|
|
7599
|
+
const [activeTab, setActiveTab] = React16.useState("start");
|
|
7558
7600
|
const handleStartChange = (date) => {
|
|
7559
7601
|
if (!date) return;
|
|
7560
7602
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -7568,7 +7610,7 @@ var RangePicker = (props) => {
|
|
|
7568
7610
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
7569
7611
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
7570
7612
|
return /* @__PURE__ */ jsxs204("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
|
|
7571
|
-
/* @__PURE__ */
|
|
7613
|
+
/* @__PURE__ */ jsx320("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ jsx320(
|
|
7572
7614
|
Tab_default,
|
|
7573
7615
|
{
|
|
7574
7616
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -7582,7 +7624,7 @@ var RangePicker = (props) => {
|
|
|
7582
7624
|
}
|
|
7583
7625
|
) }),
|
|
7584
7626
|
/* @__PURE__ */ jsxs204("div", { className: "datepicker-range-panels", children: [
|
|
7585
|
-
/* @__PURE__ */
|
|
7627
|
+
/* @__PURE__ */ jsx320(
|
|
7586
7628
|
SingleDatePicker_default,
|
|
7587
7629
|
{
|
|
7588
7630
|
value: startDate,
|
|
@@ -7594,7 +7636,7 @@ var RangePicker = (props) => {
|
|
|
7594
7636
|
locale
|
|
7595
7637
|
}
|
|
7596
7638
|
),
|
|
7597
|
-
/* @__PURE__ */
|
|
7639
|
+
/* @__PURE__ */ jsx320(
|
|
7598
7640
|
SingleDatePicker_default,
|
|
7599
7641
|
{
|
|
7600
7642
|
value: endDate,
|
|
@@ -7607,7 +7649,7 @@ var RangePicker = (props) => {
|
|
|
7607
7649
|
}
|
|
7608
7650
|
)
|
|
7609
7651
|
] }),
|
|
7610
|
-
/* @__PURE__ */
|
|
7652
|
+
/* @__PURE__ */ jsx320("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ jsx320(
|
|
7611
7653
|
SingleDatePicker_default,
|
|
7612
7654
|
{
|
|
7613
7655
|
value: startDate,
|
|
@@ -7618,7 +7660,7 @@ var RangePicker = (props) => {
|
|
|
7618
7660
|
rangeEnd: endDate,
|
|
7619
7661
|
locale
|
|
7620
7662
|
}
|
|
7621
|
-
) : /* @__PURE__ */
|
|
7663
|
+
) : /* @__PURE__ */ jsx320(
|
|
7622
7664
|
SingleDatePicker_default,
|
|
7623
7665
|
{
|
|
7624
7666
|
value: endDate,
|
|
@@ -7636,10 +7678,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
7636
7678
|
var RangePicker_default = RangePicker;
|
|
7637
7679
|
|
|
7638
7680
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7639
|
-
import { jsx as
|
|
7681
|
+
import { jsx as jsx321, jsxs as jsxs205 } from "react/jsx-runtime";
|
|
7640
7682
|
var PopupPicker = (props) => {
|
|
7641
7683
|
const { component, type, locale } = props;
|
|
7642
|
-
const [isOpen, setIsOpen] =
|
|
7684
|
+
const [isOpen, setIsOpen] = React17.useState(false);
|
|
7643
7685
|
const handleClick = () => setIsOpen(true);
|
|
7644
7686
|
const handleClose = () => setIsOpen(false);
|
|
7645
7687
|
const handleSingleChange = (date) => {
|
|
@@ -7648,10 +7690,10 @@ var PopupPicker = (props) => {
|
|
|
7648
7690
|
handleClose();
|
|
7649
7691
|
};
|
|
7650
7692
|
return /* @__PURE__ */ jsxs205("div", { className: "lib-xplat-popup-datepicker", children: [
|
|
7651
|
-
|
|
7652
|
-
/* @__PURE__ */
|
|
7693
|
+
React17.cloneElement(component, { onClick: handleClick }),
|
|
7694
|
+
/* @__PURE__ */ jsx321(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs205("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
|
|
7653
7695
|
/* @__PURE__ */ jsxs205("div", { className: "popup-datepicker-content", children: [
|
|
7654
|
-
type === "single" && /* @__PURE__ */
|
|
7696
|
+
type === "single" && /* @__PURE__ */ jsx321(
|
|
7655
7697
|
SingleDatePicker_default,
|
|
7656
7698
|
{
|
|
7657
7699
|
value: props.value,
|
|
@@ -7661,7 +7703,7 @@ var PopupPicker = (props) => {
|
|
|
7661
7703
|
locale
|
|
7662
7704
|
}
|
|
7663
7705
|
),
|
|
7664
|
-
type === "range" && /* @__PURE__ */
|
|
7706
|
+
type === "range" && /* @__PURE__ */ jsx321(
|
|
7665
7707
|
RangePicker_default,
|
|
7666
7708
|
{
|
|
7667
7709
|
startDate: props.startDate,
|
|
@@ -7674,7 +7716,7 @@ var PopupPicker = (props) => {
|
|
|
7674
7716
|
)
|
|
7675
7717
|
] }),
|
|
7676
7718
|
/* @__PURE__ */ jsxs205("div", { className: "popup-datepicker-footer", children: [
|
|
7677
|
-
/* @__PURE__ */
|
|
7719
|
+
/* @__PURE__ */ jsx321(
|
|
7678
7720
|
Button_default,
|
|
7679
7721
|
{
|
|
7680
7722
|
type: "secondary",
|
|
@@ -7682,7 +7724,7 @@ var PopupPicker = (props) => {
|
|
|
7682
7724
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
7683
7725
|
}
|
|
7684
7726
|
),
|
|
7685
|
-
/* @__PURE__ */
|
|
7727
|
+
/* @__PURE__ */ jsx321(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
7686
7728
|
] })
|
|
7687
7729
|
] }) })
|
|
7688
7730
|
] });
|
|
@@ -7691,10 +7733,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
7691
7733
|
var PopupPicker_default = PopupPicker;
|
|
7692
7734
|
|
|
7693
7735
|
// src/components/Divider/Divider.tsx
|
|
7694
|
-
import { jsx as
|
|
7736
|
+
import { jsx as jsx322 } from "react/jsx-runtime";
|
|
7695
7737
|
var Divider = (props) => {
|
|
7696
7738
|
const { orientation = "horizontal" } = props;
|
|
7697
|
-
return /* @__PURE__ */
|
|
7739
|
+
return /* @__PURE__ */ jsx322(
|
|
7698
7740
|
"div",
|
|
7699
7741
|
{
|
|
7700
7742
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -7707,15 +7749,15 @@ Divider.displayName = "Divider";
|
|
|
7707
7749
|
var Divider_default = Divider;
|
|
7708
7750
|
|
|
7709
7751
|
// src/components/Drawer/Drawer.tsx
|
|
7710
|
-
import
|
|
7752
|
+
import React18 from "react";
|
|
7711
7753
|
import { createPortal as createPortal2 } from "react-dom";
|
|
7712
|
-
import { jsx as
|
|
7754
|
+
import { jsx as jsx323, jsxs as jsxs206 } from "react/jsx-runtime";
|
|
7713
7755
|
var ANIMATION_DURATION_MS2 = 250;
|
|
7714
7756
|
var Drawer = (props) => {
|
|
7715
7757
|
const { isOpen, onClose, placement = "right", size = "md", title, children } = props;
|
|
7716
|
-
const [mounted, setMounted] =
|
|
7717
|
-
const [visible, setVisible] =
|
|
7718
|
-
|
|
7758
|
+
const [mounted, setMounted] = React18.useState(false);
|
|
7759
|
+
const [visible, setVisible] = React18.useState(false);
|
|
7760
|
+
React18.useEffect(() => {
|
|
7719
7761
|
if (isOpen) {
|
|
7720
7762
|
setMounted(true);
|
|
7721
7763
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7729,7 +7771,7 @@ var Drawer = (props) => {
|
|
|
7729
7771
|
if (!mounted) return null;
|
|
7730
7772
|
const stateClass = visible ? "enter" : "exit";
|
|
7731
7773
|
return createPortal2(
|
|
7732
|
-
/* @__PURE__ */
|
|
7774
|
+
/* @__PURE__ */ jsx323(
|
|
7733
7775
|
"div",
|
|
7734
7776
|
{
|
|
7735
7777
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
@@ -7743,10 +7785,10 @@ var Drawer = (props) => {
|
|
|
7743
7785
|
onClick: (e) => e.stopPropagation(),
|
|
7744
7786
|
children: [
|
|
7745
7787
|
title && /* @__PURE__ */ jsxs206("div", { className: "drawer-header", children: [
|
|
7746
|
-
/* @__PURE__ */
|
|
7747
|
-
/* @__PURE__ */
|
|
7788
|
+
/* @__PURE__ */ jsx323("span", { className: "drawer-title", children: title }),
|
|
7789
|
+
/* @__PURE__ */ jsx323("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
7748
7790
|
] }),
|
|
7749
|
-
/* @__PURE__ */
|
|
7791
|
+
/* @__PURE__ */ jsx323("div", { className: "drawer-body", children })
|
|
7750
7792
|
]
|
|
7751
7793
|
}
|
|
7752
7794
|
)
|
|
@@ -7759,16 +7801,16 @@ Drawer.displayName = "Drawer";
|
|
|
7759
7801
|
var Drawer_default = Drawer;
|
|
7760
7802
|
|
|
7761
7803
|
// src/components/Dropdown/Dropdown.tsx
|
|
7762
|
-
import
|
|
7804
|
+
import React21 from "react";
|
|
7763
7805
|
|
|
7764
7806
|
// src/tokens/hooks/useAutoPosition.ts
|
|
7765
|
-
import
|
|
7807
|
+
import React19 from "react";
|
|
7766
7808
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
7767
|
-
const [position, setPosition] =
|
|
7809
|
+
const [position, setPosition] = React19.useState({
|
|
7768
7810
|
position: {},
|
|
7769
7811
|
direction: "bottom"
|
|
7770
7812
|
});
|
|
7771
|
-
const calculatePosition =
|
|
7813
|
+
const calculatePosition = React19.useCallback(() => {
|
|
7772
7814
|
if (!triggerRef.current || !popRef.current) return;
|
|
7773
7815
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
7774
7816
|
const popW = popRef.current.offsetWidth;
|
|
@@ -7795,13 +7837,13 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7795
7837
|
direction
|
|
7796
7838
|
});
|
|
7797
7839
|
}, [triggerRef, popRef]);
|
|
7798
|
-
|
|
7840
|
+
React19.useLayoutEffect(() => {
|
|
7799
7841
|
if (!enabled) return;
|
|
7800
7842
|
calculatePosition();
|
|
7801
7843
|
const raf = requestAnimationFrame(calculatePosition);
|
|
7802
7844
|
return () => cancelAnimationFrame(raf);
|
|
7803
7845
|
}, [calculatePosition, enabled]);
|
|
7804
|
-
|
|
7846
|
+
React19.useEffect(() => {
|
|
7805
7847
|
if (!enabled || !popRef.current) return;
|
|
7806
7848
|
const observer = new ResizeObserver(() => {
|
|
7807
7849
|
calculatePosition();
|
|
@@ -7809,7 +7851,7 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7809
7851
|
observer.observe(popRef.current);
|
|
7810
7852
|
return () => observer.disconnect();
|
|
7811
7853
|
}, [calculatePosition, enabled, popRef]);
|
|
7812
|
-
|
|
7854
|
+
React19.useEffect(() => {
|
|
7813
7855
|
if (!enabled) return;
|
|
7814
7856
|
window.addEventListener("resize", calculatePosition);
|
|
7815
7857
|
window.addEventListener("scroll", calculatePosition, true);
|
|
@@ -7823,9 +7865,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7823
7865
|
var useAutoPosition_default = useAutoPosition;
|
|
7824
7866
|
|
|
7825
7867
|
// src/tokens/hooks/useClickOutside.ts
|
|
7826
|
-
import
|
|
7868
|
+
import React20 from "react";
|
|
7827
7869
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
7828
|
-
|
|
7870
|
+
React20.useEffect(() => {
|
|
7829
7871
|
if (!enabled) return;
|
|
7830
7872
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
7831
7873
|
const listener = (event) => {
|
|
@@ -7848,17 +7890,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
7848
7890
|
var useClickOutside_default = useClickOutside;
|
|
7849
7891
|
|
|
7850
7892
|
// src/components/Dropdown/Dropdown.tsx
|
|
7851
|
-
import { jsx as
|
|
7893
|
+
import { jsx as jsx324, jsxs as jsxs207 } from "react/jsx-runtime";
|
|
7852
7894
|
var Dropdown = (props) => {
|
|
7853
7895
|
const { items, children } = props;
|
|
7854
|
-
const [isOpen, setIsOpen] =
|
|
7855
|
-
const [mounted, setMounted] =
|
|
7856
|
-
const [visible, setVisible] =
|
|
7857
|
-
const triggerRef =
|
|
7858
|
-
const menuRef =
|
|
7896
|
+
const [isOpen, setIsOpen] = React21.useState(false);
|
|
7897
|
+
const [mounted, setMounted] = React21.useState(false);
|
|
7898
|
+
const [visible, setVisible] = React21.useState(false);
|
|
7899
|
+
const triggerRef = React21.useRef(null);
|
|
7900
|
+
const menuRef = React21.useRef(null);
|
|
7859
7901
|
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
7860
7902
|
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
7861
|
-
|
|
7903
|
+
React21.useEffect(() => {
|
|
7862
7904
|
if (isOpen) {
|
|
7863
7905
|
setMounted(true);
|
|
7864
7906
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7874,7 +7916,7 @@ var Dropdown = (props) => {
|
|
|
7874
7916
|
setIsOpen(false);
|
|
7875
7917
|
};
|
|
7876
7918
|
return /* @__PURE__ */ jsxs207("div", { className: "lib-xplat-dropdown", children: [
|
|
7877
|
-
/* @__PURE__ */
|
|
7919
|
+
/* @__PURE__ */ jsx324(
|
|
7878
7920
|
"div",
|
|
7879
7921
|
{
|
|
7880
7922
|
ref: triggerRef,
|
|
@@ -7883,14 +7925,14 @@ var Dropdown = (props) => {
|
|
|
7883
7925
|
children
|
|
7884
7926
|
}
|
|
7885
7927
|
),
|
|
7886
|
-
mounted && /* @__PURE__ */
|
|
7928
|
+
mounted && /* @__PURE__ */ jsx324(Portal_default, { children: /* @__PURE__ */ jsx324(
|
|
7887
7929
|
"div",
|
|
7888
7930
|
{
|
|
7889
7931
|
ref: menuRef,
|
|
7890
7932
|
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
7891
7933
|
style: { top: position.top, left: position.left },
|
|
7892
7934
|
role: "menu",
|
|
7893
|
-
children: items.map((item) => /* @__PURE__ */
|
|
7935
|
+
children: items.map((item) => /* @__PURE__ */ jsx324(
|
|
7894
7936
|
"button",
|
|
7895
7937
|
{
|
|
7896
7938
|
className: clsx_default("dropdown-item", {
|
|
@@ -7912,8 +7954,8 @@ Dropdown.displayName = "Dropdown";
|
|
|
7912
7954
|
var Dropdown_default = Dropdown;
|
|
7913
7955
|
|
|
7914
7956
|
// src/components/Editor/Editor.tsx
|
|
7915
|
-
import
|
|
7916
|
-
import { jsx as
|
|
7957
|
+
import React22 from "react";
|
|
7958
|
+
import { jsx as jsx325, jsxs as jsxs208 } from "react/jsx-runtime";
|
|
7917
7959
|
var DEFAULT_TOOLBAR = [
|
|
7918
7960
|
"bold",
|
|
7919
7961
|
"italic",
|
|
@@ -8020,21 +8062,21 @@ var Editor = (props) => {
|
|
|
8020
8062
|
onImageUpload,
|
|
8021
8063
|
minHeight = 200
|
|
8022
8064
|
} = props;
|
|
8023
|
-
const editorRef =
|
|
8024
|
-
const lastRangeRef =
|
|
8025
|
-
const composingRef =
|
|
8026
|
-
const [isFocused, setIsFocused] =
|
|
8027
|
-
const [isEmpty, setIsEmpty] =
|
|
8028
|
-
const [activeFormats, setActiveFormats] =
|
|
8029
|
-
const [slashOpen, setSlashOpen] =
|
|
8030
|
-
const [slashFilter, setSlashFilter] =
|
|
8031
|
-
const [slashIdx, setSlashIdx] =
|
|
8032
|
-
const [slashPos, setSlashPos] =
|
|
8033
|
-
const slashStartRangeRef =
|
|
8034
|
-
const [linkOpen, setLinkOpen] =
|
|
8035
|
-
const [linkValue, setLinkValue] =
|
|
8036
|
-
const [linkPos, setLinkPos] =
|
|
8037
|
-
|
|
8065
|
+
const editorRef = React22.useRef(null);
|
|
8066
|
+
const lastRangeRef = React22.useRef(null);
|
|
8067
|
+
const composingRef = React22.useRef(false);
|
|
8068
|
+
const [isFocused, setIsFocused] = React22.useState(false);
|
|
8069
|
+
const [isEmpty, setIsEmpty] = React22.useState(!value);
|
|
8070
|
+
const [activeFormats, setActiveFormats] = React22.useState(/* @__PURE__ */ new Set());
|
|
8071
|
+
const [slashOpen, setSlashOpen] = React22.useState(false);
|
|
8072
|
+
const [slashFilter, setSlashFilter] = React22.useState("");
|
|
8073
|
+
const [slashIdx, setSlashIdx] = React22.useState(0);
|
|
8074
|
+
const [slashPos, setSlashPos] = React22.useState({ top: 0, left: 0 });
|
|
8075
|
+
const slashStartRangeRef = React22.useRef(null);
|
|
8076
|
+
const [linkOpen, setLinkOpen] = React22.useState(false);
|
|
8077
|
+
const [linkValue, setLinkValue] = React22.useState("");
|
|
8078
|
+
const [linkPos, setLinkPos] = React22.useState({ top: 0, left: 0 });
|
|
8079
|
+
React22.useEffect(() => {
|
|
8038
8080
|
if (!editorRef.current) return;
|
|
8039
8081
|
if (editorRef.current.innerHTML !== value) {
|
|
8040
8082
|
editorRef.current.innerHTML = sanitizeHtml(value || "");
|
|
@@ -8148,7 +8190,7 @@ var Editor = (props) => {
|
|
|
8148
8190
|
setSlashIdx(0);
|
|
8149
8191
|
slashStartRangeRef.current = null;
|
|
8150
8192
|
};
|
|
8151
|
-
const filteredSlashItems =
|
|
8193
|
+
const filteredSlashItems = React22.useMemo(() => {
|
|
8152
8194
|
if (!slashFilter) return SLASH_ITEMS;
|
|
8153
8195
|
const f = slashFilter.toLowerCase();
|
|
8154
8196
|
return SLASH_ITEMS.filter((it) => it.label.toLowerCase().includes(f) || it.key.includes(f));
|
|
@@ -8434,7 +8476,7 @@ var Editor = (props) => {
|
|
|
8434
8476
|
}
|
|
8435
8477
|
};
|
|
8436
8478
|
return /* @__PURE__ */ jsxs208("div", { className: clsx_default("lib-xplat-editor", isFocused && "focused", readOnly && "readonly"), children: [
|
|
8437
|
-
!readOnly && /* @__PURE__ */
|
|
8479
|
+
!readOnly && /* @__PURE__ */ jsx325(
|
|
8438
8480
|
EditorToolbar,
|
|
8439
8481
|
{
|
|
8440
8482
|
items: toolbar,
|
|
@@ -8443,8 +8485,8 @@ var Editor = (props) => {
|
|
|
8443
8485
|
}
|
|
8444
8486
|
),
|
|
8445
8487
|
/* @__PURE__ */ jsxs208("div", { className: "lib-xplat-editor__content", style: { minHeight }, children: [
|
|
8446
|
-
isEmpty && !isFocused && /* @__PURE__ */
|
|
8447
|
-
/* @__PURE__ */
|
|
8488
|
+
isEmpty && !isFocused && /* @__PURE__ */ jsx325("div", { className: "lib-xplat-editor__placeholder", children: placeholder }),
|
|
8489
|
+
/* @__PURE__ */ jsx325(
|
|
8448
8490
|
"div",
|
|
8449
8491
|
{
|
|
8450
8492
|
ref: editorRef,
|
|
@@ -8463,7 +8505,7 @@ var Editor = (props) => {
|
|
|
8463
8505
|
spellCheck: true
|
|
8464
8506
|
}
|
|
8465
8507
|
),
|
|
8466
|
-
slashOpen && filteredSlashItems.length > 0 && /* @__PURE__ */
|
|
8508
|
+
slashOpen && filteredSlashItems.length > 0 && /* @__PURE__ */ jsx325(
|
|
8467
8509
|
SlashMenu,
|
|
8468
8510
|
{
|
|
8469
8511
|
position: slashPos,
|
|
@@ -8473,7 +8515,7 @@ var Editor = (props) => {
|
|
|
8473
8515
|
onClose: closeSlashMenu
|
|
8474
8516
|
}
|
|
8475
8517
|
),
|
|
8476
|
-
linkOpen && /* @__PURE__ */
|
|
8518
|
+
linkOpen && /* @__PURE__ */ jsx325(
|
|
8477
8519
|
LinkPopover,
|
|
8478
8520
|
{
|
|
8479
8521
|
position: linkPos,
|
|
@@ -8525,7 +8567,7 @@ var isActive = (item, active) => {
|
|
|
8525
8567
|
return active.has(item);
|
|
8526
8568
|
};
|
|
8527
8569
|
var EditorToolbar = ({ items, active, onAction }) => {
|
|
8528
|
-
return /* @__PURE__ */
|
|
8570
|
+
return /* @__PURE__ */ jsx325("div", { className: "lib-xplat-editor__toolbar", children: items.map((item) => /* @__PURE__ */ jsx325(
|
|
8529
8571
|
"button",
|
|
8530
8572
|
{
|
|
8531
8573
|
type: "button",
|
|
@@ -8541,7 +8583,7 @@ var EditorToolbar = ({ items, active, onAction }) => {
|
|
|
8541
8583
|
)) });
|
|
8542
8584
|
};
|
|
8543
8585
|
var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
8544
|
-
|
|
8586
|
+
React22.useEffect(() => {
|
|
8545
8587
|
const handleClickOutside = (e) => {
|
|
8546
8588
|
const target = e.target;
|
|
8547
8589
|
const menu = document.querySelector(".lib-xplat-editor__slash-menu");
|
|
@@ -8550,7 +8592,7 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
8550
8592
|
window.addEventListener("mousedown", handleClickOutside);
|
|
8551
8593
|
return () => window.removeEventListener("mousedown", handleClickOutside);
|
|
8552
8594
|
}, [onClose]);
|
|
8553
|
-
return /* @__PURE__ */
|
|
8595
|
+
return /* @__PURE__ */ jsx325(
|
|
8554
8596
|
"div",
|
|
8555
8597
|
{
|
|
8556
8598
|
className: "lib-xplat-editor__slash-menu",
|
|
@@ -8565,8 +8607,8 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
8565
8607
|
onSelect(item);
|
|
8566
8608
|
},
|
|
8567
8609
|
children: [
|
|
8568
|
-
/* @__PURE__ */
|
|
8569
|
-
item.hint && /* @__PURE__ */
|
|
8610
|
+
/* @__PURE__ */ jsx325("span", { className: "label", children: item.label }),
|
|
8611
|
+
item.hint && /* @__PURE__ */ jsx325("span", { className: "hint", children: item.hint })
|
|
8570
8612
|
]
|
|
8571
8613
|
},
|
|
8572
8614
|
item.key
|
|
@@ -8575,8 +8617,8 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
|
|
|
8575
8617
|
);
|
|
8576
8618
|
};
|
|
8577
8619
|
var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
8578
|
-
const inputRef =
|
|
8579
|
-
|
|
8620
|
+
const inputRef = React22.useRef(null);
|
|
8621
|
+
React22.useEffect(() => {
|
|
8580
8622
|
inputRef.current?.focus();
|
|
8581
8623
|
}, []);
|
|
8582
8624
|
return /* @__PURE__ */ jsxs208(
|
|
@@ -8585,7 +8627,7 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
8585
8627
|
className: "lib-xplat-editor__link-popover",
|
|
8586
8628
|
style: { top: position.top, left: position.left },
|
|
8587
8629
|
children: [
|
|
8588
|
-
/* @__PURE__ */
|
|
8630
|
+
/* @__PURE__ */ jsx325(
|
|
8589
8631
|
"input",
|
|
8590
8632
|
{
|
|
8591
8633
|
ref: inputRef,
|
|
@@ -8605,11 +8647,11 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
8605
8647
|
}
|
|
8606
8648
|
}
|
|
8607
8649
|
),
|
|
8608
|
-
/* @__PURE__ */
|
|
8650
|
+
/* @__PURE__ */ jsx325("button", { type: "button", onMouseDown: (e) => {
|
|
8609
8651
|
e.preventDefault();
|
|
8610
8652
|
onConfirm();
|
|
8611
8653
|
}, children: "\uC801\uC6A9" }),
|
|
8612
|
-
/* @__PURE__ */
|
|
8654
|
+
/* @__PURE__ */ jsx325("button", { type: "button", onMouseDown: (e) => {
|
|
8613
8655
|
e.preventDefault();
|
|
8614
8656
|
onClose();
|
|
8615
8657
|
}, children: "\uCDE8\uC18C" })
|
|
@@ -8619,23 +8661,23 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
|
|
|
8619
8661
|
};
|
|
8620
8662
|
|
|
8621
8663
|
// src/components/EmptyState/EmptyState.tsx
|
|
8622
|
-
import { jsx as
|
|
8664
|
+
import { jsx as jsx326, jsxs as jsxs209 } from "react/jsx-runtime";
|
|
8623
8665
|
var EmptyState = (props) => {
|
|
8624
8666
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
8625
8667
|
return /* @__PURE__ */ jsxs209("div", { className: "lib-xplat-empty-state", children: [
|
|
8626
|
-
icon && /* @__PURE__ */
|
|
8627
|
-
!icon && /* @__PURE__ */
|
|
8628
|
-
/* @__PURE__ */
|
|
8629
|
-
description && /* @__PURE__ */
|
|
8630
|
-
action && /* @__PURE__ */
|
|
8668
|
+
icon && /* @__PURE__ */ jsx326("div", { className: "empty-icon", children: icon }),
|
|
8669
|
+
!icon && /* @__PURE__ */ jsx326("div", { className: "empty-icon", children: /* @__PURE__ */ jsx326("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx326("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" }) }) }),
|
|
8670
|
+
/* @__PURE__ */ jsx326("p", { className: "empty-title", children: title }),
|
|
8671
|
+
description && /* @__PURE__ */ jsx326("p", { className: "empty-description", children: description }),
|
|
8672
|
+
action && /* @__PURE__ */ jsx326("div", { className: "empty-action", children: action })
|
|
8631
8673
|
] });
|
|
8632
8674
|
};
|
|
8633
8675
|
EmptyState.displayName = "EmptyState";
|
|
8634
8676
|
var EmptyState_default = EmptyState;
|
|
8635
8677
|
|
|
8636
8678
|
// src/components/FileUpload/FileUpload.tsx
|
|
8637
|
-
import
|
|
8638
|
-
import { jsx as
|
|
8679
|
+
import React23 from "react";
|
|
8680
|
+
import { jsx as jsx327, jsxs as jsxs210 } from "react/jsx-runtime";
|
|
8639
8681
|
var FileUpload = (props) => {
|
|
8640
8682
|
const {
|
|
8641
8683
|
accept,
|
|
@@ -8645,8 +8687,8 @@ var FileUpload = (props) => {
|
|
|
8645
8687
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
8646
8688
|
description
|
|
8647
8689
|
} = props;
|
|
8648
|
-
const [isDragOver, setIsDragOver] =
|
|
8649
|
-
const inputRef =
|
|
8690
|
+
const [isDragOver, setIsDragOver] = React23.useState(false);
|
|
8691
|
+
const inputRef = React23.useRef(null);
|
|
8650
8692
|
const handleFiles = (fileList) => {
|
|
8651
8693
|
let files = Array.from(fileList);
|
|
8652
8694
|
if (maxSize) {
|
|
@@ -8685,7 +8727,7 @@ var FileUpload = (props) => {
|
|
|
8685
8727
|
onDragLeave: handleDragLeave,
|
|
8686
8728
|
onClick: () => inputRef.current?.click(),
|
|
8687
8729
|
children: [
|
|
8688
|
-
/* @__PURE__ */
|
|
8730
|
+
/* @__PURE__ */ jsx327(
|
|
8689
8731
|
"input",
|
|
8690
8732
|
{
|
|
8691
8733
|
ref: inputRef,
|
|
@@ -8695,9 +8737,9 @@ var FileUpload = (props) => {
|
|
|
8695
8737
|
onChange: handleChange
|
|
8696
8738
|
}
|
|
8697
8739
|
),
|
|
8698
|
-
/* @__PURE__ */
|
|
8699
|
-
/* @__PURE__ */
|
|
8700
|
-
description && /* @__PURE__ */
|
|
8740
|
+
/* @__PURE__ */ jsx327("div", { className: "upload-icon", children: /* @__PURE__ */ jsx327(UploadIcon_default, {}) }),
|
|
8741
|
+
/* @__PURE__ */ jsx327("p", { className: "upload-label", children: label }),
|
|
8742
|
+
description && /* @__PURE__ */ jsx327("p", { className: "upload-description", children: description })
|
|
8701
8743
|
]
|
|
8702
8744
|
}
|
|
8703
8745
|
);
|
|
@@ -8706,10 +8748,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
8706
8748
|
var FileUpload_default = FileUpload;
|
|
8707
8749
|
|
|
8708
8750
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
8709
|
-
import
|
|
8751
|
+
import React25 from "react";
|
|
8710
8752
|
|
|
8711
8753
|
// src/components/HtmlTypeWriter/utils.ts
|
|
8712
|
-
import
|
|
8754
|
+
import React24 from "react";
|
|
8713
8755
|
var voidTags = /* @__PURE__ */ new Set([
|
|
8714
8756
|
"br",
|
|
8715
8757
|
"img",
|
|
@@ -8777,41 +8819,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
8777
8819
|
props[attr.name] = attr.value;
|
|
8778
8820
|
});
|
|
8779
8821
|
if (voidTags.has(tag)) {
|
|
8780
|
-
return
|
|
8822
|
+
return React24.createElement(tag, props);
|
|
8781
8823
|
}
|
|
8782
8824
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
8783
|
-
return
|
|
8825
|
+
return React24.createElement(tag, props, ...children);
|
|
8784
8826
|
};
|
|
8785
8827
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
8786
8828
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
8787
8829
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
8788
|
-
return node == null ? null :
|
|
8830
|
+
return node == null ? null : React24.createElement(React24.Fragment, { key: idx }, node);
|
|
8789
8831
|
}).filter(Boolean);
|
|
8790
8832
|
return nodes.length === 0 ? null : nodes;
|
|
8791
8833
|
};
|
|
8792
8834
|
|
|
8793
8835
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
8794
|
-
import { jsx as
|
|
8836
|
+
import { jsx as jsx328 } from "react/jsx-runtime";
|
|
8795
8837
|
var HtmlTypeWriter = ({
|
|
8796
8838
|
html,
|
|
8797
8839
|
duration = 20,
|
|
8798
8840
|
onDone,
|
|
8799
8841
|
onChange
|
|
8800
8842
|
}) => {
|
|
8801
|
-
const [typedLen, setTypedLen] =
|
|
8802
|
-
const doneCalledRef =
|
|
8803
|
-
const { doc, rangeMap, totalLength } =
|
|
8843
|
+
const [typedLen, setTypedLen] = React25.useState(0);
|
|
8844
|
+
const doneCalledRef = React25.useRef(false);
|
|
8845
|
+
const { doc, rangeMap, totalLength } = React25.useMemo(() => {
|
|
8804
8846
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
8805
8847
|
const decoded = decodeHtmlEntities(html);
|
|
8806
8848
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
8807
8849
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
8808
8850
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
8809
8851
|
}, [html]);
|
|
8810
|
-
|
|
8852
|
+
React25.useEffect(() => {
|
|
8811
8853
|
setTypedLen(0);
|
|
8812
8854
|
doneCalledRef.current = false;
|
|
8813
8855
|
}, [html]);
|
|
8814
|
-
|
|
8856
|
+
React25.useEffect(() => {
|
|
8815
8857
|
if (!totalLength) return;
|
|
8816
8858
|
if (typedLen >= totalLength) return;
|
|
8817
8859
|
const timer = window.setInterval(() => {
|
|
@@ -8819,33 +8861,33 @@ var HtmlTypeWriter = ({
|
|
|
8819
8861
|
}, duration);
|
|
8820
8862
|
return () => window.clearInterval(timer);
|
|
8821
8863
|
}, [typedLen, totalLength, duration]);
|
|
8822
|
-
|
|
8864
|
+
React25.useEffect(() => {
|
|
8823
8865
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
8824
8866
|
onChange?.();
|
|
8825
8867
|
}
|
|
8826
8868
|
}, [typedLen, totalLength, onChange]);
|
|
8827
|
-
|
|
8869
|
+
React25.useEffect(() => {
|
|
8828
8870
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
8829
8871
|
doneCalledRef.current = true;
|
|
8830
8872
|
onDone?.();
|
|
8831
8873
|
}
|
|
8832
8874
|
}, [typedLen, totalLength, onDone]);
|
|
8833
|
-
const parsed =
|
|
8875
|
+
const parsed = React25.useMemo(
|
|
8834
8876
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
8835
8877
|
[doc, typedLen, rangeMap]
|
|
8836
8878
|
);
|
|
8837
|
-
return /* @__PURE__ */
|
|
8879
|
+
return /* @__PURE__ */ jsx328("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
8838
8880
|
};
|
|
8839
8881
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
8840
8882
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
8841
8883
|
|
|
8842
8884
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
8843
|
-
import
|
|
8844
|
-
import { jsx as
|
|
8885
|
+
import React26 from "react";
|
|
8886
|
+
import { jsx as jsx329, jsxs as jsxs211 } from "react/jsx-runtime";
|
|
8845
8887
|
var ImageSelector = (props) => {
|
|
8846
8888
|
const { value, label, onChange } = props;
|
|
8847
|
-
const [previewUrl, setPreviewUrl] =
|
|
8848
|
-
|
|
8889
|
+
const [previewUrl, setPreviewUrl] = React26.useState();
|
|
8890
|
+
React26.useEffect(() => {
|
|
8849
8891
|
if (!value) {
|
|
8850
8892
|
setPreviewUrl(void 0);
|
|
8851
8893
|
return;
|
|
@@ -8854,7 +8896,7 @@ var ImageSelector = (props) => {
|
|
|
8854
8896
|
setPreviewUrl(url);
|
|
8855
8897
|
return () => URL.revokeObjectURL(url);
|
|
8856
8898
|
}, [value]);
|
|
8857
|
-
const inputRef =
|
|
8899
|
+
const inputRef = React26.useRef(null);
|
|
8858
8900
|
const handleFileChange = (e) => {
|
|
8859
8901
|
const selectedFile = e.target.files?.[0];
|
|
8860
8902
|
if (selectedFile) {
|
|
@@ -8868,7 +8910,7 @@ var ImageSelector = (props) => {
|
|
|
8868
8910
|
inputRef.current?.click();
|
|
8869
8911
|
};
|
|
8870
8912
|
return /* @__PURE__ */ jsxs211("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
8871
|
-
/* @__PURE__ */
|
|
8913
|
+
/* @__PURE__ */ jsx329(
|
|
8872
8914
|
"input",
|
|
8873
8915
|
{
|
|
8874
8916
|
type: "file",
|
|
@@ -8879,12 +8921,12 @@ var ImageSelector = (props) => {
|
|
|
8879
8921
|
}
|
|
8880
8922
|
),
|
|
8881
8923
|
value && /* @__PURE__ */ jsxs211("div", { className: "action-bar", children: [
|
|
8882
|
-
/* @__PURE__ */
|
|
8883
|
-
/* @__PURE__ */
|
|
8924
|
+
/* @__PURE__ */ jsx329("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ jsx329(UploadIcon_default, {}) }),
|
|
8925
|
+
/* @__PURE__ */ jsx329("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ jsx329(DeleteIcon_default, {}) })
|
|
8884
8926
|
] }),
|
|
8885
|
-
/* @__PURE__ */
|
|
8886
|
-
/* @__PURE__ */
|
|
8887
|
-
/* @__PURE__ */
|
|
8927
|
+
/* @__PURE__ */ jsx329("div", { className: "content", children: previewUrl ? /* @__PURE__ */ jsx329("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ jsxs211("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
|
|
8928
|
+
/* @__PURE__ */ jsx329("div", { className: "icon-wrapper", children: /* @__PURE__ */ jsx329(ImageIcon_default, {}) }),
|
|
8929
|
+
/* @__PURE__ */ jsx329("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
8888
8930
|
] }) })
|
|
8889
8931
|
] });
|
|
8890
8932
|
};
|
|
@@ -8892,7 +8934,7 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
8892
8934
|
var ImageSelector_default = ImageSelector;
|
|
8893
8935
|
|
|
8894
8936
|
// src/components/Pagination/Pagination.tsx
|
|
8895
|
-
import { jsx as
|
|
8937
|
+
import { jsx as jsx330, jsxs as jsxs212 } from "react/jsx-runtime";
|
|
8896
8938
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
8897
8939
|
const totalNumbers = siblingCount * 2 + 5;
|
|
8898
8940
|
if (totalPages <= totalNumbers) {
|
|
@@ -8936,18 +8978,18 @@ var Pagination = (props) => {
|
|
|
8936
8978
|
}
|
|
8937
8979
|
};
|
|
8938
8980
|
return /* @__PURE__ */ jsxs212("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
8939
|
-
/* @__PURE__ */
|
|
8981
|
+
/* @__PURE__ */ jsx330(
|
|
8940
8982
|
"button",
|
|
8941
8983
|
{
|
|
8942
8984
|
className: "page-btn prev",
|
|
8943
8985
|
disabled: current <= 1,
|
|
8944
8986
|
onClick: () => handleClick(current - 1),
|
|
8945
8987
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
8946
|
-
children: /* @__PURE__ */
|
|
8988
|
+
children: /* @__PURE__ */ jsx330(ChevronLeftIcon_default, {})
|
|
8947
8989
|
}
|
|
8948
8990
|
),
|
|
8949
8991
|
pages.map(
|
|
8950
|
-
(page, i) => page === "..." ? /* @__PURE__ */
|
|
8992
|
+
(page, i) => page === "..." ? /* @__PURE__ */ jsx330("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ jsx330(
|
|
8951
8993
|
"button",
|
|
8952
8994
|
{
|
|
8953
8995
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -8958,14 +9000,14 @@ var Pagination = (props) => {
|
|
|
8958
9000
|
page
|
|
8959
9001
|
)
|
|
8960
9002
|
),
|
|
8961
|
-
/* @__PURE__ */
|
|
9003
|
+
/* @__PURE__ */ jsx330(
|
|
8962
9004
|
"button",
|
|
8963
9005
|
{
|
|
8964
9006
|
className: "page-btn next",
|
|
8965
9007
|
disabled: current >= totalPages,
|
|
8966
9008
|
onClick: () => handleClick(current + 1),
|
|
8967
9009
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
8968
|
-
children: /* @__PURE__ */
|
|
9010
|
+
children: /* @__PURE__ */ jsx330(ChevronRightIcon_default, {})
|
|
8969
9011
|
}
|
|
8970
9012
|
)
|
|
8971
9013
|
] });
|
|
@@ -8974,17 +9016,17 @@ Pagination.displayName = "Pagination";
|
|
|
8974
9016
|
var Pagination_default = Pagination;
|
|
8975
9017
|
|
|
8976
9018
|
// src/components/PopOver/PopOver.tsx
|
|
8977
|
-
import
|
|
8978
|
-
import { jsx as
|
|
9019
|
+
import React27 from "react";
|
|
9020
|
+
import { jsx as jsx331, jsxs as jsxs213 } from "react/jsx-runtime";
|
|
8979
9021
|
var PopOver = (props) => {
|
|
8980
9022
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
8981
|
-
const popRef =
|
|
8982
|
-
const triggerRef =
|
|
8983
|
-
const [localOpen, setLocalOpen] =
|
|
8984
|
-
const [eventTrigger, setEventTrigger] =
|
|
9023
|
+
const popRef = React27.useRef(null);
|
|
9024
|
+
const triggerRef = React27.useRef(null);
|
|
9025
|
+
const [localOpen, setLocalOpen] = React27.useState(false);
|
|
9026
|
+
const [eventTrigger, setEventTrigger] = React27.useState(false);
|
|
8985
9027
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
8986
9028
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
8987
|
-
|
|
9029
|
+
React27.useEffect(() => {
|
|
8988
9030
|
if (isOpen) {
|
|
8989
9031
|
setLocalOpen(isOpen);
|
|
8990
9032
|
setTimeout(() => {
|
|
@@ -9007,7 +9049,7 @@ var PopOver = (props) => {
|
|
|
9007
9049
|
},
|
|
9008
9050
|
children: [
|
|
9009
9051
|
children,
|
|
9010
|
-
localOpen && /* @__PURE__ */
|
|
9052
|
+
localOpen && /* @__PURE__ */ jsx331(Portal_default, { children: /* @__PURE__ */ jsx331(
|
|
9011
9053
|
"div",
|
|
9012
9054
|
{
|
|
9013
9055
|
className: clsx_default(
|
|
@@ -9030,7 +9072,7 @@ PopOver.displayName = "PopOver";
|
|
|
9030
9072
|
var PopOver_default = PopOver;
|
|
9031
9073
|
|
|
9032
9074
|
// src/components/Progress/Progress.tsx
|
|
9033
|
-
import { jsx as
|
|
9075
|
+
import { jsx as jsx332, jsxs as jsxs214 } from "react/jsx-runtime";
|
|
9034
9076
|
var Progress = (props) => {
|
|
9035
9077
|
const {
|
|
9036
9078
|
value,
|
|
@@ -9041,7 +9083,7 @@ var Progress = (props) => {
|
|
|
9041
9083
|
} = props;
|
|
9042
9084
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
9043
9085
|
return /* @__PURE__ */ jsxs214("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
9044
|
-
/* @__PURE__ */
|
|
9086
|
+
/* @__PURE__ */ jsx332(
|
|
9045
9087
|
"div",
|
|
9046
9088
|
{
|
|
9047
9089
|
className: "track",
|
|
@@ -9049,7 +9091,7 @@ var Progress = (props) => {
|
|
|
9049
9091
|
"aria-valuenow": value,
|
|
9050
9092
|
"aria-valuemin": 0,
|
|
9051
9093
|
"aria-valuemax": max,
|
|
9052
|
-
children: /* @__PURE__ */
|
|
9094
|
+
children: /* @__PURE__ */ jsx332(
|
|
9053
9095
|
"div",
|
|
9054
9096
|
{
|
|
9055
9097
|
className: "bar",
|
|
@@ -9068,17 +9110,17 @@ Progress.displayName = "Progress";
|
|
|
9068
9110
|
var Progress_default = Progress;
|
|
9069
9111
|
|
|
9070
9112
|
// src/components/Radio/RadioGroupContext.tsx
|
|
9071
|
-
import
|
|
9072
|
-
var RadioGroupContext =
|
|
9113
|
+
import React28 from "react";
|
|
9114
|
+
var RadioGroupContext = React28.createContext(
|
|
9073
9115
|
null
|
|
9074
9116
|
);
|
|
9075
9117
|
var useRadioGroupContext = () => {
|
|
9076
|
-
return
|
|
9118
|
+
return React28.useContext(RadioGroupContext);
|
|
9077
9119
|
};
|
|
9078
9120
|
var RadioGroupContext_default = RadioGroupContext;
|
|
9079
9121
|
|
|
9080
9122
|
// src/components/Radio/Radio.tsx
|
|
9081
|
-
import { jsx as
|
|
9123
|
+
import { jsx as jsx333, jsxs as jsxs215 } from "react/jsx-runtime";
|
|
9082
9124
|
var Radio = (props) => {
|
|
9083
9125
|
const {
|
|
9084
9126
|
label,
|
|
@@ -9108,18 +9150,18 @@ var Radio = (props) => {
|
|
|
9108
9150
|
className
|
|
9109
9151
|
),
|
|
9110
9152
|
children: [
|
|
9111
|
-
/* @__PURE__ */
|
|
9112
|
-
/* @__PURE__ */
|
|
9153
|
+
/* @__PURE__ */ jsx333("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
9154
|
+
/* @__PURE__ */ jsx333(
|
|
9113
9155
|
"div",
|
|
9114
9156
|
{
|
|
9115
9157
|
className: clsx_default(
|
|
9116
9158
|
"circle",
|
|
9117
9159
|
localChecked ? "checked" : void 0
|
|
9118
9160
|
),
|
|
9119
|
-
children: localChecked && /* @__PURE__ */
|
|
9161
|
+
children: localChecked && /* @__PURE__ */ jsx333("div", { className: "inner-circle" })
|
|
9120
9162
|
}
|
|
9121
9163
|
),
|
|
9122
|
-
label && /* @__PURE__ */
|
|
9164
|
+
label && /* @__PURE__ */ jsx333("span", { children: label })
|
|
9123
9165
|
]
|
|
9124
9166
|
}
|
|
9125
9167
|
);
|
|
@@ -9128,28 +9170,28 @@ Radio.displayName = "Radio";
|
|
|
9128
9170
|
var Radio_default = Radio;
|
|
9129
9171
|
|
|
9130
9172
|
// src/components/Radio/RadioGroup.tsx
|
|
9131
|
-
import { Fragment as Fragment4, jsx as
|
|
9173
|
+
import { Fragment as Fragment4, jsx as jsx334 } from "react/jsx-runtime";
|
|
9132
9174
|
var RadioGroup = (props) => {
|
|
9133
9175
|
const { children, ...rest } = props;
|
|
9134
|
-
return /* @__PURE__ */
|
|
9176
|
+
return /* @__PURE__ */ jsx334(Fragment4, { children: /* @__PURE__ */ jsx334(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
9135
9177
|
};
|
|
9136
9178
|
RadioGroup.displayName = "RadioGroup";
|
|
9137
9179
|
var RadioGroup_default = RadioGroup;
|
|
9138
9180
|
|
|
9139
9181
|
// src/components/Select/Select.tsx
|
|
9140
|
-
import
|
|
9182
|
+
import React31 from "react";
|
|
9141
9183
|
|
|
9142
9184
|
// src/components/Select/context.ts
|
|
9143
|
-
import
|
|
9144
|
-
var SelectContext =
|
|
9185
|
+
import React29 from "react";
|
|
9186
|
+
var SelectContext = React29.createContext(null);
|
|
9145
9187
|
var context_default = SelectContext;
|
|
9146
9188
|
|
|
9147
9189
|
// src/components/Select/SelectItem.tsx
|
|
9148
|
-
import
|
|
9149
|
-
import { jsx as
|
|
9190
|
+
import React30 from "react";
|
|
9191
|
+
import { jsx as jsx335 } from "react/jsx-runtime";
|
|
9150
9192
|
var SelectItem = (props) => {
|
|
9151
9193
|
const { children, value, onClick, disabled = false } = props;
|
|
9152
|
-
const ctx =
|
|
9194
|
+
const ctx = React30.useContext(context_default);
|
|
9153
9195
|
const handleClick = (e) => {
|
|
9154
9196
|
e.preventDefault();
|
|
9155
9197
|
e.stopPropagation();
|
|
@@ -9159,7 +9201,7 @@ var SelectItem = (props) => {
|
|
|
9159
9201
|
onClick?.();
|
|
9160
9202
|
};
|
|
9161
9203
|
const isSelected = value !== void 0 ? ctx?.selectedValue === value : ctx?.selectedLabel === children;
|
|
9162
|
-
return /* @__PURE__ */
|
|
9204
|
+
return /* @__PURE__ */ jsx335(
|
|
9163
9205
|
"div",
|
|
9164
9206
|
{
|
|
9165
9207
|
className: clsx_default("select-item", disabled && "disabled", isSelected && "is-selected"),
|
|
@@ -9180,7 +9222,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
9180
9222
|
var SelectItem_default = SelectItem;
|
|
9181
9223
|
|
|
9182
9224
|
// src/components/Select/Select.tsx
|
|
9183
|
-
import { jsx as
|
|
9225
|
+
import { jsx as jsx336, jsxs as jsxs216 } from "react/jsx-runtime";
|
|
9184
9226
|
var ANIMATION_DURATION_MS3 = 200;
|
|
9185
9227
|
var SelectRoot = (props) => {
|
|
9186
9228
|
const {
|
|
@@ -9192,28 +9234,28 @@ var SelectRoot = (props) => {
|
|
|
9192
9234
|
error = false,
|
|
9193
9235
|
size = "md"
|
|
9194
9236
|
} = props;
|
|
9195
|
-
const itemChildren =
|
|
9196
|
-
(child) =>
|
|
9237
|
+
const itemChildren = React31.Children.toArray(children).filter(
|
|
9238
|
+
(child) => React31.isValidElement(child) && child.type === SelectItem_default
|
|
9197
9239
|
);
|
|
9198
9240
|
const isControlled = valueProp !== void 0;
|
|
9199
|
-
const [isOpen, setOpen] =
|
|
9200
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
9201
|
-
const [uncontrolledValue, setUncontrolledValue] =
|
|
9202
|
-
const controlledLabel =
|
|
9241
|
+
const [isOpen, setOpen] = React31.useState(false);
|
|
9242
|
+
const [uncontrolledLabel, setUncontrolledLabel] = React31.useState(null);
|
|
9243
|
+
const [uncontrolledValue, setUncontrolledValue] = React31.useState(void 0);
|
|
9244
|
+
const controlledLabel = React31.useMemo(() => {
|
|
9203
9245
|
if (!isControlled) return null;
|
|
9204
9246
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
9205
9247
|
return match ? match.props.children : null;
|
|
9206
9248
|
}, [isControlled, valueProp, itemChildren]);
|
|
9207
9249
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
9208
9250
|
const selectedValue = isControlled ? valueProp : uncontrolledValue;
|
|
9209
|
-
const triggerRef =
|
|
9210
|
-
const contentRef =
|
|
9211
|
-
const [mounted, setMounted] =
|
|
9212
|
-
const [visible, setVisible] =
|
|
9213
|
-
|
|
9251
|
+
const triggerRef = React31.useRef(null);
|
|
9252
|
+
const contentRef = React31.useRef(null);
|
|
9253
|
+
const [mounted, setMounted] = React31.useState(false);
|
|
9254
|
+
const [visible, setVisible] = React31.useState(false);
|
|
9255
|
+
React31.useEffect(() => {
|
|
9214
9256
|
if (disabled && isOpen) setOpen(false);
|
|
9215
9257
|
}, [disabled, isOpen]);
|
|
9216
|
-
|
|
9258
|
+
React31.useEffect(() => {
|
|
9217
9259
|
if (isOpen) {
|
|
9218
9260
|
setMounted(true);
|
|
9219
9261
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -9223,12 +9265,12 @@ var SelectRoot = (props) => {
|
|
|
9223
9265
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
9224
9266
|
return () => clearTimeout(t);
|
|
9225
9267
|
}, [isOpen]);
|
|
9226
|
-
const open =
|
|
9227
|
-
const close =
|
|
9228
|
-
const toggle =
|
|
9268
|
+
const open = React31.useCallback(() => setOpen(true), []);
|
|
9269
|
+
const close = React31.useCallback(() => setOpen(false), []);
|
|
9270
|
+
const toggle = React31.useCallback(() => setOpen((prev) => !prev), []);
|
|
9229
9271
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
9230
9272
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
9231
|
-
const setSelected =
|
|
9273
|
+
const setSelected = React31.useCallback(
|
|
9232
9274
|
(label, itemValue) => {
|
|
9233
9275
|
if (!isControlled) {
|
|
9234
9276
|
setUncontrolledLabel(label);
|
|
@@ -9238,7 +9280,7 @@ var SelectRoot = (props) => {
|
|
|
9238
9280
|
},
|
|
9239
9281
|
[isControlled, onChange]
|
|
9240
9282
|
);
|
|
9241
|
-
const ctxValue =
|
|
9283
|
+
const ctxValue = React31.useMemo(
|
|
9242
9284
|
() => ({
|
|
9243
9285
|
isOpen,
|
|
9244
9286
|
mounted,
|
|
@@ -9260,7 +9302,7 @@ var SelectRoot = (props) => {
|
|
|
9260
9302
|
if (disabled) return;
|
|
9261
9303
|
toggle();
|
|
9262
9304
|
};
|
|
9263
|
-
return /* @__PURE__ */
|
|
9305
|
+
return /* @__PURE__ */ jsx336(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs216(
|
|
9264
9306
|
"div",
|
|
9265
9307
|
{
|
|
9266
9308
|
className: clsx_default(
|
|
@@ -9295,7 +9337,7 @@ var SelectRoot = (props) => {
|
|
|
9295
9337
|
}
|
|
9296
9338
|
},
|
|
9297
9339
|
children: [
|
|
9298
|
-
/* @__PURE__ */
|
|
9340
|
+
/* @__PURE__ */ jsx336(
|
|
9299
9341
|
"span",
|
|
9300
9342
|
{
|
|
9301
9343
|
className: clsx_default(
|
|
@@ -9305,25 +9347,25 @@ var SelectRoot = (props) => {
|
|
|
9305
9347
|
children: selectedLabel ?? placeholder
|
|
9306
9348
|
}
|
|
9307
9349
|
),
|
|
9308
|
-
/* @__PURE__ */
|
|
9350
|
+
/* @__PURE__ */ jsx336(
|
|
9309
9351
|
"span",
|
|
9310
9352
|
{
|
|
9311
9353
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
9312
9354
|
"aria-hidden": true,
|
|
9313
|
-
children: /* @__PURE__ */
|
|
9355
|
+
children: /* @__PURE__ */ jsx336(ChevronDownIcon_default, {})
|
|
9314
9356
|
}
|
|
9315
9357
|
)
|
|
9316
9358
|
]
|
|
9317
9359
|
}
|
|
9318
9360
|
),
|
|
9319
|
-
mounted && /* @__PURE__ */
|
|
9361
|
+
mounted && /* @__PURE__ */ jsx336(Portal_default, { children: /* @__PURE__ */ jsx336(
|
|
9320
9362
|
"div",
|
|
9321
9363
|
{
|
|
9322
9364
|
className: clsx_default("lib-xplat-select-content", size, position.direction, stateClass),
|
|
9323
9365
|
ref: contentRef,
|
|
9324
9366
|
style: { ...position.position, width: triggerRef.current?.offsetWidth },
|
|
9325
9367
|
role: "listbox",
|
|
9326
|
-
children: /* @__PURE__ */
|
|
9368
|
+
children: /* @__PURE__ */ jsx336(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
9327
9369
|
}
|
|
9328
9370
|
) })
|
|
9329
9371
|
]
|
|
@@ -9337,7 +9379,7 @@ var Select = Object.assign(SelectRoot, {
|
|
|
9337
9379
|
var Select_default = Select;
|
|
9338
9380
|
|
|
9339
9381
|
// src/components/Skeleton/Skeleton.tsx
|
|
9340
|
-
import { jsx as
|
|
9382
|
+
import { jsx as jsx337 } from "react/jsx-runtime";
|
|
9341
9383
|
var SIZE_MAP = {
|
|
9342
9384
|
xs: "var(--spacing-size-1)",
|
|
9343
9385
|
sm: "var(--spacing-size-2)",
|
|
@@ -9353,7 +9395,7 @@ var Skeleton = (props) => {
|
|
|
9353
9395
|
...width != null && { width: SIZE_MAP[width] },
|
|
9354
9396
|
...height != null && { height: SIZE_MAP[height] }
|
|
9355
9397
|
};
|
|
9356
|
-
return /* @__PURE__ */
|
|
9398
|
+
return /* @__PURE__ */ jsx337(
|
|
9357
9399
|
"div",
|
|
9358
9400
|
{
|
|
9359
9401
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -9366,20 +9408,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
9366
9408
|
var Skeleton_default = Skeleton;
|
|
9367
9409
|
|
|
9368
9410
|
// src/components/Spinner/Spinner.tsx
|
|
9369
|
-
import { jsx as
|
|
9411
|
+
import { jsx as jsx338, jsxs as jsxs217 } from "react/jsx-runtime";
|
|
9370
9412
|
var Spinner = (props) => {
|
|
9371
9413
|
const {
|
|
9372
9414
|
size = "md",
|
|
9373
9415
|
type = "brand"
|
|
9374
9416
|
} = props;
|
|
9375
|
-
return /* @__PURE__ */
|
|
9417
|
+
return /* @__PURE__ */ jsx338(
|
|
9376
9418
|
"div",
|
|
9377
9419
|
{
|
|
9378
9420
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
9379
9421
|
role: "status",
|
|
9380
9422
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
9381
9423
|
children: /* @__PURE__ */ jsxs217("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
9382
|
-
/* @__PURE__ */
|
|
9424
|
+
/* @__PURE__ */ jsx338(
|
|
9383
9425
|
"circle",
|
|
9384
9426
|
{
|
|
9385
9427
|
className: "track",
|
|
@@ -9389,7 +9431,7 @@ var Spinner = (props) => {
|
|
|
9389
9431
|
strokeWidth: "3"
|
|
9390
9432
|
}
|
|
9391
9433
|
),
|
|
9392
|
-
/* @__PURE__ */
|
|
9434
|
+
/* @__PURE__ */ jsx338(
|
|
9393
9435
|
"circle",
|
|
9394
9436
|
{
|
|
9395
9437
|
className: "indicator",
|
|
@@ -9408,20 +9450,20 @@ Spinner.displayName = "Spinner";
|
|
|
9408
9450
|
var Spinner_default = Spinner;
|
|
9409
9451
|
|
|
9410
9452
|
// src/components/Steps/Steps.tsx
|
|
9411
|
-
import { jsx as
|
|
9453
|
+
import { jsx as jsx339, jsxs as jsxs218 } from "react/jsx-runtime";
|
|
9412
9454
|
var Steps = (props) => {
|
|
9413
9455
|
const {
|
|
9414
9456
|
items,
|
|
9415
9457
|
current,
|
|
9416
9458
|
type = "brand"
|
|
9417
9459
|
} = props;
|
|
9418
|
-
return /* @__PURE__ */
|
|
9460
|
+
return /* @__PURE__ */ jsx339("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
9419
9461
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
9420
9462
|
return /* @__PURE__ */ jsxs218("div", { className: clsx_default("step-item", status), children: [
|
|
9421
|
-
/* @__PURE__ */
|
|
9463
|
+
/* @__PURE__ */ jsx339("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ jsx339(CheckIcon_default, {}) : /* @__PURE__ */ jsx339("span", { children: index + 1 }) }),
|
|
9422
9464
|
/* @__PURE__ */ jsxs218("div", { className: "step-content", children: [
|
|
9423
|
-
/* @__PURE__ */
|
|
9424
|
-
item.description && /* @__PURE__ */
|
|
9465
|
+
/* @__PURE__ */ jsx339("span", { className: "step-title", children: item.title }),
|
|
9466
|
+
item.description && /* @__PURE__ */ jsx339("span", { className: "step-description", children: item.description })
|
|
9425
9467
|
] })
|
|
9426
9468
|
] }, index);
|
|
9427
9469
|
}) });
|
|
@@ -9430,8 +9472,8 @@ Steps.displayName = "Steps";
|
|
|
9430
9472
|
var Steps_default = Steps;
|
|
9431
9473
|
|
|
9432
9474
|
// src/components/Swiper/Swiper.tsx
|
|
9433
|
-
import
|
|
9434
|
-
import { jsx as
|
|
9475
|
+
import React32 from "react";
|
|
9476
|
+
import { jsx as jsx340, jsxs as jsxs219 } from "react/jsx-runtime";
|
|
9435
9477
|
var Swiper = (props) => {
|
|
9436
9478
|
const {
|
|
9437
9479
|
auto = false,
|
|
@@ -9455,26 +9497,26 @@ var Swiper = (props) => {
|
|
|
9455
9497
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
9456
9498
|
const useLoop = loop && canSlide;
|
|
9457
9499
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
9458
|
-
const extendedItems =
|
|
9500
|
+
const extendedItems = React32.useMemo(() => {
|
|
9459
9501
|
if (!useLoop) return items;
|
|
9460
9502
|
return [...items, ...items, ...items];
|
|
9461
9503
|
}, [items, useLoop]);
|
|
9462
9504
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
9463
|
-
const [innerIndex, setInnerIndex] =
|
|
9505
|
+
const [innerIndex, setInnerIndex] = React32.useState(
|
|
9464
9506
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
9465
9507
|
);
|
|
9466
|
-
const [isDragging, setIsDragging] =
|
|
9467
|
-
const [dragOffset, setDragOffset] =
|
|
9468
|
-
const [animated, setAnimated] =
|
|
9469
|
-
const [containerWidth, setContainerWidth] =
|
|
9470
|
-
const containerRef =
|
|
9471
|
-
const startXRef =
|
|
9472
|
-
const startTimeRef =
|
|
9473
|
-
const autoplayTimerRef =
|
|
9474
|
-
const resumeTimeoutRef =
|
|
9475
|
-
const [paused, setPaused] =
|
|
9476
|
-
const initializedRef =
|
|
9477
|
-
|
|
9508
|
+
const [isDragging, setIsDragging] = React32.useState(false);
|
|
9509
|
+
const [dragOffset, setDragOffset] = React32.useState(0);
|
|
9510
|
+
const [animated, setAnimated] = React32.useState(false);
|
|
9511
|
+
const [containerWidth, setContainerWidth] = React32.useState(0);
|
|
9512
|
+
const containerRef = React32.useRef(null);
|
|
9513
|
+
const startXRef = React32.useRef(0);
|
|
9514
|
+
const startTimeRef = React32.useRef(0);
|
|
9515
|
+
const autoplayTimerRef = React32.useRef(null);
|
|
9516
|
+
const resumeTimeoutRef = React32.useRef(null);
|
|
9517
|
+
const [paused, setPaused] = React32.useState(false);
|
|
9518
|
+
const initializedRef = React32.useRef(false);
|
|
9519
|
+
React32.useEffect(() => {
|
|
9478
9520
|
const el = containerRef.current;
|
|
9479
9521
|
if (!el) return;
|
|
9480
9522
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -9497,7 +9539,7 @@ var Swiper = (props) => {
|
|
|
9497
9539
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
9498
9540
|
};
|
|
9499
9541
|
const realIndex = getRealIndex(innerIndex);
|
|
9500
|
-
const moveToInner =
|
|
9542
|
+
const moveToInner = React32.useCallback(
|
|
9501
9543
|
(idx, withAnim = true) => {
|
|
9502
9544
|
if (!useLoop) {
|
|
9503
9545
|
setAnimated(withAnim);
|
|
@@ -9525,7 +9567,7 @@ var Swiper = (props) => {
|
|
|
9525
9567
|
},
|
|
9526
9568
|
[useLoop, cloneCount, totalSlides]
|
|
9527
9569
|
);
|
|
9528
|
-
const handleTransitionEnd =
|
|
9570
|
+
const handleTransitionEnd = React32.useCallback(() => {
|
|
9529
9571
|
if (!useLoop) return;
|
|
9530
9572
|
const real = getRealIndex(innerIndex);
|
|
9531
9573
|
const canonical = cloneCount + real;
|
|
@@ -9535,7 +9577,7 @@ var Swiper = (props) => {
|
|
|
9535
9577
|
}
|
|
9536
9578
|
onChange?.(Math.min(real, maxIndex));
|
|
9537
9579
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
9538
|
-
const slideTo =
|
|
9580
|
+
const slideTo = React32.useCallback(
|
|
9539
9581
|
(logicalIndex) => {
|
|
9540
9582
|
if (!canSlide) return;
|
|
9541
9583
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -9545,7 +9587,7 @@ var Swiper = (props) => {
|
|
|
9545
9587
|
},
|
|
9546
9588
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
9547
9589
|
);
|
|
9548
|
-
const slideNext =
|
|
9590
|
+
const slideNext = React32.useCallback(() => {
|
|
9549
9591
|
if (!canSlide) return;
|
|
9550
9592
|
const nextInner = innerIndex + slideBy;
|
|
9551
9593
|
if (useLoop) {
|
|
@@ -9554,7 +9596,7 @@ var Swiper = (props) => {
|
|
|
9554
9596
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
9555
9597
|
}
|
|
9556
9598
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
9557
|
-
const slidePrev =
|
|
9599
|
+
const slidePrev = React32.useCallback(() => {
|
|
9558
9600
|
if (!canSlide) return;
|
|
9559
9601
|
const prevInner = innerIndex - slideBy;
|
|
9560
9602
|
if (useLoop) {
|
|
@@ -9563,7 +9605,7 @@ var Swiper = (props) => {
|
|
|
9563
9605
|
moveToInner(Math.max(prevInner, 0), true);
|
|
9564
9606
|
}
|
|
9565
9607
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
9566
|
-
|
|
9608
|
+
React32.useEffect(() => {
|
|
9567
9609
|
if (indexProp === void 0) return;
|
|
9568
9610
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
9569
9611
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -9571,12 +9613,12 @@ var Swiper = (props) => {
|
|
|
9571
9613
|
moveToInner(target, true);
|
|
9572
9614
|
}
|
|
9573
9615
|
}, [indexProp]);
|
|
9574
|
-
|
|
9616
|
+
React32.useImperativeHandle(swiperRef, () => ({
|
|
9575
9617
|
slidePrev,
|
|
9576
9618
|
slideNext,
|
|
9577
9619
|
slideTo
|
|
9578
9620
|
}));
|
|
9579
|
-
|
|
9621
|
+
React32.useEffect(() => {
|
|
9580
9622
|
if (!auto || !canSlide || paused) return;
|
|
9581
9623
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
9582
9624
|
return () => {
|
|
@@ -9602,7 +9644,7 @@ var Swiper = (props) => {
|
|
|
9602
9644
|
resumeTimeoutRef.current = null;
|
|
9603
9645
|
}, pauseOnInteraction);
|
|
9604
9646
|
};
|
|
9605
|
-
|
|
9647
|
+
React32.useEffect(() => {
|
|
9606
9648
|
return () => {
|
|
9607
9649
|
if (resumeTimeoutRef.current) clearTimeout(resumeTimeoutRef.current);
|
|
9608
9650
|
};
|
|
@@ -9620,7 +9662,7 @@ var Swiper = (props) => {
|
|
|
9620
9662
|
startXRef.current = getClientX(e);
|
|
9621
9663
|
startTimeRef.current = Date.now();
|
|
9622
9664
|
};
|
|
9623
|
-
|
|
9665
|
+
React32.useEffect(() => {
|
|
9624
9666
|
if (!isDragging) return;
|
|
9625
9667
|
const handleMove = (e) => {
|
|
9626
9668
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -9659,8 +9701,8 @@ var Swiper = (props) => {
|
|
|
9659
9701
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
9660
9702
|
const slideWidthPercent = 100 / viewItemCount;
|
|
9661
9703
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
9662
|
-
const slideElements =
|
|
9663
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */
|
|
9704
|
+
const slideElements = React32.useMemo(
|
|
9705
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ jsx340(
|
|
9664
9706
|
"div",
|
|
9665
9707
|
{
|
|
9666
9708
|
className: "lib-xplat-swiper__slide",
|
|
@@ -9680,14 +9722,14 @@ var Swiper = (props) => {
|
|
|
9680
9722
|
totalSteps - 1
|
|
9681
9723
|
);
|
|
9682
9724
|
return /* @__PURE__ */ jsxs219("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
9683
|
-
/* @__PURE__ */
|
|
9725
|
+
/* @__PURE__ */ jsx340(
|
|
9684
9726
|
"div",
|
|
9685
9727
|
{
|
|
9686
9728
|
className: "lib-xplat-swiper__viewport",
|
|
9687
9729
|
onMouseDown: handleDragStart,
|
|
9688
9730
|
onTouchStart: handleDragStart,
|
|
9689
9731
|
onDragStart: (e) => e.preventDefault(),
|
|
9690
|
-
children: /* @__PURE__ */
|
|
9732
|
+
children: /* @__PURE__ */ jsx340(
|
|
9691
9733
|
"div",
|
|
9692
9734
|
{
|
|
9693
9735
|
className: clsx_default(
|
|
@@ -9705,7 +9747,7 @@ var Swiper = (props) => {
|
|
|
9705
9747
|
)
|
|
9706
9748
|
}
|
|
9707
9749
|
),
|
|
9708
|
-
showProgress && canSlide && /* @__PURE__ */
|
|
9750
|
+
showProgress && canSlide && /* @__PURE__ */ jsx340("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ jsx340("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ jsx340(
|
|
9709
9751
|
"span",
|
|
9710
9752
|
{
|
|
9711
9753
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -9715,7 +9757,7 @@ var Swiper = (props) => {
|
|
|
9715
9757
|
}
|
|
9716
9758
|
}
|
|
9717
9759
|
) }) }),
|
|
9718
|
-
canSlide && /* @__PURE__ */
|
|
9760
|
+
canSlide && /* @__PURE__ */ jsx340("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ jsx340(
|
|
9719
9761
|
"button",
|
|
9720
9762
|
{
|
|
9721
9763
|
className: clsx_default(
|
|
@@ -9733,8 +9775,8 @@ Swiper.displayName = "Swiper";
|
|
|
9733
9775
|
var Swiper_default = Swiper;
|
|
9734
9776
|
|
|
9735
9777
|
// src/components/Switch/Switch.tsx
|
|
9736
|
-
import
|
|
9737
|
-
import { jsx as
|
|
9778
|
+
import React33 from "react";
|
|
9779
|
+
import { jsx as jsx341 } from "react/jsx-runtime";
|
|
9738
9780
|
var KNOB_TRANSITION_MS = 250;
|
|
9739
9781
|
var Switch = (props) => {
|
|
9740
9782
|
const {
|
|
@@ -9744,9 +9786,9 @@ var Switch = (props) => {
|
|
|
9744
9786
|
disabled,
|
|
9745
9787
|
onChange
|
|
9746
9788
|
} = props;
|
|
9747
|
-
const [isAnimating, setIsAnimating] =
|
|
9748
|
-
const timeoutRef =
|
|
9749
|
-
|
|
9789
|
+
const [isAnimating, setIsAnimating] = React33.useState(false);
|
|
9790
|
+
const timeoutRef = React33.useRef(null);
|
|
9791
|
+
React33.useEffect(() => {
|
|
9750
9792
|
return () => {
|
|
9751
9793
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
9752
9794
|
};
|
|
@@ -9761,7 +9803,7 @@ var Switch = (props) => {
|
|
|
9761
9803
|
timeoutRef.current = null;
|
|
9762
9804
|
}, KNOB_TRANSITION_MS);
|
|
9763
9805
|
};
|
|
9764
|
-
return /* @__PURE__ */
|
|
9806
|
+
return /* @__PURE__ */ jsx341(
|
|
9765
9807
|
"div",
|
|
9766
9808
|
{
|
|
9767
9809
|
className: clsx_default(
|
|
@@ -9774,7 +9816,7 @@ var Switch = (props) => {
|
|
|
9774
9816
|
),
|
|
9775
9817
|
onClick: handleClick,
|
|
9776
9818
|
"aria-disabled": disabled || isAnimating,
|
|
9777
|
-
children: /* @__PURE__ */
|
|
9819
|
+
children: /* @__PURE__ */ jsx341("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
9778
9820
|
}
|
|
9779
9821
|
);
|
|
9780
9822
|
};
|
|
@@ -9782,17 +9824,17 @@ Switch.displayName = "Switch";
|
|
|
9782
9824
|
var Switch_default = Switch;
|
|
9783
9825
|
|
|
9784
9826
|
// src/components/Table/TableContext.tsx
|
|
9785
|
-
import
|
|
9786
|
-
var TableContext =
|
|
9827
|
+
import React34 from "react";
|
|
9828
|
+
var TableContext = React34.createContext(null);
|
|
9787
9829
|
var useTableContext = () => {
|
|
9788
|
-
const ctx =
|
|
9830
|
+
const ctx = React34.useContext(TableContext);
|
|
9789
9831
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
9790
9832
|
return ctx;
|
|
9791
9833
|
};
|
|
9792
9834
|
var TableContext_default = TableContext;
|
|
9793
9835
|
|
|
9794
9836
|
// src/components/Table/Table.tsx
|
|
9795
|
-
import { jsx as
|
|
9837
|
+
import { jsx as jsx342 } from "react/jsx-runtime";
|
|
9796
9838
|
var Table = (props) => {
|
|
9797
9839
|
const {
|
|
9798
9840
|
children,
|
|
@@ -9802,7 +9844,7 @@ var Table = (props) => {
|
|
|
9802
9844
|
headerSticky = false,
|
|
9803
9845
|
stickyShadow = true
|
|
9804
9846
|
} = props;
|
|
9805
|
-
return /* @__PURE__ */
|
|
9847
|
+
return /* @__PURE__ */ jsx342("div", { className: `lib-xplat-table-wrapper ${size}`, children: /* @__PURE__ */ jsx342(
|
|
9806
9848
|
TableContext_default.Provider,
|
|
9807
9849
|
{
|
|
9808
9850
|
value: {
|
|
@@ -9811,7 +9853,7 @@ var Table = (props) => {
|
|
|
9811
9853
|
headerSticky,
|
|
9812
9854
|
stickyShadow
|
|
9813
9855
|
},
|
|
9814
|
-
children: /* @__PURE__ */
|
|
9856
|
+
children: /* @__PURE__ */ jsx342("table", { className: "lib-xplat-table", children })
|
|
9815
9857
|
}
|
|
9816
9858
|
) });
|
|
9817
9859
|
};
|
|
@@ -9819,41 +9861,41 @@ Table.displayName = "Table";
|
|
|
9819
9861
|
var Table_default = Table;
|
|
9820
9862
|
|
|
9821
9863
|
// src/components/Table/TableBody.tsx
|
|
9822
|
-
import { jsx as
|
|
9864
|
+
import { jsx as jsx343 } from "react/jsx-runtime";
|
|
9823
9865
|
var TableBody = (props) => {
|
|
9824
9866
|
const { children } = props;
|
|
9825
|
-
return /* @__PURE__ */
|
|
9867
|
+
return /* @__PURE__ */ jsx343("tbody", { children });
|
|
9826
9868
|
};
|
|
9827
9869
|
TableBody.displayName = "TableBody";
|
|
9828
9870
|
var TableBody_default = TableBody;
|
|
9829
9871
|
|
|
9830
9872
|
// src/components/Table/TableCell.tsx
|
|
9831
|
-
import
|
|
9873
|
+
import React37 from "react";
|
|
9832
9874
|
|
|
9833
9875
|
// src/components/Table/TableHeadContext.tsx
|
|
9834
|
-
import
|
|
9835
|
-
var TableHeadContext =
|
|
9876
|
+
import React35 from "react";
|
|
9877
|
+
var TableHeadContext = React35.createContext(
|
|
9836
9878
|
null
|
|
9837
9879
|
);
|
|
9838
9880
|
var useTableHeadContext = () => {
|
|
9839
|
-
const ctx =
|
|
9881
|
+
const ctx = React35.useContext(TableHeadContext);
|
|
9840
9882
|
return ctx;
|
|
9841
9883
|
};
|
|
9842
9884
|
var TableHeadContext_default = TableHeadContext;
|
|
9843
9885
|
|
|
9844
9886
|
// src/components/Table/TableRowContext.tsx
|
|
9845
|
-
import
|
|
9846
|
-
var TableRowContext =
|
|
9887
|
+
import React36 from "react";
|
|
9888
|
+
var TableRowContext = React36.createContext(null);
|
|
9847
9889
|
var useTableRowContext = () => {
|
|
9848
|
-
const ctx =
|
|
9890
|
+
const ctx = React36.useContext(TableRowContext);
|
|
9849
9891
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
9850
9892
|
return ctx;
|
|
9851
9893
|
};
|
|
9852
9894
|
var TableRowContext_default = TableRowContext;
|
|
9853
9895
|
|
|
9854
9896
|
// src/components/Table/TableCell.tsx
|
|
9855
|
-
import { jsx as
|
|
9856
|
-
var TableCell =
|
|
9897
|
+
import { jsx as jsx344 } from "react/jsx-runtime";
|
|
9898
|
+
var TableCell = React37.memo((props) => {
|
|
9857
9899
|
const {
|
|
9858
9900
|
children,
|
|
9859
9901
|
align = "center",
|
|
@@ -9865,9 +9907,9 @@ var TableCell = React36.memo((props) => {
|
|
|
9865
9907
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
9866
9908
|
const { stickyShadow } = useTableContext();
|
|
9867
9909
|
const headContext = useTableHeadContext();
|
|
9868
|
-
const [left, setLeft] =
|
|
9869
|
-
const cellRef =
|
|
9870
|
-
const calculateLeft =
|
|
9910
|
+
const [left, setLeft] = React37.useState(0);
|
|
9911
|
+
const cellRef = React37.useRef(null);
|
|
9912
|
+
const calculateLeft = React37.useCallback(() => {
|
|
9871
9913
|
if (!cellRef.current) return 0;
|
|
9872
9914
|
let totalLeft = 0;
|
|
9873
9915
|
for (const ref of stickyCells) {
|
|
@@ -9876,7 +9918,7 @@ var TableCell = React36.memo((props) => {
|
|
|
9876
9918
|
}
|
|
9877
9919
|
return totalLeft;
|
|
9878
9920
|
}, [stickyCells]);
|
|
9879
|
-
|
|
9921
|
+
React37.useEffect(() => {
|
|
9880
9922
|
if (!isSticky || !cellRef.current) return;
|
|
9881
9923
|
registerStickyCell(cellRef);
|
|
9882
9924
|
setLeft(calculateLeft());
|
|
@@ -9894,7 +9936,7 @@ var TableCell = React36.memo((props) => {
|
|
|
9894
9936
|
const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
|
|
9895
9937
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
9896
9938
|
const enableHover = headContext && headContext.cellHover;
|
|
9897
|
-
return /* @__PURE__ */
|
|
9939
|
+
return /* @__PURE__ */ jsx344(
|
|
9898
9940
|
CellTag,
|
|
9899
9941
|
{
|
|
9900
9942
|
ref: cellRef,
|
|
@@ -9919,21 +9961,21 @@ TableCell.displayName = "TableCell";
|
|
|
9919
9961
|
var TableCell_default = TableCell;
|
|
9920
9962
|
|
|
9921
9963
|
// src/components/Table/TableHead.tsx
|
|
9922
|
-
import { jsx as
|
|
9964
|
+
import { jsx as jsx345 } from "react/jsx-runtime";
|
|
9923
9965
|
var TableHead = ({
|
|
9924
9966
|
children,
|
|
9925
9967
|
cellHover = false
|
|
9926
9968
|
}) => {
|
|
9927
9969
|
const { headerSticky } = useTableContext();
|
|
9928
|
-
return /* @__PURE__ */
|
|
9970
|
+
return /* @__PURE__ */ jsx345(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ jsx345("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
|
|
9929
9971
|
};
|
|
9930
9972
|
TableHead.displayName = "TableHead";
|
|
9931
9973
|
var TableHead_default = TableHead;
|
|
9932
9974
|
|
|
9933
9975
|
// src/components/Table/TableRow.tsx
|
|
9934
|
-
import
|
|
9935
|
-
import { jsx as
|
|
9936
|
-
var TableRow =
|
|
9976
|
+
import React38 from "react";
|
|
9977
|
+
import { jsx as jsx346 } from "react/jsx-runtime";
|
|
9978
|
+
var TableRow = React38.memo((props) => {
|
|
9937
9979
|
const {
|
|
9938
9980
|
children,
|
|
9939
9981
|
type = "secondary",
|
|
@@ -9942,14 +9984,14 @@ var TableRow = React37.memo((props) => {
|
|
|
9942
9984
|
onClick
|
|
9943
9985
|
} = props;
|
|
9944
9986
|
const { rowBorderUse } = useTableContext();
|
|
9945
|
-
const [stickyCells, setStickyCells] =
|
|
9987
|
+
const [stickyCells, setStickyCells] = React38.useState([]);
|
|
9946
9988
|
const registerStickyCell = (ref) => {
|
|
9947
9989
|
setStickyCells((prev) => {
|
|
9948
9990
|
if (prev.includes(ref)) return prev;
|
|
9949
9991
|
return [...prev, ref];
|
|
9950
9992
|
});
|
|
9951
9993
|
};
|
|
9952
|
-
return /* @__PURE__ */
|
|
9994
|
+
return /* @__PURE__ */ jsx346(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ jsx346(
|
|
9953
9995
|
"tr",
|
|
9954
9996
|
{
|
|
9955
9997
|
className: clsx_default(
|
|
@@ -9973,7 +10015,7 @@ TableRow.displayName = "TableRow";
|
|
|
9973
10015
|
var TableRow_default = TableRow;
|
|
9974
10016
|
|
|
9975
10017
|
// src/components/Tag/Tag.tsx
|
|
9976
|
-
import { jsx as
|
|
10018
|
+
import { jsx as jsx347, jsxs as jsxs220 } from "react/jsx-runtime";
|
|
9977
10019
|
var Tag = (props) => {
|
|
9978
10020
|
const {
|
|
9979
10021
|
children,
|
|
@@ -9994,8 +10036,8 @@ var Tag = (props) => {
|
|
|
9994
10036
|
disabled && "disabled"
|
|
9995
10037
|
),
|
|
9996
10038
|
children: [
|
|
9997
|
-
/* @__PURE__ */
|
|
9998
|
-
onClose && /* @__PURE__ */
|
|
10039
|
+
/* @__PURE__ */ jsx347("span", { className: "tag-label", children }),
|
|
10040
|
+
onClose && /* @__PURE__ */ jsx347("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ jsx347(XIcon_default, {}) })
|
|
9999
10041
|
]
|
|
10000
10042
|
}
|
|
10001
10043
|
);
|
|
@@ -10004,55 +10046,27 @@ Tag.displayName = "Tag";
|
|
|
10004
10046
|
var Tag_default = Tag;
|
|
10005
10047
|
|
|
10006
10048
|
// src/components/TextArea/TextArea.tsx
|
|
10007
|
-
import
|
|
10008
|
-
import { jsx as
|
|
10009
|
-
var TextArea =
|
|
10049
|
+
import React39 from "react";
|
|
10050
|
+
import { jsx as jsx348 } from "react/jsx-runtime";
|
|
10051
|
+
var TextArea = React39.forwardRef(
|
|
10010
10052
|
(props, ref) => {
|
|
10011
|
-
const {
|
|
10012
|
-
|
|
10013
|
-
|
|
10014
|
-
|
|
10015
|
-
|
|
10016
|
-
|
|
10017
|
-
|
|
10018
|
-
|
|
10019
|
-
|
|
10020
|
-
|
|
10021
|
-
};
|
|
10022
|
-
const handleOnChange = (e) => {
|
|
10023
|
-
const val = e.target.value;
|
|
10024
|
-
if (onChange) {
|
|
10025
|
-
const event = {
|
|
10026
|
-
...e,
|
|
10027
|
-
target: { value: val }
|
|
10028
|
-
};
|
|
10029
|
-
onChange(event);
|
|
10030
|
-
}
|
|
10031
|
-
};
|
|
10032
|
-
React38.useEffect(() => {
|
|
10033
|
-
const el = localRef.current;
|
|
10034
|
-
if (!el) return;
|
|
10035
|
-
el.style.height = "0px";
|
|
10036
|
-
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
10037
|
-
el.style.height = `${nextHeight}px`;
|
|
10038
|
-
}, [value]);
|
|
10039
|
-
return /* @__PURE__ */ jsx347("div", { className: clsx_default("lib-xplat-textarea-wrapper", className), children: /* @__PURE__ */ jsx347(
|
|
10040
|
-
"div",
|
|
10053
|
+
const {
|
|
10054
|
+
className,
|
|
10055
|
+
size = "md",
|
|
10056
|
+
resize = "vertical",
|
|
10057
|
+
rows = 3,
|
|
10058
|
+
disabled,
|
|
10059
|
+
...textareaProps
|
|
10060
|
+
} = props;
|
|
10061
|
+
return /* @__PURE__ */ jsx348("div", { className: clsx_default("lib-xplat-textarea-wrap", className), children: /* @__PURE__ */ jsx348(
|
|
10062
|
+
"textarea",
|
|
10041
10063
|
{
|
|
10042
|
-
|
|
10043
|
-
|
|
10044
|
-
|
|
10045
|
-
|
|
10046
|
-
|
|
10047
|
-
|
|
10048
|
-
{
|
|
10049
|
-
...textareaProps,
|
|
10050
|
-
ref: setRefs,
|
|
10051
|
-
disabled,
|
|
10052
|
-
value,
|
|
10053
|
-
onChange: handleOnChange
|
|
10054
|
-
}
|
|
10055
|
-
)
|
|
10064
|
+
...textareaProps,
|
|
10065
|
+
ref,
|
|
10066
|
+
rows,
|
|
10067
|
+
disabled,
|
|
10068
|
+
className: clsx_default("lib-xplat-textarea", size, disabled && "disabled"),
|
|
10069
|
+
style: { resize }
|
|
10056
10070
|
}
|
|
10057
10071
|
) });
|
|
10058
10072
|
}
|
|
@@ -10061,25 +10075,25 @@ TextArea.displayName = "TextArea";
|
|
|
10061
10075
|
var TextArea_default = TextArea;
|
|
10062
10076
|
|
|
10063
10077
|
// src/components/Toast/Toast.tsx
|
|
10064
|
-
import
|
|
10078
|
+
import React40 from "react";
|
|
10065
10079
|
import { createPortal as createPortal3 } from "react-dom";
|
|
10066
|
-
import { jsx as
|
|
10067
|
-
var ToastContext =
|
|
10080
|
+
import { jsx as jsx349, jsxs as jsxs221 } from "react/jsx-runtime";
|
|
10081
|
+
var ToastContext = React40.createContext(null);
|
|
10068
10082
|
var useToast = () => {
|
|
10069
|
-
const ctx =
|
|
10083
|
+
const ctx = React40.useContext(ToastContext);
|
|
10070
10084
|
if (!ctx) throw new Error("useToast must be used within ToastProvider");
|
|
10071
10085
|
return ctx;
|
|
10072
10086
|
};
|
|
10073
10087
|
var EXIT_DURATION = 300;
|
|
10074
10088
|
var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
10075
|
-
const ref =
|
|
10076
|
-
const [height, setHeight] =
|
|
10077
|
-
|
|
10089
|
+
const ref = React40.useRef(null);
|
|
10090
|
+
const [height, setHeight] = React40.useState(void 0);
|
|
10091
|
+
React40.useEffect(() => {
|
|
10078
10092
|
if (ref.current && !isExiting) {
|
|
10079
10093
|
setHeight(ref.current.offsetHeight);
|
|
10080
10094
|
}
|
|
10081
10095
|
}, [isExiting]);
|
|
10082
|
-
return /* @__PURE__ */
|
|
10096
|
+
return /* @__PURE__ */ jsx349(
|
|
10083
10097
|
"div",
|
|
10084
10098
|
{
|
|
10085
10099
|
className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
|
|
@@ -10094,8 +10108,8 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
10094
10108
|
className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
|
|
10095
10109
|
role: "alert",
|
|
10096
10110
|
children: [
|
|
10097
|
-
/* @__PURE__ */
|
|
10098
|
-
/* @__PURE__ */
|
|
10111
|
+
/* @__PURE__ */ jsx349("span", { className: "message", children: item.message }),
|
|
10112
|
+
/* @__PURE__ */ jsx349("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
10099
10113
|
]
|
|
10100
10114
|
}
|
|
10101
10115
|
)
|
|
@@ -10106,13 +10120,13 @@ var ToastProvider = ({
|
|
|
10106
10120
|
children,
|
|
10107
10121
|
position = "top-right"
|
|
10108
10122
|
}) => {
|
|
10109
|
-
const [toasts, setToasts] =
|
|
10110
|
-
const [removing, setRemoving] =
|
|
10111
|
-
const [mounted, setMounted] =
|
|
10112
|
-
|
|
10123
|
+
const [toasts, setToasts] = React40.useState([]);
|
|
10124
|
+
const [removing, setRemoving] = React40.useState(/* @__PURE__ */ new Set());
|
|
10125
|
+
const [mounted, setMounted] = React40.useState(false);
|
|
10126
|
+
React40.useEffect(() => {
|
|
10113
10127
|
setMounted(true);
|
|
10114
10128
|
}, []);
|
|
10115
|
-
const remove =
|
|
10129
|
+
const remove = React40.useCallback((id) => {
|
|
10116
10130
|
setRemoving((prev) => new Set(prev).add(id));
|
|
10117
10131
|
setTimeout(() => {
|
|
10118
10132
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
@@ -10123,7 +10137,7 @@ var ToastProvider = ({
|
|
|
10123
10137
|
});
|
|
10124
10138
|
}, EXIT_DURATION);
|
|
10125
10139
|
}, []);
|
|
10126
|
-
const toast =
|
|
10140
|
+
const toast = React40.useCallback(
|
|
10127
10141
|
(type, message, duration = 3e3) => {
|
|
10128
10142
|
const id = `${Date.now()}-${Math.random()}`;
|
|
10129
10143
|
setToasts((prev) => [...prev, { id, type, message }]);
|
|
@@ -10136,7 +10150,7 @@ var ToastProvider = ({
|
|
|
10136
10150
|
return /* @__PURE__ */ jsxs221(ToastContext.Provider, { value: { toast }, children: [
|
|
10137
10151
|
children,
|
|
10138
10152
|
mounted && createPortal3(
|
|
10139
|
-
/* @__PURE__ */
|
|
10153
|
+
/* @__PURE__ */ jsx349("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ jsx349(
|
|
10140
10154
|
ToastItemComponent,
|
|
10141
10155
|
{
|
|
10142
10156
|
item: t,
|
|
@@ -10152,8 +10166,8 @@ var ToastProvider = ({
|
|
|
10152
10166
|
ToastProvider.displayName = "ToastProvider";
|
|
10153
10167
|
|
|
10154
10168
|
// src/components/Tooltip/Tooltip.tsx
|
|
10155
|
-
import
|
|
10156
|
-
import { Fragment as Fragment5, jsx as
|
|
10169
|
+
import React41 from "react";
|
|
10170
|
+
import { Fragment as Fragment5, jsx as jsx350, jsxs as jsxs222 } from "react/jsx-runtime";
|
|
10157
10171
|
var OFFSET = 12;
|
|
10158
10172
|
var SHOW_DELAY = 300;
|
|
10159
10173
|
var Tooltip = (props) => {
|
|
@@ -10164,12 +10178,12 @@ var Tooltip = (props) => {
|
|
|
10164
10178
|
children,
|
|
10165
10179
|
disabled = false
|
|
10166
10180
|
} = props;
|
|
10167
|
-
const triggerRef =
|
|
10168
|
-
const tooltipRef =
|
|
10169
|
-
const [visible, setVisible] =
|
|
10170
|
-
const [pos, setPos] =
|
|
10171
|
-
const delayTimer =
|
|
10172
|
-
const calculatePos =
|
|
10181
|
+
const triggerRef = React41.useRef(null);
|
|
10182
|
+
const tooltipRef = React41.useRef(null);
|
|
10183
|
+
const [visible, setVisible] = React41.useState(false);
|
|
10184
|
+
const [pos, setPos] = React41.useState({ left: 0, top: 0 });
|
|
10185
|
+
const delayTimer = React41.useRef(0);
|
|
10186
|
+
const calculatePos = React41.useCallback((clientX, clientY) => {
|
|
10173
10187
|
const el = tooltipRef.current;
|
|
10174
10188
|
if (!el) return;
|
|
10175
10189
|
const w = el.offsetWidth;
|
|
@@ -10182,37 +10196,37 @@ var Tooltip = (props) => {
|
|
|
10182
10196
|
if (left < 8) left = 8;
|
|
10183
10197
|
setPos({ left, top });
|
|
10184
10198
|
}, []);
|
|
10185
|
-
const handleMouseEnter =
|
|
10199
|
+
const handleMouseEnter = React41.useCallback(() => {
|
|
10186
10200
|
if (disabled) return;
|
|
10187
10201
|
delayTimer.current = window.setTimeout(() => {
|
|
10188
10202
|
setVisible(true);
|
|
10189
10203
|
}, SHOW_DELAY);
|
|
10190
10204
|
}, [disabled]);
|
|
10191
|
-
const handleMouseMove =
|
|
10205
|
+
const handleMouseMove = React41.useCallback((e) => {
|
|
10192
10206
|
if (!visible) return;
|
|
10193
10207
|
calculatePos(e.clientX, e.clientY);
|
|
10194
10208
|
}, [visible, calculatePos]);
|
|
10195
|
-
const handleMouseLeave =
|
|
10209
|
+
const handleMouseLeave = React41.useCallback(() => {
|
|
10196
10210
|
window.clearTimeout(delayTimer.current);
|
|
10197
10211
|
setVisible(false);
|
|
10198
10212
|
}, []);
|
|
10199
|
-
const handleClick =
|
|
10213
|
+
const handleClick = React41.useCallback(() => {
|
|
10200
10214
|
window.clearTimeout(delayTimer.current);
|
|
10201
10215
|
setVisible(false);
|
|
10202
10216
|
}, []);
|
|
10203
|
-
const handleFocus =
|
|
10217
|
+
const handleFocus = React41.useCallback(() => {
|
|
10204
10218
|
if (disabled) return;
|
|
10205
10219
|
setVisible(true);
|
|
10206
10220
|
}, [disabled]);
|
|
10207
|
-
const handleBlur =
|
|
10221
|
+
const handleBlur = React41.useCallback(() => {
|
|
10208
10222
|
setVisible(false);
|
|
10209
10223
|
}, []);
|
|
10210
|
-
|
|
10224
|
+
React41.useLayoutEffect(() => {
|
|
10211
10225
|
if (!visible || !triggerRef.current) return;
|
|
10212
10226
|
const rect = triggerRef.current.getBoundingClientRect();
|
|
10213
10227
|
calculatePos(rect.right, rect.top);
|
|
10214
10228
|
}, [visible, calculatePos]);
|
|
10215
|
-
if (!title && !description) return /* @__PURE__ */
|
|
10229
|
+
if (!title && !description) return /* @__PURE__ */ jsx350(Fragment5, { children });
|
|
10216
10230
|
return /* @__PURE__ */ jsxs222(
|
|
10217
10231
|
"div",
|
|
10218
10232
|
{
|
|
@@ -10226,15 +10240,15 @@ var Tooltip = (props) => {
|
|
|
10226
10240
|
onBlur: handleBlur,
|
|
10227
10241
|
children: [
|
|
10228
10242
|
children,
|
|
10229
|
-
visible && /* @__PURE__ */
|
|
10243
|
+
visible && /* @__PURE__ */ jsx350(Portal_default, { children: /* @__PURE__ */ jsxs222(
|
|
10230
10244
|
"div",
|
|
10231
10245
|
{
|
|
10232
10246
|
ref: tooltipRef,
|
|
10233
10247
|
className: clsx_default("lib-xplat-tooltip", type),
|
|
10234
10248
|
style: { position: "fixed", left: pos.left, top: pos.top },
|
|
10235
10249
|
children: [
|
|
10236
|
-
title && /* @__PURE__ */
|
|
10237
|
-
description && /* @__PURE__ */
|
|
10250
|
+
title && /* @__PURE__ */ jsx350("div", { className: "tooltip-title", children: title }),
|
|
10251
|
+
description && /* @__PURE__ */ jsx350("div", { className: "tooltip-desc", children: description })
|
|
10238
10252
|
]
|
|
10239
10253
|
}
|
|
10240
10254
|
) })
|
|
@@ -10246,11 +10260,11 @@ Tooltip.displayName = "Tooltip";
|
|
|
10246
10260
|
var Tooltip_default = Tooltip;
|
|
10247
10261
|
|
|
10248
10262
|
// src/components/Video/Video.tsx
|
|
10249
|
-
import
|
|
10250
|
-
import { jsx as
|
|
10263
|
+
import React42 from "react";
|
|
10264
|
+
import { jsx as jsx351, jsxs as jsxs223 } from "react/jsx-runtime";
|
|
10251
10265
|
var PipIcon = () => /* @__PURE__ */ jsxs223("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
10252
|
-
/* @__PURE__ */
|
|
10253
|
-
/* @__PURE__ */
|
|
10266
|
+
/* @__PURE__ */ jsx351("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
10267
|
+
/* @__PURE__ */ jsx351("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
|
|
10254
10268
|
] });
|
|
10255
10269
|
var formatTime = (sec) => {
|
|
10256
10270
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -10258,7 +10272,7 @@ var formatTime = (sec) => {
|
|
|
10258
10272
|
const s = Math.floor(sec % 60);
|
|
10259
10273
|
return `${m}:${s.toString().padStart(2, "0")}`;
|
|
10260
10274
|
};
|
|
10261
|
-
var Video =
|
|
10275
|
+
var Video = React42.forwardRef((props, ref) => {
|
|
10262
10276
|
const {
|
|
10263
10277
|
src,
|
|
10264
10278
|
poster,
|
|
@@ -10282,21 +10296,21 @@ var Video = React41.forwardRef((props, ref) => {
|
|
|
10282
10296
|
children,
|
|
10283
10297
|
...rest
|
|
10284
10298
|
} = props;
|
|
10285
|
-
const containerRef =
|
|
10286
|
-
const videoRef =
|
|
10287
|
-
const [isPlaying, setIsPlaying] =
|
|
10288
|
-
const [isLoaded, setIsLoaded] =
|
|
10289
|
-
const [currentTime, setCurrentTime] =
|
|
10290
|
-
const [duration, setDuration] =
|
|
10291
|
-
const [buffered, setBuffered] =
|
|
10292
|
-
const [volume, setVolume] =
|
|
10293
|
-
const [isMuted, setIsMuted] =
|
|
10294
|
-
const [isFullscreen, setIsFullscreen] =
|
|
10295
|
-
const [playbackRate, setPlaybackRate] =
|
|
10296
|
-
const [rateMenuOpen, setRateMenuOpen] =
|
|
10297
|
-
const [captionsOn, setCaptionsOn] =
|
|
10298
|
-
const [isPip, setIsPip] =
|
|
10299
|
-
const setRefs =
|
|
10299
|
+
const containerRef = React42.useRef(null);
|
|
10300
|
+
const videoRef = React42.useRef(null);
|
|
10301
|
+
const [isPlaying, setIsPlaying] = React42.useState(Boolean(autoPlay));
|
|
10302
|
+
const [isLoaded, setIsLoaded] = React42.useState(false);
|
|
10303
|
+
const [currentTime, setCurrentTime] = React42.useState(0);
|
|
10304
|
+
const [duration, setDuration] = React42.useState(0);
|
|
10305
|
+
const [buffered, setBuffered] = React42.useState(0);
|
|
10306
|
+
const [volume, setVolume] = React42.useState(1);
|
|
10307
|
+
const [isMuted, setIsMuted] = React42.useState(Boolean(muted));
|
|
10308
|
+
const [isFullscreen, setIsFullscreen] = React42.useState(false);
|
|
10309
|
+
const [playbackRate, setPlaybackRate] = React42.useState(1);
|
|
10310
|
+
const [rateMenuOpen, setRateMenuOpen] = React42.useState(false);
|
|
10311
|
+
const [captionsOn, setCaptionsOn] = React42.useState(false);
|
|
10312
|
+
const [isPip, setIsPip] = React42.useState(false);
|
|
10313
|
+
const setRefs = React42.useCallback(
|
|
10300
10314
|
(el) => {
|
|
10301
10315
|
videoRef.current = el;
|
|
10302
10316
|
if (typeof ref === "function") ref(el);
|
|
@@ -10304,14 +10318,14 @@ var Video = React41.forwardRef((props, ref) => {
|
|
|
10304
10318
|
},
|
|
10305
10319
|
[ref]
|
|
10306
10320
|
);
|
|
10307
|
-
|
|
10321
|
+
React42.useEffect(() => {
|
|
10308
10322
|
const onFsChange = () => {
|
|
10309
10323
|
setIsFullscreen(document.fullscreenElement === containerRef.current);
|
|
10310
10324
|
};
|
|
10311
10325
|
document.addEventListener("fullscreenchange", onFsChange);
|
|
10312
10326
|
return () => document.removeEventListener("fullscreenchange", onFsChange);
|
|
10313
10327
|
}, []);
|
|
10314
|
-
|
|
10328
|
+
React42.useEffect(() => {
|
|
10315
10329
|
const v = videoRef.current;
|
|
10316
10330
|
if (!v) return;
|
|
10317
10331
|
const onEnter = () => setIsPip(true);
|
|
@@ -10431,7 +10445,7 @@ var Video = React41.forwardRef((props, ref) => {
|
|
|
10431
10445
|
ref: containerRef,
|
|
10432
10446
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
10433
10447
|
children: [
|
|
10434
|
-
/* @__PURE__ */
|
|
10448
|
+
/* @__PURE__ */ jsx351(
|
|
10435
10449
|
"video",
|
|
10436
10450
|
{
|
|
10437
10451
|
ref: setRefs,
|
|
@@ -10452,7 +10466,7 @@ var Video = React41.forwardRef((props, ref) => {
|
|
|
10452
10466
|
children
|
|
10453
10467
|
}
|
|
10454
10468
|
),
|
|
10455
|
-
showCenterPlay && /* @__PURE__ */
|
|
10469
|
+
showCenterPlay && /* @__PURE__ */ jsx351(
|
|
10456
10470
|
"button",
|
|
10457
10471
|
{
|
|
10458
10472
|
type: "button",
|
|
@@ -10464,11 +10478,11 @@ var Video = React41.forwardRef((props, ref) => {
|
|
|
10464
10478
|
onClick: togglePlay,
|
|
10465
10479
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
10466
10480
|
tabIndex: -1,
|
|
10467
|
-
children: /* @__PURE__ */
|
|
10481
|
+
children: /* @__PURE__ */ jsx351("span", { className: "center-play-icon", children: /* @__PURE__ */ jsx351(PlayCircleIcon_default, {}) })
|
|
10468
10482
|
}
|
|
10469
10483
|
),
|
|
10470
10484
|
showControls && /* @__PURE__ */ jsxs223("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
|
|
10471
|
-
/* @__PURE__ */
|
|
10485
|
+
/* @__PURE__ */ jsx351(
|
|
10472
10486
|
"input",
|
|
10473
10487
|
{
|
|
10474
10488
|
type: "range",
|
|
@@ -10486,28 +10500,28 @@ var Video = React41.forwardRef((props, ref) => {
|
|
|
10486
10500
|
}
|
|
10487
10501
|
),
|
|
10488
10502
|
/* @__PURE__ */ jsxs223("div", { className: "controls-row", children: [
|
|
10489
|
-
/* @__PURE__ */
|
|
10503
|
+
/* @__PURE__ */ jsx351(
|
|
10490
10504
|
"button",
|
|
10491
10505
|
{
|
|
10492
10506
|
type: "button",
|
|
10493
10507
|
className: "control-btn",
|
|
10494
10508
|
onClick: togglePlay,
|
|
10495
10509
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
10496
|
-
children: isPlaying ? /* @__PURE__ */
|
|
10510
|
+
children: isPlaying ? /* @__PURE__ */ jsx351(PauseIcon_default, {}) : /* @__PURE__ */ jsx351(PlayIcon_default, {})
|
|
10497
10511
|
}
|
|
10498
10512
|
),
|
|
10499
10513
|
/* @__PURE__ */ jsxs223("div", { className: "volume-group", children: [
|
|
10500
|
-
/* @__PURE__ */
|
|
10514
|
+
/* @__PURE__ */ jsx351(
|
|
10501
10515
|
"button",
|
|
10502
10516
|
{
|
|
10503
10517
|
type: "button",
|
|
10504
10518
|
className: "control-btn",
|
|
10505
10519
|
onClick: toggleMute,
|
|
10506
10520
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
10507
|
-
children: /* @__PURE__ */
|
|
10521
|
+
children: /* @__PURE__ */ jsx351(VolumeGlyph, {})
|
|
10508
10522
|
}
|
|
10509
10523
|
),
|
|
10510
|
-
/* @__PURE__ */
|
|
10524
|
+
/* @__PURE__ */ jsx351(
|
|
10511
10525
|
"input",
|
|
10512
10526
|
{
|
|
10513
10527
|
type: "range",
|
|
@@ -10527,7 +10541,7 @@ var Video = React41.forwardRef((props, ref) => {
|
|
|
10527
10541
|
" / ",
|
|
10528
10542
|
formatTime(duration)
|
|
10529
10543
|
] }),
|
|
10530
|
-
/* @__PURE__ */
|
|
10544
|
+
/* @__PURE__ */ jsx351("div", { className: "controls-spacer" }),
|
|
10531
10545
|
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ jsxs223("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
|
|
10532
10546
|
/* @__PURE__ */ jsxs223(
|
|
10533
10547
|
"button",
|
|
@@ -10543,7 +10557,7 @@ var Video = React41.forwardRef((props, ref) => {
|
|
|
10543
10557
|
]
|
|
10544
10558
|
}
|
|
10545
10559
|
),
|
|
10546
|
-
rateMenuOpen && /* @__PURE__ */
|
|
10560
|
+
rateMenuOpen && /* @__PURE__ */ jsx351("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ jsx351("li", { children: /* @__PURE__ */ jsxs223(
|
|
10547
10561
|
"button",
|
|
10548
10562
|
{
|
|
10549
10563
|
type: "button",
|
|
@@ -10557,7 +10571,7 @@ var Video = React41.forwardRef((props, ref) => {
|
|
|
10557
10571
|
}
|
|
10558
10572
|
) }, r2)) })
|
|
10559
10573
|
] }),
|
|
10560
|
-
showCaptions && /* @__PURE__ */
|
|
10574
|
+
showCaptions && /* @__PURE__ */ jsx351(
|
|
10561
10575
|
"button",
|
|
10562
10576
|
{
|
|
10563
10577
|
type: "button",
|
|
@@ -10565,37 +10579,37 @@ var Video = React41.forwardRef((props, ref) => {
|
|
|
10565
10579
|
onClick: toggleCaptions,
|
|
10566
10580
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
10567
10581
|
"aria-pressed": captionsOn,
|
|
10568
|
-
children: /* @__PURE__ */
|
|
10582
|
+
children: /* @__PURE__ */ jsx351(TypeIcon_default, {})
|
|
10569
10583
|
}
|
|
10570
10584
|
),
|
|
10571
|
-
showPip && pipSupported && /* @__PURE__ */
|
|
10585
|
+
showPip && pipSupported && /* @__PURE__ */ jsx351(
|
|
10572
10586
|
"button",
|
|
10573
10587
|
{
|
|
10574
10588
|
type: "button",
|
|
10575
10589
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
10576
10590
|
onClick: togglePip,
|
|
10577
10591
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
10578
|
-
children: /* @__PURE__ */
|
|
10592
|
+
children: /* @__PURE__ */ jsx351(PipIcon, {})
|
|
10579
10593
|
}
|
|
10580
10594
|
),
|
|
10581
|
-
showDownload && /* @__PURE__ */
|
|
10595
|
+
showDownload && /* @__PURE__ */ jsx351(
|
|
10582
10596
|
"a",
|
|
10583
10597
|
{
|
|
10584
10598
|
className: "control-btn",
|
|
10585
10599
|
href: src,
|
|
10586
10600
|
download: downloadFileName ?? true,
|
|
10587
10601
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
10588
|
-
children: /* @__PURE__ */
|
|
10602
|
+
children: /* @__PURE__ */ jsx351(DownloadIcon_default, {})
|
|
10589
10603
|
}
|
|
10590
10604
|
),
|
|
10591
|
-
/* @__PURE__ */
|
|
10605
|
+
/* @__PURE__ */ jsx351(
|
|
10592
10606
|
"button",
|
|
10593
10607
|
{
|
|
10594
10608
|
type: "button",
|
|
10595
10609
|
className: "control-btn",
|
|
10596
10610
|
onClick: toggleFullscreen,
|
|
10597
10611
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
10598
|
-
children: isFullscreen ? /* @__PURE__ */
|
|
10612
|
+
children: isFullscreen ? /* @__PURE__ */ jsx351(MinimizeIcon_default, {}) : /* @__PURE__ */ jsx351(MaximizeIcon_default, {})
|
|
10599
10613
|
}
|
|
10600
10614
|
)
|
|
10601
10615
|
] })
|
|
@@ -10608,7 +10622,7 @@ Video.displayName = "Video";
|
|
|
10608
10622
|
var Video_default = Video;
|
|
10609
10623
|
|
|
10610
10624
|
// src/layout/Grid/FullGrid/FullGrid.tsx
|
|
10611
|
-
import { jsx as
|
|
10625
|
+
import { jsx as jsx352 } from "react/jsx-runtime";
|
|
10612
10626
|
var GAP_MAP = {
|
|
10613
10627
|
none: "var(--spacing-space-none)",
|
|
10614
10628
|
xs: "var(--spacing-space-1)",
|
|
@@ -10621,13 +10635,13 @@ var GAP_MAP = {
|
|
|
10621
10635
|
var FullGrid = (props) => {
|
|
10622
10636
|
const { children, gap } = props;
|
|
10623
10637
|
const style = gap != null ? { gap: GAP_MAP[gap] } : void 0;
|
|
10624
|
-
return /* @__PURE__ */
|
|
10638
|
+
return /* @__PURE__ */ jsx352("div", { className: "lib-xplat-full-grid", style, children });
|
|
10625
10639
|
};
|
|
10626
10640
|
FullGrid.displayName = "FullGrid";
|
|
10627
10641
|
var FullGrid_default = FullGrid;
|
|
10628
10642
|
|
|
10629
10643
|
// src/layout/Grid/FullScreen/FullScreen.tsx
|
|
10630
|
-
import { jsx as
|
|
10644
|
+
import { jsx as jsx353 } from "react/jsx-runtime";
|
|
10631
10645
|
var GAP_MAP2 = {
|
|
10632
10646
|
none: "var(--spacing-space-none)",
|
|
10633
10647
|
xs: "var(--spacing-space-1)",
|
|
@@ -10640,13 +10654,13 @@ var GAP_MAP2 = {
|
|
|
10640
10654
|
var FullScreen = (props) => {
|
|
10641
10655
|
const { children, gap } = props;
|
|
10642
10656
|
const style = gap != null ? { gap: GAP_MAP2[gap] } : void 0;
|
|
10643
|
-
return /* @__PURE__ */
|
|
10657
|
+
return /* @__PURE__ */ jsx353("div", { className: "lib-xplat-full-screen", style, children });
|
|
10644
10658
|
};
|
|
10645
10659
|
FullScreen.displayName = "FullScreen";
|
|
10646
10660
|
var FullScreen_default = FullScreen;
|
|
10647
10661
|
|
|
10648
10662
|
// src/layout/Grid/Item/Item.tsx
|
|
10649
|
-
import { jsx as
|
|
10663
|
+
import { jsx as jsx354 } from "react/jsx-runtime";
|
|
10650
10664
|
var calculateSpans = (column) => {
|
|
10651
10665
|
const spans = {};
|
|
10652
10666
|
let inherited = column.default;
|
|
@@ -10663,35 +10677,35 @@ var GridItem = ({ column, children, className }) => {
|
|
|
10663
10677
|
Object.entries(spans).forEach(([key, value]) => {
|
|
10664
10678
|
style[`--column-${key}`] = value;
|
|
10665
10679
|
});
|
|
10666
|
-
return /* @__PURE__ */
|
|
10680
|
+
return /* @__PURE__ */ jsx354("div", { className: clsx_default("lib-xplat-grid-item", className), style, children });
|
|
10667
10681
|
};
|
|
10668
10682
|
GridItem.displayName = "GridItem";
|
|
10669
10683
|
var Item_default = GridItem;
|
|
10670
10684
|
|
|
10671
10685
|
// src/layout/Header/Header.tsx
|
|
10672
|
-
import { jsx as
|
|
10686
|
+
import { jsx as jsx355, jsxs as jsxs224 } from "react/jsx-runtime";
|
|
10673
10687
|
var Header = ({
|
|
10674
10688
|
logo,
|
|
10675
10689
|
centerContent,
|
|
10676
10690
|
rightContent
|
|
10677
10691
|
}) => {
|
|
10678
10692
|
return /* @__PURE__ */ jsxs224("div", { className: "lib-xplat-layout-header", children: [
|
|
10679
|
-
/* @__PURE__ */
|
|
10680
|
-
/* @__PURE__ */
|
|
10681
|
-
/* @__PURE__ */
|
|
10693
|
+
/* @__PURE__ */ jsx355("div", { children: logo }),
|
|
10694
|
+
/* @__PURE__ */ jsx355("div", { children: centerContent }),
|
|
10695
|
+
/* @__PURE__ */ jsx355("div", { children: rightContent })
|
|
10682
10696
|
] });
|
|
10683
10697
|
};
|
|
10684
10698
|
Header.displayName = "Header";
|
|
10685
10699
|
var Header_default = Header;
|
|
10686
10700
|
|
|
10687
10701
|
// src/layout/Layout/Layout.tsx
|
|
10688
|
-
import { Fragment as Fragment6, jsx as
|
|
10702
|
+
import { Fragment as Fragment6, jsx as jsx356, jsxs as jsxs225 } from "react/jsx-runtime";
|
|
10689
10703
|
var Layout = (props) => {
|
|
10690
10704
|
const { header, sideBar, children } = props;
|
|
10691
|
-
return /* @__PURE__ */
|
|
10692
|
-
sideBar && /* @__PURE__ */
|
|
10705
|
+
return /* @__PURE__ */ jsx356("div", { className: "lib-xplat-layout", children: /* @__PURE__ */ jsxs225("div", { className: "lib-xplat-layout-content-wrapper", children: [
|
|
10706
|
+
sideBar && /* @__PURE__ */ jsx356(Fragment6, { children: sideBar }),
|
|
10693
10707
|
/* @__PURE__ */ jsxs225("div", { className: "lib-xplat-layout-content", children: [
|
|
10694
|
-
header && /* @__PURE__ */
|
|
10708
|
+
header && /* @__PURE__ */ jsx356("div", { className: "lib-xplat-layout-conent-header", children: header }),
|
|
10695
10709
|
children
|
|
10696
10710
|
] })
|
|
10697
10711
|
] }) });
|
|
@@ -10700,31 +10714,31 @@ Layout.displayName = "Layout";
|
|
|
10700
10714
|
var Layout_default = Layout;
|
|
10701
10715
|
|
|
10702
10716
|
// src/layout/SideBar/SideBar.tsx
|
|
10703
|
-
import
|
|
10717
|
+
import React44 from "react";
|
|
10704
10718
|
|
|
10705
10719
|
// src/layout/SideBar/SideBarContext.tsx
|
|
10706
|
-
import
|
|
10707
|
-
var SideBarContext =
|
|
10720
|
+
import React43 from "react";
|
|
10721
|
+
var SideBarContext = React43.createContext(null);
|
|
10708
10722
|
var useSideBarContext = () => {
|
|
10709
|
-
const ctx =
|
|
10723
|
+
const ctx = React43.useContext(SideBarContext);
|
|
10710
10724
|
if (!ctx) throw new Error("Error");
|
|
10711
10725
|
return ctx;
|
|
10712
10726
|
};
|
|
10713
10727
|
var SideBarContext_default = SideBarContext;
|
|
10714
10728
|
|
|
10715
10729
|
// src/layout/SideBar/SideBar.tsx
|
|
10716
|
-
import { jsx as
|
|
10730
|
+
import { jsx as jsx357 } from "react/jsx-runtime";
|
|
10717
10731
|
var SideBar = (props) => {
|
|
10718
10732
|
const { children, className } = props;
|
|
10719
|
-
const [isOpen, setIsOpen] =
|
|
10733
|
+
const [isOpen, setIsOpen] = React44.useState(true);
|
|
10720
10734
|
const handleSwitchSideBar = () => {
|
|
10721
10735
|
setIsOpen((prev) => !prev);
|
|
10722
10736
|
};
|
|
10723
|
-
return /* @__PURE__ */
|
|
10737
|
+
return /* @__PURE__ */ jsx357(
|
|
10724
10738
|
SideBarContext_default.Provider,
|
|
10725
10739
|
{
|
|
10726
10740
|
value: { isSidebarOpen: isOpen, handleSwitchSideBar },
|
|
10727
|
-
children: /* @__PURE__ */
|
|
10741
|
+
children: /* @__PURE__ */ jsx357(
|
|
10728
10742
|
"div",
|
|
10729
10743
|
{
|
|
10730
10744
|
className: clsx_default(
|
|
@@ -10768,6 +10782,7 @@ export {
|
|
|
10768
10782
|
ArrowUpLeftIcon_default as ArrowUpLeftIcon,
|
|
10769
10783
|
ArrowUpRightIcon_default as ArrowUpRightIcon,
|
|
10770
10784
|
AtSignIcon_default as AtSignIcon,
|
|
10785
|
+
AutoResizeTextArea_default as AutoResizeTextArea,
|
|
10771
10786
|
Avatar_default as Avatar,
|
|
10772
10787
|
AwardIcon_default as AwardIcon,
|
|
10773
10788
|
BREAKPOINT_KEYS_ORDERED,
|