sellmate-design-system-react 1.1.1 → 1.1.3

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.
Files changed (37) hide show
  1. package/dist/components/SGnb/SGnb.cjs.map +1 -1
  2. package/dist/components/SGnb/SGnb.js.map +1 -1
  3. package/dist/components/SKeyValueTable/SKeyValueTable.cjs +2 -2
  4. package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
  5. package/dist/components/SKeyValueTable/SKeyValueTable.js +2 -2
  6. package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
  7. package/dist/components/SPage/SPage.cjs +3 -3
  8. package/dist/components/SPage/SPage.cjs.map +1 -1
  9. package/dist/components/SPage/SPage.js +3 -3
  10. package/dist/components/SPage/SPage.js.map +1 -1
  11. package/dist/components/SPopup/SPopup.cjs +2 -2
  12. package/dist/components/SPopup/SPopup.cjs.map +1 -1
  13. package/dist/components/SPopup/SPopup.js +2 -2
  14. package/dist/components/SPopup/SPopup.js.map +1 -1
  15. package/dist/components/SScrollArea/SScrollArea.cjs +2 -2
  16. package/dist/components/SScrollArea/SScrollArea.cjs.map +1 -1
  17. package/dist/components/SScrollArea/SScrollArea.js +2 -2
  18. package/dist/components/SScrollArea/SScrollArea.js.map +1 -1
  19. package/dist/components/SSelect/SSelect.cjs +2 -2
  20. package/dist/components/SSelect/SSelect.cjs.map +1 -1
  21. package/dist/components/SSelect/SSelect.js +2 -2
  22. package/dist/components/SSelect/SSelect.js.map +1 -1
  23. package/dist/components/STable/STable.cjs +137 -95
  24. package/dist/components/STable/STable.cjs.map +1 -1
  25. package/dist/components/STable/STable.d.ts +1 -1
  26. package/dist/components/STable/STable.js +137 -95
  27. package/dist/components/STable/STable.js.map +1 -1
  28. package/dist/index.cjs +138 -96
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.js +138 -96
  31. package/dist/index.js.map +1 -1
  32. package/dist/lib/scrollbar.cjs +3 -3
  33. package/dist/lib/scrollbar.cjs.map +1 -1
  34. package/dist/lib/scrollbar.js +3 -3
  35. package/dist/lib/scrollbar.js.map +1 -1
  36. package/dist/styles.css +33 -3
  37. 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",
