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.
Files changed (80) hide show
  1. package/AGENTS.md +41 -20
  2. package/dist/components/SBarcodeInput/README.md +3 -3
  3. package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +3 -1
  4. package/dist/components/SChipInput/README.md +1 -1
  5. package/dist/components/SChipInput/SChipInput.d.ts +1 -1
  6. package/dist/components/SConfirmModal/README.md +3 -11
  7. package/dist/components/SConfirmModal/SConfirmModal.d.ts +16 -8
  8. package/dist/components/SConfirmModal/index.d.ts +1 -1
  9. package/dist/components/SDateRangePicker/README.md +2 -2
  10. package/dist/components/SDateRangePicker/SDateRangePicker.d.ts +4 -4
  11. package/dist/components/SEditor/EditorBody.d.ts +1 -1
  12. package/dist/components/SEditor/README.md +4 -4
  13. package/dist/components/SEditor/SEditor.d.ts +3 -3
  14. package/dist/components/SField/README.md +2 -2
  15. package/dist/components/SField/SField.d.ts +8 -2
  16. package/dist/components/SFilePicker/README.md +3 -3
  17. package/dist/components/SFilePicker/SFilePicker.d.ts +4 -4
  18. package/dist/components/SForm/README.md +1 -1
  19. package/dist/components/SForm/SForm.d.ts +2 -2
  20. package/dist/components/SGnb/README.md +7 -7
  21. package/dist/components/SGnb/SGnb.d.ts +9 -9
  22. package/dist/components/SGnb/gnb.config.d.ts +2 -2
  23. package/dist/components/SImage/README.md +1 -1
  24. package/dist/components/SImage/SImage.d.ts +2 -2
  25. package/dist/components/SInput/README.md +3 -3
  26. package/dist/components/SInput/SInput.d.ts +3 -3
  27. package/dist/components/SLayout/README.md +1 -1
  28. package/dist/components/SLayout/SLayout.d.ts +2 -2
  29. package/dist/components/SList/README.md +10 -2
  30. package/dist/components/SList/SList.d.ts +7 -3
  31. package/dist/components/SList/index.d.ts +1 -1
  32. package/dist/components/SLoadingModal/README.md +1 -1
  33. package/dist/components/SLoadingModal/SLoadingModal.d.ts +2 -2
  34. package/dist/components/SModal/README.md +1 -1
  35. package/dist/components/SNumberInput/README.md +5 -5
  36. package/dist/components/SNumberInput/SNumberInput.d.ts +5 -3
  37. package/dist/components/SPage/README.md +42 -3
  38. package/dist/components/SPage/SPage.d.ts +16 -1
  39. package/dist/components/SPage/SPageHeader.d.ts +19 -8
  40. package/dist/components/SPage/index.d.ts +1 -1
  41. package/dist/components/SPage/page-column.d.ts +11 -2
  42. package/dist/components/SPage/page-width.d.ts +23 -0
  43. package/dist/components/SPage/page.config.d.ts +18 -0
  44. package/dist/components/SPopup/README.md +8 -2
  45. package/dist/components/SPopup/SPopup.d.ts +7 -3
  46. package/dist/components/SPopup/index.d.ts +1 -1
  47. package/dist/components/SSearchInput/README.md +3 -3
  48. package/dist/components/SSearchInput/SSearchInput.d.ts +3 -3
  49. package/dist/components/SSelect/README.md +5 -5
  50. package/dist/components/SSelect/SSelect.d.ts +14 -6
  51. package/dist/components/SSplitter/README.md +2 -2
  52. package/dist/components/SSplitter/SSplitter.d.ts +7 -3
  53. package/dist/components/SSwitch/README.md +0 -1
  54. package/dist/components/SSwitch/SSwitch.d.ts +1 -3
  55. package/dist/components/STable/README.md +8 -9
  56. package/dist/components/STable/STable.d.ts +9 -11
  57. package/dist/components/STabs/README.md +1 -1
  58. package/dist/components/STabs/STabs.d.ts +2 -2
  59. package/dist/components/STextLink/README.md +1 -1
  60. package/dist/components/STextLink/STextLink.d.ts +1 -1
  61. package/dist/components/STextarea/README.md +3 -3
  62. package/dist/components/STextarea/STextarea.d.ts +3 -3
  63. package/dist/components/STimePicker/README.md +1 -1
  64. package/dist/components/STimePicker/STimePicker.d.ts +4 -4
  65. package/dist/components/STimeRangePicker/README.md +1 -1
  66. package/dist/components/STimeRangePicker/STimeRangePicker.d.ts +4 -4
  67. package/dist/components/SToast/README.md +1 -1
  68. package/dist/components/SToast/SToast.d.ts +2 -2
  69. package/dist/components/STooltip/README.md +1 -1
  70. package/dist/components/STooltip/STooltip.d.ts +1 -1
  71. package/dist/components/STree/README.md +4 -4
  72. package/dist/components/STree/STree.d.ts +17 -5
  73. package/dist/index.cjs +295 -237
  74. package/dist/index.cjs.map +1 -1
  75. package/dist/index.js +294 -238
  76. package/dist/index.js.map +1 -1
  77. package/dist/llms-full.txt +170 -106
  78. package/dist/llms.txt +41 -20
  79. package/dist/styles.css +9 -0
  80. 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
