sellmate-design-system-react 0.1.7 → 0.1.9
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/SActionModal/SActionModal.cjs +11 -3
- package/dist/components/SActionModal/SActionModal.cjs.map +1 -1
- package/dist/components/SActionModal/SActionModal.js +11 -3
- package/dist/components/SActionModal/SActionModal.js.map +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs +226 -209
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.js +226 -209
- package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
- package/dist/components/SCalendar/SCalendar.cjs +9 -1
- package/dist/components/SCalendar/SCalendar.cjs.map +1 -1
- package/dist/components/SCalendar/SCalendar.js +9 -1
- package/dist/components/SCalendar/SCalendar.js.map +1 -1
- package/dist/components/SChip/SChip.cjs +9 -1
- package/dist/components/SChip/SChip.cjs.map +1 -1
- package/dist/components/SChip/SChip.d.ts +1 -1
- package/dist/components/SChip/SChip.js +9 -1
- package/dist/components/SChip/SChip.js.map +1 -1
- package/dist/components/SChipInput/SChipInput.cjs +260 -235
- package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
- package/dist/components/SChipInput/SChipInput.js +259 -235
- package/dist/components/SChipInput/SChipInput.js.map +1 -1
- package/dist/components/SCircleProgress/SCircleProgress.cjs +56 -58
- package/dist/components/SCircleProgress/SCircleProgress.cjs.map +1 -1
- package/dist/components/SCircleProgress/SCircleProgress.js +56 -58
- package/dist/components/SCircleProgress/SCircleProgress.js.map +1 -1
- package/dist/components/SConfirmModal/SConfirmModal.cjs +9 -1
- package/dist/components/SConfirmModal/SConfirmModal.cjs.map +1 -1
- package/dist/components/SConfirmModal/SConfirmModal.js +9 -1
- package/dist/components/SConfirmModal/SConfirmModal.js.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.cjs +247 -221
- package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.js +247 -221
- package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs +308 -256
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.js +308 -256
- package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
- package/dist/components/SDropdownButton/SDropdownButton.cjs +51 -4
- package/dist/components/SDropdownButton/SDropdownButton.cjs.map +1 -1
- package/dist/components/SDropdownButton/SDropdownButton.js +52 -5
- package/dist/components/SDropdownButton/SDropdownButton.js.map +1 -1
- package/dist/components/SField/SField.cjs +226 -21
- package/dist/components/SField/SField.cjs.map +1 -1
- package/dist/components/SField/SField.d.ts +11 -0
- package/dist/components/SField/SField.js +226 -21
- package/dist/components/SField/SField.js.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.cjs +306 -278
- package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.d.ts +4 -2
- package/dist/components/SFilePicker/SFilePicker.js +306 -278
- package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
- package/dist/components/SGhostButton/SGhostButton.cjs +8 -0
- package/dist/components/SGhostButton/SGhostButton.cjs.map +1 -1
- package/dist/components/SGhostButton/SGhostButton.js +8 -0
- package/dist/components/SGhostButton/SGhostButton.js.map +1 -1
- package/dist/components/SGuide/SGuide.cjs +12 -1
- package/dist/components/SGuide/SGuide.cjs.map +1 -1
- package/dist/components/SGuide/SGuide.js +12 -1
- package/dist/components/SGuide/SGuide.js.map +1 -1
- package/dist/components/SInput/SInput.cjs +226 -209
- package/dist/components/SInput/SInput.cjs.map +1 -1
- package/dist/components/SInput/SInput.js +226 -209
- package/dist/components/SInput/SInput.js.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs +640 -453
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +3 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.js +640 -453
- package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
- package/dist/components/SLoadingContainer/SLoadingContainer.cjs +64 -58
- package/dist/components/SLoadingContainer/SLoadingContainer.cjs.map +1 -1
- package/dist/components/SLoadingContainer/SLoadingContainer.js +64 -58
- package/dist/components/SLoadingContainer/SLoadingContainer.js.map +1 -1
- package/dist/components/SLoadingContainer/loading.cjs +64 -58
- package/dist/components/SLoadingContainer/loading.cjs.map +1 -1
- package/dist/components/SLoadingContainer/loading.js +64 -58
- package/dist/components/SLoadingContainer/loading.js.map +1 -1
- package/dist/components/SLoadingModal/SLoadingModal.cjs +68 -61
- package/dist/components/SLoadingModal/SLoadingModal.cjs.map +1 -1
- package/dist/components/SLoadingModal/SLoadingModal.js +68 -61
- package/dist/components/SLoadingModal/SLoadingModal.js.map +1 -1
- package/dist/components/SModalContainer/SModalContainer.cjs +9 -1
- package/dist/components/SModalContainer/SModalContainer.cjs.map +1 -1
- package/dist/components/SModalContainer/SModalContainer.js +9 -1
- package/dist/components/SModalContainer/SModalContainer.js.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.cjs +334 -50
- package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.d.ts +2 -0
- package/dist/components/SNumberInput/SNumberInput.js +334 -50
- package/dist/components/SNumberInput/SNumberInput.js.map +1 -1
- package/dist/components/SPagination/SPagination.cjs +1 -1
- package/dist/components/SPagination/SPagination.cjs.map +1 -1
- package/dist/components/SPagination/SPagination.js +1 -1
- package/dist/components/SPagination/SPagination.js.map +1 -1
- package/dist/components/SPopover/SPopover.cjs +20 -3
- package/dist/components/SPopover/SPopover.cjs.map +1 -1
- package/dist/components/SPopover/SPopover.js +20 -4
- package/dist/components/SPopover/SPopover.js.map +1 -1
- package/dist/components/SPopup/SPopup.cjs +2 -2
- package/dist/components/SPopup/SPopup.cjs.map +1 -1
- package/dist/components/SPopup/SPopup.js +2 -2
- package/dist/components/SPopup/SPopup.js.map +1 -1
- package/dist/components/SPortal/SPortal.cjs +8 -0
- package/dist/components/SPortal/SPortal.cjs.map +1 -1
- package/dist/components/SPortal/SPortal.js +8 -0
- package/dist/components/SPortal/SPortal.js.map +1 -1
- package/dist/components/SSelect/SSelect.cjs +76 -32
- package/dist/components/SSelect/SSelect.cjs.map +1 -1
- package/dist/components/SSelect/SSelect.js +76 -32
- package/dist/components/SSelect/SSelect.js.map +1 -1
- package/dist/components/STable/STable.cjs +133 -91
- package/dist/components/STable/STable.cjs.map +1 -1
- package/dist/components/STable/STable.js +133 -91
- package/dist/components/STable/STable.js.map +1 -1
- package/dist/components/STextLink/STextLink.cjs +137 -3
- package/dist/components/STextLink/STextLink.cjs.map +1 -1
- package/dist/components/STextLink/STextLink.d.ts +1 -1
- package/dist/components/STextLink/STextLink.js +118 -4
- package/dist/components/STextLink/STextLink.js.map +1 -1
- package/dist/components/STextarea/STextarea.cjs +226 -21
- package/dist/components/STextarea/STextarea.cjs.map +1 -1
- package/dist/components/STextarea/STextarea.js +226 -21
- package/dist/components/STextarea/STextarea.js.map +1 -1
- package/dist/components/SToast/SToast.cjs +8 -0
- package/dist/components/SToast/SToast.cjs.map +1 -1
- package/dist/components/SToast/SToast.js +8 -0
- package/dist/components/SToast/SToast.js.map +1 -1
- package/dist/components/SToast/SToastContainer.cjs +11 -3
- package/dist/components/SToast/SToastContainer.cjs.map +1 -1
- package/dist/components/SToast/SToastContainer.js +11 -3
- package/dist/components/SToast/SToastContainer.js.map +1 -1
- package/dist/components/STooltip/STooltip.cjs +217 -14
- package/dist/components/STooltip/STooltip.cjs.map +1 -1
- package/dist/components/STooltip/STooltip.js +217 -14
- package/dist/components/STooltip/STooltip.js.map +1 -1
- package/dist/index.cjs +532 -300
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +531 -300
- package/dist/index.js.map +1 -1
- package/dist/lib/floating-anim.cjs +8 -0
- package/dist/lib/floating-anim.cjs.map +1 -1
- package/dist/lib/floating-anim.d.ts +5 -1
- package/dist/lib/floating-anim.js +8 -0
- package/dist/lib/floating-anim.js.map +1 -1
- package/dist/styles.css +175 -66
- package/dist/theme.css +49 -22
- package/package.json +1 -1
|
@@ -23,6 +23,12 @@ export interface SFieldProps {
|
|
|
23
23
|
labelTooltipProps?: Partial<STooltipProps>;
|
|
24
24
|
/** 레이블/어드온 레이블 너비 (숫자=px). label·addonLabel 폭에 공통 적용 */
|
|
25
25
|
labelWidth?: number | string;
|
|
26
|
+
/**
|
|
27
|
+
* 레이블 박스 높이 (숫자=px). 미지정 시 size별 기본값 사용.
|
|
28
|
+
* 컨트롤 박스가 기본 필드 높이보다 큰 경우(multiline 등) 첫 행에 세로 중앙 정렬을
|
|
29
|
+
* 맞추기 위해 컨트롤 박스 높이를 넘겨받는다.
|
|
30
|
+
*/
|
|
31
|
+
labelHeight?: number | string;
|
|
26
32
|
/** 필드 크기 */
|
|
27
33
|
size?: SFieldSize;
|
|
28
34
|
/** 우측 어드온 레이블 */
|
|
@@ -51,6 +57,11 @@ export interface SFieldProps {
|
|
|
51
57
|
width?: number | string;
|
|
52
58
|
/** 멀티라인(textarea) — 컨트롤 높이를 고정하지 않고 min-height만 적용 */
|
|
53
59
|
multiline?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* 테두리 박스 제거 (inline 컨트롤용) — border/배경/hover·focus 강조만 사라지고
|
|
62
|
+
* label·hint·errorMessage 등 나머지 필드 구성은 그대로 동작한다.
|
|
63
|
+
*/
|
|
64
|
+
borderless?: boolean;
|
|
54
65
|
/** 실제 컨트롤 (input/select 등) — 테두리 없이 렌더, 테두리는 SField가 제공 */
|
|
55
66
|
children?: ReactNode;
|
|
56
67
|
className?: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { forwardRef, createContext, useState, useRef, useImperativeHandle, useContext } from 'react';
|
|
2
2
|
import { clsx } from 'clsx';
|
|
3
3
|
import { extendTailwindMerge } from 'tailwind-merge';
|
|
4
|
-
import { jsx,
|
|
5
|
-
import * as
|
|
4
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
|
+
import * as RPopover2 from '@radix-ui/react-popover';
|
|
6
6
|
|
|
7
7
|
// src/components/SField/SField.tsx
|
|
8
8
|
var twMerge = extendTailwindMerge({
|
|
@@ -2854,12 +2854,20 @@ var SIcon = forwardRef(function SIcon2({ name, size = 24, color, rotate, label,
|
|
|
2854
2854
|
// src/lib/floating-anim.ts
|
|
2855
2855
|
var FLOATING_SLIDE_ANIM = [
|
|
2856
2856
|
"data-[state=open]:data-[side=top]:animate-floating-in-top",
|
|
2857
|
+
"data-[state=delayed-open]:data-[side=top]:animate-floating-in-top",
|
|
2858
|
+
"data-[state=instant-open]:data-[side=top]:animate-floating-in-top",
|
|
2857
2859
|
"data-[state=closed]:data-[side=top]:animate-floating-out-top",
|
|
2858
2860
|
"data-[state=open]:data-[side=bottom]:animate-floating-in-bottom",
|
|
2861
|
+
"data-[state=delayed-open]:data-[side=bottom]:animate-floating-in-bottom",
|
|
2862
|
+
"data-[state=instant-open]:data-[side=bottom]:animate-floating-in-bottom",
|
|
2859
2863
|
"data-[state=closed]:data-[side=bottom]:animate-floating-out-bottom",
|
|
2860
2864
|
"data-[state=open]:data-[side=left]:animate-floating-in-left",
|
|
2865
|
+
"data-[state=delayed-open]:data-[side=left]:animate-floating-in-left",
|
|
2866
|
+
"data-[state=instant-open]:data-[side=left]:animate-floating-in-left",
|
|
2861
2867
|
"data-[state=closed]:data-[side=left]:animate-floating-out-left",
|
|
2862
2868
|
"data-[state=open]:data-[side=right]:animate-floating-in-right",
|
|
2869
|
+
"data-[state=delayed-open]:data-[side=right]:animate-floating-in-right",
|
|
2870
|
+
"data-[state=instant-open]:data-[side=right]:animate-floating-in-right",
|
|
2863
2871
|
"data-[state=closed]:data-[side=right]:animate-floating-out-right"
|
|
2864
2872
|
].join(" ");
|
|
2865
2873
|
var PortalContainerContext = createContext(null);
|
|
@@ -2867,11 +2875,200 @@ PortalContainerContext.Provider;
|
|
|
2867
2875
|
function usePortalContainer() {
|
|
2868
2876
|
return useContext(PortalContainerContext) ?? void 0;
|
|
2869
2877
|
}
|
|
2878
|
+
|
|
2879
|
+
// src/components/STag/tag.config.ts
|
|
2880
|
+
var TAG_SIZE_CONFIG = {
|
|
2881
|
+
xs: {
|
|
2882
|
+
height: 20,
|
|
2883
|
+
paddingX: 8,
|
|
2884
|
+
gap: 4,
|
|
2885
|
+
radius: 6,
|
|
2886
|
+
iconSize: 12,
|
|
2887
|
+
fontSize: 11,
|
|
2888
|
+
fontWeight: 500,
|
|
2889
|
+
lineHeight: 18
|
|
2890
|
+
},
|
|
2891
|
+
sm: {
|
|
2892
|
+
height: 24,
|
|
2893
|
+
paddingX: 8,
|
|
2894
|
+
gap: 4,
|
|
2895
|
+
radius: 6,
|
|
2896
|
+
iconSize: 16,
|
|
2897
|
+
fontSize: 12,
|
|
2898
|
+
fontWeight: 700,
|
|
2899
|
+
lineHeight: 20
|
|
2900
|
+
},
|
|
2901
|
+
md: {
|
|
2902
|
+
height: 28,
|
|
2903
|
+
paddingX: 12,
|
|
2904
|
+
gap: 6,
|
|
2905
|
+
radius: 8,
|
|
2906
|
+
iconSize: 16,
|
|
2907
|
+
fontSize: 14,
|
|
2908
|
+
fontWeight: 700,
|
|
2909
|
+
lineHeight: 24
|
|
2910
|
+
}
|
|
2911
|
+
};
|
|
2912
|
+
var STag = forwardRef(function STag2({
|
|
2913
|
+
shape = "square",
|
|
2914
|
+
size = "sm",
|
|
2915
|
+
color = "grey",
|
|
2916
|
+
label = "",
|
|
2917
|
+
icon,
|
|
2918
|
+
iconLeft = true,
|
|
2919
|
+
width,
|
|
2920
|
+
className,
|
|
2921
|
+
style,
|
|
2922
|
+
...rest
|
|
2923
|
+
}, ref) {
|
|
2924
|
+
const s = TAG_SIZE_CONFIG[size];
|
|
2925
|
+
const contentColor = `var(--cmp-tag-${color}-content)`;
|
|
2926
|
+
const iconNode = icon ? /* @__PURE__ */ jsx(SIcon, { name: icon, size: s.iconSize, color: contentColor }) : null;
|
|
2927
|
+
const resolvedWidth = typeof width === "number" ? `${width}px` : width;
|
|
2928
|
+
return /* @__PURE__ */ jsxs(
|
|
2929
|
+
"span",
|
|
2930
|
+
{
|
|
2931
|
+
ref,
|
|
2932
|
+
"aria-label": label || "tag",
|
|
2933
|
+
className: cn(
|
|
2934
|
+
"box-border inline-flex w-fit select-none items-center justify-center whitespace-nowrap",
|
|
2935
|
+
className
|
|
2936
|
+
),
|
|
2937
|
+
style: {
|
|
2938
|
+
minHeight: s.height,
|
|
2939
|
+
padding: `0 ${s.paddingX}px`,
|
|
2940
|
+
gap: s.gap,
|
|
2941
|
+
borderRadius: shape === "pill" ? 999 : s.radius,
|
|
2942
|
+
fontSize: s.fontSize,
|
|
2943
|
+
fontWeight: s.fontWeight,
|
|
2944
|
+
lineHeight: `${s.lineHeight}px`,
|
|
2945
|
+
background: `var(--cmp-tag-${color}-bg)`,
|
|
2946
|
+
color: contentColor,
|
|
2947
|
+
...resolvedWidth != null ? { width: resolvedWidth } : {},
|
|
2948
|
+
...style
|
|
2949
|
+
},
|
|
2950
|
+
...rest,
|
|
2951
|
+
children: [
|
|
2952
|
+
icon && iconLeft && iconNode,
|
|
2953
|
+
label && /* @__PURE__ */ jsx("span", { className: "inline-flex min-w-0 items-center justify-center", children: label }),
|
|
2954
|
+
icon && !iconLeft && iconNode
|
|
2955
|
+
]
|
|
2956
|
+
}
|
|
2957
|
+
);
|
|
2958
|
+
});
|
|
2959
|
+
var SIZE = {
|
|
2960
|
+
xxs: { icon: 12, radius: "sm" },
|
|
2961
|
+
xs: { icon: 16, radius: "sm" },
|
|
2962
|
+
sm: { icon: 20, radius: "sm" },
|
|
2963
|
+
md: { icon: 24, radius: "md" },
|
|
2964
|
+
lg: { icon: 32, radius: "md" }
|
|
2965
|
+
};
|
|
2966
|
+
var TOOLTIP_HIDE_DELAY_MS = 100;
|
|
2967
|
+
function SGhostButton({
|
|
2968
|
+
icon,
|
|
2969
|
+
size = "sm",
|
|
2970
|
+
intent = "default",
|
|
2971
|
+
ariaLabel = "",
|
|
2972
|
+
tooltipText,
|
|
2973
|
+
disabled = false,
|
|
2974
|
+
onClick,
|
|
2975
|
+
className,
|
|
2976
|
+
style
|
|
2977
|
+
}) {
|
|
2978
|
+
const portalContainer = usePortalContainer();
|
|
2979
|
+
const [open, setOpen] = useState(false);
|
|
2980
|
+
const hideTimer = useRef(void 0);
|
|
2981
|
+
const cancelHide = () => {
|
|
2982
|
+
if (hideTimer.current) {
|
|
2983
|
+
clearTimeout(hideTimer.current);
|
|
2984
|
+
hideTimer.current = void 0;
|
|
2985
|
+
}
|
|
2986
|
+
};
|
|
2987
|
+
const openNow = () => {
|
|
2988
|
+
cancelHide();
|
|
2989
|
+
setOpen(true);
|
|
2990
|
+
};
|
|
2991
|
+
const startHide = () => {
|
|
2992
|
+
cancelHide();
|
|
2993
|
+
hideTimer.current = setTimeout(() => setOpen(false), TOOLTIP_HIDE_DELAY_MS);
|
|
2994
|
+
};
|
|
2995
|
+
const s = SIZE[size];
|
|
2996
|
+
const contentColor = disabled ? intent === "inverse" ? "var(--cmp-ghostButton-inverse-disabled)" : "var(--cmp-ghostButton-icon-disabled)" : `var(--cmp-ghostButton-${intent}-content)`;
|
|
2997
|
+
const btn = /* @__PURE__ */ jsxs(
|
|
2998
|
+
"button",
|
|
2999
|
+
{
|
|
3000
|
+
type: "button",
|
|
3001
|
+
disabled,
|
|
3002
|
+
"aria-disabled": disabled ? "true" : void 0,
|
|
3003
|
+
"aria-label": ariaLabel.trim() || void 0,
|
|
3004
|
+
tabIndex: disabled ? -1 : void 0,
|
|
3005
|
+
onClick: (e) => {
|
|
3006
|
+
if (disabled) {
|
|
3007
|
+
e.preventDefault();
|
|
3008
|
+
return;
|
|
3009
|
+
}
|
|
3010
|
+
onClick?.(e);
|
|
3011
|
+
},
|
|
3012
|
+
className: cn(
|
|
3013
|
+
"group relative box-border inline-flex items-center justify-center border-none bg-transparent p-0 transition-shadow",
|
|
3014
|
+
disabled ? "cursor-not-allowed" : "cursor-pointer",
|
|
3015
|
+
"focus-visible:outline-none focus-visible:shadow-[0_0_0_2px_var(--cmp-ghostButton-action-hover-bg)]",
|
|
3016
|
+
className
|
|
3017
|
+
),
|
|
3018
|
+
style: {
|
|
3019
|
+
width: `var(--cmp-ghostButton-${size}-size)`,
|
|
3020
|
+
height: `var(--cmp-ghostButton-${size}-size)`,
|
|
3021
|
+
borderRadius: `var(--cmp-ghostButton-radius-${s.radius})`,
|
|
3022
|
+
...style
|
|
3023
|
+
},
|
|
3024
|
+
children: [
|
|
3025
|
+
!disabled && /* @__PURE__ */ jsx(
|
|
3026
|
+
"span",
|
|
3027
|
+
{
|
|
3028
|
+
"aria-hidden": true,
|
|
3029
|
+
className: "pointer-events-none absolute inset-0 rounded-[inherit] opacity-0 transition-opacity duration-200 group-hover:opacity-5",
|
|
3030
|
+
style: { background: `var(--cmp-ghostButton-${intent}-hover-bg)` }
|
|
3031
|
+
}
|
|
3032
|
+
),
|
|
3033
|
+
/* @__PURE__ */ jsx(SIcon, { name: icon, size: s.icon, color: contentColor })
|
|
3034
|
+
]
|
|
3035
|
+
}
|
|
3036
|
+
);
|
|
3037
|
+
const text = (tooltipText ?? "").trim();
|
|
3038
|
+
if (text === "") return btn;
|
|
3039
|
+
return /* @__PURE__ */ jsxs(RPopover2.Root, { open, onOpenChange: setOpen, children: [
|
|
3040
|
+
/* @__PURE__ */ jsx(RPopover2.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
3041
|
+
"span",
|
|
3042
|
+
{
|
|
3043
|
+
className: "inline-flex",
|
|
3044
|
+
onMouseEnter: openNow,
|
|
3045
|
+
onMouseLeave: startHide,
|
|
3046
|
+
onFocus: openNow,
|
|
3047
|
+
onBlur: startHide,
|
|
3048
|
+
children: btn
|
|
3049
|
+
}
|
|
3050
|
+
) }),
|
|
3051
|
+
/* @__PURE__ */ jsx(RPopover2.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
3052
|
+
RPopover2.Content,
|
|
3053
|
+
{
|
|
3054
|
+
side: "top",
|
|
3055
|
+
sideOffset: 4,
|
|
3056
|
+
className: cn("z-50", FLOATING_SLIDE_ANIM),
|
|
3057
|
+
"aria-hidden": true,
|
|
3058
|
+
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
3059
|
+
onMouseEnter: cancelHide,
|
|
3060
|
+
onMouseLeave: startHide,
|
|
3061
|
+
children: /* @__PURE__ */ jsx(STag, { shape: "square", size: "xs", color: "grey", label: text })
|
|
3062
|
+
}
|
|
3063
|
+
) })
|
|
3064
|
+
] });
|
|
3065
|
+
}
|
|
2870
3066
|
var HIDE_DELAY_MS = 100;
|
|
2871
3067
|
function useBody(content, message = []) {
|
|
2872
3068
|
if (content != null) return content;
|
|
2873
3069
|
if (message.length === 0) return null;
|
|
2874
|
-
|
|
3070
|
+
const singleLine = message.length === 1;
|
|
3071
|
+
return /* @__PURE__ */ jsx(Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsx("div", { className: singleLine ? "leading-[24px]" : void 0, children: line }, i)) });
|
|
2875
3072
|
}
|
|
2876
3073
|
var STooltip = forwardRef(function STooltip2({
|
|
2877
3074
|
content,
|
|
@@ -2929,7 +3126,7 @@ var STooltip = forwardRef(function STooltip2({
|
|
|
2929
3126
|
if (disabled || body == null) return /* @__PURE__ */ jsx(Fragment, { children: triggerNode });
|
|
2930
3127
|
const isHover = trigger === "hover";
|
|
2931
3128
|
const contentClass = cn(
|
|
2932
|
-
"z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px]",
|
|
3129
|
+
"z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)]",
|
|
2933
3130
|
FLOATING_SLIDE_ANIM,
|
|
2934
3131
|
className
|
|
2935
3132
|
);
|
|
@@ -2939,10 +3136,10 @@ var STooltip = forwardRef(function STooltip2({
|
|
|
2939
3136
|
fontWeight: tooltipType === "default" ? 500 : 700,
|
|
2940
3137
|
...style
|
|
2941
3138
|
};
|
|
2942
|
-
return /* @__PURE__ */ jsxs(
|
|
3139
|
+
return /* @__PURE__ */ jsxs(RPopover2.Root, { open, onOpenChange: setOpen, children: [
|
|
2943
3140
|
isHover ? (
|
|
2944
3141
|
// hover: Anchor(위치 기준) + 직접 mouse 핸들러 — 클릭으로 토글되지 않도록 Trigger 미사용
|
|
2945
|
-
/* @__PURE__ */ jsx(
|
|
3142
|
+
/* @__PURE__ */ jsx(RPopover2.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
2946
3143
|
"span",
|
|
2947
3144
|
{
|
|
2948
3145
|
className: "inline-flex",
|
|
@@ -2953,9 +3150,9 @@ var STooltip = forwardRef(function STooltip2({
|
|
|
2953
3150
|
children: triggerNode
|
|
2954
3151
|
}
|
|
2955
3152
|
) })
|
|
2956
|
-
) : /* @__PURE__ */ jsx(
|
|
2957
|
-
/* @__PURE__ */ jsx(
|
|
2958
|
-
|
|
3153
|
+
) : /* @__PURE__ */ jsx(RPopover2.Trigger, { asChild: true, children: triggerNode }),
|
|
3154
|
+
/* @__PURE__ */ jsx(RPopover2.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
|
|
3155
|
+
RPopover2.Content,
|
|
2959
3156
|
{
|
|
2960
3157
|
side: placement,
|
|
2961
3158
|
sideOffset: 8,
|
|
@@ -2974,15 +3171,21 @@ var STooltip = forwardRef(function STooltip2({
|
|
|
2974
3171
|
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-[12px]", children: [
|
|
2975
3172
|
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: body }),
|
|
2976
3173
|
useClose && /* @__PURE__ */ jsx(
|
|
2977
|
-
|
|
3174
|
+
SGhostButton,
|
|
2978
3175
|
{
|
|
2979
|
-
|
|
2980
|
-
|
|
2981
|
-
|
|
3176
|
+
icon: "close",
|
|
3177
|
+
size: "xs",
|
|
3178
|
+
intent: tooltipType === "default" ? "inverse" : "default",
|
|
3179
|
+
ariaLabel: "\uB2EB\uAE30",
|
|
3180
|
+
className: "shrink-0",
|
|
3181
|
+
onClick: () => {
|
|
3182
|
+
cancelHide();
|
|
3183
|
+
setOpen(false);
|
|
3184
|
+
}
|
|
2982
3185
|
}
|
|
2983
3186
|
)
|
|
2984
3187
|
] }),
|
|
2985
|
-
/* @__PURE__ */ jsx(
|
|
3188
|
+
/* @__PURE__ */ jsx(RPopover2.Arrow, { width: 16, height: 12, style: { fill: bg } })
|
|
2986
3189
|
]
|
|
2987
3190
|
}
|
|
2988
3191
|
) })
|
|
@@ -2990,8 +3193,8 @@ var STooltip = forwardRef(function STooltip2({
|
|
|
2990
3193
|
});
|
|
2991
3194
|
STooltip.displayName = "STooltip";
|
|
2992
3195
|
var FIELD_SIZE = {
|
|
2993
|
-
sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon:
|
|
2994
|
-
md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon:
|
|
3196
|
+
sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon: 16 },
|
|
3197
|
+
md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon: 16 }
|
|
2995
3198
|
};
|
|
2996
3199
|
var ALIGN = {
|
|
2997
3200
|
start: "flex-start",
|
|
@@ -3006,6 +3209,7 @@ var SField = forwardRef(function SField2({
|
|
|
3006
3209
|
labelTooltip = "",
|
|
3007
3210
|
labelTooltipProps,
|
|
3008
3211
|
labelWidth,
|
|
3212
|
+
labelHeight,
|
|
3009
3213
|
size = "sm",
|
|
3010
3214
|
addonLabel = "",
|
|
3011
3215
|
addonAlign = "start",
|
|
@@ -3020,6 +3224,7 @@ var SField = forwardRef(function SField2({
|
|
|
3020
3224
|
readOnly = false,
|
|
3021
3225
|
width,
|
|
3022
3226
|
multiline = false,
|
|
3227
|
+
borderless = false,
|
|
3023
3228
|
children,
|
|
3024
3229
|
className,
|
|
3025
3230
|
style,
|
|
@@ -3053,8 +3258,8 @@ var SField = forwardRef(function SField2({
|
|
|
3053
3258
|
const resolvedSuccess = status === "pass";
|
|
3054
3259
|
const showError = resolvedError && errorMessage !== "";
|
|
3055
3260
|
const interactive = !disabled && !readOnly;
|
|
3056
|
-
const borderColor = disabled ? "var(--color-grey-45)" : interactive && focused ? "var(--sys-color-field-border-focus)" : resolvedSuccess ? "var(--sys-color-field-border-success)" : resolvedError ? "var(--sys-color-field-border-danger)" : "var(--sys-color-field-border-default)";
|
|
3057
|
-
const bgColor = disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
|
|
3261
|
+
const borderColor = borderless ? "transparent" : disabled ? "var(--color-grey-45)" : interactive && focused ? "var(--sys-color-field-border-focus)" : resolvedSuccess ? "var(--sys-color-field-border-success)" : resolvedError ? "var(--sys-color-field-border-danger)" : "var(--sys-color-field-border-default)";
|
|
3262
|
+
const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
|
|
3058
3263
|
const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
|
|
3059
3264
|
return /* @__PURE__ */ jsx(
|
|
3060
3265
|
"div",
|
|
@@ -3071,7 +3276,7 @@ var SField = forwardRef(function SField2({
|
|
|
3071
3276
|
{
|
|
3072
3277
|
className: "flex shrink-0 items-center font-bold text-(--sys-color-field-text-default)",
|
|
3073
3278
|
style: {
|
|
3074
|
-
height: s.height,
|
|
3279
|
+
height: cssLen(labelHeight) ?? s.height,
|
|
3075
3280
|
marginRight: s.fieldGap,
|
|
3076
3281
|
width: cssLen(labelWidth),
|
|
3077
3282
|
fontSize: s.fontSize,
|
|
@@ -3097,14 +3302,14 @@ var SField = forwardRef(function SField2({
|
|
|
3097
3302
|
{
|
|
3098
3303
|
className: cn(
|
|
3099
3304
|
"relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
|
|
3100
|
-
interactive && "hover:border-(--sys-color-field-border-focus) hover:shadow-[0px_0px_4px_0px_#0071ff66] focus-within:border-(--sys-color-field-border-focus) focus-within:shadow-[0px_0px_4px_0px_#0071ff66]",
|
|
3305
|
+
interactive && !borderless && "hover:border-(--sys-color-field-border-focus) hover:shadow-[0px_0px_4px_0px_#0071ff66] focus-within:border-(--sys-color-field-border-focus) focus-within:shadow-[0px_0px_4px_0px_#0071ff66]",
|
|
3101
3306
|
disabled && "cursor-not-allowed"
|
|
3102
3307
|
),
|
|
3103
3308
|
style: {
|
|
3104
3309
|
// @ts-expect-error CSS 변수
|
|
3105
3310
|
"--field-bc": borderColor,
|
|
3106
3311
|
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
3107
|
-
...interactive && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3312
|
+
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3108
3313
|
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3109
3314
|
"width": cssLen(width),
|
|
3110
3315
|
"borderRadius": s.radius,
|