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
|
@@ -23,6 +23,8 @@ export interface STableColumn {
|
|
|
23
23
|
iconColor?: SColor;
|
|
24
24
|
/** 셀 커스텀 렌더 (React 확장) */
|
|
25
25
|
render?: (row: SRow, value: any) => ReactNode;
|
|
26
|
+
/** 헤더 셀 커스텀 렌더 (React 확장) */
|
|
27
|
+
renderHeader?: (column: STableColumn, index: number) => ReactNode;
|
|
26
28
|
tdClass?: string;
|
|
27
29
|
/** 헤더 셀 커스텀 클래스/스타일 (sd-table thClass/thStyle) */
|
|
28
30
|
thClass?: string;
|
|
@@ -17,6 +17,12 @@ function cn(...inputs) {
|
|
|
17
17
|
return twMerge(clsx(inputs));
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
// src/lib/scrollbar.ts
|
|
21
|
+
var FIREFOX_SCROLLBAR_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-width:thin] supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_transparent]";
|
|
22
|
+
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`;
|
|
23
|
+
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)]";
|
|
24
|
+
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]";
|
|
25
|
+
|
|
20
26
|
// src/lib/color.ts
|
|
21
27
|
var COLOR_KEYS = [
|
|
22
28
|
"white",
|
|
@@ -3593,6 +3599,7 @@ var SField = forwardRef(function SField2({
|
|
|
3593
3599
|
disabled = false,
|
|
3594
3600
|
readOnly = false,
|
|
3595
3601
|
width,
|
|
3602
|
+
minWidth,
|
|
3596
3603
|
multiline = false,
|
|
3597
3604
|
borderless = false,
|
|
3598
3605
|
children,
|
|
@@ -3628,6 +3635,7 @@ var SField = forwardRef(function SField2({
|
|
|
3628
3635
|
const resolvedSuccess = status === "pass";
|
|
3629
3636
|
const showError = resolvedError && errorMessage !== "";
|
|
3630
3637
|
const interactive = !disabled && !readOnly;
|
|
3638
|
+
const hug = cssLen(width) !== void 0;
|
|
3631
3639
|
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)";
|
|
3632
3640
|
const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
|
|
3633
3641
|
const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
|
|
@@ -3636,7 +3644,13 @@ var SField = forwardRef(function SField2({
|
|
|
3636
3644
|
{
|
|
3637
3645
|
ref: rootRef,
|
|
3638
3646
|
"data-name": name || void 0,
|
|
3639
|
-
className: cn(
|
|
3647
|
+
className: cn(
|
|
3648
|
+
"h-fit flex-col",
|
|
3649
|
+
// hug 시 inline-flex 를 유지하면 기존에 세로로 쌓여 있던 필드들이 한 줄에 붙어버리므로
|
|
3650
|
+
// 블록 레벨(flex)로 두어 쌓임은 그대로 유지한다. 나란히 놓으려면 부모를 flex 로.
|
|
3651
|
+
hug ? "flex w-fit max-w-full" : "inline-flex w-full",
|
|
3652
|
+
className
|
|
3653
|
+
),
|
|
3640
3654
|
style,
|
|
3641
3655
|
onMouseEnter,
|
|
3642
3656
|
onMouseLeave,
|
|
@@ -3674,54 +3688,60 @@ var SField = forwardRef(function SField2({
|
|
|
3674
3688
|
]
|
|
3675
3689
|
}
|
|
3676
3690
|
),
|
|
3677
|
-
/* @__PURE__ */ jsxs(
|
|
3678
|
-
|
|
3679
|
-
|
|
3680
|
-
|
|
3681
|
-
|
|
3682
|
-
|
|
3683
|
-
|
|
3684
|
-
|
|
3691
|
+
/* @__PURE__ */ jsxs(
|
|
3692
|
+
"div",
|
|
3693
|
+
{
|
|
3694
|
+
className: cn("flex min-w-0 flex-col", !hug && "flex-1"),
|
|
3695
|
+
style: { width: cssLen(width), minWidth: cssLen(minWidth) },
|
|
3696
|
+
children: [
|
|
3697
|
+
/* @__PURE__ */ jsxs(
|
|
3698
|
+
"div",
|
|
3699
|
+
{
|
|
3700
|
+
className: cn(
|
|
3701
|
+
"relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
|
|
3702
|
+
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]",
|
|
3703
|
+
disabled && "cursor-not-allowed"
|
|
3704
|
+
),
|
|
3705
|
+
style: {
|
|
3706
|
+
// @ts-expect-error CSS 변수
|
|
3707
|
+
"--field-bc": borderColor,
|
|
3708
|
+
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
3709
|
+
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3710
|
+
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3711
|
+
"borderRadius": s.radius,
|
|
3712
|
+
"background": bgColor,
|
|
3713
|
+
"color": textColor
|
|
3714
|
+
},
|
|
3715
|
+
"data-focused": focused || void 0,
|
|
3716
|
+
"data-hovered": hovered || void 0,
|
|
3717
|
+
children: [
|
|
3718
|
+
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxs(
|
|
3719
|
+
"div",
|
|
3720
|
+
{
|
|
3721
|
+
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",
|
|
3722
|
+
style: {
|
|
3723
|
+
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
3724
|
+
width: cssLen(labelWidth),
|
|
3725
|
+
justifyContent: ALIGN[addonAlign],
|
|
3726
|
+
background: "var(--cmp-field-addonLabel-bg)",
|
|
3727
|
+
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
3728
|
+
borderTopLeftRadius: s.radius - 1,
|
|
3729
|
+
borderBottomLeftRadius: s.radius - 1
|
|
3730
|
+
},
|
|
3731
|
+
children: [
|
|
3732
|
+
icon && !label && /* @__PURE__ */ jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
3733
|
+
effectiveAddonLabel
|
|
3734
|
+
]
|
|
3735
|
+
}
|
|
3736
|
+
),
|
|
3737
|
+
/* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1", children })
|
|
3738
|
+
]
|
|
3739
|
+
}
|
|
3685
3740
|
),
|
|
3686
|
-
|
|
3687
|
-
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3691
|
-
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3692
|
-
"width": cssLen(width),
|
|
3693
|
-
"borderRadius": s.radius,
|
|
3694
|
-
"background": bgColor,
|
|
3695
|
-
"color": textColor
|
|
3696
|
-
},
|
|
3697
|
-
"data-focused": focused || void 0,
|
|
3698
|
-
"data-hovered": hovered || void 0,
|
|
3699
|
-
children: [
|
|
3700
|
-
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxs(
|
|
3701
|
-
"div",
|
|
3702
|
-
{
|
|
3703
|
-
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",
|
|
3704
|
-
style: {
|
|
3705
|
-
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
3706
|
-
width: cssLen(labelWidth),
|
|
3707
|
-
justifyContent: ALIGN[addonAlign],
|
|
3708
|
-
background: "var(--cmp-field-addonLabel-bg)",
|
|
3709
|
-
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
3710
|
-
borderTopLeftRadius: s.radius - 1,
|
|
3711
|
-
borderBottomLeftRadius: s.radius - 1
|
|
3712
|
-
},
|
|
3713
|
-
children: [
|
|
3714
|
-
icon && !label && /* @__PURE__ */ jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
3715
|
-
effectiveAddonLabel
|
|
3716
|
-
]
|
|
3717
|
-
}
|
|
3718
|
-
),
|
|
3719
|
-
/* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1", children })
|
|
3720
|
-
]
|
|
3721
|
-
}
|
|
3722
|
-
),
|
|
3723
|
-
showError ? /* @__PURE__ */ jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-errorMessage-color)", children: errorMessage }) : hint !== "" ? /* @__PURE__ */ jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-hint-color)", children: hint }) : null
|
|
3724
|
-
] })
|
|
3741
|
+
showError ? /* @__PURE__ */ jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-errorMessage-color)", children: errorMessage }) : hint !== "" ? /* @__PURE__ */ jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-hint-color)", children: hint }) : null
|
|
3742
|
+
]
|
|
3743
|
+
}
|
|
3744
|
+
)
|
|
3725
3745
|
] })
|
|
3726
3746
|
}
|
|
3727
3747
|
);
|
|
@@ -4141,7 +4161,12 @@ var SSelect = forwardRef(function SSelect2({
|
|
|
4141
4161
|
"div",
|
|
4142
4162
|
{
|
|
4143
4163
|
ref: listRef,
|
|
4144
|
-
className:
|
|
4164
|
+
className: cn(
|
|
4165
|
+
"overflow-auto",
|
|
4166
|
+
SCROLLBAR_CLASS,
|
|
4167
|
+
SCROLLBAR_TRACK_BG_CLASS,
|
|
4168
|
+
SCROLLBAR_TRACK_BORDER_CLASS
|
|
4169
|
+
),
|
|
4145
4170
|
style: { maxHeight: dropdownHeight },
|
|
4146
4171
|
onMouseLeave: () => setFocusedIndex(-1),
|
|
4147
4172
|
children: [
|
|
@@ -4630,7 +4655,7 @@ var STable = forwardRef(function STable2({
|
|
|
4630
4655
|
position: "sticky",
|
|
4631
4656
|
left: isLeft ? "var(--sticky-left-offset)" : void 0,
|
|
4632
4657
|
right: isRight ? "var(--sticky-right-offset)" : void 0,
|
|
4633
|
-
zIndex:
|
|
4658
|
+
zIndex: 6
|
|
4634
4659
|
};
|
|
4635
4660
|
};
|
|
4636
4661
|
const stickyShadowClass = (i) => {
|
|
@@ -4656,6 +4681,9 @@ var STable = forwardRef(function STable2({
|
|
|
4656
4681
|
onScroll: handleScroll,
|
|
4657
4682
|
className: cn(
|
|
4658
4683
|
"bg-white relative overflow-auto border border-solid border-[color:var(--cmp-table-border-color)]",
|
|
4684
|
+
SCROLLBAR_CLASS,
|
|
4685
|
+
SCROLLBAR_TRACK_BG_CLASS,
|
|
4686
|
+
SCROLLBAR_TRACK_BORDER_CLASS,
|
|
4659
4687
|
radiusClass,
|
|
4660
4688
|
// 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시 스크롤·인터랙션 차단
|
|
4661
4689
|
(isLoading || rowCount === 0) && "overflow-hidden pointer-events-none"
|
|
@@ -4684,7 +4712,7 @@ var STable = forwardRef(function STable2({
|
|
|
4684
4712
|
{
|
|
4685
4713
|
className: cn(
|
|
4686
4714
|
// 원본 .th--selected: 48px 고정폭, 항상 left sticky, 체크박스 중앙정렬
|
|
4687
|
-
"sticky left-0 z-[
|
|
4715
|
+
"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",
|
|
4688
4716
|
stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
|
|
4689
4717
|
),
|
|
4690
4718
|
style: {
|
|
@@ -4709,13 +4737,13 @@ var STable = forwardRef(function STable2({
|
|
|
4709
4737
|
{
|
|
4710
4738
|
className: cn(
|
|
4711
4739
|
"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)]",
|
|
4712
|
-
stickyInfo(i).isSticky && "z-[
|
|
4740
|
+
stickyInfo(i).isSticky && "z-[6]",
|
|
4713
4741
|
stickyShadowClass(i),
|
|
4714
4742
|
col.thClass
|
|
4715
4743
|
),
|
|
4716
4744
|
style: { textAlign: col.align ?? "left", ...cellStyle(i), ...col.thStyle },
|
|
4717
4745
|
children: [
|
|
4718
|
-
/* @__PURE__ */
|
|
4746
|
+
/* @__PURE__ */ jsx(
|
|
4719
4747
|
"span",
|
|
4720
4748
|
{
|
|
4721
4749
|
className: cn(
|
|
@@ -4724,10 +4752,10 @@ var STable = forwardRef(function STable2({
|
|
|
4724
4752
|
col.align === "center" && "justify-center",
|
|
4725
4753
|
col.align === "right" && "justify-end"
|
|
4726
4754
|
),
|
|
4727
|
-
children: [
|
|
4755
|
+
children: col.renderHeader ? col.renderHeader(col, i) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4728
4756
|
col.icon && /* @__PURE__ */ jsx(SIcon, { name: col.icon, size: 16, color: col.iconColor }),
|
|
4729
4757
|
/* @__PURE__ */ jsx("span", { className: "truncate", children: col.label })
|
|
4730
|
-
]
|
|
4758
|
+
] })
|
|
4731
4759
|
}
|
|
4732
4760
|
),
|
|
4733
4761
|
resizable && !col.autoWidth && i < visibleCols.length - 1 && // 원본 th__resizer: 셀 우측 경계 안쪽 4px 그립(좌우 1px #CCCCCC 라인, 세로 16px).
|