sellmate-design-system-react 0.1.7 → 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 (146) hide show
  1. package/dist/components/SActionModal/SActionModal.cjs +11 -3
  2. package/dist/components/SActionModal/SActionModal.cjs.map +1 -1
  3. package/dist/components/SActionModal/SActionModal.js +11 -3
  4. package/dist/components/SActionModal/SActionModal.js.map +1 -1
  5. package/dist/components/SBarcodeInput/SBarcodeInput.cjs +226 -209
  6. package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
  7. package/dist/components/SBarcodeInput/SBarcodeInput.js +226 -209
  8. package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
  9. package/dist/components/SCalendar/SCalendar.cjs +9 -1
  10. package/dist/components/SCalendar/SCalendar.cjs.map +1 -1
  11. package/dist/components/SCalendar/SCalendar.js +9 -1
  12. package/dist/components/SCalendar/SCalendar.js.map +1 -1
  13. package/dist/components/SChip/SChip.cjs +9 -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 +9 -1
  17. package/dist/components/SChip/SChip.js.map +1 -1
  18. package/dist/components/SChipInput/SChipInput.cjs +260 -235
  19. package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
  20. package/dist/components/SChipInput/SChipInput.js +259 -235
  21. package/dist/components/SChipInput/SChipInput.js.map +1 -1
  22. package/dist/components/SCircleProgress/SCircleProgress.cjs +56 -58
  23. package/dist/components/SCircleProgress/SCircleProgress.cjs.map +1 -1
  24. package/dist/components/SCircleProgress/SCircleProgress.js +56 -58
  25. package/dist/components/SCircleProgress/SCircleProgress.js.map +1 -1
  26. package/dist/components/SConfirmModal/SConfirmModal.cjs +9 -1
  27. package/dist/components/SConfirmModal/SConfirmModal.cjs.map +1 -1
  28. package/dist/components/SConfirmModal/SConfirmModal.js +9 -1
  29. package/dist/components/SConfirmModal/SConfirmModal.js.map +1 -1
  30. package/dist/components/SDatePicker/SDatePicker.cjs +247 -221
  31. package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
  32. package/dist/components/SDatePicker/SDatePicker.js +247 -221
  33. package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
  34. package/dist/components/SDateRangePicker/SDateRangePicker.cjs +308 -256
  35. package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
  36. package/dist/components/SDateRangePicker/SDateRangePicker.js +308 -256
  37. package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
  38. package/dist/components/SDropdownButton/SDropdownButton.cjs +51 -4
  39. package/dist/components/SDropdownButton/SDropdownButton.cjs.map +1 -1
  40. package/dist/components/SDropdownButton/SDropdownButton.js +52 -5
  41. package/dist/components/SDropdownButton/SDropdownButton.js.map +1 -1
  42. package/dist/components/SField/SField.cjs +226 -21
  43. package/dist/components/SField/SField.cjs.map +1 -1
  44. package/dist/components/SField/SField.d.ts +11 -0
  45. package/dist/components/SField/SField.js +226 -21
  46. package/dist/components/SField/SField.js.map +1 -1
  47. package/dist/components/SFilePicker/SFilePicker.cjs +306 -278
  48. package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
  49. package/dist/components/SFilePicker/SFilePicker.d.ts +4 -2
  50. package/dist/components/SFilePicker/SFilePicker.js +306 -278
  51. package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
  52. package/dist/components/SGhostButton/SGhostButton.cjs +8 -0
  53. package/dist/components/SGhostButton/SGhostButton.cjs.map +1 -1
  54. package/dist/components/SGhostButton/SGhostButton.js +8 -0
  55. package/dist/components/SGhostButton/SGhostButton.js.map +1 -1
  56. package/dist/components/SGuide/SGuide.cjs +12 -1
  57. package/dist/components/SGuide/SGuide.cjs.map +1 -1
  58. package/dist/components/SGuide/SGuide.js +12 -1
  59. package/dist/components/SGuide/SGuide.js.map +1 -1
  60. package/dist/components/SInput/SInput.cjs +226 -209
  61. package/dist/components/SInput/SInput.cjs.map +1 -1
  62. package/dist/components/SInput/SInput.js +226 -209
  63. package/dist/components/SInput/SInput.js.map +1 -1
  64. package/dist/components/SKeyValueTable/SKeyValueTable.cjs +640 -453
  65. package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
  66. package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +3 -1
  67. package/dist/components/SKeyValueTable/SKeyValueTable.js +640 -453
  68. package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
  69. package/dist/components/SLoadingContainer/SLoadingContainer.cjs +64 -58
  70. package/dist/components/SLoadingContainer/SLoadingContainer.cjs.map +1 -1
  71. package/dist/components/SLoadingContainer/SLoadingContainer.js +64 -58
  72. package/dist/components/SLoadingContainer/SLoadingContainer.js.map +1 -1
  73. package/dist/components/SLoadingContainer/loading.cjs +64 -58
  74. package/dist/components/SLoadingContainer/loading.cjs.map +1 -1
  75. package/dist/components/SLoadingContainer/loading.js +64 -58
  76. package/dist/components/SLoadingContainer/loading.js.map +1 -1
  77. package/dist/components/SLoadingModal/SLoadingModal.cjs +68 -61
  78. package/dist/components/SLoadingModal/SLoadingModal.cjs.map +1 -1
  79. package/dist/components/SLoadingModal/SLoadingModal.js +68 -61
  80. package/dist/components/SLoadingModal/SLoadingModal.js.map +1 -1
  81. package/dist/components/SModalContainer/SModalContainer.cjs +9 -1
  82. package/dist/components/SModalContainer/SModalContainer.cjs.map +1 -1
  83. package/dist/components/SModalContainer/SModalContainer.js +9 -1
  84. package/dist/components/SModalContainer/SModalContainer.js.map +1 -1
  85. package/dist/components/SNumberInput/SNumberInput.cjs +334 -50
  86. package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
  87. package/dist/components/SNumberInput/SNumberInput.d.ts +2 -0
  88. package/dist/components/SNumberInput/SNumberInput.js +334 -50
  89. package/dist/components/SNumberInput/SNumberInput.js.map +1 -1
  90. package/dist/components/SPagination/SPagination.cjs +1 -1
  91. package/dist/components/SPagination/SPagination.cjs.map +1 -1
  92. package/dist/components/SPagination/SPagination.js +1 -1
  93. package/dist/components/SPagination/SPagination.js.map +1 -1
  94. package/dist/components/SPopover/SPopover.cjs +20 -3
  95. package/dist/components/SPopover/SPopover.cjs.map +1 -1
  96. package/dist/components/SPopover/SPopover.js +20 -4
  97. package/dist/components/SPopover/SPopover.js.map +1 -1
  98. package/dist/components/SPopup/SPopup.cjs +2 -2
  99. package/dist/components/SPopup/SPopup.cjs.map +1 -1
  100. package/dist/components/SPopup/SPopup.js +2 -2
  101. package/dist/components/SPopup/SPopup.js.map +1 -1
  102. package/dist/components/SPortal/SPortal.cjs +8 -0
  103. package/dist/components/SPortal/SPortal.cjs.map +1 -1
  104. package/dist/components/SPortal/SPortal.js +8 -0
  105. package/dist/components/SPortal/SPortal.js.map +1 -1
  106. package/dist/components/SSelect/SSelect.cjs +76 -32
  107. package/dist/components/SSelect/SSelect.cjs.map +1 -1
  108. package/dist/components/SSelect/SSelect.js +76 -32
  109. package/dist/components/SSelect/SSelect.js.map +1 -1
  110. package/dist/components/STable/STable.cjs +133 -91
  111. package/dist/components/STable/STable.cjs.map +1 -1
  112. package/dist/components/STable/STable.js +133 -91
  113. package/dist/components/STable/STable.js.map +1 -1
  114. package/dist/components/STextLink/STextLink.cjs +137 -3
  115. package/dist/components/STextLink/STextLink.cjs.map +1 -1
  116. package/dist/components/STextLink/STextLink.d.ts +1 -1
  117. package/dist/components/STextLink/STextLink.js +118 -4
  118. package/dist/components/STextLink/STextLink.js.map +1 -1
  119. package/dist/components/STextarea/STextarea.cjs +226 -21
  120. package/dist/components/STextarea/STextarea.cjs.map +1 -1
  121. package/dist/components/STextarea/STextarea.js +226 -21
  122. package/dist/components/STextarea/STextarea.js.map +1 -1
  123. package/dist/components/SToast/SToast.cjs +8 -0
  124. package/dist/components/SToast/SToast.cjs.map +1 -1
  125. package/dist/components/SToast/SToast.js +8 -0
  126. package/dist/components/SToast/SToast.js.map +1 -1
  127. package/dist/components/SToast/SToastContainer.cjs +11 -3
  128. package/dist/components/SToast/SToastContainer.cjs.map +1 -1
  129. package/dist/components/SToast/SToastContainer.js +11 -3
  130. package/dist/components/SToast/SToastContainer.js.map +1 -1
  131. package/dist/components/STooltip/STooltip.cjs +217 -14
  132. package/dist/components/STooltip/STooltip.cjs.map +1 -1
  133. package/dist/components/STooltip/STooltip.js +217 -14
  134. package/dist/components/STooltip/STooltip.js.map +1 -1
  135. package/dist/index.cjs +532 -300
  136. package/dist/index.cjs.map +1 -1
  137. package/dist/index.js +531 -300
  138. package/dist/index.js.map +1 -1
  139. package/dist/lib/floating-anim.cjs +8 -0
  140. package/dist/lib/floating-anim.cjs.map +1 -1
  141. package/dist/lib/floating-anim.d.ts +5 -1
  142. package/dist/lib/floating-anim.js +8 -0
  143. package/dist/lib/floating-anim.js.map +1 -1
  144. package/dist/styles.css +175 -66
  145. package/dist/theme.css +49 -22
  146. package/package.json +1 -1
