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 +1 @@
|
|
|
1
|
-
export { SSectionHeaderCard, type SSectionHeaderCardBodyChildren, type SSectionHeaderCardBodyProps, type SSectionHeaderCardChildren, type SSectionHeaderCardHeaderProps, type SSectionHeaderCardProps, type SSectionHeaderCardThickness, } from './SSectionHeaderCard';
|
|
1
|
+
export { SSectionHeaderCard, type SSectionHeaderCardBodyChildren, type SSectionHeaderCardBodyProps, type SSectionHeaderCardChildren, type SSectionHeaderCardHeaderProps, type SSectionHeaderCardProps, type SSectionHeaderCardThickness, type SSectionHeaderCardTitleSize, } from './SSectionHeaderCard';
|
package/dist/index.cjs
CHANGED
|
@@ -3025,6 +3025,7 @@ var SDraggableItem = react.forwardRef(
|
|
|
3025
3025
|
accentStripe = false,
|
|
3026
3026
|
bordered = false,
|
|
3027
3027
|
selected = false,
|
|
3028
|
+
dragging = false,
|
|
3028
3029
|
dense = false,
|
|
3029
3030
|
disabled = false,
|
|
3030
3031
|
dragOverlay = true,
|
|
@@ -3095,7 +3096,7 @@ var SDraggableItem = react.forwardRef(
|
|
|
3095
3096
|
bordered,
|
|
3096
3097
|
selected,
|
|
3097
3098
|
dense,
|
|
3098
|
-
dragging: overlayVisible,
|
|
3099
|
+
dragging: dragging || overlayVisible,
|
|
3099
3100
|
disabled,
|
|
3100
3101
|
hovered,
|
|
3101
3102
|
dragHandleProps,
|
|
@@ -3141,6 +3142,130 @@ var SDraggableItem = react.forwardRef(
|
|
|
3141
3142
|
}
|
|
3142
3143
|
);
|
|
3143
3144
|
SDraggableItem.displayName = "SDraggableItem";
|
|
3145
|
+
var SList = react.forwardRef(function SList2({ className, children, useGap = false, usePadding = false, ...rest }, ref) {
|
|
3146
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3147
|
+
"div",
|
|
3148
|
+
{
|
|
3149
|
+
ref,
|
|
3150
|
+
className: cn(
|
|
3151
|
+
useGap && "flex flex-col gap-(--cmp-list-group-gap)",
|
|
3152
|
+
usePadding && "p-(--cmp-list-group-padding)",
|
|
3153
|
+
className
|
|
3154
|
+
),
|
|
3155
|
+
...rest,
|
|
3156
|
+
children
|
|
3157
|
+
}
|
|
3158
|
+
);
|
|
3159
|
+
});
|
|
3160
|
+
SList.displayName = "SList";
|
|
3161
|
+
function reorder(items, fromIndex, toIndex) {
|
|
3162
|
+
if (fromIndex === toIndex) return items;
|
|
3163
|
+
const nextItems = [...items];
|
|
3164
|
+
const [movedItem] = nextItems.splice(fromIndex, 1);
|
|
3165
|
+
nextItems.splice(toIndex, 0, movedItem);
|
|
3166
|
+
return nextItems;
|
|
3167
|
+
}
|
|
3168
|
+
function SDraggableListInner({
|
|
3169
|
+
items,
|
|
3170
|
+
getKey,
|
|
3171
|
+
renderItem,
|
|
3172
|
+
onChange,
|
|
3173
|
+
selectedKey,
|
|
3174
|
+
defaultSelectedKey,
|
|
3175
|
+
onSelectedKeyChange,
|
|
3176
|
+
getDisabled,
|
|
3177
|
+
...rest
|
|
3178
|
+
}, ref) {
|
|
3179
|
+
const [draggingIndex, setDraggingIndex] = react.useState(null);
|
|
3180
|
+
const [dropIndex, setDropIndex] = react.useState(null);
|
|
3181
|
+
const [internalSelectedKey, setInternalSelectedKey] = react.useState(
|
|
3182
|
+
defaultSelectedKey
|
|
3183
|
+
);
|
|
3184
|
+
const listRef = react.useRef(null);
|
|
3185
|
+
const fromIndexRef = react.useRef(null);
|
|
3186
|
+
const currentSelectedKey = selectedKey ?? internalSelectedKey;
|
|
3187
|
+
const startDrag = react.useCallback((event, index) => {
|
|
3188
|
+
event.preventDefault();
|
|
3189
|
+
fromIndexRef.current = index;
|
|
3190
|
+
setDraggingIndex(index);
|
|
3191
|
+
setDropIndex(index);
|
|
3192
|
+
}, []);
|
|
3193
|
+
react.useEffect(() => {
|
|
3194
|
+
if (draggingIndex == null) return void 0;
|
|
3195
|
+
const handleMouseMove = (event) => {
|
|
3196
|
+
const itemElements = listRef.current?.querySelectorAll(
|
|
3197
|
+
"[data-draggable-list-item]"
|
|
3198
|
+
);
|
|
3199
|
+
if (!itemElements) return;
|
|
3200
|
+
let nextDropIndex = items.length;
|
|
3201
|
+
itemElements.forEach((itemElement, index) => {
|
|
3202
|
+
const rect = itemElement.getBoundingClientRect();
|
|
3203
|
+
if (event.clientY < rect.top + rect.height / 2 && nextDropIndex === items.length) {
|
|
3204
|
+
nextDropIndex = index;
|
|
3205
|
+
}
|
|
3206
|
+
});
|
|
3207
|
+
setDropIndex(nextDropIndex);
|
|
3208
|
+
};
|
|
3209
|
+
const handleMouseUp = () => {
|
|
3210
|
+
const fromIndex = fromIndexRef.current;
|
|
3211
|
+
const nextDropIndex = dropIndex;
|
|
3212
|
+
if (fromIndex != null && nextDropIndex != null) {
|
|
3213
|
+
const toIndex = nextDropIndex > fromIndex ? nextDropIndex - 1 : nextDropIndex;
|
|
3214
|
+
if (fromIndex !== toIndex) onChange(reorder(items, fromIndex, toIndex));
|
|
3215
|
+
}
|
|
3216
|
+
fromIndexRef.current = null;
|
|
3217
|
+
setDraggingIndex(null);
|
|
3218
|
+
setDropIndex(null);
|
|
3219
|
+
};
|
|
3220
|
+
window.addEventListener("mousemove", handleMouseMove);
|
|
3221
|
+
window.addEventListener("mouseup", handleMouseUp);
|
|
3222
|
+
return () => {
|
|
3223
|
+
window.removeEventListener("mousemove", handleMouseMove);
|
|
3224
|
+
window.removeEventListener("mouseup", handleMouseUp);
|
|
3225
|
+
};
|
|
3226
|
+
}, [draggingIndex, dropIndex, items, onChange]);
|
|
3227
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3228
|
+
SList,
|
|
3229
|
+
{
|
|
3230
|
+
ref: (node) => {
|
|
3231
|
+
listRef.current = node;
|
|
3232
|
+
if (typeof ref === "function") ref(node);
|
|
3233
|
+
else if (ref) ref.current = node;
|
|
3234
|
+
},
|
|
3235
|
+
...rest,
|
|
3236
|
+
children: items.map((item, index) => {
|
|
3237
|
+
const itemKey = getKey(item, index);
|
|
3238
|
+
const disabled = getDisabled?.(item, index) ?? false;
|
|
3239
|
+
const showBefore = draggingIndex != null && dropIndex === index;
|
|
3240
|
+
const showAfter = draggingIndex != null && dropIndex === items.length && index === items.length - 1;
|
|
3241
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3242
|
+
"div",
|
|
3243
|
+
{
|
|
3244
|
+
"data-draggable-list-item": true,
|
|
3245
|
+
"aria-disabled": disabled || void 0,
|
|
3246
|
+
onClick: () => {
|
|
3247
|
+
if (disabled) return;
|
|
3248
|
+
setInternalSelectedKey(itemKey);
|
|
3249
|
+
onSelectedKeyChange?.(itemKey);
|
|
3250
|
+
},
|
|
3251
|
+
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-['']" : ""}`,
|
|
3252
|
+
children: renderItem(item, index, {
|
|
3253
|
+
onDragHandleMouseDown: (event) => {
|
|
3254
|
+
if (!disabled) startDrag(event, index);
|
|
3255
|
+
},
|
|
3256
|
+
selected: currentSelectedKey === itemKey
|
|
3257
|
+
})
|
|
3258
|
+
},
|
|
3259
|
+
itemKey
|
|
3260
|
+
);
|
|
3261
|
+
})
|
|
3262
|
+
}
|
|
3263
|
+
);
|
|
3264
|
+
}
|
|
3265
|
+
var SDraggableList = react.forwardRef(SDraggableListInner);
|
|
3266
|
+
var SExpansionItemDescendantContext = react.createContext(
|
|
3267
|
+
null
|
|
3268
|
+
);
|
|
3144
3269
|
var SExpansionItem = react.forwardRef(
|
|
3145
3270
|
function SExpansionItem2({
|
|
3146
3271
|
title,
|
|
@@ -3151,6 +3276,9 @@ var SExpansionItem = react.forwardRef(
|
|
|
3151
3276
|
bordered = false,
|
|
3152
3277
|
expanded,
|
|
3153
3278
|
defaultExpanded = false,
|
|
3279
|
+
selected = false,
|
|
3280
|
+
interaction,
|
|
3281
|
+
accentStripe = false,
|
|
3154
3282
|
dense = false,
|
|
3155
3283
|
disabled = false,
|
|
3156
3284
|
onToggle,
|
|
@@ -3159,15 +3287,39 @@ var SExpansionItem = react.forwardRef(
|
|
|
3159
3287
|
...rest
|
|
3160
3288
|
}, ref) {
|
|
3161
3289
|
const [internalExpanded, setInternalExpanded] = react.useState(defaultExpanded);
|
|
3290
|
+
const [expandedDescendantCount, setExpandedDescendantCount] = react.useState(0);
|
|
3291
|
+
const [hovered, setHovered] = react.useState(false);
|
|
3292
|
+
const parentDescendantContext = react.useContext(SExpansionItemDescendantContext);
|
|
3162
3293
|
const isExpanded = expanded ?? internalExpanded;
|
|
3163
|
-
const
|
|
3294
|
+
const isSelected = isExpanded && (selected || expandedDescendantCount === 0);
|
|
3295
|
+
const hasChevronInteraction = interaction === "chevron";
|
|
3296
|
+
const showInteractionChevron = hasChevronInteraction && !disabled && (isSelected || hovered);
|
|
3297
|
+
const interactionChevronColor = isSelected ? "var(--sys-color-fg-brand)" : "var(--sys-color-fg-quaternary)";
|
|
3298
|
+
const reportExpandedDescendant = react.useCallback(
|
|
3299
|
+
(delta) => {
|
|
3300
|
+
setExpandedDescendantCount((current) => Math.max(0, current + delta));
|
|
3301
|
+
parentDescendantContext?.reportExpandedDescendant(delta);
|
|
3302
|
+
},
|
|
3303
|
+
[parentDescendantContext]
|
|
3304
|
+
);
|
|
3305
|
+
const descendantContextValue = react.useMemo(
|
|
3306
|
+
() => ({ reportExpandedDescendant }),
|
|
3307
|
+
[reportExpandedDescendant]
|
|
3308
|
+
);
|
|
3309
|
+
const leadingNode = typeof leading === "function" ? leading({ expanded: isExpanded, selected: isSelected, disabled }) : leading;
|
|
3164
3310
|
const id = react.useId();
|
|
3311
|
+
react.useEffect(() => {
|
|
3312
|
+
if (!isExpanded) return;
|
|
3313
|
+
parentDescendantContext?.reportExpandedDescendant(1);
|
|
3314
|
+
return () => parentDescendantContext?.reportExpandedDescendant(-1);
|
|
3315
|
+
}, [isExpanded, parentDescendantContext]);
|
|
3165
3316
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3166
3317
|
"div",
|
|
3167
3318
|
{
|
|
3168
3319
|
ref,
|
|
3169
3320
|
className: cn(
|
|
3170
|
-
"group/expansion-item overflow-hidden bg-(--cmp-listExpansionItem-title-bg-default)",
|
|
3321
|
+
"group/expansion-item relative overflow-hidden bg-(--cmp-listExpansionItem-title-bg-default)",
|
|
3322
|
+
!bordered && "border-b border-(--cmp-listExpansionItem-border-default)",
|
|
3171
3323
|
// TODO: expansionItem/bordered/radius 및 border intent 토큰 생성 후 고정값을 토큰으로 교체한다.
|
|
3172
3324
|
bordered && "rounded-[8px] border border-[#E1E1E1] hover:border-[#AAAAAA] [&:has(>button:hover)]:border-[#AAAAAA]",
|
|
3173
3325
|
bordered && isExpanded && "!border-[#93C4FF]",
|
|
@@ -3175,6 +3327,13 @@ var SExpansionItem = react.forwardRef(
|
|
|
3175
3327
|
),
|
|
3176
3328
|
...rest,
|
|
3177
3329
|
children: [
|
|
3330
|
+
accentStripe && !bordered && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3331
|
+
"span",
|
|
3332
|
+
{
|
|
3333
|
+
"aria-hidden": "true",
|
|
3334
|
+
className: "pointer-events-none absolute bottom-[-1px] left-0 top-0 z-[1] w-(--cmp-listItem-accentStripe-width) bg-(--cmp-listItem-accentStripe-color)"
|
|
3335
|
+
}
|
|
3336
|
+
),
|
|
3178
3337
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3179
3338
|
"button",
|
|
3180
3339
|
{
|
|
@@ -3182,6 +3341,8 @@ var SExpansionItem = react.forwardRef(
|
|
|
3182
3341
|
disabled,
|
|
3183
3342
|
"aria-expanded": isExpanded,
|
|
3184
3343
|
"aria-controls": id,
|
|
3344
|
+
onMouseEnter: () => setHovered(true),
|
|
3345
|
+
onMouseLeave: () => setHovered(false),
|
|
3185
3346
|
onClick: (event) => {
|
|
3186
3347
|
if (disabled) return;
|
|
3187
3348
|
const next = !isExpanded;
|
|
@@ -3189,14 +3350,17 @@ var SExpansionItem = react.forwardRef(
|
|
|
3189
3350
|
onToggle?.(next, event);
|
|
3190
3351
|
},
|
|
3191
3352
|
className: cn(
|
|
3192
|
-
"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)",
|
|
3353
|
+
"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)",
|
|
3193
3354
|
isExpanded && "border-b border-(--cmp-listExpansionItem-title-border)",
|
|
3194
|
-
!isExpanded && "hover:bg-(--cmp-listExpansionItem-title-bg-hover)",
|
|
3355
|
+
hasChevronInteraction ? "hover:bg-(--sys-color-bg-neutralBright)" : !isExpanded && "hover:bg-(--cmp-listExpansionItem-title-bg-hover)",
|
|
3195
3356
|
dense ? "h-[32px] py-(--cmp-listExpansionItem-title-paddingY-dense)" : "h-[40px] py-(--cmp-listExpansionItem-title-paddingY-normal)",
|
|
3196
3357
|
"gap-(--cmp-listExpansionItem-title-gap)",
|
|
3197
3358
|
"pr-(--cmp-listExpansionItem-title-paddingX)",
|
|
3198
|
-
depth === 2 ? "pl-[
|
|
3199
|
-
isExpanded &&
|
|
3359
|
+
depth === 2 ? "pl-[36px]" : depth === 3 ? "pl-[56px]" : "pl-[16px]",
|
|
3360
|
+
isExpanded && cn(
|
|
3361
|
+
"text-(--cmp-listExpansionItem-title-text-expanded)",
|
|
3362
|
+
isSelected && "bg-(--cmp-listExpansionItem-title-bg-expanded)"
|
|
3363
|
+
)
|
|
3200
3364
|
),
|
|
3201
3365
|
children: [
|
|
3202
3366
|
!leading && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3211,11 +3375,12 @@ var SExpansionItem = react.forwardRef(
|
|
|
3211
3375
|
),
|
|
3212
3376
|
leadingNode,
|
|
3213
3377
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex min-w-0 flex-1 flex-col", children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: title }) }),
|
|
3214
|
-
trailing
|
|
3378
|
+
trailing,
|
|
3379
|
+
showInteractionChevron && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "chevronRight", size: 12, color: interactionChevronColor })
|
|
3215
3380
|
]
|
|
3216
3381
|
}
|
|
3217
3382
|
),
|
|
3218
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3383
|
+
/* @__PURE__ */ jsxRuntime.jsx(SExpansionItemDescendantContext.Provider, { value: descendantContextValue, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3219
3384
|
"div",
|
|
3220
3385
|
{
|
|
3221
3386
|
id,
|
|
@@ -3226,34 +3391,21 @@ var SExpansionItem = react.forwardRef(
|
|
|
3226
3391
|
),
|
|
3227
3392
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(bodyPadding && "p-(--cmp-listExpansionItem-body-padding)"), children }) })
|
|
3228
3393
|
}
|
|
3229
|
-
)
|
|
3394
|
+
) })
|
|
3230
3395
|
]
|
|
3231
3396
|
}
|
|
3232
3397
|
);
|
|
3233
3398
|
}
|
|
3234
3399
|
);
|
|
3235
|
-
var SList = react.forwardRef(function SList2({ className, children, useGap = false, usePadding = false, ...rest }, ref) {
|
|
3236
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3237
|
-
"div",
|
|
3238
|
-
{
|
|
3239
|
-
ref,
|
|
3240
|
-
className: cn(
|
|
3241
|
-
useGap && "flex flex-col gap-(--cmp-list-group-gap)",
|
|
3242
|
-
usePadding && "p-(--cmp-list-group-padding)",
|
|
3243
|
-
className
|
|
3244
|
-
),
|
|
3245
|
-
...rest,
|
|
3246
|
-
children
|
|
3247
|
-
}
|
|
3248
|
-
);
|
|
3249
|
-
});
|
|
3250
|
-
SList.displayName = "SList";
|
|
3251
3400
|
var SListItem = react.forwardRef(function SListItem2({
|
|
3252
3401
|
title,
|
|
3253
3402
|
depth = 1,
|
|
3254
3403
|
leading,
|
|
3255
3404
|
trailing,
|
|
3256
3405
|
bordered = false,
|
|
3406
|
+
selected = false,
|
|
3407
|
+
clickable = true,
|
|
3408
|
+
interaction,
|
|
3257
3409
|
accentStripe = false,
|
|
3258
3410
|
dense = false,
|
|
3259
3411
|
disabled = false,
|
|
@@ -3267,8 +3419,13 @@ var SListItem = react.forwardRef(function SListItem2({
|
|
|
3267
3419
|
const titleNode = typeof title === "function" ? title(renderState) : title;
|
|
3268
3420
|
const leadingNode = typeof leading === "function" ? leading(renderState) : leading;
|
|
3269
3421
|
const trailingNode = typeof trailing === "function" ? trailing(renderState) : trailing;
|
|
3422
|
+
const isInteractive = clickable && !disabled;
|
|
3423
|
+
const isSelected = isInteractive && selected;
|
|
3424
|
+
const hasChevronInteraction = interaction === "chevron";
|
|
3425
|
+
const showInteractionChevron = hasChevronInteraction && isInteractive && (isSelected || hovered);
|
|
3426
|
+
const interactionChevronColor = isSelected ? "var(--sys-color-fg-brand)" : "var(--sys-color-fg-quaternary)";
|
|
3270
3427
|
const handleMouseEnter = (event) => {
|
|
3271
|
-
if (
|
|
3428
|
+
if (isInteractive) setHovered(true);
|
|
3272
3429
|
onMouseEnter?.(event);
|
|
3273
3430
|
};
|
|
3274
3431
|
const handleMouseLeave = (event) => {
|
|
@@ -3284,12 +3441,21 @@ var SListItem = react.forwardRef(function SListItem2({
|
|
|
3284
3441
|
onMouseLeave: handleMouseLeave,
|
|
3285
3442
|
className: cn(
|
|
3286
3443
|
"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)",
|
|
3287
|
-
disabled ? "pointer-events-none cursor-not-allowed text-(--sys-color-disabled-text)" :
|
|
3444
|
+
disabled ? "pointer-events-none cursor-not-allowed text-(--sys-color-disabled-text)" : isSelected ? cn(
|
|
3445
|
+
"cursor-pointer text-(--cmp-listItem-text-selected)",
|
|
3446
|
+
"bg-(--cmp-listItem-bg-selected)"
|
|
3447
|
+
) : isInteractive ? cn(
|
|
3448
|
+
"cursor-pointer",
|
|
3449
|
+
hasChevronInteraction ? "hover:bg-(--sys-color-bg-neutralBright)" : "hover:bg-(--cmp-listItem-bg-hover)"
|
|
3450
|
+
) : "cursor-default",
|
|
3288
3451
|
dense ? "h-[32px] py-(--cmp-listItem-paddingY-dense)" : "h-[40px] py-(--cmp-listItem-paddingY-normal)",
|
|
3289
3452
|
"gap-(--cmp-listItem-gap)",
|
|
3290
3453
|
"pr-(--cmp-listItem-paddingX)",
|
|
3291
|
-
depth === 2 ? "pl-[
|
|
3292
|
-
bordered ?
|
|
3454
|
+
depth === 2 ? "pl-[36px]" : depth === 3 ? "pl-[56px]" : "pl-[16px]",
|
|
3455
|
+
bordered ? cn(
|
|
3456
|
+
"overflow-hidden rounded-(--cmp-listItem-radius-bordered) border border-(--cmp-listItem-border-default)",
|
|
3457
|
+
isSelected ? "border-(--cmp-listItem-bordered-border-selected)" : isInteractive && "hover:border-(--cmp-listItem-bordered-border-hover)"
|
|
3458
|
+
) : "border-b border-(--cmp-listItem-border-default)",
|
|
3293
3459
|
className
|
|
3294
3460
|
),
|
|
3295
3461
|
...rest,
|
|
@@ -3303,12 +3469,77 @@ var SListItem = react.forwardRef(function SListItem2({
|
|
|
3303
3469
|
),
|
|
3304
3470
|
leadingNode,
|
|
3305
3471
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex min-w-0 flex-1 flex-col", children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: titleNode }) }),
|
|
3306
|
-
trailingNode
|
|
3472
|
+
trailingNode,
|
|
3473
|
+
showInteractionChevron && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "chevronRight", size: 12, color: interactionChevronColor })
|
|
3307
3474
|
]
|
|
3308
3475
|
}
|
|
3309
3476
|
);
|
|
3310
3477
|
});
|
|
3311
3478
|
SListItem.displayName = "SListItem";
|
|
3479
|
+
function isExpansionItemElement(node) {
|
|
3480
|
+
return react.isValidElement(node) && node.type === SExpansionItem;
|
|
3481
|
+
}
|
|
3482
|
+
function isListItemElement(node) {
|
|
3483
|
+
return react.isValidElement(node) && node.type === SListItem;
|
|
3484
|
+
}
|
|
3485
|
+
function getInitialOpenKeys(children) {
|
|
3486
|
+
const openKeys = {};
|
|
3487
|
+
react.Children.forEach(children, (child, index) => {
|
|
3488
|
+
if (!isExpansionItemElement(child)) return;
|
|
3489
|
+
const depth = child.props.depth ?? 1;
|
|
3490
|
+
if (openKeys[depth] != null) return;
|
|
3491
|
+
if (child.props.expanded === true || child.props.defaultExpanded === true) {
|
|
3492
|
+
openKeys[depth] = String(child.key ?? index);
|
|
3493
|
+
}
|
|
3494
|
+
});
|
|
3495
|
+
return openKeys;
|
|
3496
|
+
}
|
|
3497
|
+
function getInitialSelectedKeys(children) {
|
|
3498
|
+
const selectedKeys = {};
|
|
3499
|
+
react.Children.forEach(children, (child, index) => {
|
|
3500
|
+
if (!isListItemElement(child) || !child.props.selected) return;
|
|
3501
|
+
const depth = child.props.depth ?? 1;
|
|
3502
|
+
if (selectedKeys[depth] == null) selectedKeys[depth] = String(child.key ?? index);
|
|
3503
|
+
});
|
|
3504
|
+
return selectedKeys;
|
|
3505
|
+
}
|
|
3506
|
+
var SExpansionList = react.forwardRef(
|
|
3507
|
+
function SExpansionList2({ children, ...rest }, ref) {
|
|
3508
|
+
const [openKeys, setOpenKeys] = react.useState(() => getInitialOpenKeys(children));
|
|
3509
|
+
const [selectedKeys, setSelectedKeys] = react.useState(
|
|
3510
|
+
() => getInitialSelectedKeys(children)
|
|
3511
|
+
);
|
|
3512
|
+
const listChildren = react.Children.map(children, (child, index) => {
|
|
3513
|
+
if (isListItemElement(child)) {
|
|
3514
|
+
const depth2 = child.props.depth ?? 1;
|
|
3515
|
+
const itemKey2 = String(child.key ?? index);
|
|
3516
|
+
return react.cloneElement(child, {
|
|
3517
|
+
selected: selectedKeys[depth2] === itemKey2,
|
|
3518
|
+
onClick: (event) => {
|
|
3519
|
+
setSelectedKeys((current) => ({ ...current, [depth2]: itemKey2 }));
|
|
3520
|
+
child.props.onClick?.(event);
|
|
3521
|
+
}
|
|
3522
|
+
});
|
|
3523
|
+
}
|
|
3524
|
+
if (!isExpansionItemElement(child)) return child;
|
|
3525
|
+
const depth = child.props.depth ?? 1;
|
|
3526
|
+
const itemKey = String(child.key ?? index);
|
|
3527
|
+
return react.cloneElement(child, {
|
|
3528
|
+
expanded: openKeys[depth] === itemKey,
|
|
3529
|
+
selected: void 0,
|
|
3530
|
+
onToggle: (next, event) => {
|
|
3531
|
+
setOpenKeys((current) => ({
|
|
3532
|
+
...current,
|
|
3533
|
+
[depth]: next ? itemKey : current[depth] === itemKey ? void 0 : current[depth]
|
|
3534
|
+
}));
|
|
3535
|
+
child.props.onToggle?.(next, event);
|
|
3536
|
+
}
|
|
3537
|
+
});
|
|
3538
|
+
});
|
|
3539
|
+
return /* @__PURE__ */ jsxRuntime.jsx(SList, { ref, ...rest, children: listChildren });
|
|
3540
|
+
}
|
|
3541
|
+
);
|
|
3542
|
+
SExpansionList.displayName = "SExpansionList";
|
|
3312
3543
|
|
|
3313
3544
|
// src/lib/floating-anim.ts
|
|
3314
3545
|
var FLOATING_SLIDE_ANIM = [
|
|
@@ -3785,6 +4016,10 @@ var topBorderColorClass = {
|
|
|
3785
4016
|
default: "bg-(--cmp-sectionHeaderCard-topBorder-color-default)",
|
|
3786
4017
|
accent: "bg-(--cmp-sectionHeaderCard-topBorder-color-accent)"
|
|
3787
4018
|
};
|
|
4019
|
+
var titleSizeClass = {
|
|
4020
|
+
xs: "typo-heading-xs",
|
|
4021
|
+
sm: "typo-heading-sm"
|
|
4022
|
+
};
|
|
3788
4023
|
var SSectionHeaderCardBody = react.forwardRef(
|
|
3789
4024
|
function SSectionHeaderCardBody2({ className, children, ...rest }, ref) {
|
|
3790
4025
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className, ...rest, children });
|
|
@@ -3793,6 +4028,7 @@ var SSectionHeaderCardBody = react.forwardRef(
|
|
|
3793
4028
|
var SSectionHeaderCardHeader = react.forwardRef(
|
|
3794
4029
|
function SSectionHeaderCardHeader2({
|
|
3795
4030
|
title,
|
|
4031
|
+
titleSize = "xs",
|
|
3796
4032
|
marker = false,
|
|
3797
4033
|
required = false,
|
|
3798
4034
|
helpText,
|
|
@@ -3825,7 +4061,16 @@ var SSectionHeaderCardHeader = react.forwardRef(
|
|
|
3825
4061
|
children: [
|
|
3826
4062
|
marker && /* @__PURE__ */ jsxRuntime.jsx(SBadge, { color: "darkblue", className: "shrink-0" }),
|
|
3827
4063
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 shrink-0 items-center gap-[8px]", children: [
|
|
3828
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4064
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4065
|
+
"span",
|
|
4066
|
+
{
|
|
4067
|
+
className: cn(
|
|
4068
|
+
"min-w-0 truncate text-(--sys-color-fg-brand)",
|
|
4069
|
+
titleSizeClass[titleSize]
|
|
4070
|
+
),
|
|
4071
|
+
children: title
|
|
4072
|
+
}
|
|
4073
|
+
),
|
|
3829
4074
|
required && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3830
4075
|
SIcon,
|
|
3831
4076
|
{
|
|
@@ -12476,8 +12721,10 @@ exports.SDatePicker = SDatePicker;
|
|
|
12476
12721
|
exports.SDateRangePicker = SDateRangePicker;
|
|
12477
12722
|
exports.SDivider = SDivider;
|
|
12478
12723
|
exports.SDraggableItem = SDraggableItem;
|
|
12724
|
+
exports.SDraggableList = SDraggableList;
|
|
12479
12725
|
exports.SDropdownButton = SDropdownButton;
|
|
12480
12726
|
exports.SExpansionItem = SExpansionItem;
|
|
12727
|
+
exports.SExpansionList = SExpansionList;
|
|
12481
12728
|
exports.SField = SField;
|
|
12482
12729
|
exports.SFilePicker = SFilePicker;
|
|
12483
12730
|
exports.SForm = SForm;
|