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
@@ -3128,7 +3128,7 @@ var STooltip = forwardRef(function STooltip2({
3128
3128
  if (disabled || body == null) return /* @__PURE__ */ jsx(Fragment, { children: triggerNode });
3129
3129
  const isHover = trigger === "hover";
3130
3130
  const contentClass = cn(
3131
- "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)]",
3131
+ "z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px]",
3132
3132
  FLOATING_SLIDE_ANIM,
3133
3133
  className
3134
3134
  );
@@ -4471,7 +4471,7 @@ function ItemList({
4471
4471
  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",
4472
4472
  // 하위가 전부 비활성이면(select.config 에서 bubble-up) 어미 그룹도 비활성 처리:
4473
4473
  // 텍스트는 회색(#888), depth1 그룹은 파란 배경 대신 회색(#EEE)으로 (depth2 는 #F6F6F6 유지)
4474
- o.disabled && "text-[color:var(--cmp-listItem-content-disabled)]",
4474
+ o.disabled && "cursor-not-allowed text-[color:var(--cmp-listItem-content-disabled)]",
4475
4475
  o.disabled && isDepth1 && "bg-[var(--cmp-listItem-depth1-bg-disabled)]"
4476
4476
  ),
4477
4477
  style: { paddingLeft: padLeft },
@@ -4486,10 +4486,14 @@ function ItemList({
4486
4486
  {
4487
4487
  value: o.value,
4488
4488
  disabled: o.disabled,
4489
+ accessibleWhenDisabled: true,
4489
4490
  className: cn(
4490
4491
  itemBase,
4491
4492
  isSelected && !multi && "font-bold text-[color:var(--cmp-listItem-content-selected)]",
4492
- activeClass
4493
+ // Ariakit은 disabled 항목도 hover 시 active(data-active-item) 처리하므로,
4494
+ // 비활성 항목에는 hover 하이라이트를 적용하지 않아 회색 비활성 스타일을 유지한다.
4495
+ // (원본 Stencil의 `--focused...:not(--disabled)` 규칙과 동일한 의도)
4496
+ !o.disabled && activeClass
4493
4497
  ),
4494
4498
  style: { paddingTop: 4, paddingBottom: 4, paddingRight: 12, paddingLeft: padLeft },
4495
4499
  render: useSearch ? /* @__PURE__ */ jsx(Ariakit.ComboboxItem, {}) : void 0,
@@ -4502,7 +4506,7 @@ function ItemList({
4502
4506
  "flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-[2px] border border-solid",
4503
4507
  o.disabled ? (
4504
4508
  // 비활성: 회색 채움(#E1E1E1) + 회색 테두리(#CCCCCC)
4505
- "border-[color:var(--cmp-checkbox-border-disabled)] bg-[var(--cmp-checkbox-bg-disabled)]"
4509
+ "cursor-not-allowed border-[color:var(--cmp-checkbox-border-disabled)] bg-[var(--cmp-checkbox-bg-disabled)]"
4506
4510
  ) : cn(
4507
4511
  "group-data-[active-item]:border-[color:var(--cmp-checkbox-checked-border-inverse)]",
4508
4512
  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"
@@ -4637,7 +4641,7 @@ function SRadioGroup({
4637
4641
  role: "radiogroup",
4638
4642
  className: cn(
4639
4643
  "inline-flex",
4640
- direction === "vertical" ? "flex-col gap-[8px]" : "flex-row gap-[20px]",
4644
+ direction === "vertical" ? "flex-col gap-[var(--cmp-radio-group-gap-vertical)]" : "flex-row gap-[var(--cmp-radio-group-gap-horizontal)]",
4641
4645
  className
4642
4646
  ),
4643
4647
  style,
@@ -5615,7 +5619,10 @@ function SFilePicker({
5615
5619
  const autoId = useId();
5616
5620
  const resolvedName = name ?? autoId;
5617
5621
  const inputRef = useRef(null);
5622
+ const contentBoxRef = useRef(null);
5618
5623
  const [ruleError, setRuleError] = useState("");
5624
+ const [listOpen, setListOpen] = useState(false);
5625
+ const portalContainer = usePortalContainer();
5619
5626
  const files = multiple ? Array.isArray(value) ? value : [] : value && !Array.isArray(value) ? value : null;
5620
5627
  const hasFiles = multiple ? files.length > 0 : !!files;
5621
5628
  const displayText = !hasFiles ? placeholder : multiple ? files.map((f) => f.name).join(", ") : files.name;
@@ -5669,10 +5676,12 @@ function SFilePicker({
5669
5676
  e.stopPropagation();
5670
5677
  if (disabled) return;
5671
5678
  onValueChange?.(multiple ? [] : null);
5679
+ setListOpen(false);
5672
5680
  };
5673
5681
  const removeChip = (i) => {
5674
5682
  const next = files.filter((_, idx) => idx !== i);
5675
5683
  onValueChange?.(next);
5684
+ if (next.length === 0) setListOpen(false);
5676
5685
  };
5677
5686
  const open = () => {
5678
5687
  if (!disabled) inputRef.current?.click();
@@ -5683,9 +5692,12 @@ function SFilePicker({
5683
5692
  const iconSize = size === "md" ? 20 : 16;
5684
5693
  const gapCls = size === "md" ? "gap-[var(--cmp-filepicker-md-gap)]" : "gap-[var(--cmp-filepicker-sm-gap)]";
5685
5694
  const inlinePlaceholder = inline && !disabled && !hasFiles;
5686
- const content = /* @__PURE__ */ jsxs(
5695
+ const showListbox = multiple && useMultipleListBox;
5696
+ const filesArr = multiple ? files : [];
5697
+ const contentInner = /* @__PURE__ */ jsxs(
5687
5698
  "div",
5688
5699
  {
5700
+ ref: contentBoxRef,
5689
5701
  className: cn("group/filepicker flex h-full w-full items-center", gapCls),
5690
5702
  style: { padding: inline ? 0 : `0 ${padX}` },
5691
5703
  children: [
@@ -5740,25 +5752,34 @@ function SFilePicker({
5740
5752
  ]
5741
5753
  }
5742
5754
  ),
5755
+ showListbox && hasFiles && !disabled && /* @__PURE__ */ jsx(
5756
+ Ariakit.PopoverDisclosure,
5757
+ {
5758
+ render: /* @__PURE__ */ jsx(SGhostButton, { icon: "caretDown", size: "xxs", ariaLabel: "toggle file list" }),
5759
+ className: cn("shrink-0 transition-transform duration-150", listOpen && "rotate-180")
5760
+ }
5761
+ ),
5743
5762
  !disabled && hasFiles && /* @__PURE__ */ jsx(SGhostButton, { icon: "close", size: "xxs", ariaLabel: "clear", onClick: clear })
5744
5763
  ]
5745
5764
  }
5746
5765
  );
5747
- const chips = multiple && files.length > 0 && /* @__PURE__ */ jsx(
5748
- "div",
5749
- {
5750
- className: cn(
5751
- "mt-[8px] flex gap-[8px]",
5752
- 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"
5753
- ),
5754
- style: useMultipleListBox ? {
5755
- width: typeof width === "number" ? `${width}px` : width,
5756
- // label 있으면 SField 입력 박스 시작 위치(labelWidth + fieldGap) 맞춰 정렬
5757
- marginLeft: label && labelWidth != null ? `calc(${typeof labelWidth === "number" ? `${labelWidth}px` : labelWidth} + var(--sys-space-field-${size}-gap))` : void 0
5758
- } : void 0,
5759
- children: files.map((f, i) => /* @__PURE__ */ jsx(SChip, { value: f.name, editable: false, onRemove: () => removeChip(i) }, i))
5760
- }
5761
- );
5766
+ const content = showListbox ? /* @__PURE__ */ jsxs(Ariakit.PopoverProvider, { open: listOpen, setOpen: setListOpen, placement: "bottom-start", children: [
5767
+ contentInner,
5768
+ /* @__PURE__ */ jsx(
5769
+ Ariakit.Popover,
5770
+ {
5771
+ portal: true,
5772
+ portalElement: portalContainer,
5773
+ gutter: 4,
5774
+ unmountOnHide: true,
5775
+ getAnchorRect: () => contentBoxRef.current?.getBoundingClientRect() ?? null,
5776
+ style: { minWidth: contentBoxRef.current?.offsetWidth },
5777
+ 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)]",
5778
+ children: filesArr.map((f, i) => /* @__PURE__ */ jsx(SChip, { value: f.name, editable: false, onRemove: () => removeChip(i) }, i))
5779
+ }
5780
+ )
5781
+ ] }) : contentInner;
5782
+ 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)) });
5762
5783
  return /* @__PURE__ */ jsxs("div", { className, style, children: [
5763
5784
  /* @__PURE__ */ jsx(
5764
5785
  SField,
@@ -5800,7 +5821,7 @@ function SKeyValueTable({
5800
5821
  if (fields.length === 0) return null;
5801
5822
  const emit = (name, value) => onChange?.({ name, value });
5802
5823
  const cellHeight = dense ? "var(--cmp-table-body-dense-height)" : "var(--cmp-table-keyValue-height)";
5803
- const cellPadY = dense ? "var(--cmp-table-body-dense-paddingY)" : "var(--cmp-table-keyValue-body-paddingY)";
5824
+ const cellPadY = dense ? "var(--cmp-table-body-paddingY-dense)" : "var(--cmp-table-keyValue-body-paddingY)";
5804
5825
  const renderField = (f) => {
5805
5826
  if (f.render) return f.render;
5806
5827
  const opt = f.options ?? {};