- noSpinner = false,
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 showSpinner = !isEmpty && status === "loading" && !noSpinner && spinnerVisible;
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
- showSpinner && /* @__PURE__ */ jsx("span", { className: "absolute inset-0 flex items-center justify-center", children: loadingSlot ?? /* @__PURE__ */ jsx(SCircleProgress, { indeterminate: true, type: "neutral", size: SPINNER_SIZE }) })
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, useGap = false, usePadding = false, ...rest }, ref) {
4081
- const showDivider = !useGap && !hasBorderedChild(children);
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
- useGap && "flex flex-col gap-(--cmp-list-group-gap)",
4088
- usePadding && "p-(--cmp-list-group-padding)",
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
- useGap,
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 && !useGap;
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: useGap ? -5 : 0
4466
+ top: gap ? -5 : 0
4463
4467
  });
4464
4468
  const afterIndicatorStyle = (depth) => ({
4465
4469
  borderTop: "2px solid var(--sys-color-fg-accentLight)",
4466
- bottom: useGap ? -5 : -1,
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
- useGap,
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
- isLast = true,
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
- useAll = false,
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 && useAll;
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
- useClose = false,
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 (useClose) return;
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 핸들러가 없으므로 useClose 없이도 자동 닫힘이 발생하지 않는다.
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 (useClose || isNone) e.preventDefault();
5789
+ if (showClose || isNone) e.preventDefault();
5786
5790
  },
5787
5791
  onEscapeKeyDown: (e) => {
5788
- if (useClose || isNone) e.preventDefault();
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
- useClose && !isNone && /* @__PURE__ */ jsx(
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
- emitImmediately = false,
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, emitImmediately, isControlled });
6084
- emitRef.current = { onValueChange, emitImmediately, isControlled };
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.emitImmediately) commit(latest);
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
- labelClass,
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(labelClass),
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 ?? label;
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
- labelClass: leftLinkLabelClass,
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
- useFooter = false,
7796
+ showFooter = false,
7790
7797
  submitButton,
7791
7798
  onSubmit,
7792
7799
  footerLeft,
