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
@@ -2945,65 +2945,63 @@ var SCircleProgress = forwardRef(
2945
2945
  "div",
2946
2946
  {
2947
2947
  ref,
2948
- className: cn("inline-flex flex-col items-center gap-[8px]", className),
2948
+ className: cn(
2949
+ "inline-flex flex-col items-center gap-[var(--cmp-progress-circular-gap)]",
2950
+ className
2951
+ ),
2949
2952
  style,
2950
2953
  children: [
2951
- /* @__PURE__ */ jsxs("div", { className: "relative h-[80px] w-[80px]", children: [
2952
- /* @__PURE__ */ jsxs(
2953
- "svg",
2954
- {
2955
- viewBox: `0 0 ${VIEWBOX} ${VIEWBOX}`,
2956
- xmlns: "http://www.w3.org/2000/svg",
2957
- className: cn(
2958
- "h-[80px] w-[80px]",
2959
- indeterminate && "origin-center animate-circle-spin"
2954
+ /* @__PURE__ */ jsxs(
2955
+ "svg",
2956
+ {
2957
+ viewBox: `0 0 ${VIEWBOX} ${VIEWBOX}`,
2958
+ xmlns: "http://www.w3.org/2000/svg",
2959
+ className: cn("h-[80px] w-[80px]", indeterminate && "origin-center animate-circle-spin"),
2960
+ children: [
2961
+ /* @__PURE__ */ jsx(
2962
+ "circle",
2963
+ {
2964
+ cx: c,
2965
+ cy: c,
2966
+ r: RADIUS,
2967
+ fill: "none",
2968
+ strokeWidth: STROKE,
2969
+ style: { stroke: colors.track }
2970
+ }
2960
2971
  ),
2961
- children: [
2962
- /* @__PURE__ */ jsx(
2963
- "circle",
2964
- {
2965
- cx: c,
2966
- cy: c,
2967
- r: RADIUS,
2968
- fill: "none",
2969
- strokeWidth: STROKE,
2970
- style: { stroke: colors.track }
2971
- }
2972
- ),
2973
- /* @__PURE__ */ jsx(
2974
- "circle",
2975
- {
2976
- cx: c,
2977
- cy: c,
2978
- r: RADIUS,
2979
- fill: "none",
2980
- strokeWidth: STROKE,
2981
- strokeLinecap: "round",
2982
- className: cn(
2983
- "origin-center",
2984
- indeterminate ? "animate-circle-arc" : "-rotate-90 transition-[stroke-dasharray] duration-[400ms] ease-linear"
2985
- ),
2986
- style: {
2987
- stroke: colors.arc,
2988
- ...indeterminate ? {} : { strokeDasharray: `${filled} ${CIRCUMFERENCE}`, strokeDashoffset: 0 }
2989
- }
2972
+ /* @__PURE__ */ jsx(
2973
+ "circle",
2974
+ {
2975
+ cx: c,
2976
+ cy: c,
2977
+ r: RADIUS,
2978
+ fill: "none",
2979
+ strokeWidth: STROKE,
2980
+ strokeLinecap: "round",
2981
+ className: cn(
2982
+ "origin-center",
2983
+ indeterminate ? "animate-circle-arc" : "-rotate-90 transition-[stroke-dasharray] duration-[400ms] ease-linear"
2984
+ ),
2985
+ style: {
2986
+ stroke: colors.arc,
2987
+ ...indeterminate ? {} : { strokeDasharray: `${filled} ${CIRCUMFERENCE}`, strokeDashoffset: 0 }
2990
2988
  }
2991
- )
2992
- ]
2993
- }
2994
- ),
2995
- !indeterminate && /* @__PURE__ */ jsxs(
2996
- "span",
2997
- {
2998
- className: "absolute inset-0 flex items-center justify-center text-[16px] font-bold leading-[26px]",
2999
- style: { color: percentColor },
3000
- children: [
3001
- Math.round(v),
3002
- "%"
3003
- ]
3004
- }
3005
- )
3006
- ] }),
2989
+ }
2990
+ )
2991
+ ]
2992
+ }
2993
+ ),
2994
+ !indeterminate && /* @__PURE__ */ jsxs(
2995
+ "span",
2996
+ {
2997
+ className: "text-center text-[16px] font-bold leading-[26px]",
2998
+ style: { color: percentColor },
2999
+ children: [
3000
+ Math.round(v),
3001
+ "%"
3002
+ ]
3003
+ }
3004
+ ),
3007
3005
  label && /* @__PURE__ */ jsx("span", { className: "text-center text-[12px] font-normal leading-[20px] text-[color:var(--cmp-progress-color-label)]", children: label })
3008
3006
  ]
3009
3007
  }
@@ -3066,7 +3064,7 @@ function SPagination({
3066
3064
  style,
3067
3065
  children: [
3068
3066
  /* @__PURE__ */ 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 }),
3069
- simple ? /* @__PURE__ */ 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: [
3067
+ simple ? /* @__PURE__ */ 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: [
3070
3068
  /* @__PURE__ */ jsx("span", { className: "font-bold text-[color:var(--cmp-pagination-item-content-selected)]", children: currentPage }),
3071
3069
  /* @__PURE__ */ jsx("span", { children: "/" }),
3072
3070
  /* @__PURE__ */ jsx("span", { children: lastPage })
@@ -3310,7 +3308,8 @@ var HIDE_DELAY_MS = 100;
3310
3308
  function useBody(content, message = []) {
3311
3309
  if (content != null) return content;
3312
3310
  if (message.length === 0) return null;
3313
- return /* @__PURE__ */ jsx(Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsx("div", { children: line }, i)) });
3311
+ const singleLine = message.length === 1;
3312
+ return /* @__PURE__ */ jsx(Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsx("div", { className: singleLine ? "leading-[24px]" : void 0, children: line }, i)) });
3314
3313
  }
3315
3314
  var STooltip = forwardRef(function STooltip2({
3316
3315
  content,
@@ -3368,7 +3367,7 @@ var STooltip = forwardRef(function STooltip2({
3368
3367
  if (disabled || body == null) return /* @__PURE__ */ jsx(Fragment, { children: triggerNode });
3369
3368
  const isHover = trigger === "hover";
3370
3369
  const contentClass = cn(
3371
- "z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px]",
3370
+ "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)]",
3372
3371
  FLOATING_SLIDE_ANIM,
3373
3372
  className
3374
3373
  );
@@ -3413,11 +3412,17 @@ var STooltip = forwardRef(function STooltip2({
3413
3412
  /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-[12px]", children: [
3414
3413
  /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: body }),
3415
3414
  useClose && /* @__PURE__ */ jsx(
3416
- RPopover2.Close,
3415
+ SGhostButton,
3417
3416
  {
3418
- "aria-label": "\uB2EB\uAE30",
3419
- className: "shrink-0 cursor-pointer opacity-70 hover:opacity-100",
3420
- children: /* @__PURE__ */ jsx(SIcon, { name: "close", size: 16, color: fg })
3417
+ icon: "close",
3418
+ size: "xs",
3419
+ intent: tooltipType === "default" ? "inverse" : "default",
3420
+ ariaLabel: "\uB2EB\uAE30",
3421
+ className: "shrink-0",
3422
+ onClick: () => {
3423
+ cancelHide();
3424
+ setOpen(false);
3425
+ }
3421
3426
  }
3422
3427
  )
3423
3428
  ] }),
@@ -3455,8 +3460,8 @@ function useFormField(field) {
3455
3460
  }, [ctx, name]);
3456
3461
  }
3457
3462
  var FIELD_SIZE = {
3458
- sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon: 12 },
3459
- md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon: 12 }
3463
+ sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon: 16 },
3464
+ md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon: 16 }
3460
3465
  };