@@ -2860,12 +2860,20 @@ var SIcon = forwardRef(function SIcon2({ name, size = 24, color, rotate, label,
2860
2860
  // src/lib/floating-anim.ts
2861
2861
  var FLOATING_SLIDE_ANIM = [
2862
2862
  "data-[state=open]:data-[side=top]:animate-floating-in-top",
2863
+ "data-[state=delayed-open]:data-[side=top]:animate-floating-in-top",
2864
+ "data-[state=instant-open]:data-[side=top]:animate-floating-in-top",
2863
2865
  "data-[state=closed]:data-[side=top]:animate-floating-out-top",
2864
2866
  "data-[state=open]:data-[side=bottom]:animate-floating-in-bottom",
2867
+ "data-[state=delayed-open]:data-[side=bottom]:animate-floating-in-bottom",
2868
+ "data-[state=instant-open]:data-[side=bottom]:animate-floating-in-bottom",
2865
2869
  "data-[state=closed]:data-[side=bottom]:animate-floating-out-bottom",
2866
2870
  "data-[state=open]:data-[side=left]:animate-floating-in-left",
2871
+ "data-[state=delayed-open]:data-[side=left]:animate-floating-in-left",
2872
+ "data-[state=instant-open]:data-[side=left]:animate-floating-in-left",
2867
2873
  "data-[state=closed]:data-[side=left]:animate-floating-out-left",
2868
2874
  "data-[state=open]:data-[side=right]:animate-floating-in-right",
2875
+ "data-[state=delayed-open]:data-[side=right]:animate-floating-in-right",
2876
+ "data-[state=instant-open]:data-[side=right]:animate-floating-in-right",
2869
2877
  "data-[state=closed]:data-[side=right]:animate-floating-out-right"
2870
2878
  ].join(" ");
2871
2879
 
@@ -3060,7 +3068,8 @@ var HIDE_DELAY_MS = 100;
3060
3068
  function useBody(content, message = []) {
3061
3069
  if (content != null) return content;
3062
3070
  if (message.length === 0) return null;
3063
- return /* @__PURE__ */ jsx(Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsx("div", { children: line }, i)) });
3071
+ const singleLine = message.length === 1;
3072
+ return /* @__PURE__ */ jsx(Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsx("div", { className: singleLine ? "leading-[24px]" : void 0, children: line }, i)) });
3064
3073
  }
