sellmate-design-system-react 0.1.9 → 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 (82) hide show
  1. package/dist/components/SBarcodeInput/SBarcodeInput.cjs +1 -1
  2. package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
  3. package/dist/components/SBarcodeInput/SBarcodeInput.js +1 -1
  4. package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
  5. package/dist/components/SChipInput/SChipInput.cjs +1 -1
  6. package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
  7. package/dist/components/SChipInput/SChipInput.js +1 -1
  8. package/dist/components/SChipInput/SChipInput.js.map +1 -1
  9. package/dist/components/SCircleProgress/SCircleProgress.cjs +69 -50
  10. package/dist/components/SCircleProgress/SCircleProgress.cjs.map +1 -1
  11. package/dist/components/SCircleProgress/SCircleProgress.d.ts +2 -0
  12. package/dist/components/SCircleProgress/SCircleProgress.js +69 -50
  13. package/dist/components/SCircleProgress/SCircleProgress.js.map +1 -1
  14. package/dist/components/SDatePicker/SDatePicker.cjs +1 -1
  15. package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
  16. package/dist/components/SDatePicker/SDatePicker.js +1 -1
  17. package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
  18. package/dist/components/SDateRangePicker/SDateRangePicker.cjs +1 -1
  19. package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
  20. package/dist/components/SDateRangePicker/SDateRangePicker.js +1 -1
  21. package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
  22. package/dist/components/SField/SField.cjs +1 -1
  23. package/dist/components/SField/SField.cjs.map +1 -1
  24. package/dist/components/SField/SField.js +1 -1
  25. package/dist/components/SField/SField.js.map +1 -1
  26. package/dist/components/SFilePicker/SFilePicker.cjs +36 -17
  27. package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
  28. package/dist/components/SFilePicker/SFilePicker.d.ts +1 -1
  29. package/dist/components/SFilePicker/SFilePicker.js +35 -17
  30. package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
  31. package/dist/components/SInput/SInput.cjs +1 -1
  32. package/dist/components/SInput/SInput.cjs.map +1 -1
  33. package/dist/components/SInput/SInput.js +1 -1
  34. package/dist/components/SInput/SInput.js.map +1 -1
  35. package/dist/components/SKeyValueTable/SKeyValueTable.cjs +43 -22
  36. package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
  37. package/dist/components/SKeyValueTable/SKeyValueTable.js +43 -22
  38. package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
  39. package/dist/components/SLoadingContainer/SLoadingContainer.cjs +69 -50
  40. package/dist/components/SLoadingContainer/SLoadingContainer.cjs.map +1 -1
  41. package/dist/components/SLoadingContainer/SLoadingContainer.js +69 -50
  42. package/dist/components/SLoadingContainer/SLoadingContainer.js.map +1 -1
  43. package/dist/components/SLoadingContainer/loading.cjs +69 -50
  44. package/dist/components/SLoadingContainer/loading.cjs.map +1 -1
  45. package/dist/components/SLoadingContainer/loading.js +69 -50
  46. package/dist/components/SLoadingContainer/loading.js.map +1 -1
  47. package/dist/components/SLoadingModal/SLoadingModal.cjs +72 -50
  48. package/dist/components/SLoadingModal/SLoadingModal.cjs.map +1 -1
  49. package/dist/components/SLoadingModal/SLoadingModal.d.ts +3 -1
  50. package/dist/components/SLoadingModal/SLoadingModal.js +72 -50
  51. package/dist/components/SLoadingModal/SLoadingModal.js.map +1 -1
  52. package/dist/components/SNumberInput/SNumberInput.cjs +1 -1
  53. package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
  54. package/dist/components/SNumberInput/SNumberInput.js +1 -1
  55. package/dist/components/SNumberInput/SNumberInput.js.map +1 -1
  56. package/dist/components/SRadio/SRadioGroup.cjs +1 -1
  57. package/dist/components/SRadio/SRadioGroup.cjs.map +1 -1
  58. package/dist/components/SRadio/SRadioGroup.js +1 -1
  59. package/dist/components/SRadio/SRadioGroup.js.map +1 -1
  60. package/dist/components/SSelect/SSelect.cjs +8 -4
  61. package/dist/components/SSelect/SSelect.cjs.map +1 -1
  62. package/dist/components/SSelect/SSelect.js +8 -4
  63. package/dist/components/SSelect/SSelect.js.map +1 -1
  64. package/dist/components/STable/STable.cjs +82 -56
  65. package/dist/components/STable/STable.cjs.map +1 -1
  66. package/dist/components/STable/STable.js +82 -56
  67. package/dist/components/STable/STable.js.map +1 -1
  68. package/dist/components/STextarea/STextarea.cjs +1 -1
  69. package/dist/components/STextarea/STextarea.cjs.map +1 -1
  70. package/dist/components/STextarea/STextarea.js +1 -1
  71. package/dist/components/STextarea/STextarea.js.map +1 -1
  72. package/dist/components/STooltip/STooltip.cjs +1 -1
  73. package/dist/components/STooltip/STooltip.cjs.map +1 -1
  74. package/dist/components/STooltip/STooltip.js +1 -1
  75. package/dist/components/STooltip/STooltip.js.map +1 -1
  76. package/dist/index.cjs +120 -74
  77. package/dist/index.cjs.map +1 -1
  78. package/dist/index.js +120 -74
  79. package/dist/index.js.map +1 -1
  80. package/dist/styles.css +62 -21
  81. package/dist/theme.css +45 -21
  82. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -3300,12 +3300,35 @@ var COLOR_MAP = {
3300
3300
  };