7793
- noPadding = false,
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
- !noPadding && "p-(--sys-space-panel-padding-default)",
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
- useFooter && /* @__PURE__ */ jsx(SFooter, { left: footerLeft, button: { ...submitButton, onClick: onSubmit } })
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 MAIN_BUTTON_STYLE = {
8133
- primary_md: { color: "primary" },
8134
- primary_outline_md: { color: "primary", outline: true },
8135
- danger_md: { color: "danger" },
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 DEFAULT_MAIN_BUTTON = {
8140
- positive: "primary_md",
8141
- negative: "danger_md",
8142
- default: "neutral_outline_md"
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
- titleClass,
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
- mainButtonName,
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 mainStyle = MAIN_BUTTON_STYLE[mainButtonName ?? DEFAULT_MAIN_BUTTON[type]];
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
- titleClass
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
- ...mainStyle,
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
- useButton = false,
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 showButton = useButton || state2 === "error";
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
- showButton && /* @__PURE__ */ jsx(
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 value = useMemo(() => ({ scrolled, setScrolled }), [scrolled]);
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
- useRail = false,
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
- useRail,
9198
+ showRail,
9188
9199
  folded: currentFolded,
9189
9200
  setFolded,
9190
9201
  registerNav
9191
9202
  }),
9192
- [type, effectiveHeader, useRail, currentFolded, setFolded, registerNav]
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
- useRail: useRailProp,
9452
+ showRail: useRailProp,
9442
9453
  value = "",
9443
9454
  onValueChange,
9444
9455
  onRailChange,
9445
9456
  folded: foldedProp,
9446
- onFoldChange,
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 useRail = useRailProp ?? layout?.useRail ?? false;
9470
- const railHasLeaf = useRail && items.some((item4) => !item4.children || item4.children.length === 0);
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
- onFoldChange?.(next);
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 = useRail ? items : [];
9738
- const menuItems = useRail ? items.find((item4) => item4.value === activeRail)?.children ?? [] : items;
9739
- const showMenu = !useRail || menuItems.length > 0;
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 = (useRail ? GNB_RAIL_WIDTH : 0) + (showMenu ? menuWidth : 0);
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
- useRail && // 레일 컬럼 — 스크롤되는 아이템 목록(nav)을 가운데 두고 위아래에 고정 슬롯(top/footer)을 붙인다.
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("div", { className: cn(fill && "h-full"), style: { minWidth: MIN_CONTENT_WIDTH }, children })
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, fix = false, onBack, slot, scrolled, className, style, ...rest }, ref) {
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
- return /* @__PURE__ */ jsxs(
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 gap-(--cmp-pageHeader-gap) px-(--cmp-pageHeader-paddingX)",
10820
- // 배경은 두 베리에이션이 같은 흰 면이다 — fix 가 가르는 것은 높이·구분선·서브 텍스트 자리다.
10863
+ "relative z-10 box-border flex shrink-0 items-center px-(--cmp-pageHeader-paddingX)",
10864
+ // 배경은 두 베리에이션이 같은 흰 면이다 — variant 가 가르는 것은 높이·구분선·서브 텍스트 자리다.
10821
10865
  // plain 에는 전용 배경 토큰이 없어 시스템 흰 표면을 쓴다(토큰이 생기면 그것으로 갈아끼운다).
10822
- fix ? "h-(--cmp-pageHeader-bar-height) border-b border-(--cmp-pageHeader-bar-border) bg-(--cmp-pageHeader-bar-bg) py-(--cmp-pageHeader-bar-paddingY)" : cn(
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
- hasBack && /* @__PURE__ */ jsx(
10833
- SGhostButton,
10834
- {
10835
- icon: "chevronLeft",
10836
- size: "xs",
10837
- ariaLabel: "\uB4A4\uB85C\uAC00\uAE30",
10838
- onClick: onBack,
10839
- className: "shrink-0"
10840
- }
10841
- ),
10842
- /* @__PURE__ */ jsxs(
10843
- "div",
10844
- {
10845
- className: cn(
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
- children: [
10851
- /* @__PURE__ */ jsx("span", { className: "typo-heading-lg min-w-0 truncate text-(--cmp-pageHeader-title-text)", children: title }),
10852
- subText && /* @__PURE__ */ jsx("span", { className: "typo-body-md-default min-w-0 truncate text-(--cmp-pageHeader-subtitle-text)", children: subText })
10853
- ]
10854
- }
10855
- ),
10856
- slot && /* @__PURE__ */ jsx("div", { className: "ml-auto flex shrink-0 items-center", children: slot })
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
- isSub = false,
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 = isSub && vertical;
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 (!isSub) containerStyle.borderBottom = `1px solid ${blue}`;
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
- isSub ? "inline-flex w-fit" : "flex w-full",
10960
+ sub ? "inline-flex w-fit" : "flex w-full",
10910
10961
  isVertical ? "flex-col items-stretch" : "flex-row",
10911
- isSub ? isVertical ? "gap-[16px]" : "gap-[24px]" : "gap-[4px]",
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 (isSub) {
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)" : interactive && focused ? "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)";
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: "0px 0px 4px 0px #0071ff66" } : {},
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
- inputClass,
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
- inputClass
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
- emitValue = false,
12694
+ valueAsPrimitive = false,
12639
12695
  name,
12640
12696
  options = [],
12641
12697
  type = "default",
12642
- useSearch = false,
12643
- useSelectAll = false,
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 showSearch = useSearch && selectable.length >= SEARCH_THRESHOLD;
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) => emitValue ? rawByValue.get(v) ?? v : optionByValue.get(v) ?? { value: v, label: v }
12761
+ (v) => valueAsPrimitive ? rawByValue.get(v) ?? v : optionByValue.get(v) ?? { value: v, label: v }
12706
12762
  );