3461
3466
  var ALIGN = {
3462
3467
  start: "flex-start",
@@ -3471,6 +3476,7 @@ var SField = forwardRef(function SField2({
3471
3476
  labelTooltip = "",
3472
3477
  labelTooltipProps,
3473
3478
  labelWidth,
3479
+ labelHeight,
3474
3480
  size = "sm",
3475
3481
  addonLabel = "",
3476
3482
  addonAlign = "start",
@@ -3485,6 +3491,7 @@ var SField = forwardRef(function SField2({
3485
3491
  readOnly = false,
3486
3492
  width,
3487
3493
  multiline = false,
3494
+ borderless = false,
3488
3495
  children,
3489
3496
  className,
3490
3497
  style,
@@ -3518,8 +3525,8 @@ var SField = forwardRef(function SField2({
3518
3525
  const resolvedSuccess = status === "pass";
3519
3526
  const showError = resolvedError && errorMessage !== "";
3520
3527
  const interactive = !disabled && !readOnly;
3521
- 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)";
3522
- const bgColor = disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
3528
+ 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)";
3529
+ const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
3523
3530
  const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
3524
3531
  return /* @__PURE__ */ jsx(
3525
3532
  "div",
@@ -3536,7 +3543,7 @@ var SField = forwardRef(function SField2({
3536
3543
  {
3537
3544
  className: "flex shrink-0 items-center font-bold text-(--sys-color-field-text-default)",
3538
3545
  style: {
3539
- height: s.height,
3546
+ height: cssLen(labelHeight) ?? s.height,
3540
3547
  marginRight: s.fieldGap,
3541
3548
  width: cssLen(labelWidth),
3542
3549
  fontSize: s.fontSize,
@@ -3562,14 +3569,14 @@ var SField = forwardRef(function SField2({
3562
3569
  {
3563
3570
  className: cn(
3564
3571
  "relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
3565
- 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]",
3572
+ 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]",
3566
3573
  disabled && "cursor-not-allowed"
3567
3574
  ),
3568
3575
  style: {
3569
3576
  // @ts-expect-error CSS 변수
3570
3577
  "--field-bc": borderColor,
3571
3578
  // focused/hovered prop이 명시된 경우 강조를 즉시 반영
3572
- ...interactive && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
3579
+ ...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
3573
3580
  ...multiline ? { minHeight: s.height } : { height: s.height },
3574
3581
  "width": cssLen(width),
3575
3582
  "borderRadius": s.radius,
@@ -3614,15 +3621,28 @@ function flattenOptions(options, depth = 1) {
3614
3621
  const out = [];
3615
3622
  for (const o of options) {
3616
3623
  const hasChildren = Array.isArray(o.children) && o.children.length > 0;
3617
- out.push({
3618
- value: String(o.value),
3619
- label: o.label,
3620
- disabled: !!o.disabled,
3621
- depth,
3622
- isGroup: hasChildren,
3623
- raw: o.value
3624
- });
3625
- if (hasChildren) out.push(...flattenOptions(o.children, depth + 1));
3624
+ if (hasChildren) {
3625
+ const childFlat = flattenOptions(o.children, depth + 1);
3626
+ const allChildrenDisabled = childFlat.every((c) => c.disabled);
3627
+ out.push({
3628
+ value: String(o.value),
3629
+ label: o.label,
3630
+ disabled: !!o.disabled || allChildrenDisabled,
3631
+ depth,
3632
+ isGroup: true,
3633
+ raw: o.value
3634
+ });
3635
+ out.push(...childFlat);
3636
+ } else {
3637
+ out.push({
3638
+ value: String(o.value),
3639
+ label: o.label,
3640
+ disabled: !!o.disabled,
3641
+ depth,
3642
+ isGroup: false,
3643
+ raw: o.value
3644
+ });
3645
+ }
3626
3646
  }
3627
3647
  return out;
3628
3648
  }
@@ -3746,6 +3766,9 @@ var SSelect = forwardRef(function SSelect2({
3746
3766
  );
3747
3767
  const flat = useMemo(() => flattenOptions(options), [options]);
3748
3768
  const selectable = useMemo(() => selectableOptions(flat), [flat]);
3769
+ const hasLeaf = useMemo(() => flat.some((o) => !o.isGroup), [flat]);
3770
+ const allOptionsDisabled = hasLeaf && selectable.length === 0;
3771
+ const effectiveDisabled = disabled || allOptionsDisabled;
3749
3772
  const showSearch = useSearch && selectable.length >= SEARCH_THRESHOLD;
3750
3773
  const labelByValue = useMemo(() => new Map(flat.map((o) => [o.value, o.label])), [flat]);
3751
3774
  const rawByValue = useMemo(() => new Map(flat.map((o) => [o.value, o.raw])), [flat]);
@@ -3812,10 +3835,10 @@ var SSelect = forwardRef(function SSelect2({
3812
3835
  Ariakit.Select,
3813
3836
  {
3814
3837
  ref: triggerRef,
3815
- disabled,
3838
+ disabled: effectiveDisabled,
3816
3839
  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",
3817
3840
  style: {
3818
- color: disabled ? "var(--cmp-select-text-disabled)" : isPlaceholder ? "var(--cmp-select-icon-default)" : "var(--cmp-select-text-default)"
3841
+ color: effectiveDisabled ? "var(--cmp-select-text-disabled)" : isPlaceholder ? "var(--cmp-select-icon-default)" : "var(--cmp-select-text-default)"
3819
3842
  },
3820
3843
  children: [
3821
3844
  isHtmlLabel(triggerText) ? /* @__PURE__ */ jsx(
@@ -3830,7 +3853,7 @@ var SSelect = forwardRef(function SSelect2({
3830
3853
  {
3831
3854
  name: "chevronDown",
3832
3855
  size: 12,
3833
- color: disabled ? "var(--cmp-select-icon-disabled)" : "var(--cmp-select-icon-default)",
3856
+ color: effectiveDisabled ? "var(--cmp-select-icon-disabled)" : "var(--cmp-select-icon-default)",
3834
3857
  className: cn("shrink-0 transition-transform duration-200", open && "rotate-180")
3835
3858
  }
3836
3859
  )
@@ -3844,7 +3867,7 @@ var SSelect = forwardRef(function SSelect2({
3844
3867
  portalElement: portalContainer,
3845
3868
  gutter: 4,
3846
3869
  sameWidth: !dropdownWidth,
3847
- 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",
3870
+ 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",
3848
3871
  style: {
3849
3872
  maxHeight: dropdownHeight,
3850
3873
  ...dropdownWidth ? { width: dropdownWidth } : {},
@@ -3885,7 +3908,7 @@ var SSelect = forwardRef(function SSelect2({
3885
3908
  ),
3886
3909
  hasItems ? /* @__PURE__ */ jsx(ItemList, { items: filtered, multi, selected, useSearch: showSearch }) : (
3887
3910
  // 원본 sd-select-listbox__empty (표시할 항목이 없을 때)
3888
- /* @__PURE__ */ 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." })
3911
+ /* @__PURE__ */ 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." })
3889
3912
  )
3890
3913
  ]
3891
3914
  }
@@ -3908,7 +3931,7 @@ var SSelect = forwardRef(function SSelect2({
3908
3931
  error: error || ruleError !== "",
3909
3932
  status: rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0,
3910
3933
  errorMessage: ruleError !== "" ? ruleError : errorMessage,
3911
- disabled,
3934
+ disabled: effectiveDisabled,
3912
3935
  width,
3913
3936
  className,
3914
3937
  style,
@@ -3943,7 +3966,11 @@ function ItemList({
3943
3966
  {
3944
3967
  className: cn(
3945
3968
  "select-none py-[4px] pr-[12px] text-[12px] leading-[20px] text-[color:var(--cmp-listItem-content-default)]",
3946
- 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"
3969
+ 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",
3970
+ // 하위가 전부 비활성이면(select.config 에서 bubble-up) 어미 그룹도 비활성 처리:
3971
+ // 텍스트는 회색(#888), depth1 그룹은 파란 배경 대신 회색(#EEE)으로 (depth2 는 #F6F6F6 유지)
3972
+ o.disabled && "text-[color:var(--cmp-listItem-content-disabled)]",
3973
+ o.disabled && isDepth1 && "bg-[var(--cmp-listItem-depth1-bg-disabled)]"
3947
3974
  ),
3948
3975
  style: { paddingLeft: padLeft },
3949
3976
  children: o.label
@@ -3970,15 +3997,21 @@ function ItemList({
3970
3997
  "span",
3971
3998
  {
3972
3999
  className: cn(
3973
- "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)]",
3974
- 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"
4000
+ "flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-[2px] border border-solid",
4001
+ o.disabled ? (
4002
+ // 비활성: 회색 채움(#E1E1E1) + 회색 테두리(#CCCCCC)
4003
+ "border-[color:var(--cmp-checkbox-border-disabled)] bg-[var(--cmp-checkbox-bg-disabled)]"
4004
+ ) : cn(
4005
+ "group-data-[active-item]:border-[color:var(--cmp-checkbox-checked-border-inverse)]",
4006
+ 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"
4007
+ )
3975
4008
  ),
3976
4009
  children: isSelected && /* @__PURE__ */ jsx(
3977
4010
  SIcon,
3978
4011
  {
3979
4012
  name: "checkboxCheck",
3980
4013
  size: 12,
3981
- color: "var(--cmp-checkbox-checked-icon-default)"
4014
+ color: o.disabled ? "var(--cmp-checkbox-checked-icon-disabled)" : "var(--cmp-checkbox-checked-icon-default)"
3982
4015
  }
3983
4016
  )
3984
4017
  }