sellmate-design-system-react 0.1.8 → 0.1.10

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 (110) 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 +217 -208
  6. package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
  7. package/dist/components/SBarcodeInput/SBarcodeInput.js +217 -208
  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 +234 -220
  19. package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
  20. package/dist/components/SChipInput/SChipInput.js +234 -220
  21. package/dist/components/SChipInput/SChipInput.js.map +1 -1
  22. package/dist/components/SCircleProgress/SCircleProgress.cjs +31 -14
  23. package/dist/components/SCircleProgress/SCircleProgress.cjs.map +1 -1
  24. package/dist/components/SCircleProgress/SCircleProgress.d.ts +2 -0
  25. package/dist/components/SCircleProgress/SCircleProgress.js +31 -14
  26. package/dist/components/SCircleProgress/SCircleProgress.js.map +1 -1
  27. package/dist/components/SDatePicker/SDatePicker.cjs +222 -213
  28. package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
  29. package/dist/components/SDatePicker/SDatePicker.js +222 -213
  30. package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
  31. package/dist/components/SDateRangePicker/SDateRangePicker.cjs +297 -262
  32. package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
  33. package/dist/components/SDateRangePicker/SDateRangePicker.js +297 -262
  34. package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
  35. package/dist/components/SDropdownButton/SDropdownButton.cjs +4 -4
  36. package/dist/components/SDropdownButton/SDropdownButton.cjs.map +1 -1
  37. package/dist/components/SDropdownButton/SDropdownButton.js +4 -4
  38. package/dist/components/SDropdownButton/SDropdownButton.js.map +1 -1
  39. package/dist/components/SField/SField.cjs +217 -20
  40. package/dist/components/SField/SField.cjs.map +1 -1
  41. package/dist/components/SField/SField.d.ts +11 -0
  42. package/dist/components/SField/SField.js +217 -20
  43. package/dist/components/SField/SField.js.map +1 -1
  44. package/dist/components/SFilePicker/SFilePicker.cjs +315 -276
  45. package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
  46. package/dist/components/SFilePicker/SFilePicker.d.ts +4 -2
  47. package/dist/components/SFilePicker/SFilePicker.js +314 -276
  48. package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
  49. package/dist/components/SInput/SInput.cjs +217 -208
  50. package/dist/components/SInput/SInput.cjs.map +1 -1
  51. package/dist/components/SInput/SInput.js +217 -208
  52. package/dist/components/SInput/SInput.js.map +1 -1
  53. package/dist/components/SKeyValueTable/SKeyValueTable.cjs +631 -450
  54. package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
  55. package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +3 -1
  56. package/dist/components/SKeyValueTable/SKeyValueTable.js +631 -450
  57. package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
  58. package/dist/components/SLoadingContainer/SLoadingContainer.cjs +39 -14
  59. package/dist/components/SLoadingContainer/SLoadingContainer.cjs.map +1 -1
  60. package/dist/components/SLoadingContainer/SLoadingContainer.js +39 -14
  61. package/dist/components/SLoadingContainer/SLoadingContainer.js.map +1 -1
  62. package/dist/components/SLoadingContainer/loading.cjs +39 -14
  63. package/dist/components/SLoadingContainer/loading.cjs.map +1 -1
  64. package/dist/components/SLoadingContainer/loading.js +39 -14
  65. package/dist/components/SLoadingContainer/loading.js.map +1 -1
  66. package/dist/components/SLoadingModal/SLoadingModal.cjs +37 -16
  67. package/dist/components/SLoadingModal/SLoadingModal.cjs.map +1 -1
  68. package/dist/components/SLoadingModal/SLoadingModal.d.ts +3 -1
  69. package/dist/components/SLoadingModal/SLoadingModal.js +37 -16
  70. package/dist/components/SLoadingModal/SLoadingModal.js.map +1 -1
  71. package/dist/components/SNumberInput/SNumberInput.cjs +325 -49
  72. package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
  73. package/dist/components/SNumberInput/SNumberInput.d.ts +2 -0
  74. package/dist/components/SNumberInput/SNumberInput.js +325 -49
  75. package/dist/components/SNumberInput/SNumberInput.js.map +1 -1
  76. package/dist/components/SPagination/SPagination.cjs +1 -1
  77. package/dist/components/SPagination/SPagination.cjs.map +1 -1
  78. package/dist/components/SPagination/SPagination.js +1 -1
  79. package/dist/components/SPagination/SPagination.js.map +1 -1
  80. package/dist/components/SRadio/SRadioGroup.cjs +1 -1
  81. package/dist/components/SRadio/SRadioGroup.cjs.map +1 -1
  82. package/dist/components/SRadio/SRadioGroup.js +1 -1
  83. package/dist/components/SRadio/SRadioGroup.js.map +1 -1
  84. package/dist/components/SSelect/SSelect.cjs +71 -32
  85. package/dist/components/SSelect/SSelect.cjs.map +1 -1
  86. package/dist/components/SSelect/SSelect.js +71 -32
  87. package/dist/components/SSelect/SSelect.js.map +1 -1
  88. package/dist/components/STable/STable.cjs +108 -49
  89. package/dist/components/STable/STable.cjs.map +1 -1
  90. package/dist/components/STable/STable.js +108 -49
  91. package/dist/components/STable/STable.js.map +1 -1
  92. package/dist/components/STextarea/STextarea.cjs +217 -20
  93. package/dist/components/STextarea/STextarea.cjs.map +1 -1
  94. package/dist/components/STextarea/STextarea.js +217 -20
  95. package/dist/components/STextarea/STextarea.js.map +1 -1
  96. package/dist/components/SToast/SToastContainer.cjs +3 -3
  97. package/dist/components/SToast/SToastContainer.cjs.map +1 -1
  98. package/dist/components/SToast/SToastContainer.js +3 -3
  99. package/dist/components/SToast/SToastContainer.js.map +1 -1
  100. package/dist/components/STooltip/STooltip.cjs +208 -13
  101. package/dist/components/STooltip/STooltip.cjs.map +1 -1
  102. package/dist/components/STooltip/STooltip.js +208 -13
  103. package/dist/components/STooltip/STooltip.js.map +1 -1
  104. package/dist/index.cjs +439 -221
  105. package/dist/index.cjs.map +1 -1
  106. package/dist/index.js +439 -221
  107. package/dist/index.js.map +1 -1
  108. package/dist/styles.css +113 -48
  109. package/dist/theme.css +49 -23
  110. package/package.json +1 -1
