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.js
CHANGED
|
@@ -3012,9 +3012,9 @@ var SDivider = forwardRef(function SDivider2({ vertical = false, className, styl
|
|
|
3012
3012
|
// src/lib/scrollbar.ts
|
|
3013
3013
|
var FIREFOX_SCROLLBAR_CLASS = "supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-width:thin] supports-[not_selector(::-webkit-scrollbar)]:[scrollbar-color:var(--color-grey-45)_transparent]";
|
|
3014
3014
|
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`;
|
|
3015
|
-
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)]";
|
|
3016
|
-
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)]";
|
|
3017
|
-
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]";
|
|
3015
|
+
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)]";
|
|
3016
|
+
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)]";
|
|
3017
|
+
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]";
|
|
3018
3018
|
var AXIS_CLASS = {
|
|
3019
3019
|
vertical: "overflow-x-hidden overflow-y-auto",
|
|
3020
3020
|
horizontal: "overflow-x-auto overflow-y-hidden",
|
|
@@ -4755,6 +4755,7 @@ function SModalContainer({
|
|
|
4755
4755
|
style
|
|
4756
4756
|
}) {
|
|
4757
4757
|
const [shaking, setShaking] = useState(false);
|
|
4758
|
+
const contentRef = useRef(null);
|
|
4758
4759
|
const [portalContainer, setPortalContainer] = useState(null);
|
|
4759
4760
|
const triggerShake = useCallback(() => {
|
|
4760
4761
|
setShaking(false);
|
|
@@ -4769,7 +4770,12 @@ function SModalContainer({
|
|
|
4769
4770
|
/* @__PURE__ */ jsx("div", { className: "pointer-events-none fixed inset-0 z-[1001] flex items-center justify-center", children: /* @__PURE__ */ jsxs(
|
|
4770
4771
|
RDialog.Content,
|
|
4771
4772
|
{
|
|
4773
|
+
ref: contentRef,
|
|
4772
4774
|
className: "pointer-events-auto outline-none data-[state=open]:animate-modal-in data-[state=closed]:animate-modal-out",
|
|
4775
|
+
onOpenAutoFocus: (e) => {
|
|
4776
|
+
e.preventDefault();
|
|
4777
|
+
contentRef.current?.focus({ preventScroll: true });
|
|
4778
|
+
},
|
|
4773
4779
|
onEscapeKeyDown: guardClose,
|
|
4774
4780
|
onPointerDownOutside: guardClose,
|
|
4775
4781
|
onInteractOutside: guardClose,
|
|
@@ -4965,6 +4971,7 @@ function SActionModal({
|
|
|
4965
4971
|
color: button.color ?? "primary",
|
|
4966
4972
|
outline: button.outline,
|
|
4967
4973
|
size: button.size ?? "md",
|
|
4974
|
+
disabled: button.disabled,
|
|
4968
4975
|
onClick: () => {
|
|
4969
4976
|
button.onClick?.();
|
|
4970
4977
|
onOpenChange?.(false);
|
|
@@ -7317,7 +7324,6 @@ var STable = forwardRef(function STable2({
|
|
|
7317
7324
|
resizable = false,
|
|
7318
7325
|
width,
|
|
7319
7326
|
height,
|
|
7320
|
-
stickyHeader = false,
|
|
7321
7327
|
stickyColumn,
|
|
7322
7328
|
radius = "default",
|
|
7323
7329
|
noDataLabel = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
|
|
@@ -7383,6 +7389,8 @@ var STable = forwardRef(function STable2({
|
|
|
7383
7389
|
const [rowCountOverride, setRowCountOverride] = useState(null);
|
|
7384
7390
|
const rowCount = rowCountOverride ?? rows.length;
|
|
7385
7391
|
const scrollRef = useRef(null);
|
|
7392
|
+
const headerScrollRef = useRef(null);
|
|
7393
|
+
const [headerGutter, setHeaderGutter] = useState(0);
|
|
7386
7394
|
const [vsRange, setVsRange] = useState({ start: 0, end: 0 });
|
|
7387
7395
|
const lastReachEndRef = useRef(-1);
|
|
7388
7396
|
const cbRef = useRef({ onVirtualUpdate, onVirtualReachEnd });
|
|
@@ -7407,6 +7415,9 @@ var STable = forwardRef(function STable2({
|
|
|
7407
7415
|
const handleScroll = useCallback(() => {
|
|
7408
7416
|
const el = scrollRef.current;
|
|
7409
7417
|
if (!el) return;
|
|
7418
|
+
const header = headerScrollRef.current;
|
|
7419
|
+
if (header) header.scrollLeft = el.scrollLeft;
|
|
7420
|
+
setHeaderGutter(el.offsetWidth - el.clientWidth);
|
|
7410
7421
|
setScrolledLeft(el.scrollLeft > 0);
|
|
7411
7422
|
setScrolledRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);
|
|
7412
7423
|
if (useVirtualScroll) {
|
|
@@ -7416,7 +7427,7 @@ var STable = forwardRef(function STable2({
|
|
|
7416
7427
|
}, [useVirtualScroll, calcRange]);
|
|
7417
7428
|
useEffect(() => {
|
|
7418
7429
|
handleScroll();
|
|
7419
|
-
}, [handleScroll, rowCount, columnWidths]);
|
|
7430
|
+
}, [handleScroll, rowCount, columnWidths, isLoading, height]);
|
|
7420
7431
|
useEffect(() => {
|
|
7421
7432
|
if (!useVirtualScroll) return;
|
|
7422
7433
|
cbRef.current.onVirtualUpdate?.({ from: vsRange.start, to: vsRange.end });
|
|
@@ -7596,6 +7607,10 @@ var STable = forwardRef(function STable2({
|
|
|
7596
7607
|
isRightEdge && scrolledRight && "shadow-[-5px_0_8px_0_rgba(34,34,34,0.1)]"
|
|
7597
7608
|
);
|
|
7598
7609
|
};
|
|
7610
|
+
const colgroup = /* @__PURE__ */ jsxs("colgroup", { children: [
|
|
7611
|
+
selectable && /* @__PURE__ */ jsx("col", { style: { width: SELECTABLE_COLUMN_WIDTH } }),
|
|
7612
|
+
visibleCols.map((col, i) => /* @__PURE__ */ jsx("col", { style: col.autoWidth ? void 0 : { width: columnWidths[i] } }, col.name))
|
|
7613
|
+
] });
|
|
7599
7614
|
return /* @__PURE__ */ jsxs(
|
|
7600
7615
|
"div",
|
|
7601
7616
|
{
|
|
@@ -7606,42 +7621,45 @@ var STable = forwardRef(function STable2({
|
|
|
7606
7621
|
/* @__PURE__ */ jsxs(
|
|
7607
7622
|
"div",
|
|
7608
7623
|
{
|
|
7609
|
-
ref: scrollRef,
|
|
7610
|
-
onScroll: handleScroll,
|
|
7611
7624
|
className: cn(
|
|
7612
|
-
"bg-white relative overflow-
|
|
7613
|
-
|
|
7614
|
-
|
|
7615
|
-
|
|
7625
|
+
"bg-white relative flex flex-col overflow-hidden border border-solid border-[color:var(--cmp-table-border-color)]",
|
|
7626
|
+
// height가 없으면 루트가 받은 높이를 끝까지 채운다. 호스트가 className으로
|
|
7627
|
+
// `flex-1 min-h-0` 등을 줘 루트 높이가 확정된 경우, 행이 적어도 테두리 박스가
|
|
7628
|
+
// 남은 영역을 그대로 차지한다. basis는 auto로 둬 높이가 확정되지 않은
|
|
7629
|
+
// 기본 사용(내용만큼 커지는 케이스)에서는 동작이 바뀌지 않는다.
|
|
7630
|
+
!height && "min-h-0 grow",
|
|
7616
7631
|
radiusClass,
|
|
7617
|
-
// 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시
|
|
7618
|
-
(isLoading || rowCount === 0) && "
|
|
7632
|
+
// 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시 인터랙션 차단
|
|
7633
|
+
(isLoading || rowCount === 0) && "pointer-events-none"
|
|
7619
7634
|
),
|
|
7620
7635
|
style: {
|
|
7621
7636
|
height,
|
|
7622
7637
|
minHeight: isNoData ? "calc(var(--cmp-table-header-height) + 60px)" : void 0
|
|
7623
7638
|
},
|
|
7624
7639
|
children: [
|
|
7625
|
-
/* @__PURE__ */
|
|
7626
|
-
"
|
|
7640
|
+
/* @__PURE__ */ jsx(
|
|
7641
|
+
"div",
|
|
7627
7642
|
{
|
|
7628
|
-
|
|
7629
|
-
|
|
7630
|
-
|
|
7631
|
-
|
|
7632
|
-
|
|
7633
|
-
|
|
7634
|
-
|
|
7635
|
-
|
|
7636
|
-
|
|
7637
|
-
|
|
7638
|
-
|
|
7643
|
+
ref: headerScrollRef,
|
|
7644
|
+
className: "flex-none overflow-hidden",
|
|
7645
|
+
style: {
|
|
7646
|
+
borderRight: headerGutter ? `${headerGutter}px solid var(--cmp-table-header-bg)` : void 0
|
|
7647
|
+
},
|
|
7648
|
+
children: /* @__PURE__ */ jsxs(
|
|
7649
|
+
"table",
|
|
7650
|
+
{
|
|
7651
|
+
className: "w-full table-fixed border-separate border-spacing-0 text-left",
|
|
7652
|
+
style: { fontSize: 12 },
|
|
7653
|
+
children: [
|
|
7654
|
+
colgroup,
|
|
7655
|
+
/* @__PURE__ */ jsx("thead", { className: cn(isNoData && "opacity-40"), children: /* @__PURE__ */ jsxs("tr", { className: "h-[var(--cmp-table-header-height)] bg-[var(--cmp-table-header-bg)]", children: [
|
|
7639
7656
|
selectable && /* @__PURE__ */ jsxs(
|
|
7640
7657
|
"th",
|
|
7641
7658
|
{
|
|
7642
7659
|
className: cn(
|
|
7643
7660
|
// 원본 .th--selected: 48px 고정폭, 항상 left sticky, 체크박스 중앙정렬
|
|
7644
|
-
|
|
7661
|
+
// 하단 border는 헤더 래퍼가 연속으로 그리므로 셀에는 두지 않는다.
|
|
7662
|
+
"sticky left-0 z-[7] bg-[var(--cmp-table-header-bg)] text-center align-middle",
|
|
7645
7663
|
stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
|
|
7646
7664
|
),
|
|
7647
7665
|
style: {
|
|
@@ -7665,7 +7683,8 @@ var STable = forwardRef(function STable2({
|
|
|
7665
7683
|
"th",
|
|
7666
7684
|
{
|
|
7667
7685
|
className: cn(
|
|
7668
|
-
|
|
7686
|
+
// 하단 border는 헤더 래퍼가 연속으로 그린다 (거터 영역까지 이어짐).
|
|
7687
|
+
"relative bg-[var(--cmp-table-header-bg)] px-[16px] text-[12px] font-medium leading-[20px] text-[color:var(--sys-color-fg-primary)]",
|
|
7669
7688
|
stickyInfo(i).isSticky && "z-[6]",
|
|
7670
7689
|
stickyShadowClass(i),
|
|
7671
7690
|
col.thClass
|
|
@@ -7703,74 +7722,102 @@ var STable = forwardRef(function STable2({
|
|
|
7703
7722
|
},
|
|
7704
7723
|
col.name
|
|
7705
7724
|
))
|
|
7706
|
-
]
|
|
7707
|
-
|
|
7708
|
-
|
|
7709
|
-
|
|
7710
|
-
|
|
7711
|
-
|
|
7712
|
-
|
|
7713
|
-
|
|
7714
|
-
|
|
7715
|
-
|
|
7716
|
-
|
|
7717
|
-
|
|
7718
|
-
|
|
7719
|
-
|
|
7720
|
-
|
|
7721
|
-
|
|
7722
|
-
|
|
7723
|
-
|
|
7724
|
-
|
|
7725
|
-
|
|
7726
|
-
|
|
7727
|
-
|
|
7728
|
-
|
|
7729
|
-
|
|
7730
|
-
|
|
7731
|
-
|
|
7732
|
-
|
|
7733
|
-
|
|
7734
|
-
|
|
7735
|
-
|
|
7736
|
-
|
|
7737
|
-
|
|
7738
|
-
|
|
7739
|
-
|
|
7740
|
-
|
|
7741
|
-
|
|
7742
|
-
|
|
7743
|
-
|
|
7744
|
-
|
|
7745
|
-
|
|
7746
|
-
|
|
7747
|
-
|
|
7748
|
-
|
|
7749
|
-
|
|
7750
|
-
|
|
7751
|
-
|
|
7752
|
-
|
|
7725
|
+
] }) })
|
|
7726
|
+
]
|
|
7727
|
+
}
|
|
7728
|
+
)
|
|
7729
|
+
}
|
|
7730
|
+
),
|
|
7731
|
+
/* @__PURE__ */ jsx(
|
|
7732
|
+
"div",
|
|
7733
|
+
{
|
|
7734
|
+
ref: scrollRef,
|
|
7735
|
+
onScroll: handleScroll,
|
|
7736
|
+
className: cn(
|
|
7737
|
+
// 헤더 하단 구분선은 body 상단 border로 그린다. body 래퍼는 스크롤바를 포함한
|
|
7738
|
+
// 전체 폭을 차지하므로(스크롤바는 border 안쪽) 헤더 거터의 border-right와 미터가
|
|
7739
|
+
// 생기지 않아 색·길이가 균일한 한 줄이 된다.
|
|
7740
|
+
"min-h-0 flex-1 overflow-auto border-t border-solid border-[color:var(--cmp-table-border-color)]",
|
|
7741
|
+
SCROLLBAR_CLASS,
|
|
7742
|
+
SCROLLBAR_TRACK_BG_CLASS,
|
|
7743
|
+
SCROLLBAR_TRACK_BORDER_CLASS,
|
|
7744
|
+
// 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시 스크롤 차단
|
|
7745
|
+
(isLoading || rowCount === 0) && "overflow-hidden"
|
|
7746
|
+
),
|
|
7747
|
+
children: /* @__PURE__ */ jsxs(
|
|
7748
|
+
"table",
|
|
7749
|
+
{
|
|
7750
|
+
className: "w-full table-fixed border-separate border-spacing-0 text-left",
|
|
7751
|
+
style: { fontSize: 12 },
|
|
7752
|
+
children: [
|
|
7753
|
+
colgroup,
|
|
7754
|
+
/* @__PURE__ */ jsxs("tbody", { children: [
|
|
7755
|
+
useVirtualScroll && topSpacer > 0 && /* @__PURE__ */ jsx("tr", { "aria-hidden": true, style: { height: topSpacer }, children: /* @__PURE__ */ jsx("td", { colSpan: totalColSpan, className: "p-0" }) }),
|
|
7756
|
+
rowCount === 0 ? null : bodyRows.map((row, ri) => {
|
|
7757
|
+
const isSel = selectedKeys.has(row[rowKey]);
|
|
7758
|
+
const rowBg = "bg-white";
|
|
7759
|
+
return /* @__PURE__ */ jsxs(
|
|
7760
|
+
"tr",
|
|
7761
|
+
{
|
|
7762
|
+
onClick: () => onRowClick?.(row),
|
|
7763
|
+
className: cn(
|
|
7764
|
+
"group/table-row hover:bg-[var(--color-grey-05)]",
|
|
7765
|
+
onRowClick && "cursor-pointer"
|
|
7766
|
+
),
|
|
7767
|
+
style: { height: useVirtualScroll ? effectiveRowHeight : rowH },
|
|
7768
|
+
children: [
|
|
7769
|
+
selectable && /* @__PURE__ */ jsx(
|
|
7770
|
+
"td",
|
|
7771
|
+
{
|
|
7772
|
+
className: cn(
|
|
7773
|
+
// 원본 .td--selected: 48px 고정폭, 항상 left sticky, 체크박스 중앙정렬
|
|
7774
|
+
"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)]",
|
|
7775
|
+
rowBg,
|
|
7776
|
+
stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
|
|
7777
|
+
),
|
|
7778
|
+
style: {
|
|
7779
|
+
width: SELECTABLE_COLUMN_WIDTH,
|
|
7780
|
+
minWidth: SELECTABLE_COLUMN_WIDTH,
|
|
7781
|
+
maxWidth: SELECTABLE_COLUMN_WIDTH
|
|
7782
|
+
},
|
|
7783
|
+
onClick: (e) => e.stopPropagation(),
|
|
7784
|
+
children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(SCheckbox, { value: isSel, onValueChange: () => toggleRow(row) }) })
|
|
7785
|
+
}
|
|
7753
7786
|
),
|
|
7754
|
-
|
|
7755
|
-
|
|
7756
|
-
|
|
7757
|
-
|
|
7758
|
-
|
|
7759
|
-
|
|
7760
|
-
|
|
7761
|
-
|
|
7762
|
-
|
|
7763
|
-
|
|
7764
|
-
|
|
7765
|
-
|
|
7766
|
-
|
|
7767
|
-
|
|
7768
|
-
|
|
7769
|
-
|
|
7770
|
-
|
|
7771
|
-
|
|
7772
|
-
|
|
7773
|
-
|
|
7787
|
+
visibleCols.map((col, i) => /* @__PURE__ */ jsx(
|
|
7788
|
+
"td",
|
|
7789
|
+
{
|
|
7790
|
+
className: cn(
|
|
7791
|
+
// 원본 .td: 컬럼 폭에 맞춰 내용 말줄임(overflow hidden + ellipsis) + 행 구분선(border-b)
|
|
7792
|
+
// 셀 배경은 흰색으로 채워 뒤 배경이 비치지 않게 하고, hover 시 행 배경(grey_05)을 따른다.
|
|
7793
|
+
"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)]",
|
|
7794
|
+
rowBg,
|
|
7795
|
+
"group-hover/table-row:bg-[var(--color-grey-05)]",
|
|
7796
|
+
stickyShadowClass(i),
|
|
7797
|
+
typeof col.tdClass === "function" ? col.tdClass(row) : col.tdClass
|
|
7798
|
+
),
|
|
7799
|
+
style: {
|
|
7800
|
+
paddingLeft: cellPadX,
|
|
7801
|
+
paddingRight: cellPadX,
|
|
7802
|
+
paddingTop: cellPadY,
|
|
7803
|
+
paddingBottom: cellPadY,
|
|
7804
|
+
textAlign: col.align ?? "left",
|
|
7805
|
+
...cellStyle(i)
|
|
7806
|
+
},
|
|
7807
|
+
children: col.render ? col.render(row, cellValue(col, row)) : cellValue(col, row)
|
|
7808
|
+
},
|
|
7809
|
+
col.name
|
|
7810
|
+
))
|
|
7811
|
+
]
|
|
7812
|
+
},
|
|
7813
|
+
row[rowKey] ?? ri
|
|
7814
|
+
);
|
|
7815
|
+
}),
|
|
7816
|
+
useVirtualScroll && bottomSpacer > 0 && /* @__PURE__ */ jsx("tr", { "aria-hidden": true, style: { height: bottomSpacer }, children: /* @__PURE__ */ jsx("td", { colSpan: totalColSpan, className: "p-0" }) })
|
|
7817
|
+
] })
|
|
7818
|
+
]
|
|
7819
|
+
}
|
|
7820
|
+
)
|
|
7774
7821
|
}
|
|
7775
7822
|
),
|
|
7776
7823
|
isNoData && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -7789,7 +7836,9 @@ var STable = forwardRef(function STable2({
|
|
|
7789
7836
|
),
|
|
7790
7837
|
showPagination && // 원본 sd-table__pagination: 테이블 하단에 이어붙는 회색 바(높이 48px, margin-top:-1px로 테두리 겹침).
|
|
7791
7838
|
// SPagination은 전체 폭 기준 중앙, rows-per-page SSelect는 우측에 absolute 배치해 중앙 정렬을 유지한다.
|
|
7792
|
-
|
|
7839
|
+
// 루트 높이가 확정된 경우(테이블이 남은 영역을 채우는 배치) 페이지네이션 바가
|
|
7840
|
+
// 눌리지 않도록 shrink-0으로 48px를 보장한다.
|
|
7841
|
+
/* @__PURE__ */ 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: [
|
|
7793
7842
|
/* @__PURE__ */ jsx(SPagination, { currentPage: displayPage, lastPage, onPageChange: changePage }),
|
|
7794
7843
|
useRowsPerPageSelect && /* @__PURE__ */ jsx("div", { className: "absolute right-[10px] top-1/2 -translate-y-1/2", children: /* @__PURE__ */ jsx(
|
|
7795
7844
|
SSelect,
|