3301
3301
  var clamp2 = (v) => Number.isFinite(v) ? Math.max(0, Math.min(100, v)) : 0;
3302
3302
  var SCircleProgress = forwardRef(
3303
- function SCircleProgress2({ value = 0, type = "primary", indeterminate = false, label, className, style }, ref) {
3303
+ function SCircleProgress2({
3304
+ value = 0,
3305
+ type = "primary",
3306
+ indeterminate = false,
3307
+ label,
3308
+ innerValue = false,
3309
+ className,
3310
+ style
3311
+ }, ref) {
3304
3312
  const v = clamp2(value);
3305
3313
  const colors = COLOR_MAP[type];
3306
3314
  const c = VIEWBOX / 2;
3307
3315
  const percentColor = v === 0 ? "var(--sys-color-fg-tertiary, #888888)" : colors.arc;
3308
3316
  const filled = v / 100 * CIRCUMFERENCE;
3317
+ const showPercent = !indeterminate;
3318
+ const percentNode = /* @__PURE__ */ jsxs(
3319
+ "span",
3320
+ {
3321
+ className: cn(
3322
+ "text-center text-[16px] font-bold leading-[26px]",
3323
+ innerValue && "absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2"
3324
+ ),
3325
+ style: { color: percentColor },
3326
+ children: [
3327
+ Math.round(v),
3328
+ "%"
3329
+ ]
3330
+ }
3331
+ );
3309
3332
  return /* @__PURE__ */ jsxs(
3310
3333
  "div",
3311
3334
  {
@@ -3316,57 +3339,53 @@ var SCircleProgress = forwardRef(
3316
3339
  ),
3317
3340
  style,
3318
3341
  children: [
3319
- /* @__PURE__ */ jsxs(
3320
- "svg",
3321
- {
3322
- viewBox: `0 0 ${VIEWBOX} ${VIEWBOX}`,
3323
- xmlns: "http://www.w3.org/2000/svg",
3324
- className: cn("h-[80px] w-[80px]", indeterminate && "origin-center animate-circle-spin"),
3325
- children: [
3326
- /* @__PURE__ */ jsx(
3327
- "circle",
3328
- {
3329
- cx: c,
3330
- cy: c,
3331
- r: RADIUS,
3332
- fill: "none",
3333
- strokeWidth: STROKE,
3334
- style: { stroke: colors.track }
3335
- }
3342
+ /* @__PURE__ */ jsxs("div", { className: cn(innerValue && "relative"), children: [
3343
+ /* @__PURE__ */ jsxs(
3344
+ "svg",
3345
+ {
3346
+ viewBox: `0 0 ${VIEWBOX} ${VIEWBOX}`,
3347
+ xmlns: "http://www.w3.org/2000/svg",
3348
+ className: cn(
3349
+ "h-[80px] w-[80px]",
3350
+ indeterminate && "origin-center animate-circle-spin"
3336
3351
  ),
3337
- /* @__PURE__ */ jsx(
3338
- "circle",
3339
- {
3340
- cx: c,
3341
- cy: c,
3342
- r: RADIUS,
3343
- fill: "none",
3344
- strokeWidth: STROKE,
3345
- strokeLinecap: "round",
3346
- className: cn(
3347
- "origin-center",
3348
- indeterminate ? "animate-circle-arc" : "-rotate-90 transition-[stroke-dasharray] duration-[400ms] ease-linear"
3349
- ),
3350
- style: {
3351
- stroke: colors.arc,
3352
- ...indeterminate ? {} : { strokeDasharray: `${filled} ${CIRCUMFERENCE}`, strokeDashoffset: 0 }
3352
+ children: [
3353
+ /* @__PURE__ */ jsx(
3354
+ "circle",
3355
+ {
3356
+ cx: c,
3357
+ cy: c,
3358
+ r: RADIUS,
3359
+ fill: "none",
3360
+ strokeWidth: STROKE,
3361
+ style: { stroke: colors.track }
3353
3362
  }
3354
- }
3355
- )
3356
- ]
3357
- }
3358
- ),
3359
- !indeterminate && /* @__PURE__ */ jsxs(
3360
- "span",
3361
- {
3362
- className: "text-center text-[16px] font-bold leading-[26px]",
3363
- style: { color: percentColor },
3364
- children: [
3365
- Math.round(v),
3366
- "%"
3367
- ]
3368
- }
3369
- ),
3363
+ ),
3364
+ /* @__PURE__ */ jsx(
3365
+ "circle",
3366
+ {
3367
+ cx: c,
3368
+ cy: c,
3369
+ r: RADIUS,
3370
+ fill: "none",
3371
+ strokeWidth: STROKE,
3372
+ strokeLinecap: "round",
3373
+ className: cn(
3374
+ "origin-center",
3375
+ indeterminate ? "animate-circle-arc" : "-rotate-90 transition-[stroke-dasharray] duration-[400ms] ease-linear"
3376
+ ),
3377
+ style: {
3378
+ stroke: colors.arc,
3379
+ ...indeterminate ? {} : { strokeDasharray: `${filled} ${CIRCUMFERENCE}`, strokeDashoffset: 0 }
3380
+ }
3381
+ }
3382
+ )
3383
+ ]
3384
+ }
3385
+ ),
3386
+ showPercent && innerValue && percentNode
3387
+ ] }),
3388
+ showPercent && !innerValue && percentNode,
3370
3389
  label && /* @__PURE__ */ jsx("span", { className: "text-center text-[12px] font-normal leading-[20px] text-[color:var(--cmp-progress-color-label)]", children: label })
3371
3390
  ]
3372
3391
  }
@@ -4125,7 +4144,7 @@ var STooltip = forwardRef(function STooltip2({
4125
4144
  if (disabled || body == null) return /* @__PURE__ */ jsx(Fragment, { children: triggerNode });
4126
4145
  const isHover = trigger === "hover";
4127
4146
  const contentClass = cn(
4128
- "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)]",
4147
+ "z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px]",
4129
4148
  FLOATING_SLIDE_ANIM,
4130
4149
  className
4131
4150
  );
@@ -4787,6 +4806,7 @@ var DEFAULT_BUTTON_LABEL = {
4787
4806
  function SLoadingModal({
4788
4807
  open,
4789
4808
  onOpenChange,
4809
+ onClose,
4790
4810
  persistent,
4791
4811
  state: state2 = "loading",
4792
4812
  progress,
@@ -4805,6 +4825,8 @@ function SLoadingModal({
4805
4825
  {
4806
4826
  open,
4807
4827
  onOpenChange,
4828
+ onClose,
4829
+ showClose: state2 === "error",
4808
4830
  persistent,
4809
4831
  ariaTitle: lines[0] || "\uB85C\uB529 \uC911",
4810
4832
  width,
@@ -5614,7 +5636,7 @@ function ItemList({
5614
5636
  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",
5615
5637
  // 하위가 전부 비활성이면(select.config 에서 bubble-up) 어미 그룹도 비활성 처리:
5616
5638
  // 텍스트는 회색(#888), depth1 그룹은 파란 배경 대신 회색(#EEE)으로 (depth2 는 #F6F6F6 유지)
5617
- o.disabled && "text-[color:var(--cmp-listItem-content-disabled)]",
5639
+ o.disabled && "cursor-not-allowed text-[color:var(--cmp-listItem-content-disabled)]",
5618
5640
  o.disabled && isDepth1 && "bg-[var(--cmp-listItem-depth1-bg-disabled)]"
5619
5641
  ),
5620
5642
  style: { paddingLeft: padLeft },
@@ -5629,10 +5651,14 @@ function ItemList({
5629
5651
  {
5630
5652
  value: o.value,
5631
5653
  disabled: o.disabled,
5654
+ accessibleWhenDisabled: true,
5632
5655
  className: cn(
5633
5656
  itemBase,
5634
5657
  isSelected && !multi && "font-bold text-[color:var(--cmp-listItem-content-selected)]",
5635
- activeClass
5658
+ // Ariakit은 disabled 항목도 hover 시 active(data-active-item) 처리하므로,
5659
+ // 비활성 항목에는 hover 하이라이트를 적용하지 않아 회색 비활성 스타일을 유지한다.
5660
+ // (원본 Stencil의 `--focused...:not(--disabled)` 규칙과 동일한 의도)
5661
+ !o.disabled && activeClass
5636
5662
  ),
5637
5663
  style: { paddingTop: 4, paddingBottom: 4, paddingRight: 12, paddingLeft: padLeft },
5638
5664
  render: useSearch ? /* @__PURE__ */ jsx(Ariakit.ComboboxItem, {}) : void 0,
@@ -5645,7 +5671,7 @@ function ItemList({
5645
5671
  "flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-[2px] border border-solid",
5646
5672
  o.disabled ? (
5647
5673
  // 비활성: 회색 채움(#E1E1E1) + 회색 테두리(#CCCCCC)
5648
- "border-[color:var(--cmp-checkbox-border-disabled)] bg-[var(--cmp-checkbox-bg-disabled)]"
5674
+ "cursor-not-allowed border-[color:var(--cmp-checkbox-border-disabled)] bg-[var(--cmp-checkbox-bg-disabled)]"
5649
5675
  ) : cn(
5650
5676
  "group-data-[active-item]:border-[color:var(--cmp-checkbox-checked-border-inverse)]",
5651
5677
  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"
@@ -5947,7 +5973,8 @@ var STable = forwardRef(function STable2({
5947
5973
  else onSelectedChange?.([...selected, row]);
5948
5974
  };
5949
5975
  const radiusClass = radius === "full" ? "rounded-none" : radius === "useTop" ? "rounded-b-[var(--cmp-table-radius)] rounded-t-none" : "rounded-[var(--cmp-table-radius)]";
5950
- const cellPadY = dense ? "var(--cmp-table-body-dense-paddingY)" : "var(--cmp-table-body-default-paddingY)";
5976
+ const cellPadY = dense ? "var(--cmp-table-body-paddingY-dense)" : "var(--cmp-table-body-paddingY-default)";
5977
+ const cellPadX = dense ? "var(--cmp-table-body-paddingX-default)" : "var(--cmp-table-body-paddingX-wide)";
5951
5978
  const rowH = dense ? "var(--cmp-table-body-dense-height)" : "var(--cmp-table-body-default-height)";
5952
5979
  const totalColSpan = visibleCols.length + (selectable ? 1 : 0);
5953
5980
  const stickyInfo = (i) => {
@@ -6122,13 +6149,15 @@ var STable = forwardRef(function STable2({
6122
6149
  className: cn(
6123
6150
  // 원본 .td: 컬럼 폭에 맞춰 내용 말줄임(overflow hidden + ellipsis) + 행 구분선(border-b)
6124
6151
  // 셀 배경은 흰색으로 채워 뒤 배경이 비치지 않게 하고, hover 시 행 배경(grey_05)을 따른다.
6125
- "overflow-hidden text-ellipsis whitespace-nowrap border-b border-solid border-[color:var(--cmp-table-border-color)] px-[16px] text-[12px] leading-[20px] text-[color:var(--sys-color-fg-primary)]",
6152
+ "overflow-hidden text-ellipsis whitespace-nowrap border-b border-solid border-[color:var(--cmp-table-border-color)] text-[12px] leading-[20px] text-[color:var(--sys-color-fg-primary)]",
6126
6153
  rowBg,
6127
6154
  "group-hover:bg-[var(--color-grey-05)]",
6128
6155
  stickyShadowClass(i),
6129
6156
  col.tdClass
6130
6157
  ),
6131
6158
  style: {
6159
+ paddingLeft: cellPadX,
6160
+ paddingRight: cellPadX,
6132
6161
  paddingTop: cellPadY,
6133
6162
  paddingBottom: cellPadY,
6134
6163
  textAlign: col.align ?? "left",
@@ -6862,7 +6891,7 @@ function SRadioGroup({
6862
6891
  role: "radiogroup",
6863
6892
  className: cn(
6864
6893
  "inline-flex",
6865
- direction === "vertical" ? "flex-col gap-[8px]" : "flex-row gap-[20px]",
6894
+ direction === "vertical" ? "flex-col gap-[var(--cmp-radio-group-gap-vertical)]" : "flex-row gap-[var(--cmp-radio-group-gap-horizontal)]",
6866
6895
  className
6867
6896
  ),
6868
6897
  style,
@@ -7770,7 +7799,10 @@ function SFilePicker({
7770
7799
  const autoId = useId();
7771
7800
  const resolvedName = name ?? autoId;
7772
7801
  const inputRef = useRef(null);
7802
+ const contentBoxRef = useRef(null);
7773
7803
  const [ruleError, setRuleError] = useState("");
7804
+ const [listOpen, setListOpen] = useState(false);
7805
+ const portalContainer = usePortalContainer();
7774
7806
  const files = multiple ? Array.isArray(value) ? value : [] : value && !Array.isArray(value) ? value : null;
7775
7807
  const hasFiles = multiple ? files.length > 0 : !!files;
7776
7808
  const displayText = !hasFiles ? placeholder : multiple ? files.map((f) => f.name).join(", ") : files.name;
@@ -7824,10 +7856,12 @@ function SFilePicker({
7824
7856
  e.stopPropagation();
7825
7857
  if (disabled) return;
7826
7858
  onValueChange?.(multiple ? [] : null);
7859
+ setListOpen(false);
7827
7860
  };
7828
7861
  const removeChip = (i) => {
7829
7862
  const next = files.filter((_, idx) => idx !== i);
7830
7863
  onValueChange?.(next);
7864
+ if (next.length === 0) setListOpen(false);
7831
7865
  };
7832
7866
  const open = () => {
7833
7867
  if (!disabled) inputRef.current?.click();
@@ -7838,9 +7872,12 @@ function SFilePicker({
7838
7872
  const iconSize = size === "md" ? 20 : 16;
7839
7873
  const gapCls = size === "md" ? "gap-[var(--cmp-filepicker-md-gap)]" : "gap-[var(--cmp-filepicker-sm-gap)]";
7840
7874
  const inlinePlaceholder = inline && !disabled && !hasFiles;
7841
- const content = /* @__PURE__ */ jsxs(
7875
+ const showListbox = multiple && useMultipleListBox;
7876
+ const filesArr = multiple ? files : [];
7877
+ const contentInner = /* @__PURE__ */ jsxs(
7842
7878
  "div",
7843
7879
  {
7880
+ ref: contentBoxRef,
7844
7881
  className: cn("group/filepicker flex h-full w-full items-center", gapCls),
7845
7882
  style: { padding: inline ? 0 : `0 ${padX}` },
7846
7883
  children: [
@@ -7895,25 +7932,34 @@ function SFilePicker({
7895
7932
  ]
7896
7933
  }
7897
7934
  ),
7935
+ showListbox && hasFiles && !disabled && /* @__PURE__ */ jsx(
7936
+ Ariakit.PopoverDisclosure,
7937
+ {
7938
+ render: /* @__PURE__ */ jsx(SGhostButton, { icon: "caretDown", size: "xxs", ariaLabel: "toggle file list" }),
7939
+ className: cn("shrink-0 transition-transform duration-150", listOpen && "rotate-180")
7940
+ }
7941
+ ),
7898
7942
  !disabled && hasFiles && /* @__PURE__ */ jsx(SGhostButton, { icon: "close", size: "xxs", ariaLabel: "clear", onClick: clear })
7899
7943
  ]
7900
7944
  }
7901
7945
  );
7902
- const chips = multiple && files.length > 0 && /* @__PURE__ */ jsx(
7903
- "div",
7904
- {
7905
- className: cn(
7906
- "mt-[8px] flex gap-[8px]",
7907
- useMultipleListBox ? "box-border flex-col items-start rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] p-[8px] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)]" : "flex-wrap"
7908
- ),
7909
- style: useMultipleListBox ? {
7910
- width: typeof width === "number" ? `${width}px` : width,
7911
- // label 있으면 SField 입력 박스 시작 위치(labelWidth + fieldGap) 맞춰 정렬
7912
- marginLeft: label && labelWidth != null ? `calc(${typeof labelWidth === "number" ? `${labelWidth}px` : labelWidth} + var(--sys-space-field-${size}-gap))` : void 0
7913
- } : void 0,
7914
- children: files.map((f, i) => /* @__PURE__ */ jsx(SChip, { value: f.name, editable: false, onRemove: () => removeChip(i) }, i))
7915
- }
7916
- );
7946
+ const content = showListbox ? /* @__PURE__ */ jsxs(Ariakit.PopoverProvider, { open: listOpen, setOpen: setListOpen, placement: "bottom-start", children: [
7947
+ contentInner,
7948
+ /* @__PURE__ */ jsx(
7949
+ Ariakit.Popover,
7950
+ {
7951
+ portal: true,
7952
+ portalElement: portalContainer,
7953
+ gutter: 4,
7954
+ unmountOnHide: true,
7955
+ getAnchorRect: () => contentBoxRef.current?.getBoundingClientRect() ?? null,
7956
+ style: { minWidth: contentBoxRef.current?.offsetWidth },
7957
+ className: "z-50 box-border flex flex-col items-stretch gap-[8px] rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] p-[8px] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)]",
7958
+ children: filesArr.map((f, i) => /* @__PURE__ */ jsx(SChip, { value: f.name, editable: false, onRemove: () => removeChip(i) }, i))
7959
+ }
7960
+ )
7961
+ ] }) : contentInner;
7962
+ const chips = multiple && !useMultipleListBox && filesArr.length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-[8px] flex flex-wrap gap-[8px]", children: filesArr.map((f, i) => /* @__PURE__ */ jsx(SChip, { value: f.name, editable: false, onRemove: () => removeChip(i) }, i)) });
7917
7963
  return /* @__PURE__ */ jsxs("div", { className, style, children: [
7918
7964
  /* @__PURE__ */ jsx(
7919
7965
  SField,
@@ -7955,7 +8001,7 @@ function SKeyValueTable({
7955
8001
  if (fields.length === 0) return null;
7956
8002
  const emit2 = (name, value) => onChange?.({ name, value });
7957
8003
  const cellHeight = dense ? "var(--cmp-table-body-dense-height)" : "var(--cmp-table-keyValue-height)";
7958
- const cellPadY = dense ? "var(--cmp-table-body-dense-paddingY)" : "var(--cmp-table-keyValue-body-paddingY)";
8004
+ const cellPadY = dense ? "var(--cmp-table-body-paddingY-dense)" : "var(--cmp-table-keyValue-body-paddingY)";
7959
8005
  const renderField = (f) => {
7960
8006
  if (f.render) return f.render;
7961
8007
  const opt = f.options ?? {};