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
@@ -2927,11 +2927,11 @@ var RADIUS = 34;
2927
2927
  var STROKE = 12;
2928
2928
  var CIRCUMFERENCE = 2 * Math.PI * RADIUS;
2929
2929
  var COLOR_MAP = {
2930
- primary: { arc: "var(--cmp-spinner-color-arc)", track: "var(--cmp-spinner-color-track)" },
2930
+ primary: { arc: "var(--cmp-progress-active-color)", track: "var(--cmp-progress-color-track)" },
2931
2931
  // inverse: 어두운 배경용 — arc 흰색, track 은 흰색 40%(회색 링)
2932
2932
  inverse: { arc: "var(--color-white)", track: "rgba(255,255,255,0.4)" },
2933
- error: { arc: "var(--color-red-75)", track: "var(--cmp-spinner-color-track)" },
2934
- complete: { arc: "#01BB4B", track: "var(--cmp-spinner-color-track)" }
2933
+ error: { arc: "var(--color-red-75)", track: "var(--cmp-progress-color-track)" },
2934
+ complete: { arc: "#01BB4B", track: "var(--cmp-progress-color-track)" }
2935
2935
  };
2936
2936
  var clamp = (v) => Number.isFinite(v) ? Math.max(0, Math.min(100, v)) : 0;
2937
2937
  var SCircleProgress = forwardRef(
@@ -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 })
@@ -3102,12 +3100,20 @@ function usePortalContainer() {
3102
3100
  // src/lib/floating-anim.ts
3103
3101
  var FLOATING_SLIDE_ANIM = [
3104
3102
  "data-[state=open]:data-[side=top]:animate-floating-in-top",
3103
+ "data-[state=delayed-open]:data-[side=top]:animate-floating-in-top",
3104
+ "data-[state=instant-open]:data-[side=top]:animate-floating-in-top",
3105
3105
  "data-[state=closed]:data-[side=top]:animate-floating-out-top",
3106
3106
  "data-[state=open]:data-[side=bottom]:animate-floating-in-bottom",
3107
+ "data-[state=delayed-open]:data-[side=bottom]:animate-floating-in-bottom",
3108
+ "data-[state=instant-open]:data-[side=bottom]:animate-floating-in-bottom",
3107
3109
  "data-[state=closed]:data-[side=bottom]:animate-floating-out-bottom",
3108
3110
  "data-[state=open]:data-[side=left]:animate-floating-in-left",
3111
+ "data-[state=delayed-open]:data-[side=left]:animate-floating-in-left",
3112
+ "data-[state=instant-open]:data-[side=left]:animate-floating-in-left",
3109
3113
  "data-[state=closed]:data-[side=left]:animate-floating-out-left",
3110
3114
  "data-[state=open]:data-[side=right]:animate-floating-in-right",
3115
+ "data-[state=delayed-open]:data-[side=right]:animate-floating-in-right",
3116
+ "data-[state=instant-open]:data-[side=right]:animate-floating-in-right",
3111
3117
  "data-[state=closed]:data-[side=right]:animate-floating-out-right"
3112
3118
  ].join(" ");
3113
3119
 
@@ -3302,7 +3308,8 @@ var HIDE_DELAY_MS = 100;
3302
3308
  function useBody(content, message = []) {
3303
3309
  if (content != null) return content;
3304
3310
  if (message.length === 0) return null;
3305
- 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)) });
3306
3313
  }