12707
- onValueChange(multi ? mapped : mapped[0] ?? (emitValue ? "" : null));
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 (!showSearch || search.trim() === "") return flat;
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, showSearch]);
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 && useSelectAll && allValues.length > 0) {
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, useSelectAll]);
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 (!showSearch) {
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
- showSearch && /* @__PURE__ */ jsx(
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 && useSelectAll && allValues.length > 0,
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
- noDataLabel = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
13332
- noDataSlot,
13333
- isLoading = false,
13387
+ emptyLabel = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
13388
+ emptySlot,
13389
+ loading: loading2 = false,
13334
13390
  dense = false,
13335
13391
  onDenseChange,
13336
- noHover = false,
13392
+ hoverable = true,
13337
13393
  pagination,
13338
13394
  onPageChange,
13339
- useInternalPagination = false,
13340
- useRowsPerPageSelect = false,
13395
+ internalPagination = false,
13396
+ showRowsPerPageSelect = false,
13341
13397
  rowsPerPageOption = DEFAULT_ROWS_PER_PAGE_OPTION,
13342
13398
  onRowsPerPageChange,
13343
- useVirtualScroll = false,
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 (useVirtualScroll) {
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
- }, [useVirtualScroll, calcRange]);
13542
+ }, [virtualScroll, calcRange]);
13487
13543
  useEffect(() => {
13488
13544
  handleScroll();
13489
- }, [handleScroll, rowCount, columnWidths, isLoading, height]);
13545
+ }, [handleScroll, rowCount, columnWidths, loading2, height]);
13490
13546
  useEffect(() => {
13491
- if (!useVirtualScroll) return;
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, useVirtualScroll, rowCount, virtualEndThreshold]);
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 (!useInternalPagination || !pagination) return null;
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
- useInternalPagination,
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 = useInternalPagination && pagination ? {
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 (useVirtualScroll) {
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 && !isLoading;
13613
- const showNoDataSlot = isNoData && noDataSlot != null;
13614
- const showPagination = !useVirtualScroll && (pagination != null || useInternalPagination);
13615
- const lastPage = useInternalPagination ? Math.max(1, Math.ceil(rowCount / (innerRowsPerPage || 1))) : pagination?.lastPage ?? Math.max(1, Math.ceil(rowCount / (pagination?.rowsPerPage ?? 10)));
13616
- const displayPage = useInternalPagination ? currentPage : pagination?.page ?? 1;
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 (useInternalPagination) setCurrentPage(p);
13674
+ if (internalPagination) setCurrentPage(p);
13619
13675
  onPageChange?.(p);
13620
13676
  };
13621
13677
  const changeRowsPerPage = (perPage) => {
13622
- if (useInternalPagination) {
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
- (isLoading || rowCount === 0) && "pointer-events-none"
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: noDataSlot }) }) : (
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
- (isLoading || rowCount === 0) && "overflow-hidden"
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
- useVirtualScroll && topSpacer > 0 && /* @__PURE__ */ jsx("tr", { "aria-hidden": true, style: { height: topSpacer }, children: /* @__PURE__ */ jsx("td", { colSpan: totalColSpan, className: "p-0" }) }),
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
- !noHover && "hover:bg-[var(--color-grey-05)]",
14032
+ hoverable && "hover:bg-[var(--color-grey-05)]",
13977
14033
  onRowClick && "cursor-pointer"
13978
14034
  ),
