sellmate-design-system-react 0.7.0 → 0.8.1
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.
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs +61 -49
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.js +61 -49
- package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
- package/dist/components/SChipInput/SChipInput.cjs +64 -49
- package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
- package/dist/components/SChipInput/SChipInput.js +64 -49
- package/dist/components/SChipInput/SChipInput.js.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.cjs +61 -49
- package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.js +61 -49
- package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs +61 -49
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.js +61 -49
- package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
- package/dist/components/SField/SField.cjs +61 -49
- package/dist/components/SField/SField.cjs.map +1 -1
- package/dist/components/SField/SField.d.ts +5 -2
- package/dist/components/SField/SField.js +61 -49
- package/dist/components/SField/SField.js.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.cjs +61 -49
- package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.js +61 -49
- package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
- package/dist/components/SInput/SInput.cjs +61 -49
- package/dist/components/SInput/SInput.cjs.map +1 -1
- package/dist/components/SInput/SInput.js +61 -49
- package/dist/components/SInput/SInput.js.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs +72 -50
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.js +72 -50
- package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.cjs +61 -49
- package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.js +61 -49
- package/dist/components/SNumberInput/SNumberInput.js.map +1 -1
- package/dist/components/SPage/SPage.cjs +19 -2
- package/dist/components/SPage/SPage.cjs.map +1 -1
- package/dist/components/SPage/SPage.d.ts +7 -1
- package/dist/components/SPage/SPage.js +19 -2
- package/dist/components/SPage/SPage.js.map +1 -1
- package/dist/components/SPage/index.d.ts +1 -0
- package/dist/components/SPage/page.config.d.ts +8 -0
- package/dist/components/SPopup/SPopup.cjs.map +1 -1
- package/dist/components/SPopup/SPopup.js.map +1 -1
- package/dist/components/SPortal/SPortal.cjs +3 -0
- package/dist/components/SPortal/SPortal.cjs.map +1 -1
- package/dist/components/SPortal/SPortal.d.ts +3 -1
- package/dist/components/SPortal/SPortal.js +3 -0
- package/dist/components/SPortal/SPortal.js.map +1 -1
- package/dist/components/SScrollArea/SScrollArea.cjs.map +1 -1
- package/dist/components/SScrollArea/SScrollArea.js.map +1 -1
- package/dist/components/SSelect/SSelect.cjs +72 -50
- package/dist/components/SSelect/SSelect.cjs.map +1 -1
- package/dist/components/SSelect/SSelect.js +72 -50
- package/dist/components/SSelect/SSelect.js.map +1 -1
- package/dist/components/STable/STable.cjs +78 -56
- package/dist/components/STable/STable.cjs.map +1 -1
- package/dist/components/STable/STable.d.ts +2 -0
- package/dist/components/STable/STable.js +78 -56
- package/dist/components/STable/STable.js.map +1 -1
- package/dist/components/STextarea/STextarea.cjs +61 -49
- package/dist/components/STextarea/STextarea.cjs.map +1 -1
- package/dist/components/STextarea/STextarea.js +61 -49
- package/dist/components/STextarea/STextarea.js.map +1 -1
- package/dist/components/STimePicker/STimePicker.cjs +61 -49
- package/dist/components/STimePicker/STimePicker.cjs.map +1 -1
- package/dist/components/STimePicker/STimePicker.js +61 -49
- package/dist/components/STimePicker/STimePicker.js.map +1 -1
- package/dist/components/STimeRangePicker/STimeRangePicker.cjs +61 -49
- package/dist/components/STimeRangePicker/STimeRangePicker.cjs.map +1 -1
- package/dist/components/STimeRangePicker/STimeRangePicker.js +61 -49
- package/dist/components/STimeRangePicker/STimeRangePicker.js.map +1 -1
- package/dist/index.cjs +95 -58
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +95 -59
- package/dist/index.js.map +1 -1
- package/dist/lib/scrollbar.cjs +2 -0
- package/dist/lib/scrollbar.cjs.map +1 -1
- package/dist/lib/scrollbar.d.ts +13 -1
- package/dist/lib/scrollbar.js +2 -1
- package/dist/lib/scrollbar.js.map +1 -1
- package/dist/styles.css +53 -3
- package/package.json +1 -1
|
@@ -3658,6 +3658,7 @@ var SField = react.forwardRef(function SField2({
|
|
|
3658
3658
|
const resolvedSuccess = status === "pass";
|
|
3659
3659
|
const showError = resolvedError && errorMessage !== "";
|
|
3660
3660
|
const interactive = !disabled && !readOnly;
|
|
3661
|
+
const hug = cssLen(width) !== void 0;
|
|
3661
3662
|
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)";
|
|
3662
3663
|
const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
|
|
3663
3664
|
const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
|
|
@@ -3666,7 +3667,13 @@ var SField = react.forwardRef(function SField2({
|
|
|
3666
3667
|
{
|
|
3667
3668
|
ref: rootRef,
|
|
3668
3669
|
"data-name": name || void 0,
|
|
3669
|
-
className: cn(
|
|
3670
|
+
className: cn(
|
|
3671
|
+
"h-fit flex-col",
|
|
3672
|
+
// hug 시 inline-flex 를 유지하면 기존에 세로로 쌓여 있던 필드들이 한 줄에 붙어버리므로
|
|
3673
|
+
// 블록 레벨(flex)로 두어 쌓임은 그대로 유지한다. 나란히 놓으려면 부모를 flex 로.
|
|
3674
|
+
hug ? "flex w-fit max-w-full" : "inline-flex w-full",
|
|
3675
|
+
className
|
|
3676
|
+
),
|
|
3670
3677
|
style,
|
|
3671
3678
|
onMouseEnter,
|
|
3672
3679
|
onMouseLeave,
|
|
@@ -3704,55 +3711,60 @@ var SField = react.forwardRef(function SField2({
|
|
|
3704
3711
|
]
|
|
3705
3712
|
}
|
|
3706
3713
|
),
|
|
3707
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
|
|
3714
|
-
|
|
3714
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3715
|
+
"div",
|
|
3716
|
+
{
|
|
3717
|
+
className: cn("flex min-w-0 flex-col", !hug && "flex-1"),
|
|
3718
|
+
style: { width: cssLen(width), minWidth: cssLen(minWidth) },
|
|
3719
|
+
children: [
|
|
3720
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3721
|
+
"div",
|
|
3722
|
+
{
|
|
3723
|
+
className: cn(
|
|
3724
|
+
"relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
|
|
3725
|
+
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]",
|
|
3726
|
+
disabled && "cursor-not-allowed"
|
|
3727
|
+
),
|
|
3728
|
+
style: {
|
|
3729
|
+
// @ts-expect-error CSS 변수
|
|
3730
|
+
"--field-bc": borderColor,
|
|
3731
|
+
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
3732
|
+
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3733
|
+
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3734
|
+
"borderRadius": s.radius,
|
|
3735
|
+
"background": bgColor,
|
|
3736
|
+
"color": textColor
|
|
3737
|
+
},
|
|
3738
|
+
"data-focused": focused || void 0,
|
|
3739
|
+
"data-hovered": hovered || void 0,
|
|
3740
|
+
children: [
|
|
3741
|
+
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3742
|
+
"div",
|
|
3743
|
+
{
|
|
3744
|
+
className: "flex shrink-0 items-center gap-(--cmp-field-addonLabel-gap) whitespace-nowrap border-r border-solid px-(--cmp-field-addonLabel-paddingX) text-12 font-medium leading-20",
|
|
3745
|
+
style: {
|
|
3746
|
+
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
3747
|
+
width: cssLen(labelWidth),
|
|
3748
|
+
justifyContent: ALIGN[addonAlign],
|
|
3749
|
+
background: "var(--cmp-field-addonLabel-bg)",
|
|
3750
|
+
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
3751
|
+
borderTopLeftRadius: s.radius - 1,
|
|
3752
|
+
borderBottomLeftRadius: s.radius - 1
|
|
3753
|
+
},
|
|
3754
|
+
children: [
|
|
3755
|
+
icon && !label && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
3756
|
+
effectiveAddonLabel
|
|
3757
|
+
]
|
|
3758
|
+
}
|
|
3759
|
+
),
|
|
3760
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1", children })
|
|
3761
|
+
]
|
|
3762
|
+
}
|
|
3715
3763
|
),
|
|
3716
|
-
|
|
3717
|
-
|
|
3718
|
-
|
|
3719
|
-
|
|
3720
|
-
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3721
|
-
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3722
|
-
"minWidth": cssLen(minWidth),
|
|
3723
|
-
"width": cssLen(width),
|
|
3724
|
-
"borderRadius": s.radius,
|
|
3725
|
-
"background": bgColor,
|
|
3726
|
-
"color": textColor
|
|
3727
|
-
},
|
|
3728
|
-
"data-focused": focused || void 0,
|
|
3729
|
-
"data-hovered": hovered || void 0,
|
|
3730
|
-
children: [
|
|
3731
|
-
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3732
|
-
"div",
|
|
3733
|
-
{
|
|
3734
|
-
className: "flex shrink-0 items-center gap-(--cmp-field-addonLabel-gap) whitespace-nowrap border-r border-solid px-(--cmp-field-addonLabel-paddingX) text-12 font-medium leading-20",
|
|
3735
|
-
style: {
|
|
3736
|
-
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
3737
|
-
width: cssLen(labelWidth),
|
|
3738
|
-
justifyContent: ALIGN[addonAlign],
|
|
3739
|
-
background: "var(--cmp-field-addonLabel-bg)",
|
|
3740
|
-
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
3741
|
-
borderTopLeftRadius: s.radius - 1,
|
|
3742
|
-
borderBottomLeftRadius: s.radius - 1
|
|
3743
|
-
},
|
|
3744
|
-
children: [
|
|
3745
|
-
icon && !label && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
3746
|
-
effectiveAddonLabel
|
|
3747
|
-
]
|
|
3748
|
-
}
|
|
3749
|
-
),
|
|
3750
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1", children })
|
|
3751
|
-
]
|
|
3752
|
-
}
|
|
3753
|
-
),
|
|
3754
|
-
showError ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-errorMessage-color)", children: errorMessage }) : hint !== "" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-hint-color)", children: hint }) : null
|
|
3755
|
-
] })
|
|
3764
|
+
showError ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-errorMessage-color)", children: errorMessage }) : hint !== "" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-hint-color)", children: hint }) : null
|
|
3765
|
+
]
|
|
3766
|
+
}
|
|
3767
|
+
)
|
|
3756
3768
|
] })
|
|
3757
3769
|
}
|
|
3758
3770
|
);
|
|
@@ -3773,6 +3785,7 @@ function SPortal({
|
|
|
3773
3785
|
viewportPadding = 0,
|
|
3774
3786
|
onOpenAutoFocus,
|
|
3775
3787
|
onCloseAutoFocus,
|
|
3788
|
+
onPointerDownOutside,
|
|
3776
3789
|
children,
|
|
3777
3790
|
className,
|
|
3778
3791
|
style,
|
|
@@ -3801,7 +3814,9 @@ function SPortal({
|
|
|
3801
3814
|
onPointerDownOutside: (e) => {
|
|
3802
3815
|
if (persistent || anchorRef.current?.contains(e.target)) {
|
|
3803
3816
|
e.preventDefault();
|
|
3817
|
+
return;
|
|
3804
3818
|
}
|
|
3819
|
+
onPointerDownOutside?.(e);
|
|
3805
3820
|
},
|
|
3806
3821
|
onFocusOutside: (e) => {
|
|
3807
3822
|
if (persistent || anchorRef.current?.contains(e.target)) {
|
|
@@ -3906,6 +3921,7 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3906
3921
|
const triggerRef = react.useRef(null);
|
|
3907
3922
|
const searchInputRef = react.useRef(null);
|
|
3908
3923
|
const listRef = react.useRef(null);
|
|
3924
|
+
const dismissedByPointerRef = react.useRef(false);
|
|
3909
3925
|
const flat = react.useMemo(() => flattenOptions(options), [options]);
|
|
3910
3926
|
const selectable = react.useMemo(() => selectableOptions(flat), [flat]);
|
|
3911
3927
|
const hasLeaf = react.useMemo(() => flat.some((o) => !o.isGroup), [flat]);
|
|
@@ -3935,7 +3951,9 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3935
3951
|
const commitOpen = (next) => {
|
|
3936
3952
|
setOpen(next);
|
|
3937
3953
|
onOpenChange?.(next);
|
|
3938
|
-
if (
|
|
3954
|
+
if (next) {
|
|
3955
|
+
dismissedByPointerRef.current = false;
|
|
3956
|
+
} else {
|
|
3939
3957
|
setPendingOpen(false);
|
|
3940
3958
|
setSearch("");
|
|
3941
3959
|
if (rules && rules.length > 0) {
|
|
@@ -4159,8 +4177,12 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
4159
4177
|
event.preventDefault();
|
|
4160
4178
|
requestAnimationFrame(() => searchInputRef.current?.focus());
|
|
4161
4179
|
},
|
|
4180
|
+
onPointerDownOutside: () => {
|
|
4181
|
+
dismissedByPointerRef.current = true;
|
|
4182
|
+
},
|
|
4162
4183
|
onCloseAutoFocus: (event) => {
|
|
4163
4184
|
event.preventDefault();
|
|
4185
|
+
if (dismissedByPointerRef.current) return;
|
|
4164
4186
|
triggerRef.current?.focus();
|
|
4165
4187
|
},
|
|
4166
4188
|
className: "rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)]",
|
|
@@ -4666,7 +4688,7 @@ var STable = react.forwardRef(function STable2({
|
|
|
4666
4688
|
position: "sticky",
|
|
4667
4689
|
left: isLeft ? "var(--sticky-left-offset)" : void 0,
|
|
4668
4690
|
right: isRight ? "var(--sticky-right-offset)" : void 0,
|
|
4669
|
-
zIndex:
|
|
4691
|
+
zIndex: 6
|
|
4670
4692
|
};
|
|
4671
4693
|
};
|
|
4672
4694
|
const stickyShadowClass = (i) => {
|
|
@@ -4723,7 +4745,7 @@ var STable = react.forwardRef(function STable2({
|
|
|
4723
4745
|
{
|
|
4724
4746
|
className: cn(
|
|
4725
4747
|
// 원본 .th--selected: 48px 고정폭, 항상 left sticky, 체크박스 중앙정렬
|
|
4726
|
-
"sticky left-0 z-[
|
|
4748
|
+
"sticky left-0 z-[7] border-b border-solid border-[color:var(--cmp-table-border-color)] bg-[var(--cmp-table-header-bg)] text-center align-middle",
|
|
4727
4749
|
stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
|
|
4728
4750
|
),
|
|
4729
4751
|
style: {
|
|
@@ -4748,13 +4770,13 @@ var STable = react.forwardRef(function STable2({
|
|
|
4748
4770
|
{
|
|
4749
4771
|
className: cn(
|
|
4750
4772
|
"relative border-b border-solid border-[color:var(--cmp-table-border-color)] bg-[var(--cmp-table-header-bg)] px-[16px] text-[12px] font-medium leading-[20px] text-[color:var(--sys-color-fg-primary)]",
|
|
4751
|
-
stickyInfo(i).isSticky && "z-[
|
|
4773
|
+
stickyInfo(i).isSticky && "z-[6]",
|
|
4752
4774
|
stickyShadowClass(i),
|
|
4753
4775
|
col.thClass
|
|
4754
4776
|
),
|
|
4755
4777
|
style: { textAlign: col.align ?? "left", ...cellStyle(i), ...col.thStyle },
|
|
4756
4778
|
children: [
|
|
4757
|
-
/* @__PURE__ */ jsxRuntime.
|
|
4779
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4758
4780
|
"span",
|
|
4759
4781
|
{
|
|
4760
4782
|
className: cn(
|
|
@@ -4763,10 +4785,10 @@ var STable = react.forwardRef(function STable2({
|
|
|
4763
4785
|
col.align === "center" && "justify-center",
|
|
4764
4786
|
col.align === "right" && "justify-end"
|
|
4765
4787
|
),
|
|
4766
|
-
children: [
|
|
4788
|
+
children: col.renderHeader ? col.renderHeader(col, i) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
4767
4789
|
col.icon && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: col.icon, size: 16, color: col.iconColor }),
|
|
4768
4790
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: col.label })
|
|
4769
|
-
]
|
|
4791
|
+
] })
|
|
4770
4792
|
}
|
|
4771
4793
|
),
|
|
4772
4794
|
resizable && !col.autoWidth && i < visibleCols.length - 1 && // 원본 th__resizer: 셀 우측 경계 안쪽 4px 그립(좌우 1px #CCCCCC 라인, 세로 16px).
|