3307
3314
  var STooltip = forwardRef(function STooltip2({
3308
3315
  content,
@@ -3360,7 +3367,7 @@ var STooltip = forwardRef(function STooltip2({
3360
3367
  if (disabled || body == null) return /* @__PURE__ */ jsx(Fragment, { children: triggerNode });
3361
3368
  const isHover = trigger === "hover";
3362
3369
  const contentClass = cn(
3363
- "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)]",
3364
3371
  FLOATING_SLIDE_ANIM,
3365
3372
  className
3366
3373
  );
@@ -3405,11 +3412,17 @@ var STooltip = forwardRef(function STooltip2({
3405
3412
  /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-[12px]", children: [
3406
3413
  /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: body }),
3407
3414
  useClose && /* @__PURE__ */ jsx(
3408
- RPopover2.Close,
3415
+ SGhostButton,
3409
3416
  {
3410
- "aria-label": "\uB2EB\uAE30",
3411
- className: "shrink-0 cursor-pointer opacity-70 hover:opacity-100",
3412
- 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
+ }
3413
3426
  }
3414
3427
  )
3415
3428
  ] }),
@@ -3447,8 +3460,8 @@ function useFormField(field) {
3447
3460
  }, [ctx, name]);
3448
3461
  }
3449
3462
  var FIELD_SIZE = {
3450
- sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon: 12 },
3451
- 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 }
3452
3465
  };
