sellmate-design-system-react 9.0.0-beta.24 → 9.0.0-beta.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -4243,7 +4243,7 @@ function moveWithDepth(items, fromIndex, target, getDepth, setDepth, maxDepth) {
4243
4243
  const nextDepth = target.intent === "inside" ? targetDepth + 1 : targetDepth;
4244
4244
  const depthDelta = clampDepth(nextDepth, maxDepth) - sourceDepth;
4245
4245
  const nextMovedItems = setDepth && depthDelta !== 0 ? movedItems.map(
4246
- (item, index) => setDepth(item, clampDepth(getDepth(item, fromIndex + index) + depthDelta, maxDepth))
4246
+ (item2, index) => setDepth(item2, clampDepth(getDepth(item2, fromIndex + index) + depthDelta, maxDepth))
4247
4247
  ) : movedItems;
4248
4248
  return [
4249
4249
  ...remainingItems.slice(0, insertionIndex),
@@ -4290,7 +4290,7 @@ function SDraggableListInner({
4290
4290
  setDropTarget({ index, intent: "before" });
4291
4291
  }, []);
4292
4292
  const readDepth = react.useCallback(
4293
- (item, index) => clampDepth(getDepth?.(item, index) ?? 1, maxDepth),
4293
+ (item2, index) => clampDepth(getDepth?.(item2, index) ?? 1, maxDepth),
4294
4294
  [getDepth, maxDepth]
4295
4295
  );
4296
4296
  react.useEffect(() => {
@@ -4331,8 +4331,8 @@ function SDraggableListInner({
4331
4331
  nextDropTarget = ratio < 0.5 ? { index, intent: "before" } : { index, intent: "after" };
4332
4332
  break;
4333
4333
  }
4334
- const item = items[index];
4335
- const canHaveChildren = (getCanHaveChildren?.(item, index) ?? true) && readDepth(item, index) < maxDepth;
4334
+ const item2 = items[index];
4335
+ const canHaveChildren = (getCanHaveChildren?.(item2, index) ?? true) && readDepth(item2, index) < maxDepth;
4336
4336
  if (ratio < 0.25) {
4337
4337
  nextDropTarget = { index, intent: "before" };
4338
4338
  } else if (ratio > 0.75 || !canHaveChildren) {
@@ -4412,10 +4412,10 @@ function SDraggableListInner({
4412
4412
  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-border-accent) before:content-['']" : ""}`,
4413
4413
  "data-draggable-group": dragContext ? dragGroup : void 0,
4414
4414
  "data-draggable-list-id": dragContext ? listId : void 0,
4415
- children: items.map((item, index) => {
4416
- const itemKey = getKey(item, index);
4417
- const disabled = (getDisabled?.(item, index) ?? false) || isDescendant(items, index, draggedSubtreeStart, usesDepth ? readDepth : void 0);
4418
- const depth = readDepth(item, index);
4415
+ children: items.map((item2, index) => {
4416
+ const itemKey = getKey(item2, index);
4417
+ const disabled = (getDisabled?.(item2, index) ?? false) || isDescendant(items, index, draggedSubtreeStart, usesDepth ? readDepth : void 0);
4418
+ const depth = readDepth(item2, index);
4419
4419
  const showBefore = isDropTarget && currentDropIndex === index && (dragContext || currentDropIntent === "before");
4420
4420
  const showInside = isDropTarget && currentDropIndex === index && !dragContext && usesDepth && currentDropIntent === "inside";
4421
4421
  const showAfter = isDropTarget && (dragContext ? currentDropIndex === items.length && index === items.length - 1 : currentDropIndex === index && currentDropIntent === "after");
@@ -4439,7 +4439,7 @@ function SDraggableListInner({
4439
4439
  onClick: selectItem,
4440
4440
  onKeyDown: handleItemKeyDown,
4441
4441
  className: `relative ${showBefore ? `before:absolute before:left-0 before:right-0 ${beforeIndicatorPosition} before:z-10 before:h-[2px] before:bg-(--sys-color-border-accent) before:content-['']` : ""} ${showAfter ? `after:absolute after:left-0 after:right-0 ${afterIndicatorPosition} after:z-10 after:h-[2px] after:bg-(--sys-color-border-accent) after:content-['']` : ""} ${showInside ? "outline outline-2 outline-offset-[-2px] outline-(--sys-color-border-accent)" : ""}`,
4442
- children: renderItem(item, index, {
4442
+ children: renderItem(item2, index, {
4443
4443
  onDragHandleMouseDown: (event) => {
4444
4444
  if (disabled) return;
4445
4445
  if (dragContext && dragGroup && listId) {
@@ -5361,7 +5361,7 @@ var STreeImpl = /* @__PURE__ */ react.forwardRef(function STree({
5361
5361
  }, ref) {
5362
5362
  const [internalValue, setInternalValue] = react.useState(defaultValue ?? []);
5363
5363
  const [internalExpandedIds, setInternalExpandedIds] = react.useState(
5364
- defaultExpandedIds ?? items.filter((item) => item.children?.length).map((item) => item.id)
5364
+ defaultExpandedIds ?? items.filter((item2) => item2.children?.length).map((item2) => item2.id)
5365
5365
  );
5366
5366
  const currentValue = value ?? internalValue;
5367
5367
  const currentExpandedIds = expandedIds ?? internalExpandedIds;
@@ -6736,6 +6736,174 @@ function SSwitch({
6736
6736
  }
6737
6737
  );
6738
6738
  }
6739
+
6740
+ // src/components/SSystemActionButton/systemActionButton.config.ts
6741
+ var SYSTEM_ACTION_BUTTON_COLORS = ["light", "dark", "darker"];
6742
+ var SYSTEM_ACTION_BUTTON_TYPES = [
6743
+ "account",
6744
+ "switch",
6745
+ "select",
6746
+ "subSelect",
6747
+ "status"
6748
+ ];
6749
+ var item = (p) => `var(--cmp-gnb-system-item-${p})`;
6750
+ var action = (p) => `var(--cmp-gnb-system-actionButton-${p})`;
6751
+ var sys = (p) => `var(--sys-color-${p})`;
6752
+ var SYSTEM_ACTION_BUTTON_COLOR_CONFIG = {
6753
+ light: {
6754
+ bg: item("light-bg-default"),
6755
+ bgHover: item("light-bg-hover"),
6756
+ // light 의 아이콘 프레임 배경은 기본·hover 공통 한 값이다 (흰 면 위 흰 프레임)
6757
+ iconBg: item("light-icon-bg"),
6758
+ iconBgHover: item("light-icon-bg"),
6759
+ iconGlyph: item("light-icon-default"),
6760
+ iconGlyphHover: item("light-icon-default"),
6761
+ text: item("light-text"),
6762
+ actionText: {
6763
+ switch: action("switch-text-light"),
6764
+ selectData: action("selectData-text-light")
6765
+ },
6766
+ // 트레일링 아이콘 전용 색 토큰이 없다. light 는 item.icon.default 가
6767
+ // "actionButton/alertButton/setting 공통 글리프색"이라고 토큰에 명시돼 있다.
6768
+ actionIcon: item("light-icon-default")
6769
+ },
6770
+ dark: {
6771
+ bg: item("dark-bg-default"),
6772
+ bgHover: item("dark-bg-hover"),
6773
+ iconBg: item("dark-icon-bg-default"),
6774
+ iconBgHover: item("dark-icon-bg-hover"),
6775
+ // 어두운 면에는 글리프색 토큰이 없다. 기본은 프레임이 배경과 블렌딩되므로 라벨색(흰색),
6776
+ // hover 는 프레임이 흰색이 되므로 그 위에 표면색을 그대로 얹는다.
6777
+ iconGlyph: item("dark-text"),
6778
+ iconGlyphHover: item("dark-bg-hover"),
6779
+ text: item("dark-text"),
6780
+ actionText: {
6781
+ switch: action("switch-text-dark"),
6782
+ selectData: action("selectData-text-dark")
6783
+ },
6784
+ // TODO: 어두운 면의 트레일링 아이콘 색 토큰이 없다. 시안(#AAAAAA)에 맞는 시맨틱 토큰으로 둔다.
6785
+ actionIcon: sys("fg-quaternary")
6786
+ },
6787
+ darker: {
6788
+ bg: item("darker-bg-default"),
6789
+ bgHover: item("darker-bg-hover"),
6790
+ iconBg: item("darker-icon-bg-default"),
6791
+ iconBgHover: item("darker-icon-bg-hover"),
6792
+ iconGlyph: item("darker-text"),
6793
+ iconGlyphHover: item("darker-bg-hover"),
6794
+ text: item("darker-text"),
6795
+ actionText: {
6796
+ switch: action("switch-text-dark"),
6797
+ selectData: action("selectData-text-dark")
6798
+ },
6799
+ actionIcon: sys("fg-quaternary")
6800
+ }
6801
+ };
6802
+ var SYSTEM_ACTION_BUTTON_TYPE_CONFIG = {
6803
+ account: { fixedIcon: "user" },
6804
+ switch: {
6805
+ actionText: { token: "switch", typo: "typo-field-sm-default" },
6806
+ actionIcon: { name: "synchronize", size: action("switch-icon") }
6807
+ },
6808
+ select: {
6809
+ actionIcon: { name: "chevronRight", size: action("select-icon") }
6810
+ },
6811
+ subSelect: {
6812
+ actionText: { token: "selectData", typo: "typo-control-xs-medium" },
6813
+ actionIcon: { name: "chevronRight", size: action("selectData-icon") }
6814
+ },
6815
+ status: {
6816
+ // status 는 선행 아이콘 없이 태그가 라벨 자리를 차지한다
6817
+ actionIcon: { name: "chevronRight", size: action("select-icon") }
6818
+ }
6819
+ };
6820
+ var SYSTEM_ACTION_BUTTON_LAYOUT = {
6821
+ /** 행 높이 */
6822
+ height: item("height"),
6823
+ /** 행 라운드 */
6824
+ radius: item("radius"),
6825
+ /** 아이콘 프레임 한 변 */
6826
+ iconFrame: item("icon-frame"),
6827
+ /** 아이콘 글리프 크기 */
6828
+ iconGlyph: item("icon-glyph"),
6829
+ /** 아이콘 프레임 라운드 */
6830
+ iconRadius: item("icon-radius"),
6831
+ /** 아이콘 프레임 ↔ 라벨 간격 */
6832
+ iconLabelGap: item("iconLabelGap"),
6833
+ /** 좌측 여백 */
6834
+ paddingLeft: action("paddingLeft"),
6835
+ /** 우측 여백 */
6836
+ paddingRight: action("paddingRight"),
6837
+ /** 액션 텍스트 ↔ 액션 아이콘 간격 */
6838
+ actionGap: action("selectData-gap")
6839
+ };
6840
+ function TokenIcon({ name, size }) {
6841
+ return /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name, size: "100%", style: { width: size, height: size } });
6842
+ }
6843
+ var SSystemActionButton = /* @__PURE__ */ react.forwardRef(
6844
+ function SSystemActionButton2({ color = "light", type, label, option, disabled = false, className, style, ...rest }, ref) {
6845
+ const c = SYSTEM_ACTION_BUTTON_COLOR_CONFIG[color];
6846
+ const spec = SYSTEM_ACTION_BUTTON_TYPE_CONFIG[type];
6847
+ const hoverable = !disabled;
6848
+ const status = type === "status" ? option : void 0;
6849
+ const resolvedIcon = spec.fixedIcon ?? option?.icon;
6850
+ const actionText = spec.actionText ? option?.text : void 0;
6851
+ const cssVars = {
6852
+ "--sab-bg": c.bg,
6853
+ "--sab-bg-hover": hoverable ? c.bgHover : c.bg,
6854
+ "--sab-icon-bg": c.iconBg,
6855
+ "--sab-icon-bg-hover": hoverable ? c.iconBgHover : c.iconBg,
6856
+ "--sab-icon-glyph": c.iconGlyph,
6857
+ "--sab-icon-glyph-hover": hoverable ? c.iconGlyphHover : c.iconGlyph,
6858
+ "--sab-text": c.text,
6859
+ "--sab-action-text": spec.actionText ? c.actionText[spec.actionText.token] : void 0,
6860
+ "--sab-action-icon": c.actionIcon,
6861
+ "minHeight": SYSTEM_ACTION_BUTTON_LAYOUT.height,
6862
+ "borderRadius": SYSTEM_ACTION_BUTTON_LAYOUT.radius,
6863
+ "paddingLeft": SYSTEM_ACTION_BUTTON_LAYOUT.paddingLeft,
6864
+ "paddingRight": SYSTEM_ACTION_BUTTON_LAYOUT.paddingRight,
6865
+ "gap": SYSTEM_ACTION_BUTTON_LAYOUT.iconLabelGap,
6866
+ ...style
6867
+ };
6868
+ return /* @__PURE__ */ jsxRuntime.jsxs(
6869
+ "button",
6870
+ {
6871
+ ref,
6872
+ type: "button",
6873
+ disabled,
6874
+ className: cn(
6875
+ "group box-border flex w-full items-center border-none bg-(--sab-bg) text-left transition-colors",
6876
+ "hover:bg-(--sab-bg-hover)",
6877
+ disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer",
6878
+ className
6879
+ ),
6880
+ style: cssVars,
6881
+ ...rest,
6882
+ children: [
6883
+ resolvedIcon && /* @__PURE__ */ jsxRuntime.jsx(
6884
+ "span",
6885
+ {
6886
+ className: "inline-flex shrink-0 items-center justify-center bg-(--sab-icon-bg) text-(--sab-icon-glyph) transition-colors group-hover:bg-(--sab-icon-bg-hover) group-hover:text-(--sab-icon-glyph-hover)",
6887
+ style: { width: SYSTEM_ACTION_BUTTON_LAYOUT.iconFrame, height: SYSTEM_ACTION_BUTTON_LAYOUT.iconFrame, borderRadius: SYSTEM_ACTION_BUTTON_LAYOUT.iconRadius },
6888
+ children: /* @__PURE__ */ jsxRuntime.jsx(TokenIcon, { name: resolvedIcon, size: SYSTEM_ACTION_BUTTON_LAYOUT.iconGlyph })
6889
+ }
6890
+ ),
6891
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-body-sm-semibold flex min-w-0 flex-1 items-center text-(--sab-text)", children: status ? /* @__PURE__ */ jsxRuntime.jsx(STag, { color: status.color ?? "blue", icon: "dot", label: status.label }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: label }) }),
6892
+ (actionText != null || spec.actionIcon) && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex shrink-0 items-center", style: { gap: SYSTEM_ACTION_BUTTON_LAYOUT.actionGap }, children: [
6893
+ actionText != null && spec.actionText && /* @__PURE__ */ jsxRuntime.jsx(
6894
+ "span",
6895
+ {
6896
+ className: cn(spec.actionText.typo, "whitespace-nowrap text-(--sab-action-text)"),
6897
+ children: actionText
6898
+ }
6899
+ ),
6900
+ spec.actionIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex shrink-0 items-center text-(--sab-action-icon)", children: /* @__PURE__ */ jsxRuntime.jsx(TokenIcon, { name: spec.actionIcon.name, size: spec.actionIcon.size }) })
6901
+ ] })
6902
+ ]
6903
+ }
6904
+ );
6905
+ }
6906
+ );
6739
6907
  var SIZE_CLASSES = {
6740
6908
  xs: "h-[24px] px-[8px] text-[12px] font-normal leading-[20px]",
6741
6909
  sm: "h-[28px] px-[12px] text-[14px] font-medium leading-[24px]"
@@ -8522,17 +8690,17 @@ var GNB_TOP_ICON_GAP = 8;
8522
8690
  var GNB_TOP_ICON_SIZE = 24;
8523
8691
  var GNB_FULL_LOGO_WIDTH_NO_LAUNCHER = GNB_FULL_LOGO_WIDTH + GNB_TOP_ICON_SIZE + GNB_TOP_ICON_GAP;
8524
8692
  function findGnbRailValue(items, value) {
8525
- if (items.some((item) => item.value === value)) return value;
8693
+ if (items.some((item2) => item2.value === value)) return value;
8526
8694
  return findGnbAncestors(items, value)[0];
8527
8695
  }
8528
8696
  function findGnbSiblingValues(items, value) {
8529
8697
  const walk = (list) => {
8530
- if (list.some((item) => item.value === value)) {
8531
- return list.filter((item) => item.value !== value).map((item) => item.value);
8698
+ if (list.some((item2) => item2.value === value)) {
8699
+ return list.filter((item2) => item2.value !== value).map((item2) => item2.value);
8532
8700
  }
8533
- for (const item of list) {
8534
- if (item.children) {
8535
- const found = walk(item.children);
8701
+ for (const item2 of list) {
8702
+ if (item2.children) {
8703
+ const found = walk(item2.children);
8536
8704
  if (found) return found;
8537
8705
  }
8538
8706
  }
@@ -8542,10 +8710,10 @@ function findGnbSiblingValues(items, value) {
8542
8710
  }
8543
8711
  function findGnbAncestors(items, value) {
8544
8712
  const walk = (list, trail) => {
8545
- for (const item of list) {
8546
- if (item.value === value) return trail;
8547
- if (item.children) {
8548
- const found = walk(item.children, [...trail, item.value]);
8713
+ for (const item2 of list) {
8714
+ if (item2.value === value) return trail;
8715
+ if (item2.children) {
8716
+ const found = walk(item2.children, [...trail, item2.value]);
8549
8717
  if (found) return found;
8550
8718
  }
8551
8719
  }
@@ -8555,20 +8723,20 @@ function findGnbAncestors(items, value) {
8555
8723
  }
8556
8724
  function findGnbDescendantBranchValues(items, value) {
8557
8725
  const find = (list) => {
8558
- for (const item of list) {
8559
- if (item.value === value) return item;
8560
- if (item.children) {
8561
- const found = find(item.children);
8726
+ for (const item2 of list) {
8727
+ if (item2.value === value) return item2;
8728
+ if (item2.children) {
8729
+ const found = find(item2.children);
8562
8730
  if (found) return found;
8563
8731
  }
8564
8732
  }
8565
8733
  return void 0;
8566
8734
  };
8567
8735
  const collect = (list, acc) => {
8568
- for (const item of list) {
8569
- if (item.children && item.children.length > 0) {
8570
- acc.push(item.value);
8571
- collect(item.children, acc);
8736
+ for (const item2 of list) {
8737
+ if (item2.children && item2.children.length > 0) {
8738
+ acc.push(item2.value);
8739
+ collect(item2.children, acc);
8572
8740
  }
8573
8741
  }
8574
8742
  return acc;
@@ -8611,7 +8779,7 @@ var SGnb = /* @__PURE__ */ react.forwardRef(function SGnb2({
8611
8779
  const type = typeProp ?? layout?.type ?? "box";
8612
8780
  const folded = foldedProp ?? layout?.folded ?? false;
8613
8781
  const useRail = useRailProp ?? layout?.useRail ?? false;
8614
- const railHasLeaf = useRail && items.some((item) => !item.children || item.children.length === 0);
8782
+ const railHasLeaf = useRail && items.some((item2) => !item2.children || item2.children.length === 0);
8615
8783
  const header = railHasLeaf ? "full" : headerProp ?? layout?.header ?? "fix";
8616
8784
  const H = GNB_HEADER[header];
8617
8785
  const M = GNB_MENU[type];
@@ -8654,13 +8822,13 @@ var SGnb = /* @__PURE__ */ react.forwardRef(function SGnb2({
8654
8822
  labelTipHideRef.current = setTimeout(() => setLabelTip(null), LABEL_TIP_HIDE_DELAY_MS);
8655
8823
  };
8656
8824
  react.useEffect(() => cancelLabelTipHide, []);
8657
- const rowHoverProps = (item) => ({
8825
+ const rowHoverProps = (item2) => ({
8658
8826
  onMouseEnter: (event) => {
8659
- setHoveredKey(item.value);
8660
- showLabelTipIfTruncated(event.currentTarget, item.label);
8827
+ setHoveredKey(item2.value);
8828
+ showLabelTipIfTruncated(event.currentTarget, item2.label);
8661
8829
  },
8662
8830
  onMouseLeave: () => {
8663
- setHoveredKey((prev) => prev === item.value ? null : prev);
8831
+ setHoveredKey((prev) => prev === item2.value ? null : prev);
8664
8832
  startLabelTipHide();
8665
8833
  }
8666
8834
  });
@@ -8686,7 +8854,7 @@ var SGnb = /* @__PURE__ */ react.forwardRef(function SGnb2({
8686
8854
  }, [items, value]);
8687
8855
  react.useEffect(() => {
8688
8856
  setActiveRail(
8689
- (prev) => prev !== void 0 && items.some((item) => item.value === prev) ? prev : items[0]?.value
8857
+ (prev) => prev !== void 0 && items.some((item2) => item2.value === prev) ? prev : items[0]?.value
8690
8858
  );
8691
8859
  }, [items]);
8692
8860
  const toggleExpand = (key) => {
@@ -8703,33 +8871,33 @@ var SGnb = /* @__PURE__ */ react.forwardRef(function SGnb2({
8703
8871
  return next;
8704
8872
  });
8705
8873
  };
8706
- const handleItemClick = (item) => {
8707
- if (item.disabled) return;
8708
- if (item.children && item.children.length > 0) {
8709
- toggleExpand(item.value);
8874
+ const handleItemClick = (item2) => {
8875
+ if (item2.disabled) return;
8876
+ if (item2.children && item2.children.length > 0) {
8877
+ toggleExpand(item2.value);
8710
8878
  return;
8711
8879
  }
8712
- onValueChange?.(item.value);
8880
+ onValueChange?.(item2.value);
8713
8881
  };
8714
- const handleRailClick = (item) => {
8715
- if (item.disabled) return;
8716
- setActiveRail(item.value);
8717
- onRailChange?.(item.value);
8718
- if (!item.children || item.children.length === 0) onValueChange?.(item.value);
8882
+ const handleRailClick = (item2) => {
8883
+ if (item2.disabled) return;
8884
+ setActiveRail(item2.value);
8885
+ onRailChange?.(item2.value);
8886
+ if (!item2.children || item2.children.length === 0) onValueChange?.(item2.value);
8719
8887
  };
8720
8888
  const handleFoldToggle = () => {
8721
8889
  const next = !folded;
8722
8890
  onFoldChange?.(next);
8723
8891
  if (foldedProp === void 0) layout?.setFolded(next);
8724
8892
  };
8725
- const renderRailItem = (item) => {
8726
- const isActive = item.value === activeRail;
8727
- const isHovered = hoveredKey === item.value && !item.disabled;
8893
+ const renderRailItem = (item2) => {
8894
+ const isActive = item2.value === activeRail;
8895
+ const isHovered = hoveredKey === item2.value && !item2.disabled;
8728
8896
  return /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
8729
8897
  "button",
8730
8898
  {
8731
8899
  type: "button",
8732
- disabled: item.disabled,
8900
+ disabled: item2.disabled,
8733
8901
  "aria-current": isActive ? "true" : void 0,
8734
8902
  className: "box-border flex select-none flex-col items-center border-none bg-transparent transition-colors duration-150",
8735
8903
  style: {
@@ -8744,31 +8912,31 @@ var SGnb = /* @__PURE__ */ react.forwardRef(function SGnb2({
8744
8912
  fontSize: GNB_RAIL.itemFontSize,
8745
8913
  lineHeight: `${GNB_RAIL.itemLineHeight}px`,
8746
8914
  fontWeight: isActive ? GNB_RAIL.itemFontWeightSelected : GNB_RAIL.itemFontWeight,
8747
- opacity: item.disabled ? 0.4 : 1,
8748
- cursor: item.disabled ? "not-allowed" : "pointer"
8915
+ opacity: item2.disabled ? 0.4 : 1,
8916
+ cursor: item2.disabled ? "not-allowed" : "pointer"
8749
8917
  },
8750
- onClick: () => handleRailClick(item),
8751
- ...rowHoverProps(item),
8918
+ onClick: () => handleRailClick(item2),
8919
+ ...rowHoverProps(item2),
8752
8920
  children: [
8753
- item.icon && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: item.icon, size: GNB_RAIL.itemIcon, className: "shrink-0" }),
8921
+ item2.icon && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: item2.icon, size: GNB_RAIL.itemIcon, className: "shrink-0" }),
8754
8922
  /* @__PURE__ */ jsxRuntime.jsx(
8755
8923
  "span",
8756
8924
  {
8757
8925
  "data-gnb-label": true,
8758
8926
  className: "w-full overflow-hidden text-ellipsis whitespace-nowrap text-center",
8759
- children: item.label
8927
+ children: item2.label
8760
8928
  }
8761
8929
  )
8762
8930
  ]
8763
8931
  }
8764
- ) }, item.value);
8932
+ ) }, item2.value);
8765
8933
  };
8766
- const renderItem = (item, depth, branchHasIcon = false) => {
8767
- const hasChildren = !!(item.children && item.children.length > 0);
8768
- const isSelected = !hasChildren && item.value === value;
8769
- const isExpanded = expandedKeys.has(item.value);
8770
- const isHovered = hoveredKey === item.value && !item.disabled;
8771
- const iconBranch = depth === 1 ? !!item.icon : branchHasIcon;
8934
+ const renderItem = (item2, depth, branchHasIcon = false) => {
8935
+ const hasChildren = !!(item2.children && item2.children.length > 0);
8936
+ const isSelected = !hasChildren && item2.value === value;
8937
+ const isExpanded = expandedKeys.has(item2.value);
8938
+ const isHovered = hoveredKey === item2.value && !item2.disabled;
8939
+ const iconBranch = depth === 1 ? !!item2.icon : branchHasIcon;
8772
8940
  const itemStyle = {
8773
8941
  gap: M.itemGap,
8774
8942
  paddingTop: M.itemPaddingY,
@@ -8785,8 +8953,8 @@ var SGnb = /* @__PURE__ */ react.forwardRef(function SGnb2({
8785
8953
  fontSize: depth === 1 ? M.depth1FontSize : M.itemFontSize,
8786
8954
  lineHeight: `${depth === 1 ? M.depth1LineHeight : M.itemLineHeight}px`,
8787
8955
  fontWeight: depth === 1 ? M.depth1FontWeight : isSelected ? M.itemFontWeightSelected : M.itemFontWeight,
8788
- opacity: item.disabled ? 0.4 : 1,
8789
- cursor: item.disabled ? "not-allowed" : "pointer"
8956
+ opacity: item2.disabled ? 0.4 : 1,
8957
+ cursor: item2.disabled ? "not-allowed" : "pointer"
8790
8958
  };
8791
8959
  return (
8792
8960
  // li 를 flex-col 로 둬야 버튼이 좌우 마진만큼 안쪽으로 들어가고,
@@ -8796,18 +8964,18 @@ var SGnb = /* @__PURE__ */ react.forwardRef(function SGnb2({
8796
8964
  "button",
8797
8965
  {
8798
8966
  type: "button",
8799
- disabled: item.disabled,
8967
+ disabled: item2.disabled,
8800
8968
  "aria-expanded": hasChildren ? isExpanded : void 0,
8801
8969
  "aria-current": isSelected ? "page" : void 0,
8802
8970
  className: "box-border flex select-none items-center border-none bg-transparent text-left transition-colors duration-150",
8803
8971
  style: itemStyle,
8804
- onClick: () => handleItemClick(item),
8805
- ...rowHoverProps(item),
8972
+ onClick: () => handleItemClick(item2),
8973
+ ...rowHoverProps(item2),
8806
8974
  children: [
8807
- depth === 1 && item.icon && /* @__PURE__ */ jsxRuntime.jsx(
8975
+ depth === 1 && item2.icon && /* @__PURE__ */ jsxRuntime.jsx(
8808
8976
  SIcon,
8809
8977
  {
8810
- name: item.icon,
8978
+ name: item2.icon,
8811
8979
  size: M.depth1Icon,
8812
8980
  color: isSelected ? C.itemColorActive : C.itemIcon,
8813
8981
  className: "shrink-0"
@@ -8827,17 +8995,17 @@ var SGnb = /* @__PURE__ */ react.forwardRef(function SGnb2({
8827
8995
  {
8828
8996
  "data-gnb-label": true,
8829
8997
  className: "min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap",
8830
- children: item.label
8998
+ children: item2.label
8831
8999
  }
8832
9000
  )
8833
9001
  ] }),
8834
- item.tag !== void 0 && item.tag !== "" && /* @__PURE__ */ jsxRuntime.jsx(
9002
+ item2.tag !== void 0 && item2.tag !== "" && /* @__PURE__ */ jsxRuntime.jsx(
8835
9003
  STag,
8836
9004
  {
8837
9005
  shape: "square",
8838
9006
  size: "xs",
8839
- color: item.tagColor ?? "blue",
8840
- label: item.tag,
9007
+ color: item2.tagColor ?? "blue",
9008
+ label: item2.tag,
8841
9009
  className: "shrink-0"
8842
9010
  }
8843
9011
  ),
@@ -8870,16 +9038,16 @@ var SGnb = /* @__PURE__ */ react.forwardRef(function SGnb2({
8870
9038
  visibility: isExpanded ? "visible" : "hidden",
8871
9039
  transition: `visibility 0s linear ${isExpanded ? "0s" : `${GNB_EXPAND_MS}ms`}`
8872
9040
  },
8873
- children: item.children.map((child) => renderItem(child, depth + 1, iconBranch))
9041
+ children: item2.children.map((child) => renderItem(child, depth + 1, iconBranch))
8874
9042
  }
8875
9043
  )
8876
9044
  }
8877
9045
  )
8878
- ] }, item.value)
9046
+ ] }, item2.value)
8879
9047
  );
8880
9048
  };
8881
9049
  const railItems = useRail ? items : [];
8882
- const menuItems = useRail ? items.find((item) => item.value === activeRail)?.children ?? [] : items;
9050
+ const menuItems = useRail ? items.find((item2) => item2.value === activeRail)?.children ?? [] : items;
8883
9051
  const showMenu = !useRail || menuItems.length > 0;
8884
9052
  const [uncontrolledMenuWidth, setUncontrolledMenuWidth] = react.useState(
8885
9053
  () => defaultMenuWidth ?? GNB_MENU_WIDTH
@@ -9186,7 +9354,7 @@ var SGnb = /* @__PURE__ */ react.forwardRef(function SGnb2({
9186
9354
  paddingTop: M.bodyPaddingY,
9187
9355
  paddingBottom: M.bodyPaddingY
9188
9356
  },
9189
- children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "m-0 flex list-none flex-col p-0", children: menuItems.map((item) => renderItem(item, 1)) })
9357
+ children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "m-0 flex list-none flex-col p-0", children: menuItems.map((item2) => renderItem(item2, 1)) })
9190
9358
  }
9191
9359
  ),
9192
9360
  menuFooter && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: menuFooter })
@@ -9837,19 +10005,19 @@ var STEPPER_VERTICAL_COLORS = {
9837
10005
  errorBadge: "#FB4444"
9838
10006
  };
9839
10007
  var ERROR_TOOLTIP_MESSAGE = "\uD655\uC778\uC774 \uD544\uC694\uD55C \uD56D\uBAA9\uC774 \uC788\uC2B5\uB2C8\uB2E4.";
9840
- function getItemValue(item, index) {
9841
- return item.value ?? String(index + 1);
10008
+ function getItemValue(item2, index) {
10009
+ return item2.value ?? String(index + 1);
9842
10010
  }
9843
10011
  function groupAdjacentItems(items) {
9844
10012
  return items.reduce(
9845
- (groups, item, index) => {
9846
- const currentGroup = item.group;
10013
+ (groups, item2, index) => {
10014
+ const currentGroup = item2.group;
9847
10015
  const previous = groups[groups.length - 1];
9848
10016
  if (currentGroup && previous?.group === currentGroup) {
9849
- previous.items.push(item);
10017
+ previous.items.push(item2);
9850
10018
  return groups;
9851
10019
  }
9852
- groups.push({ group: currentGroup, startIndex: index, items: [item] });
10020
+ groups.push({ group: currentGroup, startIndex: index, items: [item2] });
9853
10021
  return groups;
9854
10022
  },
9855
10023
  []
@@ -9879,15 +10047,15 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
9879
10047
  const verticalItemRefs = react.useRef([]);
9880
10048
  const activeIndex = Math.max(
9881
10049
  0,
9882
- items.findIndex((item, index) => getItemValue(item, index) === value)
10050
+ items.findIndex((item2, index) => getItemValue(item2, index) === value)
9883
10051
  );
9884
10052
  const lastCompletedIndex = items.reduce(
9885
- (lastIndex, item, index) => item.completed === true ? index : lastIndex,
10053
+ (lastIndex, item2, index) => item2.completed === true ? index : lastIndex,
9886
10054
  -1
9887
10055
  );
9888
10056
  const resolvedClickableIndex = lastCompletedIndex + 1;
9889
10057
  const [visitedMaxIndex, setVisitedMaxIndex] = react.useState(activeIndex);
9890
- const firstErrorIndex = items.findIndex((item) => item.error === true);
10058
+ const firstErrorIndex = items.findIndex((item2) => item2.error === true);
9891
10059
  react.useImperativeHandle(
9892
10060
  ref,
9893
10061
  () => ({
@@ -9915,18 +10083,18 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
9915
10083
  transform: `translateY(${activeItem.offsetTop}px)`
9916
10084
  });
9917
10085
  }, [activeIndex, vertical, items]);
9918
- const getState = (item, index) => {
10086
+ const getState = (item2, index) => {
9919
10087
  if (index === activeIndex) return "active";
9920
- if (item.completed != null) return item.completed ? "completed" : "default";
10088
+ if (item2.completed != null) return item2.completed ? "completed" : "default";
9921
10089
  return "default";
9922
10090
  };
9923
- const emitValueChange = (item, index) => {
9924
- onValueChange?.(getItemValue(item, index), item, index);
10091
+ const emitValueChange = (item2, index) => {
10092
+ onValueChange?.(getItemValue(item2, index), item2, index);
9925
10093
  };
9926
10094
  const isWithinClickableIndex = (index) => index <= resolvedClickableIndex;
9927
- const renderStepContent = (item, index, options = {}) => {
10095
+ const renderStepContent = (item2, index, options = {}) => {
9928
10096
  const { isVertical = false, roleListItem = true, hovered = false } = options;
9929
- const state2 = getState(item, index);
10097
+ const state2 = getState(item2, index);
9930
10098
  const isHorizontalCompleted = !isVertical && state2 === "completed";
9931
10099
  const isVerticalCompleted = isVertical && state2 === "completed";
9932
10100
  const isVerticalLastActive = isVertical && state2 === "default" && index === visitedMaxIndex;
@@ -10001,12 +10169,12 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
10001
10169
  children: showsCheckIcon ? /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "check", size: STEPPER_LAYOUT.sequenceIcon, color: "currentColor" }) : index + 1
10002
10170
  }
10003
10171
  ),
10004
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: item.label })
10172
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: item2.label })
10005
10173
  ]
10006
10174
  }
10007
10175
  );
10008
10176
  };
10009
- const renderClickableStepContent = (item, index, isVertical = false) => {
10177
+ const renderClickableStepContent = (item2, index, isVertical = false) => {
10010
10178
  const isDisabled = !isWithinClickableIndex(index);
10011
10179
  return /* @__PURE__ */ jsxRuntime.jsx(
10012
10180
  "button",
@@ -10019,9 +10187,9 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
10019
10187
  ),
10020
10188
  style: { font: "inherit", color: "inherit" },
10021
10189
  onClick: () => {
10022
- if (!isDisabled) emitValueChange(item, index);
10190
+ if (!isDisabled) emitValueChange(item2, index);
10023
10191
  },
10024
- children: renderStepContent(item, index, { isVertical, roleListItem: false })
10192
+ children: renderStepContent(item2, index, { isVertical, roleListItem: false })
10025
10193
  }
10026
10194
  );
10027
10195
  };
@@ -10080,10 +10248,10 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
10080
10248
  children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "whitespace-nowrap", children: group.group })
10081
10249
  }
10082
10250
  ),
10083
- group.items.map((item, itemIndex) => {
10251
+ group.items.map((item2, itemIndex) => {
10084
10252
  const index = group.startIndex + itemIndex;
10085
- const state2 = getState(item, index);
10086
- const itemValue = getItemValue(item, index);
10253
+ const state2 = getState(item2, index);
10254
+ const itemValue = getItemValue(item2, index);
10087
10255
  const canClickItem = isClickable && isWithinClickableIndex(index);
10088
10256
  const isDisabled = !canClickItem;
10089
10257
  const isHovered = hoveredIndex === index && canClickItem && state2 !== "active";
@@ -10101,12 +10269,12 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
10101
10269
  const handleMouseLeave = () => {
10102
10270
  setHoveredIndex((current) => current === index ? null : current);
10103
10271
  };
10104
- const stepContent = renderStepContent(item, index, {
10272
+ const stepContent = renderStepContent(item2, index, {
10105
10273
  isVertical: true,
10106
10274
  roleListItem: false,
10107
10275
  hovered: isHovered
10108
10276
  });
10109
- const errorBadge = item.error ? /* @__PURE__ */ jsxRuntime.jsx(
10277
+ const errorBadge = item2.error ? /* @__PURE__ */ jsxRuntime.jsx(
10110
10278
  "span",
10111
10279
  {
10112
10280
  "aria-hidden": "true",
@@ -10121,7 +10289,7 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
10121
10289
  ) : null;
10122
10290
  const isTooltipHovered = tooltipHoverValue === itemValue;
10123
10291
  const isCustomTooltipOpen = customTooltipOpen && index === firstErrorIndex;
10124
- const showTooltip = item.error === true && (isTooltipHovered || isCustomTooltipOpen);
10292
+ const showTooltip = item2.error === true && (isTooltipHovered || isCustomTooltipOpen);
10125
10293
  const handleTooltipMouseEnter = () => setTooltipHoverValue(itemValue);
10126
10294
  const handleTooltipMouseLeave = () => {
10127
10295
  setTooltipHoverValue((current) => current === itemValue ? null : current);
@@ -10145,7 +10313,7 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
10145
10313
  onMouseEnter: handleTooltipMouseEnter,
10146
10314
  onMouseLeave: handleTooltipMouseLeave,
10147
10315
  onClick: isClickable ? () => {
10148
- if (!isDisabled) emitValueChange(item, index);
10316
+ if (!isDisabled) emitValueChange(item2, index);
10149
10317
  } : void 0,
10150
10318
  children: [
10151
10319
  stepContent,
@@ -10177,13 +10345,13 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
10177
10345
  {
10178
10346
  type: "button",
10179
10347
  disabled: isDisabled,
10180
- "aria-label": item.label,
10348
+ "aria-label": item2.label,
10181
10349
  className: cn(
10182
10350
  "absolute inset-0 z-[2] m-0 border-0 bg-transparent p-0 text-left outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-(--sys-color-border-accent)",
10183
10351
  isDisabled ? "cursor-default" : "cursor-pointer"
10184
10352
  ),
10185
10353
  onClick: () => {
10186
- if (!isDisabled) emitValueChange(item, index);
10354
+ if (!isDisabled) emitValueChange(item2, index);
10187
10355
  }
10188
10356
  }
10189
10357
  ),
@@ -10234,9 +10402,9 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
10234
10402
  lineHeight: config.lineHeight,
10235
10403
  ...style
10236
10404
  },
10237
- children: items.map((item, index) => {
10238
- const state2 = getState(item, index);
10239
- const content = isClickable ? /* @__PURE__ */ jsxRuntime.jsx("span", { role: "listitem", "aria-current": state2 === "active" ? "step" : void 0, children: renderClickableStepContent(item, index) }) : renderStepContent(item, index);
10405
+ children: items.map((item2, index) => {
10406
+ const state2 = getState(item2, index);
10407
+ const content = isClickable ? /* @__PURE__ */ jsxRuntime.jsx("span", { role: "listitem", "aria-current": state2 === "active" ? "step" : void 0, children: renderClickableStepContent(item2, index) }) : renderStepContent(item2, index);
10240
10408
  return /* @__PURE__ */ jsxRuntime.jsxs(
10241
10409
  "span",
10242
10410
  {
@@ -10270,7 +10438,7 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
10270
10438
  )
10271
10439
  ]
10272
10440
  },
10273
- getItemValue(item, index)
10441
+ getItemValue(item2, index)
10274
10442
  );
10275
10443
  })
10276
10444
  }
@@ -10813,7 +10981,7 @@ var SSelectImpl = /* @__PURE__ */ react.forwardRef(function SSelect({
10813
10981
  const selectedAnchorIndex = react.useMemo(() => {
10814
10982
  if (selected.length === 0) return -1;
10815
10983
  const selectedSet = new Set(selected);
10816
- return navigableItems.findIndex((item) => item.value != null && selectedSet.has(item.value));
10984
+ return navigableItems.findIndex((item2) => item2.value != null && selectedSet.has(item2.value));
10817
10985
  }, [navigableItems, selected]);
10818
10986
  selectedAnchorRef.current = selectedAnchorIndex;
10819
10987
  const triggerText = (() => {
@@ -11106,7 +11274,7 @@ var SSelectImpl = /* @__PURE__ */ react.forwardRef(function SSelect({
11106
11274
  setFocusedIndex(-1);
11107
11275
  return;
11108
11276
  }
11109
- const index = navigableItems.findIndex((item) => item.key === key);
11277
+ const index = navigableItems.findIndex((item2) => item2.key === key);
11110
11278
  if (index >= 0) setFocusedIndex(index);
11111
11279
  }
11112
11280
  }
@@ -11971,11 +12139,12 @@ var STable = /* @__PURE__ */ react.forwardRef(function STable2({
11971
12139
  ]
11972
12140
  }
11973
12141
  ),
11974
- (showPagination || dense) && // 원본 sd-table__pagination: 테이블 하단에 이어붙는 회색 바(높이 48px, margin-top:-1px로 테두리 겹침).
12142
+ (showPagination || useRowsPerPageSelect) && // 원본 sd-table__pagination: 테이블 하단에 이어붙는 회색 바(높이 48px, margin-top:-1px로 테두리 겹침).
11975
12143
  // SPagination은 전체 폭 기준 중앙, rows-per-page SSelect는 우측에 absolute 배치해 중앙 정렬을 유지한다.
11976
12144
  // 루트 높이가 확정된 경우(테이블이 남은 영역을 채우는 배치) 페이지네이션 바가
11977
12145
  // 눌리지 않도록 shrink-0으로 48px를 보장한다.
11978
- // 페이지네이션이 없어도 dense 면 이 바를 그린다 — 밀도 토글이 사는 곳이 여기다.
12146
+ // 페이지네이션이 없어도 rows-per-page 셀렉트가 있으면 이 바를 그린다 — 셀렉트와
12147
+ // 밀도 토글이 사는 곳이 여기다. dense 만으로는 그리지 않는다(빈 바가 남는다).
11979
12148
  /* @__PURE__ */ jsxRuntime.jsxs(
11980
12149
  "div",
11981
12150
  {
@@ -11986,7 +12155,7 @@ var STable = /* @__PURE__ */ react.forwardRef(function STable2({
11986
12155
  ),
11987
12156
  children: [
11988
12157
  showPagination && /* @__PURE__ */ jsxRuntime.jsx(SPagination, { currentPage: displayPage, lastPage, onPageChange: changePage }),
11989
- (dense || useRowsPerPageSelect) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute right-[10px] top-1/2 flex -translate-y-1/2 items-center gap-[12px]", children: [
12158
+ useRowsPerPageSelect && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute right-[10px] top-1/2 flex -translate-y-1/2 items-center gap-[12px]", children: [
11990
12159
  dense && /* @__PURE__ */ jsxRuntime.jsx(
11991
12160
  STextLink,
11992
12161
  {
@@ -11998,8 +12167,8 @@ var STable = /* @__PURE__ */ react.forwardRef(function STable2({
11998
12167
  onClick: () => changeDense(!innerDense)
11999
12168
  }
12000
12169
  ),
12001
- dense && useRowsPerPageSelect && /* @__PURE__ */ jsxRuntime.jsx(SDivider, { vertical: true, className: "my-[6px]" }),
12002
- useRowsPerPageSelect && /* @__PURE__ */ jsxRuntime.jsx(
12170
+ dense && /* @__PURE__ */ jsxRuntime.jsx(SDivider, { vertical: true, className: "my-[6px]" }),
12171
+ /* @__PURE__ */ jsxRuntime.jsx(
12003
12172
  SSelect2,
12004
12173
  {
12005
12174
  options: rowsPerPageOption,
@@ -13076,7 +13245,7 @@ function SCalendar({
13076
13245
  }) }),
13077
13246
  legend.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13078
13247
  /* @__PURE__ */ jsxRuntime.jsx(SDivider, {}),
13079
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center justify-center gap-x-[var(--cmp-datepicker-calendar-legend-group-gap)] gap-y-[4px] text-[11px] leading-[18px]", children: legend.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(
13248
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center justify-center gap-x-[var(--cmp-datepicker-calendar-legend-group-gap)] gap-y-[4px] text-[11px] leading-[18px]", children: legend.map((item2) => /* @__PURE__ */ jsxRuntime.jsxs(
13080
13249
  "span",
13081
13250
  {
13082
13251
  className: "inline-flex items-center gap-[var(--cmp-datepicker-calendar-legend-gap)]",
@@ -13085,14 +13254,14 @@ function SCalendar({
13085
13254
  "span",
13086
13255
  {
13087
13256
  className: "h-[var(--cmp-datepicker-calendar-day-dot-size)] w-[var(--cmp-datepicker-calendar-day-dot-size)] rounded-full",
13088
- style: { backgroundColor: resolveColor(item.color) },
13257
+ style: { backgroundColor: resolveColor(item2.color) },
13089
13258
  "aria-hidden": true
13090
13259
  }
13091
13260
  ),
13092
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: item.label })
13261
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: item2.label })
13093
13262
  ]
13094
13263
  },
13095
- `${item.color}|${item.label}`
13264
+ `${item2.color}|${item2.label}`
13096
13265
  )) })
13097
13266
  ] })
13098
13267
  ]
@@ -16059,19 +16228,19 @@ function EditorToolbarBar({
16059
16228
  closeLinkEditor();
16060
16229
  };
16061
16230
  const visible = [];
16062
- for (const item of items) {
16063
- if (item === "image" && !onImageUpload) continue;
16064
- if (item === "|" && (visible.length === 0 || visible[visible.length - 1] === "|")) continue;
16065
- visible.push(item);
16231
+ for (const item2 of items) {
16232
+ if (item2 === "image" && !onImageUpload) continue;
16233
+ if (item2 === "|" && (visible.length === 0 || visible[visible.length - 1] === "|")) continue;
16234
+ visible.push(item2);
16066
16235
  }
16067
16236
  while (visible.length > 0 && visible[visible.length - 1] === "|") visible.pop();
16068
16237
  const groups = [[]];
16069
- for (const item of visible) {
16070
- if (item === "|") groups.push([]);
16071
- else groups[groups.length - 1].push(item);
16238
+ for (const item2 of visible) {
16239
+ if (item2 === "|") groups.push([]);
16240
+ else groups[groups.length - 1].push(item2);
16072
16241
  }
16073
- const node = (item) => {
16074
- switch (item) {
16242
+ const node = (item2) => {
16243
+ switch (item2) {
16075
16244
  case "heading":
16076
16245
  return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown2__namespace.Root, { modal: !insideModal, children: [
16077
16246
  /* @__PURE__ */ jsxRuntime.jsx(RDropdown2__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(
@@ -16106,7 +16275,7 @@ function EditorToolbarBar({
16106
16275
  level
16107
16276
  ))
16108
16277
  ] }) })
16109
- ] }, item);
16278
+ ] }, item2);
16110
16279
  case "fontSize":
16111
16280
  return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown2__namespace.Root, { modal: !insideModal, children: [
16112
16281
  /* @__PURE__ */ jsxRuntime.jsx(RDropdown2__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarButton, { label: "\uAE00\uC790 \uD06C\uAE30", disabled: off, className: "px-[6px]", children: [
@@ -16145,7 +16314,7 @@ function EditorToolbarBar({
16145
16314
  ]
16146
16315
  }
16147
16316
  ) })
16148
- ] }, item);
16317
+ ] }, item2);
16149
16318
  case "bold":
16150
16319
  return /* @__PURE__ */ jsxRuntime.jsx(
16151
16320
  ToolbarButton,
@@ -16157,7 +16326,7 @@ function EditorToolbarBar({
16157
16326
  onClick: () => chain()?.toggleBold().run(),
16158
16327
  children: /* @__PURE__ */ jsxRuntime.jsx(IconBold, { size: ICON_SIZE })
16159
16328
  },
16160
- item
16329
+ item2
16161
16330
  );
16162
16331
  case "italic":
16163
16332
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16170,7 +16339,7 @@ function EditorToolbarBar({
16170
16339
  onClick: () => chain()?.toggleItalic().run(),
16171
16340
  children: /* @__PURE__ */ jsxRuntime.jsx(IconItalic, { size: ICON_SIZE })
16172
16341
  },
16173
- item
16342
+ item2
16174
16343
  );
16175
16344
  case "underline":
16176
16345
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16183,7 +16352,7 @@ function EditorToolbarBar({
16183
16352
  onClick: () => chain()?.toggleUnderline().run(),
16184
16353
  children: /* @__PURE__ */ jsxRuntime.jsx(IconUnderline, { size: ICON_SIZE })
16185
16354
  },
16186
- item
16355
+ item2
16187
16356
  );
16188
16357
  case "strike":
16189
16358
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16196,7 +16365,7 @@ function EditorToolbarBar({
16196
16365
  onClick: () => chain()?.toggleStrike().run(),
16197
16366
  children: /* @__PURE__ */ jsxRuntime.jsx(IconStrike, { size: ICON_SIZE })
16198
16367
  },
16199
- item
16368
+ item2
16200
16369
  );
16201
16370
  case "code":
16202
16371
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16209,7 +16378,7 @@ function EditorToolbarBar({
16209
16378
  onClick: () => chain()?.toggleCode().run(),
16210
16379
  children: /* @__PURE__ */ jsxRuntime.jsx(IconCode, { size: ICON_SIZE })
16211
16380
  },
16212
- item
16381
+ item2
16213
16382
  );
16214
16383
  case "color":
16215
16384
  if (mobile)
@@ -16221,7 +16390,7 @@ function EditorToolbarBar({
16221
16390
  onClick: () => setMobileView("color"),
16222
16391
  children: /* @__PURE__ */ jsxRuntime.jsx(ColorIndicator, { color: off ? "currentColor" : activeColor, children: /* @__PURE__ */ jsxRuntime.jsx(IconTextColor, { size: ICON_SIZE }) })
16223
16392
  },
16224
- item
16393
+ item2
16225
16394
  );
16226
16395
  return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown2__namespace.Root, { modal: !insideModal, children: [
16227
16396
  /* @__PURE__ */ jsxRuntime.jsx(RDropdown2__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "\uAE00\uC790\uC0C9", disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ColorIndicator, { color: off ? "currentColor" : activeColor, children: /* @__PURE__ */ jsxRuntime.jsx(IconTextColor, { size: ICON_SIZE }) }) }) }),
@@ -16236,7 +16405,7 @@ function EditorToolbarBar({
16236
16405
  onClear: clearColor
16237
16406
  }
16238
16407
  ) }) })
16239
- ] }, item);
16408
+ ] }, item2);
16240
16409
  case "alignLeft":
16241
16410
  return /* @__PURE__ */ jsxRuntime.jsx(
16242
16411
  ToolbarButton,
@@ -16248,7 +16417,7 @@ function EditorToolbarBar({
16248
16417
  onClick: () => chain()?.setTextAlign("left").run(),
16249
16418
  children: /* @__PURE__ */ jsxRuntime.jsx(IconAlignLeft, { size: ICON_SIZE })
16250
16419
  },
16251
- item
16420
+ item2
16252
16421
  );
16253
16422
  case "alignCenter":
16254
16423
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16261,7 +16430,7 @@ function EditorToolbarBar({
16261
16430
  onClick: () => chain()?.setTextAlign("center").run(),
16262
16431
  children: /* @__PURE__ */ jsxRuntime.jsx(IconAlignCenter, { size: ICON_SIZE })
16263
16432
  },
16264
- item
16433
+ item2
16265
16434
  );
16266
16435
  case "alignRight":
16267
16436
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16274,7 +16443,7 @@ function EditorToolbarBar({
16274
16443
  onClick: () => chain()?.setTextAlign("right").run(),
16275
16444
  children: /* @__PURE__ */ jsxRuntime.jsx(IconAlignRight, { size: ICON_SIZE })
16276
16445
  },
16277
- item
16446
+ item2
16278
16447
  );
16279
16448
  case "alignJustify":
16280
16449
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16287,7 +16456,7 @@ function EditorToolbarBar({
16287
16456
  onClick: () => chain()?.setTextAlign("justify").run(),
16288
16457
  children: /* @__PURE__ */ jsxRuntime.jsx(IconAlignJustify, { size: ICON_SIZE })
16289
16458
  },
16290
- item
16459
+ item2
16291
16460
  );
16292
16461
  case "bulletList":
16293
16462
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16300,7 +16469,7 @@ function EditorToolbarBar({
16300
16469
  onClick: () => chain()?.toggleBulletList().run(),
16301
16470
  children: /* @__PURE__ */ jsxRuntime.jsx(IconBulletList, { size: ICON_SIZE })
16302
16471
  },
16303
- item
16472
+ item2
16304
16473
  );
16305
16474
  case "orderedList":
16306
16475
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16313,7 +16482,7 @@ function EditorToolbarBar({
16313
16482
  onClick: () => chain()?.toggleOrderedList().run(),
16314
16483
  children: /* @__PURE__ */ jsxRuntime.jsx(IconOrderedList, { size: ICON_SIZE })
16315
16484
  },
16316
- item
16485
+ item2
16317
16486
  );
16318
16487
  case "taskList":
16319
16488
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16326,7 +16495,7 @@ function EditorToolbarBar({
16326
16495
  onClick: () => chain()?.toggleTaskList().run(),
16327
16496
  children: /* @__PURE__ */ jsxRuntime.jsx(IconTaskList, { size: ICON_SIZE })
16328
16497
  },
16329
- item
16498
+ item2
16330
16499
  );
16331
16500
  case "list": {
16332
16501
  const ListIcon = state2.orderedList ? IconOrderedList : state2.taskList ? IconTaskList : IconBulletList;
@@ -16371,7 +16540,7 @@ function EditorToolbarBar({
16371
16540
  }
16372
16541
  )
16373
16542
  ] }) })
16374
- ] }, item);
16543
+ ] }, item2);
16375
16544
  }
16376
16545
  case "blockquote":
16377
16546
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16384,7 +16553,7 @@ function EditorToolbarBar({
16384
16553
  onClick: () => chain()?.toggleBlockquote().run(),
16385
16554
  children: /* @__PURE__ */ jsxRuntime.jsx(IconBlockquote, { size: ICON_SIZE })
16386
16555
  },
16387
- item
16556
+ item2
16388
16557
  );
16389
16558
  case "codeBlock":
16390
16559
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16397,7 +16566,7 @@ function EditorToolbarBar({
16397
16566
  onClick: () => chain()?.toggleCodeBlock().run(),
16398
16567
  children: /* @__PURE__ */ jsxRuntime.jsx(IconCodeBlock, { size: ICON_SIZE })
16399
16568
  },
16400
- item
16569
+ item2
16401
16570
  );
16402
16571
  case "horizontalRule":
16403
16572
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16408,7 +16577,7 @@ function EditorToolbarBar({
16408
16577
  onClick: () => chain()?.setHorizontalRule().run(),
16409
16578
  children: /* @__PURE__ */ jsxRuntime.jsx(IconHorizontalRule, { size: ICON_SIZE })
16410
16579
  },
16411
- item
16580
+ item2
16412
16581
  );
16413
16582
  case "link":
16414
16583
  if (mobile)
@@ -16421,7 +16590,7 @@ function EditorToolbarBar({
16421
16590
  onClick: () => setMobileView("link"),
16422
16591
  children: /* @__PURE__ */ jsxRuntime.jsx(IconLink, { size: ICON_SIZE })
16423
16592
  },
16424
- item
16593
+ item2
16425
16594
  );
16426
16595
  return /* @__PURE__ */ jsxRuntime.jsxs(RPopover11__namespace.Root, { open: linkOpen, onOpenChange: setLinkOpen, children: [
16427
16596
  /* @__PURE__ */ jsxRuntime.jsx(RPopover11__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "\uB9C1\uD06C", active: state2.link, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(IconLink, { size: ICON_SIZE }) }) }),
@@ -16446,7 +16615,7 @@ function EditorToolbarBar({
16446
16615
  )
16447
16616
  }
16448
16617
  ) })
16449
- ] }, item);
16618
+ ] }, item2);
16450
16619
  case "image":
16451
16620
  return /* @__PURE__ */ jsxRuntime.jsxs(
16452
16621
  ToolbarButton,
@@ -16460,7 +16629,7 @@ function EditorToolbarBar({
16460
16629
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] leading-[20px]", children: "\uC774\uBBF8\uC9C0" })
16461
16630
  ]
16462
16631
  },
16463
- item
16632
+ item2
16464
16633
  );