3065
3074
  var STooltip = forwardRef(function STooltip2({
3066
3075
  content,
@@ -3118,7 +3127,7 @@ var STooltip = forwardRef(function STooltip2({
3118
3127
  if (disabled || body == null) return /* @__PURE__ */ jsx(Fragment, { children: triggerNode });
3119
3128
  const isHover = trigger === "hover";
3120
3129
  const contentClass = cn(
3121
- "z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px]",
3130
+ "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)]",
3122
3131
  FLOATING_SLIDE_ANIM,
3123
3132
  className
3124
3133
  );
@@ -3163,11 +3172,17 @@ var STooltip = forwardRef(function STooltip2({
3163
3172
  /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-[12px]", children: [
3164
3173
  /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: body }),
3165
3174
  useClose && /* @__PURE__ */ jsx(
3166
- RPopover2.Close,
3175
+ SGhostButton,
3167
3176
  {
3168
- "aria-label": "\uB2EB\uAE30",
3169
- className: "shrink-0 cursor-pointer opacity-70 hover:opacity-100",
3170
- children: /* @__PURE__ */ jsx(SIcon, { name: "close", size: 16, color: fg })
3177
+ icon: "close",
3178
+ size: "xs",
3179
+ intent: tooltipType === "default" ? "inverse" : "default",
3180
+ ariaLabel: "\uB2EB\uAE30",
3181
+ className: "shrink-0",
3182
+ onClick: () => {
3183
+ cancelHide();
3184
+ setOpen(false);
3185
+ }
3171
3186
  }
3172
3187
  )
3173
3188
  ] }),
@@ -3205,8 +3220,8 @@ function useFormField(field) {
3205
3220
  }, [ctx, name]);
3206
3221
  }
3207
3222
  var FIELD_SIZE = {
3208
- sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon: 12 },
3209
- md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon: 12 }
3223
+ sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon: 16 },
3224
+ md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon: 16 }
3210
3225
  };