@@ -23,6 +23,12 @@ export interface SFieldProps {
23
23
  labelTooltipProps?: Partial<STooltipProps>;
24
24
  /** 레이블/어드온 레이블 너비 (숫자=px). label·addonLabel 폭에 공통 적용 */
25
25
  labelWidth?: number | string;
26
+ /**
27
+ * 레이블 박스 높이 (숫자=px). 미지정 시 size별 기본값 사용.
28
+ * 컨트롤 박스가 기본 필드 높이보다 큰 경우(multiline 등) 첫 행에 세로 중앙 정렬을
29
+ * 맞추기 위해 컨트롤 박스 높이를 넘겨받는다.
30
+ */
31
+ labelHeight?: number | string;
26
32
  /** 필드 크기 */
27
33
  size?: SFieldSize;
28
34
  /** 우측 어드온 레이블 */
@@ -51,6 +57,11 @@ export interface SFieldProps {
51
57
  width?: number | string;
52
58
  /** 멀티라인(textarea) — 컨트롤 높이를 고정하지 않고 min-height만 적용 */
53
59
  multiline?: boolean;
60
+ /**
61
+ * 테두리 박스 제거 (inline 컨트롤용) — border/배경/hover·focus 강조만 사라지고
62
+ * label·hint·errorMessage 등 나머지 필드 구성은 그대로 동작한다.
63
+ */
64
+ borderless?: boolean;
54
65
  /** 실제 컨트롤 (input/select 등) — 테두리 없이 렌더, 테두리는 SField가 제공 */
55
66
  children?: ReactNode;
56
67
  className?: string;
@@ -1,8 +1,8 @@
1
1
  import { forwardRef, createContext, useState, useRef, useImperativeHandle, useContext } from 'react';
2
2
  import { clsx } from 'clsx';
3
3
  import { extendTailwindMerge } from 'tailwind-merge';
4
- import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
5
- import * as RPopover from '@radix-ui/react-popover';
4
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
+ import * as RPopover2 from '@radix-ui/react-popover';
6
6
 
7
7
  // src/components/SField/SField.tsx
8
8
  var twMerge = extendTailwindMerge({
@@ -2875,11 +2875,200 @@ PortalContainerContext.Provider;
2875
2875
  function usePortalContainer() {
2876
2876
  return useContext(PortalContainerContext) ?? void 0;
2877
2877
  }
2878
+
2879
+ // src/components/STag/tag.config.ts
2880
+ var TAG_SIZE_CONFIG = {
2881
+ xs: {
2882
+ height: 20,
2883
+ paddingX: 8,
2884
+ gap: 4,
2885
+ radius: 6,
2886
+ iconSize: 12,
2887
+ fontSize: 11,
2888
+ fontWeight: 500,
2889
+ lineHeight: 18
2890
+ },
2891
+ sm: {
2892
+ height: 24,
2893
+ paddingX: 8,
2894
+ gap: 4,
2895
+ radius: 6,
2896
+ iconSize: 16,
2897
+ fontSize: 12,
2898
+ fontWeight: 700,
2899
+ lineHeight: 20
2900
+ },
2901
+ md: {
2902
+ height: 28,
2903
+ paddingX: 12,
2904
+ gap: 6,
2905
+ radius: 8,
2906
+ iconSize: 16,
2907
+ fontSize: 14,
2908
+ fontWeight: 700,
2909
+ lineHeight: 24
2910
+ }
2911
+ };
2912
+ var STag = forwardRef(function STag2({
2913
+ shape = "square",
2914
+ size = "sm",
2915
+ color = "grey",
2916
+ label = "",
2917
+ icon,
2918
+ iconLeft = true,
2919
+ width,
2920
+ className,
2921
+ style,
2922
+ ...rest
2923
+ }, ref) {
2924
+ const s = TAG_SIZE_CONFIG[size];
2925
+ const contentColor = `var(--cmp-tag-${color}-content)`;
2926
+ const iconNode = icon ? /* @__PURE__ */ jsx(SIcon, { name: icon, size: s.iconSize, color: contentColor }) : null;
2927
+ const resolvedWidth = typeof width === "number" ? `${width}px` : width;
2928
+ return /* @__PURE__ */ jsxs(
2929
+ "span",
2930
+ {
2931
+ ref,
2932
+ "aria-label": label || "tag",
2933
+ className: cn(
2934
+ "box-border inline-flex w-fit select-none items-center justify-center whitespace-nowrap",
2935
+ className
2936
+ ),
2937
+ style: {
2938
+ minHeight: s.height,
2939
+ padding: `0 ${s.paddingX}px`,
2940
+ gap: s.gap,
2941
+ borderRadius: shape === "pill" ? 999 : s.radius,
2942
+ fontSize: s.fontSize,
2943
+ fontWeight: s.fontWeight,
2944
+ lineHeight: `${s.lineHeight}px`,
2945
+ background: `var(--cmp-tag-${color}-bg)`,
2946
+ color: contentColor,
2947
+ ...resolvedWidth != null ? { width: resolvedWidth } : {},
2948
+ ...style
2949
+ },
2950
+ ...rest,
2951
+ children: [
2952
+ icon && iconLeft && iconNode,
2953
+ label && /* @__PURE__ */ jsx("span", { className: "inline-flex min-w-0 items-center justify-center", children: label }),
2954
+ icon && !iconLeft && iconNode
2955
+ ]
2956
+ }
2957
+ );
2958
+ });
2959
+ var SIZE = {
2960
+ xxs: { icon: 12, radius: "sm" },
2961
+ xs: { icon: 16, radius: "sm" },
2962
+ sm: { icon: 20, radius: "sm" },
2963
+ md: { icon: 24, radius: "md" },
2964
+ lg: { icon: 32, radius: "md" }
2965
+ };
2966
+ var TOOLTIP_HIDE_DELAY_MS = 100;
2967
+ function SGhostButton({
2968
+ icon,
2969
+ size = "sm",
2970
+ intent = "default",
2971
+ ariaLabel = "",
2972
+ tooltipText,
2973
+ disabled = false,
2974
+ onClick,
2975
+ className,
2976
+ style
2977
+ }) {
2978
+ const portalContainer = usePortalContainer();
2979
+ const [open, setOpen] = useState(false);
2980
+ const hideTimer = useRef(void 0);
2981
+ const cancelHide = () => {
2982
+ if (hideTimer.current) {
2983
+ clearTimeout(hideTimer.current);
2984
+ hideTimer.current = void 0;
2985
+ }
2986
+ };
2987
+ const openNow = () => {
2988
+ cancelHide();
2989
+ setOpen(true);
2990
+ };
2991
+ const startHide = () => {
2992
+ cancelHide();
2993
+ hideTimer.current = setTimeout(() => setOpen(false), TOOLTIP_HIDE_DELAY_MS);
2994
+ };
2995
+ const s = SIZE[size];
2996
+ const contentColor = disabled ? intent === "inverse" ? "var(--cmp-ghostButton-inverse-disabled)" : "var(--cmp-ghostButton-icon-disabled)" : `var(--cmp-ghostButton-${intent}-content)`;
2997
+ const btn = /* @__PURE__ */ jsxs(
2998
+ "button",
2999
+ {
3000
+ type: "button",
3001
+ disabled,
3002
+ "aria-disabled": disabled ? "true" : void 0,
3003
+ "aria-label": ariaLabel.trim() || void 0,
3004
+ tabIndex: disabled ? -1 : void 0,
3005
+ onClick: (e) => {
3006
+ if (disabled) {
3007
+ e.preventDefault();
3008
+ return;
3009
+ }
3010
+ onClick?.(e);
3011
+ },
3012
+ className: cn(
3013
+ "group relative box-border inline-flex items-center justify-center border-none bg-transparent p-0 transition-shadow",
3014
+ disabled ? "cursor-not-allowed" : "cursor-pointer",
3015
+ "focus-visible:outline-none focus-visible:shadow-[0_0_0_2px_var(--cmp-ghostButton-action-hover-bg)]",
3016
+ className
3017
+ ),
3018
+ style: {
3019
+ width: `var(--cmp-ghostButton-${size}-size)`,
3020
+ height: `var(--cmp-ghostButton-${size}-size)`,
3021
+ borderRadius: `var(--cmp-ghostButton-radius-${s.radius})`,
3022
+ ...style
3023
+ },
3024
+ children: [
3025
+ !disabled && /* @__PURE__ */ jsx(
3026
+ "span",
3027
+ {
3028
+ "aria-hidden": true,
3029
+ className: "pointer-events-none absolute inset-0 rounded-[inherit] opacity-0 transition-opacity duration-200 group-hover:opacity-5",
3030
+ style: { background: `var(--cmp-ghostButton-${intent}-hover-bg)` }
3031
+ }
3032
+ ),
3033
+ /* @__PURE__ */ jsx(SIcon, { name: icon, size: s.icon, color: contentColor })
3034
+ ]
3035
+ }
3036
+ );
3037
+ const text = (tooltipText ?? "").trim();
3038
+ if (text === "") return btn;
3039
+ return /* @__PURE__ */ jsxs(RPopover2.Root, { open, onOpenChange: setOpen, children: [
3040
+ /* @__PURE__ */ jsx(RPopover2.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
3041
+ "span",
3042
+ {
3043
+ className: "inline-flex",
3044
+ onMouseEnter: openNow,
3045
+ onMouseLeave: startHide,
3046
+ onFocus: openNow,
3047
+ onBlur: startHide,
3048
+ children: btn
3049
+ }
3050
+ ) }),
3051
+ /* @__PURE__ */ jsx(RPopover2.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
3052
+ RPopover2.Content,
3053
+ {
3054
+ side: "top",
3055
+ sideOffset: 4,
3056
+ className: cn("z-50", FLOATING_SLIDE_ANIM),
3057
+ "aria-hidden": true,
3058
+ onOpenAutoFocus: (e) => e.preventDefault(),
3059
+ onMouseEnter: cancelHide,
3060
+ onMouseLeave: startHide,
3061
+ children: /* @__PURE__ */ jsx(STag, { shape: "square", size: "xs", color: "grey", label: text })
3062
+ }
3063
+ ) })
3064
+ ] });
3065
+ }
2878
3066
  var HIDE_DELAY_MS = 100;
