sellmate-design-system-react 0.1.8 → 0.1.9

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 (104) hide show
  1. package/dist/components/SActionModal/SActionModal.cjs +1 -1
  2. package/dist/components/SActionModal/SActionModal.cjs.map +1 -1
  3. package/dist/components/SActionModal/SActionModal.js +1 -1
  4. package/dist/components/SActionModal/SActionModal.js.map +1 -1
  5. package/dist/components/SBarcodeInput/SBarcodeInput.cjs +218 -209
  6. package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
  7. package/dist/components/SBarcodeInput/SBarcodeInput.js +218 -209
  8. package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
  9. package/dist/components/SCalendar/SCalendar.cjs +1 -1
  10. package/dist/components/SCalendar/SCalendar.cjs.map +1 -1
  11. package/dist/components/SCalendar/SCalendar.js +1 -1
  12. package/dist/components/SCalendar/SCalendar.js.map +1 -1
  13. package/dist/components/SChip/SChip.cjs +1 -1
  14. package/dist/components/SChip/SChip.cjs.map +1 -1
  15. package/dist/components/SChip/SChip.d.ts +1 -1
  16. package/dist/components/SChip/SChip.js +1 -1
  17. package/dist/components/SChip/SChip.js.map +1 -1
  18. package/dist/components/SChipInput/SChipInput.cjs +235 -221
  19. package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
  20. package/dist/components/SChipInput/SChipInput.js +235 -221
  21. package/dist/components/SChipInput/SChipInput.js.map +1 -1
  22. package/dist/components/SCircleProgress/SCircleProgress.cjs +53 -55
  23. package/dist/components/SCircleProgress/SCircleProgress.cjs.map +1 -1
  24. package/dist/components/SCircleProgress/SCircleProgress.js +53 -55
  25. package/dist/components/SCircleProgress/SCircleProgress.js.map +1 -1
  26. package/dist/components/SDatePicker/SDatePicker.cjs +223 -214
  27. package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
  28. package/dist/components/SDatePicker/SDatePicker.js +223 -214
  29. package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
  30. package/dist/components/SDateRangePicker/SDateRangePicker.cjs +298 -263
  31. package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
  32. package/dist/components/SDateRangePicker/SDateRangePicker.js +298 -263
  33. package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
  34. package/dist/components/SDropdownButton/SDropdownButton.cjs +4 -4
  35. package/dist/components/SDropdownButton/SDropdownButton.cjs.map +1 -1
  36. package/dist/components/SDropdownButton/SDropdownButton.js +4 -4
  37. package/dist/components/SDropdownButton/SDropdownButton.js.map +1 -1
  38. package/dist/components/SField/SField.cjs +218 -21
  39. package/dist/components/SField/SField.cjs.map +1 -1
  40. package/dist/components/SField/SField.d.ts +11 -0
  41. package/dist/components/SField/SField.js +218 -21
  42. package/dist/components/SField/SField.js.map +1 -1
  43. package/dist/components/SFilePicker/SFilePicker.cjs +298 -278
  44. package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
  45. package/dist/components/SFilePicker/SFilePicker.d.ts +4 -2
  46. package/dist/components/SFilePicker/SFilePicker.js +298 -278
  47. package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
  48. package/dist/components/SInput/SInput.cjs +218 -209
  49. package/dist/components/SInput/SInput.cjs.map +1 -1
  50. package/dist/components/SInput/SInput.js +218 -209
  51. package/dist/components/SInput/SInput.js.map +1 -1
  52. package/dist/components/SKeyValueTable/SKeyValueTable.cjs +610 -450
  53. package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
  54. package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +3 -1
  55. package/dist/components/SKeyValueTable/SKeyValueTable.js +610 -450
  56. package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
  57. package/dist/components/SLoadingContainer/SLoadingContainer.cjs +61 -55
  58. package/dist/components/SLoadingContainer/SLoadingContainer.cjs.map +1 -1
  59. package/dist/components/SLoadingContainer/SLoadingContainer.js +61 -55
  60. package/dist/components/SLoadingContainer/SLoadingContainer.js.map +1 -1
  61. package/dist/components/SLoadingContainer/loading.cjs +61 -55
  62. package/dist/components/SLoadingContainer/loading.cjs.map +1 -1
  63. package/dist/components/SLoadingContainer/loading.js +61 -55
  64. package/dist/components/SLoadingContainer/loading.js.map +1 -1
  65. package/dist/components/SLoadingModal/SLoadingModal.cjs +56 -57
  66. package/dist/components/SLoadingModal/SLoadingModal.cjs.map +1 -1
  67. package/dist/components/SLoadingModal/SLoadingModal.js +56 -57
  68. package/dist/components/SLoadingModal/SLoadingModal.js.map +1 -1
  69. package/dist/components/SNumberInput/SNumberInput.cjs +326 -50
  70. package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
  71. package/dist/components/SNumberInput/SNumberInput.d.ts +2 -0
  72. package/dist/components/SNumberInput/SNumberInput.js +326 -50
  73. package/dist/components/SNumberInput/SNumberInput.js.map +1 -1
  74. package/dist/components/SPagination/SPagination.cjs +1 -1
  75. package/dist/components/SPagination/SPagination.cjs.map +1 -1
  76. package/dist/components/SPagination/SPagination.js +1 -1
  77. package/dist/components/SPagination/SPagination.js.map +1 -1
  78. package/dist/components/SSelect/SSelect.cjs +67 -32
  79. package/dist/components/SSelect/SSelect.cjs.map +1 -1
  80. package/dist/components/SSelect/SSelect.js +67 -32
  81. package/dist/components/SSelect/SSelect.js.map +1 -1
  82. package/dist/components/STable/STable.cjs +121 -88
  83. package/dist/components/STable/STable.cjs.map +1 -1
  84. package/dist/components/STable/STable.js +121 -88
  85. package/dist/components/STable/STable.js.map +1 -1
  86. package/dist/components/STextarea/STextarea.cjs +218 -21
  87. package/dist/components/STextarea/STextarea.cjs.map +1 -1
  88. package/dist/components/STextarea/STextarea.js +218 -21
  89. package/dist/components/STextarea/STextarea.js.map +1 -1
  90. package/dist/components/SToast/SToastContainer.cjs +3 -3
  91. package/dist/components/SToast/SToastContainer.cjs.map +1 -1
  92. package/dist/components/SToast/SToastContainer.js +3 -3
  93. package/dist/components/SToast/SToastContainer.js.map +1 -1
  94. package/dist/components/STooltip/STooltip.cjs +209 -14
  95. package/dist/components/STooltip/STooltip.cjs.map +1 -1
  96. package/dist/components/STooltip/STooltip.js +209 -14
  97. package/dist/components/STooltip/STooltip.js.map +1 -1
  98. package/dist/index.cjs +432 -260
  99. package/dist/index.cjs.map +1 -1
  100. package/dist/index.js +432 -260
  101. package/dist/index.js.map +1 -1
  102. package/dist/styles.css +51 -27
  103. package/dist/theme.css +4 -2
  104. package/package.json +1 -1