16465
16634
  case "table":
16466
16635
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -16581,7 +16750,7 @@ function EditorToolbarBar({
16581
16750
  ] }) })
16582
16751
  ]
16583
16752
  },
16584
- item
16753
+ item2
16585
16754
  );
16586
16755
  case "undo":
16587
16756
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16592,7 +16761,7 @@ function EditorToolbarBar({
16592
16761
  onClick: () => chain()?.undo().run(),
16593
16762
  children: /* @__PURE__ */ jsxRuntime.jsx(IconUndo, { size: ICON_SIZE })
16594
16763
  },
16595
- item
16764
+ item2
16596
16765
  );
16597
16766
  case "redo":
16598
16767
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16603,7 +16772,7 @@ function EditorToolbarBar({
16603
16772
  onClick: () => chain()?.redo().run(),
16604
16773
  children: /* @__PURE__ */ jsxRuntime.jsx(IconRedo, { size: ICON_SIZE })
16605
16774
  },
16606
- item
16775
+ item2
16607
16776
  );
16608
16777
  default:
16609
16778
  return null;
@@ -19037,8 +19206,8 @@ var SChipInput = /* @__PURE__ */ react.forwardRef(function SChipInput2({
19037
19206
  onMouseDown: (e) => e.preventDefault(),
19038
19207
  children: [
19039
19208
  loading2 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "s-chip-input__suggestions-empty p-sd-12 text-center text-12 leading-sd-20 text-(--color-grey-65)", children: "\uBD88\uB7EC\uC624\uB294 \uC911..." }),
19040
- !effectiveAutocomplete ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-sd-8 px-sd-12 py-sd-6", children: items.map((item, i) => {
19041
- const selected = values.includes(item);
19209
+ !effectiveAutocomplete ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-sd-8 px-sd-12 py-sd-6", children: items.map((item2, i) => {
19210
+ const selected = values.includes(item2);
19042
19211
  const active = i === activeIndex && !selected;
19043
19212
  return /* @__PURE__ */ jsxRuntime.jsx(
19044
19213
  "div",
@@ -19049,14 +19218,14 @@ var SChipInput = /* @__PURE__ */ react.forwardRef(function SChipInput2({
19049
19218
  style: active ? { outline: "2px solid var(--color-border-accent)", outlineOffset: 1 } : void 0,
19050
19219
  onMouseDown: (e) => {
19051
19220
  e.preventDefault();
19052
- if (!selected) addChip(item);
19221
+ if (!selected) addChip(item2);
19053
19222
  },
19054
- children: /* @__PURE__ */ jsxRuntime.jsx(SChip2, { value: item, disabled: selected, editable: false, showRemove: false })
19223
+ children: /* @__PURE__ */ jsxRuntime.jsx(SChip2, { value: item2, disabled: selected, editable: false, showRemove: false })
19055
19224
  },
19056
- item
19225
+ item2
19057
19226
  );
19058
- }) }) : items.map((item, i) => {
19059
- const selected = values.includes(item);
19227
+ }) }) : items.map((item2, i) => {
19228
+ const selected = values.includes(item2);
19060
19229
  const active = i === activeIndex && !selected;
19061
19230
  return /* @__PURE__ */ jsxRuntime.jsxs(
19062
19231
  "div",
@@ -19069,10 +19238,10 @@ var SChipInput = /* @__PURE__ */ react.forwardRef(function SChipInput2({
19069
19238
  ),
19070
19239
  onMouseDown: (e) => {
19071
19240
  e.preventDefault();
19072
- if (!selected) addChip(item);
19241
+ if (!selected) addChip(item2);
19073
19242
  },
19074
19243
  children: [
19075
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1", children: item }),
19244
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1", children: item2 }),
19076
19245
  selected && /* @__PURE__ */ jsxRuntime.jsx(
19077
19246
  SIcon,
19078
19247
  {
@@ -19083,7 +19252,7 @@ var SChipInput = /* @__PURE__ */ react.forwardRef(function SChipInput2({
19083
19252
  )
19084
19253
  ]
19085
19254
  },
19086
- item
19255
+ item2
19087
19256
  );
19088
19257
  })
19089
19258
  ]
@@ -19467,22 +19636,22 @@ function TimeSelector({
19467
19636
  style: {
19468
19637
  padding: "var(--cmp-timepicker-selector-section-paddingY) var(--cmp-timepicker-selector-section-paddingX)"
19469
19638
  },
19470
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "isolate flex", children: ["AM", "PM"].map((item, index) => {
19471
- const selected = item === meridiem;
19639
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "isolate flex", children: ["AM", "PM"].map((item2, index) => {
19640
+ const selected = item2 === meridiem;
19472
19641
  return /* @__PURE__ */ jsxRuntime.jsx(
19473
19642
  "button",
19474
19643
  {
19475
19644
  type: "button",
19476
- onClick: () => setMeridiem(item),
19645
+ onClick: () => setMeridiem(item2),
19477
19646
  className: cn(
19478
19647
  "box-border h-[var(--cmp-textinput-sm-height)] w-[61px] cursor-pointer border border-solid bg-white text-center text-[12px] font-medium leading-[20px]",
19479
19648
  index === 0 ? "rounded-l-[var(--cmp-select-sm-radius)]" : "rounded-r-[var(--cmp-select-sm-radius)]",
19480
19649
  index === 0 ? "-mr-px" : "",
19481
19650
  selected ? "z-[1] border-[var(--cmp-timepicker-border-focus)] text-[var(--cmp-timepicker-border-focus)]" : "border-[var(--cmp-timepicker-border-default)] text-[var(--cmp-field-hint-color)]"
19482
19651
  ),
19483
- children: item === "AM" ? "\uC624\uC804" : "\uC624\uD6C4"
19652
+ children: item2 === "AM" ? "\uC624\uC804" : "\uC624\uD6C4"
19484
19653
  },
19485
- item
19654
+ item2
19486
19655
  );
19487
19656
  }) })
19488
19657
  }
@@ -19703,8 +19872,8 @@ function getTimeMinutes(value) {
19703
19872
  }
19704
19873
  function normalizeTimeRangeValue(value, rangeOrder = "strict") {
19705
19874
  if (value == null) return null;
19706
- const normalized = value.map((item) => {
19707
- const parsed = parseTimeValue(item);
19875
+ const normalized = value.map((item2) => {
19876
+ const parsed = parseTimeValue(item2);
19708
19877
  return formatTimeValue(parsed.hour, parsed.minute);
19709
19878
  });
19710
19879
  if (rangeOrder === "strict" && getTimeMinutes(normalized[0]) > getTimeMinutes(normalized[1])) {
@@ -19914,21 +20083,21 @@ function RangeTimeSelector({
19914
20083
  style: { gap: "var(--cmp-timepicker-selector-range-heading-gap)" },
19915
20084
  children: [
19916
20085
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "whitespace-nowrap text-center text-[12px] font-bold leading-[20px] text-[var(--cmp-timepicker-selector-range-heading-color)]", children: title }),
19917
- useMeridiem && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "isolate flex", children: ["AM", "PM"].map((item, index) => {
19918
- const selected = item === getMeridiem(side);
20086
+ useMeridiem && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "isolate flex", children: ["AM", "PM"].map((item2, index) => {
20087
+ const selected = item2 === getMeridiem(side);
19919
20088
  return /* @__PURE__ */ jsxRuntime.jsx(
19920
20089
  "button",
19921
20090
  {
19922
20091
  type: "button",
19923
- onClick: () => setMeridiem(side, item),
20092
+ onClick: () => setMeridiem(side, item2),
19924
20093
  className: cn(
19925
20094
  "box-border h-[var(--cmp-textinput-sm-height)] w-[61px] cursor-pointer border border-solid bg-white text-center text-[12px] font-medium leading-[20px]",
19926
20095
  index === 0 ? "rounded-l-[var(--cmp-select-sm-radius)] -mr-px" : "rounded-r-[var(--cmp-select-sm-radius)]",
19927
20096
  selected ? "z-[1] border-[var(--cmp-timepicker-border-focus)] text-[var(--cmp-timepicker-border-focus)]" : "border-[var(--cmp-timepicker-border-default)] text-[var(--cmp-field-hint-color)]"
19928
20097
  ),
19929
- children: item === "AM" ? "\uC624\uC804" : "\uC624\uD6C4"
20098
+ children: item2 === "AM" ? "\uC624\uC804" : "\uC624\uD6C4"
19930
20099
  },
19931
- item
20100
+ item2
19932
20101
  );
19933
20102
  }) })
19934
20103
  ]
@@ -20252,6 +20421,7 @@ exports.SSelect = SSelect2;
20252
20421
  exports.SSplitter = SSplitter2;
20253
20422
  exports.SStepper = SStepper;
20254
20423
  exports.SSwitch = SSwitch;
20424
+ exports.SSystemActionButton = SSystemActionButton;
20255
20425
  exports.STEPPER_SIZES = STEPPER_SIZES;
20256
20426
  exports.STable = STable;
20257
20427
  exports.STableBar = STableBar;
@@ -20267,6 +20437,11 @@ exports.SToggle = SToggle;
20267
20437
  exports.STooltip = STooltip2;
20268
20438
  exports.STree = STree2;
20269
20439
  exports.STreeItem = STreeItem2;
20440
+ exports.SYSTEM_ACTION_BUTTON_COLORS = SYSTEM_ACTION_BUTTON_COLORS;
20441
+ exports.SYSTEM_ACTION_BUTTON_COLOR_CONFIG = SYSTEM_ACTION_BUTTON_COLOR_CONFIG;
20442
+ exports.SYSTEM_ACTION_BUTTON_LAYOUT = SYSTEM_ACTION_BUTTON_LAYOUT;
20443
+ exports.SYSTEM_ACTION_BUTTON_TYPES = SYSTEM_ACTION_BUTTON_TYPES;
20444
+ exports.SYSTEM_ACTION_BUTTON_TYPE_CONFIG = SYSTEM_ACTION_BUTTON_TYPE_CONFIG;
20270
20445
  exports.TAG_COLORS = TAG_COLORS;
20271
20446
  exports.TAG_SHAPES = TAG_SHAPES;
20272
20447
  exports.TAG_SIZES = TAG_SIZES;