13979
- style: { height: useVirtualScroll ? effectiveRowHeight : rowH },
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
- !noHover && "group-hover/table-row:bg-[var(--color-grey-05)]",
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
- !noHover && "group-hover/table-row:bg-[var(--color-grey-05)]",
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
- useVirtualScroll && bottomSpacer > 0 && /* @__PURE__ */ jsx("tr", { "aria-hidden": true, style: { height: bottomSpacer }, children: /* @__PURE__ */ jsx("td", { colSpan: totalColSpan, className: "p-0" }) })
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: noDataLabel }) })
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
- isLoading && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-30 flex items-center justify-center bg-white/60", children: /* @__PURE__ */ jsx(SCircleProgress, { indeterminate: true }) })
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 || useRowsPerPageSelect) && // 원본 sd-table__pagination: 테이블 하단에 이어붙는 회색 바(높이 48px, margin-top:-1px로 테두리 겹침).
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
- useRowsPerPageSelect && /* @__PURE__ */ jsxs("div", { className: "absolute right-[10px] top-1/2 flex -translate-y-1/2 items-center gap-[12px]", children: [
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: useInternalPagination ? innerRowsPerPage : pagination?.rowsPerPage,
14096
- emitValue: true,
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
- inputClass,
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
- inputClass
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
- textareaClass,
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
- textareaClass
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 = (useDecimal, maxDecimalLength) => {
14527
- if (!useDecimal || maxDecimalLength === void 0 || !Number.isFinite(maxDecimalLength)) {
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
- useButton = false,
14557
- useDecimal = false,
14612
+ showButton = false,
14613
+ allowDecimal = false,
14558
14614
  maxDecimalLength,
14559
14615
  inputPrefix = "",
14560
14616
  inputSuffix = "",
14561
- inputClass,
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(useDecimal, maxDecimalLength);
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 (!useDecimal && cleaned.includes(".")) {
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 ${useButton ? padX : `calc(${padX} * 2)`}`,
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
- useButton && stepper("dec"),
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: useDecimal ? "decimal" : "numeric",
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
- inputClass
14862
+ inputClassName
14807
14863
  ),
14808
14864
  style: {
14809
14865
  // fontSize/lineHeight 는 컨테이너에서 상속
14810
- textAlign: useButton ? "center" : "right",
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
- useButton && stepper("inc")
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
- useTimePicker = false,
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 (useTimePicker && JSON.stringify(value) === lastEmitted.current) return;
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, useTimePicker]);
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 = useTimePicker ? [`${dateStart} ${pad(t.sH)}:${pad(t.sM)}`, `${dateEnd} ${pad(t.eH)}:${pad(t.eM)}`] : [dateStart, dateEnd];
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 (useTimePicker) {
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, useTimePicker ? { sH, sM, eH: "23", eM: "59" } : void 0);
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
- useTimePicker ? "h-auto" : "min-h-[364px]"
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
- useTimePicker && /* @__PURE__ */ jsxs(Fragment, { children: [
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
- useTimePicker = false,
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 (!useTimePicker) setOpen(false);
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 = useTimePicker && placeholder === "YYYY-MM-DD ~ YYYY-MM-DD" ? "YYYY-MM-DD HH:mm ~ YYYY-MM-DD HH:mm" : placeholder;
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
- useTimePicker,
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
- useMultipleListBox = false,
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 && useMultipleListBox;
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 && !useMultipleListBox && 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)) });
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
- useClose = false,
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
- useClose && /* @__PURE__ */ jsx(
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({ formClass, onSubmit, onValidationError, children, className, style }, ref) {
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(formClass, className),
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
- editorClass,
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
- editorClass
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
- editorClass,
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, editorClass),
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
- editorClass,
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 emitValue = (key, nextValue) => {
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(emitValue(key, nextValue));
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(emitValue(key, def !== void 0 ? def : null));
19855
+ runSearch(valueAsPrimitive(key, def !== void 0 ? def : null));
19800
19856
  };
19801
19857
  const removeField = (key) => {
19802
19858
  keywordDraftRef.current = null;
19803
- const nextValues = emitValue(key, null);
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
- labelClass: "text-grey-80",
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) => emitValue(currentOpenField.key, 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
- labelClass: "font-bold",
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
- labelClass: "font-bold",
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
- useReset = false,
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 = useReset && values.length > 0;
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
- inputClass,
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
- inputClass
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
- useMeridiem,
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 = useMeridiem ? hour % 12 === 0 ? 12 : hour % 12 : hour;
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), useMeridiem ? 1 : 0, useMeridiem ? 12 : 23);
21728
- const nextHour = useMeridiem ? meridiem === "PM" ? clamped === 12 ? 12 : clamped + 12 : clamped === 12 ? 0 : clamped : clamped;
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
- useMeridiem && /* @__PURE__ */ jsx(
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
- useMeridiem && /* @__PURE__ */ jsx("div", { className: "h-px w-full bg-[var(--sys-color-divider-default)]" }),
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
- useMeridiem,
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 effectiveUseMeridiem = useMeridiem ?? type === "midday";
21926
- const displayText = formatTimeDisplay(normalized, effectiveUseMeridiem ? "midday" : "default");
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 = effectiveUseMeridiem ? MERIDIEM_TIME_SELECTOR_WIDTH : TIME_SELECTOR_WIDTH;
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
- useMeridiem: effectiveUseMeridiem,
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
- useMeridiem,
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 (!useMeridiem) return hour;
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), useMeridiem ? 1 : 0, useMeridiem ? 12 : 23);
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 = useMeridiem ? meridiem === "PM" ? clamped === 12 ? 12 : clamped + 12 : clamped === 12 ? 0 : clamped : clamped;
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
- useMeridiem && /* @__PURE__ */ jsx("div", { className: "isolate flex", children: ["AM", "PM"].map((item4, index) => {
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
- useMeridiem,
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 effectiveUseMeridiem = useMeridiem ?? type === "midday";
22446
+ const effectiveShowMeridiem = showMeridiem ?? type === "midday";
22391
22447
  const displayText = formatTimeRangeDisplay(
22392
22448
  normalized,
22393
- effectiveUseMeridiem ? "midday" : "default"
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: effectiveUseMeridiem ? MIDDAY_FIELD_MIN_WIDTH[size] : dims.fieldMinWidth,
22440
- maxWidth: effectiveUseMeridiem ? MIDDAY_FIELD_MAX_WIDTH[size] : dims.fieldMaxWidth,
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
- useMeridiem: effectiveUseMeridiem,
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