@@ -7317,7 +7317,6 @@ var STable = forwardRef(function STable2({
7317
7317
  resizable = false,
7318
7318
  width,
7319
7319
  height,
7320
- stickyHeader = false,
7321
7320
  stickyColumn,
7322
7321
  radius = "default",
7323
7322
  noDataLabel = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
@@ -7383,6 +7382,8 @@ var STable = forwardRef(function STable2({
7383
7382
  const [rowCountOverride, setRowCountOverride] = useState(null);
7384
7383
  const rowCount = rowCountOverride ?? rows.length;
7385
7384
  const scrollRef = useRef(null);
7385
+ const headerScrollRef = useRef(null);
7386
+ const [headerGutter, setHeaderGutter] = useState(0);
7386
7387
  const [vsRange, setVsRange] = useState({ start: 0, end: 0 });
7387
7388
  const lastReachEndRef = useRef(-1);
7388
7389
  const cbRef = useRef({ onVirtualUpdate, onVirtualReachEnd });
@@ -7407,6 +7408,9 @@ var STable = forwardRef(function STable2({
7407
7408
  const handleScroll = useCallback(() => {
7408
7409
  const el = scrollRef.current;
7409
7410
  if (!el) return;
7411
+ const header = headerScrollRef.current;
7412
+ if (header) header.scrollLeft = el.scrollLeft;
7413
+ setHeaderGutter(el.offsetWidth - el.clientWidth);
7410
7414
  setScrolledLeft(el.scrollLeft > 0);
7411
7415
  setScrolledRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);
7412
7416
  if (useVirtualScroll) {
@@ -7416,7 +7420,7 @@ var STable = forwardRef(function STable2({
7416
7420
  }, [useVirtualScroll, calcRange]);
7417
7421
  useEffect(() => {
7418
7422
  handleScroll();
7419
- }, [handleScroll, rowCount, columnWidths]);
7423
+ }, [handleScroll, rowCount, columnWidths, isLoading, height]);
7420
7424
  useEffect(() => {
7421
7425
  if (!useVirtualScroll) return;
7422
7426
  cbRef.current.onVirtualUpdate?.({ from: vsRange.start, to: vsRange.end });
@@ -7596,6 +7600,10 @@ var STable = forwardRef(function STable2({
7596
7600
  isRightEdge && scrolledRight && "shadow-[-5px_0_8px_0_rgba(34,34,34,0.1)]"
7597
7601
  );
7598
7602
  };
7603
+ const colgroup = /* @__PURE__ */ jsxs("colgroup", { children: [
7604
+ selectable && /* @__PURE__ */ jsx("col", { style: { width: SELECTABLE_COLUMN_WIDTH } }),
7605
+ visibleCols.map((col, i) => /* @__PURE__ */ jsx("col", { style: col.autoWidth ? void 0 : { width: columnWidths[i] } }, col.name))
7606
+ ] });
7599
7607
  return /* @__PURE__ */ jsxs(
7600
7608
  "div",
7601
7609
  {
@@ -7606,42 +7614,45 @@ var STable = forwardRef(function STable2({
7606
7614
  /* @__PURE__ */ jsxs(
7607
7615
  "div",
7608
7616
  {
7609
- ref: scrollRef,
7610
- onScroll: handleScroll,
7611
7617
  className: cn(
7612
- "bg-white relative overflow-auto border border-solid border-[color:var(--cmp-table-border-color)]",
7613
- SCROLLBAR_CLASS,
7614
- SCROLLBAR_TRACK_BG_CLASS,
7615
- SCROLLBAR_TRACK_BORDER_CLASS,
7618
+ "bg-white relative flex flex-col overflow-hidden border border-solid border-[color:var(--cmp-table-border-color)]",
7619
+ // height가 없으면 루트가 받은 높이를 끝까지 채운다. 호스트가 className으로
7620
+ // `flex-1 min-h-0` 등을 줘 루트 높이가 확정된 경우, 행이 적어도 테두리 박스가
7621
+ // 남은 영역을 그대로 차지한다. basis는 auto로 둬 높이가 확정되지 않은
7622
+ // 기본 사용(내용만큼 커지는 케이스)에서는 동작이 바뀌지 않는다.
7623
+ !height && "min-h-0 grow",
7616
7624
  radiusClass,
7617
- // 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시 스크롤·인터랙션 차단
7618
- (isLoading || rowCount === 0) && "overflow-hidden pointer-events-none"
7625
+ // 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시 인터랙션 차단
7626
+ (isLoading || rowCount === 0) && "pointer-events-none"
7619
7627
  ),
7620
7628
  style: {
7621
7629
  height,
7622
7630
  minHeight: isNoData ? "calc(var(--cmp-table-header-height) + 60px)" : void 0
7623
7631
  },
7624
7632
  children: [
7625
- /* @__PURE__ */ jsxs(
7626
- "table",
7633
+ /* @__PURE__ */ jsx(
7634
+ "div",
7627
7635
  {
7628
- className: "w-full table-fixed border-separate border-spacing-0 text-left",
7629
- style: { fontSize: 12 },
7630
- children: [
7631
- /* @__PURE__ */ jsx("thead", { className: cn(isNoData && "opacity-40"), children: /* @__PURE__ */ jsxs(
7632
- "tr",
7633
- {
7634
- className: cn(
7635
- "h-[var(--cmp-table-header-height)] bg-[var(--cmp-table-header-bg)]",
7636
- stickyHeader && "sticky top-0 z-20"
7637
- ),
7638
- children: [
7636
+ ref: headerScrollRef,
7637
+ className: "flex-none overflow-hidden",
7638
+ style: {
7639
+ borderRight: headerGutter ? `${headerGutter}px solid var(--cmp-table-header-bg)` : void 0
7640
+ },
7641
+ children: /* @__PURE__ */ jsxs(
7642
+ "table",
7643
+ {
7644
+ className: "w-full table-fixed border-separate border-spacing-0 text-left",
7645
+ style: { fontSize: 12 },
7646
+ children: [
7647
+ colgroup,
7648
+ /* @__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
7649
  selectable && /* @__PURE__ */ jsxs(
7640
7650
  "th",
7641
7651
  {
7642
7652
  className: cn(
7643
7653
  // 원본 .th--selected: 48px 고정폭, 항상 left sticky, 체크박스 중앙정렬
7644
- "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",
7654
+ // 하단 border 헤더 래퍼가 연속으로 그리므로 셀에는 두지 않는다.
7655
+ "sticky left-0 z-[7] bg-[var(--cmp-table-header-bg)] text-center align-middle",
7645
7656
  stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
7646
7657
  ),
7647
7658
  style: {
@@ -7665,7 +7676,8 @@ var STable = forwardRef(function STable2({
7665
7676
  "th",
7666
7677
  {
7667
7678
  className: cn(
7668
- "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)]",
7679
+ // 하단 border 헤더 래퍼가 연속으로 그린다 (거터 영역까지 이어짐).
7680
+ "relative bg-[var(--cmp-table-header-bg)] px-[16px] text-[12px] font-medium leading-[20px] text-[color:var(--sys-color-fg-primary)]",
7669
7681
  stickyInfo(i).isSticky && "z-[6]",
7670
7682
  stickyShadowClass(i),
7671
7683
  col.thClass
@@ -7703,74 +7715,102 @@ var STable = forwardRef(function STable2({
7703
7715
  },
7704
7716
  col.name
7705
7717
  ))
7706
- ]
7707
- }
7708
- ) }),
7709
- /* @__PURE__ */ jsxs("tbody", { children: [
7710
- useVirtualScroll && topSpacer > 0 && /* @__PURE__ */ jsx("tr", { "aria-hidden": true, style: { height: topSpacer }, children: /* @__PURE__ */ jsx("td", { colSpan: totalColSpan, className: "p-0" }) }),
7711
- rowCount === 0 ? null : bodyRows.map((row, ri) => {
7712
- const isSel = selectedKeys.has(row[rowKey]);
7713
- const rowBg = "bg-white";
7714
- return /* @__PURE__ */ jsxs(
7715
- "tr",
7716
- {
7717
- onClick: () => onRowClick?.(row),
7718
- className: cn(
7719
- "group/table-row hover:bg-[var(--color-grey-05)]",
7720
- onRowClick && "cursor-pointer"
7721
- ),
7722
- style: { height: useVirtualScroll ? effectiveRowHeight : rowH },
7723
- children: [
7724
- selectable && /* @__PURE__ */ jsx(
7725
- "td",
7726
- {
7727
- className: cn(
7728
- // 원본 .td--selected: 48px 고정폭, 항상 left sticky, 체크박스 중앙정렬
7729
- "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)]",
7730
- rowBg,
7731
- stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
7732
- ),
7733
- style: {
7734
- width: SELECTABLE_COLUMN_WIDTH,
7735
- minWidth: SELECTABLE_COLUMN_WIDTH,
7736
- maxWidth: SELECTABLE_COLUMN_WIDTH
7737
- },
7738
- onClick: (e) => e.stopPropagation(),
7739
- children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(SCheckbox, { value: isSel, onValueChange: () => toggleRow(row) }) })
7740
- }
7741
- ),
7742
- visibleCols.map((col, i) => /* @__PURE__ */ jsx(
7743
- "td",
7744
- {
7745
- className: cn(
7746
- // 원본 .td: 컬럼 폭에 맞춰 내용 말줄임(overflow hidden + ellipsis) + 행 구분선(border-b)
7747
- // 셀 배경은 흰색으로 채워 뒤 배경이 비치지 않게 하고, hover 시 행 배경(grey_05)을 따른다.
7748
- "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)]",
7749
- rowBg,
7750
- "group-hover/table-row:bg-[var(--color-grey-05)]",
7751
- stickyShadowClass(i),
7752
- typeof col.tdClass === "function" ? col.tdClass(row) : col.tdClass
7718
+ ] }) })
7719
+ ]
7720
+ }
7721
+ )
7722
+ }
7723
+ ),
7724
+ /* @__PURE__ */ jsx(
7725
+ "div",
7726
+ {
7727
+ ref: scrollRef,
7728
+ onScroll: handleScroll,
7729
+ className: cn(
7730
+ // 헤더 하단 구분선은 body 상단 border로 그린다. body 래퍼는 스크롤바를 포함한
7731
+ // 전체 폭을 차지하므로(스크롤바는 border 안쪽) 헤더 거터의 border-right와 미터가
7732
+ // 생기지 않아 색·길이가 균일한 한 줄이 된다.
7733
+ "min-h-0 flex-1 overflow-auto border-t border-solid border-[color:var(--cmp-table-border-color)]",
7734
+ SCROLLBAR_CLASS,
7735
+ SCROLLBAR_TRACK_BG_CLASS,
7736
+ SCROLLBAR_TRACK_BORDER_CLASS,
7737
+ // 원본 sd-table__scroll-container--loading/--no-data: 로딩·데이터 없음 시 스크롤 차단
7738
+ (isLoading || rowCount === 0) && "overflow-hidden"
7739
+ ),
7740
+ children: /* @__PURE__ */ jsxs(
7741
+ "table",
7742
+ {
7743
+ className: "w-full table-fixed border-separate border-spacing-0 text-left",
7744
+ style: { fontSize: 12 },
7745
+ children: [
7746
+ colgroup,
7747
+ /* @__PURE__ */ jsxs("tbody", { children: [
7748
+ useVirtualScroll && topSpacer > 0 && /* @__PURE__ */ jsx("tr", { "aria-hidden": true, style: { height: topSpacer }, children: /* @__PURE__ */ jsx("td", { colSpan: totalColSpan, className: "p-0" }) }),
7749
+ rowCount === 0 ? null : bodyRows.map((row, ri) => {
7750
+ const isSel = selectedKeys.has(row[rowKey]);
7751
+ const rowBg = "bg-white";
7752
+ return /* @__PURE__ */ jsxs(
7753
+ "tr",
7754
+ {
7755
+ onClick: () => onRowClick?.(row),
7756
+ className: cn(
7757
+ "group/table-row hover:bg-[var(--color-grey-05)]",
7758
+ onRowClick && "cursor-pointer"
7759
+ ),
7760
+ style: { height: useVirtualScroll ? effectiveRowHeight : rowH },
7761
+ children: [
7762
+ selectable && /* @__PURE__ */ jsx(
7763
+ "td",
7764
+ {
7765
+ className: cn(
7766
+ // 원본 .td--selected: 48px 고정폭, 항상 left sticky, 체크박스 중앙정렬
7767
+ "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)]",
7768
+ rowBg,
7769
+ stickyLeft === 0 && scrolledLeft && "shadow-[5px_0_8px_0_rgba(34,34,34,0.1)]"
7770
+ ),
7771
+ style: {
7772
+ width: SELECTABLE_COLUMN_WIDTH,
7773
+ minWidth: SELECTABLE_COLUMN_WIDTH,
7774
+ maxWidth: SELECTABLE_COLUMN_WIDTH
7775
+ },
7776
+ onClick: (e) => e.stopPropagation(),
7777
+ children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(SCheckbox, { value: isSel, onValueChange: () => toggleRow(row) }) })
7778
+ }
7753
7779
  ),
7754
- style: {
7755
- paddingLeft: cellPadX,
7756
- paddingRight: cellPadX,
7757
- paddingTop: cellPadY,
7758
- paddingBottom: cellPadY,
7759
- textAlign: col.align ?? "left",
7760
- ...cellStyle(i)
7761
- },
7762
- children: col.render ? col.render(row, cellValue(col, row)) : cellValue(col, row)
7763
- },
7764
- col.name
7765
- ))
7766
- ]
7767
- },
7768
- row[rowKey] ?? ri
7769
- );
7770
- }),
7771
- useVirtualScroll && bottomSpacer > 0 && /* @__PURE__ */ jsx("tr", { "aria-hidden": true, style: { height: bottomSpacer }, children: /* @__PURE__ */ jsx("td", { colSpan: totalColSpan, className: "p-0" }) })
7772
- ] })
7773
- ]
7780
+ visibleCols.map((col, i) => /* @__PURE__ */ jsx(
7781
+ "td",
7782
+ {
7783
+ className: cn(
7784
+ // 원본 .td: 컬럼 폭에 맞춰 내용 말줄임(overflow hidden + ellipsis) + 행 구분선(border-b)
7785
+ // 배경은 흰색으로 채워 뒤 배경이 비치지 않게 하고, hover 시 행 배경(grey_05)을 따른다.
7786
+ "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)]",
7787
+ rowBg,
7788
+ "group-hover/table-row:bg-[var(--color-grey-05)]",
7789
+ stickyShadowClass(i),
7790
+ typeof col.tdClass === "function" ? col.tdClass(row) : col.tdClass
7791
+ ),
7792
+ style: {
7793
+ paddingLeft: cellPadX,
7794
+ paddingRight: cellPadX,
7795
+ paddingTop: cellPadY,
7796
+ paddingBottom: cellPadY,
7797
+ textAlign: col.align ?? "left",
7798
+ ...cellStyle(i)
7799
+ },
7800
+ children: col.render ? col.render(row, cellValue(col, row)) : cellValue(col, row)
7801
+ },
7802
+ col.name
7803
+ ))
7804
+ ]
7805
+ },
7806
+ row[rowKey] ?? ri
7807
+ );
7808
+ }),
7809
+ useVirtualScroll && bottomSpacer > 0 && /* @__PURE__ */ jsx("tr", { "aria-hidden": true, style: { height: bottomSpacer }, children: /* @__PURE__ */ jsx("td", { colSpan: totalColSpan, className: "p-0" }) })
7810
+ ] })
7811
+ ]
7812
+ }
7813
+ )
7774
7814
  }
7775
7815
  ),
7776
7816
  isNoData && /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -7789,7 +7829,9 @@ var STable = forwardRef(function STable2({
7789
7829
  ),
7790
7830
  showPagination && // 원본 sd-table__pagination: 테이블 하단에 이어붙는 회색 바(높이 48px, margin-top:-1px로 테두리 겹침).
7791
7831
  // SPagination은 전체 폭 기준 중앙, rows-per-page SSelect는 우측에 absolute 배치해 중앙 정렬을 유지한다.
7792
- /* @__PURE__ */ jsxs("div", { className: "relative -mt-px flex h-[48px] 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: [
7832
+ // 루트 높이가 확정된 경우(테이블이 남은 영역을 채우는 배치) 페이지네이션 바가
7833
+ // 눌리지 않도록 shrink-0으로 48px를 보장한다.
7834
+ /* @__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
7835
  /* @__PURE__ */ jsx(SPagination, { currentPage: displayPage, lastPage, onPageChange: changePage }),
7794
7836
  useRowsPerPageSelect && /* @__PURE__ */ jsx("div", { className: "absolute right-[10px] top-1/2 -translate-y-1/2", children: /* @__PURE__ */ jsx(
7795
7837
  SSelect,