3211
3226
  var ALIGN = {
3212
3227
  start: "flex-start",
@@ -3221,6 +3236,7 @@ var SField = forwardRef(function SField2({
3221
3236
  labelTooltip = "",
3222
3237
  labelTooltipProps,
3223
3238
  labelWidth,
3239
+ labelHeight,
3224
3240
  size = "sm",
3225
3241
  addonLabel = "",
3226
3242
  addonAlign = "start",
@@ -3235,6 +3251,7 @@ var SField = forwardRef(function SField2({
3235
3251
  readOnly = false,
3236
3252
  width,
3237
3253
  multiline = false,
3254
+ borderless = false,
3238
3255
  children,
3239
3256
  className,
3240
3257
  style,
@@ -3268,8 +3285,8 @@ var SField = forwardRef(function SField2({
3268
3285
  const resolvedSuccess = status === "pass";
3269
3286
  const showError = resolvedError && errorMessage !== "";
3270
3287
  const interactive = !disabled && !readOnly;
3271
- 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)";
3272
- const bgColor = disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
3288
+ 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)";
3289
+ const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
3273
3290
  const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
3274
3291
  return /* @__PURE__ */ jsx(
3275
3292
  "div",
@@ -3286,7 +3303,7 @@ var SField = forwardRef(function SField2({
3286
3303
  {
3287
3304
  className: "flex shrink-0 items-center font-bold text-(--sys-color-field-text-default)",
3288
3305
  style: {
3289
- height: s.height,
3306
+ height: cssLen(labelHeight) ?? s.height,
3290
3307
  marginRight: s.fieldGap,
3291
3308
  width: cssLen(labelWidth),
3292
3309
  fontSize: s.fontSize,
@@ -3312,14 +3329,14 @@ var SField = forwardRef(function SField2({
3312
3329
  {
3313
3330
  className: cn(
3314
3331
  "relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
3315
- 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]",
3332
+ 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]",
3316
3333
  disabled && "cursor-not-allowed"
3317
3334
  ),
3318
3335
  style: {
3319
3336
  // @ts-expect-error CSS 변수
3320
3337
  "--field-bc": borderColor,
3321
3338
  // focused/hovered prop이 명시된 경우 강조를 즉시 반영
3322
- ...interactive && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
3339
+ ...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
3323
3340
  ...multiline ? { minHeight: s.height } : { height: s.height },
3324
3341
  "width": cssLen(width),
3325
3342
  "borderRadius": s.radius,
@@ -3364,15 +3381,28 @@ function flattenOptions(options, depth = 1) {
3364
3381
  const out = [];
3365
3382
  for (const o of options) {
3366
3383
  const hasChildren = Array.isArray(o.children) && o.children.length > 0;
3367
- out.push({
3368
- value: String(o.value),
3369
- label: o.label,
3370
- disabled: !!o.disabled,
3371
- depth,
3372
- isGroup: hasChildren,
3373
- raw: o.value
3374
- });
3375
- if (hasChildren) out.push(...flattenOptions(o.children, depth + 1));
3384
+ if (hasChildren) {
3385
+ const childFlat = flattenOptions(o.children, depth + 1);
3386
+ const allChildrenDisabled = childFlat.every((c) => c.disabled);
3387
+ out.push({
3388
+ value: String(o.value),
3389
+ label: o.label,
3390
+ disabled: !!o.disabled || allChildrenDisabled,
3391
+ depth,
3392
+ isGroup: true,
3393
+ raw: o.value
3394
+ });
3395
+ out.push(...childFlat);
3396
+ } else {
3397
+ out.push({
3398
+ value: String(o.value),
3399
+ label: o.label,
3400
+ disabled: !!o.disabled,
3401
+ depth,
3402
+ isGroup: false,
3403
+ raw: o.value
3404
+ });
3405
+ }
3376
3406
  }
3377
3407
  return out;
3378
3408
  }
@@ -3496,6 +3526,9 @@ var SSelect = forwardRef(function SSelect2({
3496
3526
  );
3497
3527
  const flat = useMemo(() => flattenOptions(options), [options]);
3498
3528
  const selectable = useMemo(() => selectableOptions(flat), [flat]);
3529
+ const hasLeaf = useMemo(() => flat.some((o) => !o.isGroup), [flat]);
3530
+ const allOptionsDisabled = hasLeaf && selectable.length === 0;
3531
+ const effectiveDisabled = disabled || allOptionsDisabled;
3499
3532
  const showSearch = useSearch && selectable.length >= SEARCH_THRESHOLD;
3500
3533
  const labelByValue = useMemo(() => new Map(flat.map((o) => [o.value, o.label])), [flat]);
3501
3534
  const rawByValue = useMemo(() => new Map(flat.map((o) => [o.value, o.raw])), [flat]);
@@ -3546,6 +3579,7 @@ var SSelect = forwardRef(function SSelect2({
3546
3579
  const selectStore = /* @__PURE__ */ jsxs(
3547
3580
  Ariakit.SelectProvider,
3548
3581
  {
3582
+ animated: portalContainer == null ? 150 : false,
3549
3583
  value: multi ? selected : selected[0] ?? "",
3550
3584
  setValue: (v) => emit(Array.isArray(v) ? v : v === "" ? [] : [v]),
3551
3585
  open,
@@ -3561,10 +3595,10 @@ var SSelect = forwardRef(function SSelect2({
3561
3595
  Ariakit.Select,
3562
3596
  {
3563
3597
  ref: triggerRef,
3564
- disabled,
3598
+ disabled: effectiveDisabled,
3565
3599
  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",
3566
3600
  style: {
3567
- color: disabled ? "var(--cmp-select-text-disabled)" : isPlaceholder ? "var(--cmp-select-icon-default)" : "var(--cmp-select-text-default)"
3601
+ color: effectiveDisabled ? "var(--cmp-select-text-disabled)" : isPlaceholder ? "var(--cmp-select-icon-default)" : "var(--cmp-select-text-default)"
3568
3602
  },
3569
3603
  children: [
3570
3604
  isHtmlLabel(triggerText) ? /* @__PURE__ */ jsx(
@@ -3579,7 +3613,7 @@ var SSelect = forwardRef(function SSelect2({
3579
3613
  {
3580
3614
  name: "chevronDown",
3581
3615
  size: 12,
3582
- color: disabled ? "var(--cmp-select-icon-disabled)" : "var(--cmp-select-icon-default)",
3616
+ color: effectiveDisabled ? "var(--cmp-select-icon-disabled)" : "var(--cmp-select-icon-default)",
3583
3617
  className: cn("shrink-0 transition-transform duration-200", open && "rotate-180")
3584
3618
  }
3585
3619
  )
@@ -3593,7 +3627,7 @@ var SSelect = forwardRef(function SSelect2({
3593
3627
  portalElement: portalContainer,
3594
3628
  gutter: 4,
3595
3629
  sameWidth: !dropdownWidth,
3596
- 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)]",
3630
+ 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",
3597
3631
  style: {
3598
3632
  maxHeight: dropdownHeight,
3599
3633
  ...dropdownWidth ? { width: dropdownWidth } : {},
@@ -3634,7 +3668,7 @@ var SSelect = forwardRef(function SSelect2({
3634
3668
  ),
3635
3669
  hasItems ? /* @__PURE__ */ jsx(ItemList, { items: filtered, multi, selected, useSearch: showSearch }) : (
3636
3670
  // 원본 sd-select-listbox__empty (표시할 항목이 없을 때)
3637
- /* @__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." })
3671
+ /* @__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." })
3638
3672
  )
3639
3673
  ]
3640
3674
  }
@@ -3657,7 +3691,7 @@ var SSelect = forwardRef(function SSelect2({
3657
3691
  error: error || ruleError !== "",
3658
3692
  status: rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0,
3659
3693
  errorMessage: ruleError !== "" ? ruleError : errorMessage,
3660
- disabled,
3694
+ disabled: effectiveDisabled,
3661
3695
  width,
3662
3696
  className,
3663
3697
  style,
@@ -3692,7 +3726,11 @@ function ItemList({
3692
3726
  {
3693
3727
  className: cn(
3694
3728
  "select-none py-[4px] pr-[12px] text-[12px] leading-[20px] text-[color:var(--cmp-listItem-content-default)]",
3695
- 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"
3729
+ 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",
3730
+ // 하위가 전부 비활성이면(select.config 에서 bubble-up) 어미 그룹도 비활성 처리:
3731
+ // 텍스트는 회색(#888), depth1 그룹은 파란 배경 대신 회색(#EEE)으로 (depth2 는 #F6F6F6 유지)
3732
+ o.disabled && "text-[color:var(--cmp-listItem-content-disabled)]",
3733
+ o.disabled && isDepth1 && "bg-[var(--cmp-listItem-depth1-bg-disabled)]"
3696
3734
  ),
3697
3735
  style: { paddingLeft: padLeft },
3698
3736
  children: o.label
@@ -3719,15 +3757,21 @@ function ItemList({
3719
3757
  "span",
3720
3758
  {
3721
3759
  className: cn(
3722
- "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)]",
3723
- 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"
3760
+ "flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-[2px] border border-solid",
3761
+ o.disabled ? (
3762
+ // 비활성: 회색 채움(#E1E1E1) + 회색 테두리(#CCCCCC)
3763
+ "border-[color:var(--cmp-checkbox-border-disabled)] bg-[var(--cmp-checkbox-bg-disabled)]"
3764
+ ) : cn(
3765
+ "group-data-[active-item]:border-[color:var(--cmp-checkbox-checked-border-inverse)]",
3766
+ 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"
3767
+ )
3724
3768
  ),
3725
3769
  children: isSelected && /* @__PURE__ */ jsx(
3726
3770
  SIcon,
3727
3771
  {
3728
3772
  name: "checkboxCheck",
3729
3773
  size: 12,
3730
- color: "var(--cmp-checkbox-checked-icon-default)"
3774
+ color: o.disabled ? "var(--cmp-checkbox-checked-icon-disabled)" : "var(--cmp-checkbox-checked-icon-default)"
3731
3775
  }
3732
3776
  )
3733
3777
  }