@@ -2969,65 +2969,63 @@ var SCircleProgress = react.forwardRef(
2969
2969
  "div",
2970
2970
  {
2971
2971
  ref,
2972
- className: cn("inline-flex flex-col items-center gap-[8px]", className),
2972
+ className: cn(
2973
+ "inline-flex flex-col items-center gap-[var(--cmp-progress-circular-gap)]",
2974
+ className
2975
+ ),
2973
2976
  style,
2974
2977
  children: [
2975
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative h-[80px] w-[80px]", children: [
2976
- /* @__PURE__ */ jsxRuntime.jsxs(
2977
- "svg",
2978
- {
2979
- viewBox: `0 0 ${VIEWBOX} ${VIEWBOX}`,
2980
- xmlns: "http://www.w3.org/2000/svg",
2981
- className: cn(
2982
- "h-[80px] w-[80px]",
2983
- indeterminate && "origin-center animate-circle-spin"
2978
+ /* @__PURE__ */ jsxRuntime.jsxs(
2979
+ "svg",
2980
+ {
2981
+ viewBox: `0 0 ${VIEWBOX} ${VIEWBOX}`,
2982
+ xmlns: "http://www.w3.org/2000/svg",
2983
+ className: cn("h-[80px] w-[80px]", indeterminate && "origin-center animate-circle-spin"),
2984
+ children: [
2985
+ /* @__PURE__ */ jsxRuntime.jsx(
2986
+ "circle",
2987
+ {
2988
+ cx: c,
2989
+ cy: c,
2990
+ r: RADIUS,
2991
+ fill: "none",
2992
+ strokeWidth: STROKE,
2993
+ style: { stroke: colors.track }
2994
+ }
2984
2995
  ),
2985
- children: [
2986
- /* @__PURE__ */ jsxRuntime.jsx(
2987
- "circle",
2988
- {
2989
- cx: c,
2990
- cy: c,
2991
- r: RADIUS,
2992
- fill: "none",
2993
- strokeWidth: STROKE,
2994
- style: { stroke: colors.track }
2995
- }
2996
- ),
2997
- /* @__PURE__ */ jsxRuntime.jsx(
2998
- "circle",
2999
- {
3000
- cx: c,
3001
- cy: c,
3002
- r: RADIUS,
3003
- fill: "none",
3004
- strokeWidth: STROKE,
3005
- strokeLinecap: "round",
3006
- className: cn(
3007
- "origin-center",
3008
- indeterminate ? "animate-circle-arc" : "-rotate-90 transition-[stroke-dasharray] duration-[400ms] ease-linear"
3009
- ),
3010
- style: {
3011
- stroke: colors.arc,
3012
- ...indeterminate ? {} : { strokeDasharray: `${filled} ${CIRCUMFERENCE}`, strokeDashoffset: 0 }
3013
- }
2996
+ /* @__PURE__ */ jsxRuntime.jsx(
2997
+ "circle",
2998
+ {
2999
+ cx: c,
3000
+ cy: c,
3001
+ r: RADIUS,
3002
+ fill: "none",
3003
+ strokeWidth: STROKE,
3004
+ strokeLinecap: "round",
3005
+ className: cn(
3006
+ "origin-center",
3007
+ indeterminate ? "animate-circle-arc" : "-rotate-90 transition-[stroke-dasharray] duration-[400ms] ease-linear"
3008
+ ),
3009
+ style: {
3010
+ stroke: colors.arc,
3011
+ ...indeterminate ? {} : { strokeDasharray: `${filled} ${CIRCUMFERENCE}`, strokeDashoffset: 0 }
3014
3012
  }
3015
- )
3016
- ]
3017
- }
3018
- ),
3019
- !indeterminate && /* @__PURE__ */ jsxRuntime.jsxs(
3020
- "span",
3021
- {
3022
- className: "absolute inset-0 flex items-center justify-center text-[16px] font-bold leading-[26px]",
3023
- style: { color: percentColor },
3024
- children: [
3025
- Math.round(v),
3026
- "%"
3027
- ]
3028
- }
3029
- )
3030
- ] }),
3013
+ }
3014
+ )
3015
+ ]
3016
+ }
3017
+ ),
3018
+ !indeterminate && /* @__PURE__ */ jsxRuntime.jsxs(
3019
+ "span",
3020
+ {
3021
+ className: "text-center text-[16px] font-bold leading-[26px]",
3022
+ style: { color: percentColor },
3023
+ children: [
3024
+ Math.round(v),
3025
+ "%"
3026
+ ]
3027
+ }
3028
+ ),
3031
3029
  label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-center text-[12px] font-normal leading-[20px] text-[color:var(--cmp-progress-color-label)]", children: label })
3032
3030
  ]
3033
3031
  }
