sellmate-design-system-react 3.5.0 → 3.6.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/dist/components/SDraggableItem/README.md +1 -0
- package/dist/components/SDraggableItem/SDraggableItem.cjs +2 -1
- package/dist/components/SDraggableItem/SDraggableItem.cjs.map +1 -1
- package/dist/components/SDraggableItem/SDraggableItem.d.ts +2 -0
- package/dist/components/SDraggableItem/SDraggableItem.js +2 -1
- package/dist/components/SDraggableItem/SDraggableItem.js.map +1 -1
- package/dist/components/SDraggableList/README.md +37 -0
- package/dist/components/SDraggableList/SDraggableList.cjs +143 -0
- package/dist/components/SDraggableList/SDraggableList.cjs.map +1 -0
- package/dist/components/SDraggableList/SDraggableList.d.ts +27 -0
- package/dist/components/SDraggableList/SDraggableList.js +141 -0
- package/dist/components/SDraggableList/SDraggableList.js.map +1 -0
- package/dist/components/SDraggableList/index.d.ts +1 -0
- package/dist/components/SExpansionItem/README.md +8 -0
- package/dist/components/SExpansionItem/SExpansionItem.cjs +52 -9
- package/dist/components/SExpansionItem/SExpansionItem.cjs.map +1 -1
- package/dist/components/SExpansionItem/SExpansionItem.d.ts +7 -0
- package/dist/components/SExpansionItem/SExpansionItem.js +53 -10
- package/dist/components/SExpansionItem/SExpansionItem.js.map +1 -1
- package/dist/components/SExpansionList/README.md +9 -0
- package/dist/components/SExpansionList/SExpansionList.cjs +3150 -0
- package/dist/components/SExpansionList/SExpansionList.cjs.map +1 -0
- package/dist/components/SExpansionList/SExpansionList.d.ts +3 -0
- package/dist/components/SExpansionList/SExpansionList.js +3148 -0
- package/dist/components/SExpansionList/SExpansionList.js.map +1 -0
- package/dist/components/SExpansionList/index.d.ts +1 -0
- package/dist/components/SList/README.md +15 -0
- package/dist/components/SListItem/README.md +21 -0
- package/dist/components/SListItem/SListItem.cjs +2858 -5
- package/dist/components/SListItem/SListItem.cjs.map +1 -1
- package/dist/components/SListItem/SListItem.d.ts +7 -0
- package/dist/components/SListItem/SListItem.js +2859 -6
- package/dist/components/SListItem/SListItem.js.map +1 -1
- package/dist/components/SSectionHeaderCard/README.md +1 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.cjs +15 -1
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.cjs.map +1 -1
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.d.ts +3 -0
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.js +15 -1
- package/dist/components/SSectionHeaderCard/SSectionHeaderCard.js.map +1 -1
- package/dist/components/SSectionHeaderCard/index.d.ts +1 -1
- package/dist/index.cjs +279 -32
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +279 -34
- package/dist/index.js.map +1 -1
- package/dist/llms-full.txt +79 -0
- package/dist/llms.txt +2 -2
- package/dist/styles.css +50 -63
- package/package.json +1 -1
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { type HTMLAttributes, type MouseEvent, type ReactNode } from 'react';
|
|
2
2
|
export interface SExpansionItemRenderState {
|
|
3
3
|
expanded: boolean;
|
|
4
|
+
selected: boolean;
|
|
4
5
|
disabled: boolean;
|
|
5
6
|
}
|
|
6
7
|
export type SExpansionItemRenderProp = (state: SExpansionItemRenderState) => ReactNode;
|
|
8
|
+
export type SExpansionItemInteraction = 'chevron';
|
|
7
9
|
export interface SExpansionItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onToggle' | 'title'> {
|
|
8
10
|
title: ReactNode;
|
|
9
11
|
/** 중첩 단계. Figma 기준 1~3단계 */
|
|
@@ -18,6 +20,11 @@ export interface SExpansionItemProps extends Omit<HTMLAttributes<HTMLDivElement>
|
|
|
18
20
|
bordered?: boolean;
|
|
19
21
|
expanded?: boolean;
|
|
20
22
|
defaultExpanded?: boolean;
|
|
23
|
+
selected?: boolean;
|
|
24
|
+
/** hover/selected 상태에서 적용할 인터랙션 preset */
|
|
25
|
+
interaction?: SExpansionItemInteraction;
|
|
26
|
+
/** 아이템 왼쪽 accent stripe 표시 여부 */
|
|
27
|
+
accentStripe?: boolean;
|
|
21
28
|
dense?: boolean;
|
|
22
29
|
disabled?: boolean;
|
|
23
30
|
onToggle?: (expanded: boolean, event: MouseEvent<HTMLButtonElement>) => void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { forwardRef, useState, useId } from 'react';
|
|
2
|
+
import { forwardRef, createContext, useState, useContext, useCallback, useMemo, useId, useEffect } from 'react';
|
|
3
3
|
import { clsx } from 'clsx';
|
|
4
4
|
import { extendTailwindMerge } from 'tailwind-merge';
|
|
5
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -2849,6 +2849,9 @@ var SIcon = forwardRef(function SIcon2({ name, size = 24, color, rotate, label,
|
|
|
2849
2849
|
}
|
|
2850
2850
|
);
|
|
2851
2851
|
});
|
|
2852
|
+
var SExpansionItemDescendantContext = createContext(
|
|
2853
|
+
null
|
|
2854
|
+
);
|
|
2852
2855
|
var SExpansionItem = forwardRef(
|
|
2853
2856
|
function SExpansionItem2({
|
|
2854
2857
|
title,
|
|
@@ -2859,6 +2862,9 @@ var SExpansionItem = forwardRef(
|
|
|
2859
2862
|
bordered = false,
|
|
2860
2863
|
expanded,
|
|
2861
2864
|
defaultExpanded = false,
|
|
2865
|
+
selected = false,
|
|
2866
|
+
interaction,
|
|
2867
|
+
accentStripe = false,
|
|
2862
2868
|
dense = false,
|
|
2863
2869
|
disabled = false,
|
|
2864
2870
|
onToggle,
|
|
@@ -2867,15 +2873,39 @@ var SExpansionItem = forwardRef(
|
|
|
2867
2873
|
...rest
|
|
2868
2874
|
}, ref) {
|
|
2869
2875
|
const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);
|
|
2876
|
+
const [expandedDescendantCount, setExpandedDescendantCount] = useState(0);
|
|
2877
|
+
const [hovered, setHovered] = useState(false);
|
|
2878
|
+
const parentDescendantContext = useContext(SExpansionItemDescendantContext);
|
|
2870
2879
|
const isExpanded = expanded ?? internalExpanded;
|
|
2871
|
-
const
|
|
2880
|
+
const isSelected = isExpanded && (selected || expandedDescendantCount === 0);
|
|
2881
|
+
const hasChevronInteraction = interaction === "chevron";
|
|
2882
|
+
const showInteractionChevron = hasChevronInteraction && !disabled && (isSelected || hovered);
|
|
2883
|
+
const interactionChevronColor = isSelected ? "var(--sys-color-fg-brand)" : "var(--sys-color-fg-quaternary)";
|
|
2884
|
+
const reportExpandedDescendant = useCallback(
|
|
2885
|
+
(delta) => {
|
|
2886
|
+
setExpandedDescendantCount((current) => Math.max(0, current + delta));
|
|
2887
|
+
parentDescendantContext?.reportExpandedDescendant(delta);
|
|
2888
|
+
},
|
|
2889
|
+
[parentDescendantContext]
|
|
2890
|
+
);
|
|
2891
|
+
const descendantContextValue = useMemo(
|
|
2892
|
+
() => ({ reportExpandedDescendant }),
|
|
2893
|
+
[reportExpandedDescendant]
|
|
2894
|
+
);
|
|
2895
|
+
const leadingNode = typeof leading === "function" ? leading({ expanded: isExpanded, selected: isSelected, disabled }) : leading;
|
|
2872
2896
|
const id = useId();
|
|
2897
|
+
useEffect(() => {
|
|
2898
|
+
if (!isExpanded) return;
|
|
2899
|
+
parentDescendantContext?.reportExpandedDescendant(1);
|
|
2900
|
+
return () => parentDescendantContext?.reportExpandedDescendant(-1);
|
|
2901
|
+
}, [isExpanded, parentDescendantContext]);
|
|
2873
2902
|
return /* @__PURE__ */ jsxs(
|
|
2874
2903
|
"div",
|
|
2875
2904
|
{
|
|
2876
2905
|
ref,
|
|
2877
2906
|
className: cn(
|
|
2878
|
-
"group/expansion-item overflow-hidden bg-(--cmp-listExpansionItem-title-bg-default)",
|
|
2907
|
+
"group/expansion-item relative overflow-hidden bg-(--cmp-listExpansionItem-title-bg-default)",
|
|
2908
|
+
!bordered && "border-b border-(--cmp-listExpansionItem-border-default)",
|
|
2879
2909
|
// TODO: expansionItem/bordered/radius 및 border intent 토큰 생성 후 고정값을 토큰으로 교체한다.
|
|
2880
2910
|
bordered && "rounded-[8px] border border-[#E1E1E1] hover:border-[#AAAAAA] [&:has(>button:hover)]:border-[#AAAAAA]",
|
|
2881
2911
|
bordered && isExpanded && "!border-[#93C4FF]",
|
|
@@ -2883,6 +2913,13 @@ var SExpansionItem = forwardRef(
|
|
|
2883
2913
|
),
|
|
2884
2914
|
...rest,
|
|
2885
2915
|
children: [
|
|
2916
|
+
accentStripe && !bordered && /* @__PURE__ */ jsx(
|
|
2917
|
+
"span",
|
|
2918
|
+
{
|
|
2919
|
+
"aria-hidden": "true",
|
|
2920
|
+
className: "pointer-events-none absolute bottom-[-1px] left-0 top-0 z-[1] w-(--cmp-listItem-accentStripe-width) bg-(--cmp-listItem-accentStripe-color)"
|
|
2921
|
+
}
|
|
2922
|
+
),
|
|
2886
2923
|
/* @__PURE__ */ jsxs(
|
|
2887
2924
|
"button",
|
|
2888
2925
|
{
|
|
@@ -2890,6 +2927,8 @@ var SExpansionItem = forwardRef(
|
|
|
2890
2927
|
disabled,
|
|
2891
2928
|
"aria-expanded": isExpanded,
|
|
2892
2929
|
"aria-controls": id,
|
|
2930
|
+
onMouseEnter: () => setHovered(true),
|
|
2931
|
+
onMouseLeave: () => setHovered(false),
|
|
2893
2932
|
onClick: (event) => {
|
|
2894
2933
|
if (disabled) return;
|
|
2895
2934
|
const next = !isExpanded;
|
|
@@ -2897,14 +2936,17 @@ var SExpansionItem = forwardRef(
|
|
|
2897
2936
|
onToggle?.(next, event);
|
|
2898
2937
|
},
|
|
2899
2938
|
className: cn(
|
|
2900
|
-
"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)",
|
|
2939
|
+
"group/expansion-item-button 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)",
|
|
2901
2940
|
isExpanded && "border-b border-(--cmp-listExpansionItem-title-border)",
|
|
2902
|
-
!isExpanded && "hover:bg-(--cmp-listExpansionItem-title-bg-hover)",
|
|
2941
|
+
hasChevronInteraction ? "hover:bg-(--sys-color-bg-neutralBright)" : !isExpanded && "hover:bg-(--cmp-listExpansionItem-title-bg-hover)",
|
|
2903
2942
|
dense ? "h-[32px] py-(--cmp-listExpansionItem-title-paddingY-dense)" : "h-[40px] py-(--cmp-listExpansionItem-title-paddingY-normal)",
|
|
2904
2943
|
"gap-(--cmp-listExpansionItem-title-gap)",
|
|
2905
2944
|
"pr-(--cmp-listExpansionItem-title-paddingX)",
|
|
2906
|
-
depth === 2 ? "pl-[
|
|
2907
|
-
isExpanded &&
|
|
2945
|
+
depth === 2 ? "pl-[36px]" : depth === 3 ? "pl-[56px]" : "pl-[16px]",
|
|
2946
|
+
isExpanded && cn(
|
|
2947
|
+
"text-(--cmp-listExpansionItem-title-text-expanded)",
|
|
2948
|
+
isSelected && "bg-(--cmp-listExpansionItem-title-bg-expanded)"
|
|
2949
|
+
)
|
|
2908
2950
|
),
|
|
2909
2951
|
children: [
|
|
2910
2952
|
!leading && /* @__PURE__ */ jsx(
|
|
@@ -2919,11 +2961,12 @@ var SExpansionItem = forwardRef(
|
|
|
2919
2961
|
),
|
|
2920
2962
|
leadingNode,
|
|
2921
2963
|
/* @__PURE__ */ jsx("span", { className: "flex min-w-0 flex-1 flex-col", children: /* @__PURE__ */ jsx("span", { children: title }) }),
|
|
2922
|
-
trailing
|
|
2964
|
+
trailing,
|
|
2965
|
+
showInteractionChevron && /* @__PURE__ */ jsx(SIcon, { name: "chevronRight", size: 12, color: interactionChevronColor })
|
|
2923
2966
|
]
|
|
2924
2967
|
}
|
|
2925
2968
|
),
|
|
2926
|
-
/* @__PURE__ */ jsx(
|
|
2969
|
+
/* @__PURE__ */ jsx(SExpansionItemDescendantContext.Provider, { value: descendantContextValue, children: /* @__PURE__ */ jsx(
|
|
2927
2970
|
"div",
|
|
2928
2971
|
{
|
|
2929
2972
|
id,
|
|
@@ -2934,7 +2977,7 @@ var SExpansionItem = forwardRef(
|
|
|
2934
2977
|
),
|
|
2935
2978
|
children: /* @__PURE__ */ jsx("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: cn(bodyPadding && "p-(--cmp-listExpansionItem-body-padding)"), children }) })
|
|
2936
2979
|
}
|
|
2937
|
-
)
|
|
2980
|
+
) })
|
|
2938
2981
|
]
|
|
2939
2982
|
}
|
|
2940
2983
|
);
|