sellmate-design-system-react 1.1.1 → 1.2.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/SActionModal/SActionModal.cjs +7 -0
- package/dist/components/SActionModal/SActionModal.cjs.map +1 -1
- package/dist/components/SActionModal/SActionModal.d.ts +1 -0
- package/dist/components/SActionModal/SActionModal.js +8 -1
- package/dist/components/SActionModal/SActionModal.js.map +1 -1
- package/dist/components/SConfirmModal/SConfirmModal.cjs +6 -0
- package/dist/components/SConfirmModal/SConfirmModal.cjs.map +1 -1
- package/dist/components/SConfirmModal/SConfirmModal.js +7 -1
- package/dist/components/SConfirmModal/SConfirmModal.js.map +1 -1
- package/dist/components/SGnb/SGnb.cjs.map +1 -1
- package/dist/components/SGnb/SGnb.js.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs +2 -2
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.js +2 -2
- package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
- package/dist/components/SLoadingModal/SLoadingModal.cjs +6 -0
- package/dist/components/SLoadingModal/SLoadingModal.cjs.map +1 -1
- package/dist/components/SLoadingModal/SLoadingModal.js +7 -1
- package/dist/components/SLoadingModal/SLoadingModal.js.map +1 -1
- package/dist/components/SModal/SModal.cjs +6 -0
- package/dist/components/SModal/SModal.cjs.map +1 -1
- package/dist/components/SModal/SModal.js +6 -0
- package/dist/components/SModal/SModal.js.map +1 -1
- package/dist/components/SModalContainer/SModalContainer.cjs +6 -0
- package/dist/components/SModalContainer/SModalContainer.cjs.map +1 -1
- package/dist/components/SModalContainer/SModalContainer.js +7 -1
- package/dist/components/SModalContainer/SModalContainer.js.map +1 -1
- package/dist/components/SPage/SPage.cjs +3 -3
- package/dist/components/SPage/SPage.cjs.map +1 -1
- package/dist/components/SPage/SPage.js +3 -3
- package/dist/components/SPage/SPage.js.map +1 -1
- package/dist/components/SPopup/SPopup.cjs +2 -2
- package/dist/components/SPopup/SPopup.cjs.map +1 -1
- package/dist/components/SPopup/SPopup.js +2 -2
- package/dist/components/SPopup/SPopup.js.map +1 -1
- package/dist/components/SScrollArea/SScrollArea.cjs +2 -2
- package/dist/components/SScrollArea/SScrollArea.cjs.map +1 -1
- package/dist/components/SScrollArea/SScrollArea.js +2 -2
- package/dist/components/SScrollArea/SScrollArea.js.map +1 -1
- package/dist/components/SSelect/SSelect.cjs +2 -2
- package/dist/components/SSelect/SSelect.cjs.map +1 -1
- package/dist/components/SSelect/SSelect.js +2 -2
- package/dist/components/SSelect/SSelect.js.map +1 -1
- package/dist/components/STable/STable.cjs +137 -95
- package/dist/components/STable/STable.cjs.map +1 -1
- package/dist/components/STable/STable.d.ts +1 -1
- package/dist/components/STable/STable.js +137 -95
- package/dist/components/STable/STable.js.map +1 -1
- package/dist/index.cjs +145 -96
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +145 -96
- package/dist/index.js.map +1 -1
- package/dist/lib/scrollbar.cjs +3 -3
- package/dist/lib/scrollbar.cjs.map +1 -1
- package/dist/lib/scrollbar.js +3 -3
- package/dist/lib/scrollbar.js.map +1 -1
- package/dist/styles.css +33 -3
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -3040,9 +3040,9 @@ var SDivider = react.forwardRef(function SDivider2({ vertical = false, className
|
|
|
3040
3040
|
// src/lib/scrollbar.ts
|
|
3041
3041
|
var FIREFOX_SCROLLBAR_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-width:thin] supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_transparent]";
|
|
3042
3042
|
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`;
|
|
3043
|
-
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)]";
|
|
3044
|
-
var SCROLLBAR_TRACK_BG_WHITE_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-white)] [&::-webkit-scrollbar]:bg-[var(--color-white)] [&::-webkit-scrollbar-track]:bg-[var(--color-white)]";
|
|
3045
|
-
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]";
|
|
3043
|
+
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)] [&::-webkit-scrollbar-corner]:bg-[var(--color-grey-10)]";
|
|
3044
|
+
var SCROLLBAR_TRACK_BG_WHITE_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_var(--color-white)] [&::-webkit-scrollbar]:bg-[var(--color-white)] [&::-webkit-scrollbar-track]:bg-[var(--color-white)] [&::-webkit-scrollbar-corner]:bg-[var(--color-white)]";
|
|
3045
|
+
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-corner]:[border-top:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-corner]:[border-left:1px_solid_var(--sys-color-border-default)] [&::-webkit-scrollbar-thumb:vertical]:[border-left-width:3px] [&::-webkit-scrollbar-thumb:horizontal]:[border-top-width:3px]";
|
|
3046
3046
|
var AXIS_CLASS = {
|
|
3047
3047
|
vertical: "overflow-x-hidden overflow-y-auto",
|
|
3048
3048
|
horizontal: "overflow-x-auto overflow-y-hidden",
|
|
@@ -4783,6 +4783,7 @@ function SModalContainer({
|
|
|
4783
4783
|
style
|
|
4784
4784
|
}) {
|
|
4785
4785
|
const [shaking, setShaking] = react.useState(false);
|
|
4786
|
+
const contentRef = react.useRef(null);
|
|
4786
4787
|
const [portalContainer, setPortalContainer] = react.useState(null);
|
|
4787
4788
|
const triggerShake = react.useCallback(() => {
|
|
4788
4789
|
setShaking(false);
|
|
@@ -4797,7 +4798,12 @@ function SModalContainer({
|
|
|
4797
4798
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none fixed inset-0 z-[1001] flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4798
4799
|
RDialog__namespace.Content,
|
|
4799
4800
|
{
|
|
4801
|
+
ref: contentRef,
|
|
4800
4802
|
className: "pointer-events-auto outline-none data-[state=open]:animate-modal-in data-[state=closed]:animate-modal-out",
|
|
4803
|
+
onOpenAutoFocus: (e) => {
|
|
4804
|
+
e.preventDefault();
|
|
4805
|
+
contentRef.current?.focus({ preventScroll: true });
|
|
4806
|
+
},
|
|
4801
4807
|
onEscapeKeyDown: guardClose,
|
|
4802
4808
|
onPointerDownOutside: guardClose,
|
|
4803
4809
|
onInteractOutside: guardClose,
|
|
@@ -4993,6 +4999,7 @@ function SActionModal({
|
|
|
4993
4999
|
color: button.color ?? "primary",
|
|
4994
5000
|
outline: button.outline,
|
|
4995
5001
|
size: button.size ?? "md",
|
|
5002
|
+
disabled: button.disabled,
|
|
4996
5003
|
onClick: () => {
|
|
4997
5004
|
button.onClick?.();
|
|
4998
5005
|
onOpenChange?.(false);
|
|
@@ -7345,7 +7352,6 @@ var STable = react.forwardRef(function STable2({
|
|
|
7345
7352
|
resizable = false,
|
|
7346
7353
|
width,
|
|
7347
7354
|
height,
|
|
7348
|
-
stickyHeader = false,
|
|
7349
7355
|
stickyColumn,
|
|
7350
7356
|
radius = "default",
|
|
7351
7357
|
noDataLabel = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
@@ -7411,6 +7417,8 @@ var STable = react.forwardRef(function STable2({
|
|
|
7411
7417
|
const [rowCountOverride, setRowCountOverride] = react.useState(null);
|
|
7412
7418
|
const rowCount = rowCountOverride ?? rows.length;
|
|
7413
7419
|
const scrollRef = react.useRef(null);
|
|
7420
|
+
const headerScrollRef = react.useRef(null);
|
|
7421
|
+
const [headerGutter, setHeaderGutter] = react.useState(0);
|
|
7414
7422
|
const [vsRange, setVsRange] = react.useState({ start: 0, end: 0 });
|
|
7415
7423
|
const lastReachEndRef = react.useRef(-1);
|
|
7416
7424
|
const cbRef = react.useRef({ onVirtualUpdate, onVirtualReachEnd });
|
|
@@ -7435,6 +7443,9 @@ var STable = react.forwardRef(function STable2({
|
|
|
7435
7443
|
const handleScroll = react.useCallback(() => {
|
|
7436
7444
|
const el = scrollRef.current;
|
|
7437
7445
|
if (!el) return;
|
|
7446
|
+
const header = headerScrollRef.current;
|
|
7447
|
+
if (header) header.scrollLeft = el.scrollLeft;
|
|
7448
|
+
setHeaderGutter(el.offsetWidth - el.clientWidth);
|
|
7438
7449
|
setScrolledLeft(el.scrollLeft > 0);
|
|
7439
7450
|
setScrolledRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);
|
|
7440
7451
|
if (useVirtualScroll) {
|
|
@@ -7444,7 +7455,7 @@ var STable = react.forwardRef(function STable2({
|
|
|
7444
7455
|
}, [useVirtualScroll, calcRange]);
|
|
7445
7456
|
react.useEffect(() => {
|
|
7446
7457
|
handleScroll();
|
|
7447
|
-
}, [handleScroll, rowCount, columnWidths]);
|
|
7458
|
+
}, [handleScroll, rowCount, columnWidths, isLoading, height]);
|
|
7448
7459
|
react.useEffect(() => {
|
|
7449
7460
|
if (!useVirtualScroll) return;
|
|
7450
7461
|
cbRef.current.onVirtualUpdate?.({ from: vsRange.start, to: vsRange.end });
|
|
@@ -7624,6 +7635,10 @@ var STable = react.forwardRef(function STable2({
|
|
|
7624
7635
|
isRightEdge && scrolledRight && "shadow-[-5px_0_8px_0_rgba(34,34,34,0.1)]"
|
|
7625
7636
|
);
|
|
7626
7637
|
};
|
|
7638
|
+
const colgroup = /* @__PURE__ */ jsxRuntime.jsxs("colgroup", { children: [
|
|
7639
|
+
selectable && /* @__PURE__ */ jsxRuntime.jsx("col", { style: { width: SELECTABLE_COLUMN_WIDTH } }),
|
|
7640
|
+
visibleCols.map((col, i) => /* @__PURE__ */ jsxRuntime.jsx("col", { style: col.autoWidth ? void 0 : { width: columnWidths[i] } }, col.name))
|
|
7641
|
+
] });
|
|
7627
7642
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7628
7643
|
"div",
|
|
7629
7644
|
{
|
|
@@ -7634,42 +7649,45 @@ var STable = react.forwardRef(function STable2({
|
|
|
7634
7649
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
7635
7650
|
"div",
|
|
7636
7651
|
{
|
|
7637
|
-
ref: scrollRef,
|
|
7638
|
-
onScroll: handleScroll,
|
|
7639
7652
|
className: cn(
|
|
7640
|
-
"bg-white relative overflow-
|
|
7641
|
-
|
|
7642
|
-
|
|
7643
|
-
|
|
7653
|
+
"bg-white relative flex flex-col overflow-hidden border border-solid border-[color:var(--cmp-table-border-color)]",
|
|
7654
|
+
// height가 없으면 루트가 받은 높이를 끝까지 채운다. 호스트가 className으로
|
|
7655
|
+
// `flex-1 min-h-0` 등을 줘 루트 높이가 확정된 경우, 행이 적어도 테두리 박스가
|
|
7656
|
+
// 남은 영역을 그대로 차지한다. basis는 auto로 둬 높이가 확정되지 않은
|
|
7657
|
+
// 기본 사용(내용만큼 커지는 케이스)에서는 동작이 바뀌지 않는다.
|
|
7658
|
+
!height && "min-h-0 grow",
|
|
7644
7659
|
radiusClass,
|
|
7645
|
-
// 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시
|
|
7646
|
-
(isLoading || rowCount === 0) && "
|
|
7660
|
+
// 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시 인터랙션 차단
|
|
7661
|
+
(isLoading || rowCount === 0) && "pointer-events-none"
|
|
7647
7662
|
),
|
|
7648
7663
|
style: {
|
|
7649
7664
|
height,
|
|
7650
7665
|
minHeight: isNoData ? "calc(var(--cmp-table-header-height) + 60px)" : void 0
|
|
7651
7666
|
},
|
|
7652
7667
|
children: [
|
|
7653
|
-
/* @__PURE__ */ jsxRuntime.
|
|
7654
|
-
"
|
|
7668
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7669
|
+
"div",
|
|
7655
7670
|
{
|
|
7656
|
-
|
|
7657
|
-
|
|
7658
|
-
|
|
7659
|
-
|
|
7660
|
-
|
|
7661
|
-
|
|
7662
|
-
|
|
7663
|
-
|
|
7664
|
-
|
|
7665
|
-
|
|
7666
|
-
|
|
7671
|
+
ref: headerScrollRef,
|
|
7672
|
+
className: "flex-none overflow-hidden",
|
|
7673
|
+
style: {
|
|
7674
|
+
borderRight: headerGutter ? `${headerGutter}px solid var(--cmp-table-header-bg)` : void 0
|
|
7675
|
+
},
|
|
7676
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7677
|
+
"table",
|
|
7678
|
+
{
|
|
7679
|
+
className: "w-full table-fixed border-separate border-spacing-0 text-left",
|
|
7680
|
+
style: { fontSize: 12 },
|
|
7681
|
+
children: [
|
|
7682
|
+
colgroup,
|
|
7683
|
+
/* @__PURE__ */ jsxRuntime.jsx("thead", { className: cn(isNoData && "opacity-40"), children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "h-[var(--cmp-table-header-height)] bg-[var(--cmp-table-header-bg)]", children: [
|
|
7667
7684
|
selectable && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7668
7685
|
"th",
|
|
7669
7686
|
{
|
|
7670
7687
|
className: cn(
|
|
7671
7688
|
// 원본 .th--selected: 48px 고정폭, 항상 left sticky, 체크박스 중앙정렬
|
|
7672
|
-
|
|
7689
|
+
// 하단 border는 헤더 래퍼가 연속으로 그리므로 셀에는 두지 않는다.
|
|
7690
|
+
"sticky left-0 z-[7] bg-[var(--cmp-table-header-bg)] text-center align-middle",
|
|
7673
7691
|
stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
|
|
7674
7692
|
),
|
|
7675
7693
|
style: {
|
|
@@ -7693,7 +7711,8 @@ var STable = react.forwardRef(function STable2({
|
|
|
7693
7711
|
"th",
|
|
7694
7712
|
{
|
|
7695
7713
|
className: cn(
|
|
7696
|
-
|
|
7714
|
+
// 하단 border는 헤더 래퍼가 연속으로 그린다 (거터 영역까지 이어짐).
|
|
7715
|
+
"relative bg-[var(--cmp-table-header-bg)] px-[16px] text-[12px] font-medium leading-[20px] text-[color:var(--sys-color-fg-primary)]",
|
|
7697
7716
|
stickyInfo(i).isSticky && "z-[6]",
|
|
7698
7717
|
stickyShadowClass(i),
|
|
7699
7718
|
col.thClass
|
|
@@ -7731,74 +7750,102 @@ var STable = react.forwardRef(function STable2({
|
|
|
7731
7750
|
},
|
|
7732
7751
|
col.name
|
|
7733
7752
|
))
|
|
7734
|
-
]
|
|
7735
|
-
|
|
7736
|
-
|
|
7737
|
-
|
|
7738
|
-
|
|
7739
|
-
|
|
7740
|
-
|
|
7741
|
-
|
|
7742
|
-
|
|
7743
|
-
|
|
7744
|
-
|
|
7745
|
-
|
|
7746
|
-
|
|
7747
|
-
|
|
7748
|
-
|
|
7749
|
-
|
|
7750
|
-
|
|
7751
|
-
|
|
7752
|
-
|
|
7753
|
-
|
|
7754
|
-
|
|
7755
|
-
|
|
7756
|
-
|
|
7757
|
-
|
|
7758
|
-
|
|
7759
|
-
|
|
7760
|
-
|
|
7761
|
-
|
|
7762
|
-
|
|
7763
|
-
|
|
7764
|
-
|
|
7765
|
-
|
|
7766
|
-
|
|
7767
|
-
|
|
7768
|
-
|
|
7769
|
-
|
|
7770
|
-
|
|
7771
|
-
|
|
7772
|
-
|
|
7773
|
-
|
|
7774
|
-
|
|
7775
|
-
|
|
7776
|
-
|
|
7777
|
-
|
|
7778
|
-
|
|
7779
|
-
|
|
7780
|
-
|
|
7753
|
+
] }) })
|
|
7754
|
+
]
|
|
7755
|
+
}
|
|
7756
|
+
)
|
|
7757
|
+
}
|
|
7758
|
+
),
|
|
7759
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7760
|
+
"div",
|
|
7761
|
+
{
|
|
7762
|
+
ref: scrollRef,
|
|
7763
|
+
onScroll: handleScroll,
|
|
7764
|
+
className: cn(
|
|
7765
|
+
// 헤더 하단 구분선은 body 상단 border로 그린다. body 래퍼는 스크롤바를 포함한
|
|
7766
|
+
// 전체 폭을 차지하므로(스크롤바는 border 안쪽) 헤더 거터의 border-right와 미터가
|
|
7767
|
+
// 생기지 않아 색·길이가 균일한 한 줄이 된다.
|
|
7768
|
+
"min-h-0 flex-1 overflow-auto border-t border-solid border-[color:var(--cmp-table-border-color)]",
|
|
7769
|
+
SCROLLBAR_CLASS,
|
|
7770
|
+
SCROLLBAR_TRACK_BG_CLASS,
|
|
7771
|
+
SCROLLBAR_TRACK_BORDER_CLASS,
|
|
7772
|
+
// 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시 스크롤 차단
|
|
7773
|
+
(isLoading || rowCount === 0) && "overflow-hidden"
|
|
7774
|
+
),
|
|
7775
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7776
|
+
"table",
|
|
7777
|
+
{
|
|
7778
|
+
className: "w-full table-fixed border-separate border-spacing-0 text-left",
|
|
7779
|
+
style: { fontSize: 12 },
|
|
7780
|
+
children: [
|
|
7781
|
+
colgroup,
|
|
7782
|
+
/* @__PURE__ */ jsxRuntime.jsxs("tbody", { children: [
|
|
7783
|
+
useVirtualScroll && topSpacer > 0 && /* @__PURE__ */ jsxRuntime.jsx("tr", { "aria-hidden": true, style: { height: topSpacer }, children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: totalColSpan, className: "p-0" }) }),
|
|
7784
|
+
rowCount === 0 ? null : bodyRows.map((row, ri) => {
|
|
7785
|
+
const isSel = selectedKeys.has(row[rowKey]);
|
|
7786
|
+
const rowBg = "bg-white";
|
|
7787
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7788
|
+
"tr",
|
|
7789
|
+
{
|
|
7790
|
+
onClick: () => onRowClick?.(row),
|
|
7791
|
+
className: cn(
|
|
7792
|
+
"group/table-row hover:bg-[var(--color-grey-05)]",
|
|
7793
|
+
onRowClick && "cursor-pointer"
|
|
7794
|
+
),
|
|
7795
|
+
style: { height: useVirtualScroll ? effectiveRowHeight : rowH },
|
|
7796
|
+
children: [
|
|
7797
|
+
selectable && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7798
|
+
"td",
|
|
7799
|
+
{
|
|
7800
|
+
className: cn(
|
|
7801
|
+
// 원본 .td--selected: 48px 고정폭, 항상 left sticky, 체크박스 중앙정렬
|
|
7802
|
+
"sticky left-0 z-[2] border-b border-solid border-[color:var(--cmp-table-border-color)] align-middle group-hover/table-row:bg-[var(--color-grey-05)]",
|
|
7803
|
+
rowBg,
|
|
7804
|
+
stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
|
|
7805
|
+
),
|
|
7806
|
+
style: {
|
|
7807
|
+
width: SELECTABLE_COLUMN_WIDTH,
|
|
7808
|
+
minWidth: SELECTABLE_COLUMN_WIDTH,
|
|
7809
|
+
maxWidth: SELECTABLE_COLUMN_WIDTH
|
|
7810
|
+
},
|
|
7811
|
+
onClick: (e) => e.stopPropagation(),
|
|
7812
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(SCheckbox, { value: isSel, onValueChange: () => toggleRow(row) }) })
|
|
7813
|
+
}
|
|
7781
7814
|
),
|
|
7782
|
-
|
|
7783
|
-
|
|
7784
|
-
|
|
7785
|
-
|
|
7786
|
-
|
|
7787
|
-
|
|
7788
|
-
|
|
7789
|
-
|
|
7790
|
-
|
|
7791
|
-
|
|
7792
|
-
|
|
7793
|
-
|
|
7794
|
-
|
|
7795
|
-
|
|
7796
|
-
|
|
7797
|
-
|
|
7798
|
-
|
|
7799
|
-
|
|
7800
|
-
|
|
7801
|
-
|
|
7815
|
+
visibleCols.map((col, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
7816
|
+
"td",
|
|
7817
|
+
{
|
|
7818
|
+
className: cn(
|
|
7819
|
+
// 원본 .td: 컬럼 폭에 맞춰 내용 말줄임(overflow hidden + ellipsis) + 행 구분선(border-b)
|
|
7820
|
+
// 셀 배경은 흰색으로 채워 뒤 배경이 비치지 않게 하고, hover 시 행 배경(grey_05)을 따른다.
|
|
7821
|
+
"overflow-hidden text-ellipsis whitespace-nowrap border-b border-solid border-[color:var(--cmp-table-border-color)] text-[12px] leading-[20px] text-[color:var(--sys-color-fg-primary)]",
|
|
7822
|
+
rowBg,
|
|
7823
|
+
"group-hover/table-row:bg-[var(--color-grey-05)]",
|
|
7824
|
+
stickyShadowClass(i),
|
|
7825
|
+
typeof col.tdClass === "function" ? col.tdClass(row) : col.tdClass
|
|
7826
|
+
),
|
|
7827
|
+
style: {
|
|
7828
|
+
paddingLeft: cellPadX,
|
|
7829
|
+
paddingRight: cellPadX,
|
|
7830
|
+
paddingTop: cellPadY,
|
|
7831
|
+
paddingBottom: cellPadY,
|
|
7832
|
+
textAlign: col.align ?? "left",
|
|
7833
|
+
...cellStyle(i)
|
|
7834
|
+
},
|
|
7835
|
+
children: col.render ? col.render(row, cellValue(col, row)) : cellValue(col, row)
|
|
7836
|
+
},
|
|
7837
|
+
col.name
|
|
7838
|
+
))
|
|
7839
|
+
]
|
|
7840
|
+
},
|
|
7841
|
+
row[rowKey] ?? ri
|
|
7842
|
+
);
|
|
7843
|
+
}),
|
|
7844
|
+
useVirtualScroll && bottomSpacer > 0 && /* @__PURE__ */ jsxRuntime.jsx("tr", { "aria-hidden": true, style: { height: bottomSpacer }, children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: totalColSpan, className: "p-0" }) })
|
|
7845
|
+
] })
|
|
7846
|
+
]
|
|
7847
|
+
}
|
|
7848
|
+
)
|
|
7802
7849
|
}
|
|
7803
7850
|
),
|
|
7804
7851
|
isNoData && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -7817,7 +7864,9 @@ var STable = react.forwardRef(function STable2({
|
|
|
7817
7864
|
),
|
|
7818
7865
|
showPagination && // 원본 sd-table__pagination: 테이블 하단에 이어붙는 회색 바(높이 48px, margin-top:-1px로 테두리 겹침).
|
|
7819
7866
|
// SPagination은 전체 폭 기준 중앙, rows-per-page SSelect는 우측에 absolute 배치해 중앙 정렬을 유지한다.
|
|
7820
|
-
|
|
7867
|
+
// 루트 높이가 확정된 경우(테이블이 남은 영역을 채우는 배치) 페이지네이션 바가
|
|
7868
|
+
// 눌리지 않도록 shrink-0으로 48px를 보장한다.
|
|
7869
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative -mt-px flex h-[48px] shrink-0 items-center justify-center rounded-[var(--cmp-table-radius)] border border-solid border-[color:var(--cmp-table-border-color)] bg-[var(--color-grey-05)]", children: [
|
|
7821
7870
|
/* @__PURE__ */ jsxRuntime.jsx(SPagination, { currentPage: displayPage, lastPage, onPageChange: changePage }),
|
|
7822
7871
|
useRowsPerPageSelect && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute right-[10px] top-1/2 -translate-y-1/2", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
7823
7872
|
SSelect,
|