sellmate-design-system-react 0.6.1 → 0.8.0
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 +62 -48
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.js +62 -48
- package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
- package/dist/components/SChipInput/SChipInput.cjs +62 -48
- package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
- package/dist/components/SChipInput/SChipInput.js +62 -48
- package/dist/components/SChipInput/SChipInput.js.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.cjs +62 -48
- package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.js +62 -48
- package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs +62 -48
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.js +62 -48
- package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
- package/dist/components/SField/SField.cjs +62 -48
- package/dist/components/SField/SField.cjs.map +1 -1
- package/dist/components/SField/SField.d.ts +6 -1
- package/dist/components/SField/SField.js +62 -48
- package/dist/components/SField/SField.js.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.cjs +62 -48
- package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.js +62 -48
- package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
- package/dist/components/SInput/SInput.cjs +62 -48
- package/dist/components/SInput/SInput.cjs.map +1 -1
- package/dist/components/SInput/SInput.js +62 -48
- package/dist/components/SInput/SInput.js.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs +74 -49
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.js +74 -49
- package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.cjs +62 -48
- package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.js +62 -48
- 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 +18 -1
- package/dist/components/SPopup/SPopup.cjs.map +1 -1
- package/dist/components/SPopup/SPopup.js +18 -1
- package/dist/components/SPopup/SPopup.js.map +1 -1
- package/dist/components/SScrollArea/SScrollArea.cjs +64 -0
- package/dist/components/SScrollArea/SScrollArea.cjs.map +1 -0
- package/dist/components/SScrollArea/SScrollArea.d.ts +21 -0
- package/dist/components/SScrollArea/SScrollArea.js +62 -0
- package/dist/components/SScrollArea/SScrollArea.js.map +1 -0
- package/dist/components/SScrollArea/index.d.ts +2 -0
- package/dist/components/SScrollArea/scrollArea.config.d.ts +2 -0
- package/dist/components/SSelect/SSelect.cjs +74 -49
- package/dist/components/SSelect/SSelect.cjs.map +1 -1
- package/dist/components/SSelect/SSelect.js +74 -49
- package/dist/components/SSelect/SSelect.js.map +1 -1
- package/dist/components/SStepper/SStepper.cjs +7 -11
- package/dist/components/SStepper/SStepper.cjs.map +1 -1
- package/dist/components/SStepper/SStepper.js +7 -11
- package/dist/components/SStepper/SStepper.js.map +1 -1
- package/dist/components/STable/STable.cjs +83 -55
- package/dist/components/STable/STable.cjs.map +1 -1
- package/dist/components/STable/STable.d.ts +2 -0
- package/dist/components/STable/STable.js +83 -55
- package/dist/components/STable/STable.js.map +1 -1
- package/dist/components/STextarea/STextarea.cjs +62 -48
- package/dist/components/STextarea/STextarea.cjs.map +1 -1
- package/dist/components/STextarea/STextarea.js +62 -48
- package/dist/components/STextarea/STextarea.js.map +1 -1
- package/dist/components/STimePicker/STimePicker.cjs +91 -54
- package/dist/components/STimePicker/STimePicker.cjs.map +1 -1
- package/dist/components/STimePicker/STimePicker.js +91 -54
- package/dist/components/STimePicker/STimePicker.js.map +1 -1
- package/dist/components/STimeRangePicker/STimeRangePicker.cjs +93 -54
- package/dist/components/STimeRangePicker/STimeRangePicker.cjs.map +1 -1
- package/dist/components/STimeRangePicker/STimeRangePicker.js +93 -54
- package/dist/components/STimeRangePicker/STimeRangePicker.js.map +1 -1
- package/dist/index.cjs +220 -81
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +218 -82
- package/dist/index.js.map +1 -1
- package/dist/lib/scrollbar.cjs +15 -0
- package/dist/lib/scrollbar.cjs.map +1 -0
- package/dist/lib/scrollbar.d.ts +32 -0
- package/dist/lib/scrollbar.js +10 -0
- package/dist/lib/scrollbar.js.map +1 -0
- package/dist/styles.css +168 -17
- package/package.json +1 -1
|
@@ -40,6 +40,12 @@ function cn(...inputs) {
|
|
|
40
40
|
return twMerge(clsx.clsx(inputs));
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
// src/lib/scrollbar.ts
|
|
44
|
+
var FIREFOX_SCROLLBAR_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-width:thin] supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_transparent]";
|
|
45
|
+
var SCROLLBAR_CLASS = `${FIREFOX_SCROLLBAR_CLASS} [&::-webkit-scrollbar]:h-[12px] [&::-webkit-scrollbar]:w-[12px] [&::-webkit-scrollbar]:bg-transparent [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:border-2 [&::-webkit-scrollbar-thumb]:border-solid [&::-webkit-scrollbar-thumb]:border-transparent [&::-webkit-scrollbar-thumb]:bg-[var(--color-grey-45)] [&::-webkit-scrollbar-thumb]:bg-clip-padding`;
|
|
46
|
+
var SCROLLBAR_TRACK_BG_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-grey-10)] [&::-webkit-scrollbar]:bg-[var(--color-grey-10)] [&::-webkit-scrollbar-track]:bg-[var(--color-grey-10)]";
|
|
47
|
+
var SCROLLBAR_TRACK_BORDER_CLASS = "[&::-webkit-scrollbar-track:vertical]:[border-left:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-track:horizontal]:[border-top:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-thumb:vertical]:[border-left-width:3px] [&::-webkit-scrollbar-thumb:horizontal]:[border-top-width:3px]";
|
|
48
|
+
|
|
43
49
|
// src/lib/color.ts
|
|
44
50
|
var COLOR_KEYS = [
|
|
45
51
|
"white",
|
|
@@ -3616,6 +3622,7 @@ var SField = react.forwardRef(function SField2({
|
|
|
3616
3622
|
disabled = false,
|
|
3617
3623
|
readOnly = false,
|
|
3618
3624
|
width,
|
|
3625
|
+
minWidth,
|
|
3619
3626
|
multiline = false,
|
|
3620
3627
|
borderless = false,
|
|
3621
3628
|
children,
|
|
@@ -3651,6 +3658,7 @@ var SField = react.forwardRef(function SField2({
|
|
|
3651
3658
|
const resolvedSuccess = status === "pass";
|
|
3652
3659
|
const showError = resolvedError && errorMessage !== "";
|
|
3653
3660
|
const interactive = !disabled && !readOnly;
|
|
3661
|
+
const hug = cssLen(width) !== void 0;
|
|
3654
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)";
|
|
3655
3663
|
const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
|
|
3656
3664
|
const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
|
|
@@ -3659,7 +3667,13 @@ var SField = react.forwardRef(function SField2({
|
|
|
3659
3667
|
{
|
|
3660
3668
|
ref: rootRef,
|
|
3661
3669
|
"data-name": name || void 0,
|
|
3662
|
-
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
|
+
),
|
|
3663
3677
|
style,
|
|
3664
3678
|
onMouseEnter,
|
|
3665
3679
|
onMouseLeave,
|
|
@@ -3697,54 +3711,60 @@ var SField = react.forwardRef(function SField2({
|
|
|
3697
3711
|
]
|
|
3698
3712
|
}
|
|
3699
3713
|
),
|
|
3700
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3701
|
-
|
|
3702
|
-
|
|
3703
|
-
|
|
3704
|
-
|
|
3705
|
-
|
|
3706
|
-
|
|
3707
|
-
|
|
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
|
+
}
|
|
3708
3763
|
),
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3714
|
-
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3715
|
-
"width": cssLen(width),
|
|
3716
|
-
"borderRadius": s.radius,
|
|
3717
|
-
"background": bgColor,
|
|
3718
|
-
"color": textColor
|
|
3719
|
-
},
|
|
3720
|
-
"data-focused": focused || void 0,
|
|
3721
|
-
"data-hovered": hovered || void 0,
|
|
3722
|
-
children: [
|
|
3723
|
-
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3724
|
-
"div",
|
|
3725
|
-
{
|
|
3726
|
-
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",
|
|
3727
|
-
style: {
|
|
3728
|
-
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
3729
|
-
width: cssLen(labelWidth),
|
|
3730
|
-
justifyContent: ALIGN[addonAlign],
|
|
3731
|
-
background: "var(--cmp-field-addonLabel-bg)",
|
|
3732
|
-
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
3733
|
-
borderTopLeftRadius: s.radius - 1,
|
|
3734
|
-
borderBottomLeftRadius: s.radius - 1
|
|
3735
|
-
},
|
|
3736
|
-
children: [
|
|
3737
|
-
icon && !label && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
3738
|
-
effectiveAddonLabel
|
|
3739
|
-
]
|
|
3740
|
-
}
|
|
3741
|
-
),
|
|
3742
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1", children })
|
|
3743
|
-
]
|
|
3744
|
-
}
|
|
3745
|
-
),
|
|
3746
|
-
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
|
|
3747
|
-
] })
|
|
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
|
+
)
|
|
3748
3768
|
] })
|
|
3749
3769
|
}
|
|
3750
3770
|
);
|
|
@@ -4164,7 +4184,12 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
4164
4184
|
"div",
|
|
4165
4185
|
{
|
|
4166
4186
|
ref: listRef,
|
|
4167
|
-
className:
|
|
4187
|
+
className: cn(
|
|
4188
|
+
"overflow-auto",
|
|
4189
|
+
SCROLLBAR_CLASS,
|
|
4190
|
+
SCROLLBAR_TRACK_BG_CLASS,
|
|
4191
|
+
SCROLLBAR_TRACK_BORDER_CLASS
|
|
4192
|
+
),
|
|
4168
4193
|
style: { maxHeight: dropdownHeight },
|
|
4169
4194
|
onMouseLeave: () => setFocusedIndex(-1),
|
|
4170
4195
|
children: [
|
|
@@ -4653,7 +4678,7 @@ var STable = react.forwardRef(function STable2({
|
|
|
4653
4678
|
position: "sticky",
|
|
4654
4679
|
left: isLeft ? "var(--sticky-left-offset)" : void 0,
|
|
4655
4680
|
right: isRight ? "var(--sticky-right-offset)" : void 0,
|
|
4656
|
-
zIndex:
|
|
4681
|
+
zIndex: 6
|
|
4657
4682
|
};
|
|
4658
4683
|
};
|
|
4659
4684
|
const stickyShadowClass = (i) => {
|
|
@@ -4679,6 +4704,9 @@ var STable = react.forwardRef(function STable2({
|
|
|
4679
4704
|
onScroll: handleScroll,
|
|
4680
4705
|
className: cn(
|
|
4681
4706
|
"bg-white relative overflow-auto border border-solid border-[color:var(--cmp-table-border-color)]",
|
|
4707
|
+
SCROLLBAR_CLASS,
|
|
4708
|
+
SCROLLBAR_TRACK_BG_CLASS,
|
|
4709
|
+
SCROLLBAR_TRACK_BORDER_CLASS,
|
|
4682
4710
|
radiusClass,
|
|
4683
4711
|
// 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시 스크롤·인터랙션 차단
|
|
4684
4712
|
(isLoading || rowCount === 0) && "overflow-hidden pointer-events-none"
|
|
@@ -4707,7 +4735,7 @@ var STable = react.forwardRef(function STable2({
|
|
|
4707
4735
|
{
|
|
4708
4736
|
className: cn(
|
|
4709
4737
|
// 원본 .th--selected: 48px 고정폭, 항상 left sticky, 체크박스 중앙정렬
|
|
4710
|
-
"sticky left-0 z-[
|
|
4738
|
+
"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",
|
|
4711
4739
|
stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
|
|
4712
4740
|
),
|
|
4713
4741
|
style: {
|
|
@@ -4732,13 +4760,13 @@ var STable = react.forwardRef(function STable2({
|
|
|
4732
4760
|
{
|
|
4733
4761
|
className: cn(
|
|
4734
4762
|
"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)]",
|
|
4735
|
-
stickyInfo(i).isSticky && "z-[
|
|
4763
|
+
stickyInfo(i).isSticky && "z-[6]",
|
|
4736
4764
|
stickyShadowClass(i),
|
|
4737
4765
|
col.thClass
|
|
4738
4766
|
),
|
|
4739
4767
|
style: { textAlign: col.align ?? "left", ...cellStyle(i), ...col.thStyle },
|
|
4740
4768
|
children: [
|
|
4741
|
-
/* @__PURE__ */ jsxRuntime.
|
|
4769
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4742
4770
|
"span",
|
|
4743
4771
|
{
|
|
4744
4772
|
className: cn(
|
|
@@ -4747,10 +4775,10 @@ var STable = react.forwardRef(function STable2({
|
|
|
4747
4775
|
col.align === "center" && "justify-center",
|
|
4748
4776
|
col.align === "right" && "justify-end"
|
|
4749
4777
|
),
|
|
4750
|
-
children: [
|
|
4778
|
+
children: col.renderHeader ? col.renderHeader(col, i) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
4751
4779
|
col.icon && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: col.icon, size: 16, color: col.iconColor }),
|
|
4752
4780
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: col.label })
|
|
4753
|
-
]
|
|
4781
|
+
] })
|
|
4754
4782
|
}
|
|
4755
4783
|
),
|
|
4756
4784
|
resizable && !col.autoWidth && i < visibleCols.length - 1 && // 원본 th__resizer: 셀 우측 경계 안쪽 4px 그립(좌우 1px #CCCCCC 라인, 세로 16px).
|