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
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,9 @@ export * from './components/SIcon';
|
|
|
5
5
|
export * from './components/SBadge';
|
|
6
6
|
export * from './components/SCard';
|
|
7
7
|
export * from './components/SDraggableItem';
|
|
8
|
+
export * from './components/SDraggableList';
|
|
8
9
|
export * from './components/SExpansionItem';
|
|
10
|
+
export * from './components/SExpansionList';
|
|
9
11
|
export * from './components/SList';
|
|
10
12
|
export * from './components/SListItem';
|
|
11
13
|
export * from './components/SSectionHeaderCard';
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { clsx } from 'clsx';
|
|
3
3
|
import { extendTailwindMerge } from 'tailwind-merge';
|
|
4
|
-
import { forwardRef, useState, useRef, useEffect,
|
|
4
|
+
import { forwardRef, useState, useRef, useEffect, createContext, useContext, useCallback, useMemo, useId, Children, cloneElement, useImperativeHandle, Fragment as Fragment$1, useLayoutEffect, isValidElement, useSyncExternalStore } from 'react';
|
|
5
5
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
6
6
|
import { createPortal } from 'react-dom';
|
|
7
7
|
import * as RPopover2 from '@radix-ui/react-popover';
|
|
@@ -2997,6 +2997,7 @@ var SDraggableItem = forwardRef(
|
|
|
2997
2997
|
accentStripe = false,
|
|
2998
2998
|
bordered = false,
|
|
2999
2999
|
selected = false,
|
|
3000
|
+
dragging = false,
|
|
3000
3001
|
dense = false,
|
|
3001
3002
|
disabled = false,
|
|
3002
3003
|
dragOverlay = true,
|
|
@@ -3067,7 +3068,7 @@ var SDraggableItem = forwardRef(
|
|
|
3067
3068
|
bordered,
|
|
3068
3069
|
selected,
|
|
3069
3070
|
dense,
|
|
3070
|
-
dragging: overlayVisible,
|
|
3071
|
+
dragging: dragging || overlayVisible,
|
|
3071
3072
|
disabled,
|
|
3072
3073
|
hovered,
|
|
3073
3074
|
dragHandleProps,
|
|
@@ -3113,6 +3114,130 @@ var SDraggableItem = forwardRef(
|
|
|
3113
3114
|
}
|
|
3114
3115
|
);
|
|
3115
3116
|
SDraggableItem.displayName = "SDraggableItem";
|
|
3117
|
+
var SList = forwardRef(function SList2({ className, children, useGap = false, usePadding = false, ...rest }, ref) {
|
|
3118
|
+
return /* @__PURE__ */ jsx(
|
|
3119
|
+
"div",
|
|
3120
|
+
{
|
|
3121
|
+
ref,
|
|
3122
|
+
className: cn(
|
|
3123
|
+
useGap && "flex flex-col gap-(--cmp-list-group-gap)",
|
|
3124
|
+
usePadding && "p-(--cmp-list-group-padding)",
|
|
3125
|
+
className
|
|
3126
|
+
),
|
|
3127
|
+
...rest,
|
|
3128
|
+
children
|
|
3129
|
+
}
|
|
3130
|
+
);
|
|
3131
|
+
});
|
|
3132
|
+
SList.displayName = "SList";
|
|
3133
|
+
function reorder(items, fromIndex, toIndex) {
|
|
3134
|
+
if (fromIndex === toIndex) return items;
|
|
3135
|
+
const nextItems = [...items];
|
|
3136
|
+
const [movedItem] = nextItems.splice(fromIndex, 1);
|
|
3137
|
+
nextItems.splice(toIndex, 0, movedItem);
|
|
3138
|
+
return nextItems;
|
|
3139
|
+
}
|
|
3140
|
+
function SDraggableListInner({
|
|
3141
|
+
items,
|
|
3142
|
+
getKey,
|
|
3143
|
+
renderItem,
|
|
3144
|
+
onChange,
|
|
3145
|
+
selectedKey,
|
|
3146
|
+
defaultSelectedKey,
|
|
3147
|
+
onSelectedKeyChange,
|
|
3148
|
+
getDisabled,
|
|
3149
|
+
...rest
|
|
3150
|
+
}, ref) {
|
|
3151
|
+
const [draggingIndex, setDraggingIndex] = useState(null);
|
|
3152
|
+
const [dropIndex, setDropIndex] = useState(null);
|
|
3153
|
+
const [internalSelectedKey, setInternalSelectedKey] = useState(
|
|
3154
|
+
defaultSelectedKey
|
|
3155
|
+
);
|
|
3156
|
+
const listRef = useRef(null);
|
|
3157
|
+
const fromIndexRef = useRef(null);
|
|
3158
|
+
const currentSelectedKey = selectedKey ?? internalSelectedKey;
|
|
3159
|
+
const startDrag = useCallback((event, index) => {
|
|
3160
|
+
event.preventDefault();
|
|
3161
|
+
fromIndexRef.current = index;
|
|
3162
|
+
setDraggingIndex(index);
|
|
3163
|
+
setDropIndex(index);
|
|
3164
|
+
}, []);
|
|
3165
|
+
useEffect(() => {
|
|
3166
|
+
if (draggingIndex == null) return void 0;
|
|
3167
|
+
const handleMouseMove = (event) => {
|
|
3168
|
+
const itemElements = listRef.current?.querySelectorAll(
|
|
3169
|
+
"[data-draggable-list-item]"
|
|
3170
|
+
);
|
|
3171
|
+
if (!itemElements) return;
|
|
3172
|
+
let nextDropIndex = items.length;
|
|
3173
|
+
itemElements.forEach((itemElement, index) => {
|
|
3174
|
+
const rect = itemElement.getBoundingClientRect();
|
|
3175
|
+
if (event.clientY < rect.top + rect.height / 2 && nextDropIndex === items.length) {
|
|
3176
|
+
nextDropIndex = index;
|
|
3177
|
+
}
|
|
3178
|
+
});
|
|
3179
|
+
setDropIndex(nextDropIndex);
|
|
3180
|
+
};
|
|
3181
|
+
const handleMouseUp = () => {
|
|
3182
|
+
const fromIndex = fromIndexRef.current;
|
|
3183
|
+
const nextDropIndex = dropIndex;
|
|
3184
|
+
if (fromIndex != null && nextDropIndex != null) {
|
|
3185
|
+
const toIndex = nextDropIndex > fromIndex ? nextDropIndex - 1 : nextDropIndex;
|
|
3186
|
+
if (fromIndex !== toIndex) onChange(reorder(items, fromIndex, toIndex));
|
|
3187
|
+
}
|
|
3188
|
+
fromIndexRef.current = null;
|
|
3189
|
+
setDraggingIndex(null);
|
|
3190
|
+
setDropIndex(null);
|
|
3191
|
+
};
|
|
3192
|
+
window.addEventListener("mousemove", handleMouseMove);
|
|
3193
|
+
window.addEventListener("mouseup", handleMouseUp);
|
|
3194
|
+
return () => {
|
|
3195
|
+
window.removeEventListener("mousemove", handleMouseMove);
|
|
3196
|
+
window.removeEventListener("mouseup", handleMouseUp);
|
|
3197
|
+
};
|
|
3198
|
+
}, [draggingIndex, dropIndex, items, onChange]);
|
|
3199
|
+
return /* @__PURE__ */ jsx(
|
|
3200
|
+
SList,
|
|
3201
|
+
{
|
|
3202
|
+
ref: (node) => {
|
|
3203
|
+
listRef.current = node;
|
|
3204
|
+
if (typeof ref === "function") ref(node);
|
|
3205
|
+
else if (ref) ref.current = node;
|
|
3206
|
+
},
|
|
3207
|
+
...rest,
|
|
3208
|
+
children: items.map((item, index) => {
|
|
3209
|
+
const itemKey = getKey(item, index);
|
|
3210
|
+
const disabled = getDisabled?.(item, index) ?? false;
|
|
3211
|
+
const showBefore = draggingIndex != null && dropIndex === index;
|
|
3212
|
+
const showAfter = draggingIndex != null && dropIndex === items.length && index === items.length - 1;
|
|
3213
|
+
return /* @__PURE__ */ jsx(
|
|
3214
|
+
"div",
|
|
3215
|
+
{
|
|
3216
|
+
"data-draggable-list-item": true,
|
|
3217
|
+
"aria-disabled": disabled || void 0,
|
|
3218
|
+
onClick: () => {
|
|
3219
|
+
if (disabled) return;
|
|
3220
|
+
setInternalSelectedKey(itemKey);
|
|
3221
|
+
onSelectedKeyChange?.(itemKey);
|
|
3222
|
+
},
|
|
3223
|
+
className: `relative ${showBefore ? "before:absolute before:left-0 before:right-0 before:top-0 before:z-10 before:h-[2px] before:bg-(--sys-color-border-accent) before:content-['']" : ""} ${showAfter ? "after:absolute after:bottom-0 after:left-0 after:right-0 after:z-10 after:h-[2px] after:bg-(--sys-color-border-accent) after:content-['']" : ""}`,
|
|
3224
|
+
children: renderItem(item, index, {
|
|
3225
|
+
onDragHandleMouseDown: (event) => {
|
|
3226
|
+
if (!disabled) startDrag(event, index);
|
|
3227
|
+
},
|
|
3228
|
+
selected: currentSelectedKey === itemKey
|
|
3229
|
+
})
|
|
3230
|
+
},
|
|
3231
|
+
itemKey
|
|
3232
|
+
);
|
|
3233
|
+
})
|
|
3234
|
+
}
|
|
3235
|
+
);
|
|
3236
|
+
}
|
|
3237
|
+
var SDraggableList = forwardRef(SDraggableListInner);
|
|
3238
|
+
var SExpansionItemDescendantContext = createContext(
|
|
3239
|
+
null
|
|
3240
|
+
);
|
|
3116
3241
|
var SExpansionItem = forwardRef(
|
|
3117
3242
|
function SExpansionItem2({
|
|
3118
3243
|
title,
|
|
@@ -3123,6 +3248,9 @@ var SExpansionItem = forwardRef(
|
|
|
3123
3248
|
bordered = false,
|
|
3124
3249
|
expanded,
|
|
3125
3250
|
defaultExpanded = false,
|
|
3251
|
+
selected = false,
|
|
3252
|
+
interaction,
|
|
3253
|
+
accentStripe = false,
|
|
3126
3254
|
dense = false,
|
|
3127
3255
|
disabled = false,
|
|
3128
3256
|
onToggle,
|
|
@@ -3131,15 +3259,39 @@ var SExpansionItem = forwardRef(
|
|
|
3131
3259
|
...rest
|
|
3132
3260
|
}, ref) {
|
|
3133
3261
|
const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);
|
|
3262
|
+
const [expandedDescendantCount, setExpandedDescendantCount] = useState(0);
|
|
3263
|
+
const [hovered, setHovered] = useState(false);
|
|
3264
|
+
const parentDescendantContext = useContext(SExpansionItemDescendantContext);
|
|
3134
3265
|
const isExpanded = expanded ?? internalExpanded;
|
|
3135
|
-
const
|
|
3266
|
+
const isSelected = isExpanded && (selected || expandedDescendantCount === 0);
|
|
3267
|
+
const hasChevronInteraction = interaction === "chevron";
|
|
3268
|
+
const showInteractionChevron = hasChevronInteraction && !disabled && (isSelected || hovered);
|
|
3269
|
+
const interactionChevronColor = isSelected ? "var(--sys-color-fg-brand)" : "var(--sys-color-fg-quaternary)";
|
|
3270
|
+
const reportExpandedDescendant = useCallback(
|
|
3271
|
+
(delta) => {
|
|
3272
|
+
setExpandedDescendantCount((current) => Math.max(0, current + delta));
|
|
3273
|
+
parentDescendantContext?.reportExpandedDescendant(delta);
|
|
3274
|
+
},
|
|
3275
|
+
[parentDescendantContext]
|
|
3276
|
+
);
|
|
3277
|
+
const descendantContextValue = useMemo(
|
|
3278
|
+
() => ({ reportExpandedDescendant }),
|
|
3279
|
+
[reportExpandedDescendant]
|
|
3280
|
+
);
|
|
3281
|
+
const leadingNode = typeof leading === "function" ? leading({ expanded: isExpanded, selected: isSelected, disabled }) : leading;
|
|
3136
3282
|
const id = useId();
|
|
3283
|
+
useEffect(() => {
|
|
3284
|
+
if (!isExpanded) return;
|
|
3285
|
+
parentDescendantContext?.reportExpandedDescendant(1);
|
|
3286
|
+
return () => parentDescendantContext?.reportExpandedDescendant(-1);
|
|
3287
|
+
}, [isExpanded, parentDescendantContext]);
|
|
3137
3288
|
return /* @__PURE__ */ jsxs(
|
|
3138
3289
|
"div",
|
|
3139
3290
|
{
|
|
3140
3291
|
ref,
|
|
3141
3292
|
className: cn(
|
|
3142
|
-
"group/expansion-item overflow-hidden bg-(--cmp-listExpansionItem-title-bg-default)",
|
|
3293
|
+
"group/expansion-item relative overflow-hidden bg-(--cmp-listExpansionItem-title-bg-default)",
|
|
3294
|
+
!bordered && "border-b border-(--cmp-listExpansionItem-border-default)",
|
|
3143
3295
|
// TODO: expansionItem/bordered/radius 및 border intent 토큰 생성 후 고정값을 토큰으로 교체한다.
|
|
3144
3296
|
bordered && "rounded-[8px] border border-[#E1E1E1] hover:border-[#AAAAAA] [&:has(>button:hover)]:border-[#AAAAAA]",
|
|
3145
3297
|
bordered && isExpanded && "!border-[#93C4FF]",
|
|
@@ -3147,6 +3299,13 @@ var SExpansionItem = forwardRef(
|
|
|
3147
3299
|
),
|
|
3148
3300
|
...rest,
|
|
3149
3301
|
children: [
|
|
3302
|
+
accentStripe && !bordered && /* @__PURE__ */ jsx(
|
|
3303
|
+
"span",
|
|
3304
|
+
{
|
|
3305
|
+
"aria-hidden": "true",
|
|
3306
|
+
className: "pointer-events-none absolute bottom-[-1px] left-0 top-0 z-[1] w-(--cmp-listItem-accentStripe-width) bg-(--cmp-listItem-accentStripe-color)"
|
|
3307
|
+
}
|
|
3308
|
+
),
|
|
3150
3309
|
/* @__PURE__ */ jsxs(
|
|
3151
3310
|
"button",
|
|
3152
3311
|
{
|
|
@@ -3154,6 +3313,8 @@ var SExpansionItem = forwardRef(
|
|
|
3154
3313
|
disabled,
|
|
3155
3314
|
"aria-expanded": isExpanded,
|
|
3156
3315
|
"aria-controls": id,
|
|
3316
|
+
onMouseEnter: () => setHovered(true),
|
|
3317
|
+
onMouseLeave: () => setHovered(false),
|
|
3157
3318
|
onClick: (event) => {
|
|
3158
3319
|
if (disabled) return;
|
|
3159
3320
|
const next = !isExpanded;
|
|
@@ -3161,14 +3322,17 @@ var SExpansionItem = forwardRef(
|
|
|
3161
3322
|
onToggle?.(next, event);
|
|
3162
3323
|
},
|
|
3163
3324
|
className: cn(
|
|
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)",
|
|
3325
|
+
"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)",
|
|
3165
3326
|
isExpanded && "border-b border-(--cmp-listExpansionItem-title-border)",
|
|
3166
|
-
!isExpanded && "hover:bg-(--cmp-listExpansionItem-title-bg-hover)",
|
|
3327
|
+
hasChevronInteraction ? "hover:bg-(--sys-color-bg-neutralBright)" : !isExpanded && "hover:bg-(--cmp-listExpansionItem-title-bg-hover)",
|
|
3167
3328
|
dense ? "h-[32px] py-(--cmp-listExpansionItem-title-paddingY-dense)" : "h-[40px] py-(--cmp-listExpansionItem-title-paddingY-normal)",
|
|
3168
3329
|
"gap-(--cmp-listExpansionItem-title-gap)",
|
|
3169
3330
|
"pr-(--cmp-listExpansionItem-title-paddingX)",
|
|
3170
|
-
depth === 2 ? "pl-[
|
|
3171
|
-
isExpanded &&
|
|
3331
|
+
depth === 2 ? "pl-[36px]" : depth === 3 ? "pl-[56px]" : "pl-[16px]",
|
|
3332
|
+
isExpanded && cn(
|
|
3333
|
+
"text-(--cmp-listExpansionItem-title-text-expanded)",
|
|
3334
|
+
isSelected && "bg-(--cmp-listExpansionItem-title-bg-expanded)"
|
|
3335
|
+
)
|
|
3172
3336
|
),
|
|
3173
3337
|
children: [
|
|
3174
3338
|
!leading && /* @__PURE__ */ jsx(
|
|
@@ -3183,11 +3347,12 @@ var SExpansionItem = forwardRef(
|
|
|
3183
3347
|
),
|
|
3184
3348
|
leadingNode,
|
|
3185
3349
|
/* @__PURE__ */ jsx("span", { className: "flex min-w-0 flex-1 flex-col", children: /* @__PURE__ */ jsx("span", { children: title }) }),
|
|
3186
|
-
trailing
|
|
3350
|
+
trailing,
|
|
3351
|
+
showInteractionChevron && /* @__PURE__ */ jsx(SIcon, { name: "chevronRight", size: 12, color: interactionChevronColor })
|
|
3187
3352
|
]
|
|
3188
3353
|
}
|
|
3189
3354
|
),
|
|
3190
|
-
/* @__PURE__ */ jsx(
|
|
3355
|
+
/* @__PURE__ */ jsx(SExpansionItemDescendantContext.Provider, { value: descendantContextValue, children: /* @__PURE__ */ jsx(
|
|
3191
3356
|
"div",
|
|
3192
3357
|
{
|
|
3193
3358
|
id,
|
|
@@ -3198,34 +3363,21 @@ var SExpansionItem = forwardRef(
|
|
|
3198
3363
|
),
|
|
3199
3364
|
children: /* @__PURE__ */ jsx("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: cn(bodyPadding && "p-(--cmp-listExpansionItem-body-padding)"), children }) })
|
|
3200
3365
|
}
|
|
3201
|
-
)
|
|
3366
|
+
) })
|
|
3202
3367
|
]
|
|
3203
3368
|
}
|
|
3204
3369
|
);
|
|
3205
3370
|
}
|
|
3206
3371
|
);
|
|
3207
|
-
var SList = forwardRef(function SList2({ className, children, useGap = false, usePadding = false, ...rest }, ref) {
|
|
3208
|
-
return /* @__PURE__ */ jsx(
|
|
3209
|
-
"div",
|
|
3210
|
-
{
|
|
3211
|
-
ref,
|
|
3212
|
-
className: cn(
|
|
3213
|
-
useGap && "flex flex-col gap-(--cmp-list-group-gap)",
|
|
3214
|
-
usePadding && "p-(--cmp-list-group-padding)",
|
|
3215
|
-
className
|
|
3216
|
-
),
|
|
3217
|
-
...rest,
|
|
3218
|
-
children
|
|
3219
|
-
}
|
|
3220
|
-
);
|
|
3221
|
-
});
|
|
3222
|
-
SList.displayName = "SList";
|
|
3223
3372
|
var SListItem = forwardRef(function SListItem2({
|
|
3224
3373
|
title,
|
|
3225
3374
|
depth = 1,
|
|
3226
3375
|
leading,
|
|
3227
3376
|
trailing,
|
|
3228
3377
|
bordered = false,
|
|
3378
|
+
selected = false,
|
|
3379
|
+
clickable = true,
|
|
3380
|
+
interaction,
|
|
3229
3381
|
accentStripe = false,
|
|
3230
3382
|
dense = false,
|
|
3231
3383
|
disabled = false,
|
|
@@ -3239,8 +3391,13 @@ var SListItem = forwardRef(function SListItem2({
|
|
|
3239
3391
|
const titleNode = typeof title === "function" ? title(renderState) : title;
|
|
3240
3392
|
const leadingNode = typeof leading === "function" ? leading(renderState) : leading;
|
|
3241
3393
|
const trailingNode = typeof trailing === "function" ? trailing(renderState) : trailing;
|
|
3394
|
+
const isInteractive = clickable && !disabled;
|
|
3395
|
+
const isSelected = isInteractive && selected;
|
|
3396
|
+
const hasChevronInteraction = interaction === "chevron";
|
|
3397
|
+
const showInteractionChevron = hasChevronInteraction && isInteractive && (isSelected || hovered);
|
|
3398
|
+
const interactionChevronColor = isSelected ? "var(--sys-color-fg-brand)" : "var(--sys-color-fg-quaternary)";
|
|
3242
3399
|
const handleMouseEnter = (event) => {
|
|
3243
|
-
if (
|
|
3400
|
+
if (isInteractive) setHovered(true);
|
|
3244
3401
|
onMouseEnter?.(event);
|
|
3245
3402
|
};
|
|
3246
3403
|
const handleMouseLeave = (event) => {
|
|
@@ -3256,12 +3413,21 @@ var SListItem = forwardRef(function SListItem2({
|
|
|
3256
3413
|
onMouseLeave: handleMouseLeave,
|
|
3257
3414
|
className: cn(
|
|
3258
3415
|
"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)" :
|
|
3416
|
+
disabled ? "pointer-events-none cursor-not-allowed text-(--sys-color-disabled-text)" : isSelected ? cn(
|
|
3417
|
+
"cursor-pointer text-(--cmp-listItem-text-selected)",
|
|
3418
|
+
"bg-(--cmp-listItem-bg-selected)"
|
|
3419
|
+
) : isInteractive ? cn(
|
|
3420
|
+
"cursor-pointer",
|
|
3421
|
+
hasChevronInteraction ? "hover:bg-(--sys-color-bg-neutralBright)" : "hover:bg-(--cmp-listItem-bg-hover)"
|
|
3422
|
+
) : "cursor-default",
|
|
3260
3423
|
dense ? "h-[32px] py-(--cmp-listItem-paddingY-dense)" : "h-[40px] py-(--cmp-listItem-paddingY-normal)",
|
|
3261
3424
|
"gap-(--cmp-listItem-gap)",
|
|
3262
3425
|
"pr-(--cmp-listItem-paddingX)",
|
|
3263
|
-
depth === 2 ? "pl-[
|
|
3264
|
-
bordered ?
|
|
3426
|
+
depth === 2 ? "pl-[36px]" : depth === 3 ? "pl-[56px]" : "pl-[16px]",
|
|
3427
|
+
bordered ? cn(
|
|
3428
|
+
"overflow-hidden rounded-(--cmp-listItem-radius-bordered) border border-(--cmp-listItem-border-default)",
|
|
3429
|
+
isSelected ? "border-(--cmp-listItem-bordered-border-selected)" : isInteractive && "hover:border-(--cmp-listItem-bordered-border-hover)"
|
|
3430
|
+
) : "border-b border-(--cmp-listItem-border-default)",
|
|
3265
3431
|
className
|
|
3266
3432
|
),
|
|
3267
3433
|
...rest,
|
|
@@ -3275,12 +3441,77 @@ var SListItem = forwardRef(function SListItem2({
|
|
|
3275
3441
|
),
|
|
3276
3442
|
leadingNode,
|
|
3277
3443
|
/* @__PURE__ */ jsx("span", { className: "flex min-w-0 flex-1 flex-col", children: /* @__PURE__ */ jsx("span", { children: titleNode }) }),
|
|
3278
|
-
trailingNode
|
|
3444
|
+
trailingNode,
|
|
3445
|
+
showInteractionChevron && /* @__PURE__ */ jsx(SIcon, { name: "chevronRight", size: 12, color: interactionChevronColor })
|
|
3279
3446
|
]
|
|
3280
3447
|
}
|
|
3281
3448
|
);
|
|
3282
3449
|
});
|
|
3283
3450
|
SListItem.displayName = "SListItem";
|
|
3451
|
+
function isExpansionItemElement(node) {
|
|
3452
|
+
return isValidElement(node) && node.type === SExpansionItem;
|
|
3453
|
+
}
|
|
3454
|
+
function isListItemElement(node) {
|
|
3455
|
+
return isValidElement(node) && node.type === SListItem;
|
|
3456
|
+
}
|
|
3457
|
+
function getInitialOpenKeys(children) {
|
|
3458
|
+
const openKeys = {};
|
|
3459
|
+
Children.forEach(children, (child, index) => {
|
|
3460
|
+
if (!isExpansionItemElement(child)) return;
|
|
3461
|
+
const depth = child.props.depth ?? 1;
|
|
3462
|
+
if (openKeys[depth] != null) return;
|
|
3463
|
+
if (child.props.expanded === true || child.props.defaultExpanded === true) {
|
|
3464
|
+
openKeys[depth] = String(child.key ?? index);
|
|
3465
|
+
}
|
|
3466
|
+
});
|
|
3467
|
+
return openKeys;
|
|
3468
|
+
}
|
|
3469
|
+
function getInitialSelectedKeys(children) {
|
|
3470
|
+
const selectedKeys = {};
|
|
3471
|
+
Children.forEach(children, (child, index) => {
|
|
3472
|
+
if (!isListItemElement(child) || !child.props.selected) return;
|
|
3473
|
+
const depth = child.props.depth ?? 1;
|
|
3474
|
+
if (selectedKeys[depth] == null) selectedKeys[depth] = String(child.key ?? index);
|
|
3475
|
+
});
|
|
3476
|
+
return selectedKeys;
|
|
3477
|
+
}
|
|
3478
|
+
var SExpansionList = forwardRef(
|
|
3479
|
+
function SExpansionList2({ children, ...rest }, ref) {
|
|
3480
|
+
const [openKeys, setOpenKeys] = useState(() => getInitialOpenKeys(children));
|
|
3481
|
+
const [selectedKeys, setSelectedKeys] = useState(
|
|
3482
|
+
() => getInitialSelectedKeys(children)
|
|
3483
|
+
);
|
|
3484
|
+
const listChildren = Children.map(children, (child, index) => {
|
|
3485
|
+
if (isListItemElement(child)) {
|
|
3486
|
+
const depth2 = child.props.depth ?? 1;
|
|
3487
|
+
const itemKey2 = String(child.key ?? index);
|
|
3488
|
+
return cloneElement(child, {
|
|
3489
|
+
selected: selectedKeys[depth2] === itemKey2,
|
|
3490
|
+
onClick: (event) => {
|
|
3491
|
+
setSelectedKeys((current) => ({ ...current, [depth2]: itemKey2 }));
|
|
3492
|
+
child.props.onClick?.(event);
|
|
3493
|
+
}
|
|
3494
|
+
});
|
|
3495
|
+
}
|
|
3496
|
+
if (!isExpansionItemElement(child)) return child;
|
|
3497
|
+
const depth = child.props.depth ?? 1;
|
|
3498
|
+
const itemKey = String(child.key ?? index);
|
|
3499
|
+
return cloneElement(child, {
|
|
3500
|
+
expanded: openKeys[depth] === itemKey,
|
|
3501
|
+
selected: void 0,
|
|
3502
|
+
onToggle: (next, event) => {
|
|
3503
|
+
setOpenKeys((current) => ({
|
|
3504
|
+
...current,
|
|
3505
|
+
[depth]: next ? itemKey : current[depth] === itemKey ? void 0 : current[depth]
|
|
3506
|
+
}));
|
|
3507
|
+
child.props.onToggle?.(next, event);
|
|
3508
|
+
}
|
|
3509
|
+
});
|
|
3510
|
+
});
|
|
3511
|
+
return /* @__PURE__ */ jsx(SList, { ref, ...rest, children: listChildren });
|
|
3512
|
+
}
|
|
3513
|
+
);
|
|
3514
|
+
SExpansionList.displayName = "SExpansionList";
|
|
3284
3515
|
|
|
3285
3516
|
// src/lib/floating-anim.ts
|
|
3286
3517
|
var FLOATING_SLIDE_ANIM = [
|
|
@@ -3757,6 +3988,10 @@ var topBorderColorClass = {
|
|
|
3757
3988
|
default: "bg-(--cmp-sectionHeaderCard-topBorder-color-default)",
|
|
3758
3989
|
accent: "bg-(--cmp-sectionHeaderCard-topBorder-color-accent)"
|
|
3759
3990
|
};
|
|
3991
|
+
var titleSizeClass = {
|
|
3992
|
+
xs: "typo-heading-xs",
|
|
3993
|
+
sm: "typo-heading-sm"
|
|
3994
|
+
};
|
|
3760
3995
|
var SSectionHeaderCardBody = forwardRef(
|
|
3761
3996
|
function SSectionHeaderCardBody2({ className, children, ...rest }, ref) {
|
|
3762
3997
|
return /* @__PURE__ */ jsx("div", { ref, className, ...rest, children });
|
|
@@ -3765,6 +4000,7 @@ var SSectionHeaderCardBody = forwardRef(
|
|
|
3765
4000
|
var SSectionHeaderCardHeader = forwardRef(
|
|
3766
4001
|
function SSectionHeaderCardHeader2({
|
|
3767
4002
|
title,
|
|
4003
|
+
titleSize = "xs",
|
|
3768
4004
|
marker = false,
|
|
3769
4005
|
required = false,
|
|
3770
4006
|
helpText,
|
|
@@ -3797,7 +4033,16 @@ var SSectionHeaderCardHeader = forwardRef(
|
|
|
3797
4033
|
children: [
|
|
3798
4034
|
marker && /* @__PURE__ */ jsx(SBadge, { color: "darkblue", className: "shrink-0" }),
|
|
3799
4035
|
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 shrink-0 items-center gap-[8px]", children: [
|
|
3800
|
-
/* @__PURE__ */ jsx(
|
|
4036
|
+
/* @__PURE__ */ jsx(
|
|
4037
|
+
"span",
|
|
4038
|
+
{
|
|
4039
|
+
className: cn(
|
|
4040
|
+
"min-w-0 truncate text-(--sys-color-fg-brand)",
|
|
4041
|
+
titleSizeClass[titleSize]
|
|
4042
|
+
),
|
|
4043
|
+
children: title
|
|
4044
|
+
}
|
|
4045
|
+
),
|
|
3801
4046
|
required && /* @__PURE__ */ jsx(
|
|
3802
4047
|
SIcon,
|
|
3803
4048
|
{
|
|
@@ -12417,6 +12662,6 @@ function STimeRangePicker({
|
|
|
12417
12662
|
);
|
|
12418
12663
|
}
|
|
12419
12664
|
|
|
12420
|
-
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 };
|
|
12665
|
+
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, SDraggableList, SDropdownButton, SExpansionItem, SExpansionList, 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 };
|
|
12421
12666
|
//# sourceMappingURL=index.js.map
|
|
12422
12667
|
//# sourceMappingURL=index.js.map
|