sellmate-design-system-react 9.0.0-beta.40 → 9.0.0-beta.41
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 +41 -20
- package/dist/components/SBarcodeInput/README.md +3 -3
- package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +3 -1
- package/dist/components/SChipInput/README.md +1 -1
- package/dist/components/SChipInput/SChipInput.d.ts +1 -1
- package/dist/components/SConfirmModal/README.md +3 -11
- package/dist/components/SConfirmModal/SConfirmModal.d.ts +16 -8
- package/dist/components/SConfirmModal/index.d.ts +1 -1
- package/dist/components/SDateRangePicker/README.md +2 -2
- package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +4 -4
- package/dist/components/SEditor/EditorBody.d.ts +1 -1
- package/dist/components/SEditor/README.md +4 -4
- package/dist/components/SEditor/SEditor.d.ts +3 -3
- package/dist/components/SField/README.md +2 -2
- package/dist/components/SField/SField.d.ts +8 -2
- package/dist/components/SFilePicker/README.md +3 -3
- package/dist/components/SFilePicker/SFilePicker.d.ts +4 -4
- package/dist/components/SForm/README.md +1 -1
- package/dist/components/SForm/SForm.d.ts +2 -2
- package/dist/components/SGnb/README.md +7 -7
- package/dist/components/SGnb/SGnb.d.ts +9 -9
- package/dist/components/SGnb/gnb.config.d.ts +2 -2
- package/dist/components/SImage/README.md +1 -1
- package/dist/components/SImage/SImage.d.ts +2 -2
- package/dist/components/SInput/README.md +3 -3
- package/dist/components/SInput/SInput.d.ts +3 -3
- package/dist/components/SLayout/README.md +1 -1
- package/dist/components/SLayout/SLayout.d.ts +2 -2
- package/dist/components/SList/README.md +10 -2
- package/dist/components/SList/SList.d.ts +7 -3
- package/dist/components/SList/index.d.ts +1 -1
- package/dist/components/SLoadingModal/README.md +1 -1
- package/dist/components/SLoadingModal/SLoadingModal.d.ts +2 -2
- package/dist/components/SModal/README.md +1 -1
- package/dist/components/SNumberInput/README.md +5 -5
- package/dist/components/SNumberInput/SNumberInput.d.ts +5 -3
- package/dist/components/SPage/README.md +42 -3
- package/dist/components/SPage/SPage.d.ts +16 -1
- package/dist/components/SPage/SPageHeader.d.ts +19 -8
- package/dist/components/SPage/index.d.ts +1 -1
- package/dist/components/SPage/page-column.d.ts +11 -2
- package/dist/components/SPage/page-width.d.ts +23 -0
- package/dist/components/SPage/page.config.d.ts +18 -0
- package/dist/components/SPopup/README.md +8 -2
- package/dist/components/SPopup/SPopup.d.ts +7 -3
- package/dist/components/SPopup/index.d.ts +1 -1
- package/dist/components/SSearchInput/README.md +3 -3
- package/dist/components/SSearchInput/SSearchInput.d.ts +3 -3
- package/dist/components/SSelect/README.md +5 -5
- package/dist/components/SSelect/SSelect.d.ts +14 -6
- package/dist/components/SSplitter/README.md +2 -2
- package/dist/components/SSplitter/SSplitter.d.ts +7 -3
- package/dist/components/SSwitch/README.md +0 -1
- package/dist/components/SSwitch/SSwitch.d.ts +1 -3
- package/dist/components/STable/README.md +8 -9
- package/dist/components/STable/STable.d.ts +9 -11
- package/dist/components/STabs/README.md +1 -1
- package/dist/components/STabs/STabs.d.ts +2 -2
- package/dist/components/STextLink/README.md +1 -1
- package/dist/components/STextLink/STextLink.d.ts +1 -1
- package/dist/components/STextarea/README.md +3 -3
- package/dist/components/STextarea/STextarea.d.ts +3 -3
- package/dist/components/STimePicker/README.md +1 -1
- package/dist/components/STimePicker/STimePicker.d.ts +4 -4
- package/dist/components/STimeRangePicker/README.md +1 -1
- package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +4 -4
- package/dist/components/SToast/README.md +1 -1
- package/dist/components/SToast/SToast.d.ts +2 -2
- package/dist/components/STooltip/README.md +1 -1
- package/dist/components/STooltip/STooltip.d.ts +1 -1
- package/dist/components/STree/README.md +4 -4
- package/dist/components/STree/STree.d.ts +17 -5
- package/dist/index.cjs +295 -237
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +294 -238
- package/dist/index.js.map +1 -1
- package/dist/llms-full.txt +170 -106
- package/dist/llms.txt +41 -20
- package/dist/styles.css +9 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3385,7 +3385,7 @@ var SImage = /* @__PURE__ */ forwardRef(function SImage2({
|
|
|
3385
3385
|
position = "50% 50%",
|
|
3386
3386
|
loading: loading2 = "lazy",
|
|
3387
3387
|
loadingShowDelay = 0,
|
|
3388
|
-
|
|
3388
|
+
showSpinner = true,
|
|
3389
3389
|
loadingSlot,
|
|
3390
3390
|
errorSlot,
|
|
3391
3391
|
imgProps,
|
|
@@ -3421,7 +3421,7 @@ var SImage = /* @__PURE__ */ forwardRef(function SImage2({
|
|
|
3421
3421
|
}, [status, loadingShowDelay, src]);
|
|
3422
3422
|
const isEmpty = !src;
|
|
3423
3423
|
const showFallback = isEmpty || status === "error";
|
|
3424
|
-
const
|
|
3424
|
+
const spinnerShown = !isEmpty && status === "loading" && showSpinner && spinnerVisible;
|
|
3425
3425
|
return /* @__PURE__ */ jsxs(
|
|
3426
3426
|
"div",
|
|
3427
3427
|
{
|
|
@@ -3460,7 +3460,7 @@ var SImage = /* @__PURE__ */ forwardRef(function SImage2({
|
|
|
3460
3460
|
}
|
|
3461
3461
|
),
|
|
3462
3462
|
showFallback && /* @__PURE__ */ jsx("span", { className: "absolute inset-0 flex items-center justify-center", children: errorSlot ?? /* @__PURE__ */ jsx(SIcon, { name: "image", size: EMPTY_ICON_SIZE, color: "var(--cmp-image-icon)" }) }),
|
|
3463
|
-
|
|
3463
|
+
spinnerShown && /* @__PURE__ */ jsx("span", { className: "absolute inset-0 flex items-center justify-center", children: loadingSlot ?? /* @__PURE__ */ jsx(SCircleProgress, { indeterminate: true, type: "neutral", size: SPINNER_SIZE }) })
|
|
3464
3464
|
]
|
|
3465
3465
|
}
|
|
3466
3466
|
);
|
|
@@ -4052,6 +4052,10 @@ var SDivider = /* @__PURE__ */ forwardRef(function SDivider2({ vertical = false,
|
|
|
4052
4052
|
}
|
|
4053
4053
|
);
|
|
4054
4054
|
});
|
|
4055
|
+
var PADDING_CLASS = {
|
|
4056
|
+
default: "p-(--cmp-list-group-padding)",
|
|
4057
|
+
none: ""
|
|
4058
|
+
};
|
|
4055
4059
|
var dividerStyle = { backgroundColor: "var(--cmp-listItem-border-default)" };
|
|
4056
4060
|
function hasBorderedChild(children) {
|
|
4057
4061
|
let bordered = false;
|
|
@@ -4077,15 +4081,15 @@ function withDividers(children) {
|
|
|
4077
4081
|
]
|
|
4078
4082
|
);
|
|
4079
4083
|
}
|
|
4080
|
-
var SListImpl = /* @__PURE__ */ forwardRef(function SList({ className, children,
|
|
4081
|
-
const showDivider = !
|
|
4084
|
+
var SListImpl = /* @__PURE__ */ forwardRef(function SList({ className, children, gap = false, padding = "none", ...rest }, ref) {
|
|
4085
|
+
const showDivider = !gap && !hasBorderedChild(children);
|
|
4082
4086
|
return /* @__PURE__ */ jsx(
|
|
4083
4087
|
"div",
|
|
4084
4088
|
{
|
|
4085
4089
|
ref,
|
|
4086
4090
|
className: cn(
|
|
4087
|
-
|
|
4088
|
-
|
|
4091
|
+
gap && "flex flex-col gap-(--cmp-list-group-gap)",
|
|
4092
|
+
PADDING_CLASS[padding],
|
|
4089
4093
|
className
|
|
4090
4094
|
),
|
|
4091
4095
|
...rest,
|
|
@@ -4330,7 +4334,7 @@ function SDraggableListInner({
|
|
|
4330
4334
|
maxDepth = 3,
|
|
4331
4335
|
listId,
|
|
4332
4336
|
group: groupName,
|
|
4333
|
-
|
|
4337
|
+
gap,
|
|
4334
4338
|
className,
|
|
4335
4339
|
...rest
|
|
4336
4340
|
}, ref) {
|
|
@@ -4345,7 +4349,7 @@ function SDraggableListInner({
|
|
|
4345
4349
|
const fromIndexRef = useRef(null);
|
|
4346
4350
|
const currentSelectedKey = selectedKey ?? internalSelectedKey;
|
|
4347
4351
|
const usesDepth = getDepth != null;
|
|
4348
|
-
const depthEnabled = usesDepth && !
|
|
4352
|
+
const depthEnabled = usesDepth && !gap;
|
|
4349
4353
|
const groupDragging = dragContext?.dragging;
|
|
4350
4354
|
const draggedSubtreeStart = dragContext ? groupDragging?.listId === listId ? groupDragging?.index ?? null : null : draggingIndex;
|
|
4351
4355
|
const startDrag = useCallback((event, index) => {
|
|
@@ -4459,11 +4463,11 @@ function SDraggableListInner({
|
|
|
4459
4463
|
borderTop: "2px solid var(--sys-color-fg-accentLight)",
|
|
4460
4464
|
left: getIndicatorOffset(depth),
|
|
4461
4465
|
right: 0,
|
|
4462
|
-
top:
|
|
4466
|
+
top: gap ? -5 : 0
|
|
4463
4467
|
});
|
|
4464
4468
|
const afterIndicatorStyle = (depth) => ({
|
|
4465
4469
|
borderTop: "2px solid var(--sys-color-fg-accentLight)",
|
|
4466
|
-
bottom:
|
|
4470
|
+
bottom: gap ? -5 : -1,
|
|
4467
4471
|
left: getIndicatorOffset(depth),
|
|
4468
4472
|
right: 0
|
|
4469
4473
|
});
|
|
@@ -4486,7 +4490,7 @@ function SDraggableListInner({
|
|
|
4486
4490
|
{
|
|
4487
4491
|
ref: setListRef,
|
|
4488
4492
|
...rest,
|
|
4489
|
-
|
|
4493
|
+
gap,
|
|
4490
4494
|
className: `${className ?? ""} ${dragContext ? "min-h-[40px]" : ""} ${showEmptyDrop ? "relative before:absolute before:left-0 before:right-0 before:top-0 before:z-10 before:h-[2px] before:bg-(--sys-color-fg-accentLight) before:content-['']" : ""}`,
|
|
4491
4495
|
"data-drag-active": dragActive || void 0,
|
|
4492
4496
|
"data-draggable-group": dragContext ? dragGroup : void 0,
|
|
@@ -5324,7 +5328,7 @@ function STreeAllItem({
|
|
|
5324
5328
|
var STreeItemImpl = /* @__PURE__ */ forwardRef(function STreeItem({
|
|
5325
5329
|
node,
|
|
5326
5330
|
depth = 1,
|
|
5327
|
-
|
|
5331
|
+
last = true,
|
|
5328
5332
|
ancestorLast = [],
|
|
5329
5333
|
expanded = false,
|
|
5330
5334
|
selected = false,
|
|
@@ -5392,7 +5396,7 @@ var STreeItemImpl = /* @__PURE__ */ forwardRef(function STreeItem({
|
|
|
5392
5396
|
size,
|
|
5393
5397
|
depth,
|
|
5394
5398
|
hasChildren,
|
|
5395
|
-
isLast,
|
|
5399
|
+
isLast: last,
|
|
5396
5400
|
ancestorLast
|
|
5397
5401
|
}
|
|
5398
5402
|
),
|
|
@@ -5460,7 +5464,7 @@ var STreeImpl = /* @__PURE__ */ forwardRef(function STree({
|
|
|
5460
5464
|
defaultExpandedIds,
|
|
5461
5465
|
selectable = true,
|
|
5462
5466
|
size = "sm",
|
|
5463
|
-
|
|
5467
|
+
showSelectAll = false,
|
|
5464
5468
|
cascadeSelection = true,
|
|
5465
5469
|
guideline = true,
|
|
5466
5470
|
border = true,
|
|
@@ -5483,7 +5487,7 @@ var STreeImpl = /* @__PURE__ */ forwardRef(function STree({
|
|
|
5483
5487
|
const allSelected = selectableIds.length > 0 && selectableIds.every((id) => selectedSet.has(id));
|
|
5484
5488
|
const someSelected = selectableIds.some((id) => selectedSet.has(id));
|
|
5485
5489
|
const allIndeterminate = someSelected && !allSelected;
|
|
5486
|
-
const showAllItem = selectable &&
|
|
5490
|
+
const showAllItem = selectable && showSelectAll;
|
|
5487
5491
|
const updateExpanded = (node) => {
|
|
5488
5492
|
const next = new Set(currentExpandedIds);
|
|
5489
5493
|
if (next.has(node.id)) next.delete(node.id);
|
|
@@ -5527,7 +5531,7 @@ var STreeImpl = /* @__PURE__ */ forwardRef(function STree({
|
|
|
5527
5531
|
{
|
|
5528
5532
|
node,
|
|
5529
5533
|
depth,
|
|
5530
|
-
isLast,
|
|
5534
|
+
last: isLast,
|
|
5531
5535
|
ancestorLast,
|
|
5532
5536
|
expanded: isExpanded,
|
|
5533
5537
|
selected,
|
|
@@ -5671,7 +5675,7 @@ var STooltipImpl = /* @__PURE__ */ forwardRef(function STooltip({
|
|
|
5671
5675
|
placement = "top",
|
|
5672
5676
|
sideOffset = 8,
|
|
5673
5677
|
tooltipType = "default",
|
|
5674
|
-
|
|
5678
|
+
showClose = false,
|
|
5675
5679
|
disabled = false,
|
|
5676
5680
|
children,
|
|
5677
5681
|
icon = "helpOutline",
|
|
@@ -5706,7 +5710,7 @@ var STooltipImpl = /* @__PURE__ */ forwardRef(function STooltip({
|
|
|
5706
5710
|
setOpenState(true);
|
|
5707
5711
|
};
|
|
5708
5712
|
const startHide = () => {
|
|
5709
|
-
if (
|
|
5713
|
+
if (showClose) return;
|
|
5710
5714
|
cancelHide();
|
|
5711
5715
|
hideTimer.current = setTimeout(() => setOpenState(false), HIDE_DELAY_MS);
|
|
5712
5716
|
};
|
|
@@ -5757,7 +5761,7 @@ var STooltipImpl = /* @__PURE__ */ forwardRef(function STooltip({
|
|
|
5757
5761
|
return /* @__PURE__ */ jsxs(RPopover12.Root, { open, onOpenChange: setOpenState, children: [
|
|
5758
5762
|
isNone ? (
|
|
5759
5763
|
// 트리거 없음: children 을 래퍼 없이 그대로 앵커로 쓴다 (소비자 레이아웃 보존).
|
|
5760
|
-
// mouse/focus 핸들러가 없으므로
|
|
5764
|
+
// mouse/focus 핸들러가 없으므로 showClose 없이도 자동 닫힘이 발생하지 않는다.
|
|
5761
5765
|
/* @__PURE__ */ jsx(RPopover12.Anchor, { asChild: true, children: triggerNode })
|
|
5762
5766
|
) : isHover ? (
|
|
5763
5767
|
// hover: Anchor(위치 기준) + 직접 mouse 핸들러 — 클릭으로 토글되지 않도록 Trigger 미사용
|
|
@@ -5782,10 +5786,10 @@ var STooltipImpl = /* @__PURE__ */ forwardRef(function STooltip({
|
|
|
5782
5786
|
style: contentStyle,
|
|
5783
5787
|
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
5784
5788
|
onInteractOutside: (e) => {
|
|
5785
|
-
if (
|
|
5789
|
+
if (showClose || isNone) e.preventDefault();
|
|
5786
5790
|
},
|
|
5787
5791
|
onEscapeKeyDown: (e) => {
|
|
5788
|
-
if (
|
|
5792
|
+
if (showClose || isNone) e.preventDefault();
|
|
5789
5793
|
},
|
|
5790
5794
|
onMouseEnter: isHover ? cancelHide : void 0,
|
|
5791
5795
|
onMouseLeave: isHover ? startHide : void 0,
|
|
@@ -5793,7 +5797,7 @@ var STooltipImpl = /* @__PURE__ */ forwardRef(function STooltip({
|
|
|
5793
5797
|
children: [
|
|
5794
5798
|
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-[12px]", children: [
|
|
5795
5799
|
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: body }),
|
|
5796
|
-
|
|
5800
|
+
showClose && !isNone && /* @__PURE__ */ jsx(
|
|
5797
5801
|
SGhostButton,
|
|
5798
5802
|
{
|
|
5799
5803
|
icon: "close",
|
|
@@ -6050,7 +6054,7 @@ var SSplitterRoot = /* @__PURE__ */ forwardRef(function SSplitter({
|
|
|
6050
6054
|
onValueChange,
|
|
6051
6055
|
unit = "%",
|
|
6052
6056
|
limits,
|
|
6053
|
-
|
|
6057
|
+
updateWhileDragging = false,
|
|
6054
6058
|
vertical = false,
|
|
6055
6059
|
disabled = false,
|
|
6056
6060
|
dividerClassName,
|
|
@@ -6080,8 +6084,8 @@ var SSplitterRoot = /* @__PURE__ */ forwardRef(function SSplitter({
|
|
|
6080
6084
|
const [minLimit, maxLimit] = limits ?? SSPLITTER_DEFAULT_LIMITS[unit];
|
|
6081
6085
|
const stateRef = useRef({ committedValue, unit, vertical, minLimit, maxLimit });
|
|
6082
6086
|
stateRef.current = { committedValue, unit, vertical, minLimit, maxLimit };
|
|
6083
|
-
const emitRef = useRef({ onValueChange,
|
|
6084
|
-
emitRef.current = { onValueChange,
|
|
6087
|
+
const emitRef = useRef({ onValueChange, updateWhileDragging, isControlled });
|
|
6088
|
+
emitRef.current = { onValueChange, updateWhileDragging, isControlled };
|
|
6085
6089
|
const measure = useCallback(() => {
|
|
6086
6090
|
const el = rootRef.current;
|
|
6087
6091
|
if (!el) return 0;
|
|
@@ -6120,7 +6124,7 @@ var SSplitterRoot = /* @__PURE__ */ forwardRef(function SSplitter({
|
|
|
6120
6124
|
const delta = (isVertical ? moveEvent.clientY : moveEvent.clientX) - startPos;
|
|
6121
6125
|
latest = clamp4(startValue + multiplier * delta, containerSize);
|
|
6122
6126
|
setDragValue(latest);
|
|
6123
|
-
if (emitRef.current.
|
|
6127
|
+
if (emitRef.current.updateWhileDragging) commit(latest);
|
|
6124
6128
|
};
|
|
6125
6129
|
const endDrag = () => {
|
|
6126
6130
|
document.removeEventListener("mousemove", onMove);
|
|
@@ -6557,7 +6561,7 @@ var STextLink = /* @__PURE__ */ forwardRef(function STextLink2({
|
|
|
6557
6561
|
icon,
|
|
6558
6562
|
iconColor,
|
|
6559
6563
|
iconRotate,
|
|
6560
|
-
|
|
6564
|
+
labelClassName,
|
|
6561
6565
|
rightArrow = "none",
|
|
6562
6566
|
rightArrowRotate,
|
|
6563
6567
|
underline = false,
|
|
@@ -6604,7 +6608,7 @@ var STextLink = /* @__PURE__ */ forwardRef(function STextLink2({
|
|
|
6604
6608
|
/* @__PURE__ */ jsx(
|
|
6605
6609
|
"span",
|
|
6606
6610
|
{
|
|
6607
|
-
className: cn(
|
|
6611
|
+
className: cn(labelClassName),
|
|
6608
6612
|
style: disabled ? { color: "var(--cmp-textLink-content-disabled)" } : void 0,
|
|
6609
6613
|
children: label || children
|
|
6610
6614
|
}
|
|
@@ -6870,13 +6874,12 @@ function SSwitch({
|
|
|
6870
6874
|
value = false,
|
|
6871
6875
|
leftLabel,
|
|
6872
6876
|
rightLabel,
|
|
6873
|
-
label,
|
|
6874
6877
|
disabled = false,
|
|
6875
6878
|
onValueChange,
|
|
6876
6879
|
className,
|
|
6877
6880
|
style
|
|
6878
6881
|
}) {
|
|
6879
|
-
const right = rightLabel
|
|
6882
|
+
const right = rightLabel;
|
|
6880
6883
|
const renderLabel = (text) => text ? /* @__PURE__ */ jsx("span", { className: "text-[12px] font-medium leading-[20px]", children: text }) : null;
|
|
6881
6884
|
const trackBg = disabled ? value ? "var(--cmp-switch-bg-disabled-on)" : "var(--cmp-switch-bg-disabled-off)" : value ? "var(--cmp-switch-bg-on)" : "var(--cmp-switch-bg-off)";
|
|
6882
6885
|
return /* @__PURE__ */ jsxs(
|
|
@@ -7760,7 +7763,7 @@ function SPopover({
|
|
|
7760
7763
|
STextLink,
|
|
7761
7764
|
{
|
|
7762
7765
|
label: leftLinkLabel,
|
|
7763
|
-
|
|
7766
|
+
labelClassName: leftLinkLabelClass,
|
|
7764
7767
|
onClick: onLeftLinkClick
|
|
7765
7768
|
}
|
|
7766
7769
|
),
|
|
@@ -7783,14 +7786,18 @@ function SPopover({
|
|
|
7783
7786
|
) })
|
|
7784
7787
|
] });
|
|
7785
7788
|
}
|
|
7789
|
+
var BODY_PADDING_CLASS2 = {
|
|
7790
|
+
default: "p-(--sys-space-panel-padding-default)",
|
|
7791
|
+
none: ""
|
|
7792
|
+
};
|
|
7786
7793
|
var SPopup = /* @__PURE__ */ forwardRef(function SPopup2({
|
|
7787
7794
|
popupTitle = "",
|
|
7788
7795
|
type = "default",
|
|
7789
|
-
|
|
7796
|
+
showFooter = false,
|
|
7790
7797
|
submitButton,
|
|
7791
7798
|
onSubmit,
|
|
7792
7799
|
footerLeft,
|
|
7793
|
-
|
|
7800
|
+
padding = "default",
|
|
7794
7801
|
children,
|
|
7795
7802
|
className,
|
|
7796
7803
|
style
|
|
@@ -7825,7 +7832,7 @@ var SPopup = /* @__PURE__ */ forwardRef(function SPopup2({
|
|
|
7825
7832
|
{
|
|
7826
7833
|
className: cn(
|
|
7827
7834
|
"box-border min-h-0 flex-1 overflow-auto",
|
|
7828
|
-
|
|
7835
|
+
BODY_PADDING_CLASS2[padding],
|
|
7829
7836
|
SCROLLBAR_CLASS,
|
|
7830
7837
|
SCROLLBAR_TRACK_BG_CLASS,
|
|
7831
7838
|
SCROLLBAR_TRACK_BORDER_CLASS
|
|
@@ -7833,7 +7840,7 @@ var SPopup = /* @__PURE__ */ forwardRef(function SPopup2({
|
|
|
7833
7840
|
children
|
|
7834
7841
|
}
|
|
7835
7842
|
),
|
|
7836
|
-
|
|
7843
|
+
showFooter && /* @__PURE__ */ jsx(SFooter, { left: footerLeft, button: { ...submitButton, onClick: onSubmit } })
|
|
7837
7844
|
]
|
|
7838
7845
|
}
|
|
7839
7846
|
);
|
|
@@ -8129,17 +8136,15 @@ var TYPE_ICON_COLOR = {
|
|
|
8129
8136
|
negative: "var(--cmp-modal-confirm-negative-icon)",
|
|
8130
8137
|
default: ""
|
|
8131
8138
|
};
|
|
8132
|
-
var
|
|
8133
|
-
|
|
8134
|
-
|
|
8135
|
-
|
|
8136
|
-
danger_outline_md: { color: "danger", outline: true },
|
|
8137
|
-
neutral_outline_md: { color: "neutral", outline: true }
|
|
8139
|
+
var MAIN_BUTTON_COLOR = {
|
|
8140
|
+
positive: "primary",
|
|
8141
|
+
negative: "danger",
|
|
8142
|
+
default: "neutral"
|
|
8138
8143
|
};
|
|
8139
|
-
var
|
|
8140
|
-
positive:
|
|
8141
|
-
negative:
|
|
8142
|
-
default:
|
|
8144
|
+
var MAIN_BUTTON_OUTLINE = {
|
|
8145
|
+
positive: false,
|
|
8146
|
+
negative: false,
|
|
8147
|
+
default: true
|
|
8143
8148
|
};
|
|
8144
8149
|
function SConfirmModal({
|
|
8145
8150
|
open,
|
|
@@ -8147,7 +8152,7 @@ function SConfirmModal({
|
|
|
8147
8152
|
persistent = false,
|
|
8148
8153
|
type = "positive",
|
|
8149
8154
|
modalTitle = "",
|
|
8150
|
-
|
|
8155
|
+
titleClassName,
|
|
8151
8156
|
topMessage = [],
|
|
8152
8157
|
bottomMessage = [],
|
|
8153
8158
|
tagLabel,
|
|
@@ -8159,14 +8164,15 @@ function SConfirmModal({
|
|
|
8159
8164
|
optionSlot,
|
|
8160
8165
|
contentSlot,
|
|
8161
8166
|
mainButtonLabel = "\uD655\uC778",
|
|
8162
|
-
|
|
8167
|
+
mainButtonOutline,
|
|
8163
8168
|
subButtonLabel,
|
|
8164
8169
|
onOk,
|
|
8165
8170
|
onCancel,
|
|
8166
8171
|
onClose
|
|
8167
8172
|
}) {
|
|
8168
8173
|
const iconName = TYPE_ICON[type];
|
|
8169
|
-
const
|
|
8174
|
+
const mainColor = MAIN_BUTTON_COLOR[type];
|
|
8175
|
+
const mainOutline = mainButtonOutline ?? MAIN_BUTTON_OUTLINE[type];
|
|
8170
8176
|
const [settled, setSettled] = useState(false);
|
|
8171
8177
|
useEffect(() => {
|
|
8172
8178
|
if (open) setSettled(false);
|
|
@@ -8200,7 +8206,7 @@ function SConfirmModal({
|
|
|
8200
8206
|
{
|
|
8201
8207
|
className: cn(
|
|
8202
8208
|
"text-center text-[18px] font-bold leading-[30px] text-[color:var(--cmp-modal-confirm-title-color)]",
|
|
8203
|
-
|
|
8209
|
+
titleClassName
|
|
8204
8210
|
),
|
|
8205
8211
|
children: modalTitle
|
|
8206
8212
|
}
|
|
@@ -8247,7 +8253,8 @@ function SConfirmModal({
|
|
|
8247
8253
|
/* @__PURE__ */ jsx(
|
|
8248
8254
|
SButton,
|
|
8249
8255
|
{
|
|
8250
|
-
|
|
8256
|
+
color: mainColor,
|
|
8257
|
+
outline: mainOutline,
|
|
8251
8258
|
size: "md",
|
|
8252
8259
|
disabled: settled,
|
|
8253
8260
|
onClick: () => settle(onOk),
|
|
@@ -8366,7 +8373,7 @@ function SLoadingModal({
|
|
|
8366
8373
|
state: state2 = "loading",
|
|
8367
8374
|
progress,
|
|
8368
8375
|
message,
|
|
8369
|
-
|
|
8376
|
+
showButton = false,
|
|
8370
8377
|
buttonLabel,
|
|
8371
8378
|
onButtonClick,
|
|
8372
8379
|
width = 520,
|
|
@@ -8374,7 +8381,7 @@ function SLoadingModal({
|
|
|
8374
8381
|
}) {
|
|
8375
8382
|
const resolvedMessage = message ?? DEFAULT_MESSAGE[state2];
|
|
8376
8383
|
const lines = Array.isArray(resolvedMessage) ? resolvedMessage : resolvedMessage ? [resolvedMessage] : [];
|
|
8377
|
-
const
|
|
8384
|
+
const buttonVisible = showButton || state2 === "error";
|
|
8378
8385
|
return /* @__PURE__ */ jsx(
|
|
8379
8386
|
SModalContainer,
|
|
8380
8387
|
{
|
|
@@ -8396,7 +8403,7 @@ function SLoadingModal({
|
|
|
8396
8403
|
},
|
|
8397
8404
|
i
|
|
8398
8405
|
)) }),
|
|
8399
|
-
|
|
8406
|
+
buttonVisible && /* @__PURE__ */ jsx(
|
|
8400
8407
|
SButton,
|
|
8401
8408
|
{
|
|
8402
8409
|
color: "neutral",
|
|
@@ -9132,7 +9139,11 @@ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect
|
|
|
9132
9139
|
var SPageColumnContext = /* @__PURE__ */ createContext(null);
|
|
9133
9140
|
function SPageColumn({ full, children }) {
|
|
9134
9141
|
const [scrolled, setScrolled] = useState(false);
|
|
9135
|
-
const
|
|
9142
|
+
const [contentWidth, setContentWidth] = useState("full");
|
|
9143
|
+
const value = useMemo(
|
|
9144
|
+
() => ({ scrolled, setScrolled, contentWidth, setContentWidth }),
|
|
9145
|
+
[scrolled, contentWidth]
|
|
9146
|
+
);
|
|
9136
9147
|
return /* @__PURE__ */ jsx(SPageColumnContext.Provider, { value, children: /* @__PURE__ */ jsx(
|
|
9137
9148
|
"div",
|
|
9138
9149
|
{
|
|
@@ -9155,7 +9166,7 @@ function useSLayout() {
|
|
|
9155
9166
|
var SLayout = /* @__PURE__ */ forwardRef(function SLayout2({
|
|
9156
9167
|
type = "box",
|
|
9157
9168
|
header = "fix",
|
|
9158
|
-
|
|
9169
|
+
showRail = false,
|
|
9159
9170
|
folded,
|
|
9160
9171
|
defaultFolded = false,
|
|
9161
9172
|
onFoldedChange,
|
|
@@ -9184,12 +9195,12 @@ var SLayout = /* @__PURE__ */ forwardRef(function SLayout2({
|
|
|
9184
9195
|
() => ({
|
|
9185
9196
|
type,
|
|
9186
9197
|
header: effectiveHeader,
|
|
9187
|
-
|
|
9198
|
+
showRail,
|
|
9188
9199
|
folded: currentFolded,
|
|
9189
9200
|
setFolded,
|
|
9190
9201
|
registerNav
|
|
9191
9202
|
}),
|
|
9192
|
-
[type, effectiveHeader,
|
|
9203
|
+
[type, effectiveHeader, showRail, currentFolded, setFolded, registerNav]
|
|
9193
9204
|
);
|
|
9194
9205
|
const isFullHeader = effectiveHeader === "full";
|
|
9195
9206
|
const minWidthStyle = {
|
|
@@ -9438,12 +9449,12 @@ var SGnb = /* @__PURE__ */ forwardRef(function SGnb2({
|
|
|
9438
9449
|
header: headerProp,
|
|
9439
9450
|
color = "light",
|
|
9440
9451
|
items,
|
|
9441
|
-
|
|
9452
|
+
showRail: useRailProp,
|
|
9442
9453
|
value = "",
|
|
9443
9454
|
onValueChange,
|
|
9444
9455
|
onRailChange,
|
|
9445
9456
|
folded: foldedProp,
|
|
9446
|
-
|
|
9457
|
+
onFoldedChange,
|
|
9447
9458
|
onLauncherClick,
|
|
9448
9459
|
logo,
|
|
9449
9460
|
topContent,
|
|
@@ -9466,8 +9477,8 @@ var SGnb = /* @__PURE__ */ forwardRef(function SGnb2({
|
|
|
9466
9477
|
const layout = useContext(SLayoutContext);
|
|
9467
9478
|
const type = typeProp ?? layout?.type ?? "box";
|
|
9468
9479
|
const folded = foldedProp ?? layout?.folded ?? false;
|
|
9469
|
-
const
|
|
9470
|
-
const railHasLeaf =
|
|
9480
|
+
const showRail = useRailProp ?? layout?.showRail ?? false;
|
|
9481
|
+
const railHasLeaf = showRail && items.some((item4) => !item4.children || item4.children.length === 0);
|
|
9471
9482
|
const header = railHasLeaf ? "full" : headerProp ?? layout?.header ?? "fix";
|
|
9472
9483
|
const H = GNB_HEADER[header];
|
|
9473
9484
|
const M = GNB_MENU[type];
|
|
@@ -9575,7 +9586,7 @@ var SGnb = /* @__PURE__ */ forwardRef(function SGnb2({
|
|
|
9575
9586
|
};
|
|
9576
9587
|
const handleFoldToggle = () => {
|
|
9577
9588
|
const next = !folded;
|
|
9578
|
-
|
|
9589
|
+
onFoldedChange?.(next);
|
|
9579
9590
|
if (foldedProp === void 0) layout?.setFolded(next);
|
|
9580
9591
|
};
|
|
9581
9592
|
const renderRailItem = (item4) => {
|
|
@@ -9734,9 +9745,9 @@ var SGnb = /* @__PURE__ */ forwardRef(function SGnb2({
|
|
|
9734
9745
|
] }, item4.value)
|
|
9735
9746
|
);
|
|
9736
9747
|
};
|
|
9737
|
-
const railItems =
|
|
9738
|
-
const menuItems =
|
|
9739
|
-
const showMenu = !
|
|
9748
|
+
const railItems = showRail ? items : [];
|
|
9749
|
+
const menuItems = showRail ? items.find((item4) => item4.value === activeRail)?.children ?? [] : items;
|
|
9750
|
+
const showMenu = !showRail || menuItems.length > 0;
|
|
9740
9751
|
const [uncontrolledMenuWidth, setUncontrolledMenuWidth] = useState(
|
|
9741
9752
|
() => defaultMenuWidth ?? GNB_MENU_WIDTH
|
|
9742
9753
|
);
|
|
@@ -9744,7 +9755,7 @@ var SGnb = /* @__PURE__ */ forwardRef(function SGnb2({
|
|
|
9744
9755
|
const committedMenuWidth = menuWidthProp ?? uncontrolledMenuWidth;
|
|
9745
9756
|
const menuWidth = clampGnbMenuWidth(dragMenuWidth ?? committedMenuWidth);
|
|
9746
9757
|
const [resizing, setResizing] = useState(false);
|
|
9747
|
-
const bodyWidth = (
|
|
9758
|
+
const bodyWidth = (showRail ? GNB_RAIL_WIDTH : 0) + (showMenu ? menuWidth : 0);
|
|
9748
9759
|
const registerNav = layout?.registerNav;
|
|
9749
9760
|
useIsomorphicLayoutEffect(() => {
|
|
9750
9761
|
if (!registerNav) return;
|
|
@@ -10017,7 +10028,7 @@ var SGnb = /* @__PURE__ */ forwardRef(function SGnb2({
|
|
|
10017
10028
|
transition: `transform ${GNB_FOLD_MS}ms ease-out, ${hideAfterSlide(folded)}`
|
|
10018
10029
|
},
|
|
10019
10030
|
children: [
|
|
10020
|
-
|
|
10031
|
+
showRail && // 레일 컬럼 — 스크롤되는 아이템 목록(nav)을 가운데 두고 위아래에 고정 슬롯(top/footer)을 붙인다.
|
|
10021
10032
|
// 두 슬롯은 내비게이션이 아니므로 nav(landmark) 밖에 두고, 컬럼 폭·구분선·배경은 이 래퍼가
|
|
10022
10033
|
// 전체 높이에 걸쳐 책임진다(그래야 슬롯 자리까지 배경·오른쪽 선이 이어진다).
|
|
10023
10034
|
/* @__PURE__ */ jsxs(
|
|
@@ -10593,12 +10604,26 @@ var SGnbSystem = /* @__PURE__ */ forwardRef(function SGnbSystem2({
|
|
|
10593
10604
|
}
|
|
10594
10605
|
);
|
|
10595
10606
|
});
|
|
10607
|
+
|
|
10608
|
+
// src/components/SPage/page-width.ts
|
|
10609
|
+
var MIN_CONTENT_WIDTH = `calc(var(${SLAYOUT_MIN_WIDTH_VAR}, 0px) - 100cqw + 100%)`;
|
|
10610
|
+
var SURPLUS = `max(0px, calc(100cqw - var(${SLAYOUT_MIN_WIDTH_VAR}, 0px)))`;
|
|
10611
|
+
var HALF_SURPLUS = `max(0px, calc((100cqw - var(${SLAYOUT_MIN_WIDTH_VAR}, 0px)) / 2))`;
|
|
10612
|
+
var contentWidthStyle = (mode) => {
|
|
10613
|
+
switch (mode) {
|
|
10614
|
+
case "fixed":
|
|
10615
|
+
return { marginRight: SURPLUS };
|
|
10616
|
+
case "fixedCenter":
|
|
10617
|
+
return { marginLeft: HALF_SURPLUS, marginRight: HALF_SURPLUS };
|
|
10618
|
+
default:
|
|
10619
|
+
return void 0;
|
|
10620
|
+
}
|
|
10621
|
+
};
|
|
10596
10622
|
var BACKGROUND_CLASS = {
|
|
10597
10623
|
frame: "bg-[var(--sys-color-bg-frame)]",
|
|
10598
10624
|
neutral: "bg-[var(--sys-color-bg-neutralLight)]",
|
|
10599
10625
|
screen: "bg-[var(--sys-color-bg-screen)]"
|
|
10600
10626
|
};
|
|
10601
|
-
var MIN_CONTENT_WIDTH = `calc(var(${SLAYOUT_MIN_WIDTH_VAR}, 0px) - 100cqw + 100%)`;
|
|
10602
10627
|
var NATIVE_SCROLLBAR_BACKGROUND_CLASS = {
|
|
10603
10628
|
frame: `${SCROLLBAR_TRACK_BORDER_CLASS} ${SCROLLBAR_TRACK_BG_CLASS}`,
|
|
10604
10629
|
neutral: `${SCROLLBAR_TRACK_BORDER_CLASS} ${SCROLLBAR_TRACK_BG_WHITE_CLASS}`,
|
|
@@ -10745,6 +10770,7 @@ var SPage = /* @__PURE__ */ forwardRef(function SPage2({
|
|
|
10745
10770
|
scrollEndSpacing = false,
|
|
10746
10771
|
overlayScrollbar = false,
|
|
10747
10772
|
contentHeight = "auto",
|
|
10773
|
+
contentWidth = "full",
|
|
10748
10774
|
className,
|
|
10749
10775
|
style,
|
|
10750
10776
|
children,
|
|
@@ -10754,6 +10780,12 @@ var SPage = /* @__PURE__ */ forwardRef(function SPage2({
|
|
|
10754
10780
|
const layout = useContext(SLayoutContext);
|
|
10755
10781
|
const column = useContext(SPageColumnContext);
|
|
10756
10782
|
const gridStyle = layout?.header === "full" && !column ? { gridArea: "page" } : void 0;
|
|
10783
|
+
const setColumnContentWidth = column?.setContentWidth;
|
|
10784
|
+
useIsomorphicLayoutEffect(() => {
|
|
10785
|
+
if (!setColumnContentWidth) return;
|
|
10786
|
+
setColumnContentWidth(contentWidth);
|
|
10787
|
+
return () => setColumnContentWidth("full");
|
|
10788
|
+
}, [setColumnContentWidth, contentWidth]);
|
|
10757
10789
|
const scrollRef = useRef(null);
|
|
10758
10790
|
const setMainRef = useCallback(
|
|
10759
10791
|
(node) => {
|
|
@@ -10768,6 +10800,7 @@ var SPage = /* @__PURE__ */ forwardRef(function SPage2({
|
|
|
10768
10800
|
setColumnScrolled?.(e.currentTarget.scrollTop > 0);
|
|
10769
10801
|
};
|
|
10770
10802
|
const fill = contentHeight === "fill";
|
|
10803
|
+
const fixedWidthStyle = layout ? contentWidthStyle(contentWidth) : void 0;
|
|
10771
10804
|
const main = /* @__PURE__ */ jsx(
|
|
10772
10805
|
"main",
|
|
10773
10806
|
{
|
|
@@ -10783,7 +10816,14 @@ var SPage = /* @__PURE__ */ forwardRef(function SPage2({
|
|
|
10783
10816
|
style: !overlayScrollbar ? { ...gridStyle, ...style } : style,
|
|
10784
10817
|
onScroll: handleScroll,
|
|
10785
10818
|
...rest,
|
|
10786
|
-
children: /* @__PURE__ */ jsx(
|
|
10819
|
+
children: /* @__PURE__ */ jsx(
|
|
10820
|
+
"div",
|
|
10821
|
+
{
|
|
10822
|
+
className: cn(fill && "h-full"),
|
|
10823
|
+
style: { minWidth: MIN_CONTENT_WIDTH, ...fixedWidthStyle },
|
|
10824
|
+
children
|
|
10825
|
+
}
|
|
10826
|
+
)
|
|
10787
10827
|
}
|
|
10788
10828
|
);
|
|
10789
10829
|
if (!overlayScrollbar) return main;
|
|
@@ -10806,20 +10846,24 @@ var SPage = /* @__PURE__ */ forwardRef(function SPage2({
|
|
|
10806
10846
|
// src/components/SPage/page.config.ts
|
|
10807
10847
|
var PAGE_BACKGROUNDS = ["frame", "neutral", "screen"];
|
|
10808
10848
|
var PAGE_CONTENT_HEIGHTS = ["auto", "fill"];
|
|
10849
|
+
var PAGE_CONTENT_WIDTHS = ["full", "fixed", "fixedCenter"];
|
|
10850
|
+
var PAGE_HEADER_VARIANTS = ["plain", "bar"];
|
|
10809
10851
|
var SPageHeader = /* @__PURE__ */ withDisplayName(
|
|
10810
|
-
forwardRef(function SPageHeader2({ title, subText,
|
|
10852
|
+
forwardRef(function SPageHeader2({ title, subText, variant, onBack, slot, scrolled, className, style, ...rest }, ref) {
|
|
10811
10853
|
const hasBack = onBack != null;
|
|
10854
|
+
const bar = variant === "bar";
|
|
10812
10855
|
const column = useContext(SPageColumnContext);
|
|
10813
10856
|
const isScrolled = scrolled ?? column?.scrolled ?? false;
|
|
10814
|
-
|
|
10857
|
+
const rowStyle = column ? contentWidthStyle(column.contentWidth) : void 0;
|
|
10858
|
+
return /* @__PURE__ */ jsx(
|
|
10815
10859
|
"header",
|
|
10816
10860
|
{
|
|
10817
10861
|
ref,
|
|
10818
10862
|
className: cn(
|
|
10819
|
-
"relative z-10 box-border flex shrink-0 items-center
|
|
10820
|
-
// 배경은 두 베리에이션이 같은 흰 면이다 —
|
|
10863
|
+
"relative z-10 box-border flex shrink-0 items-center px-(--cmp-pageHeader-paddingX)",
|
|
10864
|
+
// 배경은 두 베리에이션이 같은 흰 면이다 — variant 가 가르는 것은 높이·구분선·서브 텍스트 자리다.
|
|
10821
10865
|
// plain 에는 전용 배경 토큰이 없어 시스템 흰 표면을 쓴다(토큰이 생기면 그것으로 갈아끼운다).
|
|
10822
|
-
|
|
10866
|
+
bar ? "h-(--cmp-pageHeader-bar-height) border-b border-(--cmp-pageHeader-bar-border) bg-(--cmp-pageHeader-bar-bg) py-(--cmp-pageHeader-bar-paddingY)" : cn(
|
|
10823
10867
|
// 스크롤되면 그림자를 더해 콘텐츠 위에 뜬 것처럼 보이게 한다.
|
|
10824
10868
|
"bg-(--sys-color-bg-frame) pt-(--cmp-pageHeader-plain-paddingTop) pb-(--cmp-pageHeader-plain-paddingBottom)",
|
|
10825
10869
|
isScrolled && "shadow-floating"
|
|
@@ -10828,33 +10872,40 @@ var SPageHeader = /* @__PURE__ */ withDisplayName(
|
|
|
10828
10872
|
),
|
|
10829
10873
|
style,
|
|
10830
10874
|
...rest,
|
|
10831
|
-
children:
|
|
10832
|
-
|
|
10833
|
-
|
|
10834
|
-
|
|
10835
|
-
|
|
10836
|
-
|
|
10837
|
-
|
|
10838
|
-
|
|
10839
|
-
|
|
10840
|
-
|
|
10841
|
-
|
|
10842
|
-
|
|
10843
|
-
|
|
10844
|
-
|
|
10845
|
-
|
|
10846
|
-
"flex min-w-0 flex-1 items-center",
|
|
10847
|
-
fix ? "flex-row gap-(--cmp-pageHeader-gap)" : "flex-col items-start gap-(--cmp-pageHeader-plain-title-gap)",
|
|
10848
|
-
!hasBack && "pl-(--cmp-pageHeader-title-paddingLeft)"
|
|
10875
|
+
children: /* @__PURE__ */ jsxs(
|
|
10876
|
+
"div",
|
|
10877
|
+
{
|
|
10878
|
+
className: "flex min-w-0 flex-1 items-center gap-(--cmp-pageHeader-gap)",
|
|
10879
|
+
style: rowStyle,
|
|
10880
|
+
children: [
|
|
10881
|
+
hasBack && /* @__PURE__ */ jsx(
|
|
10882
|
+
SGhostButton,
|
|
10883
|
+
{
|
|
10884
|
+
icon: "chevronLeft",
|
|
10885
|
+
size: "xs",
|
|
10886
|
+
ariaLabel: "\uB4A4\uB85C\uAC00\uAE30",
|
|
10887
|
+
onClick: onBack,
|
|
10888
|
+
className: "shrink-0"
|
|
10889
|
+
}
|
|
10849
10890
|
),
|
|
10850
|
-
|
|
10851
|
-
|
|
10852
|
-
|
|
10853
|
-
|
|
10854
|
-
|
|
10855
|
-
|
|
10856
|
-
|
|
10857
|
-
|
|
10891
|
+
/* @__PURE__ */ jsxs(
|
|
10892
|
+
"div",
|
|
10893
|
+
{
|
|
10894
|
+
className: cn(
|
|
10895
|
+
"flex min-w-0 flex-1 items-center",
|
|
10896
|
+
bar ? "flex-row gap-(--cmp-pageHeader-gap)" : "flex-col items-start gap-(--cmp-pageHeader-plain-title-gap)",
|
|
10897
|
+
!hasBack && "pl-(--cmp-pageHeader-title-paddingLeft)"
|
|
10898
|
+
),
|
|
10899
|
+
children: [
|
|
10900
|
+
/* @__PURE__ */ jsx("span", { className: "typo-heading-lg min-w-0 truncate text-(--cmp-pageHeader-title-text)", children: title }),
|
|
10901
|
+
subText && /* @__PURE__ */ jsx("span", { className: "typo-body-md-default min-w-0 truncate text-(--cmp-pageHeader-subtitle-text)", children: subText })
|
|
10902
|
+
]
|
|
10903
|
+
}
|
|
10904
|
+
),
|
|
10905
|
+
slot && /* @__PURE__ */ jsx("div", { className: "ml-auto flex shrink-0 items-center", children: slot })
|
|
10906
|
+
]
|
|
10907
|
+
}
|
|
10908
|
+
)
|
|
10858
10909
|
}
|
|
10859
10910
|
);
|
|
10860
10911
|
}),
|
|
@@ -10884,13 +10935,13 @@ function STabs({
|
|
|
10884
10935
|
value,
|
|
10885
10936
|
tabs,
|
|
10886
10937
|
onValueChange,
|
|
10887
|
-
|
|
10938
|
+
sub = false,
|
|
10888
10939
|
vertical = false,
|
|
10889
10940
|
className,
|
|
10890
10941
|
style
|
|
10891
10942
|
}) {
|
|
10892
10943
|
const blue = TAB_MAIN_COLORS.selected.border;
|
|
10893
|
-
const isVertical =
|
|
10944
|
+
const isVertical = sub && vertical;
|
|
10894
10945
|
const tabRefs = useRef([]);
|
|
10895
10946
|
const moveTo = (target) => {
|
|
10896
10947
|
if (target < 0 || target >= tabs.length) return;
|
|
@@ -10898,7 +10949,7 @@ function STabs({
|
|
|
10898
10949
|
tabRefs.current[target]?.focus();
|
|
10899
10950
|
};
|
|
10900
10951
|
const containerStyle = { ...style };
|
|
10901
|
-
if (!
|
|
10952
|
+
if (!sub) containerStyle.borderBottom = `1px solid ${blue}`;
|
|
10902
10953
|
return /* @__PURE__ */ jsx(
|
|
10903
10954
|
"div",
|
|
10904
10955
|
{
|
|
@@ -10906,9 +10957,9 @@ function STabs({
|
|
|
10906
10957
|
"aria-orientation": isVertical ? "vertical" : "horizontal",
|
|
10907
10958
|
className: cn(
|
|
10908
10959
|
// main(가로): baseline(하단 divider)이 100% 너비로 채워지도록 w-full
|
|
10909
|
-
|
|
10960
|
+
sub ? "inline-flex w-fit" : "flex w-full",
|
|
10910
10961
|
isVertical ? "flex-col items-stretch" : "flex-row",
|
|
10911
|
-
|
|
10962
|
+
sub ? isVertical ? "gap-[16px]" : "gap-[24px]" : "gap-[4px]",
|
|
10912
10963
|
className
|
|
10913
10964
|
),
|
|
10914
10965
|
style: containerStyle,
|
|
@@ -10916,7 +10967,7 @@ function STabs({
|
|
|
10916
10967
|
const selected = tab.value === value;
|
|
10917
10968
|
const select = () => onValueChange?.(tab.value);
|
|
10918
10969
|
let tabStyle;
|
|
10919
|
-
if (
|
|
10970
|
+
if (sub) {
|
|
10920
10971
|
tabStyle = {
|
|
10921
10972
|
height: 20,
|
|
10922
10973
|
paddingBottom: 4,
|
|
@@ -12286,6 +12337,7 @@ var ALIGN = {
|
|
|
12286
12337
|
center: "center",
|
|
12287
12338
|
end: "flex-end"
|
|
12288
12339
|
};
|
|
12340
|
+
var FOCUS_RING_SHADOW = "0px 0px 4px 0px #0071ff66";
|
|
12289
12341
|
var cssLen = (v) => v === void 0 || v === "" || v === 0 ? void 0 : typeof v === "number" ? `${v}px` : v;
|
|
12290
12342
|
var SField = /* @__PURE__ */ forwardRef(function SField2({
|
|
12291
12343
|
name,
|
|
@@ -12352,7 +12404,11 @@ var SField = /* @__PURE__ */ forwardRef(function SField2({
|
|
|
12352
12404
|
const addonWidth = effectiveAddonLabel !== "" ? cssLen(labelWidth) : void 0;
|
|
12353
12405
|
const maxWidthValue = fieldWidthValue(maxWidth);
|
|
12354
12406
|
const resolvedMaxWidth = maxWidthValue === void 0 || effectiveAddonLabel === "" ? maxWidthValue : addonWidth ? `calc(${maxWidthValue} + ${addonWidth})` : void 0;
|
|
12355
|
-
const borderColor = borderless ? "transparent" : disabled ? "var(--color-grey-45)" :
|
|
12407
|
+
const borderColor = borderless ? "transparent" : disabled ? "var(--color-grey-45)" : (
|
|
12408
|
+
// focus·hover(제어 prop) 가 error/pass 보다 우선 — 실제 :hover/:focus-within 클래스도
|
|
12409
|
+
// 같은 순서로 --field-bc 를 덮으므로, prop 으로 흉내 낸 상태도 그와 같게 둔다.
|
|
12410
|
+
interactive && (focused || hovered) ? "var(--sys-color-field-border-focus)" : resolvedSuccess ? "var(--sys-color-field-border-success)" : resolvedError ? "var(--sys-color-field-border-danger)" : "var(--sys-color-field-border-default)"
|
|
12411
|
+
);
|
|
12356
12412
|
const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
|
|
12357
12413
|
const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
|
|
12358
12414
|
return /* @__PURE__ */ jsx(
|
|
@@ -12430,7 +12486,7 @@ var SField = /* @__PURE__ */ forwardRef(function SField2({
|
|
|
12430
12486
|
// @ts-expect-error CSS 변수
|
|
12431
12487
|
"--field-bc": borderColor,
|
|
12432
12488
|
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
12433
|
-
...interactive && !borderless && focused ? { boxShadow:
|
|
12489
|
+
...interactive && !borderless && (focused || hovered) ? { boxShadow: FOCUS_RING_SHADOW } : {},
|
|
12434
12490
|
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
12435
12491
|
"borderRadius": s.radius,
|
|
12436
12492
|
"background": bgColor,
|
|
@@ -12499,7 +12555,7 @@ var SSearchInput = /* @__PURE__ */ forwardRef(function SSearchInput2({
|
|
|
12499
12555
|
width,
|
|
12500
12556
|
focused,
|
|
12501
12557
|
hovered,
|
|
12502
|
-
|
|
12558
|
+
inputClassName,
|
|
12503
12559
|
inputStyle,
|
|
12504
12560
|
className,
|
|
12505
12561
|
style,
|
|
@@ -12560,7 +12616,7 @@ var SSearchInput = /* @__PURE__ */ forwardRef(function SSearchInput2({
|
|
|
12560
12616
|
// type="search" 의 브라우저 기본 취소 버튼은 clearable 과 겹치므로 지운다
|
|
12561
12617
|
"h-full min-w-0 flex-1 border-0 bg-transparent p-0 outline-none placeholder:text-[color:var(--sys-color-field-text-placeholder)] disabled:cursor-not-allowed [&::-webkit-search-cancel-button]:hidden",
|
|
12562
12618
|
AUTOFILL_RESET_CLASS,
|
|
12563
|
-
|
|
12619
|
+
inputClassName
|
|
12564
12620
|
),
|
|
12565
12621
|
style: {
|
|
12566
12622
|
// fontSize/lineHeight 는 컨테이너에서 상속 (원본 font-size: inherit)
|
|
@@ -12635,12 +12691,12 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
|
|
|
12635
12691
|
value,
|
|
12636
12692
|
onValueChange,
|
|
12637
12693
|
onOpenChange,
|
|
12638
|
-
|
|
12694
|
+
valueAsPrimitive = false,
|
|
12639
12695
|
name,
|
|
12640
12696
|
options = [],
|
|
12641
12697
|
type = "default",
|
|
12642
|
-
|
|
12643
|
-
|
|
12698
|
+
showSearch = false,
|
|
12699
|
+
showSelectAll = false,
|
|
12644
12700
|
allSelectedLabel = "\uC804\uCCB4",
|
|
12645
12701
|
placeholder = "\uC120\uD0DD",
|
|
12646
12702
|
disabled = false,
|
|
@@ -12685,7 +12741,7 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
|
|
|
12685
12741
|
const hasLeaf = useMemo(() => flat.some((o) => !o.isGroup), [flat]);
|
|
12686
12742
|
const allOptionsDisabled = hasLeaf && selectable.length === 0;
|
|
12687
12743
|
const effectiveDisabled = disabled || allOptionsDisabled;
|
|
12688
|
-
const
|
|
12744
|
+
const searchVisible = showSearch && selectable.length >= SEARCH_THRESHOLD;
|
|
12689
12745
|
const labelByValue = useMemo(() => new Map(flat.map((o) => [o.value, o.label])), [flat]);
|
|
12690
12746
|
const rawByValue = useMemo(() => new Map(flat.map((o) => [o.value, o.raw])), [flat]);
|
|
12691
12747
|
const optionByValue = useMemo(
|
|
@@ -12702,9 +12758,9 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
|
|
|
12702
12758
|
const emit3 = (next) => {
|
|
12703
12759
|
if (!onValueChange) return;
|
|
12704
12760
|
const mapped = next.map(
|
|
12705
|
-
(v) =>
|
|
12761
|
+
(v) => valueAsPrimitive ? rawByValue.get(v) ?? v : optionByValue.get(v) ?? { value: v, label: v }
|
|
12706
12762
|
);
|
|
12707
|
-
onValueChange(multi ? mapped : mapped[0] ?? (
|
|
12763
|
+
onValueChange(multi ? mapped : mapped[0] ?? (valueAsPrimitive ? "" : null));
|
|
12708
12764
|
};
|
|
12709
12765
|
const commitOpen = (next, valueForRules) => {
|
|
12710
12766
|
setOpen(next);
|
|
@@ -12751,12 +12807,12 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
|
|
|
12751
12807
|
resetValidation: () => setRuleError("")
|
|
12752
12808
|
});
|
|
12753
12809
|
const filtered = useMemo(() => {
|
|
12754
|
-
if (!
|
|
12810
|
+
if (!searchVisible || search.trim() === "") return flat;
|
|
12755
12811
|
const q = search.trim().toLowerCase();
|
|
12756
12812
|
return flat.filter(
|
|
12757
12813
|
(o) => o.isGroup || (isHtmlLabel(o.label) ? extractText(o.label) : o.label).toLowerCase().includes(q)
|
|
12758
12814
|
);
|
|
12759
|
-
}, [flat, search,
|
|
12815
|
+
}, [flat, search, searchVisible]);
|
|
12760
12816
|
const allValues = selectable.map((o) => o.value);
|
|
12761
12817
|
const allSelected = allValues.length > 0 && allValues.every((v) => selected.includes(v));
|
|
12762
12818
|
const hasItems = filtered.some((o) => !o.isGroup);
|
|
@@ -12769,7 +12825,7 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
|
|
|
12769
12825
|
}, [filtered]);
|
|
12770
12826
|
const navigableItems = useMemo(() => {
|
|
12771
12827
|
const items = [];
|
|
12772
|
-
if (multi &&
|
|
12828
|
+
if (multi && showSelectAll && allValues.length > 0) {
|
|
12773
12829
|
items.push({ key: "__select_all__", isSelectAll: true });
|
|
12774
12830
|
}
|
|
12775
12831
|
filtered.forEach((o, i) => {
|
|
@@ -12784,7 +12840,7 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
|
|
|
12784
12840
|
}
|
|
12785
12841
|
});
|
|
12786
12842
|
return items;
|
|
12787
|
-
}, [allValues.length, filtered, groupLeafValues, multi,
|
|
12843
|
+
}, [allValues.length, filtered, groupLeafValues, multi, showSelectAll]);
|
|
12788
12844
|
const selectedAnchorIndex = useMemo(() => {
|
|
12789
12845
|
if (selected.length === 0) return -1;
|
|
12790
12846
|
const selectedSet = new Set(selected);
|
|
@@ -13012,7 +13068,7 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
|
|
|
13012
13068
|
viewportPadding: 24,
|
|
13013
13069
|
fit: !dropdownWidth,
|
|
13014
13070
|
onOpenAutoFocus: (event) => {
|
|
13015
|
-
if (!
|
|
13071
|
+
if (!searchVisible) {
|
|
13016
13072
|
event.preventDefault();
|
|
13017
13073
|
return;
|
|
13018
13074
|
}
|
|
@@ -13045,7 +13101,7 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
|
|
|
13045
13101
|
style: { maxHeight: clampToAvailableHeight(dropdownHeight, POPOVER_AVAILABLE_HEIGHT) },
|
|
13046
13102
|
onMouseLeave: () => setFocusedIndex(-1),
|
|
13047
13103
|
children: [
|
|
13048
|
-
|
|
13104
|
+
searchVisible && /* @__PURE__ */ jsx(
|
|
13049
13105
|
"div",
|
|
13050
13106
|
{
|
|
13051
13107
|
ref: searchBarRef,
|
|
@@ -13071,7 +13127,7 @@ var SSelectImpl = /* @__PURE__ */ forwardRef(function SSelect({
|
|
|
13071
13127
|
selected,
|
|
13072
13128
|
groupLeafValues,
|
|
13073
13129
|
focusedValue: navigableItems[focusedIndex]?.key,
|
|
13074
|
-
showSelectAll: multi &&
|
|
13130
|
+
showSelectAll: multi && showSelectAll && allValues.length > 0,
|
|
13075
13131
|
selectAllLabel: allSelectedLabel,
|
|
13076
13132
|
selectAllSelected: allSelected,
|
|
13077
13133
|
onSelectAll: handleSelectAll,
|
|
@@ -13328,19 +13384,19 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
13328
13384
|
stickyColumn,
|
|
13329
13385
|
radius = "default",
|
|
13330
13386
|
bordered = true,
|
|
13331
|
-
|
|
13332
|
-
|
|
13333
|
-
|
|
13387
|
+
emptyLabel = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
13388
|
+
emptySlot,
|
|
13389
|
+
loading: loading2 = false,
|
|
13334
13390
|
dense = false,
|
|
13335
13391
|
onDenseChange,
|
|
13336
|
-
|
|
13392
|
+
hoverable = true,
|
|
13337
13393
|
pagination,
|
|
13338
13394
|
onPageChange,
|
|
13339
|
-
|
|
13340
|
-
|
|
13395
|
+
internalPagination = false,
|
|
13396
|
+
showRowsPerPageSelect = false,
|
|
13341
13397
|
rowsPerPageOption = DEFAULT_ROWS_PER_PAGE_OPTION,
|
|
13342
13398
|
onRowsPerPageChange,
|
|
13343
|
-
|
|
13399
|
+
virtualScroll = false,
|
|
13344
13400
|
rowHeight,
|
|
13345
13401
|
virtualBuffer = 5,
|
|
13346
13402
|
virtualEndThreshold = 10,
|
|
@@ -13479,16 +13535,16 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
13479
13535
|
setHeaderGutter(el.offsetWidth - el.clientWidth);
|
|
13480
13536
|
setScrolledLeft(el.scrollLeft > 0);
|
|
13481
13537
|
setScrolledRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);
|
|
13482
|
-
if (
|
|
13538
|
+
if (virtualScroll) {
|
|
13483
13539
|
const { start, end } = calcRange(el.scrollTop, el.clientHeight);
|
|
13484
13540
|
setVsRange((prev) => prev.start === start && prev.end === end ? prev : { start, end });
|
|
13485
13541
|
}
|
|
13486
|
-
}, [
|
|
13542
|
+
}, [virtualScroll, calcRange]);
|
|
13487
13543
|
useEffect(() => {
|
|
13488
13544
|
handleScroll();
|
|
13489
|
-
}, [handleScroll, rowCount, columnWidths,
|
|
13545
|
+
}, [handleScroll, rowCount, columnWidths, loading2, height]);
|
|
13490
13546
|
useEffect(() => {
|
|
13491
|
-
if (!
|
|
13547
|
+
if (!virtualScroll) return;
|
|
13492
13548
|
cbRef.current.onVirtualUpdate?.({ from: vsRange.start, to: vsRange.end });
|
|
13493
13549
|
const threshold = Math.max(1, virtualEndThreshold);
|
|
13494
13550
|
if (vsRange.end >= Math.max(0, rowCount - threshold) && lastReachEndRef.current !== rowCount) {
|
|
@@ -13500,7 +13556,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
13500
13556
|
threshold
|
|
13501
13557
|
});
|
|
13502
13558
|
}
|
|
13503
|
-
}, [vsRange,
|
|
13559
|
+
}, [vsRange, virtualScroll, rowCount, virtualEndThreshold]);
|
|
13504
13560
|
const getStickyStyle = useCallback(
|
|
13505
13561
|
(colIdx) => {
|
|
13506
13562
|
const leftOffset = columnWidths.slice(0, colIdx).reduce((a, b) => a + b, selectable ? SELECTABLE_COLUMN_WIDTH : 0);
|
|
@@ -13525,7 +13581,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
13525
13581
|
isRowSelected,
|
|
13526
13582
|
getIsAllChecked,
|
|
13527
13583
|
getPaginationInfo: () => {
|
|
13528
|
-
if (!
|
|
13584
|
+
if (!internalPagination || !pagination) return null;
|
|
13529
13585
|
const startIndex = (currentPage - 1) * innerRowsPerPage;
|
|
13530
13586
|
return {
|
|
13531
13587
|
startIndex,
|
|
@@ -13556,7 +13612,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
13556
13612
|
getIsAllChecked,
|
|
13557
13613
|
getStickyStyle,
|
|
13558
13614
|
setRowCount,
|
|
13559
|
-
|
|
13615
|
+
internalPagination,
|
|
13560
13616
|
pagination,
|
|
13561
13617
|
currentPage,
|
|
13562
13618
|
innerRowsPerPage,
|
|
@@ -13595,31 +13651,31 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
13595
13651
|
},
|
|
13596
13652
|
[visibleCols]
|
|
13597
13653
|
);
|
|
13598
|
-
const pageInfo =
|
|
13654
|
+
const pageInfo = internalPagination && pagination ? {
|
|
13599
13655
|
startIndex: (currentPage - 1) * innerRowsPerPage,
|
|
13600
13656
|
endIndex: (currentPage - 1) * innerRowsPerPage + innerRowsPerPage
|
|
13601
13657
|
} : null;
|
|
13602
13658
|
let bodyRows = rows;
|
|
13603
13659
|
let topSpacer = 0;
|
|
13604
13660
|
let bottomSpacer = 0;
|
|
13605
|
-
if (
|
|
13661
|
+
if (virtualScroll) {
|
|
13606
13662
|
bodyRows = rows.slice(vsRange.start, vsRange.end);
|
|
13607
13663
|
topSpacer = vsRange.start * effectiveRowHeight;
|
|
13608
13664
|
bottomSpacer = Math.max(0, (rowCount - vsRange.end) * effectiveRowHeight);
|
|
13609
13665
|
} else if (pageInfo) {
|
|
13610
13666
|
bodyRows = rows.slice(pageInfo.startIndex, pageInfo.endIndex);
|
|
13611
13667
|
}
|
|
13612
|
-
const isNoData = rowCount === 0 && !
|
|
13613
|
-
const showNoDataSlot = isNoData &&
|
|
13614
|
-
const showPagination = !
|
|
13615
|
-
const lastPage =
|
|
13616
|
-
const displayPage =
|
|
13668
|
+
const isNoData = rowCount === 0 && !loading2;
|
|
13669
|
+
const showNoDataSlot = isNoData && emptySlot != null;
|
|
13670
|
+
const showPagination = !virtualScroll && (pagination != null || internalPagination);
|
|
13671
|
+
const lastPage = internalPagination ? Math.max(1, Math.ceil(rowCount / (innerRowsPerPage || 1))) : pagination?.lastPage ?? Math.max(1, Math.ceil(rowCount / (pagination?.rowsPerPage ?? 10)));
|
|
13672
|
+
const displayPage = internalPagination ? currentPage : pagination?.page ?? 1;
|
|
13617
13673
|
const changePage = (p) => {
|
|
13618
|
-
if (
|
|
13674
|
+
if (internalPagination) setCurrentPage(p);
|
|
13619
13675
|
onPageChange?.(p);
|
|
13620
13676
|
};
|
|
13621
13677
|
const changeRowsPerPage = (perPage) => {
|
|
13622
|
-
if (
|
|
13678
|
+
if (internalPagination) {
|
|
13623
13679
|
setInnerRowsPerPage(perPage);
|
|
13624
13680
|
const newLast = Math.max(1, Math.ceil(rowCount / (perPage || 1)));
|
|
13625
13681
|
setCurrentPage((cp) => cp > newLast ? newLast : cp);
|
|
@@ -13743,7 +13799,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
13743
13799
|
!height && "min-h-0 grow",
|
|
13744
13800
|
radiusClass,
|
|
13745
13801
|
// 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시 인터랙션 차단
|
|
13746
|
-
(
|
|
13802
|
+
(loading2 || rowCount === 0) && "pointer-events-none"
|
|
13747
13803
|
),
|
|
13748
13804
|
style: {
|
|
13749
13805
|
height,
|
|
@@ -13943,7 +13999,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
13943
13999
|
)
|
|
13944
14000
|
}
|
|
13945
14001
|
),
|
|
13946
|
-
showNoDataSlot ? /* @__PURE__ */ jsx("div", { className: cn(bodyScrollClass, "pointer-events-auto bg-white"), children: /* @__PURE__ */ jsx("div", { className: "flex h-full min-h-[60px] w-full items-center justify-center", children:
|
|
14002
|
+
showNoDataSlot ? /* @__PURE__ */ jsx("div", { className: cn(bodyScrollClass, "pointer-events-auto bg-white"), children: /* @__PURE__ */ jsx("div", { className: "flex h-full min-h-[60px] w-full items-center justify-center", children: emptySlot }) }) : (
|
|
13947
14003
|
/* 바디: 세로 스크롤은 이 컨테이너에만 생긴다 (헤더 제외) */
|
|
13948
14004
|
/* @__PURE__ */ jsx(
|
|
13949
14005
|
"div",
|
|
@@ -13953,7 +14009,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
13953
14009
|
className: cn(
|
|
13954
14010
|
bodyScrollClass,
|
|
13955
14011
|
// 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시 스크롤 차단
|
|
13956
|
-
(
|
|
14012
|
+
(loading2 || rowCount === 0) && "overflow-hidden"
|
|
13957
14013
|
),
|
|
13958
14014
|
children: /* @__PURE__ */ jsxs(
|
|
13959
14015
|
"table",
|
|
@@ -13963,7 +14019,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
13963
14019
|
children: [
|
|
13964
14020
|
colgroup,
|
|
13965
14021
|
/* @__PURE__ */ jsxs("tbody", { children: [
|
|
13966
|
-
|
|
14022
|
+
virtualScroll && topSpacer > 0 && /* @__PURE__ */ jsx("tr", { "aria-hidden": true, style: { height: topSpacer }, children: /* @__PURE__ */ jsx("td", { colSpan: totalColSpan, className: "p-0" }) }),
|
|
13967
14023
|
rowCount === 0 ? null : bodyRows.map((row, ri) => {
|
|
13968
14024
|
const isSel = selectedKeys.has(row[rowKey]);
|
|
13969
14025
|
const rowBg = "bg-white";
|
|
@@ -13973,10 +14029,10 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
13973
14029
|
onClick: () => onRowClick?.(row),
|
|
13974
14030
|
className: cn(
|
|
13975
14031
|
"group/table-row",
|
|
13976
|
-
|
|
14032
|
+
hoverable && "hover:bg-[var(--color-grey-05)]",
|
|
13977
14033
|
onRowClick && "cursor-pointer"
|
|
13978
14034
|
),
|
|
13979
|
-
style: { height:
|
|
14035
|
+
style: { height: virtualScroll ? effectiveRowHeight : rowH },
|
|
13980
14036
|
children: [
|
|
13981
14037
|
selectable && /* @__PURE__ */ jsx(
|
|
13982
14038
|
"td",
|
|
@@ -13985,7 +14041,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
13985
14041
|
// 원본 .td--selected: 48px 고정폭, 항상 left sticky, 체크박스 중앙정렬
|
|
13986
14042
|
"sticky left-0 z-[2] border-b border-solid border-[color:var(--cmp-table-border-color)] align-middle",
|
|
13987
14043
|
rowBg,
|
|
13988
|
-
|
|
14044
|
+
hoverable && "group-hover/table-row:bg-[var(--color-grey-05)]",
|
|
13989
14045
|
stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
|
|
13990
14046
|
),
|
|
13991
14047
|
style: {
|
|
@@ -14003,7 +14059,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
14003
14059
|
// 셀 배경은 흰색으로 채워 뒤 배경이 비치지 않게 하고, hover 시 행 배경(grey_05)을 따른다.
|
|
14004
14060
|
"overflow-hidden text-ellipsis whitespace-nowrap border-b border-solid border-[color:var(--cmp-table-border-color)] text-[12px] leading-[20px] text-[color:var(--sys-color-fg-primary)]",
|
|
14005
14061
|
rowBg,
|
|
14006
|
-
|
|
14062
|
+
hoverable && "group-hover/table-row:bg-[var(--color-grey-05)]",
|
|
14007
14063
|
stickyShadowClass(i),
|
|
14008
14064
|
typeof col.tdClass === "function" ? col.tdClass(row) : col.tdClass
|
|
14009
14065
|
);
|
|
@@ -14037,7 +14093,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
14037
14093
|
row[rowKey] ?? ri
|
|
14038
14094
|
);
|
|
14039
14095
|
}),
|
|
14040
|
-
|
|
14096
|
+
virtualScroll && bottomSpacer > 0 && /* @__PURE__ */ jsx("tr", { "aria-hidden": true, style: { height: bottomSpacer }, children: /* @__PURE__ */ jsx("td", { colSpan: totalColSpan, className: "p-0" }) })
|
|
14041
14097
|
] })
|
|
14042
14098
|
]
|
|
14043
14099
|
}
|
|
@@ -14053,13 +14109,13 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
14053
14109
|
className: "pointer-events-none absolute left-0 right-0 top-0 z-[31] h-[var(--cmp-table-header-height)] bg-white/60"
|
|
14054
14110
|
}
|
|
14055
14111
|
),
|
|
14056
|
-
!showNoDataSlot && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute bottom-0 left-0 right-0 top-[var(--cmp-table-header-height)] z-[30] flex items-center justify-center bg-white/60 text-[12px] text-[color:var(--color-grey-65)]", children: /* @__PURE__ */ jsx("div", { className: "flex min-h-[60px] w-full items-center justify-center", children:
|
|
14112
|
+
!showNoDataSlot && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute bottom-0 left-0 right-0 top-[var(--cmp-table-header-height)] z-[30] flex items-center justify-center bg-white/60 text-[12px] text-[color:var(--color-grey-65)]", children: /* @__PURE__ */ jsx("div", { className: "flex min-h-[60px] w-full items-center justify-center", children: emptyLabel }) })
|
|
14057
14113
|
] }),
|
|
14058
|
-
|
|
14114
|
+
loading2 && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-30 flex items-center justify-center bg-white/60", children: /* @__PURE__ */ jsx(SCircleProgress, { indeterminate: true }) })
|
|
14059
14115
|
]
|
|
14060
14116
|
}
|
|
14061
14117
|
),
|
|
14062
|
-
(showPagination ||
|
|
14118
|
+
(showPagination || showRowsPerPageSelect) && // 원본 sd-table__pagination: 테이블 하단에 이어붙는 회색 바(높이 48px, margin-top:-1px로 테두리 겹침).
|
|
14063
14119
|
// SPagination은 전체 폭 기준 중앙, rows-per-page SSelect는 우측에 absolute 배치해 중앙 정렬을 유지한다.
|
|
14064
14120
|
// 루트 높이가 확정된 경우(테이블이 남은 영역을 채우는 배치) 페이지네이션 바가
|
|
14065
14121
|
// 눌리지 않도록 shrink-0으로 48px를 보장한다.
|
|
@@ -14075,7 +14131,7 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
14075
14131
|
),
|
|
14076
14132
|
children: [
|
|
14077
14133
|
showPagination && /* @__PURE__ */ jsx(SPagination, { currentPage: displayPage, lastPage, onPageChange: changePage }),
|
|
14078
|
-
|
|
14134
|
+
showRowsPerPageSelect && /* @__PURE__ */ jsxs("div", { className: "absolute right-[10px] top-1/2 flex -translate-y-1/2 items-center gap-[12px]", children: [
|
|
14079
14135
|
dense && /* @__PURE__ */ jsx(
|
|
14080
14136
|
STextLink,
|
|
14081
14137
|
{
|
|
@@ -14092,8 +14148,8 @@ var STable = /* @__PURE__ */ forwardRef(function STable2({
|
|
|
14092
14148
|
SSelect2,
|
|
14093
14149
|
{
|
|
14094
14150
|
options: rowsPerPageOption,
|
|
14095
|
-
value:
|
|
14096
|
-
|
|
14151
|
+
value: internalPagination ? innerRowsPerPage : pagination?.rowsPerPage,
|
|
14152
|
+
valueAsPrimitive: true,
|
|
14097
14153
|
onValueChange: (v) => changeRowsPerPage(Number(v)),
|
|
14098
14154
|
width: 128
|
|
14099
14155
|
}
|
|
@@ -14241,7 +14297,7 @@ var SInput = /* @__PURE__ */ forwardRef(function SInput2({
|
|
|
14241
14297
|
status,
|
|
14242
14298
|
focused,
|
|
14243
14299
|
hovered,
|
|
14244
|
-
|
|
14300
|
+
inputClassName,
|
|
14245
14301
|
inputStyle,
|
|
14246
14302
|
label,
|
|
14247
14303
|
labelWidth,
|
|
@@ -14341,7 +14397,7 @@ var SInput = /* @__PURE__ */ forwardRef(function SInput2({
|
|
|
14341
14397
|
className: cn(
|
|
14342
14398
|
"h-full min-w-0 flex-1 border-0 bg-transparent p-0 outline-none placeholder:text-[color:var(--sys-color-field-text-placeholder)] disabled:cursor-not-allowed",
|
|
14343
14399
|
AUTOFILL_RESET_CLASS,
|
|
14344
|
-
|
|
14400
|
+
inputClassName
|
|
14345
14401
|
),
|
|
14346
14402
|
style: {
|
|
14347
14403
|
// fontSize/lineHeight 는 컨테이너에서 상속 (원본 font-size: inherit)
|
|
@@ -14398,7 +14454,7 @@ var STextarea = /* @__PURE__ */ forwardRef(function STextarea2({
|
|
|
14398
14454
|
status,
|
|
14399
14455
|
focused,
|
|
14400
14456
|
hovered,
|
|
14401
|
-
|
|
14457
|
+
textareaClassName,
|
|
14402
14458
|
textareaStyle,
|
|
14403
14459
|
label,
|
|
14404
14460
|
labelWidth,
|
|
@@ -14478,7 +14534,7 @@ var STextarea = /* @__PURE__ */ forwardRef(function STextarea2({
|
|
|
14478
14534
|
className: cn(
|
|
14479
14535
|
"w-full resize-y border-0 bg-transparent outline-none placeholder:text-[color:var(--sys-color-field-text-placeholder)] disabled:cursor-not-allowed",
|
|
14480
14536
|
AUTOFILL_RESET_CLASS,
|
|
14481
|
-
|
|
14537
|
+
textareaClassName
|
|
14482
14538
|
),
|
|
14483
14539
|
style: {
|
|
14484
14540
|
minHeight: 100,
|
|
@@ -14523,8 +14579,8 @@ var formatInputWithCommas = (value) => {
|
|
|
14523
14579
|
const formattedInt = addCommas(intPart === "" ? "0" : intPart);
|
|
14524
14580
|
return `${isNeg ? "-" : ""}${formattedInt}${hasDecimal ? `.${decPart}` : ""}`;
|
|
14525
14581
|
};
|
|
14526
|
-
var getDecimalLimit = (
|
|
14527
|
-
if (!
|
|
14582
|
+
var getDecimalLimit = (allowDecimal, maxDecimalLength) => {
|
|
14583
|
+
if (!allowDecimal || maxDecimalLength === void 0 || !Number.isFinite(maxDecimalLength)) {
|
|
14528
14584
|
return void 0;
|
|
14529
14585
|
}
|
|
14530
14586
|
return Math.max(0, Math.floor(maxDecimalLength));
|
|
@@ -14553,12 +14609,12 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
|
|
|
14553
14609
|
min = Number.NEGATIVE_INFINITY,
|
|
14554
14610
|
max = Number.POSITIVE_INFINITY,
|
|
14555
14611
|
step = 1,
|
|
14556
|
-
|
|
14557
|
-
|
|
14612
|
+
showButton = false,
|
|
14613
|
+
allowDecimal = false,
|
|
14558
14614
|
maxDecimalLength,
|
|
14559
14615
|
inputPrefix = "",
|
|
14560
14616
|
inputSuffix = "",
|
|
14561
|
-
|
|
14617
|
+
inputClassName,
|
|
14562
14618
|
inputStyle,
|
|
14563
14619
|
autoFocus,
|
|
14564
14620
|
onFocus,
|
|
@@ -14588,7 +14644,7 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
|
|
|
14588
14644
|
}, ref) {
|
|
14589
14645
|
const p = PAD3[size];
|
|
14590
14646
|
const padX = `var(--cmp-numberInput-${size}-paddingX)`;
|
|
14591
|
-
const decimalLimit = getDecimalLimit(
|
|
14647
|
+
const decimalLimit = getDecimalLimit(allowDecimal, maxDecimalLength);
|
|
14592
14648
|
const numValue = applyDecimalLimit(toNumber(value), decimalLimit);
|
|
14593
14649
|
const [display, setDisplay] = useState(() => formatWithCommas(numValue));
|
|
14594
14650
|
const [ruleError, setRuleError] = useState("");
|
|
@@ -14671,7 +14727,7 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
|
|
|
14671
14727
|
setDisplayWithCaret(cleaned, logicalCaret);
|
|
14672
14728
|
return;
|
|
14673
14729
|
}
|
|
14674
|
-
if (!
|
|
14730
|
+
if (!allowDecimal && cleaned.includes(".")) {
|
|
14675
14731
|
resetRejectedInput(target, logicalCaret);
|
|
14676
14732
|
return;
|
|
14677
14733
|
}
|
|
@@ -14759,12 +14815,12 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
|
|
|
14759
14815
|
style: {
|
|
14760
14816
|
// 원본 sd-number-input: content gap = padding-x 토큰 (gap 토큰 아님)
|
|
14761
14817
|
gap: `var(--cmp-numberInput-${size}-paddingX)`,
|
|
14762
|
-
padding: `0 ${
|
|
14818
|
+
padding: `0 ${showButton ? padX : `calc(${padX} * 2)`}`,
|
|
14763
14819
|
fontSize: p.fontSize,
|
|
14764
14820
|
lineHeight: `${p.lineHeight}px`
|
|
14765
14821
|
},
|
|
14766
14822
|
children: [
|
|
14767
|
-
|
|
14823
|
+
showButton && stepper("dec"),
|
|
14768
14824
|
inputPrefix !== "" && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", style: { color: affixColor }, children: inputPrefix }),
|
|
14769
14825
|
/* @__PURE__ */ jsx(
|
|
14770
14826
|
"input",
|
|
@@ -14772,7 +14828,7 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
|
|
|
14772
14828
|
ref: setRefs2,
|
|
14773
14829
|
name,
|
|
14774
14830
|
type: "text",
|
|
14775
|
-
inputMode:
|
|
14831
|
+
inputMode: allowDecimal ? "decimal" : "numeric",
|
|
14776
14832
|
value: display,
|
|
14777
14833
|
placeholder,
|
|
14778
14834
|
disabled,
|
|
@@ -14803,11 +14859,11 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
|
|
|
14803
14859
|
// (h-full 이면 input 내부 텍스트 센터링을 브라우저가 수행해 1px 어긋날 수 있음)
|
|
14804
14860
|
"min-w-0 flex-1 border-0 bg-transparent p-0 outline-none placeholder:text-[color:var(--cmp-numberInput-text-placeholder)] disabled:cursor-not-allowed",
|
|
14805
14861
|
AUTOFILL_RESET_CLASS,
|
|
14806
|
-
|
|
14862
|
+
inputClassName
|
|
14807
14863
|
),
|
|
14808
14864
|
style: {
|
|
14809
14865
|
// fontSize/lineHeight 는 컨테이너에서 상속
|
|
14810
|
-
textAlign:
|
|
14866
|
+
textAlign: showButton ? "center" : "right",
|
|
14811
14867
|
color: disabled ? "var(--cmp-numberInput-text-disabled)" : "var(--cmp-numberInput-text-default)",
|
|
14812
14868
|
...inputStyle
|
|
14813
14869
|
},
|
|
@@ -14817,7 +14873,7 @@ var SNumberInput = /* @__PURE__ */ forwardRef(function SNumberInput2({
|
|
|
14817
14873
|
),
|
|
14818
14874
|
valueTooltip.tooltip,
|
|
14819
14875
|
inputSuffix !== "" && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", style: { color: affixColor }, children: inputSuffix }),
|
|
14820
|
-
|
|
14876
|
+
showButton && stepper("inc")
|
|
14821
14877
|
]
|
|
14822
14878
|
}
|
|
14823
14879
|
)
|
|
@@ -15655,7 +15711,7 @@ function RangeCalendar({
|
|
|
15655
15711
|
value,
|
|
15656
15712
|
selectable,
|
|
15657
15713
|
maxRange,
|
|
15658
|
-
|
|
15714
|
+
showTimePicker = false,
|
|
15659
15715
|
onSelect,
|
|
15660
15716
|
onPendingStartChange,
|
|
15661
15717
|
onViewChange
|
|
@@ -15674,7 +15730,7 @@ function RangeCalendar({
|
|
|
15674
15730
|
const [eM, setEM] = useState(splitDateTime(value?.[1]).minute);
|
|
15675
15731
|
const lastEmitted = useRef("");
|
|
15676
15732
|
useEffect(() => {
|
|
15677
|
-
if (
|
|
15733
|
+
if (showTimePicker && JSON.stringify(value) === lastEmitted.current) return;
|
|
15678
15734
|
const s = splitDateTime(value?.[0]);
|
|
15679
15735
|
const e = splitDateTime(value?.[1]);
|
|
15680
15736
|
setStart(s.date);
|
|
@@ -15683,7 +15739,7 @@ function RangeCalendar({
|
|
|
15683
15739
|
setSM(s.minute);
|
|
15684
15740
|
setEH(e.hour);
|
|
15685
15741
|
setEM(e.minute);
|
|
15686
|
-
}, [value,
|
|
15742
|
+
}, [value, showTimePicker]);
|
|
15687
15743
|
const setBase = (ny, nm) => {
|
|
15688
15744
|
setY(ny);
|
|
15689
15745
|
setM(nm);
|
|
@@ -15731,7 +15787,7 @@ function RangeCalendar({
|
|
|
15731
15787
|
const pad = (v) => String(Number(v) || 0).padStart(2, "0");
|
|
15732
15788
|
const emit3 = (dateStart, dateEnd, time) => {
|
|
15733
15789
|
const t = time ?? { sH, sM, eH, eM };
|
|
15734
|
-
const range =
|
|
15790
|
+
const range = showTimePicker ? [`${dateStart} ${pad(t.sH)}:${pad(t.sM)}`, `${dateEnd} ${pad(t.eH)}:${pad(t.eM)}`] : [dateStart, dateEnd];
|
|
15735
15791
|
lastEmitted.current = JSON.stringify(range);
|
|
15736
15792
|
onSelect(range);
|
|
15737
15793
|
};
|
|
@@ -15741,7 +15797,7 @@ function RangeCalendar({
|
|
|
15741
15797
|
setStart(d);
|
|
15742
15798
|
setEnd(null);
|
|
15743
15799
|
setHover(null);
|
|
15744
|
-
if (
|
|
15800
|
+
if (showTimePicker) {
|
|
15745
15801
|
setSH("00");
|
|
15746
15802
|
setSM("00");
|
|
15747
15803
|
setEH("23");
|
|
@@ -15752,7 +15808,7 @@ function RangeCalendar({
|
|
|
15752
15808
|
}
|
|
15753
15809
|
setEnd(d);
|
|
15754
15810
|
onPendingStartChange?.(null);
|
|
15755
|
-
emit3(start, d,
|
|
15811
|
+
emit3(start, d, showTimePicker ? { sH, sM, eH: "23", eM: "59" } : void 0);
|
|
15756
15812
|
};
|
|
15757
15813
|
const changeTime = (which, part, raw) => {
|
|
15758
15814
|
const digits = raw.replace(/\D/g, "").slice(0, 2);
|
|
@@ -15923,7 +15979,7 @@ function RangeCalendar({
|
|
|
15923
15979
|
// 높이는 고정이 아니라 하한이다 — 5주/6주 달을 오갈 때의 높이 흔들림만 막으면 되고,
|
|
15924
15980
|
// 창이 좁아 패널이 가로 스크롤될 때는 스크롤바 높이만큼 늘어날 수 있어야 한다.
|
|
15925
15981
|
// (단일 달 SCalendar 도 min-h 를 쓴다)
|
|
15926
|
-
|
|
15982
|
+
showTimePicker ? "h-auto" : "min-h-[364px]"
|
|
15927
15983
|
),
|
|
15928
15984
|
children: [
|
|
15929
15985
|
/* @__PURE__ */ jsxs("div", { className: "relative flex items-center justify-center", children: [
|
|
@@ -15956,7 +16012,7 @@ function RangeCalendar({
|
|
|
15956
16012
|
]
|
|
15957
16013
|
}
|
|
15958
16014
|
),
|
|
15959
|
-
|
|
16015
|
+
showTimePicker && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
15960
16016
|
/* @__PURE__ */ jsx(SDivider, {}),
|
|
15961
16017
|
/* @__PURE__ */ jsxs("div", { className: "flex gap-[var(--cmp-datepicker-calendar-time-gap)]", children: [
|
|
15962
16018
|
renderTimeSection("start", start, "\uBD80\uD130"),
|
|
@@ -15975,7 +16031,7 @@ function SDateRangePicker({
|
|
|
15975
16031
|
placeholder = "YYYY-MM-DD ~ YYYY-MM-DD",
|
|
15976
16032
|
selectable,
|
|
15977
16033
|
maxRange,
|
|
15978
|
-
|
|
16034
|
+
showTimePicker = false,
|
|
15979
16035
|
disabled = false,
|
|
15980
16036
|
clearable = false,
|
|
15981
16037
|
width,
|
|
@@ -16043,14 +16099,14 @@ function SDateRangePicker({
|
|
|
16043
16099
|
setPendingStart(null);
|
|
16044
16100
|
onValueChange?.(r);
|
|
16045
16101
|
if (rules && rules.length > 0) setRuleError(runRules(r, rules));
|
|
16046
|
-
if (!
|
|
16102
|
+
if (!showTimePicker) setOpen(false);
|
|
16047
16103
|
};
|
|
16048
16104
|
const clear = () => {
|
|
16049
16105
|
setPendingStart(null);
|
|
16050
16106
|
onValueChange?.(null);
|
|
16051
16107
|
if (rules && rules.length > 0) setRuleError(runRules(null, rules));
|
|
16052
16108
|
};
|
|
16053
|
-
const resolvedPlaceholder =
|
|
16109
|
+
const resolvedPlaceholder = showTimePicker && placeholder === "YYYY-MM-DD ~ YYYY-MM-DD" ? "YYYY-MM-DD HH:mm ~ YYYY-MM-DD HH:mm" : placeholder;
|
|
16054
16110
|
return /* @__PURE__ */ jsx(
|
|
16055
16111
|
SField,
|
|
16056
16112
|
{
|
|
@@ -16164,7 +16220,7 @@ function SDateRangePicker({
|
|
|
16164
16220
|
value: value ?? null,
|
|
16165
16221
|
selectable,
|
|
16166
16222
|
maxRange,
|
|
16167
|
-
|
|
16223
|
+
showTimePicker,
|
|
16168
16224
|
onSelect: select,
|
|
16169
16225
|
onPendingStartChange: setPendingStart,
|
|
16170
16226
|
onViewChange
|
|
@@ -16336,7 +16392,7 @@ function SFilePicker({
|
|
|
16336
16392
|
hovered = false,
|
|
16337
16393
|
inline = false,
|
|
16338
16394
|
multiple = false,
|
|
16339
|
-
|
|
16395
|
+
showMultipleListBox = false,
|
|
16340
16396
|
accept,
|
|
16341
16397
|
maxFileSize,
|
|
16342
16398
|
maxTotalSize,
|
|
@@ -16436,7 +16492,7 @@ function SFilePicker({
|
|
|
16436
16492
|
const iconSize = size === "md" ? 20 : 16;
|
|
16437
16493
|
const gapCls = size === "md" ? "gap-[var(--cmp-filepicker-md-gap)]" : "gap-[var(--cmp-filepicker-sm-gap)]";
|
|
16438
16494
|
const inlinePlaceholder = inline && !disabled && !hasFiles;
|
|
16439
|
-
const showListbox = multiple &&
|
|
16495
|
+
const showListbox = multiple && showMultipleListBox;
|
|
16440
16496
|
const filesArr = multiple ? files : [];
|
|
16441
16497
|
const contentInner = /* @__PURE__ */ jsxs(
|
|
16442
16498
|
"div",
|
|
@@ -16523,7 +16579,7 @@ function SFilePicker({
|
|
|
16523
16579
|
}
|
|
16524
16580
|
)
|
|
16525
16581
|
] }) : contentInner;
|
|
16526
|
-
const chips = multiple && !
|
|
16582
|
+
const chips = multiple && !showMultipleListBox && filesArr.length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-[8px] flex flex-wrap gap-[8px]", children: filesArr.map((f, i) => /* @__PURE__ */ jsx(SChip2, { value: f.name, editable: false, onRemove: () => removeChip(i) }, i)) });
|
|
16527
16583
|
return /* @__PURE__ */ jsxs("div", { className, style, children: [
|
|
16528
16584
|
/* @__PURE__ */ jsx(
|
|
16529
16585
|
SField,
|
|
@@ -16735,7 +16791,7 @@ function SToast({
|
|
|
16735
16791
|
link,
|
|
16736
16792
|
linkLabel,
|
|
16737
16793
|
buttonLabel,
|
|
16738
|
-
|
|
16794
|
+
showClose = false,
|
|
16739
16795
|
type = "default",
|
|
16740
16796
|
onClose,
|
|
16741
16797
|
onButtonClick,
|
|
@@ -16795,7 +16851,7 @@ function SToast({
|
|
|
16795
16851
|
onClick: (e) => onButtonClick?.(e)
|
|
16796
16852
|
}
|
|
16797
16853
|
),
|
|
16798
|
-
|
|
16854
|
+
showClose && /* @__PURE__ */ jsx(
|
|
16799
16855
|
SGhostButton,
|
|
16800
16856
|
{
|
|
16801
16857
|
icon: "close",
|
|
@@ -17050,7 +17106,7 @@ var SToastContainer = /* @__PURE__ */ forwardRef(
|
|
|
17050
17106
|
);
|
|
17051
17107
|
}
|
|
17052
17108
|
);
|
|
17053
|
-
var SForm = /* @__PURE__ */ forwardRef(function SForm2({
|
|
17109
|
+
var SForm = /* @__PURE__ */ forwardRef(function SForm2({ formClassName, onSubmit, onValidationError, children, className, style }, ref) {
|
|
17054
17110
|
const formRef = useRef(null);
|
|
17055
17111
|
const fieldsRef = useRef(/* @__PURE__ */ new Set());
|
|
17056
17112
|
const register = useCallback((entry) => {
|
|
@@ -17118,7 +17174,7 @@ var SForm = /* @__PURE__ */ forwardRef(function SForm2({ formClass, onSubmit, on
|
|
|
17118
17174
|
{
|
|
17119
17175
|
ref: formRef,
|
|
17120
17176
|
onSubmit: handleSubmit,
|
|
17121
|
-
className: cn(
|
|
17177
|
+
className: cn(formClassName, className),
|
|
17122
17178
|
style,
|
|
17123
17179
|
noValidate: true,
|
|
17124
17180
|
children
|
|
@@ -18967,7 +19023,7 @@ var EditorBody = /* @__PURE__ */ forwardRef(function EditorBody2({
|
|
|
18967
19023
|
toolbar,
|
|
18968
19024
|
bubbleMenu,
|
|
18969
19025
|
onImageUpload,
|
|
18970
|
-
|
|
19026
|
+
editorClassName,
|
|
18971
19027
|
editorStyle
|
|
18972
19028
|
}, ref) {
|
|
18973
19029
|
const placeholderRef = useRef(placeholder);
|
|
@@ -19051,7 +19107,7 @@ var EditorBody = /* @__PURE__ */ forwardRef(function EditorBody2({
|
|
|
19051
19107
|
SCROLLBAR_CLASS,
|
|
19052
19108
|
SEDITOR_CONTENT_CLASS,
|
|
19053
19109
|
disabled && "cursor-not-allowed",
|
|
19054
|
-
|
|
19110
|
+
editorClassName
|
|
19055
19111
|
),
|
|
19056
19112
|
style: { ...editorContentStyle({ minHeight, maxHeight, disabled }), ...editorStyle },
|
|
19057
19113
|
children: /* @__PURE__ */ jsx(api.EditorContent, { editor, className: "h-full" })
|
|
@@ -19177,7 +19233,7 @@ var SEditor = /* @__PURE__ */ forwardRef(function SEditor2({
|
|
|
19177
19233
|
focused,
|
|
19178
19234
|
hovered,
|
|
19179
19235
|
name,
|
|
19180
|
-
|
|
19236
|
+
editorClassName,
|
|
19181
19237
|
editorStyle,
|
|
19182
19238
|
onFocus,
|
|
19183
19239
|
onBlur,
|
|
@@ -19306,7 +19362,7 @@ var SEditor = /* @__PURE__ */ forwardRef(function SEditor2({
|
|
|
19306
19362
|
"div",
|
|
19307
19363
|
{
|
|
19308
19364
|
"aria-busy": true,
|
|
19309
|
-
className: cn("min-w-0 flex-1 overflow-y-auto", SCROLLBAR_CLASS,
|
|
19365
|
+
className: cn("min-w-0 flex-1 overflow-y-auto", SCROLLBAR_CLASS, editorClassName),
|
|
19310
19366
|
style: { ...editorContentStyle({ minHeight, maxHeight, disabled }), ...editorStyle },
|
|
19311
19367
|
children: (value ?? defaultValue ?? "") === "" && /* @__PURE__ */ jsx("span", { style: { color: "var(--sys-color-field-text-placeholder)" }, children: placeholder })
|
|
19312
19368
|
}
|
|
@@ -19331,7 +19387,7 @@ var SEditor = /* @__PURE__ */ forwardRef(function SEditor2({
|
|
|
19331
19387
|
toolbar: resolvedToolbar,
|
|
19332
19388
|
bubbleMenu: resolvedBubbleMenu,
|
|
19333
19389
|
onImageUpload,
|
|
19334
|
-
|
|
19390
|
+
editorClassName,
|
|
19335
19391
|
editorStyle
|
|
19336
19392
|
}
|
|
19337
19393
|
) })
|
|
@@ -19784,23 +19840,23 @@ var SChipFilter = /* @__PURE__ */ forwardRef(function SChipFilter2({
|
|
|
19784
19840
|
}
|
|
19785
19841
|
setOpenKey(key);
|
|
19786
19842
|
};
|
|
19787
|
-
const
|
|
19843
|
+
const valueAsPrimitive = (key, nextValue) => {
|
|
19788
19844
|
const next = { ...values, [key]: nextValue };
|
|
19789
19845
|
onValueChange?.(next);
|
|
19790
19846
|
onFilterChange?.({ key, value: nextValue, values: next });
|
|
19791
19847
|
return next;
|
|
19792
19848
|
};
|
|
19793
19849
|
const emitValueAndSearch = (key, nextValue) => {
|
|
19794
|
-
runSearch(
|
|
19850
|
+
runSearch(valueAsPrimitive(key, nextValue));
|
|
19795
19851
|
};
|
|
19796
19852
|
const clearValue = (key) => {
|
|
19797
19853
|
const field = fields.find((f) => f.key === key);
|
|
19798
19854
|
const def = field ? resolveFieldDefault(field) : void 0;
|
|
19799
|
-
runSearch(
|
|
19855
|
+
runSearch(valueAsPrimitive(key, def !== void 0 ? def : null));
|
|
19800
19856
|
};
|
|
19801
19857
|
const removeField = (key) => {
|
|
19802
19858
|
keywordDraftRef.current = null;
|
|
19803
|
-
const nextValues =
|
|
19859
|
+
const nextValues = valueAsPrimitive(key, null);
|
|
19804
19860
|
dismissedRef.current.add(key);
|
|
19805
19861
|
setInternalActiveKeys((current) => current.filter((activeKey) => activeKey !== key));
|
|
19806
19862
|
if (openKey === key) setOpenKey(null);
|
|
@@ -20040,7 +20096,7 @@ var SChipFilter = /* @__PURE__ */ forwardRef(function SChipFilter2({
|
|
|
20040
20096
|
icon: "reset",
|
|
20041
20097
|
iconColor: "grey_80",
|
|
20042
20098
|
label: "\uAC80\uC0C9 \uCD08\uAE30\uD654",
|
|
20043
|
-
|
|
20099
|
+
labelClassName: "text-grey-80",
|
|
20044
20100
|
disabled: disabled || !canReset,
|
|
20045
20101
|
onClick: reset,
|
|
20046
20102
|
className: cn(
|
|
@@ -20078,7 +20134,7 @@ var SChipFilter = /* @__PURE__ */ forwardRef(function SChipFilter2({
|
|
|
20078
20134
|
field: currentOpenField,
|
|
20079
20135
|
value: values[currentOpenField.key],
|
|
20080
20136
|
disabled: disabled || currentOpenField.disabled,
|
|
20081
|
-
onValueChange: (next) =>
|
|
20137
|
+
onValueChange: (next) => valueAsPrimitive(currentOpenField.key, next),
|
|
20082
20138
|
onValueCommit: (next) => emitValueAndSearch(currentOpenField.key, next),
|
|
20083
20139
|
onDraftChange: (text) => {
|
|
20084
20140
|
keywordDraftRef.current = text.trim() === "" ? null : { key: currentOpenField.key, text };
|
|
@@ -20282,7 +20338,7 @@ function EditorPanel({
|
|
|
20282
20338
|
{
|
|
20283
20339
|
size: "sm",
|
|
20284
20340
|
label: allSelected ? "\uC120\uD0DD \uD574\uC81C" : "\uC804\uCCB4 \uC120\uD0DD",
|
|
20285
|
-
|
|
20341
|
+
labelClassName: "font-bold",
|
|
20286
20342
|
disabled,
|
|
20287
20343
|
onClick: toggleSelectAll,
|
|
20288
20344
|
style: { color: "var(--sys-color-fg-secondary)" }
|
|
@@ -20305,7 +20361,7 @@ function EditorPanel({
|
|
|
20305
20361
|
{
|
|
20306
20362
|
size: "sm",
|
|
20307
20363
|
label: "\uAC80\uC0C9",
|
|
20308
|
-
|
|
20364
|
+
labelClassName: "font-bold",
|
|
20309
20365
|
onClick: onClose,
|
|
20310
20366
|
style: { color: CHIPFILTER.chipAppliedValue }
|
|
20311
20367
|
}
|
|
@@ -21039,7 +21095,7 @@ var SChipInput = /* @__PURE__ */ forwardRef(function SChipInput2({
|
|
|
21039
21095
|
name,
|
|
21040
21096
|
rules,
|
|
21041
21097
|
error,
|
|
21042
|
-
|
|
21098
|
+
showReset = false,
|
|
21043
21099
|
maxCount,
|
|
21044
21100
|
metaPlacement = "end",
|
|
21045
21101
|
duplicateLabel,
|
|
@@ -21174,7 +21230,7 @@ var SChipInput = /* @__PURE__ */ forwardRef(function SChipInput2({
|
|
|
21174
21230
|
commit(values.slice(0, -1));
|
|
21175
21231
|
}
|
|
21176
21232
|
};
|
|
21177
|
-
const showResetLink =
|
|
21233
|
+
const showResetLink = showReset && values.length > 0;
|
|
21178
21234
|
const showMaxCount = maxCount != null;
|
|
21179
21235
|
const showMetaInfo = showResetLink || showMaxCount;
|
|
21180
21236
|
const closeDropdown = () => {
|
|
@@ -21494,7 +21550,7 @@ var SBarcodeInput = /* @__PURE__ */ forwardRef(
|
|
|
21494
21550
|
hovered,
|
|
21495
21551
|
prefix,
|
|
21496
21552
|
suffix,
|
|
21497
|
-
|
|
21553
|
+
inputClassName,
|
|
21498
21554
|
inputStyle,
|
|
21499
21555
|
label,
|
|
21500
21556
|
labelWidth,
|
|
@@ -21585,7 +21641,7 @@ var SBarcodeInput = /* @__PURE__ */ forwardRef(
|
|
|
21585
21641
|
className: cn(
|
|
21586
21642
|
"h-full min-w-0 flex-1 border-0 bg-transparent p-0 outline-none placeholder:text-[color:var(--cmp-textinput-text-placeholder)] disabled:cursor-not-allowed",
|
|
21587
21643
|
AUTOFILL_RESET_CLASS,
|
|
21588
|
-
|
|
21644
|
+
inputClassName
|
|
21589
21645
|
),
|
|
21590
21646
|
style: {
|
|
21591
21647
|
fontSize: f.fontSize,
|
|
@@ -21679,7 +21735,7 @@ var TIME_SELECTOR_WIDTH = 136;
|
|
|
21679
21735
|
var MERIDIEM_TIME_SELECTOR_WIDTH = 154;
|
|
21680
21736
|
function TimeSelector({
|
|
21681
21737
|
value,
|
|
21682
|
-
|
|
21738
|
+
showMeridiem,
|
|
21683
21739
|
minuteStep,
|
|
21684
21740
|
onChange
|
|
21685
21741
|
}) {
|
|
@@ -21693,7 +21749,7 @@ function TimeSelector({
|
|
|
21693
21749
|
setMinute(parsed.minute);
|
|
21694
21750
|
}, [parsed.hour, parsed.minute]);
|
|
21695
21751
|
const meridiem = hour >= 12 ? "PM" : "AM";
|
|
21696
|
-
const displayHour =
|
|
21752
|
+
const displayHour = showMeridiem ? hour % 12 === 0 ? 12 : hour % 12 : hour;
|
|
21697
21753
|
const commit = (nextHour, nextMinute) => {
|
|
21698
21754
|
const h = clampTimePart(nextHour, 0, 23);
|
|
21699
21755
|
const m = clampTimePart(nextMinute, 0, 59);
|
|
@@ -21724,8 +21780,8 @@ function TimeSelector({
|
|
|
21724
21780
|
setInputDraft((prev) => ({ ...prev, [part]: String(currentValue).padStart(2, "0") }));
|
|
21725
21781
|
};
|
|
21726
21782
|
const commitHourDraft = (draft) => {
|
|
21727
|
-
const clamped = clampTimePart(Number(draft),
|
|
21728
|
-
const nextHour =
|
|
21783
|
+
const clamped = clampTimePart(Number(draft), showMeridiem ? 1 : 0, showMeridiem ? 12 : 23);
|
|
21784
|
+
const nextHour = showMeridiem ? meridiem === "PM" ? clamped === 12 ? 12 : clamped + 12 : clamped === 12 ? 0 : clamped : clamped;
|
|
21729
21785
|
commit(nextHour, minute);
|
|
21730
21786
|
return clamped;
|
|
21731
21787
|
};
|
|
@@ -21826,7 +21882,7 @@ function TimeSelector({
|
|
|
21826
21882
|
boxShadow: "4px 8px 16px -4px rgba(34,34,34,0.1), 0 0 24px -6px rgba(34,34,34,0.12)"
|
|
21827
21883
|
},
|
|
21828
21884
|
children: [
|
|
21829
|
-
|
|
21885
|
+
showMeridiem && /* @__PURE__ */ jsx(
|
|
21830
21886
|
"div",
|
|
21831
21887
|
{
|
|
21832
21888
|
className: "flex items-center justify-center",
|
|
@@ -21853,7 +21909,7 @@ function TimeSelector({
|
|
|
21853
21909
|
}) })
|
|
21854
21910
|
}
|
|
21855
21911
|
),
|
|
21856
|
-
|
|
21912
|
+
showMeridiem && /* @__PURE__ */ jsx("div", { className: "h-px w-full bg-[var(--sys-color-divider-default)]" }),
|
|
21857
21913
|
/* @__PURE__ */ jsxs(
|
|
21858
21914
|
"div",
|
|
21859
21915
|
{
|
|
@@ -21894,7 +21950,7 @@ function STimePicker({
|
|
|
21894
21950
|
placeholder = "00:00",
|
|
21895
21951
|
disabled = false,
|
|
21896
21952
|
clearable = false,
|
|
21897
|
-
|
|
21953
|
+
showMeridiem,
|
|
21898
21954
|
minuteStep = 1,
|
|
21899
21955
|
width,
|
|
21900
21956
|
name,
|
|
@@ -21922,8 +21978,8 @@ function STimePicker({
|
|
|
21922
21978
|
const [ruleError, setRuleError] = useState("");
|
|
21923
21979
|
const dims = TIMEPICKER_SIZE_CONFIG[size] ?? TIMEPICKER_SIZE_CONFIG.sm;
|
|
21924
21980
|
const normalized = value ? formatTimeValue(parseTimeValue(value).hour, parseTimeValue(value).minute) : null;
|
|
21925
|
-
const
|
|
21926
|
-
const displayText = formatTimeDisplay(normalized,
|
|
21981
|
+
const effectiveShowMeridiem = showMeridiem ?? type === "midday";
|
|
21982
|
+
const displayText = formatTimeDisplay(normalized, effectiveShowMeridiem ? "midday" : "default");
|
|
21927
21983
|
const hasValue = normalized != null && normalized !== "";
|
|
21928
21984
|
useFormField({
|
|
21929
21985
|
name,
|
|
@@ -21940,7 +21996,7 @@ function STimePicker({
|
|
|
21940
21996
|
if (disabled) return;
|
|
21941
21997
|
if (next) {
|
|
21942
21998
|
const triggerWidth = triggerRef.current?.getBoundingClientRect().width ?? 0;
|
|
21943
|
-
const selectorWidth =
|
|
21999
|
+
const selectorWidth = effectiveShowMeridiem ? MERIDIEM_TIME_SELECTOR_WIDTH : TIME_SELECTOR_WIDTH;
|
|
21944
22000
|
setPopoverAlignOffset(Math.max(0, (triggerWidth - selectorWidth) / 2));
|
|
21945
22001
|
}
|
|
21946
22002
|
setOpen(next);
|
|
@@ -22050,7 +22106,7 @@ function STimePicker({
|
|
|
22050
22106
|
TimeSelector,
|
|
22051
22107
|
{
|
|
22052
22108
|
value: normalized,
|
|
22053
|
-
|
|
22109
|
+
showMeridiem: effectiveShowMeridiem,
|
|
22054
22110
|
minuteStep,
|
|
22055
22111
|
onChange: commitValue
|
|
22056
22112
|
}
|
|
@@ -22093,7 +22149,7 @@ var MIDDAY_FIELD_MAX_WIDTH = {
|
|
|
22093
22149
|
};
|
|
22094
22150
|
function RangeTimeSelector({
|
|
22095
22151
|
value,
|
|
22096
|
-
|
|
22152
|
+
showMeridiem,
|
|
22097
22153
|
minuteStep,
|
|
22098
22154
|
rangeOrder,
|
|
22099
22155
|
onChange
|
|
@@ -22106,7 +22162,7 @@ function RangeTimeSelector({
|
|
|
22106
22162
|
const getMeridiem = (side) => getParts(side).hour >= 12 ? "PM" : "AM";
|
|
22107
22163
|
const getDisplayHour = (side) => {
|
|
22108
22164
|
const { hour } = getParts(side);
|
|
22109
|
-
if (!
|
|
22165
|
+
if (!showMeridiem) return hour;
|
|
22110
22166
|
const displayHour = hour % 12;
|
|
22111
22167
|
return displayHour === 0 ? 12 : displayHour;
|
|
22112
22168
|
};
|
|
@@ -22169,10 +22225,10 @@ function RangeTimeSelector({
|
|
|
22169
22225
|
setInputDraft((prev) => ({ ...prev, [key]: String(currentValue).padStart(2, "0") }));
|
|
22170
22226
|
};
|
|
22171
22227
|
const commitHourDraft = (side, draft) => {
|
|
22172
|
-
const clamped = clampTimePart(Number(draft),
|
|
22228
|
+
const clamped = clampTimePart(Number(draft), showMeridiem ? 1 : 0, showMeridiem ? 12 : 23);
|
|
22173
22229
|
const parts = getParts(side);
|
|
22174
22230
|
const meridiem = getMeridiem(side);
|
|
22175
|
-
const nextHour =
|
|
22231
|
+
const nextHour = showMeridiem ? meridiem === "PM" ? clamped === 12 ? 12 : clamped + 12 : clamped === 12 ? 0 : clamped : clamped;
|
|
22176
22232
|
commit(side, nextHour, parts.minute);
|
|
22177
22233
|
return clamped;
|
|
22178
22234
|
};
|
|
@@ -22280,7 +22336,7 @@ function RangeTimeSelector({
|
|
|
22280
22336
|
style: { gap: "var(--cmp-timepicker-selector-range-heading-gap)" },
|
|
22281
22337
|
children: [
|
|
22282
22338
|
/* @__PURE__ */ jsx("div", { className: "whitespace-nowrap text-center text-[12px] font-bold leading-[20px] text-[var(--cmp-timepicker-selector-range-heading-color)]", children: title }),
|
|
22283
|
-
|
|
22339
|
+
showMeridiem && /* @__PURE__ */ jsx("div", { className: "isolate flex", children: ["AM", "PM"].map((item4, index) => {
|
|
22284
22340
|
const selected = item4 === getMeridiem(side);
|
|
22285
22341
|
return /* @__PURE__ */ jsx(
|
|
22286
22342
|
"button",
|
|
@@ -22358,7 +22414,7 @@ function STimeRangePicker({
|
|
|
22358
22414
|
placeholder = "00:00 ~ 23:59",
|
|
22359
22415
|
disabled = false,
|
|
22360
22416
|
clearable = false,
|
|
22361
|
-
|
|
22417
|
+
showMeridiem,
|
|
22362
22418
|
minuteStep = 1,
|
|
22363
22419
|
rangeOrder = "strict",
|
|
22364
22420
|
width,
|
|
@@ -22387,10 +22443,10 @@ function STimeRangePicker({
|
|
|
22387
22443
|
const [ruleError, setRuleError] = useState("");
|
|
22388
22444
|
const dims = TIMEPICKER_SIZE_CONFIG[size] ?? TIMEPICKER_SIZE_CONFIG.sm;
|
|
22389
22445
|
const normalized = normalizeTimeRangeValue(value ?? null, rangeOrder);
|
|
22390
|
-
const
|
|
22446
|
+
const effectiveShowMeridiem = showMeridiem ?? type === "midday";
|
|
22391
22447
|
const displayText = formatTimeRangeDisplay(
|
|
22392
22448
|
normalized,
|
|
22393
|
-
|
|
22449
|
+
effectiveShowMeridiem ? "midday" : "default"
|
|
22394
22450
|
);
|
|
22395
22451
|
const hasValue = normalized != null && normalized[0] !== "" && normalized[1] !== "";
|
|
22396
22452
|
useFormField({
|
|
@@ -22436,8 +22492,8 @@ function STimeRangePicker({
|
|
|
22436
22492
|
focused: focused || open,
|
|
22437
22493
|
errorMessage: ruleError !== "" ? ruleError : errorMessage,
|
|
22438
22494
|
width,
|
|
22439
|
-
minWidth:
|
|
22440
|
-
maxWidth:
|
|
22495
|
+
minWidth: effectiveShowMeridiem ? MIDDAY_FIELD_MIN_WIDTH[size] : dims.fieldMinWidth,
|
|
22496
|
+
maxWidth: effectiveShowMeridiem ? MIDDAY_FIELD_MAX_WIDTH[size] : dims.fieldMaxWidth,
|
|
22441
22497
|
disabled,
|
|
22442
22498
|
className,
|
|
22443
22499
|
style,
|
|
@@ -22517,7 +22573,7 @@ function STimeRangePicker({
|
|
|
22517
22573
|
RangeTimeSelector,
|
|
22518
22574
|
{
|
|
22519
22575
|
value: normalized,
|
|
22520
|
-
|
|
22576
|
+
showMeridiem: effectiveShowMeridiem,
|
|
22521
22577
|
minuteStep,
|
|
22522
22578
|
rangeOrder,
|
|
22523
22579
|
onChange: commitValue
|
|
@@ -22530,6 +22586,6 @@ function STimeRangePicker({
|
|
|
22530
22586
|
);
|
|
22531
22587
|
}
|
|
22532
22588
|
|
|
22533
|
-
export { ACCOUNT_LIST_BOX_ICONS, ACCOUNT_LIST_BOX_ITEM_TONES, ACCOUNT_LIST_BOX_LABELS, ACCOUNT_LIST_BOX_LAYOUT, ACCOUNT_LIST_BOX_TONE_CONFIG, BADGE_COLORS, BUTTON_COLORS, BUTTON_SIZES, CALENDAR_BOARD_DAY_BG, CALENDAR_BOARD_DAY_COLORS, CALENDAR_BOARD_EVENT_COLORS, CALENDAR_BOARD_EVENT_PRESETS, CALENDAR_BOARD_MAX_VISIBLE_EVENTS, COLOR_KEYS, FIELD_WIDTH_GRADES, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_FULL_LOGO_WIDTH, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, GNB_SYSTEM_COLORS, GNB_SYSTEM_COLOR_CONFIG, GNB_SYSTEM_LAYOUT, GNB_SYSTEM_PLACEMENTS, GNB_SYSTEM_TOP_COLOR_CONFIG, ICONS, IMAGE_FITS, PAGE_BACKGROUNDS, PAGE_CONTENT_HEIGHTS, RangeCalendar, SAccountListBox, SActionModal, SBadge, SBarcodeInput, SButton, SCROLL_AREA_AXES, SCalendar, SCalendarBoard, SCallout, SCard, SCheckbox, SChip2 as SChip, SChipFilter, SChipInput, SCircleProgress, SConfirmModal, SDatePicker, SDatePickerMonthListbox, SDatePickerYearListbox, SDateRangePicker, SDivider, SDraggableGroup, SDraggableItem2 as SDraggableItem, SDraggableList, SDraggableProvider, SDrawer, SDropdownButton2 as SDropdownButton, SEDITOR_DEFAULT_FONT_SIZE, SEDITOR_HEADING_LABELS, SEDITOR_HEADING_LEVELS, SEditor, SExpansionItem, SExpansionList2 as SExpansionList, SField, SFilePicker, SForm, SGhostButton, SGnb, SGnbSystem, SGnbSystemContext, SGuide, SIcon, SImage, SInput, SKeyValueTable, SLAYOUT_MIN_WIDTH, SLayout, SLayoutContext, SLinearProgress, SList2 as SList, SListItem2 as SListItem, SLoadingContainer, SLoadingModal, SLoadingViewport, SModal, SModalOutlet, SNumberInput, SPage, SPageHeader, SPagination, SPopover, SPopup, SPortal, SRadio, SRadioButton, SRadioCard, SRadioCardGroup, SRadioGroup, SSPLITTER_UNITS, SScrollArea, SSearchInput, SSectionHeaderCard2 as SSectionHeaderCard, SSelect2 as SSelect, SSplitter2 as SSplitter, SStepper, SSwitch, SSystemActionButton, STEPPER_SIZES, STable, STableBar, STabs, STag, STextLink, STextarea, STimePicker, STimeRangePicker, SToast, SToastContainer, SToggle, STooltip2 as STooltip, STree2 as STree, STreeItem2 as STreeItem, SYSTEM_ACTION_BUTTON_COLORS, SYSTEM_ACTION_BUTTON_COLOR_CONFIG, SYSTEM_ACTION_BUTTON_LAYOUT, SYSTEM_ACTION_BUTTON_TYPES, SYSTEM_ACTION_BUTTON_TYPE_CONFIG, TAG_COLORS, TAG_SHAPES, TAG_SIZES, TIMEPICKER_SIZES, TIMEPICKER_SIZE_CONFIG, buttonPreset, cn, fieldWidthValue, findGnbAncestors, findGnbRailValue, isColorKey, isFieldWidthGrade, loading, resolveColor, useSLayout };
|
|
22589
|
+
export { ACCOUNT_LIST_BOX_ICONS, ACCOUNT_LIST_BOX_ITEM_TONES, ACCOUNT_LIST_BOX_LABELS, ACCOUNT_LIST_BOX_LAYOUT, ACCOUNT_LIST_BOX_TONE_CONFIG, BADGE_COLORS, BUTTON_COLORS, BUTTON_SIZES, CALENDAR_BOARD_DAY_BG, CALENDAR_BOARD_DAY_COLORS, CALENDAR_BOARD_EVENT_COLORS, CALENDAR_BOARD_EVENT_PRESETS, CALENDAR_BOARD_MAX_VISIBLE_EVENTS, COLOR_KEYS, FIELD_WIDTH_GRADES, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_FULL_LOGO_WIDTH, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, GNB_SYSTEM_COLORS, GNB_SYSTEM_COLOR_CONFIG, GNB_SYSTEM_LAYOUT, GNB_SYSTEM_PLACEMENTS, GNB_SYSTEM_TOP_COLOR_CONFIG, ICONS, IMAGE_FITS, PAGE_BACKGROUNDS, PAGE_CONTENT_HEIGHTS, PAGE_CONTENT_WIDTHS, PAGE_HEADER_VARIANTS, RangeCalendar, SAccountListBox, SActionModal, SBadge, SBarcodeInput, SButton, SCROLL_AREA_AXES, SCalendar, SCalendarBoard, SCallout, SCard, SCheckbox, SChip2 as SChip, SChipFilter, SChipInput, SCircleProgress, SConfirmModal, SDatePicker, SDatePickerMonthListbox, SDatePickerYearListbox, SDateRangePicker, SDivider, SDraggableGroup, SDraggableItem2 as SDraggableItem, SDraggableList, SDraggableProvider, SDrawer, SDropdownButton2 as SDropdownButton, SEDITOR_DEFAULT_FONT_SIZE, SEDITOR_HEADING_LABELS, SEDITOR_HEADING_LEVELS, SEditor, SExpansionItem, SExpansionList2 as SExpansionList, SField, SFilePicker, SForm, SGhostButton, SGnb, SGnbSystem, SGnbSystemContext, SGuide, SIcon, SImage, SInput, SKeyValueTable, SLAYOUT_MIN_WIDTH, SLayout, SLayoutContext, SLinearProgress, SList2 as SList, SListItem2 as SListItem, SLoadingContainer, SLoadingModal, SLoadingViewport, SModal, SModalOutlet, SNumberInput, SPage, SPageHeader, SPagination, SPopover, SPopup, SPortal, SRadio, SRadioButton, SRadioCard, SRadioCardGroup, SRadioGroup, SSPLITTER_UNITS, SScrollArea, SSearchInput, SSectionHeaderCard2 as SSectionHeaderCard, SSelect2 as SSelect, SSplitter2 as SSplitter, SStepper, SSwitch, SSystemActionButton, STEPPER_SIZES, STable, STableBar, STabs, STag, STextLink, STextarea, STimePicker, STimeRangePicker, SToast, SToastContainer, SToggle, STooltip2 as STooltip, STree2 as STree, STreeItem2 as STreeItem, SYSTEM_ACTION_BUTTON_COLORS, SYSTEM_ACTION_BUTTON_COLOR_CONFIG, SYSTEM_ACTION_BUTTON_LAYOUT, SYSTEM_ACTION_BUTTON_TYPES, SYSTEM_ACTION_BUTTON_TYPE_CONFIG, TAG_COLORS, TAG_SHAPES, TAG_SIZES, TIMEPICKER_SIZES, TIMEPICKER_SIZE_CONFIG, buttonPreset, cn, fieldWidthValue, findGnbAncestors, findGnbRailValue, isColorKey, isFieldWidthGrade, loading, resolveColor, useSLayout };
|
|
22534
22590
|
//# sourceMappingURL=index.js.map
|
|
22535
22591
|
//# sourceMappingURL=index.js.map
|