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
@@ -3152,7 +3152,7 @@ var STooltip = react.forwardRef(function STooltip2({
3152
3152
  if (disabled || body == null) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: triggerNode });
3153
3153
  const isHover = trigger === "hover";
3154
3154
  const contentClass = cn(
3155
- "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)]",
3155
+ "z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px]",
3156
3156
  FLOATING_SLIDE_ANIM,
3157
3157
  className
3158
3158
  );
@@ -4495,7 +4495,7 @@ function ItemList({
4495
4495
  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",
4496
4496
  // 하위가 전부 비활성이면(select.config 에서 bubble-up) 어미 그룹도 비활성 처리:
4497
4497
  // 텍스트는 회색(#888), depth1 그룹은 파란 배경 대신 회색(#EEE)으로 (depth2 는 #F6F6F6 유지)
4498
- o.disabled && "text-[color:var(--cmp-listItem-content-disabled)]",
4498
+ o.disabled && "cursor-not-allowed text-[color:var(--cmp-listItem-content-disabled)]",
4499
4499
  o.disabled && isDepth1 && "bg-[var(--cmp-listItem-depth1-bg-disabled)]"
4500
4500
  ),
4501
4501
  style: { paddingLeft: padLeft },
@@ -4510,10 +4510,14 @@ function ItemList({
4510
4510
  {
4511
4511
  value: o.value,
4512
4512
  disabled: o.disabled,
4513
+ accessibleWhenDisabled: true,
4513
4514
  className: cn(
4514
4515
  itemBase,
4515
4516
  isSelected && !multi && "font-bold text-[color:var(--cmp-listItem-content-selected)]",
4516
- activeClass
4517
+ // Ariakit은 disabled 항목도 hover 시 active(data-active-item) 처리하므로,
4518
+ // 비활성 항목에는 hover 하이라이트를 적용하지 않아 회색 비활성 스타일을 유지한다.
4519
+ // (원본 Stencil의 `--focused...:not(--disabled)` 규칙과 동일한 의도)
4520
+ !o.disabled && activeClass
4517
4521
  ),
4518
4522
  style: { paddingTop: 4, paddingBottom: 4, paddingRight: 12, paddingLeft: padLeft },
4519
4523
  render: useSearch ? /* @__PURE__ */ jsxRuntime.jsx(Ariakit__namespace.ComboboxItem, {}) : void 0,
@@ -4526,7 +4530,7 @@ function ItemList({
4526
4530
  "flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-[2px] border border-solid",
4527
4531
  o.disabled ? (
4528
4532
  // 비활성: 회색 채움(#E1E1E1) + 회색 테두리(#CCCCCC)
4529
- "border-[color:var(--cmp-checkbox-border-disabled)] bg-[var(--cmp-checkbox-bg-disabled)]"
4533
+ "cursor-not-allowed border-[color:var(--cmp-checkbox-border-disabled)] bg-[var(--cmp-checkbox-bg-disabled)]"
4530
4534
  ) : cn(
4531
4535
  "group-data-[active-item]:border-[color:var(--cmp-checkbox-checked-border-inverse)]",
4532
4536
  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"
@@ -4661,7 +4665,7 @@ function SRadioGroup({
4661
4665
  role: "radiogroup",
4662
4666
  className: cn(
4663
4667
  "inline-flex",
4664
- direction === "vertical" ? "flex-col gap-[8px]" : "flex-row gap-[20px]",
4668
+ direction === "vertical" ? "flex-col gap-[var(--cmp-radio-group-gap-vertical)]" : "flex-row gap-[var(--cmp-radio-group-gap-horizontal)]",
4665
4669
  className
4666
4670
  ),
4667
4671
  style,
@@ -5639,7 +5643,10 @@ function SFilePicker({
5639
5643
  const autoId = react.useId();
5640
5644
  const resolvedName = name ?? autoId;
5641
5645
  const inputRef = react.useRef(null);
5646
+ const contentBoxRef = react.useRef(null);
5642
5647
  const [ruleError, setRuleError] = react.useState("");
5648
+ const [listOpen, setListOpen] = react.useState(false);
5649
+ const portalContainer = usePortalContainer();
5643
5650
  const files = multiple ? Array.isArray(value) ? value : [] : value && !Array.isArray(value) ? value : null;
5644
5651
  const hasFiles = multiple ? files.length > 0 : !!files;
5645
5652
  const displayText = !hasFiles ? placeholder : multiple ? files.map((f) => f.name).join(", ") : files.name;
@@ -5693,10 +5700,12 @@ function SFilePicker({
5693
5700
  e.stopPropagation();
5694
5701
  if (disabled) return;
5695
5702
  onValueChange?.(multiple ? [] : null);
5703
+ setListOpen(false);
5696
5704
  };
5697
5705
  const removeChip = (i) => {
5698
5706
  const next = files.filter((_, idx) => idx !== i);
5699
5707
  onValueChange?.(next);
5708
+ if (next.length === 0) setListOpen(false);
5700
5709
  };
5701
5710
  const open = () => {
5702
5711
  if (!disabled) inputRef.current?.click();
@@ -5707,9 +5716,12 @@ function SFilePicker({
5707
5716
  const iconSize = size === "md" ? 20 : 16;
5708
5717
  const gapCls = size === "md" ? "gap-[var(--cmp-filepicker-md-gap)]" : "gap-[var(--cmp-filepicker-sm-gap)]";
5709
5718
  const inlinePlaceholder = inline && !disabled && !hasFiles;
5710
- const content = /* @__PURE__ */ jsxRuntime.jsxs(
5719
+ const showListbox = multiple && useMultipleListBox;
5720
+ const filesArr = multiple ? files : [];
5721
+ const contentInner = /* @__PURE__ */ jsxRuntime.jsxs(
5711
5722
  "div",
5712
5723
  {
5724
+ ref: contentBoxRef,
5713
5725
  className: cn("group/filepicker flex h-full w-full items-center", gapCls),
5714
5726
  style: { padding: inline ? 0 : `0 ${padX}` },
5715
5727
  children: [
@@ -5764,25 +5776,34 @@ function SFilePicker({
5764
5776
  ]
5765
5777
  }
5766
5778
  ),
5779
+ showListbox && hasFiles && !disabled && /* @__PURE__ */ jsxRuntime.jsx(
5780
+ Ariakit__namespace.PopoverDisclosure,
5781
+ {
5782
+ render: /* @__PURE__ */ jsxRuntime.jsx(SGhostButton, { icon: "caretDown", size: "xxs", ariaLabel: "toggle file list" }),
5783
+ className: cn("shrink-0 transition-transform duration-150", listOpen && "rotate-180")
5784
+ }
5785
+ ),
5767
5786
  !disabled && hasFiles && /* @__PURE__ */ jsxRuntime.jsx(SGhostButton, { icon: "close", size: "xxs", ariaLabel: "clear", onClick: clear })
5768
5787
  ]
5769
5788
  }
5770
5789
  );
5771
- const chips = multiple && files.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
5772
- "div",
5773
- {
5774
- className: cn(
5775
- "mt-[8px] flex gap-[8px]",
5776
- 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"
5777
- ),
5778
- style: useMultipleListBox ? {
5779
- width: typeof width === "number" ? `${width}px` : width,
5780
- // label 있으면 SField 입력 박스 시작 위치(labelWidth + fieldGap) 맞춰 정렬
5781
- marginLeft: label && labelWidth != null ? `calc(${typeof labelWidth === "number" ? `${labelWidth}px` : labelWidth} + var(--sys-space-field-${size}-gap))` : void 0
5782
- } : void 0,
5783
- children: files.map((f, i) => /* @__PURE__ */ jsxRuntime.jsx(SChip, { value: f.name, editable: false, onRemove: () => removeChip(i) }, i))
5784
- }
5785
- );
5790
+ const content = showListbox ? /* @__PURE__ */ jsxRuntime.jsxs(Ariakit__namespace.PopoverProvider, { open: listOpen, setOpen: setListOpen, placement: "bottom-start", children: [
5791
+ contentInner,
5792
+ /* @__PURE__ */ jsxRuntime.jsx(
5793
+ Ariakit__namespace.Popover,
5794
+ {
5795
+ portal: true,
5796
+ portalElement: portalContainer,
5797
+ gutter: 4,
5798
+ unmountOnHide: true,
5799
+ getAnchorRect: () => contentBoxRef.current?.getBoundingClientRect() ?? null,
5800
+ style: { minWidth: contentBoxRef.current?.offsetWidth },
5801
+ 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)]",
5802
+ children: filesArr.map((f, i) => /* @__PURE__ */ jsxRuntime.jsx(SChip, { value: f.name, editable: false, onRemove: () => removeChip(i) }, i))
5803
+ }
5804
+ )
5805
+ ] }) : contentInner;
5806
+ const chips = multiple && !useMultipleListBox && filesArr.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-[8px] flex flex-wrap gap-[8px]", children: filesArr.map((f, i) => /* @__PURE__ */ jsxRuntime.jsx(SChip, { value: f.name, editable: false, onRemove: () => removeChip(i) }, i)) });
5786
5807
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, style, children: [
5787
5808
  /* @__PURE__ */ jsxRuntime.jsx(
5788
5809
  SField,
@@ -5824,7 +5845,7 @@ function SKeyValueTable({
5824
5845
  if (fields.length === 0) return null;
5825
5846
  const emit = (name, value) => onChange?.({ name, value });
5826
5847
  const cellHeight = dense ? "var(--cmp-table-body-dense-height)" : "var(--cmp-table-keyValue-height)";
5827
- const cellPadY = dense ? "var(--cmp-table-body-dense-paddingY)" : "var(--cmp-table-keyValue-body-paddingY)";
5848
+ const cellPadY = dense ? "var(--cmp-table-body-paddingY-dense)" : "var(--cmp-table-keyValue-body-paddingY)";
5828
5849
  const renderField = (f) => {
5829
5850
  if (f.render) return f.render;
5830
5851
  const opt = f.options ?? {};