3453
3466
  var ALIGN = {
3454
3467
  start: "flex-start",
@@ -3463,6 +3476,7 @@ var SField = forwardRef(function SField2({
3463
3476
  labelTooltip = "",
3464
3477
  labelTooltipProps,
3465
3478
  labelWidth,
3479
+ labelHeight,
3466
3480
  size = "sm",
3467
3481
  addonLabel = "",
3468
3482
  addonAlign = "start",
@@ -3477,6 +3491,7 @@ var SField = forwardRef(function SField2({
3477
3491
  readOnly = false,
3478
3492
  width,
3479
3493
  multiline = false,
3494
+ borderless = false,
3480
3495
  children,
3481
3496
  className,
3482
3497
  style,
@@ -3510,8 +3525,8 @@ var SField = forwardRef(function SField2({
3510
3525
  const resolvedSuccess = status === "pass";
3511
3526
  const showError = resolvedError && errorMessage !== "";
3512
3527
  const interactive = !disabled && !readOnly;
3513
- 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)";
3514
- 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)";
3515
3530
  const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
3516
3531
  return /* @__PURE__ */ jsx(
3517
3532
  "div",
@@ -3528,7 +3543,7 @@ var SField = forwardRef(function SField2({
3528
3543
  {
3529
3544
  className: "flex shrink-0 items-center font-bold text-(--sys-color-field-text-default)",
3530
3545
  style: {
3531
- height: s.height,
3546
+ height: cssLen(labelHeight) ?? s.height,
3532
3547
  marginRight: s.fieldGap,
3533
3548
  width: cssLen(labelWidth),
3534
3549
  fontSize: s.fontSize,
@@ -3554,14 +3569,14 @@ var SField = forwardRef(function SField2({
3554
3569
  {
3555
3570
  className: cn(
3556
3571
  "relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
3557
- 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]",
3558
3573
  disabled && "cursor-not-allowed"
3559
3574
  ),
3560
3575
  style: {
3561
3576
  // @ts-expect-error CSS 변수
3562
3577
  "--field-bc": borderColor,
3563
3578
  // focused/hovered prop이 명시된 경우 강조를 즉시 반영
3564
- ...interactive && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
3579
+ ...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
3565
3580
  ...multiline ? { minHeight: s.height } : { height: s.height },
3566
3581
  "width": cssLen(width),
3567
3582
  "borderRadius": s.radius,
@@ -3606,15 +3621,28 @@ function flattenOptions(options, depth = 1) {
3606
3621
  const out = [];
3607
3622
  for (const o of options) {
3608
3623
  const hasChildren = Array.isArray(o.children) && o.children.length > 0;
3609
- out.push({
3610
- value: String(o.value),
3611
- label: o.label,
3612
- disabled: !!o.disabled,
3613
- depth,
3614
- isGroup: hasChildren,
3615
- raw: o.value
3616
- });
3617
- 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
+ }
3618
3646
  }
3619
3647
  return out;
3620
3648
  }
@@ -3738,6 +3766,9 @@ var SSelect = forwardRef(function SSelect2({
3738
3766
  );
3739
3767
  const flat = useMemo(() => flattenOptions(options), [options]);
3740
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;
3741
3772
  const showSearch = useSearch && selectable.length >= SEARCH_THRESHOLD;
3742
3773
  const labelByValue = useMemo(() => new Map(flat.map((o) => [o.value, o.label])), [flat]);
3743
3774
  const rawByValue = useMemo(() => new Map(flat.map((o) => [o.value, o.raw])), [flat]);
@@ -3788,6 +3819,7 @@ var SSelect = forwardRef(function SSelect2({
3788
3819
  const selectStore = /* @__PURE__ */ jsxs(
3789
3820
  Ariakit.SelectProvider,
3790
3821
  {
3822
+ animated: portalContainer == null ? 150 : false,
3791
3823
  value: multi ? selected : selected[0] ?? "",
3792
3824
  setValue: (v) => emit(Array.isArray(v) ? v : v === "" ? [] : [v]),
3793
3825
  open,
@@ -3803,10 +3835,10 @@ var SSelect = forwardRef(function SSelect2({
3803
3835
  Ariakit.Select,
3804
3836
  {
3805
3837
  ref: triggerRef,
3806
- disabled,
3838
+ disabled: effectiveDisabled,
3807
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",
3808
3840
  style: {
3809
- 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)"
3810
3842
  },
3811
3843
  children: [
3812
3844
  isHtmlLabel(triggerText) ? /* @__PURE__ */ jsx(
@@ -3821,7 +3853,7 @@ var SSelect = forwardRef(function SSelect2({
3821
3853
  {
3822
3854
  name: "chevronDown",
3823
3855
  size: 12,
3824
- 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)",
3825
3857
  className: cn("shrink-0 transition-transform duration-200", open && "rotate-180")
3826
3858
  }
3827
3859
  )
@@ -3835,7 +3867,7 @@ var SSelect = forwardRef(function SSelect2({
3835
3867
  portalElement: portalContainer,
3836
3868
  gutter: 4,
3837
3869
  sameWidth: !dropdownWidth,
3838
- 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)]",
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",
3839
3871
  style: {
3840
3872
  maxHeight: dropdownHeight,
3841
3873
  ...dropdownWidth ? { width: dropdownWidth } : {},
@@ -3876,7 +3908,7 @@ var SSelect = forwardRef(function SSelect2({
3876
3908
  ),
3877
3909
  hasItems ? /* @__PURE__ */ jsx(ItemList, { items: filtered, multi, selected, useSearch: showSearch }) : (
3878
3910
  // 원본 sd-select-listbox__empty (표시할 항목이 없을 때)
3879
- /* @__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." })
3880
3912
  )
3881
3913
  ]
3882
3914
  }
@@ -3899,7 +3931,7 @@ var SSelect = forwardRef(function SSelect2({
3899
3931
  error: error || ruleError !== "",
3900
3932
  status: rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0,
3901
3933
  errorMessage: ruleError !== "" ? ruleError : errorMessage,
3902
- disabled,
3934
+ disabled: effectiveDisabled,
3903
3935
  width,
3904
3936
  className,
3905
3937
  style,
@@ -3934,7 +3966,11 @@ function ItemList({
3934
3966
  {
3935
3967
  className: cn(
3936
3968
  "select-none py-[4px] pr-[12px] text-[12px] leading-[20px] text-[color:var(--cmp-listItem-content-default)]",
3937
- 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)]"
3938
3974
  ),
3939
3975
  style: { paddingLeft: padLeft },
3940
3976
  children: o.label
@@ -3961,15 +3997,21 @@ function ItemList({
3961
3997
  "span",
3962
3998
  {
3963
3999
  className: cn(
3964
- "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)]",
3965
- 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
+ )
3966
4008
  ),
3967
4009
  children: isSelected && /* @__PURE__ */ jsx(
3968
4010
  SIcon,
3969
4011
  {
3970
4012
  name: "checkboxCheck",
3971
4013
  size: 12,
3972
- color: "var(--cmp-checkbox-checked-icon-default)"
4014
+ color: o.disabled ? "var(--cmp-checkbox-checked-icon-disabled)" : "var(--cmp-checkbox-checked-icon-default)"
3973
4015
  }
3974
4016
  )
3975
4017
  }