@@ -3090,7 +3088,7 @@ function SPagination({
3090
3088
  style,
3091
3089
  children: [
3092
3090
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-[calc(var(--cmp-pagination-height)*2+var(--cmp-pagination-move-gap))] items-center justify-end gap-[var(--cmp-pagination-move-gap)]", children: prevButtons }),
3093
- simple ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-[var(--cmp-pagination-height)] items-center gap-[var(--cmp-pagination-move-gap)] px-[var(--cmp-pagination-paddingX)] text-[12px] font-medium leading-[20px] text-[color:var(--cmp-pagination-item-content-default)]", children: [
3091
+ simple ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-[var(--cmp-pagination-height)] items-center gap-[var(--cmp-pagination-simple-gap)] px-[var(--cmp-pagination-paddingX)] text-[12px] font-medium leading-[20px] text-[color:var(--cmp-pagination-item-content-default)]", children: [
3094
3092
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold text-[color:var(--cmp-pagination-item-content-selected)]", children: currentPage }),
3095
3093
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "/" }),
3096
3094
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: lastPage })
@@ -3334,7 +3332,8 @@ var HIDE_DELAY_MS = 100;
3334
3332
  function useBody(content, message = []) {
3335
3333
  if (content != null) return content;
3336
3334
  if (message.length === 0) return null;
3337
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: line }, i)) });
3335
+ const singleLine = message.length === 1;
3336
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: singleLine ? "leading-[24px]" : void 0, children: line }, i)) });
3338
3337
  }
