sellmate-design-system-react 2.2.0 → 3.1.0
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/AGENTS.md +661 -0
- package/README.md +85 -0
- package/dist/components/SActionModal/README.md +41 -0
- package/dist/components/SBadge/README.md +25 -0
- package/dist/components/SBarcodeInput/README.md +64 -0
- package/dist/components/SButton/README.md +49 -0
- package/dist/components/SCalendar/README.md +42 -0
- package/dist/components/SCallout/README.md +29 -0
- package/dist/components/SCallout/SCallout.cjs +76 -1
- package/dist/components/SCallout/SCallout.cjs.map +1 -1
- package/dist/components/SCallout/SCallout.d.ts +6 -2
- package/dist/components/SCallout/SCallout.js +76 -1
- package/dist/components/SCallout/SCallout.js.map +1 -1
- package/dist/components/SCard/README.md +12 -0
- package/dist/components/SCheckbox/README.md +44 -0
- package/dist/components/SChip/README.md +57 -0
- package/dist/components/SChipInput/README.md +77 -0
- package/dist/components/SCircleProgress/README.md +35 -0
- package/dist/components/SConfirmModal/README.md +61 -0
- package/dist/components/SDatePicker/README.md +62 -0
- package/dist/components/SDateRangePicker/README.md +64 -0
- package/dist/components/SDivider/README.md +25 -0
- package/dist/components/SDraggableItem/README.md +40 -0
- package/dist/components/SDraggableItem/SDraggableItem.cjs +3079 -0
- package/dist/components/SDraggableItem/SDraggableItem.cjs.map +1 -0
- package/dist/components/SDraggableItem/SDraggableItem.d.ts +33 -0
- package/dist/components/SDraggableItem/SDraggableItem.js +3077 -0
- package/dist/components/SDraggableItem/SDraggableItem.js.map +1 -0
- package/dist/components/SDraggableItem/index.d.ts +1 -0
- package/dist/components/SDropdownButton/README.md +50 -0
- package/dist/components/SExpansionItem/README.md +40 -0
- package/dist/components/SExpansionItem/SExpansionItem.cjs +6 -15
- package/dist/components/SExpansionItem/SExpansionItem.cjs.map +1 -1
- package/dist/components/SExpansionItem/SExpansionItem.js +6 -15
- package/dist/components/SExpansionItem/SExpansionItem.js.map +1 -1
- package/dist/components/SField/README.md +91 -0
- package/dist/components/SFilePicker/README.md +72 -0
- package/dist/components/SForm/README.md +31 -0
- package/dist/components/SGhostButton/README.md +76 -0
- package/dist/components/SGnb/README.md +56 -0
- package/dist/components/SGuide/README.md +34 -0
- package/dist/components/SIcon/README.md +91 -0
- package/dist/components/SInput/README.md +66 -0
- package/dist/components/SKeyValueTable/README.md +59 -0
- package/dist/components/SLayout/README.md +42 -0
- package/dist/components/SLinearProgress/README.md +17 -0
- package/dist/components/SList/README.md +14 -0
- package/dist/components/SList/SList.cjs +38 -0
- package/dist/components/SList/SList.cjs.map +1 -0
- package/dist/components/SList/SList.d.ts +10 -0
- package/dist/components/SList/SList.js +36 -0
- package/dist/components/SList/SList.js.map +1 -0
- package/dist/components/SList/index.d.ts +1 -0
- package/dist/components/SListItem/README.md +19 -0
- package/dist/components/SListItem/SListItem.cjs +83 -0
- package/dist/components/SListItem/SListItem.cjs.map +1 -0
- package/dist/components/SListItem/SListItem.d.ts +26 -0
- package/dist/components/SListItem/SListItem.js +81 -0
- package/dist/components/SListItem/SListItem.js.map +1 -0
- package/dist/components/SListItem/index.d.ts +1 -0
- package/dist/components/SLoadingContainer/README.md +29 -0
- package/dist/components/SLoadingModal/README.md +52 -0
- package/dist/components/SModal/README.md +192 -0
- package/dist/components/SModalContainer/README.md +49 -0
- package/dist/components/SNumberInput/README.md +74 -0
- package/dist/components/SPage/README.md +25 -0
- package/dist/components/SPagination/README.md +40 -0
- package/dist/components/SPopover/README.md +54 -0
- package/dist/components/SPopup/README.md +38 -0
- package/dist/components/SPortal/README.md +51 -0
- package/dist/components/SRadio/README.md +57 -0
- package/dist/components/SRadioButton/README.md +24 -0
- package/dist/components/SScrollArea/README.md +16 -0
- package/dist/components/SSectionHeaderCard/README.md +51 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.cjs +3414 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.cjs.map +1 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.d.ts +32 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.js +3392 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.js.map +1 -0
- package/dist/components/SSectionHeaderCard/index.d.ts +1 -0
- package/dist/components/SSelect/README.md +79 -0
- package/dist/components/SStepper/README.md +30 -0
- package/dist/components/SSwitch/README.md +24 -0
- package/dist/components/STable/README.md +82 -0
- package/dist/components/STableBar/README.md +28 -0
- package/dist/components/STabs/README.md +37 -0
- package/dist/components/STag/README.md +44 -0
- package/dist/components/STextLink/README.md +48 -0
- package/dist/components/STextarea/README.md +60 -0
- package/dist/components/STimePicker/README.md +65 -0
- package/dist/components/STimeRangePicker/README.md +63 -0
- package/dist/components/SToast/README.md +70 -0
- package/dist/components/SToggle/README.md +22 -0
- package/dist/components/STooltip/README.md +57 -0
- package/dist/index.cjs +815 -419
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +815 -423
- package/dist/index.js.map +1 -1
- package/dist/llms.txt +3496 -0
- package/dist/styles.css +545 -19
- package/dist/theme.css +22 -0
- package/eslint/index.mjs +66 -0
- package/eslint/lib/class-names.mjs +119 -0
- package/eslint/lib/table-column.mjs +53 -0
- package/eslint/rules/no-arbitrary-class.mjs +91 -0
- package/eslint/rules/no-off-scale-spacing.mjs +67 -0
- package/eslint/rules/no-raw-html-control.mjs +117 -0
- package/eslint/rules/prefer-typo-preset.mjs +73 -0
- package/eslint/rules/require-locale-number.mjs +78 -0
- package/eslint/rules/table-numeric-align.mjs +93 -0
- package/eslint/scale.gen.mjs +16 -0
- package/package.json +9 -4
package/dist/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { clsx } from 'clsx';
|
|
3
3
|
import { extendTailwindMerge } from 'tailwind-merge';
|
|
4
|
-
import { forwardRef, useState,
|
|
4
|
+
import { forwardRef, useState, useRef, useEffect, useId, createContext, useImperativeHandle, useCallback, useMemo, useContext, Fragment as Fragment$1, useLayoutEffect, useSyncExternalStore } from 'react';
|
|
5
5
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
6
6
|
import { createPortal } from 'react-dom';
|
|
7
|
+
import * as RPopover2 from '@radix-ui/react-popover';
|
|
7
8
|
import { createRoot } from 'react-dom/client';
|
|
8
9
|
import * as RTooltip from '@radix-ui/react-tooltip';
|
|
9
10
|
import * as RDropdown from '@radix-ui/react-dropdown-menu';
|
|
10
|
-
import * as RPopover2 from '@radix-ui/react-popover';
|
|
11
11
|
import * as RSwitch from '@radix-ui/react-switch';
|
|
12
12
|
import * as RDialog from '@radix-ui/react-dialog';
|
|
13
13
|
import * as RCheckbox from '@radix-ui/react-checkbox';
|
|
@@ -2892,6 +2892,227 @@ var SCard = forwardRef(function SCard2({ bordered = false, className, children,
|
|
|
2892
2892
|
}
|
|
2893
2893
|
);
|
|
2894
2894
|
});
|
|
2895
|
+
var setRefs = (refs, value) => {
|
|
2896
|
+
refs.forEach((ref) => {
|
|
2897
|
+
if (typeof ref === "function") {
|
|
2898
|
+
ref(value);
|
|
2899
|
+
return;
|
|
2900
|
+
}
|
|
2901
|
+
if (ref) {
|
|
2902
|
+
ref.current = value;
|
|
2903
|
+
}
|
|
2904
|
+
});
|
|
2905
|
+
};
|
|
2906
|
+
function renderSlot(slot, state2) {
|
|
2907
|
+
return typeof slot === "function" ? slot(state2) : slot;
|
|
2908
|
+
}
|
|
2909
|
+
var SDraggableItemView = forwardRef(
|
|
2910
|
+
function SDraggableItemView2({
|
|
2911
|
+
title,
|
|
2912
|
+
trailing,
|
|
2913
|
+
accentStripe,
|
|
2914
|
+
bordered,
|
|
2915
|
+
selected,
|
|
2916
|
+
dense,
|
|
2917
|
+
dragging,
|
|
2918
|
+
disabled,
|
|
2919
|
+
hovered,
|
|
2920
|
+
dragHandleProps,
|
|
2921
|
+
onDragHandleMouseDown,
|
|
2922
|
+
className,
|
|
2923
|
+
...rest
|
|
2924
|
+
}, ref) {
|
|
2925
|
+
const renderState = { hovered, dragging, disabled };
|
|
2926
|
+
const titleNode = renderSlot(title, renderState);
|
|
2927
|
+
const trailingNode = renderSlot(trailing, renderState);
|
|
2928
|
+
return /* @__PURE__ */ jsxs(
|
|
2929
|
+
"div",
|
|
2930
|
+
{
|
|
2931
|
+
ref,
|
|
2932
|
+
"aria-disabled": disabled || void 0,
|
|
2933
|
+
"data-dragging": dragging || void 0,
|
|
2934
|
+
className: cn(
|
|
2935
|
+
"relative flex w-full items-center gap-(--cmp-listDraggableItem-gap) overflow-hidden px-(--cmp-listDraggableItem-paddingX) text-[12px] leading-[20px]",
|
|
2936
|
+
disabled ? "bg-(--cmp-listDraggableItem-bg-default) font-medium text-(--sys-color-disabled-text)" : selected ? "bg-(--cmp-listDraggableItem-bg-selected) font-bold text-(--cmp-listDraggableItem-text-selected)" : "bg-(--cmp-listDraggableItem-bg-default) font-medium text-(--cmp-listDraggableItem-text-default)",
|
|
2937
|
+
!disabled && !selected && !dragging && "hover:bg-(--cmp-listDraggableItem-bg-hover)",
|
|
2938
|
+
dense ? "h-[32px] py-(--cmp-listDraggableItem-paddingY-dense)" : "h-[40px] py-(--cmp-listDraggableItem-paddingY-normal)",
|
|
2939
|
+
bordered ? cn(
|
|
2940
|
+
"rounded-(--cmp-listDraggableItem-radius-bordered) border border-(--cmp-listDraggableItem-border-default)",
|
|
2941
|
+
!disabled && !selected && !dragging && "hover:border-(--cmp-listDraggableItem-bordered-border-hover)",
|
|
2942
|
+
!disabled && selected && !dragging && "border-(--cmp-listDraggableItem-bordered-border-selected)",
|
|
2943
|
+
!disabled && selected && dragging && "border-[length:var(--cmp-listDraggableItem-bordered-dragging-border-width)] border-(--cmp-listDraggableItem-bordered-dragging-border-color) bg-(--cmp-listDraggableItem-bordered-dragging-bg)"
|
|
2944
|
+
) : "border-b border-(--cmp-listDraggableItem-border-default)",
|
|
2945
|
+
disabled && "cursor-not-allowed",
|
|
2946
|
+
className
|
|
2947
|
+
),
|
|
2948
|
+
...rest,
|
|
2949
|
+
children: [
|
|
2950
|
+
accentStripe && !bordered && !disabled && /* @__PURE__ */ jsx(
|
|
2951
|
+
"span",
|
|
2952
|
+
{
|
|
2953
|
+
"aria-hidden": "true",
|
|
2954
|
+
className: "pointer-events-none absolute bottom-[-1px] left-0 top-0 w-(--cmp-listDraggableItem-accentStripe-width) bg-(--cmp-listDraggableItem-accentStripe-color)"
|
|
2955
|
+
}
|
|
2956
|
+
),
|
|
2957
|
+
/* @__PURE__ */ jsx(
|
|
2958
|
+
"div",
|
|
2959
|
+
{
|
|
2960
|
+
...dragHandleProps,
|
|
2961
|
+
role: dragHandleProps?.role ?? "button",
|
|
2962
|
+
tabIndex: dragHandleProps?.tabIndex ?? (disabled ? -1 : 0),
|
|
2963
|
+
"aria-label": dragHandleProps?.["aria-label"] ?? "\uB4DC\uB798\uADF8 \uD578\uB4E4",
|
|
2964
|
+
"aria-disabled": disabled || void 0,
|
|
2965
|
+
onMouseDown: onDragHandleMouseDown,
|
|
2966
|
+
className: cn(
|
|
2967
|
+
"flex size-[24px] shrink-0 select-none items-center justify-center rounded-[4px]",
|
|
2968
|
+
disabled ? "cursor-not-allowed opacity-0" : "cursor-grab hover:bg-black/5 active:cursor-grabbing",
|
|
2969
|
+
dragging && "bg-black/5",
|
|
2970
|
+
dragHandleProps?.className
|
|
2971
|
+
),
|
|
2972
|
+
children: /* @__PURE__ */ jsx(SIcon, { name: "drag", size: 16, color: "grey_65" })
|
|
2973
|
+
}
|
|
2974
|
+
),
|
|
2975
|
+
/* @__PURE__ */ jsxs(
|
|
2976
|
+
"div",
|
|
2977
|
+
{
|
|
2978
|
+
className: cn(
|
|
2979
|
+
"flex min-w-0 flex-1 items-center gap-[8px]",
|
|
2980
|
+
dragging && "opacity-(--cmp-listDraggableItem-dragging-content-opacity)"
|
|
2981
|
+
),
|
|
2982
|
+
children: [
|
|
2983
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: titleNode }),
|
|
2984
|
+
trailingNode
|
|
2985
|
+
]
|
|
2986
|
+
}
|
|
2987
|
+
)
|
|
2988
|
+
]
|
|
2989
|
+
}
|
|
2990
|
+
);
|
|
2991
|
+
}
|
|
2992
|
+
);
|
|
2993
|
+
var SDraggableItem = forwardRef(
|
|
2994
|
+
function SDraggableItem2({
|
|
2995
|
+
title,
|
|
2996
|
+
trailing,
|
|
2997
|
+
accentStripe = false,
|
|
2998
|
+
bordered = false,
|
|
2999
|
+
selected = false,
|
|
3000
|
+
dense = false,
|
|
3001
|
+
disabled = false,
|
|
3002
|
+
dragOverlay = true,
|
|
3003
|
+
dragOverlayOpacity = 0.75,
|
|
3004
|
+
dragHandleProps,
|
|
3005
|
+
onDragHandleMouseDown,
|
|
3006
|
+
className,
|
|
3007
|
+
onMouseEnter,
|
|
3008
|
+
onMouseLeave,
|
|
3009
|
+
...rest
|
|
3010
|
+
}, ref) {
|
|
3011
|
+
const [hovered, setHovered] = useState(false);
|
|
3012
|
+
const [overlay, setOverlay] = useState(null);
|
|
3013
|
+
const rootRef = useRef(null);
|
|
3014
|
+
const overlayVisible = overlay != null;
|
|
3015
|
+
const handleMouseEnter = (event) => {
|
|
3016
|
+
if (!disabled) setHovered(true);
|
|
3017
|
+
onMouseEnter?.(event);
|
|
3018
|
+
};
|
|
3019
|
+
const handleMouseLeave = (event) => {
|
|
3020
|
+
setHovered(false);
|
|
3021
|
+
onMouseLeave?.(event);
|
|
3022
|
+
};
|
|
3023
|
+
const handleDragMouseDown = (event) => {
|
|
3024
|
+
if (disabled) return;
|
|
3025
|
+
const rect = rootRef.current?.getBoundingClientRect();
|
|
3026
|
+
if (dragOverlay && rect) {
|
|
3027
|
+
setOverlay({
|
|
3028
|
+
offsetX: event.clientX - rect.left,
|
|
3029
|
+
offsetY: event.clientY - rect.top,
|
|
3030
|
+
rect,
|
|
3031
|
+
x: event.clientX,
|
|
3032
|
+
y: event.clientY
|
|
3033
|
+
});
|
|
3034
|
+
}
|
|
3035
|
+
dragHandleProps?.onMouseDown?.(event);
|
|
3036
|
+
onDragHandleMouseDown?.(event);
|
|
3037
|
+
};
|
|
3038
|
+
useEffect(() => {
|
|
3039
|
+
if (!overlayVisible) return void 0;
|
|
3040
|
+
const handleMouseMove = (event) => {
|
|
3041
|
+
setOverlay(
|
|
3042
|
+
(current) => current ? {
|
|
3043
|
+
...current,
|
|
3044
|
+
x: event.clientX,
|
|
3045
|
+
y: event.clientY
|
|
3046
|
+
} : current
|
|
3047
|
+
);
|
|
3048
|
+
};
|
|
3049
|
+
const handleMouseUp = () => {
|
|
3050
|
+
setOverlay(null);
|
|
3051
|
+
};
|
|
3052
|
+
window.addEventListener("mousemove", handleMouseMove);
|
|
3053
|
+
window.addEventListener("mouseup", handleMouseUp);
|
|
3054
|
+
return () => {
|
|
3055
|
+
window.removeEventListener("mousemove", handleMouseMove);
|
|
3056
|
+
window.removeEventListener("mouseup", handleMouseUp);
|
|
3057
|
+
};
|
|
3058
|
+
}, [overlayVisible]);
|
|
3059
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3060
|
+
/* @__PURE__ */ jsx(
|
|
3061
|
+
SDraggableItemView,
|
|
3062
|
+
{
|
|
3063
|
+
ref: (node) => setRefs([rootRef, ref], node),
|
|
3064
|
+
title,
|
|
3065
|
+
trailing,
|
|
3066
|
+
accentStripe,
|
|
3067
|
+
bordered,
|
|
3068
|
+
selected,
|
|
3069
|
+
dense,
|
|
3070
|
+
dragging: overlayVisible,
|
|
3071
|
+
disabled,
|
|
3072
|
+
hovered,
|
|
3073
|
+
dragHandleProps,
|
|
3074
|
+
onDragHandleMouseDown: handleDragMouseDown,
|
|
3075
|
+
onMouseEnter: handleMouseEnter,
|
|
3076
|
+
onMouseLeave: handleMouseLeave,
|
|
3077
|
+
className,
|
|
3078
|
+
...rest
|
|
3079
|
+
}
|
|
3080
|
+
),
|
|
3081
|
+
overlay && typeof document !== "undefined" && createPortal(
|
|
3082
|
+
/* @__PURE__ */ jsx(
|
|
3083
|
+
"div",
|
|
3084
|
+
{
|
|
3085
|
+
className: "pointer-events-none fixed z-[999999]",
|
|
3086
|
+
style: {
|
|
3087
|
+
left: overlay.x - overlay.offsetX,
|
|
3088
|
+
opacity: dragOverlayOpacity,
|
|
3089
|
+
top: overlay.y - overlay.offsetY,
|
|
3090
|
+
width: overlay.rect.width
|
|
3091
|
+
},
|
|
3092
|
+
children: /* @__PURE__ */ jsx(
|
|
3093
|
+
SDraggableItemView,
|
|
3094
|
+
{
|
|
3095
|
+
title,
|
|
3096
|
+
trailing,
|
|
3097
|
+
accentStripe,
|
|
3098
|
+
bordered,
|
|
3099
|
+
selected,
|
|
3100
|
+
dense,
|
|
3101
|
+
dragging: true,
|
|
3102
|
+
disabled,
|
|
3103
|
+
hovered: true,
|
|
3104
|
+
dragHandleProps,
|
|
3105
|
+
className
|
|
3106
|
+
}
|
|
3107
|
+
)
|
|
3108
|
+
}
|
|
3109
|
+
),
|
|
3110
|
+
document.body
|
|
3111
|
+
)
|
|
3112
|
+
] });
|
|
3113
|
+
}
|
|
3114
|
+
);
|
|
3115
|
+
SDraggableItem.displayName = "SDraggableItem";
|
|
2895
3116
|
var SExpansionItem = forwardRef(
|
|
2896
3117
|
function SExpansionItem2({
|
|
2897
3118
|
title,
|
|
@@ -2918,7 +3139,7 @@ var SExpansionItem = forwardRef(
|
|
|
2918
3139
|
{
|
|
2919
3140
|
ref,
|
|
2920
3141
|
className: cn(
|
|
2921
|
-
"group/expansion-item overflow-hidden bg-
|
|
3142
|
+
"group/expansion-item overflow-hidden bg-(--cmp-listExpansionItem-title-bg-default)",
|
|
2922
3143
|
// TODO: expansionItem/bordered/radius 및 border intent 토큰 생성 후 고정값을 토큰으로 교체한다.
|
|
2923
3144
|
bordered && "rounded-[8px] border border-[#E1E1E1] hover:border-[#AAAAAA] [&:has(>button:hover)]:border-[#AAAAAA]",
|
|
2924
3145
|
bordered && isExpanded && "!border-[#93C4FF]",
|
|
@@ -2940,10 +3161,10 @@ var SExpansionItem = forwardRef(
|
|
|
2940
3161
|
onToggle?.(next, event);
|
|
2941
3162
|
},
|
|
2942
3163
|
className: cn(
|
|
2943
|
-
"flex w-full items-center justify-between border-0 text-left text-[14px] font-bold leading-[24px] text-
|
|
3164
|
+
"flex w-full cursor-pointer items-center justify-between border-0 text-left text-[14px] font-bold leading-[24px] text-(--cmp-listExpansionItem-title-text-default) focus-visible:outline focus-visible:outline-2 focus-visible:outline-(--sys-color-border-accent) disabled:cursor-not-allowed disabled:text-(--sys-color-disabled-text)",
|
|
2944
3165
|
isExpanded && "border-b border-(--cmp-listExpansionItem-title-border)",
|
|
2945
3166
|
!isExpanded && "hover:bg-(--cmp-listExpansionItem-title-bg-hover)",
|
|
2946
|
-
dense ? "
|
|
3167
|
+
dense ? "h-[32px] py-(--cmp-listExpansionItem-title-paddingY-dense)" : "h-[40px] py-(--cmp-listExpansionItem-title-paddingY-normal)",
|
|
2947
3168
|
"gap-(--cmp-listExpansionItem-title-gap)",
|
|
2948
3169
|
"pr-(--cmp-listExpansionItem-title-paddingX)",
|
|
2949
3170
|
depth === 2 ? "pl-[calc(var(--cmp-listExpansionItem-title-paddingX)+32px)]" : depth === 3 ? "pl-[calc(var(--cmp-listExpansionItem-title-paddingX)+64px)]" : "pl-(--cmp-listExpansionItem-title-paddingX)",
|
|
@@ -2957,7 +3178,7 @@ var SExpansionItem = forwardRef(
|
|
|
2957
3178
|
"flex transition-transform duration-200 ease-out motion-reduce:transition-none",
|
|
2958
3179
|
isExpanded && "rotate-180"
|
|
2959
3180
|
),
|
|
2960
|
-
children: /* @__PURE__ */ jsx(SIcon, { name: "caretDown", size: 12 })
|
|
3181
|
+
children: /* @__PURE__ */ jsx(SIcon, { name: "caretDown", size: 12, color: "var(--sys-color-fg-quaternary)" })
|
|
2961
3182
|
}
|
|
2962
3183
|
),
|
|
2963
3184
|
leadingNode,
|
|
@@ -2972,19 +3193,10 @@ var SExpansionItem = forwardRef(
|
|
|
2972
3193
|
id,
|
|
2973
3194
|
"aria-hidden": !isExpanded,
|
|
2974
3195
|
className: cn(
|
|
2975
|
-
"grid overflow-hidden bg-
|
|
3196
|
+
"grid overflow-hidden bg-(--cmp-listExpansionItem-body-bg) transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none",
|
|
2976
3197
|
isExpanded ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
|
|
2977
3198
|
),
|
|
2978
|
-
children: /* @__PURE__ */ jsx(
|
|
2979
|
-
"div",
|
|
2980
|
-
{
|
|
2981
|
-
className: cn(
|
|
2982
|
-
"min-h-0 overflow-hidden",
|
|
2983
|
-
bodyPadding && isExpanded && "p-(--cmp-listExpansionItem-body-padding)"
|
|
2984
|
-
),
|
|
2985
|
-
children
|
|
2986
|
-
}
|
|
2987
|
-
)
|
|
3199
|
+
children: /* @__PURE__ */ jsx("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: cn(bodyPadding && "p-(--cmp-listExpansionItem-body-padding)"), children }) })
|
|
2988
3200
|
}
|
|
2989
3201
|
)
|
|
2990
3202
|
]
|
|
@@ -2992,69 +3204,182 @@ var SExpansionItem = forwardRef(
|
|
|
2992
3204
|
);
|
|
2993
3205
|
}
|
|
2994
3206
|
);
|
|
2995
|
-
var
|
|
3207
|
+
var SList = forwardRef(function SList2({ className, children, useGap = false, usePadding = false, ...rest }, ref) {
|
|
2996
3208
|
return /* @__PURE__ */ jsx(
|
|
2997
|
-
"
|
|
3209
|
+
"div",
|
|
2998
3210
|
{
|
|
2999
3211
|
ref,
|
|
3000
|
-
"aria-orientation": vertical ? "vertical" : "horizontal",
|
|
3001
3212
|
className: cn(
|
|
3002
|
-
"
|
|
3003
|
-
|
|
3213
|
+
useGap && "flex flex-col gap-(--cmp-list-group-gap)",
|
|
3214
|
+
usePadding && "p-(--cmp-list-group-padding)",
|
|
3004
3215
|
className
|
|
3005
3216
|
),
|
|
3006
|
-
|
|
3007
|
-
|
|
3217
|
+
...rest,
|
|
3218
|
+
children
|
|
3008
3219
|
}
|
|
3009
3220
|
);
|
|
3010
3221
|
});
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
var SCROLLBAR_TRACK_BG_WHITE_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-white)] [&::-webkit-scrollbar]:bg-[var(--color-white)] [&::-webkit-scrollbar-track]:bg-[var(--color-white)] [&::-webkit-scrollbar-corner]:bg-[var(--color-white)]";
|
|
3018
|
-
var SCROLLBAR_TRACK_BORDER_CLASS = "[&::-webkit-scrollbar-track:vertical]:[border-left:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-track:horizontal]:[border-top:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-corner]:[border-top:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-corner]:[border-left:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-thumb:vertical]:[border-left-width:3px] [&::-webkit-scrollbar-thumb:horizontal]:[border-top-width:3px]";
|
|
3019
|
-
var AXIS_CLASS = {
|
|
3020
|
-
vertical: "overflow-x-hidden overflow-y-auto",
|
|
3021
|
-
horizontal: "overflow-x-auto overflow-y-hidden",
|
|
3022
|
-
both: "overflow-auto"
|
|
3023
|
-
};
|
|
3024
|
-
var SScrollArea = forwardRef(function SScrollArea2({
|
|
3025
|
-
axis = "both",
|
|
3026
|
-
background = false,
|
|
3222
|
+
SList.displayName = "SList";
|
|
3223
|
+
var SListItem = forwardRef(function SListItem2({
|
|
3224
|
+
title,
|
|
3225
|
+
depth = 1,
|
|
3226
|
+
leading,
|
|
3227
|
+
trailing,
|
|
3027
3228
|
bordered = false,
|
|
3028
|
-
|
|
3029
|
-
|
|
3229
|
+
accentStripe = false,
|
|
3230
|
+
dense = false,
|
|
3231
|
+
disabled = false,
|
|
3030
3232
|
className,
|
|
3031
|
-
|
|
3032
|
-
|
|
3233
|
+
onMouseEnter,
|
|
3234
|
+
onMouseLeave,
|
|
3033
3235
|
...rest
|
|
3034
3236
|
}, ref) {
|
|
3035
|
-
const
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
|
|
3237
|
+
const [hovered, setHovered] = useState(false);
|
|
3238
|
+
const renderState = { hovered, disabled };
|
|
3239
|
+
const titleNode = typeof title === "function" ? title(renderState) : title;
|
|
3240
|
+
const leadingNode = typeof leading === "function" ? leading(renderState) : leading;
|
|
3241
|
+
const trailingNode = typeof trailing === "function" ? trailing(renderState) : trailing;
|
|
3242
|
+
const handleMouseEnter = (event) => {
|
|
3243
|
+
if (!disabled) setHovered(true);
|
|
3244
|
+
onMouseEnter?.(event);
|
|
3245
|
+
};
|
|
3246
|
+
const handleMouseLeave = (event) => {
|
|
3247
|
+
setHovered(false);
|
|
3248
|
+
onMouseLeave?.(event);
|
|
3249
|
+
};
|
|
3250
|
+
return /* @__PURE__ */ jsxs(
|
|
3039
3251
|
"div",
|
|
3040
3252
|
{
|
|
3041
3253
|
ref,
|
|
3254
|
+
"aria-disabled": disabled || void 0,
|
|
3255
|
+
onMouseEnter: handleMouseEnter,
|
|
3256
|
+
onMouseLeave: handleMouseLeave,
|
|
3042
3257
|
className: cn(
|
|
3043
|
-
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3258
|
+
"group/list-item relative flex w-full items-center justify-between bg-(--cmp-listItem-bg-default) text-left text-[14px] font-bold leading-[24px] text-(--cmp-listItem-text-default)",
|
|
3259
|
+
disabled ? "pointer-events-none cursor-not-allowed text-(--sys-color-disabled-text)" : "hover:bg-(--cmp-listItem-bg-hover)",
|
|
3260
|
+
dense ? "h-[32px] py-(--cmp-listItem-paddingY-dense)" : "h-[40px] py-(--cmp-listItem-paddingY-normal)",
|
|
3261
|
+
"gap-(--cmp-listItem-gap)",
|
|
3262
|
+
"pr-(--cmp-listItem-paddingX)",
|
|
3263
|
+
depth === 2 ? "pl-[calc(var(--cmp-listItem-paddingX)+32px)]" : depth === 3 ? "pl-[calc(var(--cmp-listItem-paddingX)+64px)]" : "pl-(--cmp-listItem-paddingX)",
|
|
3264
|
+
bordered ? "overflow-hidden rounded-(--cmp-listItem-radius-bordered) border border-(--cmp-listItem-border-default) hover:border-(--cmp-listItem-bordered-border-hover)" : "border-b border-(--cmp-listItem-border-default)",
|
|
3047
3265
|
className
|
|
3048
3266
|
),
|
|
3049
|
-
style: mergedStyle,
|
|
3050
3267
|
...rest,
|
|
3051
|
-
children
|
|
3268
|
+
children: [
|
|
3269
|
+
accentStripe && !bordered && /* @__PURE__ */ jsx(
|
|
3270
|
+
"span",
|
|
3271
|
+
{
|
|
3272
|
+
"aria-hidden": "true",
|
|
3273
|
+
className: "pointer-events-none absolute bottom-[-1px] left-0 top-0 w-(--cmp-listItem-accentStripe-width) bg-(--cmp-listItem-accentStripe-color)"
|
|
3274
|
+
}
|
|
3275
|
+
),
|
|
3276
|
+
leadingNode,
|
|
3277
|
+
/* @__PURE__ */ jsx("span", { className: "flex min-w-0 flex-1 flex-col", children: /* @__PURE__ */ jsx("span", { children: titleNode }) }),
|
|
3278
|
+
trailingNode
|
|
3279
|
+
]
|
|
3052
3280
|
}
|
|
3053
3281
|
);
|
|
3054
3282
|
});
|
|
3283
|
+
SListItem.displayName = "SListItem";
|
|
3055
3284
|
|
|
3056
|
-
// src/
|
|
3057
|
-
var
|
|
3285
|
+
// src/lib/floating-anim.ts
|
|
3286
|
+
var FLOATING_SLIDE_ANIM = [
|
|
3287
|
+
"data-[state=open]:data-[side=top]:animate-floating-in-top",
|
|
3288
|
+
"data-[state=delayed-open]:data-[side=top]:animate-floating-in-top",
|
|
3289
|
+
"data-[state=instant-open]:data-[side=top]:animate-floating-in-top",
|
|
3290
|
+
"data-[state=closed]:data-[side=top]:animate-floating-out-top",
|
|
3291
|
+
"data-[state=open]:data-[side=bottom]:animate-floating-in-bottom",
|
|
3292
|
+
"data-[state=delayed-open]:data-[side=bottom]:animate-floating-in-bottom",
|
|
3293
|
+
"data-[state=instant-open]:data-[side=bottom]:animate-floating-in-bottom",
|
|
3294
|
+
"data-[state=closed]:data-[side=bottom]:animate-floating-out-bottom",
|
|
3295
|
+
"data-[state=open]:data-[side=left]:animate-floating-in-left",
|
|
3296
|
+
"data-[state=delayed-open]:data-[side=left]:animate-floating-in-left",
|
|
3297
|
+
"data-[state=instant-open]:data-[side=left]:animate-floating-in-left",
|
|
3298
|
+
"data-[state=closed]:data-[side=left]:animate-floating-out-left",
|
|
3299
|
+
"data-[state=open]:data-[side=right]:animate-floating-in-right",
|
|
3300
|
+
"data-[state=delayed-open]:data-[side=right]:animate-floating-in-right",
|
|
3301
|
+
"data-[state=instant-open]:data-[side=right]:animate-floating-in-right",
|
|
3302
|
+
"data-[state=closed]:data-[side=right]:animate-floating-out-right"
|
|
3303
|
+
].join(" ");
|
|
3304
|
+
var PortalContainerContext = createContext(null);
|
|
3305
|
+
var InsideModalContext = createContext(false);
|
|
3306
|
+
var PortalContainerProvider = PortalContainerContext.Provider;
|
|
3307
|
+
var InsideModalProvider = InsideModalContext.Provider;
|
|
3308
|
+
function usePortalContainer() {
|
|
3309
|
+
return useContext(PortalContainerContext) ?? void 0;
|
|
3310
|
+
}
|
|
3311
|
+
function useInsideModal() {
|
|
3312
|
+
return useContext(InsideModalContext);
|
|
3313
|
+
}
|
|
3314
|
+
|
|
3315
|
+
// src/lib/sanitize-inline-html.ts
|
|
3316
|
+
var ALLOWED_INLINE_TAGS = /* @__PURE__ */ new Set(["A", "B", "STRONG", "I", "EM", "BR", "SPAN"]);
|
|
3317
|
+
var ALLOWED_ATTRS_BY_TAG = {
|
|
3318
|
+
A: /* @__PURE__ */ new Set(["href", "target", "rel", "class"])
|
|
3319
|
+
};
|
|
3320
|
+
var COMMON_ALLOWED_ATTRS = /* @__PURE__ */ new Set(["class"]);
|
|
3321
|
+
var SAFE_HREF_RE = /^(https?:|mailto:|tel:|\/|#|\.)/i;
|
|
3322
|
+
var DROP_CONTENT_TAGS = /* @__PURE__ */ new Set([
|
|
3323
|
+
"SCRIPT",
|
|
3324
|
+
"STYLE",
|
|
3325
|
+
"IFRAME",
|
|
3326
|
+
"OBJECT",
|
|
3327
|
+
"EMBED",
|
|
3328
|
+
"META",
|
|
3329
|
+
"LINK",
|
|
3330
|
+
"BASE",
|
|
3331
|
+
"NOSCRIPT",
|
|
3332
|
+
// SVG/MATH 는 foreign-content 파싱 모드로 전환되어 재직렬화 시 다른 트리로
|
|
3333
|
+
// 재파싱될 수 있다(mXSS 벡터). 인라인 라벨에 필요 없으므로 통째로 제거한다.
|
|
3334
|
+
"SVG",
|
|
3335
|
+
"MATH",
|
|
3336
|
+
"TEMPLATE"
|
|
3337
|
+
]);
|
|
3338
|
+
var escapeHtml = (value) => value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
3339
|
+
var sanitizeNode = (node) => {
|
|
3340
|
+
if (node.nodeType === Node.COMMENT_NODE) {
|
|
3341
|
+
node.remove();
|
|
3342
|
+
return;
|
|
3343
|
+
}
|
|
3344
|
+
if (node.nodeType !== Node.ELEMENT_NODE) return;
|
|
3345
|
+
const element = node;
|
|
3346
|
+
const tagName = element.tagName;
|
|
3347
|
+
if (DROP_CONTENT_TAGS.has(tagName)) {
|
|
3348
|
+
element.remove();
|
|
3349
|
+
return;
|
|
3350
|
+
}
|
|
3351
|
+
Array.from(element.childNodes).forEach((child) => sanitizeNode(child));
|
|
3352
|
+
if (ALLOWED_INLINE_TAGS.has(tagName)) {
|
|
3353
|
+
if (element.hasAttribute("className")) {
|
|
3354
|
+
const val = element.getAttribute("className");
|
|
3355
|
+
element.removeAttribute("className");
|
|
3356
|
+
if (!element.hasAttribute("class")) element.setAttribute("class", val);
|
|
3357
|
+
}
|
|
3358
|
+
const allowedAttrs = ALLOWED_ATTRS_BY_TAG[tagName] ?? COMMON_ALLOWED_ATTRS;
|
|
3359
|
+
Array.from(element.attributes).forEach((attr) => {
|
|
3360
|
+
if (!allowedAttrs.has(attr.name)) element.removeAttribute(attr.name);
|
|
3361
|
+
});
|
|
3362
|
+
if (tagName === "A") {
|
|
3363
|
+
const href = element.getAttribute("href");
|
|
3364
|
+
if (href !== null && href !== "" && !SAFE_HREF_RE.test(href)) element.removeAttribute("href");
|
|
3365
|
+
if (element.hasAttribute("target")) {
|
|
3366
|
+
element.setAttribute("rel", "noopener noreferrer");
|
|
3367
|
+
}
|
|
3368
|
+
}
|
|
3369
|
+
return;
|
|
3370
|
+
}
|
|
3371
|
+
const parent = element.parentNode;
|
|
3372
|
+
if (parent == null) return;
|
|
3373
|
+
while (element.firstChild) parent.insertBefore(element.firstChild, element);
|
|
3374
|
+
parent.removeChild(element);
|
|
3375
|
+
};
|
|
3376
|
+
var sanitizeInlineHtml = (value) => {
|
|
3377
|
+
if (typeof document === "undefined") return escapeHtml(value);
|
|
3378
|
+
const template = document.createElement("template");
|
|
3379
|
+
template.innerHTML = value;
|
|
3380
|
+
Array.from(template.content.childNodes).forEach((child) => sanitizeNode(child));
|
|
3381
|
+
return template.innerHTML;
|
|
3382
|
+
};
|
|
3058
3383
|
|
|
3059
3384
|
// src/components/STag/tag.config.ts
|
|
3060
3385
|
var TAG_SHAPES = ["square", "pill"];
|
|
@@ -3148,12 +3473,421 @@ var STag = forwardRef(function STag2({
|
|
|
3148
3473
|
}
|
|
3149
3474
|
);
|
|
3150
3475
|
});
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3154
|
-
|
|
3155
|
-
|
|
3156
|
-
|
|
3476
|
+
var SIZE = {
|
|
3477
|
+
xxs: { icon: 12, radius: "sm" },
|
|
3478
|
+
xs: { icon: 16, radius: "sm" },
|
|
3479
|
+
sm: { icon: 20, radius: "sm" },
|
|
3480
|
+
md: { icon: 24, radius: "md" },
|
|
3481
|
+
lg: { icon: 32, radius: "md" }
|
|
3482
|
+
};
|
|
3483
|
+
var TOOLTIP_HIDE_DELAY_MS = 100;
|
|
3484
|
+
function SGhostButton({
|
|
3485
|
+
icon,
|
|
3486
|
+
size = "sm",
|
|
3487
|
+
intent = "default",
|
|
3488
|
+
ariaLabel = "",
|
|
3489
|
+
ariaPressed,
|
|
3490
|
+
tooltipText,
|
|
3491
|
+
disabled = false,
|
|
3492
|
+
onClick,
|
|
3493
|
+
anchorClassName,
|
|
3494
|
+
anchorStyle,
|
|
3495
|
+
className,
|
|
3496
|
+
style
|
|
3497
|
+
}) {
|
|
3498
|
+
const portalContainer = usePortalContainer();
|
|
3499
|
+
const [open, setOpen] = useState(false);
|
|
3500
|
+
const hideTimer = useRef(void 0);
|
|
3501
|
+
const cancelHide = () => {
|
|
3502
|
+
if (hideTimer.current) {
|
|
3503
|
+
clearTimeout(hideTimer.current);
|
|
3504
|
+
hideTimer.current = void 0;
|
|
3505
|
+
}
|
|
3506
|
+
};
|
|
3507
|
+
const openNow = () => {
|
|
3508
|
+
cancelHide();
|
|
3509
|
+
setOpen(true);
|
|
3510
|
+
};
|
|
3511
|
+
const startHide = () => {
|
|
3512
|
+
cancelHide();
|
|
3513
|
+
hideTimer.current = setTimeout(() => setOpen(false), TOOLTIP_HIDE_DELAY_MS);
|
|
3514
|
+
};
|
|
3515
|
+
const s = SIZE[size];
|
|
3516
|
+
const contentColor = disabled ? intent === "inverse" ? "var(--cmp-ghostButton-inverse-disabled)" : "var(--cmp-ghostButton-icon-disabled)" : `var(--cmp-ghostButton-${intent}-content)`;
|
|
3517
|
+
const text = (tooltipText ?? "").trim();
|
|
3518
|
+
const hasTooltip = text !== "";
|
|
3519
|
+
const btn = /* @__PURE__ */ jsxs(
|
|
3520
|
+
"button",
|
|
3521
|
+
{
|
|
3522
|
+
type: "button",
|
|
3523
|
+
disabled,
|
|
3524
|
+
"aria-disabled": disabled ? "true" : void 0,
|
|
3525
|
+
"aria-label": ariaLabel.trim() || void 0,
|
|
3526
|
+
"aria-pressed": ariaPressed,
|
|
3527
|
+
tabIndex: disabled ? -1 : void 0,
|
|
3528
|
+
onClick: (e) => {
|
|
3529
|
+
if (disabled) {
|
|
3530
|
+
e.preventDefault();
|
|
3531
|
+
return;
|
|
3532
|
+
}
|
|
3533
|
+
onClick?.(e);
|
|
3534
|
+
},
|
|
3535
|
+
className: cn(
|
|
3536
|
+
"group/ghost-button relative box-border inline-flex items-center justify-center border-none bg-transparent p-0 transition-shadow",
|
|
3537
|
+
disabled ? "cursor-not-allowed" : "cursor-pointer",
|
|
3538
|
+
"focus-visible:outline-none focus-visible:shadow-[0_0_0_2px_var(--cmp-ghostButton-action-hover-bg)]",
|
|
3539
|
+
className
|
|
3540
|
+
),
|
|
3541
|
+
style: {
|
|
3542
|
+
width: `var(--cmp-ghostButton-${size}-size)`,
|
|
3543
|
+
height: `var(--cmp-ghostButton-${size}-size)`,
|
|
3544
|
+
borderRadius: `var(--cmp-ghostButton-radius-${s.radius})`,
|
|
3545
|
+
...style
|
|
3546
|
+
},
|
|
3547
|
+
children: [
|
|
3548
|
+
!disabled && /* @__PURE__ */ jsx(
|
|
3549
|
+
"span",
|
|
3550
|
+
{
|
|
3551
|
+
"aria-hidden": true,
|
|
3552
|
+
className: "pointer-events-none absolute inset-0 rounded-[inherit] opacity-0 transition-opacity duration-200 group-hover/ghost-button:opacity-5",
|
|
3553
|
+
style: { background: `var(--cmp-ghostButton-${intent}-hover-bg)` }
|
|
3554
|
+
}
|
|
3555
|
+
),
|
|
3556
|
+
/* @__PURE__ */ jsx(SIcon, { name: icon, size: s.icon, color: contentColor })
|
|
3557
|
+
]
|
|
3558
|
+
}
|
|
3559
|
+
);
|
|
3560
|
+
if (!hasTooltip) return btn;
|
|
3561
|
+
return /* @__PURE__ */ jsxs(RPopover2.Root, { open, onOpenChange: setOpen, children: [
|
|
3562
|
+
/* @__PURE__ */ jsx(RPopover2.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
3563
|
+
"span",
|
|
3564
|
+
{
|
|
3565
|
+
className: cn("inline-flex", anchorClassName),
|
|
3566
|
+
style: anchorStyle,
|
|
3567
|
+
onMouseEnter: openNow,
|
|
3568
|
+
onMouseLeave: startHide,
|
|
3569
|
+
onFocus: openNow,
|
|
3570
|
+
onBlur: startHide,
|
|
3571
|
+
children: btn
|
|
3572
|
+
}
|
|
3573
|
+
) }),
|
|
3574
|
+
/* @__PURE__ */ jsx(RPopover2.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
3575
|
+
RPopover2.Content,
|
|
3576
|
+
{
|
|
3577
|
+
side: "top",
|
|
3578
|
+
sideOffset: 4,
|
|
3579
|
+
className: cn("z-50", FLOATING_SLIDE_ANIM),
|
|
3580
|
+
"aria-hidden": true,
|
|
3581
|
+
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
3582
|
+
onMouseEnter: cancelHide,
|
|
3583
|
+
onMouseLeave: startHide,
|
|
3584
|
+
children: /* @__PURE__ */ jsx(STag, { shape: "square", size: "xs", color: "grey", label: text })
|
|
3585
|
+
}
|
|
3586
|
+
) })
|
|
3587
|
+
] });
|
|
3588
|
+
}
|
|
3589
|
+
var HIDE_DELAY_MS = 100;
|
|
3590
|
+
function useBody(content, message = []) {
|
|
3591
|
+
if (content != null) return content;
|
|
3592
|
+
if (message.length === 0) return null;
|
|
3593
|
+
const singleLine = message.length === 1;
|
|
3594
|
+
return /* @__PURE__ */ jsx(Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsx(
|
|
3595
|
+
"div",
|
|
3596
|
+
{
|
|
3597
|
+
className: singleLine ? "leading-[24px]" : void 0,
|
|
3598
|
+
dangerouslySetInnerHTML: { __html: sanitizeInlineHtml(line) }
|
|
3599
|
+
},
|
|
3600
|
+
i
|
|
3601
|
+
)) });
|
|
3602
|
+
}
|
|
3603
|
+
var STooltip = forwardRef(function STooltip2({
|
|
3604
|
+
content,
|
|
3605
|
+
message = [],
|
|
3606
|
+
trigger = "hover",
|
|
3607
|
+
placement = "top",
|
|
3608
|
+
tooltipType = "default",
|
|
3609
|
+
useClose = false,
|
|
3610
|
+
disabled = false,
|
|
3611
|
+
children,
|
|
3612
|
+
icon = "helpOutline",
|
|
3613
|
+
iconSize = 12,
|
|
3614
|
+
color = "#01BB4B",
|
|
3615
|
+
ariaLabel,
|
|
3616
|
+
className,
|
|
3617
|
+
triggerClassName,
|
|
3618
|
+
style
|
|
3619
|
+
}, ref) {
|
|
3620
|
+
const portalContainer = usePortalContainer();
|
|
3621
|
+
const [open, setOpen] = useState(false);
|
|
3622
|
+
const hideTimer = useRef(void 0);
|
|
3623
|
+
const cancelHide = () => {
|
|
3624
|
+
if (hideTimer.current) {
|
|
3625
|
+
clearTimeout(hideTimer.current);
|
|
3626
|
+
hideTimer.current = void 0;
|
|
3627
|
+
}
|
|
3628
|
+
};
|
|
3629
|
+
const openNow = () => {
|
|
3630
|
+
cancelHide();
|
|
3631
|
+
setOpen(true);
|
|
3632
|
+
};
|
|
3633
|
+
const startHide = () => {
|
|
3634
|
+
if (useClose) return;
|
|
3635
|
+
cancelHide();
|
|
3636
|
+
hideTimer.current = setTimeout(() => setOpen(false), HIDE_DELAY_MS);
|
|
3637
|
+
};
|
|
3638
|
+
useImperativeHandle(
|
|
3639
|
+
ref,
|
|
3640
|
+
() => ({
|
|
3641
|
+
show: () => {
|
|
3642
|
+
cancelHide();
|
|
3643
|
+
setOpen(true);
|
|
3644
|
+
},
|
|
3645
|
+
hide: () => {
|
|
3646
|
+
cancelHide();
|
|
3647
|
+
setOpen(false);
|
|
3648
|
+
}
|
|
3649
|
+
}),
|
|
3650
|
+
[]
|
|
3651
|
+
);
|
|
3652
|
+
const body = useBody(content, message);
|
|
3653
|
+
const bg = `var(--cmp-tooltip-${tooltipType}-bg)`;
|
|
3654
|
+
const fg = `var(--cmp-tooltip-${tooltipType}-content)`;
|
|
3655
|
+
const triggerNode = children ?? /* @__PURE__ */ jsx("span", { className: cn("inline-flex cursor-pointer", triggerClassName), "aria-label": ariaLabel, children: /* @__PURE__ */ jsx(SIcon, { name: icon, size: iconSize, color }) });
|
|
3656
|
+
if (disabled || body == null) return /* @__PURE__ */ jsx(Fragment, { children: triggerNode });
|
|
3657
|
+
const isHover = trigger === "hover";
|
|
3658
|
+
const contentClass = cn(
|
|
3659
|
+
"z-50 w-fit whitespace-nowrap rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px] shadow-normal-sm",
|
|
3660
|
+
FLOATING_SLIDE_ANIM,
|
|
3661
|
+
className
|
|
3662
|
+
);
|
|
3663
|
+
const contentStyle = {
|
|
3664
|
+
background: bg,
|
|
3665
|
+
color: fg,
|
|
3666
|
+
fontWeight: tooltipType === "default" ? 500 : 700,
|
|
3667
|
+
...style
|
|
3668
|
+
};
|
|
3669
|
+
return /* @__PURE__ */ jsxs(RPopover2.Root, { open, onOpenChange: setOpen, children: [
|
|
3670
|
+
isHover ? (
|
|
3671
|
+
// hover: Anchor(위치 기준) + 직접 mouse 핸들러 — 클릭으로 토글되지 않도록 Trigger 미사용
|
|
3672
|
+
/* @__PURE__ */ jsx(RPopover2.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
3673
|
+
"span",
|
|
3674
|
+
{
|
|
3675
|
+
className: "inline-flex",
|
|
3676
|
+
onMouseEnter: openNow,
|
|
3677
|
+
onMouseLeave: startHide,
|
|
3678
|
+
onFocus: openNow,
|
|
3679
|
+
onBlur: startHide,
|
|
3680
|
+
children: triggerNode
|
|
3681
|
+
}
|
|
3682
|
+
) })
|
|
3683
|
+
) : /* @__PURE__ */ jsx(RPopover2.Trigger, { asChild: true, children: triggerNode }),
|
|
3684
|
+
/* @__PURE__ */ jsx(RPopover2.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
|
|
3685
|
+
RPopover2.Content,
|
|
3686
|
+
{
|
|
3687
|
+
side: placement,
|
|
3688
|
+
sideOffset: 8,
|
|
3689
|
+
className: contentClass,
|
|
3690
|
+
style: contentStyle,
|
|
3691
|
+
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
3692
|
+
onInteractOutside: (e) => {
|
|
3693
|
+
if (useClose) e.preventDefault();
|
|
3694
|
+
},
|
|
3695
|
+
onEscapeKeyDown: (e) => {
|
|
3696
|
+
if (useClose) e.preventDefault();
|
|
3697
|
+
},
|
|
3698
|
+
onMouseEnter: isHover ? cancelHide : void 0,
|
|
3699
|
+
onMouseLeave: isHover ? startHide : void 0,
|
|
3700
|
+
children: [
|
|
3701
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-[12px]", children: [
|
|
3702
|
+
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: body }),
|
|
3703
|
+
useClose && /* @__PURE__ */ jsx(
|
|
3704
|
+
SGhostButton,
|
|
3705
|
+
{
|
|
3706
|
+
icon: "close",
|
|
3707
|
+
size: "xs",
|
|
3708
|
+
intent: tooltipType === "default" ? "inverse" : "default",
|
|
3709
|
+
ariaLabel: "\uB2EB\uAE30",
|
|
3710
|
+
className: "shrink-0",
|
|
3711
|
+
onClick: () => {
|
|
3712
|
+
cancelHide();
|
|
3713
|
+
setOpen(false);
|
|
3714
|
+
}
|
|
3715
|
+
}
|
|
3716
|
+
)
|
|
3717
|
+
] }),
|
|
3718
|
+
/* @__PURE__ */ jsx(RPopover2.Arrow, { width: 16, height: 12, style: { fill: bg } })
|
|
3719
|
+
]
|
|
3720
|
+
}
|
|
3721
|
+
) })
|
|
3722
|
+
] });
|
|
3723
|
+
});
|
|
3724
|
+
STooltip.displayName = "STooltip";
|
|
3725
|
+
var topBorderColorClass = {
|
|
3726
|
+
default: "bg-(--cmp-sectionHeaderCard-topBorder-color-default)",
|
|
3727
|
+
accent: "bg-(--cmp-sectionHeaderCard-topBorder-color-accent)"
|
|
3728
|
+
};
|
|
3729
|
+
var SSectionHeaderCardBody = forwardRef(
|
|
3730
|
+
function SSectionHeaderCardBody2({ className, children, ...rest }, ref) {
|
|
3731
|
+
return /* @__PURE__ */ jsx("div", { ref, className, ...rest, children });
|
|
3732
|
+
}
|
|
3733
|
+
);
|
|
3734
|
+
var SSectionHeaderCardHeader = forwardRef(
|
|
3735
|
+
function SSectionHeaderCardHeader2({
|
|
3736
|
+
title,
|
|
3737
|
+
marker = false,
|
|
3738
|
+
required = false,
|
|
3739
|
+
helpText,
|
|
3740
|
+
subtitle,
|
|
3741
|
+
slot,
|
|
3742
|
+
thickness = false,
|
|
3743
|
+
className,
|
|
3744
|
+
...rest
|
|
3745
|
+
}, ref) {
|
|
3746
|
+
const hasHelp = helpText != null && helpText.length > 0;
|
|
3747
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3748
|
+
thickness && /* @__PURE__ */ jsx(
|
|
3749
|
+
"div",
|
|
3750
|
+
{
|
|
3751
|
+
className: cn(
|
|
3752
|
+
"h-(--cmp-sectionHeaderCard-topBorder-thickness) w-full shrink-0",
|
|
3753
|
+
topBorderColorClass[thickness]
|
|
3754
|
+
)
|
|
3755
|
+
}
|
|
3756
|
+
),
|
|
3757
|
+
/* @__PURE__ */ jsxs(
|
|
3758
|
+
"div",
|
|
3759
|
+
{
|
|
3760
|
+
ref,
|
|
3761
|
+
className: cn(
|
|
3762
|
+
"box-border flex h-[40px] w-full shrink-0 items-center gap-[8px] overflow-hidden border-b border-(--sys-color-border-default) bg-(--sys-color-bg-frame) px-[16px] py-[4px]",
|
|
3763
|
+
className
|
|
3764
|
+
),
|
|
3765
|
+
...rest,
|
|
3766
|
+
children: [
|
|
3767
|
+
marker && /* @__PURE__ */ jsx(SBadge, { color: "darkblue", className: "shrink-0" }),
|
|
3768
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 shrink-0 items-center gap-[8px]", children: [
|
|
3769
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-[12px] font-bold leading-[20px] text-(--sys-color-fg-brand)", children: title }),
|
|
3770
|
+
required && /* @__PURE__ */ jsx(
|
|
3771
|
+
SIcon,
|
|
3772
|
+
{
|
|
3773
|
+
name: "star",
|
|
3774
|
+
size: 16,
|
|
3775
|
+
color: "var(--sys-color-fg-accent)",
|
|
3776
|
+
className: "shrink-0"
|
|
3777
|
+
}
|
|
3778
|
+
),
|
|
3779
|
+
hasHelp && /* @__PURE__ */ jsx(
|
|
3780
|
+
STooltip,
|
|
3781
|
+
{
|
|
3782
|
+
trigger: "hover",
|
|
3783
|
+
icon: "helpOutline",
|
|
3784
|
+
iconSize: 16,
|
|
3785
|
+
color: "var(--sys-color-fg-success)",
|
|
3786
|
+
message: helpText,
|
|
3787
|
+
triggerClassName: "shrink-0 rounded-[4px]"
|
|
3788
|
+
}
|
|
3789
|
+
)
|
|
3790
|
+
] }),
|
|
3791
|
+
subtitle && /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-[12px] font-normal leading-[20px] text-(--sys-color-fg-secondary)", children: subtitle }),
|
|
3792
|
+
/* @__PURE__ */ jsx("div", { className: "ml-auto flex min-h-6 min-w-0 flex-1 items-center justify-end", children: slot })
|
|
3793
|
+
]
|
|
3794
|
+
}
|
|
3795
|
+
)
|
|
3796
|
+
] });
|
|
3797
|
+
}
|
|
3798
|
+
);
|
|
3799
|
+
var SSectionHeaderCardRoot = forwardRef(
|
|
3800
|
+
function SSectionHeaderCard({ className, children, ...rest }, ref) {
|
|
3801
|
+
return /* @__PURE__ */ jsx(
|
|
3802
|
+
"div",
|
|
3803
|
+
{
|
|
3804
|
+
ref,
|
|
3805
|
+
className: cn(
|
|
3806
|
+
"box-border flex w-full flex-col items-stretch overflow-hidden rounded-[8px] border border-(--sys-color-border-default) bg-(--sys-color-bg-frame)",
|
|
3807
|
+
className
|
|
3808
|
+
),
|
|
3809
|
+
...rest,
|
|
3810
|
+
children
|
|
3811
|
+
}
|
|
3812
|
+
);
|
|
3813
|
+
}
|
|
3814
|
+
);
|
|
3815
|
+
var SSectionHeaderCard2 = Object.assign(SSectionHeaderCardRoot, {
|
|
3816
|
+
Header: SSectionHeaderCardHeader,
|
|
3817
|
+
Body: SSectionHeaderCardBody
|
|
3818
|
+
});
|
|
3819
|
+
SSectionHeaderCardRoot.displayName = "SSectionHeaderCard";
|
|
3820
|
+
SSectionHeaderCardHeader.displayName = "SSectionHeaderCard.Header";
|
|
3821
|
+
SSectionHeaderCardBody.displayName = "SSectionHeaderCard.Body";
|
|
3822
|
+
var SDivider = forwardRef(function SDivider2({ vertical = false, className, style, ...rest }, ref) {
|
|
3823
|
+
return /* @__PURE__ */ jsx(
|
|
3824
|
+
"hr",
|
|
3825
|
+
{
|
|
3826
|
+
ref,
|
|
3827
|
+
"aria-orientation": vertical ? "vertical" : "horizontal",
|
|
3828
|
+
className: cn(
|
|
3829
|
+
"shrink-0 border-0",
|
|
3830
|
+
vertical ? "inline-block h-auto w-px self-stretch" : "block h-px w-full",
|
|
3831
|
+
className
|
|
3832
|
+
),
|
|
3833
|
+
style: { backgroundColor: "var(--sys-color-divider-default, #E1E1E1)", ...style },
|
|
3834
|
+
...rest
|
|
3835
|
+
}
|
|
3836
|
+
);
|
|
3837
|
+
});
|
|
3838
|
+
|
|
3839
|
+
// src/lib/scrollbar.ts
|
|
3840
|
+
var FIREFOX_SCROLLBAR_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-width:thin] supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_transparent]";
|
|
3841
|
+
var SCROLLBAR_CLASS = `${FIREFOX_SCROLLBAR_CLASS} [&::-webkit-scrollbar]:h-[12px] [&::-webkit-scrollbar]:w-[12px] [&::-webkit-scrollbar]:bg-transparent [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:border-2 [&::-webkit-scrollbar-thumb]:border-solid [&::-webkit-scrollbar-thumb]:border-transparent [&::-webkit-scrollbar-thumb]:bg-[var(--color-grey-45)] [&::-webkit-scrollbar-thumb]:bg-clip-padding`;
|
|
3842
|
+
var SCROLLBAR_HIDDEN_CLASS = "[scrollbar-width:none] [&::-webkit-scrollbar]:hidden";
|
|
3843
|
+
var SCROLLBAR_TRACK_BG_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-grey-10)] [&::-webkit-scrollbar]:bg-[var(--color-grey-10)] [&::-webkit-scrollbar-track]:bg-[var(--color-grey-10)] [&::-webkit-scrollbar-corner]:bg-[var(--color-grey-10)]";
|
|
3844
|
+
var SCROLLBAR_TRACK_BG_WHITE_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-white)] [&::-webkit-scrollbar]:bg-[var(--color-white)] [&::-webkit-scrollbar-track]:bg-[var(--color-white)] [&::-webkit-scrollbar-corner]:bg-[var(--color-white)]";
|
|
3845
|
+
var SCROLLBAR_TRACK_BORDER_CLASS = "[&::-webkit-scrollbar-track:vertical]:[border-left:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-track:horizontal]:[border-top:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-corner]:[border-top:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-corner]:[border-left:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-thumb:vertical]:[border-left-width:3px] [&::-webkit-scrollbar-thumb:horizontal]:[border-top-width:3px]";
|
|
3846
|
+
var AXIS_CLASS = {
|
|
3847
|
+
vertical: "overflow-x-hidden overflow-y-auto",
|
|
3848
|
+
horizontal: "overflow-x-auto overflow-y-hidden",
|
|
3849
|
+
both: "overflow-auto"
|
|
3850
|
+
};
|
|
3851
|
+
var SScrollArea = forwardRef(function SScrollArea2({
|
|
3852
|
+
axis = "both",
|
|
3853
|
+
background = false,
|
|
3854
|
+
bordered = false,
|
|
3855
|
+
maxHeight,
|
|
3856
|
+
maxWidth,
|
|
3857
|
+
className,
|
|
3858
|
+
style,
|
|
3859
|
+
children,
|
|
3860
|
+
...rest
|
|
3861
|
+
}, ref) {
|
|
3862
|
+
const mergedStyle = { ...style };
|
|
3863
|
+
if (maxHeight) mergedStyle.maxHeight = maxHeight;
|
|
3864
|
+
if (maxWidth) mergedStyle.maxWidth = maxWidth;
|
|
3865
|
+
return /* @__PURE__ */ jsx(
|
|
3866
|
+
"div",
|
|
3867
|
+
{
|
|
3868
|
+
ref,
|
|
3869
|
+
className: cn(
|
|
3870
|
+
AXIS_CLASS[axis],
|
|
3871
|
+
SCROLLBAR_CLASS,
|
|
3872
|
+
background && SCROLLBAR_TRACK_BG_CLASS,
|
|
3873
|
+
bordered && SCROLLBAR_TRACK_BORDER_CLASS,
|
|
3874
|
+
className
|
|
3875
|
+
),
|
|
3876
|
+
style: mergedStyle,
|
|
3877
|
+
...rest,
|
|
3878
|
+
children
|
|
3879
|
+
}
|
|
3880
|
+
);
|
|
3881
|
+
});
|
|
3882
|
+
|
|
3883
|
+
// src/components/SScrollArea/scrollArea.config.ts
|
|
3884
|
+
var SCROLL_AREA_AXES = ["vertical", "horizontal", "both"];
|
|
3885
|
+
|
|
3886
|
+
// src/components/SButton/button.config.ts
|
|
3887
|
+
var BUTTON_COLORS = ["primary", "secondary", "neutral", "danger"];
|
|
3888
|
+
var BUTTON_SIZES = ["xs", "sm", "md", "lg"];
|
|
3889
|
+
var V = (path) => `var(--cmp-button-${path})`;
|
|
3890
|
+
function buttonPreset(color, outline) {
|
|
3157
3891
|
switch (color) {
|
|
3158
3892
|
case "primary":
|
|
3159
3893
|
return outline ? {
|
|
@@ -3332,7 +4066,13 @@ function renderItems(message, depth = 1) {
|
|
|
3332
4066
|
className: cn("flex items-start", isDepth2 && "pl-[32px]"),
|
|
3333
4067
|
children: [
|
|
3334
4068
|
/* @__PURE__ */ jsx("span", { className: "w-[24px] shrink-0 text-center", "aria-hidden": true, children: isDepth2 ? "\u2022" : "-" }),
|
|
3335
|
-
/* @__PURE__ */ jsx(
|
|
4069
|
+
/* @__PURE__ */ jsx(
|
|
4070
|
+
"p",
|
|
4071
|
+
{
|
|
4072
|
+
className: "m-0 min-w-0 flex-1 break-words",
|
|
4073
|
+
dangerouslySetInnerHTML: { __html: sanitizeInlineHtml(m) }
|
|
4074
|
+
}
|
|
4075
|
+
)
|
|
3336
4076
|
]
|
|
3337
4077
|
},
|
|
3338
4078
|
`${depth}-${i}-${out.length}`
|
|
@@ -3635,36 +4375,6 @@ var loading = {
|
|
|
3635
4375
|
setState({ open: false });
|
|
3636
4376
|
}
|
|
3637
4377
|
};
|
|
3638
|
-
|
|
3639
|
-
// src/lib/floating-anim.ts
|
|
3640
|
-
var FLOATING_SLIDE_ANIM = [
|
|
3641
|
-
"data-[state=open]:data-[side=top]:animate-floating-in-top",
|
|
3642
|
-
"data-[state=delayed-open]:data-[side=top]:animate-floating-in-top",
|
|
3643
|
-
"data-[state=instant-open]:data-[side=top]:animate-floating-in-top",
|
|
3644
|
-
"data-[state=closed]:data-[side=top]:animate-floating-out-top",
|
|
3645
|
-
"data-[state=open]:data-[side=bottom]:animate-floating-in-bottom",
|
|
3646
|
-
"data-[state=delayed-open]:data-[side=bottom]:animate-floating-in-bottom",
|
|
3647
|
-
"data-[state=instant-open]:data-[side=bottom]:animate-floating-in-bottom",
|
|
3648
|
-
"data-[state=closed]:data-[side=bottom]:animate-floating-out-bottom",
|
|
3649
|
-
"data-[state=open]:data-[side=left]:animate-floating-in-left",
|
|
3650
|
-
"data-[state=delayed-open]:data-[side=left]:animate-floating-in-left",
|
|
3651
|
-
"data-[state=instant-open]:data-[side=left]:animate-floating-in-left",
|
|
3652
|
-
"data-[state=closed]:data-[side=left]:animate-floating-out-left",
|
|
3653
|
-
"data-[state=open]:data-[side=right]:animate-floating-in-right",
|
|
3654
|
-
"data-[state=delayed-open]:data-[side=right]:animate-floating-in-right",
|
|
3655
|
-
"data-[state=instant-open]:data-[side=right]:animate-floating-in-right",
|
|
3656
|
-
"data-[state=closed]:data-[side=right]:animate-floating-out-right"
|
|
3657
|
-
].join(" ");
|
|
3658
|
-
var PortalContainerContext = createContext(null);
|
|
3659
|
-
var InsideModalContext = createContext(false);
|
|
3660
|
-
var PortalContainerProvider = PortalContainerContext.Provider;
|
|
3661
|
-
var InsideModalProvider = InsideModalContext.Provider;
|
|
3662
|
-
function usePortalContainer() {
|
|
3663
|
-
return useContext(PortalContainerContext) ?? void 0;
|
|
3664
|
-
}
|
|
3665
|
-
function useInsideModal() {
|
|
3666
|
-
return useContext(InsideModalContext);
|
|
3667
|
-
}
|
|
3668
4378
|
var SIZE_CONFIG = {
|
|
3669
4379
|
sm: {
|
|
3670
4380
|
gap: 4,
|
|
@@ -3751,83 +4461,14 @@ var STextLink = forwardRef(function STextLink2({
|
|
|
3751
4461
|
]
|
|
3752
4462
|
}
|
|
3753
4463
|
);
|
|
3754
|
-
const text = (tooltipText ?? "").trim();
|
|
3755
|
-
if (text === "") return link;
|
|
3756
|
-
return /* @__PURE__ */ jsx(RTooltip.Provider, { delayDuration: 200, children: /* @__PURE__ */ jsxs(RTooltip.Root, { children: [
|
|
3757
|
-
/* @__PURE__ */ jsx(RTooltip.Trigger, { asChild: true, children: link }),
|
|
3758
|
-
/* @__PURE__ */ jsx(RTooltip.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(RTooltip.Content, { side: "top", sideOffset: 4, className: cn("z-50", FLOATING_SLIDE_ANIM), children: /* @__PURE__ */ jsx(STag, { shape: "square", size: "xs", color: "grey", label: text }) }) })
|
|
3759
|
-
] }) });
|
|
3760
|
-
});
|
|
3761
|
-
|
|
3762
|
-
// src/lib/sanitize-inline-html.ts
|
|
3763
|
-
var ALLOWED_INLINE_TAGS = /* @__PURE__ */ new Set(["A", "B", "STRONG", "I", "EM", "BR", "SPAN"]);
|
|
3764
|
-
var ALLOWED_ATTRS_BY_TAG = {
|
|
3765
|
-
A: /* @__PURE__ */ new Set(["href", "target", "rel", "class"])
|
|
3766
|
-
};
|
|
3767
|
-
var COMMON_ALLOWED_ATTRS = /* @__PURE__ */ new Set(["class"]);
|
|
3768
|
-
var SAFE_HREF_RE = /^(https?:|mailto:|tel:|\/|#|\.)/i;
|
|
3769
|
-
var DROP_CONTENT_TAGS = /* @__PURE__ */ new Set([
|
|
3770
|
-
"SCRIPT",
|
|
3771
|
-
"STYLE",
|
|
3772
|
-
"IFRAME",
|
|
3773
|
-
"OBJECT",
|
|
3774
|
-
"EMBED",
|
|
3775
|
-
"META",
|
|
3776
|
-
"LINK",
|
|
3777
|
-
"BASE",
|
|
3778
|
-
"NOSCRIPT",
|
|
3779
|
-
// SVG/MATH 는 foreign-content 파싱 모드로 전환되어 재직렬화 시 다른 트리로
|
|
3780
|
-
// 재파싱될 수 있다(mXSS 벡터). 인라인 라벨에 필요 없으므로 통째로 제거한다.
|
|
3781
|
-
"SVG",
|
|
3782
|
-
"MATH",
|
|
3783
|
-
"TEMPLATE"
|
|
3784
|
-
]);
|
|
3785
|
-
var escapeHtml = (value) => value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
3786
|
-
var sanitizeNode = (node) => {
|
|
3787
|
-
if (node.nodeType === Node.COMMENT_NODE) {
|
|
3788
|
-
node.remove();
|
|
3789
|
-
return;
|
|
3790
|
-
}
|
|
3791
|
-
if (node.nodeType !== Node.ELEMENT_NODE) return;
|
|
3792
|
-
const element = node;
|
|
3793
|
-
const tagName = element.tagName;
|
|
3794
|
-
if (DROP_CONTENT_TAGS.has(tagName)) {
|
|
3795
|
-
element.remove();
|
|
3796
|
-
return;
|
|
3797
|
-
}
|
|
3798
|
-
Array.from(element.childNodes).forEach((child) => sanitizeNode(child));
|
|
3799
|
-
if (ALLOWED_INLINE_TAGS.has(tagName)) {
|
|
3800
|
-
if (element.hasAttribute("className")) {
|
|
3801
|
-
const val = element.getAttribute("className");
|
|
3802
|
-
element.removeAttribute("className");
|
|
3803
|
-
if (!element.hasAttribute("class")) element.setAttribute("class", val);
|
|
3804
|
-
}
|
|
3805
|
-
const allowedAttrs = ALLOWED_ATTRS_BY_TAG[tagName] ?? COMMON_ALLOWED_ATTRS;
|
|
3806
|
-
Array.from(element.attributes).forEach((attr) => {
|
|
3807
|
-
if (!allowedAttrs.has(attr.name)) element.removeAttribute(attr.name);
|
|
3808
|
-
});
|
|
3809
|
-
if (tagName === "A") {
|
|
3810
|
-
const href = element.getAttribute("href");
|
|
3811
|
-
if (href !== null && href !== "" && !SAFE_HREF_RE.test(href)) element.removeAttribute("href");
|
|
3812
|
-
if (element.hasAttribute("target")) {
|
|
3813
|
-
element.setAttribute("rel", "noopener noreferrer");
|
|
3814
|
-
}
|
|
3815
|
-
}
|
|
3816
|
-
return;
|
|
3817
|
-
}
|
|
3818
|
-
const parent = element.parentNode;
|
|
3819
|
-
if (parent == null) return;
|
|
3820
|
-
while (element.firstChild) parent.insertBefore(element.firstChild, element);
|
|
3821
|
-
parent.removeChild(element);
|
|
3822
|
-
};
|
|
3823
|
-
var sanitizeInlineHtml = (value) => {
|
|
3824
|
-
if (typeof document === "undefined") return escapeHtml(value);
|
|
3825
|
-
const template = document.createElement("template");
|
|
3826
|
-
template.innerHTML = value;
|
|
3827
|
-
Array.from(template.content.childNodes).forEach((child) => sanitizeNode(child));
|
|
3828
|
-
return template.innerHTML;
|
|
3829
|
-
};
|
|
3830
|
-
var SIZE = {
|
|
4464
|
+
const text = (tooltipText ?? "").trim();
|
|
4465
|
+
if (text === "") return link;
|
|
4466
|
+
return /* @__PURE__ */ jsx(RTooltip.Provider, { delayDuration: 200, children: /* @__PURE__ */ jsxs(RTooltip.Root, { children: [
|
|
4467
|
+
/* @__PURE__ */ jsx(RTooltip.Trigger, { asChild: true, children: link }),
|
|
4468
|
+
/* @__PURE__ */ jsx(RTooltip.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(RTooltip.Content, { side: "top", sideOffset: 4, className: cn("z-50", FLOATING_SLIDE_ANIM), children: /* @__PURE__ */ jsx(STag, { shape: "square", size: "xs", color: "grey", label: text }) }) })
|
|
4469
|
+
] }) });
|
|
4470
|
+
});
|
|
4471
|
+
var SIZE2 = {
|
|
3831
4472
|
xs: { height: 24, paddingX: 8, gap: 6, arrow: 12, fontSize: 12, minWidth: 64, splitMinWidth: 72 },
|
|
3832
4473
|
sm: {
|
|
3833
4474
|
height: 28,
|
|
@@ -3913,7 +4554,7 @@ var SDropdownButton = forwardRef(
|
|
|
3913
4554
|
}),
|
|
3914
4555
|
[]
|
|
3915
4556
|
);
|
|
3916
|
-
const s =
|
|
4557
|
+
const s = SIZE2[size];
|
|
3917
4558
|
const p = buttonPreset(color, outline);
|
|
3918
4559
|
const colorVars = {
|
|
3919
4560
|
"--dd-bg": disabled ? "var(--cmp-button-bg-disabled)" : p.bg,
|
|
@@ -4049,119 +4690,6 @@ var SDropdownButton = forwardRef(
|
|
|
4049
4690
|
}
|
|
4050
4691
|
);
|
|
4051
4692
|
SDropdownButton.displayName = "SDropdownButton";
|
|
4052
|
-
var SIZE2 = {
|
|
4053
|
-
xxs: { icon: 12, radius: "sm" },
|
|
4054
|
-
xs: { icon: 16, radius: "sm" },
|
|
4055
|
-
sm: { icon: 20, radius: "sm" },
|
|
4056
|
-
md: { icon: 24, radius: "md" },
|
|
4057
|
-
lg: { icon: 32, radius: "md" }
|
|
4058
|
-
};
|
|
4059
|
-
var TOOLTIP_HIDE_DELAY_MS = 100;
|
|
4060
|
-
function SGhostButton({
|
|
4061
|
-
icon,
|
|
4062
|
-
size = "sm",
|
|
4063
|
-
intent = "default",
|
|
4064
|
-
ariaLabel = "",
|
|
4065
|
-
ariaPressed,
|
|
4066
|
-
tooltipText,
|
|
4067
|
-
disabled = false,
|
|
4068
|
-
onClick,
|
|
4069
|
-
anchorClassName,
|
|
4070
|
-
anchorStyle,
|
|
4071
|
-
className,
|
|
4072
|
-
style
|
|
4073
|
-
}) {
|
|
4074
|
-
const portalContainer = usePortalContainer();
|
|
4075
|
-
const [open, setOpen] = useState(false);
|
|
4076
|
-
const hideTimer = useRef(void 0);
|
|
4077
|
-
const cancelHide = () => {
|
|
4078
|
-
if (hideTimer.current) {
|
|
4079
|
-
clearTimeout(hideTimer.current);
|
|
4080
|
-
hideTimer.current = void 0;
|
|
4081
|
-
}
|
|
4082
|
-
};
|
|
4083
|
-
const openNow = () => {
|
|
4084
|
-
cancelHide();
|
|
4085
|
-
setOpen(true);
|
|
4086
|
-
};
|
|
4087
|
-
const startHide = () => {
|
|
4088
|
-
cancelHide();
|
|
4089
|
-
hideTimer.current = setTimeout(() => setOpen(false), TOOLTIP_HIDE_DELAY_MS);
|
|
4090
|
-
};
|
|
4091
|
-
const s = SIZE2[size];
|
|
4092
|
-
const contentColor = disabled ? intent === "inverse" ? "var(--cmp-ghostButton-inverse-disabled)" : "var(--cmp-ghostButton-icon-disabled)" : `var(--cmp-ghostButton-${intent}-content)`;
|
|
4093
|
-
const text = (tooltipText ?? "").trim();
|
|
4094
|
-
const hasTooltip = text !== "";
|
|
4095
|
-
const btn = /* @__PURE__ */ jsxs(
|
|
4096
|
-
"button",
|
|
4097
|
-
{
|
|
4098
|
-
type: "button",
|
|
4099
|
-
disabled,
|
|
4100
|
-
"aria-disabled": disabled ? "true" : void 0,
|
|
4101
|
-
"aria-label": ariaLabel.trim() || void 0,
|
|
4102
|
-
"aria-pressed": ariaPressed,
|
|
4103
|
-
tabIndex: disabled ? -1 : void 0,
|
|
4104
|
-
onClick: (e) => {
|
|
4105
|
-
if (disabled) {
|
|
4106
|
-
e.preventDefault();
|
|
4107
|
-
return;
|
|
4108
|
-
}
|
|
4109
|
-
onClick?.(e);
|
|
4110
|
-
},
|
|
4111
|
-
className: cn(
|
|
4112
|
-
"group/ghost-button relative box-border inline-flex items-center justify-center border-none bg-transparent p-0 transition-shadow",
|
|
4113
|
-
disabled ? "cursor-not-allowed" : "cursor-pointer",
|
|
4114
|
-
"focus-visible:outline-none focus-visible:shadow-[0_0_0_2px_var(--cmp-ghostButton-action-hover-bg)]",
|
|
4115
|
-
className
|
|
4116
|
-
),
|
|
4117
|
-
style: {
|
|
4118
|
-
width: `var(--cmp-ghostButton-${size}-size)`,
|
|
4119
|
-
height: `var(--cmp-ghostButton-${size}-size)`,
|
|
4120
|
-
borderRadius: `var(--cmp-ghostButton-radius-${s.radius})`,
|
|
4121
|
-
...style
|
|
4122
|
-
},
|
|
4123
|
-
children: [
|
|
4124
|
-
!disabled && /* @__PURE__ */ jsx(
|
|
4125
|
-
"span",
|
|
4126
|
-
{
|
|
4127
|
-
"aria-hidden": true,
|
|
4128
|
-
className: "pointer-events-none absolute inset-0 rounded-[inherit] opacity-0 transition-opacity duration-200 group-hover/ghost-button:opacity-5",
|
|
4129
|
-
style: { background: `var(--cmp-ghostButton-${intent}-hover-bg)` }
|
|
4130
|
-
}
|
|
4131
|
-
),
|
|
4132
|
-
/* @__PURE__ */ jsx(SIcon, { name: icon, size: s.icon, color: contentColor })
|
|
4133
|
-
]
|
|
4134
|
-
}
|
|
4135
|
-
);
|
|
4136
|
-
if (!hasTooltip) return btn;
|
|
4137
|
-
return /* @__PURE__ */ jsxs(RPopover2.Root, { open, onOpenChange: setOpen, children: [
|
|
4138
|
-
/* @__PURE__ */ jsx(RPopover2.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
4139
|
-
"span",
|
|
4140
|
-
{
|
|
4141
|
-
className: cn("inline-flex", anchorClassName),
|
|
4142
|
-
style: anchorStyle,
|
|
4143
|
-
onMouseEnter: openNow,
|
|
4144
|
-
onMouseLeave: startHide,
|
|
4145
|
-
onFocus: openNow,
|
|
4146
|
-
onBlur: startHide,
|
|
4147
|
-
children: btn
|
|
4148
|
-
}
|
|
4149
|
-
) }),
|
|
4150
|
-
/* @__PURE__ */ jsx(RPopover2.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
|
|
4151
|
-
RPopover2.Content,
|
|
4152
|
-
{
|
|
4153
|
-
side: "top",
|
|
4154
|
-
sideOffset: 4,
|
|
4155
|
-
className: cn("z-50", FLOATING_SLIDE_ANIM),
|
|
4156
|
-
"aria-hidden": true,
|
|
4157
|
-
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
4158
|
-
onMouseEnter: cancelHide,
|
|
4159
|
-
onMouseLeave: startHide,
|
|
4160
|
-
children: /* @__PURE__ */ jsx(STag, { shape: "square", size: "xs", color: "grey", label: text })
|
|
4161
|
-
}
|
|
4162
|
-
) })
|
|
4163
|
-
] });
|
|
4164
|
-
}
|
|
4165
4693
|
function SSwitch({
|
|
4166
4694
|
value = false,
|
|
4167
4695
|
leftLabel,
|
|
@@ -4243,142 +4771,6 @@ function SToggle({
|
|
|
4243
4771
|
}
|
|
4244
4772
|
);
|
|
4245
4773
|
}
|
|
4246
|
-
var HIDE_DELAY_MS = 100;
|
|
4247
|
-
function useBody(content, message = []) {
|
|
4248
|
-
if (content != null) return content;
|
|
4249
|
-
if (message.length === 0) return null;
|
|
4250
|
-
const singleLine = message.length === 1;
|
|
4251
|
-
return /* @__PURE__ */ jsx(Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsx(
|
|
4252
|
-
"div",
|
|
4253
|
-
{
|
|
4254
|
-
className: singleLine ? "leading-[24px]" : void 0,
|
|
4255
|
-
dangerouslySetInnerHTML: { __html: sanitizeInlineHtml(line) }
|
|
4256
|
-
},
|
|
4257
|
-
i
|
|
4258
|
-
)) });
|
|
4259
|
-
}
|
|
4260
|
-
var STooltip = forwardRef(function STooltip2({
|
|
4261
|
-
content,
|
|
4262
|
-
message = [],
|
|
4263
|
-
trigger = "hover",
|
|
4264
|
-
placement = "top",
|
|
4265
|
-
tooltipType = "default",
|
|
4266
|
-
useClose = false,
|
|
4267
|
-
disabled = false,
|
|
4268
|
-
children,
|
|
4269
|
-
icon = "helpOutline",
|
|
4270
|
-
iconSize = 12,
|
|
4271
|
-
color = "#01BB4B",
|
|
4272
|
-
ariaLabel,
|
|
4273
|
-
className,
|
|
4274
|
-
triggerClassName,
|
|
4275
|
-
style
|
|
4276
|
-
}, ref) {
|
|
4277
|
-
const portalContainer = usePortalContainer();
|
|
4278
|
-
const [open, setOpen] = useState(false);
|
|
4279
|
-
const hideTimer = useRef(void 0);
|
|
4280
|
-
const cancelHide = () => {
|
|
4281
|
-
if (hideTimer.current) {
|
|
4282
|
-
clearTimeout(hideTimer.current);
|
|
4283
|
-
hideTimer.current = void 0;
|
|
4284
|
-
}
|
|
4285
|
-
};
|
|
4286
|
-
const openNow = () => {
|
|
4287
|
-
cancelHide();
|
|
4288
|
-
setOpen(true);
|
|
4289
|
-
};
|
|
4290
|
-
const startHide = () => {
|
|
4291
|
-
if (useClose) return;
|
|
4292
|
-
cancelHide();
|
|
4293
|
-
hideTimer.current = setTimeout(() => setOpen(false), HIDE_DELAY_MS);
|
|
4294
|
-
};
|
|
4295
|
-
useImperativeHandle(
|
|
4296
|
-
ref,
|
|
4297
|
-
() => ({
|
|
4298
|
-
show: () => {
|
|
4299
|
-
cancelHide();
|
|
4300
|
-
setOpen(true);
|
|
4301
|
-
},
|
|
4302
|
-
hide: () => {
|
|
4303
|
-
cancelHide();
|
|
4304
|
-
setOpen(false);
|
|
4305
|
-
}
|
|
4306
|
-
}),
|
|
4307
|
-
[]
|
|
4308
|
-
);
|
|
4309
|
-
const body = useBody(content, message);
|
|
4310
|
-
const bg = `var(--cmp-tooltip-${tooltipType}-bg)`;
|
|
4311
|
-
const fg = `var(--cmp-tooltip-${tooltipType}-content)`;
|
|
4312
|
-
const triggerNode = children ?? /* @__PURE__ */ jsx("span", { className: cn("inline-flex cursor-pointer", triggerClassName), "aria-label": ariaLabel, children: /* @__PURE__ */ jsx(SIcon, { name: icon, size: iconSize, color }) });
|
|
4313
|
-
if (disabled || body == null) return /* @__PURE__ */ jsx(Fragment, { children: triggerNode });
|
|
4314
|
-
const isHover = trigger === "hover";
|
|
4315
|
-
const contentClass = cn(
|
|
4316
|
-
"z-50 w-fit whitespace-nowrap rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px] shadow-normal-sm",
|
|
4317
|
-
FLOATING_SLIDE_ANIM,
|
|
4318
|
-
className
|
|
4319
|
-
);
|
|
4320
|
-
const contentStyle = {
|
|
4321
|
-
background: bg,
|
|
4322
|
-
color: fg,
|
|
4323
|
-
fontWeight: tooltipType === "default" ? 500 : 700,
|
|
4324
|
-
...style
|
|
4325
|
-
};
|
|
4326
|
-
return /* @__PURE__ */ jsxs(RPopover2.Root, { open, onOpenChange: setOpen, children: [
|
|
4327
|
-
isHover ? (
|
|
4328
|
-
// hover: Anchor(위치 기준) + 직접 mouse 핸들러 — 클릭으로 토글되지 않도록 Trigger 미사용
|
|
4329
|
-
/* @__PURE__ */ jsx(RPopover2.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
4330
|
-
"span",
|
|
4331
|
-
{
|
|
4332
|
-
className: "inline-flex",
|
|
4333
|
-
onMouseEnter: openNow,
|
|
4334
|
-
onMouseLeave: startHide,
|
|
4335
|
-
onFocus: openNow,
|
|
4336
|
-
onBlur: startHide,
|
|
4337
|
-
children: triggerNode
|
|
4338
|
-
}
|
|
4339
|
-
) })
|
|
4340
|
-
) : /* @__PURE__ */ jsx(RPopover2.Trigger, { asChild: true, children: triggerNode }),
|
|
4341
|
-
/* @__PURE__ */ jsx(RPopover2.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
|
|
4342
|
-
RPopover2.Content,
|
|
4343
|
-
{
|
|
4344
|
-
side: placement,
|
|
4345
|
-
sideOffset: 8,
|
|
4346
|
-
className: contentClass,
|
|
4347
|
-
style: contentStyle,
|
|
4348
|
-
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
4349
|
-
onInteractOutside: (e) => {
|
|
4350
|
-
if (useClose) e.preventDefault();
|
|
4351
|
-
},
|
|
4352
|
-
onEscapeKeyDown: (e) => {
|
|
4353
|
-
if (useClose) e.preventDefault();
|
|
4354
|
-
},
|
|
4355
|
-
onMouseEnter: isHover ? cancelHide : void 0,
|
|
4356
|
-
onMouseLeave: isHover ? startHide : void 0,
|
|
4357
|
-
children: [
|
|
4358
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-[12px]", children: [
|
|
4359
|
-
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: body }),
|
|
4360
|
-
useClose && /* @__PURE__ */ jsx(
|
|
4361
|
-
SGhostButton,
|
|
4362
|
-
{
|
|
4363
|
-
icon: "close",
|
|
4364
|
-
size: "xs",
|
|
4365
|
-
intent: tooltipType === "default" ? "inverse" : "default",
|
|
4366
|
-
ariaLabel: "\uB2EB\uAE30",
|
|
4367
|
-
className: "shrink-0",
|
|
4368
|
-
onClick: () => {
|
|
4369
|
-
cancelHide();
|
|
4370
|
-
setOpen(false);
|
|
4371
|
-
}
|
|
4372
|
-
}
|
|
4373
|
-
)
|
|
4374
|
-
] }),
|
|
4375
|
-
/* @__PURE__ */ jsx(RPopover2.Arrow, { width: 16, height: 12, style: { fill: bg } })
|
|
4376
|
-
]
|
|
4377
|
-
}
|
|
4378
|
-
) })
|
|
4379
|
-
] });
|
|
4380
|
-
});
|
|
4381
|
-
STooltip.displayName = "STooltip";
|
|
4382
4774
|
var BUTTON_PRESET = {
|
|
4383
4775
|
default: { color: "primary", outline: false },
|
|
4384
4776
|
accent: { color: "primary", outline: false },
|
|
@@ -8316,7 +8708,7 @@ var SNumberInput = forwardRef(function SNumberInput2({
|
|
|
8316
8708
|
const [display, setDisplay] = useState(() => formatWithCommas(numValue));
|
|
8317
8709
|
const [ruleError, setRuleError] = useState("");
|
|
8318
8710
|
const innerRef = useRef(null);
|
|
8319
|
-
const
|
|
8711
|
+
const setRefs2 = (el) => {
|
|
8320
8712
|
innerRef.current = el;
|
|
8321
8713
|
if (typeof ref === "function") ref(el);
|
|
8322
8714
|
else if (ref) ref.current = el;
|
|
@@ -8490,7 +8882,7 @@ var SNumberInput = forwardRef(function SNumberInput2({
|
|
|
8490
8882
|
/* @__PURE__ */ jsx(
|
|
8491
8883
|
"input",
|
|
8492
8884
|
{
|
|
8493
|
-
ref:
|
|
8885
|
+
ref: setRefs2,
|
|
8494
8886
|
name,
|
|
8495
8887
|
type: "text",
|
|
8496
8888
|
inputMode: useDecimal ? "decimal" : "numeric",
|
|
@@ -11988,6 +12380,6 @@ function STimeRangePicker({
|
|
|
11988
12380
|
);
|
|
11989
12381
|
}
|
|
11990
12382
|
|
|
11991
|
-
export { BADGE_COLORS, BUTTON_COLORS, BUTTON_SIZES, COLOR_KEYS, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, ICONS, PAGE_BACKGROUNDS, SActionModal, SBadge, SBarcodeInput, SButton, SCROLL_AREA_AXES, SCalendar, SCallout, SCard, SCheckbox, SChip, SChipInput, SCircleProgress, SConfirmModal, SDatePicker, SDateRangePicker, SDivider, SDropdownButton, SExpansionItem, SField, SFilePicker, SForm, SGhostButton, SGnb, SGuide, SIcon, SInput, SKeyValueTable, SLayout, SLayoutContext, SLinearProgress, SLoadingContainer, SLoadingModal, SLoadingViewport, SModal, SNumberInput, SPage, SPagination, SPopover, SPopup, SPortal, SRadio, SRadioButton, SRadioGroup, SScrollArea, SSelect, SStepper, SSwitch, STEPPER_SIZES, STable, STableBar, STabs, STag, STextLink, STextarea, STimePicker, STimeRangePicker, SToast, SToastContainer, SToggle, STooltip, TAG_COLORS, TAG_SHAPES, TAG_SIZES, TIMEPICKER_SIZES, TIMEPICKER_SIZE_CONFIG, buttonPreset, cn, findGnbAncestors, findGnbRailValue, isColorKey, loading, resolveColor, useSLayout };
|
|
12383
|
+
export { BADGE_COLORS, BUTTON_COLORS, BUTTON_SIZES, COLOR_KEYS, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, ICONS, PAGE_BACKGROUNDS, SActionModal, SBadge, SBarcodeInput, SButton, SCROLL_AREA_AXES, SCalendar, SCallout, SCard, SCheckbox, SChip, SChipInput, SCircleProgress, SConfirmModal, SDatePicker, SDateRangePicker, SDivider, SDraggableItem, SDropdownButton, SExpansionItem, SField, SFilePicker, SForm, SGhostButton, SGnb, SGuide, SIcon, SInput, SKeyValueTable, SLayout, SLayoutContext, SLinearProgress, SList, SListItem, SLoadingContainer, SLoadingModal, SLoadingViewport, SModal, SNumberInput, SPage, SPagination, SPopover, SPopup, SPortal, SRadio, SRadioButton, SRadioGroup, SScrollArea, SSectionHeaderCard2 as SSectionHeaderCard, SSelect, SStepper, SSwitch, STEPPER_SIZES, STable, STableBar, STabs, STag, STextLink, STextarea, STimePicker, STimeRangePicker, SToast, SToastContainer, SToggle, STooltip, TAG_COLORS, TAG_SHAPES, TAG_SIZES, TIMEPICKER_SIZES, TIMEPICKER_SIZE_CONFIG, buttonPreset, cn, findGnbAncestors, findGnbRailValue, isColorKey, loading, resolveColor, useSLayout };
|
|
11992
12384
|
//# sourceMappingURL=index.js.map
|
|
11993
12385
|
//# sourceMappingURL=index.js.map
|