2879
3067
  function useBody(content, message = []) {
2880
3068
  if (content != null) return content;
2881
3069
  if (message.length === 0) return null;
2882
- return /* @__PURE__ */ jsx(Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsx("div", { children: line }, i)) });
3070
+ const singleLine = message.length === 1;
3071
+ return /* @__PURE__ */ jsx(Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsx("div", { className: singleLine ? "leading-[24px]" : void 0, children: line }, i)) });
2883
3072
  }
2884
3073
  var STooltip = forwardRef(function STooltip2({
2885
3074
  content,
@@ -2947,10 +3136,10 @@ var STooltip = forwardRef(function STooltip2({
2947
3136
  fontWeight: tooltipType === "default" ? 500 : 700,
2948
3137
  ...style
2949
3138
  };
2950
- return /* @__PURE__ */ jsxs(RPopover.Root, { open, onOpenChange: setOpen, children: [
3139
+ return /* @__PURE__ */ jsxs(RPopover2.Root, { open, onOpenChange: setOpen, children: [
2951
3140
  isHover ? (
2952
3141
  // hover: Anchor(위치 기준) + 직접 mouse 핸들러 — 클릭으로 토글되지 않도록 Trigger 미사용
2953
- /* @__PURE__ */ jsx(RPopover.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
3142
+ /* @__PURE__ */ jsx(RPopover2.Anchor, { asChild: true, children: /* @__PURE__ */ jsx(
2954
3143
  "span",
2955
3144
  {
2956
3145
  className: "inline-flex",
@@ -2961,9 +3150,9 @@ var STooltip = forwardRef(function STooltip2({
2961
3150
  children: triggerNode
2962
3151
  }
2963
3152
  ) })
2964
- ) : /* @__PURE__ */ jsx(RPopover.Trigger, { asChild: true, children: triggerNode }),
2965
- /* @__PURE__ */ jsx(RPopover.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
2966
- RPopover.Content,
3153
+ ) : /* @__PURE__ */ jsx(RPopover2.Trigger, { asChild: true, children: triggerNode }),
3154
+ /* @__PURE__ */ jsx(RPopover2.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxs(
3155
+ RPopover2.Content,
2967
3156
  {
2968
3157
  side: placement,
2969
3158
  sideOffset: 8,
@@ -2982,15 +3171,21 @@ var STooltip = forwardRef(function STooltip2({
2982
3171
  /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-[12px]", children: [
2983
3172
  /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: body }),
2984
3173
  useClose && /* @__PURE__ */ jsx(
2985
- RPopover.Close,
3174
+ SGhostButton,
2986
3175
  {
2987
- "aria-label": "\uB2EB\uAE30",
2988
- className: "shrink-0 cursor-pointer opacity-70 hover:opacity-100",
2989
- children: /* @__PURE__ */ jsx(SIcon, { name: "close", size: 16, color: fg })
3176
+ icon: "close",
3177
+ size: "xs",
3178
+ intent: tooltipType === "default" ? "inverse" : "default",
3179
+ ariaLabel: "\uB2EB\uAE30",
3180
+ className: "shrink-0",
3181
+ onClick: () => {
3182
+ cancelHide();
3183
+ setOpen(false);
3184
+ }
2990
3185
  }
2991
3186
  )
2992
3187
  ] }),
2993
- /* @__PURE__ */ jsx(RPopover.Arrow, { width: 16, height: 12, style: { fill: bg } })
3188
+ /* @__PURE__ */ jsx(RPopover2.Arrow, { width: 16, height: 12, style: { fill: bg } })
2994
3189
  ]
2995
3190
  }
2996
3191
  ) })
@@ -2998,8 +3193,8 @@ var STooltip = forwardRef(function STooltip2({
2998
3193
  });
2999
3194
  STooltip.displayName = "STooltip";
3000
3195
  var FIELD_SIZE = {
3001
- sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon: 12 },
3002
- md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon: 12 }
3196
+ sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon: 16 },
3197
+ md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon: 16 }
3003
3198
  };
3004
3199
  var ALIGN = {
3005
3200
  start: "flex-start",
@@ -3014,6 +3209,7 @@ var SField = forwardRef(function SField2({
3014
3209
  labelTooltip = "",
3015
3210
  labelTooltipProps,
3016
3211
  labelWidth,
3212
+ labelHeight,
3017
3213
  size = "sm",
3018
3214
  addonLabel = "",
3019
3215
  addonAlign = "start",
@@ -3028,6 +3224,7 @@ var SField = forwardRef(function SField2({
3028
3224
  readOnly = false,
3029
3225
  width,
3030
3226
  multiline = false,
3227
+ borderless = false,
3031
3228
  children,
3032
3229
  className,
3033
3230
  style,
@@ -3061,8 +3258,8 @@ var SField = forwardRef(function SField2({
3061
3258
  const resolvedSuccess = status === "pass";
3062
3259
  const showError = resolvedError && errorMessage !== "";
3063
3260
  const interactive = !disabled && !readOnly;
3064
- 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)";
3065
- const bgColor = disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
3261
+ 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)";
3262
+ const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
3066
3263
  const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
3067
3264
  return /* @__PURE__ */ jsx(
3068
3265
  "div",
@@ -3079,7 +3276,7 @@ var SField = forwardRef(function SField2({
3079
3276
  {
3080
3277
  className: "flex shrink-0 items-center font-bold text-(--sys-color-field-text-default)",
3081
3278
  style: {
3082
- height: s.height,
3279
+ height: cssLen(labelHeight) ?? s.height,
3083
3280
  marginRight: s.fieldGap,
3084
3281
  width: cssLen(labelWidth),
3085
3282
  fontSize: s.fontSize,
@@ -3105,14 +3302,14 @@ var SField = forwardRef(function SField2({
3105
3302
  {
3106
3303
  className: cn(
3107
3304
  "relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
3108
- 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]",
3305
+ 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]",
3109
3306
  disabled && "cursor-not-allowed"
3110
3307
  ),
3111
3308
  style: {
3112
3309
  // @ts-expect-error CSS 변수
3113
3310
  "--field-bc": borderColor,
3114
3311
  // focused/hovered prop이 명시된 경우 강조를 즉시 반영
3115
- ...interactive && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
3312
+ ...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
3116
3313
  ...multiline ? { minHeight: s.height } : { height: s.height },
3117
3314
  "width": cssLen(width),
3118
3315
  "borderRadius": s.radius,