3339
3338
  var STooltip = react.forwardRef(function STooltip2({
3340
3339
  content,
@@ -3392,7 +3391,7 @@ var STooltip = react.forwardRef(function STooltip2({
3392
3391
  if (disabled || body == null) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: triggerNode });
3393
3392
  const isHover = trigger === "hover";
3394
3393
  const contentClass = cn(
3395
- "z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px]",
3394
+ "z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)]",
3396
3395
  FLOATING_SLIDE_ANIM,
3397
3396
  className
3398
3397
  );
@@ -3437,11 +3436,17 @@ var STooltip = react.forwardRef(function STooltip2({
3437
3436
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-[12px]", children: [
3438
3437
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 flex-1", children: body }),
3439
3438
  useClose && /* @__PURE__ */ jsxRuntime.jsx(
3440
- RPopover2__namespace.Close,
3439
+ SGhostButton,
3441
3440
  {
3442
- "aria-label": "\uB2EB\uAE30",
3443
- className: "shrink-0 cursor-pointer opacity-70 hover:opacity-100",
3444
- children: /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "close", size: 16, color: fg })
3441
+ icon: "close",
3442
+ size: "xs",
3443
+ intent: tooltipType === "default" ? "inverse" : "default",
3444
+ ariaLabel: "\uB2EB\uAE30",
3445
+ className: "shrink-0",
3446
+ onClick: () => {
3447
+ cancelHide();
3448
+ setOpen(false);
3449
+ }
3445
3450
  }
3446
3451
  )
3447
3452
  ] }),
@@ -3479,8 +3484,8 @@ function useFormField(field) {
3479
3484
  }, [ctx, name]);
3480
3485
  }
3481
3486
  var FIELD_SIZE = {
3482
- sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon: 12 },
3483
- md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon: 12 }
3487
+ sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon: 16 },
3488
+ md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon: 16 }
3484
3489
  };
3485
3490
  var ALIGN = {
3486
3491
  start: "flex-start",
@@ -3495,6 +3500,7 @@ var SField = react.forwardRef(function SField2({
3495
3500
  labelTooltip = "",
3496
3501
  labelTooltipProps,
3497
3502
  labelWidth,
3503
+ labelHeight,
3498
3504
  size = "sm",
3499
3505
  addonLabel = "",
3500
3506
  addonAlign = "start",
@@ -3509,6 +3515,7 @@ var SField = react.forwardRef(function SField2({
3509
3515
  readOnly = false,
3510
3516
  width,
3511
3517
  multiline = false,
3518
+ borderless = false,
3512
3519
  children,
3513
3520
  className,
3514
3521
  style,
@@ -3542,8 +3549,8 @@ var SField = react.forwardRef(function SField2({
3542
3549
  const resolvedSuccess = status === "pass";
3543
3550
  const showError = resolvedError && errorMessage !== "";
3544
3551
  const interactive = !disabled && !readOnly;
3545
- const borderColor = 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)";
3546
- const bgColor = disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
3552
+ 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)";
3553
+ const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
3547
3554
  const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
3548
3555
  return /* @__PURE__ */ jsxRuntime.jsx(
3549
3556
  "div",
@@ -3560,7 +3567,7 @@ var SField = react.forwardRef(function SField2({
3560
3567
  {
3561
3568
  className: "flex shrink-0 items-center font-bold text-(--sys-color-field-text-default)",
3562
3569
  style: {
3563
- height: s.height,
3570
+ height: cssLen(labelHeight) ?? s.height,
3564
3571
  marginRight: s.fieldGap,
3565
3572
  width: cssLen(labelWidth),
3566
3573
  fontSize: s.fontSize,
@@ -3586,14 +3593,14 @@ var SField = react.forwardRef(function SField2({
3586
3593
  {
3587
3594
  className: cn(
3588
3595
  "relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
3589
- interactive && "hover:border-(--sys-color-field-border-focus) hover:shadow-[0px_0px_4px_0px_#0071ff66] focus-within:border-(--sys-color-field-border-focus) focus-within:shadow-[0px_0px_4px_0px_#0071ff66]",
3596
+ interactive && !borderless && "hover:border-(--sys-color-field-border-focus) hover:shadow-[0px_0px_4px_0px_#0071ff66] focus-within:border-(--sys-color-field-border-focus) focus-within:shadow-[0px_0px_4px_0px_#0071ff66]",
3590
3597
  disabled && "cursor-not-allowed"
3591
3598
  ),
3592
3599
  style: {
3593
3600
  // @ts-expect-error CSS 변수
3594
3601
  "--field-bc": borderColor,
3595
3602
  // focused/hovered prop이 명시된 경우 강조를 즉시 반영
3596
- ...interactive && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
3603
+ ...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
3597
3604
  ...multiline ? { minHeight: s.height } : { height: s.height },
3598
3605
  "width": cssLen(width),
3599
3606
  "borderRadius": s.radius,
@@ -3638,15 +3645,28 @@ function flattenOptions(options, depth = 1) {
3638
3645
  const out = [];
3639
3646
  for (const o of options) {
3640
3647
  const hasChildren = Array.isArray(o.children) && o.children.length > 0;
3641
- out.push({
3642
- value: String(o.value),
3643
- label: o.label,
3644
- disabled: !!o.disabled,
3645
- depth,
3646
- isGroup: hasChildren,
3647
- raw: o.value
3648
- });
3649
- if (hasChildren) out.push(...flattenOptions(o.children, depth + 1));
3648
+ if (hasChildren) {
3649
+ const childFlat = flattenOptions(o.children, depth + 1);
3650
+ const allChildrenDisabled = childFlat.every((c) => c.disabled);
3651
+ out.push({
3652
+ value: String(o.value),
3653
+ label: o.label,
3654
+ disabled: !!o.disabled || allChildrenDisabled,
3655
+ depth,
3656
+ isGroup: true,
3657
+ raw: o.value
3658
+ });
3659
+ out.push(...childFlat);
3660
+ } else {
3661
+ out.push({
3662
+ value: String(o.value),
3663
+ label: o.label,
3664
+ disabled: !!o.disabled,
3665
+ depth,
3666
+ isGroup: false,
3667
+ raw: o.value
3668
+ });
3669
+ }
3650
3670
  }
3651
3671
  return out;
3652
3672
  }
@@ -3770,6 +3790,9 @@ var SSelect = react.forwardRef(function SSelect2({
3770
3790
  );
3771
3791
  const flat = react.useMemo(() => flattenOptions(options), [options]);
3772
3792
  const selectable = react.useMemo(() => selectableOptions(flat), [flat]);
3793
+ const hasLeaf = react.useMemo(() => flat.some((o) => !o.isGroup), [flat]);
3794
+ const allOptionsDisabled = hasLeaf && selectable.length === 0;
3795
+ const effectiveDisabled = disabled || allOptionsDisabled;
3773
3796
  const showSearch = useSearch && selectable.length >= SEARCH_THRESHOLD;
3774
3797
  const labelByValue = react.useMemo(() => new Map(flat.map((o) => [o.value, o.label])), [flat]);
3775
3798
  const rawByValue = react.useMemo(() => new Map(flat.map((o) => [o.value, o.raw])), [flat]);
@@ -3836,10 +3859,10 @@ var SSelect = react.forwardRef(function SSelect2({
3836
3859
  Ariakit__namespace.Select,
3837
3860
  {
3838
3861
  ref: triggerRef,
3839
- disabled,
3862
+ disabled: effectiveDisabled,
3840
3863
  className: "flex h-full w-full cursor-pointer items-center justify-between gap-[8px] bg-transparent px-[12px] text-left text-[12px] leading-[20px] outline-none disabled:cursor-not-allowed",
3841
3864
  style: {
3842
- color: disabled ? "var(--cmp-select-text-disabled)" : isPlaceholder ? "var(--cmp-select-icon-default)" : "var(--cmp-select-text-default)"
3865
+ color: effectiveDisabled ? "var(--cmp-select-text-disabled)" : isPlaceholder ? "var(--cmp-select-icon-default)" : "var(--cmp-select-text-default)"
3843
3866
  },
3844
3867
  children: [
3845
3868
  isHtmlLabel(triggerText) ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -3854,7 +3877,7 @@ var SSelect = react.forwardRef(function SSelect2({
3854
3877
  {
3855
3878
  name: "chevronDown",
3856
3879
  size: 12,
3857
- color: disabled ? "var(--cmp-select-icon-disabled)" : "var(--cmp-select-icon-default)",
3880
+ color: effectiveDisabled ? "var(--cmp-select-icon-disabled)" : "var(--cmp-select-icon-default)",
3858
3881
  className: cn("shrink-0 transition-transform duration-200", open && "rotate-180")
3859
3882
  }
3860
3883
  )
@@ -3868,7 +3891,7 @@ var SSelect = react.forwardRef(function SSelect2({
3868
3891
  portalElement: portalContainer,
3869
3892
  gutter: 4,
3870
3893
  sameWidth: !dropdownWidth,
3871
- className: "z-50 overflow-auto rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] py-[4px] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)] data-[enter]:animate-floating-in-bottom data-[leave]:animate-floating-out-bottom",
3894
+ className: "z-50 overflow-auto rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)] data-[enter]:animate-floating-in-bottom data-[leave]:animate-floating-out-bottom",
3872
3895
  style: {
3873
3896
  maxHeight: dropdownHeight,
3874
3897
  ...dropdownWidth ? { width: dropdownWidth } : {},
@@ -3909,7 +3932,7 @@ var SSelect = react.forwardRef(function SSelect2({
3909
3932
  ),
3910
3933
  hasItems ? /* @__PURE__ */ jsxRuntime.jsx(ItemList, { items: filtered, multi, selected, useSearch: showSearch }) : (
3911
3934
  // 원본 sd-select-listbox__empty (표시할 항목이 없을 때)
3912
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-[12px] py-[12px] text-center text-[12px] leading-[20px] text-[color:var(--cmp-listItem-content-disabled)]", children: "\uD45C\uC2DC\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4." })
3935
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-[12px] py-[12px] text-left text-[12px] leading-[20px] text-[color:var(--cmp-listItem-content-disabled)]", children: "\uD45C\uC2DC\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4." })
3913
3936
  )
3914
3937
  ]
3915
3938
  }
@@ -3932,7 +3955,7 @@ var SSelect = react.forwardRef(function SSelect2({
3932
3955
  error: error || ruleError !== "",
3933
3956
  status: rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0,
3934
3957
  errorMessage: ruleError !== "" ? ruleError : errorMessage,
3935
- disabled,
3958
+ disabled: effectiveDisabled,
3936
3959
  width,
3937
3960
  className,
3938
3961
  style,
@@ -3967,7 +3990,11 @@ function ItemList({
3967
3990
  {
3968
3991
  className: cn(
3969
3992
  "select-none py-[4px] pr-[12px] text-[12px] leading-[20px] text-[color:var(--cmp-listItem-content-default)]",
3970
- isDepth1 ? "border-t border-solid border-[color:var(--cmp-listItem-depth1-border-color)] bg-[var(--cmp-listItem-depth1-bg-default)] font-bold" : "bg-[var(--cmp-listItem-depth2-middle-bg)] font-medium"
3993
+ isDepth1 ? "border-t border-solid border-[color:var(--cmp-listItem-depth1-border-color)] bg-[var(--cmp-listItem-depth1-bg-default)] font-bold" : "bg-[var(--cmp-listItem-depth2-middle-bg)] font-medium",
3994
+ // 하위가 전부 비활성이면(select.config 에서 bubble-up) 어미 그룹도 비활성 처리:
3995
+ // 텍스트는 회색(#888), depth1 그룹은 파란 배경 대신 회색(#EEE)으로 (depth2 는 #F6F6F6 유지)
3996
+ o.disabled && "text-[color:var(--cmp-listItem-content-disabled)]",
3997
+ o.disabled && isDepth1 && "bg-[var(--cmp-listItem-depth1-bg-disabled)]"
3971
3998
  ),
3972
3999
  style: { paddingLeft: padLeft },
3973
4000
  children: o.label
@@ -3994,15 +4021,21 @@ function ItemList({
3994
4021
  "span",
3995
4022
  {
3996
4023
  className: cn(
3997
- "flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-[2px] border border-solid group-data-[active-item]:border-[color:var(--cmp-checkbox-checked-border-inverse)]",
3998
- isSelected ? "border-[color:var(--cmp-checkbox-checked-bg-default)] bg-[var(--cmp-checkbox-checked-bg-default)] group-data-[active-item]:bg-transparent" : "border-[color:var(--cmp-checkbox-unchecked-border-default)] bg-transparent"
4024
+ "flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-[2px] border border-solid",
4025
+ o.disabled ? (
4026
+ // 비활성: 회색 채움(#E1E1E1) + 회색 테두리(#CCCCCC)
4027
+ "border-[color:var(--cmp-checkbox-border-disabled)] bg-[var(--cmp-checkbox-bg-disabled)]"
4028
+ ) : cn(
4029
+ "group-data-[active-item]:border-[color:var(--cmp-checkbox-checked-border-inverse)]",
4030
+ isSelected ? "border-[color:var(--cmp-checkbox-checked-bg-default)] bg-[var(--cmp-checkbox-checked-bg-default)] group-data-[active-item]:bg-transparent" : "border-[color:var(--cmp-checkbox-unchecked-border-default)] bg-transparent"
4031
+ )
3999
4032
  ),
4000
4033
  children: isSelected && /* @__PURE__ */ jsxRuntime.jsx(
4001
4034
  SIcon,
4002
4035
  {
4003
4036
  name: "checkboxCheck",
4004
4037
  size: 12,
4005
- color: "var(--cmp-checkbox-checked-icon-default)"
4038
+ color: o.disabled ? "var(--cmp-checkbox-checked-icon-disabled)" : "var(--cmp-checkbox-checked-icon-default)"
4006
4039
  }
4007
4040
  )
4008
4041
  }