@lobehub/ui 5.63.1 → 5.63.2
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/es/ThemeProvider/GlobalStyle/essential.mjs +1 -2
- package/es/ThemeProvider/GlobalStyle/essential.mjs.map +1 -1
- package/es/base-ui/Table/FixedFrost.mjs +120 -0
- package/es/base-ui/Table/FixedFrost.mjs.map +1 -0
- package/es/base-ui/Table/Table.mjs +52 -47
- package/es/base-ui/Table/Table.mjs.map +1 -1
- package/es/base-ui/Table/style.mjs +128 -76
- package/es/base-ui/Table/style.mjs.map +1 -1
- package/es/base-ui/Text/style.d.mts +1 -1
- package/package.json +1 -1
|
@@ -22,8 +22,7 @@ var essential_default = (token) => css`
|
|
|
22
22
|
/* base-ui Table (outlined / filled) in dark: colorFillQuaternary on the clipped container,
|
|
23
23
|
cells clear so it shows through. Unset in light — each variant keeps its own background. */
|
|
24
24
|
${token.isDarkMode ? `--lobe-table-surface: ${token.colorFillQuaternary};
|
|
25
|
-
--lobe-table-cell-bg: transparent
|
|
26
|
-
--lobe-table-canvas-default: ${token.colorBgLayout};` : ""}
|
|
25
|
+
--lobe-table-cell-bg: transparent;` : ""}
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
@layer lobe-popup {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"essential.mjs","names":[],"sources":["../../../src/ThemeProvider/GlobalStyle/essential.ts"],"sourcesContent":["import { css, type Theme } from 'antd-style';\n\nimport { CLASSNAMES } from '@/styles/classNames';\n\n/**\n * Styles that library components rely on to render correctly (Flex layout,\n * popup trigger states, brand animations). Always injected by ThemeProvider,\n * independent of `enableGlobalStyle`, which only gates document-level resets.\n */\nexport default (token: Theme) => css`\n :root {\n /* Outer hairline painted on the page behind an elevated surface. Dark alpha is much\n higher on purpose: a white hairline lightens toward a raised surface, and below ~16%\n it lands on the surface's own colour and the edge vanishes. */\n --lobe-ring: 0 0 0 1px ${token.isDarkMode ? 'rgb(255 255 255 / 18%)' : 'rgb(0 0 0 / 5%)'};\n\n /* Hairline borders / dividers from the fill series (dashboard cards, base-ui Table):\n light colorFill, dark one step quieter colorFillSecondary. Strong is one step louder;\n light has no fill above colorFill, so it mixes toward colorText. */\n --lobe-fill-border: ${token.isDarkMode ? token.colorFillSecondary : token.colorFill};\n --lobe-fill-border-strong: ${\n token.isDarkMode\n ? token.colorFill\n : `color-mix(in srgb, ${token.colorFill}, ${token.colorText} 15%)`\n };\n\n /* base-ui Table (outlined / filled) in dark: colorFillQuaternary on the clipped container,\n cells clear so it shows through. Unset in light — each variant keeps its own background. */\n ${\n token.isDarkMode\n ? `--lobe-table-surface: ${token.colorFillQuaternary};\n --lobe-table-cell-bg: transparent
|
|
1
|
+
{"version":3,"file":"essential.mjs","names":[],"sources":["../../../src/ThemeProvider/GlobalStyle/essential.ts"],"sourcesContent":["import { css, type Theme } from 'antd-style';\n\nimport { CLASSNAMES } from '@/styles/classNames';\n\n/**\n * Styles that library components rely on to render correctly (Flex layout,\n * popup trigger states, brand animations). Always injected by ThemeProvider,\n * independent of `enableGlobalStyle`, which only gates document-level resets.\n */\nexport default (token: Theme) => css`\n :root {\n /* Outer hairline painted on the page behind an elevated surface. Dark alpha is much\n higher on purpose: a white hairline lightens toward a raised surface, and below ~16%\n it lands on the surface's own colour and the edge vanishes. */\n --lobe-ring: 0 0 0 1px ${token.isDarkMode ? 'rgb(255 255 255 / 18%)' : 'rgb(0 0 0 / 5%)'};\n\n /* Hairline borders / dividers from the fill series (dashboard cards, base-ui Table):\n light colorFill, dark one step quieter colorFillSecondary. Strong is one step louder;\n light has no fill above colorFill, so it mixes toward colorText. */\n --lobe-fill-border: ${token.isDarkMode ? token.colorFillSecondary : token.colorFill};\n --lobe-fill-border-strong: ${\n token.isDarkMode\n ? token.colorFill\n : `color-mix(in srgb, ${token.colorFill}, ${token.colorText} 15%)`\n };\n\n /* base-ui Table (outlined / filled) in dark: colorFillQuaternary on the clipped container,\n cells clear so it shows through. Unset in light — each variant keeps its own background. */\n ${\n token.isDarkMode\n ? `--lobe-table-surface: ${token.colorFillQuaternary};\n --lobe-table-cell-bg: transparent;`\n : ''\n }\n }\n\n @layer lobe-popup {\n .${CLASSNAMES.ContextTrigger}[data-popup-open],\n .${CLASSNAMES.DropdownMenuTrigger}[data-popup-open] {\n background: ${token.colorFillTertiary};\n }\n }\n\n @layer lobe-base {\n :where(.lobe-flex) {\n /* Define defaults on the element itself to avoid CSS variable inheritance leaking to nested Flex */\n --lobe-flex: 0 1 auto;\n --lobe-flex-direction: column;\n --lobe-flex-wrap: nowrap;\n --lobe-flex-justify: flex-start;\n --lobe-flex-align: stretch;\n --lobe-flex-width: auto;\n --lobe-flex-height: auto;\n --lobe-flex-padding: 0;\n\n /* Keep padding-inline/block aligned with padding by default, and prevent inheriting from parent */\n --lobe-flex-padding-inline: var(--lobe-flex-padding);\n --lobe-flex-padding-block: var(--lobe-flex-padding);\n --lobe-flex-gap: 0;\n\n display: flex;\n flex: var(--lobe-flex);\n flex-flow: var(--lobe-flex-direction) var(--lobe-flex-wrap);\n gap: var(--lobe-flex-gap);\n align-items: var(--lobe-flex-align);\n justify-content: var(--lobe-flex-justify);\n\n width: var(--lobe-flex-width);\n height: var(--lobe-flex-height);\n padding: var(--lobe-flex-padding);\n padding-block: var(--lobe-flex-padding-block);\n padding-inline: var(--lobe-flex-padding-inline);\n }\n\n .lobe-flex-hidden {\n display: none;\n }\n }\n\n /* Brand Loading */\n @keyframes draw {\n 0% {\n stroke-dashoffset: 1000;\n }\n\n 100% {\n stroke-dashoffset: 0;\n }\n }\n\n @keyframes fill {\n 30% {\n fill-opacity: 0.05;\n }\n\n 100% {\n fill-opacity: 1;\n }\n }\n\n .lobe-brand-loading path {\n fill: currentcolor;\n fill-opacity: 0;\n stroke: currentcolor;\n stroke-dasharray: 1000;\n stroke-dashoffset: 1000;\n stroke-width: 0.25em;\n\n animation:\n draw 2s cubic-bezier(0.4, 0, 0.2, 1) infinite,\n fill 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;\n }\n`;\n"],"mappings":";;;;;;;;AASA,IAAA,qBAAgB,UAAiB,GAAG;;;;;6BAKP,MAAM,aAAa,2BAA2B,kBAAkB;;;;;0BAKnE,MAAM,aAAa,MAAM,qBAAqB,MAAM,UAAU;iCAElF,MAAM,aACF,MAAM,YACN,sBAAsB,MAAM,UAAU,IAAI,MAAM,UAAU,OAC/D;;;;MAKC,MAAM,aACF,yBAAyB,MAAM,oBAAoB;0CAEnD,GACL;;;;OAIE,WAAW,eAAe;SACxB,WAAW,oBAAoB;oBACpB,MAAM,kBAAkB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { PREFIX_CLS, styles } from "./style.mjs";
|
|
3
|
+
import { memo, useEffect, useState } from "react";
|
|
4
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { createPortal } from "react-dom";
|
|
6
|
+
//#region src/base-ui/Table/FixedFrost.tsx
|
|
7
|
+
const p = `.${PREFIX_CLS}`;
|
|
8
|
+
const px = (value) => Number.parseFloat(value) || 0;
|
|
9
|
+
/** Widths of the fixed-start / fixed-end blocks: max sticky offset + cell width over the rows. */
|
|
10
|
+
const measureSides = (rows) => {
|
|
11
|
+
let start = 0;
|
|
12
|
+
let end = 0;
|
|
13
|
+
for (const row of rows) for (const cell of Array.from(row.children)) if (cell.classList.contains(`lobe-table-cell-fix-start`)) start = Math.max(start, px(cell.style.insetInlineStart || cell.style.left) + cell.offsetWidth);
|
|
14
|
+
else if (cell.classList.contains(`lobe-table-cell-fix-end`)) end = Math.max(end, px(cell.style.insetInlineEnd || cell.style.right) + cell.offsetWidth);
|
|
15
|
+
return {
|
|
16
|
+
end: Math.round(end),
|
|
17
|
+
start: Math.round(start)
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
const collectRails = (table) => {
|
|
21
|
+
const rails = [];
|
|
22
|
+
const own = (el) => el.closest(p) === table;
|
|
23
|
+
const hosts = table.querySelectorAll(`${p}-content, ${p}-header, ${p}-body, ${p}-tbody-virtual-holder-inner`);
|
|
24
|
+
for (const host of Array.from(hosts)) {
|
|
25
|
+
if (!own(host)) continue;
|
|
26
|
+
if (host.closest(`${p}-sticky-holder`)) continue;
|
|
27
|
+
if (host.classList.contains(`lobe-table-tbody-virtual-holder-inner`)) {
|
|
28
|
+
const rows = Array.from(host.children).filter((el) => el.classList.contains(`lobe-table-row`) && !el.classList.contains(`lobe-table-row-extra`));
|
|
29
|
+
const { start, end } = measureSides(rows.slice(0, 3));
|
|
30
|
+
if (start || end) rails.push({
|
|
31
|
+
end,
|
|
32
|
+
fill: true,
|
|
33
|
+
height: 0,
|
|
34
|
+
host,
|
|
35
|
+
start,
|
|
36
|
+
width: 0
|
|
37
|
+
});
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const tableEl = host.querySelector(":scope > table");
|
|
41
|
+
if (!tableEl) continue;
|
|
42
|
+
const rows = Array.from(tableEl.querySelectorAll(":scope > thead > tr, :scope > tbody > tr")).filter((row) => !row.classList.contains(`${PREFIX_CLS}-measure-row`)).slice(0, 6);
|
|
43
|
+
const { start, end } = measureSides(rows);
|
|
44
|
+
if (!start && !end) continue;
|
|
45
|
+
rails.push({
|
|
46
|
+
end,
|
|
47
|
+
fill: false,
|
|
48
|
+
height: tableEl.offsetHeight,
|
|
49
|
+
host,
|
|
50
|
+
start,
|
|
51
|
+
width: tableEl.offsetWidth
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return rails;
|
|
55
|
+
};
|
|
56
|
+
const sameRails = (a, b) => a.length === b.length && a.every((rail, i) => rail.host === b[i].host && rail.start === b[i].start && rail.end === b[i].end && rail.width === b[i].width && rail.height === b[i].height);
|
|
57
|
+
/**
|
|
58
|
+
* One frosted backdrop per fixed side instead of one per cell. A per-cell `backdrop-filter`
|
|
59
|
+
* blurs each box on its own, so the column shows seams at every row. Here a rail is portaled
|
|
60
|
+
* into each scroll host (the table's scroll container, a split header / body, or the virtual
|
|
61
|
+
* row layer) and holds two sticky panes spanning the fixed-start / fixed-end width and the
|
|
62
|
+
* full height. The rail sits at z-index 1: above the scrolling cells (z auto), below the
|
|
63
|
+
* fixed cells (z >= 2), so their dividers and content stay sharp on top of the blur.
|
|
64
|
+
*/
|
|
65
|
+
const FixedFrost = memo(({ rootRef }) => {
|
|
66
|
+
const [rails, setRails] = useState([]);
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
const root = rootRef.current;
|
|
69
|
+
if (!root) return;
|
|
70
|
+
let frame = 0;
|
|
71
|
+
const update = () => {
|
|
72
|
+
frame = 0;
|
|
73
|
+
const table = root.querySelector(`${p}`);
|
|
74
|
+
const next = table ? collectRails(table) : [];
|
|
75
|
+
for (const rail of next) if (!rail.fill && getComputedStyle(rail.host).position === "static") rail.host.style.position = "relative";
|
|
76
|
+
setRails((prev) => sameRails(prev, next) ? prev : next);
|
|
77
|
+
};
|
|
78
|
+
const schedule = () => {
|
|
79
|
+
if (!frame) frame = requestAnimationFrame(update);
|
|
80
|
+
};
|
|
81
|
+
update();
|
|
82
|
+
const resize = new ResizeObserver(schedule);
|
|
83
|
+
resize.observe(root);
|
|
84
|
+
const mutation = new MutationObserver((records) => {
|
|
85
|
+
if (records.every((r) => r.target.closest?.("[data-table-frost]"))) return;
|
|
86
|
+
schedule();
|
|
87
|
+
});
|
|
88
|
+
mutation.observe(root, {
|
|
89
|
+
attributeFilter: ["class", "style"],
|
|
90
|
+
childList: true,
|
|
91
|
+
subtree: true
|
|
92
|
+
});
|
|
93
|
+
return () => {
|
|
94
|
+
if (frame) cancelAnimationFrame(frame);
|
|
95
|
+
resize.disconnect();
|
|
96
|
+
mutation.disconnect();
|
|
97
|
+
};
|
|
98
|
+
}, [rootRef]);
|
|
99
|
+
return /* @__PURE__ */ jsx(Fragment$1, { children: rails.map((rail, i) => createPortal(/* @__PURE__ */ jsxs("div", {
|
|
100
|
+
"aria-hidden": true,
|
|
101
|
+
className: styles.frostRail,
|
|
102
|
+
"data-table-frost": "",
|
|
103
|
+
style: rail.fill ? { inset: 0 } : {
|
|
104
|
+
height: rail.height,
|
|
105
|
+
width: rail.width
|
|
106
|
+
},
|
|
107
|
+
children: [rail.start > 0 && /* @__PURE__ */ jsx("div", {
|
|
108
|
+
className: styles.frostStart,
|
|
109
|
+
style: { width: rail.start }
|
|
110
|
+
}), rail.end > 0 && /* @__PURE__ */ jsx("div", {
|
|
111
|
+
className: styles.frostEnd,
|
|
112
|
+
style: { width: rail.end }
|
|
113
|
+
})]
|
|
114
|
+
}), rail.host, `frost-${i}`)) });
|
|
115
|
+
});
|
|
116
|
+
FixedFrost.displayName = "TableFixedFrost";
|
|
117
|
+
//#endregion
|
|
118
|
+
export { FixedFrost as default };
|
|
119
|
+
|
|
120
|
+
//# sourceMappingURL=FixedFrost.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FixedFrost.mjs","names":[],"sources":["../../../src/base-ui/Table/FixedFrost.tsx"],"sourcesContent":["'use client';\n\nimport { memo, type RefObject, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { PREFIX_CLS, styles } from './style';\n\nconst p = `.${PREFIX_CLS}`;\n\ninterface Rail {\n end: number;\n /** Table hosts size the rail to the table; the virtual body fills its row layer. */\n fill: boolean;\n height: number;\n host: HTMLElement;\n start: number;\n width: number;\n}\n\nconst px = (value: string) => Number.parseFloat(value) || 0;\n\n/** Widths of the fixed-start / fixed-end blocks: max sticky offset + cell width over the rows. */\nconst measureSides = (rows: Element[]) => {\n let start = 0;\n let end = 0;\n for (const row of rows) {\n for (const cell of Array.from(row.children) as HTMLElement[]) {\n if (cell.classList.contains(`${PREFIX_CLS}-cell-fix-start`)) {\n start = Math.max(\n start,\n px(cell.style.insetInlineStart || cell.style.left) + cell.offsetWidth,\n );\n } else if (cell.classList.contains(`${PREFIX_CLS}-cell-fix-end`)) {\n end = Math.max(end, px(cell.style.insetInlineEnd || cell.style.right) + cell.offsetWidth);\n }\n }\n }\n return { end: Math.round(end), start: Math.round(start) };\n};\n\nconst collectRails = (table: HTMLElement): Rail[] => {\n const rails: Rail[] = [];\n const own = (el: Element) => el.closest(p) === table;\n const hosts = table.querySelectorAll<HTMLElement>(\n `${p}-content, ${p}-header, ${p}-body, ${p}-tbody-virtual-holder-inner`,\n );\n\n for (const host of Array.from(hosts)) {\n if (!own(host)) continue;\n // A sticky header is frosted as one element by CSS (it is a backdrop root anyway).\n if (host.closest(`${p}-sticky-holder`)) continue;\n\n if (host.classList.contains(`${PREFIX_CLS}-tbody-virtual-holder-inner`)) {\n const rows = Array.from(host.children).filter(\n (el) =>\n el.classList.contains(`${PREFIX_CLS}-row`) &&\n !el.classList.contains(`${PREFIX_CLS}-row-extra`),\n );\n const { start, end } = measureSides(rows.slice(0, 3));\n if (start || end) rails.push({ end, fill: true, height: 0, host, start, width: 0 });\n continue;\n }\n\n const tableEl = host.querySelector<HTMLTableElement>(':scope > table');\n if (!tableEl) continue;\n const rows = Array.from(tableEl.querySelectorAll(':scope > thead > tr, :scope > tbody > tr'))\n .filter((row) => !row.classList.contains(`${PREFIX_CLS}-measure-row`))\n .slice(0, 6);\n const { start, end } = measureSides(rows);\n if (!start && !end) continue;\n rails.push({\n end,\n fill: false,\n height: tableEl.offsetHeight,\n host,\n start,\n width: tableEl.offsetWidth,\n });\n }\n return rails;\n};\n\nconst sameRails = (a: Rail[], b: Rail[]) =>\n a.length === b.length &&\n a.every(\n (rail, i) =>\n rail.host === b[i].host &&\n rail.start === b[i].start &&\n rail.end === b[i].end &&\n rail.width === b[i].width &&\n rail.height === b[i].height,\n );\n\n/**\n * One frosted backdrop per fixed side instead of one per cell. A per-cell `backdrop-filter`\n * blurs each box on its own, so the column shows seams at every row. Here a rail is portaled\n * into each scroll host (the table's scroll container, a split header / body, or the virtual\n * row layer) and holds two sticky panes spanning the fixed-start / fixed-end width and the\n * full height. The rail sits at z-index 1: above the scrolling cells (z auto), below the\n * fixed cells (z >= 2), so their dividers and content stay sharp on top of the blur.\n */\nconst FixedFrost = memo<{ rootRef: RefObject<HTMLElement | null> }>(({ rootRef }) => {\n const [rails, setRails] = useState<Rail[]>([]);\n\n // Passive effect: the root ref belongs to an ancestor and is attached after this\n // child's layout effects, so a layout effect would see it as null on mount.\n useEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n let frame = 0;\n\n const update = () => {\n frame = 0;\n const table = root.querySelector<HTMLElement>(`${p}`);\n const next = table ? collectRails(table) : [];\n for (const rail of next) {\n if (!rail.fill && getComputedStyle(rail.host).position === 'static') {\n rail.host.style.position = 'relative';\n }\n }\n setRails((prev) => (sameRails(prev, next) ? prev : next));\n };\n const schedule = () => {\n if (!frame) frame = requestAnimationFrame(update);\n };\n\n update();\n const resize = new ResizeObserver(schedule);\n resize.observe(root);\n const mutation = new MutationObserver((records) => {\n // Ignore our own rail nodes.\n if (records.every((r) => (r.target as Element).closest?.('[data-table-frost]'))) return;\n schedule();\n });\n mutation.observe(root, { attributeFilter: ['class', 'style'], childList: true, subtree: true });\n\n return () => {\n if (frame) cancelAnimationFrame(frame);\n resize.disconnect();\n mutation.disconnect();\n };\n }, [rootRef]);\n\n return (\n <>\n {rails.map((rail, i) =>\n createPortal(\n <div\n aria-hidden\n className={styles.frostRail}\n data-table-frost=\"\"\n style={rail.fill ? { inset: 0 } : { height: rail.height, width: rail.width }}\n >\n {rail.start > 0 && <div className={styles.frostStart} style={{ width: rail.start }} />}\n {rail.end > 0 && <div className={styles.frostEnd} style={{ width: rail.end }} />}\n </div>,\n rail.host,\n `frost-${i}`,\n ),\n )}\n </>\n );\n});\n\nFixedFrost.displayName = 'TableFixedFrost';\n\nexport default FixedFrost;\n"],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ import { assertColumnKeys, fillColumns, flattenColumns, getColumnId, getColumnPo
|
|
|
14
14
|
import renderExpandIcon from "./ExpandIcon.mjs";
|
|
15
15
|
import { PREFIX_CLS, styles } from "./style.mjs";
|
|
16
16
|
import FilterDropdown, { TableMeasureRowContext } from "./FilterDropdown.mjs";
|
|
17
|
+
import FixedFrost from "./FixedFrost.mjs";
|
|
17
18
|
import TableLoadingSkeleton from "./LoadingSkeleton.mjs";
|
|
18
19
|
import { normalizeClassNames, normalizeStyles, resolveSemantic } from "./semantic.mjs";
|
|
19
20
|
import { useBreakpoint } from "./useBreakpoint.mjs";
|
|
@@ -429,53 +430,57 @@ const TableInner = (props) => {
|
|
|
429
430
|
/* @__PURE__ */ jsxs("div", {
|
|
430
431
|
className: styles.spinContainer,
|
|
431
432
|
"data-table-wrapper": "",
|
|
432
|
-
children: [
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
433
|
+
children: [
|
|
434
|
+
/* @__PURE__ */ jsx(TableComponent, {
|
|
435
|
+
...virtual && { listItemHeight: VIRTUAL_ROW_HEIGHT[size] },
|
|
436
|
+
columns: rcColumns,
|
|
437
|
+
components,
|
|
438
|
+
data: rows,
|
|
439
|
+
emptyText: emptyNode,
|
|
440
|
+
expandable: mergedExpandable,
|
|
441
|
+
footer,
|
|
442
|
+
internalHooks: INTERNAL_HOOKS,
|
|
443
|
+
prefixCls: PREFIX_CLS,
|
|
444
|
+
ref: rcRef,
|
|
445
|
+
rowClassName: mergedRowClassName,
|
|
446
|
+
rowHoverable,
|
|
447
|
+
rowKey,
|
|
448
|
+
scroll,
|
|
449
|
+
showHeader,
|
|
450
|
+
sticky,
|
|
451
|
+
summary,
|
|
452
|
+
tableLayout: mergedTableLayout,
|
|
453
|
+
title,
|
|
454
|
+
transformColumns: transformSelectionColumns,
|
|
455
|
+
className: cx(styles.table, sizeClassName[size], `${PREFIX_CLS}-${size === "middle" ? "medium" : size}`, variant === "borderless" && styles.borderless, variant === "outlined" && styles.outlined, grouped && styles.grouped, variant === "filled" && styles.filled, `${PREFIX_CLS}-${variant}`, rowHoverable && styles.hoverable),
|
|
456
|
+
classNames: {
|
|
457
|
+
body: mergedClassNames.body,
|
|
458
|
+
content: mergedClassNames.content,
|
|
459
|
+
footer: mergedClassNames.footer,
|
|
460
|
+
header: mergedClassNames.header,
|
|
461
|
+
section: mergedClassNames.section,
|
|
462
|
+
title: mergedClassNames.title
|
|
463
|
+
},
|
|
464
|
+
measureRowRender: (measureRow) => wrapMeasureRow(measureRowRender ? measureRowRender(measureRow) : measureRow),
|
|
465
|
+
styles: {
|
|
466
|
+
body: mergedStyles.body,
|
|
467
|
+
content: mergedStyles.content,
|
|
468
|
+
footer: mergedStyles.footer,
|
|
469
|
+
header: mergedStyles.header,
|
|
470
|
+
section: mergedStyles.section,
|
|
471
|
+
title: mergedStyles.title
|
|
472
|
+
},
|
|
473
|
+
onHeaderRow,
|
|
474
|
+
onRow: mergedOnRow,
|
|
475
|
+
onScroll
|
|
476
|
+
}),
|
|
477
|
+
/* @__PURE__ */ jsx(FixedFrost, { rootRef }),
|
|
478
|
+
isLoading && /* @__PURE__ */ jsxs("div", {
|
|
479
|
+
className: styles.loading,
|
|
480
|
+
"data-table-loading": "",
|
|
481
|
+
children: [/* @__PURE__ */ jsx(Spin, { ...spinProps }), tip]
|
|
482
|
+
})
|
|
483
|
+
]
|
|
479
484
|
}),
|
|
480
485
|
bottomPagination
|
|
481
486
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.mjs","names":["tableMessages","RcVirtualTable"],"sources":["../../../src/base-ui/Table/Table.tsx"],"sourcesContent":["'use client';\n\nimport RcTable, {\n type ColumnsType as RcColumnsType,\n convertChildrenToColumns,\n EXPAND_COLUMN,\n type ExpandableConfig as RcExpandableConfig,\n INTERNAL_HOOKS,\n type Reference as RcReference,\n Summary,\n VirtualTable as RcVirtualTable,\n} from '@rc-component/table';\nimport { cx } from 'antd-style';\nimport { ArrowDownFromLine, ArrowUpDown, ArrowUpToLine, Inbox } from 'lucide-react';\nimport {\n type HTMLAttributes,\n type Key,\n memo,\n type ReactNode,\n type Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport Pagination, { type PaginationAlign } from '@/base-ui/Pagination';\nimport Spin from '@/base-ui/Spin';\nimport Tooltip from '@/base-ui/Tooltip';\nimport Empty from '@/Empty';\nimport { useEventCallback } from '@/hooks/useEventCallback';\nimport tableMessages from '@/i18n/resources/en/table';\nimport { useTranslation } from '@/i18n/useTranslation';\n\nimport Column from './Column';\nimport ColumnGroup from './ColumnGroup';\nimport {\n assertColumnKeys,\n fillColumns,\n flattenColumns,\n getColumnId,\n getColumnPos,\n isColumnGroup,\n isColumnVisibleAt,\n renderColumnTitle,\n} from './columnUtils';\nimport renderExpandIcon from './ExpandIcon';\nimport FilterDropdown, { TableMeasureRowContext } from './FilterDropdown';\nimport TableLoadingSkeleton from './LoadingSkeleton';\nimport {\n isPlainObject,\n SELECTION_ALL,\n SELECTION_COLUMN,\n SELECTION_INVERT,\n SELECTION_NONE,\n} from './selectionUtils';\nimport { normalizeClassNames, normalizeStyles, resolveSemantic } from './semantic';\nimport {\n EXPAND_COLUMN_WIDTH,\n PREFIX_CLS,\n SELECTION_COLUMN_WIDTH,\n SELECTION_DROPDOWN_WIDTH,\n styles,\n} from './style';\nimport type {\n SortOrder,\n TableColumn,\n TableColumnType,\n TableLocale,\n TableProps,\n TableRef,\n TableScrollToConfig,\n TableSize,\n TableSorterTooltipProps,\n} from './type';\nimport { useBreakpoint } from './useBreakpoint';\nimport { useSelection } from './useSelection';\nimport { DEFAULT_SORT_DIRECTIONS, getMultiplePriority, getNextSortOrder } from './useSorter';\nimport { useTableState } from './useTableState';\n\nconst EMPTY_DATA: any[] = [];\nconst DEFAULT_INDENT_SIZE = 15;\nconst DEFAULT_SORTER_TOOLTIP: TableSorterTooltipProps = { target: 'full-header' };\n\n/**\n * Estimated `virtual` row height per size, like antd: padding × 2 + 14px × 22/14 line + 1px border.\n * rc-virtual-list still measures the real rows; this only seeds the scroll range.\n */\nconst VIRTUAL_ROW_HEIGHT: Record<TableSize, number> = {\n large: 16 * 2 + 22 + 1,\n medium: 12 * 2 + 22 + 1,\n middle: 12 * 2 + 22 + 1,\n small: 8 * 2 + 22 + 1,\n};\n\nconst sizeClassName: Record<TableSize, string> = {\n large: styles.sizeLarge,\n medium: styles.sizeMedium,\n middle: styles.sizeMedium,\n small: styles.sizeSmall,\n};\n\nconst sortTipOf = (next: SortOrder | undefined, locale: TableLocale) =>\n next === 'descend'\n ? locale.triggerDesc\n : next === 'ascend'\n ? locale.triggerAsc\n : locale.cancelSort;\n\nconst ariaSortOf = (order: SortOrder | undefined) =>\n order === 'ascend' ? 'ascending' : order === 'descend' ? 'descending' : 'none';\n\nconst paginationAlignClassName: Record<PaginationAlign, string> = {\n center: styles.paginationCenter,\n end: styles.paginationEnd,\n start: styles.paginationStart,\n};\n\n/** antd `normalizePlacement`: `topLeft` / `bottomStart` → `start`, `*Center` → `center`, else `end`. */\nconst normalizePlacement = (placement: string): PaginationAlign => {\n const lower = placement.toLowerCase();\n if (lower.includes('center')) return 'center';\n return lower.includes('left') || lower.includes('start') ? 'start' : 'end';\n};\n\n// Only a static filter trigger renders in rc-table's hidden measure row, like antd.\nconst wrapMeasureRow = (measureRow: ReactNode) => (\n <TableMeasureRowContext value={true}>{measureRow}</TableMeasureRowContext>\n);\n\n/** antd's ref shape: the root element itself, extended with `nativeElement` and `scrollTo`. */\nconst toTableRef = (\n element: HTMLDivElement,\n scrollTo: (config: TableScrollToConfig) => void,\n): TableRef => {\n const extra = { nativeElement: element, scrollTo };\n return new Proxy(element, {\n get(target, prop) {\n if (prop in extra) return extra[prop as keyof typeof extra];\n const value = Reflect.get(target, prop, target);\n return typeof value === 'function' ? value.bind(target) : value;\n },\n }) as TableRef;\n};\n\nlet warnedBordered = false;\n\n/** `bordered` (pre-5.61) → `variant`: `true` is `outlined`; an explicit `variant` wins. */\nexport const resolveTableVariant = (\n variant: TableProps<unknown>['variant'],\n bordered: boolean | undefined,\n): NonNullable<TableProps<unknown>['variant']> => {\n if (bordered !== undefined && process.env.NODE_ENV !== 'production' && !warnedBordered) {\n warnedBordered = true;\n console.warn('[Table] `bordered` is deprecated. Please use `variant=\"outlined\"` instead.');\n }\n return variant ?? (bordered ? 'outlined' : 'borderless');\n};\n\nconst TableInner = <T,>(props: TableProps<T>) => {\n const {\n bordered,\n variant: variantProp,\n children,\n childrenColumnName: legacyChildrenColumnName,\n className,\n classNames,\n column: columnDefaults,\n columns: columnsProp,\n components,\n dataSource = EMPTY_DATA as T[],\n emptyText,\n expandable,\n expandedRowRender: legacyExpandedRowRender,\n expandIcon: legacyExpandIcon,\n expandIconColumnIndex: legacyExpandIconColumnIndex,\n footer,\n getPopupContainer,\n indentSize: legacyIndentSize,\n loading = false,\n locale,\n measureRowRender,\n onChange,\n onHeaderRow,\n onRow,\n onScroll,\n pagination,\n ref,\n rootClassName,\n rowClassName,\n rowHoverable = true,\n rowKey = 'key',\n rowSelection,\n scroll,\n showHeader,\n showSorterTooltip: tableShowSorterTooltip = DEFAULT_SORTER_TOOLTIP,\n size: sizeProp,\n sortDirections: tableSortDirections = DEFAULT_SORT_DIRECTIONS,\n sticky,\n style,\n styles: customStyles,\n summary,\n tableLayout,\n title,\n virtual,\n } = props;\n const variant = resolveTableVariant(variantProp, bordered);\n const size: TableSize = sizeProp ?? 'middle';\n\n // =============================== Locale ===============================\n const { t } = useTranslation(tableMessages);\n const tableLocale = useMemo(\n (): TableLocale => ({\n cancelSort: t('table.cancelSort'),\n collapse: t('table.collapse'),\n expand: t('table.expand'),\n filterCheckAll: t('table.filterCheckAll'),\n filterConfirm: t('table.filterConfirm'),\n filterEmptyText: t('table.filterEmptyText'),\n filterReset: t('table.filterReset'),\n filterSearchPlaceholder: t('table.filterSearchPlaceholder'),\n filterTitle: t('table.filterTitle'),\n selectAll: t('table.selectAll'),\n selectInvert: t('table.selectInvert'),\n selectNone: t('table.selectNone'),\n selectionAll: t('table.selectionAll'),\n sortTitle: t('table.sortTitle'),\n triggerAsc: t('table.triggerAsc'),\n triggerDesc: t('table.triggerDesc'),\n ...(locale?.filterCheckall !== undefined && { filterCheckAll: locale.filterCheckall }),\n ...locale,\n }),\n [t, locale],\n );\n\n // ============================ Semantic DOM ============================\n const semanticInfo = { props };\n const mergedClassNames = normalizeClassNames(resolveSemantic(classNames, semanticInfo));\n const mergedStyles = normalizeStyles(resolveSemantic(customStyles, semanticInfo));\n\n const rawColumns = useMemo(\n () => columnsProp ?? (convertChildrenToColumns(children) as TableColumn<T>[]),\n [columnsProp, children],\n );\n const columns = useMemo(\n () => fillColumns(rawColumns, columnDefaults),\n [rawColumns, columnDefaults],\n );\n\n assertColumnKeys(columns);\n /** Multi-level headers get column dividers; plain tables never do. */\n const grouped = useMemo(\n () =>\n columns.some(\n (column) => Array.isArray((column as any).children) && (column as any).children.length > 0,\n ),\n [columns],\n );\n\n const needResponsive = useMemo(\n () => flattenColumns(columns).some(({ column }) => column.responsive),\n [columns],\n );\n const screens = useBreakpoint(needResponsive);\n\n // ============================= Expandable =============================\n const hasRowSelection = Boolean(rowSelection);\n const childrenColumnName =\n expandable?.childrenColumnName ?? legacyChildrenColumnName ?? 'children';\n const expandType = useMemo(() => {\n if (dataSource.some((record) => isPlainObject(record) && record[childrenColumnName])) {\n return 'nest';\n }\n if (legacyExpandedRowRender || expandable?.expandedRowRender) return 'row';\n return null;\n }, [childrenColumnName, dataSource, legacyExpandedRowRender, expandable?.expandedRowRender]);\n\n // Like antd: legacy top-level props sit under `expandable`, which always wins.\n const mergedExpandable = useMemo((): RcExpandableConfig<any> => {\n const config: RcExpandableConfig<any> = {\n childrenColumnName: legacyChildrenColumnName,\n expandedRowRender: legacyExpandedRowRender,\n expandIconColumnIndex: legacyExpandIconColumnIndex,\n ...(expandable as RcExpandableConfig<any>),\n expandIcon: (expandable?.expandIcon ??\n legacyExpandIcon ??\n ((iconProps: any) => renderExpandIcon(iconProps, tableLocale))) as any,\n };\n // Like antd: tree toggles sit after the selection column; legacy indexes skip it.\n if (expandType === 'nest' && config.expandIconColumnIndex === undefined) {\n config.expandIconColumnIndex = hasRowSelection ? 1 : 0;\n } else if ((config.expandIconColumnIndex ?? 0) > 0 && hasRowSelection) {\n config.expandIconColumnIndex = config.expandIconColumnIndex! - 1;\n }\n // Virtual rows are flex boxes sized from numeric widths; the CSS `col` width never reaches them.\n if (virtual && config.columnWidth === undefined) config.columnWidth = EXPAND_COLUMN_WIDTH;\n if (typeof config.indentSize !== 'number') {\n config.indentSize =\n typeof legacyIndentSize === 'number' ? legacyIndentSize : DEFAULT_INDENT_SIZE;\n }\n return config;\n }, [\n expandable,\n legacyChildrenColumnName,\n legacyExpandedRowRender,\n legacyExpandIcon,\n legacyExpandIconColumnIndex,\n legacyIndentSize,\n expandType,\n hasRowSelection,\n virtual,\n tableLocale,\n ]);\n\n // ================================ Refs ================================\n const rootRef = useRef<HTMLDivElement>(null);\n const rcRef = useRef<RcReference>(null);\n useImperativeHandle(\n ref as Ref<TableRef>,\n () => toTableRef(rootRef.current!, (config) => rcRef.current?.scrollTo(config)),\n [],\n );\n\n // ======================== Sort / Filter / Page ========================\n const state = useTableState({\n childrenColumnName,\n columns,\n dataSource,\n onChange,\n // Like antd: on by default once `scroll` is set.\n onTableChange: () => {\n if (scroll && scroll.scrollToFirstRowOnChange !== false) rcRef.current?.scrollTo({ top: 0 });\n },\n pagination,\n });\n const {\n config: paginationConfig,\n data: allRows,\n filterStates,\n page,\n sortStates,\n titleProps,\n } = state;\n const { pageIndex, pageSize } = page;\n const { total } = state;\n\n // Like antd: async data (fewer rows than `total`, at most one page) is shown as given.\n const rows = useMemo(() => {\n if (pagination === false) return allRows;\n if (allRows.length < total && allRows.length <= pageSize) return allRows;\n return allRows.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize);\n }, [allRows, pagination, pageIndex, pageSize, total]);\n\n // ============================== Selection ==============================\n const getRowKey = useMemo(\n () =>\n typeof rowKey === 'function'\n ? rowKey\n : (record: T) => (record as Record<PropertyKey, unknown>)?.[rowKey as PropertyKey] as Key,\n [rowKey],\n );\n const recordMap = useMemo(() => {\n const map = new Map<Key, T>();\n const dig = (records: readonly T[]) => {\n records.forEach((record, index) => {\n map.set(getRowKey(record, index), record);\n const children = isPlainObject(record) ? record[childrenColumnName] : undefined;\n if (Array.isArray(children)) dig(children as T[]);\n });\n };\n dig(dataSource);\n return map;\n }, [dataSource, childrenColumnName, getRowKey]);\n const getRecordByKey = useCallback((key: Key) => recordMap.get(key), [recordMap]);\n // Same as the expand column: give virtual rows the selection column's CSS width as a number.\n const mergedRowSelection = useMemo(() => {\n if (!virtual || !rowSelection || rowSelection.columnWidth !== undefined) return rowSelection;\n const withDropdown = Boolean(rowSelection.selections) && rowSelection.type !== 'radio';\n return {\n ...rowSelection,\n columnWidth:\n SELECTION_COLUMN_WIDTH +\n (withDropdown ? SELECTION_DROPDOWN_WIDTH : 0) +\n (variant === 'outlined' ? 16 : 0),\n };\n }, [virtual, rowSelection, variant]);\n const [transformSelectionColumns, selectedKeySet] = useSelection<T>(\n {\n childrenColumnName,\n data: allRows,\n expandType,\n getRecordByKey,\n getRowKey,\n locale: tableLocale,\n pageData: rows,\n },\n mergedRowSelection,\n );\n const mergedRowClassName = useCallback(\n (record: T, index: number, indent: number) =>\n cx(\n selectedKeySet.has(getRowKey(record, index)) && `${PREFIX_CLS}-row-selected`,\n typeof rowClassName === 'function' ? rowClassName(record, index, indent) : rowClassName,\n ),\n [selectedKeySet, getRowKey, rowClassName],\n );\n\n const clientPaginated = pagination !== false && paginationConfig?.total === undefined;\n const syncClampedPage = useEventCallback(() => state.clampPage(pageIndex));\n\n useEffect(() => {\n if (clientPaginated && pageIndex !== state.rawPageIndex) syncClampedPage();\n }, [clientPaginated, pageIndex, state.rawPageIndex, syncClampedPage]);\n\n // ============================== Loading ===============================\n const {\n spinning: isLoading = true,\n tip,\n variant: spinVariant = 'network',\n ...spinRest\n } = typeof loading === 'object' ? loading : { spinning: loading };\n const spinProps = { variant: spinVariant, ...spinRest };\n\n // =============================== Columns ==============================\n const triggerSort = useEventCallback(state.triggerSort);\n const triggerFilter = useEventCallback(state.triggerFilter);\n\n const rcColumns = useMemo(() => {\n const transform = (list: readonly TableColumn<T>[], parentPos?: string): RcColumnsType<any> =>\n list.flatMap((column, index) => {\n // The placeholders must reach rc-table by identity.\n if (column === EXPAND_COLUMN || column === SELECTION_COLUMN) return [column];\n // Positions (and so fallback ids) come from the full tree, before responsive filtering.\n const pos = getColumnPos(index, parentPos);\n if (!isColumnVisibleAt(column, screens)) return [];\n\n const id = getColumnId(column, pos);\n const {\n defaultFilteredValue: _defaultFilteredValue,\n defaultSortOrder: _defaultSortOrder,\n filterDropdown,\n filterDropdownOpen: _filterDropdownOpen,\n filterDropdownProps: _filterDropdownProps,\n filtered: _filtered,\n filteredValue: _filteredValue,\n filterIcon: _filterIcon,\n filterMode: _filterMode,\n filterMultiple: _filterMultiple,\n filterOnClose: _filterOnClose,\n filterResetToDefaultFilteredValue: _filterResetToDefaultFilteredValue,\n filters: columnFilters,\n filterSearch: _filterSearch,\n onFilter: _onFilter,\n onFilterDropdownOpenChange: _onFilterDropdownOpenChange,\n onHeaderCell,\n responsive: _responsive,\n showSorterTooltip: columnShowSorterTooltip,\n sortDirections: columnSortDirections,\n sortIcon,\n sortOrder: _sortOrder,\n sorter,\n title: columnTitle,\n ...rest\n } = column as TableColumnType<T>;\n const order = sorter ? sortStates.find(({ key }) => key === id)?.sortOrder : undefined;\n\n const titleNode = renderColumnTitle(columnTitle, titleProps);\n const titleText =\n typeof titleNode === 'string' || typeof titleNode === 'number'\n ? String(titleNode)\n : undefined;\n // A single-text wrapper lets rc-table derive the header `title` and truncate it.\n const titleContent = column.ellipsis ? (\n <span className={cx(styles.columnTitle, `${PREFIX_CLS}-column-title`)}>{titleNode}</span>\n ) : (\n titleNode\n );\n\n const filterNode =\n columnFilters || filterDropdown ? (\n <FilterDropdown<T>\n column={column as TableColumnType<T>}\n columnKey={id}\n filterState={filterStates.find(({ key }) => key === id)}\n getPopupContainer={getPopupContainer}\n label={titleText ?? id}\n locale={tableLocale}\n triggerFilter={triggerFilter}\n />\n ) : null;\n const hasControls = Boolean(sorter) || Boolean(filterNode);\n\n let sorterNode: ReactNode = null;\n if (sorter) {\n const sortDirections = columnSortDirections ?? tableSortDirections;\n const nextOrder = getNextSortOrder(sortDirections, order);\n const showTooltip = columnShowSorterTooltip ?? tableShowSorterTooltip;\n const { target, ...tooltipOptions } =\n typeof showTooltip === 'object' ? showTooltip : ({} as TableSorterTooltipProps);\n const tooltipProps = { title: sortTipOf(nextOrder, tableLocale), ...tooltipOptions };\n const withTooltip = (node: ReactNode) => <Tooltip {...tooltipProps}>{node}</Tooltip>;\n\n const iconOnlyTooltip = Boolean(showTooltip) && target === 'sorter-icon';\n const onSort = () =>\n triggerSort({\n column,\n key: id,\n multiplePriority: getMultiplePriority(column),\n sortOrder: nextOrder,\n });\n // ActionIcon owns the click (same as the filter trigger). The title stays a plain\n // span so we never nest a button inside a button; clicking the title still sorts.\n const sortAction = (\n <ActionIcon\n active={Boolean(order)}\n className={cx(styles.sortCaret, `${PREFIX_CLS}-column-sorter`)}\n data-order={order ?? undefined}\n size=\"small\"\n icon={\n sortIcon\n ? sortIcon({ sortOrder: order ?? null })\n : order === 'ascend'\n ? ArrowUpToLine\n : order === 'descend'\n ? ArrowDownFromLine\n : ArrowUpDown\n }\n {...(iconOnlyTooltip && showTooltip\n ? { title: tooltipProps.title, tooltipProps: tooltipOptions }\n : {})}\n onClick={(event) => {\n event.stopPropagation();\n onSort();\n }}\n />\n );\n const group = (\n <span\n className={cx(styles.sortButton, `${PREFIX_CLS}-column-sorters`)}\n // Without a tooltip, the native title still says the header sorts.\n title={showTooltip ? undefined : tableLocale.sortTitle}\n >\n <span className={styles.sortTitle} onClick={onSort}>\n {titleContent}\n </span>\n {sortAction}\n </span>\n );\n sorterNode = showTooltip && !iconOnlyTooltip ? withTooltip(group) : group;\n }\n\n return {\n ...rest,\n className: cx(\n rest.className,\n order ? [`${PREFIX_CLS}-column-sort`, styles.sortedColumn] : undefined,\n ),\n children: isColumnGroup(column) ? transform(column.children, pos) : undefined,\n key: id,\n onHeaderCell: () => {\n const cell = onHeaderCell?.(column);\n return {\n ...(sorter && { 'aria-sort': ariaSortOf(order) }),\n ...(column.ellipsis && hasControls && titleText && { title: titleText }),\n ...cell,\n className: cx(sorter && `${PREFIX_CLS}-column-has-sorters`, cell?.className),\n };\n },\n title: hasControls ? (\n <span className={styles.headerInner}>\n {sorterNode ?? titleContent}\n {filterNode}\n </span>\n ) : (\n titleContent\n ),\n };\n }) as RcColumnsType<any>;\n\n return transform(columns);\n }, [\n columns,\n screens,\n sortStates,\n filterStates,\n titleProps,\n getPopupContainer,\n triggerFilter,\n triggerSort,\n tableSortDirections,\n tableShowSorterTooltip,\n tableLocale,\n ]);\n\n // ============================== Rows ==============================\n const mergedOnRow = useMemo(\n () =>\n (record: T, index?: number): HTMLAttributes<HTMLElement> => {\n const rowProps = onRow?.(record, index ?? 0) ?? {};\n return {\n ...rowProps,\n className: cx(rowProps.onClick && styles.clickable, rowProps.className),\n };\n },\n [onRow],\n );\n\n // antd defaults to `fixed` layout once a column is pinned; `max-content` keeps sizing to content.\n const hasFixedColumn = useMemo(\n () =>\n Boolean(rowSelection?.fixed) ||\n flattenColumns(columns).some(({ column }) => column.fixed && !column.hidden),\n [columns, rowSelection?.fixed],\n );\n const mergedTableLayout =\n tableLayout ?? (hasFixedColumn && scroll?.x !== 'max-content' ? 'fixed' : undefined);\n\n // ============================= Pagination =============================\n let topPagination: ReactNode = null;\n let bottomPagination: ReactNode = null;\n if (paginationConfig && total > 0) {\n const {\n current: _current,\n defaultCurrent: _defaultCurrent,\n defaultPageSize: _defaultPageSize,\n onChange: _onChange,\n onShowSizeChange: _onShowSizeChange,\n pageSize: _pageSize,\n placement,\n position,\n total: _total,\n className: paginationClassName,\n classNames: paginationClassNames,\n size: paginationSize,\n styles: paginationStyles,\n ...paginationRest\n } = paginationConfig;\n const pageCount = Math.ceil(total / pageSize);\n const renderPagination = (align: PaginationAlign, side: 'top' | 'bottom') => (\n <div\n className={cx(\n styles.pagination,\n side === 'top' && styles.paginationTop,\n paginationAlignClassName[align],\n `${PREFIX_CLS}-pagination-wrapper`,\n )}\n >\n <Pagination\n {...paginationRest}\n current={pageIndex + 1}\n pageSize={pageSize}\n // Like antd: `small` / `medium` tables get a small pager unless one is set.\n size={paginationSize ?? (sizeProp && sizeProp !== 'large' ? 'small' : undefined)}\n total={total}\n className={cx(\n `${PREFIX_CLS}-pagination`,\n `${PREFIX_CLS}-pagination-${align}`,\n paginationClassName,\n )}\n classNames={{\n item: cx(mergedClassNames.pagination.item, paginationClassNames?.item),\n root: cx(mergedClassNames.pagination.root, paginationClassNames?.root),\n }}\n styles={{\n item: { ...paginationStyles?.item, ...mergedStyles.pagination.item },\n root: { ...paginationStyles?.root, ...mergedStyles.pagination.root },\n }}\n onChange={(next, nextPageSize) =>\n state.onPaginationChange({ pageIndex: next - 1, pageSize: nextPageSize })\n }\n />\n </div>\n );\n\n if (!(paginationRest.hideOnSinglePage && pageCount <= 1)) {\n const mergedPlacement = placement ?? position;\n if (Array.isArray(mergedPlacement)) {\n const find = (side: string) =>\n (mergedPlacement as string[]).find((item) => item.includes(side));\n const top = find('top');\n const bottom = find('bottom');\n const none = mergedPlacement.every((item) => item === 'none');\n if (top) topPagination = renderPagination(normalizePlacement(top), 'top');\n if (bottom) bottomPagination = renderPagination(normalizePlacement(bottom), 'bottom');\n if (!top && !bottom && !none) bottomPagination = renderPagination('end', 'bottom');\n } else {\n bottomPagination = renderPagination('end', 'bottom');\n }\n }\n }\n\n // Like antd: `locale.emptyText` (here also the `emptyText` alias) replaces the default empty state.\n const customEmpty = locale?.emptyText ?? emptyText;\n const emptyNode = isLoading ? (\n <TableLoadingSkeleton\n columns={columns}\n expandColumn={Boolean(expandType)}\n rows={pagination === false ? 5 : Math.min(5, pageSize)}\n screens={screens}\n selectionColumn={hasRowSelection}\n size={size}\n />\n ) : customEmpty === undefined ? (\n <Empty description={t('table.emptyText')} icon={Inbox} imageSize={40} />\n ) : typeof customEmpty === 'function' ? (\n customEmpty()\n ) : (\n customEmpty\n );\n\n // Like antd: `virtual` swaps in rc-table's VirtualTable (rc-virtual-list body).\n const TableComponent = (virtual ? RcVirtualTable : RcTable) as typeof RcTable;\n\n return (\n <div\n ref={rootRef}\n style={{ ...mergedStyles.root, ...style }}\n className={cx(\n styles.root,\n `${PREFIX_CLS}-wrapper`,\n rootClassName,\n className,\n mergedClassNames.root,\n )}\n >\n {topPagination}\n <div className={styles.spinContainer} data-table-wrapper=\"\">\n <TableComponent<any>\n {...(virtual && { listItemHeight: VIRTUAL_ROW_HEIGHT[size] })}\n columns={rcColumns}\n components={components as any}\n data={rows as any[]}\n emptyText={emptyNode}\n expandable={mergedExpandable}\n footer={footer as any}\n internalHooks={INTERNAL_HOOKS}\n prefixCls={PREFIX_CLS}\n ref={rcRef}\n rowClassName={mergedRowClassName as any}\n rowHoverable={rowHoverable}\n rowKey={rowKey as string | ((record: T) => Key)}\n scroll={scroll}\n showHeader={showHeader}\n sticky={sticky}\n summary={summary as any}\n tableLayout={mergedTableLayout}\n title={title as any}\n transformColumns={transformSelectionColumns}\n className={cx(\n styles.table,\n sizeClassName[size],\n `${PREFIX_CLS}-${size === 'middle' ? 'medium' : size}`,\n variant === 'borderless' && styles.borderless,\n variant === 'outlined' && styles.outlined,\n grouped && styles.grouped,\n variant === 'filled' && styles.filled,\n `${PREFIX_CLS}-${variant}`,\n rowHoverable && styles.hoverable,\n )}\n classNames={{\n body: mergedClassNames.body,\n content: mergedClassNames.content,\n footer: mergedClassNames.footer,\n header: mergedClassNames.header,\n section: mergedClassNames.section,\n title: mergedClassNames.title,\n }}\n measureRowRender={(measureRow) =>\n wrapMeasureRow(measureRowRender ? measureRowRender(measureRow) : measureRow)\n }\n styles={{\n body: mergedStyles.body,\n content: mergedStyles.content,\n footer: mergedStyles.footer,\n header: mergedStyles.header,\n section: mergedStyles.section,\n title: mergedStyles.title,\n }}\n onHeaderRow={onHeaderRow as any}\n onRow={mergedOnRow as any}\n onScroll={onScroll}\n />\n {isLoading && (\n <div className={styles.loading} data-table-loading=\"\">\n <Spin {...spinProps} />\n {tip}\n </div>\n )}\n </div>\n {bottomPagination}\n </div>\n );\n};\n\ntype TableComponent = (<T>(props: TableProps<T>) => ReactNode) & {\n Column: typeof Column;\n ColumnGroup: typeof ColumnGroup;\n displayName?: string;\n /** Placeholder in `columns` marking where the expand column goes. */\n EXPAND_COLUMN: TableColumn<any>;\n /** `rowSelection.selections` preset: select every row of every page. */\n SELECTION_ALL: typeof SELECTION_ALL;\n /** Placeholder in `columns` marking where the selection column goes. */\n SELECTION_COLUMN: TableColumn<any>;\n /** Rows rendered by `summary`: `Table.Summary` (`fixed`), `.Row` and `.Cell` (`index`, `colSpan`). */\n Summary: typeof Summary;\n /** `rowSelection.selections` preset: invert the current page. */\n SELECTION_INVERT: typeof SELECTION_INVERT;\n /** `rowSelection.selections` preset: clear the selection. */\n SELECTION_NONE: typeof SELECTION_NONE;\n};\n\nconst Table = memo(TableInner) as unknown as TableComponent;\n\nTable.displayName = 'Table';\nTable.Column = Column;\nTable.ColumnGroup = ColumnGroup;\nTable.EXPAND_COLUMN = EXPAND_COLUMN as TableColumn<any>;\nTable.SELECTION_COLUMN = SELECTION_COLUMN;\nTable.SELECTION_ALL = SELECTION_ALL;\nTable.SELECTION_INVERT = SELECTION_INVERT;\nTable.SELECTION_NONE = SELECTION_NONE;\nTable.Summary = Summary;\n\nexport { TableInner };\n\nexport default Table;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.mjs","names":["tableMessages","RcVirtualTable"],"sources":["../../../src/base-ui/Table/Table.tsx"],"sourcesContent":["'use client';\n\nimport RcTable, {\n type ColumnsType as RcColumnsType,\n convertChildrenToColumns,\n EXPAND_COLUMN,\n type ExpandableConfig as RcExpandableConfig,\n INTERNAL_HOOKS,\n type Reference as RcReference,\n Summary,\n VirtualTable as RcVirtualTable,\n} from '@rc-component/table';\nimport { cx } from 'antd-style';\nimport { ArrowDownFromLine, ArrowUpDown, ArrowUpToLine, Inbox } from 'lucide-react';\nimport {\n type HTMLAttributes,\n type Key,\n memo,\n type ReactNode,\n type Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport Pagination, { type PaginationAlign } from '@/base-ui/Pagination';\nimport Spin from '@/base-ui/Spin';\nimport Tooltip from '@/base-ui/Tooltip';\nimport Empty from '@/Empty';\nimport { useEventCallback } from '@/hooks/useEventCallback';\nimport tableMessages from '@/i18n/resources/en/table';\nimport { useTranslation } from '@/i18n/useTranslation';\n\nimport Column from './Column';\nimport ColumnGroup from './ColumnGroup';\nimport {\n assertColumnKeys,\n fillColumns,\n flattenColumns,\n getColumnId,\n getColumnPos,\n isColumnGroup,\n isColumnVisibleAt,\n renderColumnTitle,\n} from './columnUtils';\nimport renderExpandIcon from './ExpandIcon';\nimport FilterDropdown, { TableMeasureRowContext } from './FilterDropdown';\nimport FixedFrost from './FixedFrost';\nimport TableLoadingSkeleton from './LoadingSkeleton';\nimport {\n isPlainObject,\n SELECTION_ALL,\n SELECTION_COLUMN,\n SELECTION_INVERT,\n SELECTION_NONE,\n} from './selectionUtils';\nimport { normalizeClassNames, normalizeStyles, resolveSemantic } from './semantic';\nimport {\n EXPAND_COLUMN_WIDTH,\n PREFIX_CLS,\n SELECTION_COLUMN_WIDTH,\n SELECTION_DROPDOWN_WIDTH,\n styles,\n} from './style';\nimport type {\n SortOrder,\n TableColumn,\n TableColumnType,\n TableLocale,\n TableProps,\n TableRef,\n TableScrollToConfig,\n TableSize,\n TableSorterTooltipProps,\n} from './type';\nimport { useBreakpoint } from './useBreakpoint';\nimport { useSelection } from './useSelection';\nimport { DEFAULT_SORT_DIRECTIONS, getMultiplePriority, getNextSortOrder } from './useSorter';\nimport { useTableState } from './useTableState';\n\nconst EMPTY_DATA: any[] = [];\nconst DEFAULT_INDENT_SIZE = 15;\nconst DEFAULT_SORTER_TOOLTIP: TableSorterTooltipProps = { target: 'full-header' };\n\n/**\n * Estimated `virtual` row height per size, like antd: padding × 2 + 14px × 22/14 line + 1px border.\n * rc-virtual-list still measures the real rows; this only seeds the scroll range.\n */\nconst VIRTUAL_ROW_HEIGHT: Record<TableSize, number> = {\n large: 16 * 2 + 22 + 1,\n medium: 12 * 2 + 22 + 1,\n middle: 12 * 2 + 22 + 1,\n small: 8 * 2 + 22 + 1,\n};\n\nconst sizeClassName: Record<TableSize, string> = {\n large: styles.sizeLarge,\n medium: styles.sizeMedium,\n middle: styles.sizeMedium,\n small: styles.sizeSmall,\n};\n\nconst sortTipOf = (next: SortOrder | undefined, locale: TableLocale) =>\n next === 'descend'\n ? locale.triggerDesc\n : next === 'ascend'\n ? locale.triggerAsc\n : locale.cancelSort;\n\nconst ariaSortOf = (order: SortOrder | undefined) =>\n order === 'ascend' ? 'ascending' : order === 'descend' ? 'descending' : 'none';\n\nconst paginationAlignClassName: Record<PaginationAlign, string> = {\n center: styles.paginationCenter,\n end: styles.paginationEnd,\n start: styles.paginationStart,\n};\n\n/** antd `normalizePlacement`: `topLeft` / `bottomStart` → `start`, `*Center` → `center`, else `end`. */\nconst normalizePlacement = (placement: string): PaginationAlign => {\n const lower = placement.toLowerCase();\n if (lower.includes('center')) return 'center';\n return lower.includes('left') || lower.includes('start') ? 'start' : 'end';\n};\n\n// Only a static filter trigger renders in rc-table's hidden measure row, like antd.\nconst wrapMeasureRow = (measureRow: ReactNode) => (\n <TableMeasureRowContext value={true}>{measureRow}</TableMeasureRowContext>\n);\n\n/** antd's ref shape: the root element itself, extended with `nativeElement` and `scrollTo`. */\nconst toTableRef = (\n element: HTMLDivElement,\n scrollTo: (config: TableScrollToConfig) => void,\n): TableRef => {\n const extra = { nativeElement: element, scrollTo };\n return new Proxy(element, {\n get(target, prop) {\n if (prop in extra) return extra[prop as keyof typeof extra];\n const value = Reflect.get(target, prop, target);\n return typeof value === 'function' ? value.bind(target) : value;\n },\n }) as TableRef;\n};\n\nlet warnedBordered = false;\n\n/** `bordered` (pre-5.61) → `variant`: `true` is `outlined`; an explicit `variant` wins. */\nexport const resolveTableVariant = (\n variant: TableProps<unknown>['variant'],\n bordered: boolean | undefined,\n): NonNullable<TableProps<unknown>['variant']> => {\n if (bordered !== undefined && process.env.NODE_ENV !== 'production' && !warnedBordered) {\n warnedBordered = true;\n console.warn('[Table] `bordered` is deprecated. Please use `variant=\"outlined\"` instead.');\n }\n return variant ?? (bordered ? 'outlined' : 'borderless');\n};\n\nconst TableInner = <T,>(props: TableProps<T>) => {\n const {\n bordered,\n variant: variantProp,\n children,\n childrenColumnName: legacyChildrenColumnName,\n className,\n classNames,\n column: columnDefaults,\n columns: columnsProp,\n components,\n dataSource = EMPTY_DATA as T[],\n emptyText,\n expandable,\n expandedRowRender: legacyExpandedRowRender,\n expandIcon: legacyExpandIcon,\n expandIconColumnIndex: legacyExpandIconColumnIndex,\n footer,\n getPopupContainer,\n indentSize: legacyIndentSize,\n loading = false,\n locale,\n measureRowRender,\n onChange,\n onHeaderRow,\n onRow,\n onScroll,\n pagination,\n ref,\n rootClassName,\n rowClassName,\n rowHoverable = true,\n rowKey = 'key',\n rowSelection,\n scroll,\n showHeader,\n showSorterTooltip: tableShowSorterTooltip = DEFAULT_SORTER_TOOLTIP,\n size: sizeProp,\n sortDirections: tableSortDirections = DEFAULT_SORT_DIRECTIONS,\n sticky,\n style,\n styles: customStyles,\n summary,\n tableLayout,\n title,\n virtual,\n } = props;\n const variant = resolveTableVariant(variantProp, bordered);\n const size: TableSize = sizeProp ?? 'middle';\n\n // =============================== Locale ===============================\n const { t } = useTranslation(tableMessages);\n const tableLocale = useMemo(\n (): TableLocale => ({\n cancelSort: t('table.cancelSort'),\n collapse: t('table.collapse'),\n expand: t('table.expand'),\n filterCheckAll: t('table.filterCheckAll'),\n filterConfirm: t('table.filterConfirm'),\n filterEmptyText: t('table.filterEmptyText'),\n filterReset: t('table.filterReset'),\n filterSearchPlaceholder: t('table.filterSearchPlaceholder'),\n filterTitle: t('table.filterTitle'),\n selectAll: t('table.selectAll'),\n selectInvert: t('table.selectInvert'),\n selectNone: t('table.selectNone'),\n selectionAll: t('table.selectionAll'),\n sortTitle: t('table.sortTitle'),\n triggerAsc: t('table.triggerAsc'),\n triggerDesc: t('table.triggerDesc'),\n ...(locale?.filterCheckall !== undefined && { filterCheckAll: locale.filterCheckall }),\n ...locale,\n }),\n [t, locale],\n );\n\n // ============================ Semantic DOM ============================\n const semanticInfo = { props };\n const mergedClassNames = normalizeClassNames(resolveSemantic(classNames, semanticInfo));\n const mergedStyles = normalizeStyles(resolveSemantic(customStyles, semanticInfo));\n\n const rawColumns = useMemo(\n () => columnsProp ?? (convertChildrenToColumns(children) as TableColumn<T>[]),\n [columnsProp, children],\n );\n const columns = useMemo(\n () => fillColumns(rawColumns, columnDefaults),\n [rawColumns, columnDefaults],\n );\n\n assertColumnKeys(columns);\n /** Multi-level headers get column dividers; plain tables never do. */\n const grouped = useMemo(\n () =>\n columns.some(\n (column) => Array.isArray((column as any).children) && (column as any).children.length > 0,\n ),\n [columns],\n );\n\n const needResponsive = useMemo(\n () => flattenColumns(columns).some(({ column }) => column.responsive),\n [columns],\n );\n const screens = useBreakpoint(needResponsive);\n\n // ============================= Expandable =============================\n const hasRowSelection = Boolean(rowSelection);\n const childrenColumnName =\n expandable?.childrenColumnName ?? legacyChildrenColumnName ?? 'children';\n const expandType = useMemo(() => {\n if (dataSource.some((record) => isPlainObject(record) && record[childrenColumnName])) {\n return 'nest';\n }\n if (legacyExpandedRowRender || expandable?.expandedRowRender) return 'row';\n return null;\n }, [childrenColumnName, dataSource, legacyExpandedRowRender, expandable?.expandedRowRender]);\n\n // Like antd: legacy top-level props sit under `expandable`, which always wins.\n const mergedExpandable = useMemo((): RcExpandableConfig<any> => {\n const config: RcExpandableConfig<any> = {\n childrenColumnName: legacyChildrenColumnName,\n expandedRowRender: legacyExpandedRowRender,\n expandIconColumnIndex: legacyExpandIconColumnIndex,\n ...(expandable as RcExpandableConfig<any>),\n expandIcon: (expandable?.expandIcon ??\n legacyExpandIcon ??\n ((iconProps: any) => renderExpandIcon(iconProps, tableLocale))) as any,\n };\n // Like antd: tree toggles sit after the selection column; legacy indexes skip it.\n if (expandType === 'nest' && config.expandIconColumnIndex === undefined) {\n config.expandIconColumnIndex = hasRowSelection ? 1 : 0;\n } else if ((config.expandIconColumnIndex ?? 0) > 0 && hasRowSelection) {\n config.expandIconColumnIndex = config.expandIconColumnIndex! - 1;\n }\n // Virtual rows are flex boxes sized from numeric widths; the CSS `col` width never reaches them.\n if (virtual && config.columnWidth === undefined) config.columnWidth = EXPAND_COLUMN_WIDTH;\n if (typeof config.indentSize !== 'number') {\n config.indentSize =\n typeof legacyIndentSize === 'number' ? legacyIndentSize : DEFAULT_INDENT_SIZE;\n }\n return config;\n }, [\n expandable,\n legacyChildrenColumnName,\n legacyExpandedRowRender,\n legacyExpandIcon,\n legacyExpandIconColumnIndex,\n legacyIndentSize,\n expandType,\n hasRowSelection,\n virtual,\n tableLocale,\n ]);\n\n // ================================ Refs ================================\n const rootRef = useRef<HTMLDivElement>(null);\n const rcRef = useRef<RcReference>(null);\n useImperativeHandle(\n ref as Ref<TableRef>,\n () => toTableRef(rootRef.current!, (config) => rcRef.current?.scrollTo(config)),\n [],\n );\n\n // ======================== Sort / Filter / Page ========================\n const state = useTableState({\n childrenColumnName,\n columns,\n dataSource,\n onChange,\n // Like antd: on by default once `scroll` is set.\n onTableChange: () => {\n if (scroll && scroll.scrollToFirstRowOnChange !== false) rcRef.current?.scrollTo({ top: 0 });\n },\n pagination,\n });\n const {\n config: paginationConfig,\n data: allRows,\n filterStates,\n page,\n sortStates,\n titleProps,\n } = state;\n const { pageIndex, pageSize } = page;\n const { total } = state;\n\n // Like antd: async data (fewer rows than `total`, at most one page) is shown as given.\n const rows = useMemo(() => {\n if (pagination === false) return allRows;\n if (allRows.length < total && allRows.length <= pageSize) return allRows;\n return allRows.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize);\n }, [allRows, pagination, pageIndex, pageSize, total]);\n\n // ============================== Selection ==============================\n const getRowKey = useMemo(\n () =>\n typeof rowKey === 'function'\n ? rowKey\n : (record: T) => (record as Record<PropertyKey, unknown>)?.[rowKey as PropertyKey] as Key,\n [rowKey],\n );\n const recordMap = useMemo(() => {\n const map = new Map<Key, T>();\n const dig = (records: readonly T[]) => {\n records.forEach((record, index) => {\n map.set(getRowKey(record, index), record);\n const children = isPlainObject(record) ? record[childrenColumnName] : undefined;\n if (Array.isArray(children)) dig(children as T[]);\n });\n };\n dig(dataSource);\n return map;\n }, [dataSource, childrenColumnName, getRowKey]);\n const getRecordByKey = useCallback((key: Key) => recordMap.get(key), [recordMap]);\n // Same as the expand column: give virtual rows the selection column's CSS width as a number.\n const mergedRowSelection = useMemo(() => {\n if (!virtual || !rowSelection || rowSelection.columnWidth !== undefined) return rowSelection;\n const withDropdown = Boolean(rowSelection.selections) && rowSelection.type !== 'radio';\n return {\n ...rowSelection,\n columnWidth:\n SELECTION_COLUMN_WIDTH +\n (withDropdown ? SELECTION_DROPDOWN_WIDTH : 0) +\n (variant === 'outlined' ? 16 : 0),\n };\n }, [virtual, rowSelection, variant]);\n const [transformSelectionColumns, selectedKeySet] = useSelection<T>(\n {\n childrenColumnName,\n data: allRows,\n expandType,\n getRecordByKey,\n getRowKey,\n locale: tableLocale,\n pageData: rows,\n },\n mergedRowSelection,\n );\n const mergedRowClassName = useCallback(\n (record: T, index: number, indent: number) =>\n cx(\n selectedKeySet.has(getRowKey(record, index)) && `${PREFIX_CLS}-row-selected`,\n typeof rowClassName === 'function' ? rowClassName(record, index, indent) : rowClassName,\n ),\n [selectedKeySet, getRowKey, rowClassName],\n );\n\n const clientPaginated = pagination !== false && paginationConfig?.total === undefined;\n const syncClampedPage = useEventCallback(() => state.clampPage(pageIndex));\n\n useEffect(() => {\n if (clientPaginated && pageIndex !== state.rawPageIndex) syncClampedPage();\n }, [clientPaginated, pageIndex, state.rawPageIndex, syncClampedPage]);\n\n // ============================== Loading ===============================\n const {\n spinning: isLoading = true,\n tip,\n variant: spinVariant = 'network',\n ...spinRest\n } = typeof loading === 'object' ? loading : { spinning: loading };\n const spinProps = { variant: spinVariant, ...spinRest };\n\n // =============================== Columns ==============================\n const triggerSort = useEventCallback(state.triggerSort);\n const triggerFilter = useEventCallback(state.triggerFilter);\n\n const rcColumns = useMemo(() => {\n const transform = (list: readonly TableColumn<T>[], parentPos?: string): RcColumnsType<any> =>\n list.flatMap((column, index) => {\n // The placeholders must reach rc-table by identity.\n if (column === EXPAND_COLUMN || column === SELECTION_COLUMN) return [column];\n // Positions (and so fallback ids) come from the full tree, before responsive filtering.\n const pos = getColumnPos(index, parentPos);\n if (!isColumnVisibleAt(column, screens)) return [];\n\n const id = getColumnId(column, pos);\n const {\n defaultFilteredValue: _defaultFilteredValue,\n defaultSortOrder: _defaultSortOrder,\n filterDropdown,\n filterDropdownOpen: _filterDropdownOpen,\n filterDropdownProps: _filterDropdownProps,\n filtered: _filtered,\n filteredValue: _filteredValue,\n filterIcon: _filterIcon,\n filterMode: _filterMode,\n filterMultiple: _filterMultiple,\n filterOnClose: _filterOnClose,\n filterResetToDefaultFilteredValue: _filterResetToDefaultFilteredValue,\n filters: columnFilters,\n filterSearch: _filterSearch,\n onFilter: _onFilter,\n onFilterDropdownOpenChange: _onFilterDropdownOpenChange,\n onHeaderCell,\n responsive: _responsive,\n showSorterTooltip: columnShowSorterTooltip,\n sortDirections: columnSortDirections,\n sortIcon,\n sortOrder: _sortOrder,\n sorter,\n title: columnTitle,\n ...rest\n } = column as TableColumnType<T>;\n const order = sorter ? sortStates.find(({ key }) => key === id)?.sortOrder : undefined;\n\n const titleNode = renderColumnTitle(columnTitle, titleProps);\n const titleText =\n typeof titleNode === 'string' || typeof titleNode === 'number'\n ? String(titleNode)\n : undefined;\n // A single-text wrapper lets rc-table derive the header `title` and truncate it.\n const titleContent = column.ellipsis ? (\n <span className={cx(styles.columnTitle, `${PREFIX_CLS}-column-title`)}>{titleNode}</span>\n ) : (\n titleNode\n );\n\n const filterNode =\n columnFilters || filterDropdown ? (\n <FilterDropdown<T>\n column={column as TableColumnType<T>}\n columnKey={id}\n filterState={filterStates.find(({ key }) => key === id)}\n getPopupContainer={getPopupContainer}\n label={titleText ?? id}\n locale={tableLocale}\n triggerFilter={triggerFilter}\n />\n ) : null;\n const hasControls = Boolean(sorter) || Boolean(filterNode);\n\n let sorterNode: ReactNode = null;\n if (sorter) {\n const sortDirections = columnSortDirections ?? tableSortDirections;\n const nextOrder = getNextSortOrder(sortDirections, order);\n const showTooltip = columnShowSorterTooltip ?? tableShowSorterTooltip;\n const { target, ...tooltipOptions } =\n typeof showTooltip === 'object' ? showTooltip : ({} as TableSorterTooltipProps);\n const tooltipProps = { title: sortTipOf(nextOrder, tableLocale), ...tooltipOptions };\n const withTooltip = (node: ReactNode) => <Tooltip {...tooltipProps}>{node}</Tooltip>;\n\n const iconOnlyTooltip = Boolean(showTooltip) && target === 'sorter-icon';\n const onSort = () =>\n triggerSort({\n column,\n key: id,\n multiplePriority: getMultiplePriority(column),\n sortOrder: nextOrder,\n });\n // ActionIcon owns the click (same as the filter trigger). The title stays a plain\n // span so we never nest a button inside a button; clicking the title still sorts.\n const sortAction = (\n <ActionIcon\n active={Boolean(order)}\n className={cx(styles.sortCaret, `${PREFIX_CLS}-column-sorter`)}\n data-order={order ?? undefined}\n size=\"small\"\n icon={\n sortIcon\n ? sortIcon({ sortOrder: order ?? null })\n : order === 'ascend'\n ? ArrowUpToLine\n : order === 'descend'\n ? ArrowDownFromLine\n : ArrowUpDown\n }\n {...(iconOnlyTooltip && showTooltip\n ? { title: tooltipProps.title, tooltipProps: tooltipOptions }\n : {})}\n onClick={(event) => {\n event.stopPropagation();\n onSort();\n }}\n />\n );\n const group = (\n <span\n className={cx(styles.sortButton, `${PREFIX_CLS}-column-sorters`)}\n // Without a tooltip, the native title still says the header sorts.\n title={showTooltip ? undefined : tableLocale.sortTitle}\n >\n <span className={styles.sortTitle} onClick={onSort}>\n {titleContent}\n </span>\n {sortAction}\n </span>\n );\n sorterNode = showTooltip && !iconOnlyTooltip ? withTooltip(group) : group;\n }\n\n return {\n ...rest,\n className: cx(\n rest.className,\n order ? [`${PREFIX_CLS}-column-sort`, styles.sortedColumn] : undefined,\n ),\n children: isColumnGroup(column) ? transform(column.children, pos) : undefined,\n key: id,\n onHeaderCell: () => {\n const cell = onHeaderCell?.(column);\n return {\n ...(sorter && { 'aria-sort': ariaSortOf(order) }),\n ...(column.ellipsis && hasControls && titleText && { title: titleText }),\n ...cell,\n className: cx(sorter && `${PREFIX_CLS}-column-has-sorters`, cell?.className),\n };\n },\n title: hasControls ? (\n <span className={styles.headerInner}>\n {sorterNode ?? titleContent}\n {filterNode}\n </span>\n ) : (\n titleContent\n ),\n };\n }) as RcColumnsType<any>;\n\n return transform(columns);\n }, [\n columns,\n screens,\n sortStates,\n filterStates,\n titleProps,\n getPopupContainer,\n triggerFilter,\n triggerSort,\n tableSortDirections,\n tableShowSorterTooltip,\n tableLocale,\n ]);\n\n // ============================== Rows ==============================\n const mergedOnRow = useMemo(\n () =>\n (record: T, index?: number): HTMLAttributes<HTMLElement> => {\n const rowProps = onRow?.(record, index ?? 0) ?? {};\n return {\n ...rowProps,\n className: cx(rowProps.onClick && styles.clickable, rowProps.className),\n };\n },\n [onRow],\n );\n\n // antd defaults to `fixed` layout once a column is pinned; `max-content` keeps sizing to content.\n const hasFixedColumn = useMemo(\n () =>\n Boolean(rowSelection?.fixed) ||\n flattenColumns(columns).some(({ column }) => column.fixed && !column.hidden),\n [columns, rowSelection?.fixed],\n );\n const mergedTableLayout =\n tableLayout ?? (hasFixedColumn && scroll?.x !== 'max-content' ? 'fixed' : undefined);\n\n // ============================= Pagination =============================\n let topPagination: ReactNode = null;\n let bottomPagination: ReactNode = null;\n if (paginationConfig && total > 0) {\n const {\n current: _current,\n defaultCurrent: _defaultCurrent,\n defaultPageSize: _defaultPageSize,\n onChange: _onChange,\n onShowSizeChange: _onShowSizeChange,\n pageSize: _pageSize,\n placement,\n position,\n total: _total,\n className: paginationClassName,\n classNames: paginationClassNames,\n size: paginationSize,\n styles: paginationStyles,\n ...paginationRest\n } = paginationConfig;\n const pageCount = Math.ceil(total / pageSize);\n const renderPagination = (align: PaginationAlign, side: 'top' | 'bottom') => (\n <div\n className={cx(\n styles.pagination,\n side === 'top' && styles.paginationTop,\n paginationAlignClassName[align],\n `${PREFIX_CLS}-pagination-wrapper`,\n )}\n >\n <Pagination\n {...paginationRest}\n current={pageIndex + 1}\n pageSize={pageSize}\n // Like antd: `small` / `medium` tables get a small pager unless one is set.\n size={paginationSize ?? (sizeProp && sizeProp !== 'large' ? 'small' : undefined)}\n total={total}\n className={cx(\n `${PREFIX_CLS}-pagination`,\n `${PREFIX_CLS}-pagination-${align}`,\n paginationClassName,\n )}\n classNames={{\n item: cx(mergedClassNames.pagination.item, paginationClassNames?.item),\n root: cx(mergedClassNames.pagination.root, paginationClassNames?.root),\n }}\n styles={{\n item: { ...paginationStyles?.item, ...mergedStyles.pagination.item },\n root: { ...paginationStyles?.root, ...mergedStyles.pagination.root },\n }}\n onChange={(next, nextPageSize) =>\n state.onPaginationChange({ pageIndex: next - 1, pageSize: nextPageSize })\n }\n />\n </div>\n );\n\n if (!(paginationRest.hideOnSinglePage && pageCount <= 1)) {\n const mergedPlacement = placement ?? position;\n if (Array.isArray(mergedPlacement)) {\n const find = (side: string) =>\n (mergedPlacement as string[]).find((item) => item.includes(side));\n const top = find('top');\n const bottom = find('bottom');\n const none = mergedPlacement.every((item) => item === 'none');\n if (top) topPagination = renderPagination(normalizePlacement(top), 'top');\n if (bottom) bottomPagination = renderPagination(normalizePlacement(bottom), 'bottom');\n if (!top && !bottom && !none) bottomPagination = renderPagination('end', 'bottom');\n } else {\n bottomPagination = renderPagination('end', 'bottom');\n }\n }\n }\n\n // Like antd: `locale.emptyText` (here also the `emptyText` alias) replaces the default empty state.\n const customEmpty = locale?.emptyText ?? emptyText;\n const emptyNode = isLoading ? (\n <TableLoadingSkeleton\n columns={columns}\n expandColumn={Boolean(expandType)}\n rows={pagination === false ? 5 : Math.min(5, pageSize)}\n screens={screens}\n selectionColumn={hasRowSelection}\n size={size}\n />\n ) : customEmpty === undefined ? (\n <Empty description={t('table.emptyText')} icon={Inbox} imageSize={40} />\n ) : typeof customEmpty === 'function' ? (\n customEmpty()\n ) : (\n customEmpty\n );\n\n // Like antd: `virtual` swaps in rc-table's VirtualTable (rc-virtual-list body).\n const TableComponent = (virtual ? RcVirtualTable : RcTable) as typeof RcTable;\n\n return (\n <div\n ref={rootRef}\n style={{ ...mergedStyles.root, ...style }}\n className={cx(\n styles.root,\n `${PREFIX_CLS}-wrapper`,\n rootClassName,\n className,\n mergedClassNames.root,\n )}\n >\n {topPagination}\n <div className={styles.spinContainer} data-table-wrapper=\"\">\n <TableComponent<any>\n {...(virtual && { listItemHeight: VIRTUAL_ROW_HEIGHT[size] })}\n columns={rcColumns}\n components={components as any}\n data={rows as any[]}\n emptyText={emptyNode}\n expandable={mergedExpandable}\n footer={footer as any}\n internalHooks={INTERNAL_HOOKS}\n prefixCls={PREFIX_CLS}\n ref={rcRef}\n rowClassName={mergedRowClassName as any}\n rowHoverable={rowHoverable}\n rowKey={rowKey as string | ((record: T) => Key)}\n scroll={scroll}\n showHeader={showHeader}\n sticky={sticky}\n summary={summary as any}\n tableLayout={mergedTableLayout}\n title={title as any}\n transformColumns={transformSelectionColumns}\n className={cx(\n styles.table,\n sizeClassName[size],\n `${PREFIX_CLS}-${size === 'middle' ? 'medium' : size}`,\n variant === 'borderless' && styles.borderless,\n variant === 'outlined' && styles.outlined,\n grouped && styles.grouped,\n variant === 'filled' && styles.filled,\n `${PREFIX_CLS}-${variant}`,\n rowHoverable && styles.hoverable,\n )}\n classNames={{\n body: mergedClassNames.body,\n content: mergedClassNames.content,\n footer: mergedClassNames.footer,\n header: mergedClassNames.header,\n section: mergedClassNames.section,\n title: mergedClassNames.title,\n }}\n measureRowRender={(measureRow) =>\n wrapMeasureRow(measureRowRender ? measureRowRender(measureRow) : measureRow)\n }\n styles={{\n body: mergedStyles.body,\n content: mergedStyles.content,\n footer: mergedStyles.footer,\n header: mergedStyles.header,\n section: mergedStyles.section,\n title: mergedStyles.title,\n }}\n onHeaderRow={onHeaderRow as any}\n onRow={mergedOnRow as any}\n onScroll={onScroll}\n />\n <FixedFrost rootRef={rootRef} />\n {isLoading && (\n <div className={styles.loading} data-table-loading=\"\">\n <Spin {...spinProps} />\n {tip}\n </div>\n )}\n </div>\n {bottomPagination}\n </div>\n );\n};\n\ntype TableComponent = (<T>(props: TableProps<T>) => ReactNode) & {\n Column: typeof Column;\n ColumnGroup: typeof ColumnGroup;\n displayName?: string;\n /** Placeholder in `columns` marking where the expand column goes. */\n EXPAND_COLUMN: TableColumn<any>;\n /** `rowSelection.selections` preset: select every row of every page. */\n SELECTION_ALL: typeof SELECTION_ALL;\n /** Placeholder in `columns` marking where the selection column goes. */\n SELECTION_COLUMN: TableColumn<any>;\n /** Rows rendered by `summary`: `Table.Summary` (`fixed`), `.Row` and `.Cell` (`index`, `colSpan`). */\n Summary: typeof Summary;\n /** `rowSelection.selections` preset: invert the current page. */\n SELECTION_INVERT: typeof SELECTION_INVERT;\n /** `rowSelection.selections` preset: clear the selection. */\n SELECTION_NONE: typeof SELECTION_NONE;\n};\n\nconst Table = memo(TableInner) as unknown as TableComponent;\n\nTable.displayName = 'Table';\nTable.Column = Column;\nTable.ColumnGroup = ColumnGroup;\nTable.EXPAND_COLUMN = EXPAND_COLUMN as TableColumn<any>;\nTable.SELECTION_COLUMN = SELECTION_COLUMN;\nTable.SELECTION_ALL = SELECTION_ALL;\nTable.SELECTION_INVERT = SELECTION_INVERT;\nTable.SELECTION_NONE = SELECTION_NONE;\nTable.Summary = Summary;\n\nexport { TableInner };\n\nexport default Table;\n"],"mappings":"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"}
|
|
@@ -20,13 +20,14 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
20
20
|
const surface = (light) => `var(--lobe-table-surface, ${light})`;
|
|
21
21
|
const cellBg = `var(--lobe-table-cell, ${cssVar.colorBgContainer})`;
|
|
22
22
|
const fill = "var(--lobe-table-fill, transparent)";
|
|
23
|
-
const
|
|
24
|
-
const
|
|
23
|
+
const hoverBg = cssVar.colorFillTertiary;
|
|
24
|
+
const selectedBg = `color-mix(in srgb, ${cssVar.colorPrimary} 6%, transparent)`;
|
|
25
|
+
const selectedHoverBg = `color-mix(in srgb, ${cssVar.colorPrimary} 10%, transparent)`;
|
|
26
|
+
const frost = `
|
|
27
|
+
-webkit-backdrop-filter: blur(16px);
|
|
28
|
+
backdrop-filter: blur(16px);
|
|
29
|
+
`;
|
|
25
30
|
const variantVars = `
|
|
26
|
-
--lobe-table-solid: var(
|
|
27
|
-
--lobe-table-canvas,
|
|
28
|
-
var(--lobe-surface-bg-solid, var(--lobe-table-canvas-default, ${cssVar.colorBgContainer}))
|
|
29
|
-
);
|
|
30
31
|
--lobe-table-cell: var(--lobe-table-cell-bg, ${cssVar.colorBgContainer});
|
|
31
32
|
--lobe-table-fill: var(--lobe-table-surface, transparent);
|
|
32
33
|
`;
|
|
@@ -64,13 +65,13 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
64
65
|
border-start-end-radius: ${cssVar.borderRadiusLG};
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
/* The container draws the
|
|
68
|
+
/* The container draws the full frame (incl. bottom). Last-row borders used to stand
|
|
69
|
+
in for the bottom edge, but with scroll.y / virtual the last row sits inside the
|
|
70
|
+
body viewport - overflow:clip + radius then eats that line at the rounded corners.
|
|
68
71
|
No column dividers (grouped headers included): rows are split horizontally only. */
|
|
69
72
|
& > ${p}-container {
|
|
70
73
|
overflow: clip;
|
|
71
|
-
|
|
72
|
-
border-block-start: ${border};
|
|
73
|
-
border-inline: ${border};
|
|
74
|
+
border: ${border};
|
|
74
75
|
border-radius: ${cssVar.borderRadiusLG};
|
|
75
76
|
|
|
76
77
|
/* Same lift as the dashboard Surface card (both modes). Outer shadow on the framed
|
|
@@ -84,6 +85,7 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
84
85
|
}
|
|
85
86
|
|
|
86
87
|
&:has(> ${p}-footer) > ${p}-container {
|
|
88
|
+
border-block-end: 0;
|
|
87
89
|
border-end-start-radius: 0;
|
|
88
90
|
border-end-end-radius: 0;
|
|
89
91
|
}
|
|
@@ -105,18 +107,45 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
105
107
|
box-shadow: inset 0 999px 0 ${cssVar.colorFillQuaternary};
|
|
106
108
|
}
|
|
107
109
|
|
|
108
|
-
/* Fixed cells:
|
|
110
|
+
/* Fixed cells: see-through (container fill shows) + backdrop blur only. */
|
|
109
111
|
& ${p}-tbody > tr > td${p}-cell-fix, & ${p}-tbody-virtual ${p}-cell${p}-cell-fix {
|
|
110
|
-
background:
|
|
112
|
+
background: transparent;
|
|
111
113
|
box-shadow: none;
|
|
112
114
|
}
|
|
113
115
|
|
|
114
116
|
/* Header: container fill + one Quaternary wash (box-shadow), like other th. */
|
|
115
117
|
& ${p}-thead > tr > th${p}-cell-fix, & ${p}-thead > tr > td${p}-cell-fix {
|
|
116
|
-
background:
|
|
118
|
+
background: transparent;
|
|
117
119
|
box-shadow: inset 0 999px 0 ${cssVar.colorFillQuaternary};
|
|
118
120
|
}
|
|
119
121
|
}
|
|
122
|
+
`,
|
|
123
|
+
frostRail: css`
|
|
124
|
+
pointer-events: none;
|
|
125
|
+
|
|
126
|
+
position: absolute;
|
|
127
|
+
z-index: 1;
|
|
128
|
+
inset-block-start: 0;
|
|
129
|
+
inset-inline-start: 0;
|
|
130
|
+
|
|
131
|
+
display: flex;
|
|
132
|
+
`,
|
|
133
|
+
frostStart: css`
|
|
134
|
+
position: sticky;
|
|
135
|
+
inset-inline-start: 0;
|
|
136
|
+
flex: none;
|
|
137
|
+
height: 100%;
|
|
138
|
+
${frost}
|
|
139
|
+
`,
|
|
140
|
+
frostEnd: css`
|
|
141
|
+
position: sticky;
|
|
142
|
+
inset-inline-end: 0;
|
|
143
|
+
|
|
144
|
+
flex: none;
|
|
145
|
+
|
|
146
|
+
height: 100%;
|
|
147
|
+
margin-inline-start: auto;
|
|
148
|
+
${frost}
|
|
120
149
|
`,
|
|
121
150
|
filled: css`
|
|
122
151
|
&${p}-filled {
|
|
@@ -124,10 +153,6 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
124
153
|
/* Filled owns its fill in both modes (Block filled = colorFillTertiary; dark uses the
|
|
125
154
|
Quaternary surface) and its opaque base is the page behind it, not colorBgContainer. */
|
|
126
155
|
--lobe-table-fill: var(--lobe-table-surface, ${cssVar.colorFillTertiary});
|
|
127
|
-
--lobe-table-solid: var(
|
|
128
|
-
--lobe-table-canvas,
|
|
129
|
-
var(--lobe-surface-bg-solid, ${cssVar.colorBgLayout})
|
|
130
|
-
);
|
|
131
156
|
|
|
132
157
|
/* Root stays clear (square box, would bleed past the rounded corners); the clipped
|
|
133
158
|
container is the ONE fill layer: light FillTertiary, dark colorFillQuaternary. */
|
|
@@ -180,16 +205,16 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
180
205
|
background: transparent;
|
|
181
206
|
}
|
|
182
207
|
|
|
183
|
-
/* Fixed cells
|
|
208
|
+
/* Fixed cells: see-through + blur; header keeps the same divider + wash as every th. */
|
|
184
209
|
& ${p}-thead > tr > th${p}-cell-fix, & ${p}-thead > tr > td${p}-cell-fix {
|
|
185
|
-
background:
|
|
210
|
+
background: transparent;
|
|
186
211
|
box-shadow:
|
|
187
212
|
inset 0 -1px 0 ${borderColor},
|
|
188
213
|
inset 0 999px 0 ${cssVar.colorFillQuaternary};
|
|
189
214
|
}
|
|
190
215
|
|
|
191
216
|
& ${p}-tbody > tr > td${p}-cell-fix {
|
|
192
|
-
background:
|
|
217
|
+
background: transparent;
|
|
193
218
|
box-shadow: none;
|
|
194
219
|
}
|
|
195
220
|
}
|
|
@@ -197,7 +222,7 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
197
222
|
/**
|
|
198
223
|
* Borderless: everything but the header is see-through, so the table sits on whatever
|
|
199
224
|
* surface hosts it. Hover / selected rows are translucent fills. Fixed (sticky) cells
|
|
200
|
-
*
|
|
225
|
+
* are see-through with a frosted backdrop so scrolled content stays obscured.
|
|
201
226
|
*/
|
|
202
227
|
borderless: css`
|
|
203
228
|
&& {
|
|
@@ -213,14 +238,14 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
213
238
|
}
|
|
214
239
|
|
|
215
240
|
&& ${p}-tbody > tr > td${p}-cell-row-hover, && ${p}-tbody-virtual ${p}-row:hover > ${p}-cell {
|
|
216
|
-
background:
|
|
241
|
+
background: ${hoverBg};
|
|
217
242
|
}
|
|
218
243
|
|
|
219
244
|
&& ${p}-tbody > tr${p}-row-selected > td {
|
|
220
|
-
background:
|
|
245
|
+
background: ${selectedBg};
|
|
221
246
|
|
|
222
247
|
&${p}-cell-row-hover {
|
|
223
|
-
background:
|
|
248
|
+
background: ${selectedHoverBg};
|
|
224
249
|
}
|
|
225
250
|
}
|
|
226
251
|
|
|
@@ -235,18 +260,18 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
235
260
|
&&
|
|
236
261
|
${p}-tbody-virtual
|
|
237
262
|
${p}-cell${p}-cell-fix {
|
|
238
|
-
background:
|
|
263
|
+
background: transparent;
|
|
239
264
|
}
|
|
240
265
|
|
|
241
266
|
&& ${p}-tbody > tr > td${p}-cell-fix${p}-cell-row-hover {
|
|
242
|
-
background:
|
|
267
|
+
background: ${hoverBg};
|
|
243
268
|
}
|
|
244
269
|
|
|
245
270
|
&& ${p}-tbody > tr${p}-row-selected > td${p}-cell-fix {
|
|
246
|
-
background:
|
|
271
|
+
background: ${selectedBg};
|
|
247
272
|
|
|
248
273
|
&${p}-cell-row-hover {
|
|
249
|
-
background:
|
|
274
|
+
background: ${selectedHoverBg};
|
|
250
275
|
}
|
|
251
276
|
}
|
|
252
277
|
`,
|
|
@@ -383,8 +408,9 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
383
408
|
vertical-align: middle;
|
|
384
409
|
`,
|
|
385
410
|
hoverable: css`
|
|
386
|
-
|
|
387
|
-
|
|
411
|
+
/* &&& outranks the variant cell rules (filled clear cells, transparent fixed cells). */
|
|
412
|
+
&&& ${p}-tbody > tr > ${p}-cell-row-hover, &&& ${p}-tbody-virtual ${p}-row:hover > ${p}-cell {
|
|
413
|
+
background: ${hoverBg};
|
|
388
414
|
}
|
|
389
415
|
`,
|
|
390
416
|
loading: css`
|
|
@@ -494,14 +520,23 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
494
520
|
sizeLarge: css`
|
|
495
521
|
${PADDING_BLOCK}: 16px;
|
|
496
522
|
${PADDING_INLINE}: 16px;
|
|
523
|
+
|
|
524
|
+
/* Same as VIRTUAL_ROW_HEIGHT in Table.tsx (padding * 2 + 22px line + 1px divider). */
|
|
525
|
+
--lobe-table-virtual-row-height: calc(16px * 2 + 23px);
|
|
497
526
|
`,
|
|
498
527
|
sizeMedium: css`
|
|
499
528
|
${PADDING_BLOCK}: 12px;
|
|
500
529
|
${PADDING_INLINE}: 16px;
|
|
530
|
+
|
|
531
|
+
/* Same as VIRTUAL_ROW_HEIGHT in Table.tsx (padding * 2 + 22px line + 1px divider). */
|
|
532
|
+
--lobe-table-virtual-row-height: calc(12px * 2 + 23px);
|
|
501
533
|
`,
|
|
502
534
|
sizeSmall: css`
|
|
503
535
|
${PADDING_BLOCK}: 8px;
|
|
504
536
|
${PADDING_INLINE}: 12px;
|
|
537
|
+
|
|
538
|
+
/* Same as VIRTUAL_ROW_HEIGHT in Table.tsx (padding * 2 + 22px line + 1px divider). */
|
|
539
|
+
--lobe-table-virtual-row-height: calc(8px * 2 + 23px);
|
|
505
540
|
`,
|
|
506
541
|
sortButton: css`
|
|
507
542
|
display: inline-flex;
|
|
@@ -531,7 +566,6 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
531
566
|
/* Reset per root so nested / borderless tables never inherit a parent's variant vars. */
|
|
532
567
|
--lobe-table-cell: ${cssVar.colorBgContainer};
|
|
533
568
|
--lobe-table-fill: transparent;
|
|
534
|
-
--lobe-table-solid: ${cssVar.colorBgContainer};
|
|
535
569
|
|
|
536
570
|
font-size: 14px;
|
|
537
571
|
color: ${cssVar.colorText};
|
|
@@ -550,9 +584,39 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
550
584
|
& tfoot > tr > th,
|
|
551
585
|
& tfoot > tr > td {
|
|
552
586
|
position: relative;
|
|
587
|
+
|
|
553
588
|
padding-block: var(${PADDING_BLOCK});
|
|
554
589
|
padding-inline: var(${PADDING_INLINE});
|
|
590
|
+
|
|
555
591
|
overflow-wrap: break-word;
|
|
592
|
+
|
|
593
|
+
/* The global \`* { vertical-align: baseline }\` reset drops the UA's middle for cells. */
|
|
594
|
+
vertical-align: middle;
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
/* Row-merged body cells (rowSpan > 1, table and virtual body alike) get vertical
|
|
598
|
+
dividers so the block reads apart from the neighbour rows' lines. Drawn on ::before
|
|
599
|
+
(::after is the fixed-column scroll shadow) so cell box-shadows stay untouched. The
|
|
600
|
+
first / last column skip the edge the frame or table edge already provides. */
|
|
601
|
+
& ${p}-tbody > tr > td[rowspan]:not([rowspan='0'], [rowspan='1'])::before,
|
|
602
|
+
& ${p}-tbody-virtual ${p}-cell[rowspan]:not([rowspan='0'], [rowspan='1'])::before {
|
|
603
|
+
pointer-events: none;
|
|
604
|
+
content: '';
|
|
605
|
+
|
|
606
|
+
position: absolute;
|
|
607
|
+
inset: 0;
|
|
608
|
+
|
|
609
|
+
border-inline: ${border};
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
& ${p}-tbody > tr > td[rowspan]:first-child::before,
|
|
613
|
+
& ${p}-tbody-virtual ${p}-cell[rowspan]:first-child::before {
|
|
614
|
+
border-inline-start: 0;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
& ${p}-tbody > tr > td[rowspan]:last-child::before,
|
|
618
|
+
& ${p}-tbody-virtual ${p}-cell[rowspan]:last-child::before {
|
|
619
|
+
border-inline-end: 0;
|
|
556
620
|
}
|
|
557
621
|
|
|
558
622
|
& ${p}-thead > tr > th,
|
|
@@ -588,8 +652,20 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
588
652
|
transition: background-color ${cssVar.motionDurationMid};
|
|
589
653
|
}
|
|
590
654
|
|
|
591
|
-
|
|
592
|
-
|
|
655
|
+
/* Filled / outlined drop the last body divider: filled because its fill is the edge,
|
|
656
|
+
outlined because the container now draws the frame bottom (avoids a double line, and
|
|
657
|
+
keeps the outline when scroll.y / virtual would otherwise scroll the last-row edge
|
|
658
|
+
away). Borderless keeps it as the closing rule under the rows. */
|
|
659
|
+
&${p}-filled ${p}-tbody > tr:last-child > td,
|
|
660
|
+
&${p}-filled ${p}-tbody > tr:last-child > th,
|
|
661
|
+
&${p}-outlined ${p}-tbody > tr:last-child > td,
|
|
662
|
+
&${p}-outlined ${p}-tbody > tr:last-child > th {
|
|
663
|
+
border-block-end: 0;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
/* Borderless with a summary: tfoot draws its own top rule, so skip the last-row one. */
|
|
667
|
+
&${p}-borderless table:has(> tfoot) > ${p}-tbody > tr:last-child > td,
|
|
668
|
+
&${p}-borderless table:has(> tfoot) > ${p}-tbody > tr:last-child > th {
|
|
593
669
|
border-block-end: 0;
|
|
594
670
|
}
|
|
595
671
|
|
|
@@ -688,7 +764,7 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
688
764
|
}
|
|
689
765
|
|
|
690
766
|
& ${p}-cell-fix {
|
|
691
|
-
background:
|
|
767
|
+
background: transparent;
|
|
692
768
|
|
|
693
769
|
&::after {
|
|
694
770
|
${fixShadowBase}
|
|
@@ -715,41 +791,16 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
715
791
|
& ${p}-sticky-holder {
|
|
716
792
|
position: sticky;
|
|
717
793
|
z-index: calc(var(--columns-count, 1) * 2 + ${Z_FIXED} + 1);
|
|
718
|
-
background:
|
|
794
|
+
background: transparent;
|
|
795
|
+
|
|
796
|
+
/* The whole sticky header is one element, so it blurs as one continuous block. */
|
|
797
|
+
${frost}
|
|
719
798
|
}
|
|
720
799
|
|
|
721
800
|
& ${p}-sticky-scroll {
|
|
722
801
|
position: sticky;
|
|
723
802
|
z-index: calc(var(--columns-count, 1) * 2 + ${Z_FIXED} + 1);
|
|
724
803
|
inset-block-end: 0;
|
|
725
|
-
|
|
726
|
-
display: flex;
|
|
727
|
-
align-items: center;
|
|
728
|
-
|
|
729
|
-
height: 8px !important;
|
|
730
|
-
border-block-start: ${border};
|
|
731
|
-
|
|
732
|
-
opacity: 0.65;
|
|
733
|
-
background: ${cssVar.colorFillQuaternary};
|
|
734
|
-
|
|
735
|
-
&-bar {
|
|
736
|
-
position: absolute;
|
|
737
|
-
inset-block-end: 0;
|
|
738
|
-
|
|
739
|
-
height: 8px;
|
|
740
|
-
border-radius: 100px;
|
|
741
|
-
|
|
742
|
-
background-color: ${cssVar.colorFill};
|
|
743
|
-
|
|
744
|
-
transition:
|
|
745
|
-
all ${cssVar.motionDurationSlow},
|
|
746
|
-
transform 0s;
|
|
747
|
-
|
|
748
|
-
&:hover,
|
|
749
|
-
&-active {
|
|
750
|
-
background-color: ${cssVar.colorFillSecondary};
|
|
751
|
-
}
|
|
752
|
-
}
|
|
753
804
|
}
|
|
754
805
|
|
|
755
806
|
/* ============================ Selection =========================== */
|
|
@@ -769,11 +820,12 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
769
820
|
}
|
|
770
821
|
}
|
|
771
822
|
|
|
772
|
-
&
|
|
773
|
-
|
|
823
|
+
/* The table css carries no hoverable class, so use a fourth & to outrank hover too. */
|
|
824
|
+
&&&& ${p}-tbody > tr${p}-row-selected > td {
|
|
825
|
+
background: ${selectedBg};
|
|
774
826
|
|
|
775
827
|
&${p}-cell-row-hover {
|
|
776
|
-
background:
|
|
828
|
+
background: ${selectedHoverBg};
|
|
777
829
|
}
|
|
778
830
|
}
|
|
779
831
|
|
|
@@ -881,8 +933,8 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
881
933
|
position: relative;
|
|
882
934
|
z-index: ${Z_FIXED};
|
|
883
935
|
|
|
884
|
-
/*
|
|
885
|
-
background:
|
|
936
|
+
/* See-through; a sticky summary is a sticky holder and gets its frost there. */
|
|
937
|
+
background: transparent;
|
|
886
938
|
|
|
887
939
|
& > tr > th,
|
|
888
940
|
& > tr > td {
|
|
@@ -918,6 +970,14 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
918
970
|
box-sizing: border-box;
|
|
919
971
|
width: 100%;
|
|
920
972
|
|
|
973
|
+
/* Virtual rows are locked to the listItemHeight estimate (an integer). Measured
|
|
974
|
+
heights then equal the estimate, so a rowSpan cell (height = summed row sizes)
|
|
975
|
+
ends exactly on the neighbour rows' divider instead of drifting by sub-pixel
|
|
976
|
+
rounding or unmeasured-row estimates. */
|
|
977
|
+
&:not(${p}-row-extra, ${p}-expanded-row) {
|
|
978
|
+
height: var(--lobe-table-virtual-row-height);
|
|
979
|
+
}
|
|
980
|
+
|
|
921
981
|
& > ${p}-cell {
|
|
922
982
|
align-content: center;
|
|
923
983
|
}
|
|
@@ -929,14 +989,6 @@ const styles = createStaticStyles(({ css, cssVar }) => {
|
|
|
929
989
|
transition: background-color ${cssVar.motionDurationMid};
|
|
930
990
|
}
|
|
931
991
|
|
|
932
|
-
& ${p}-tbody-virtual-scrollbar {
|
|
933
|
-
cursor: pointer;
|
|
934
|
-
|
|
935
|
-
&:hover {
|
|
936
|
-
background-color: ${cssVar.colorFillQuaternary};
|
|
937
|
-
}
|
|
938
|
-
}
|
|
939
|
-
|
|
940
992
|
& ${p}-expanded-row ${p}-expanded-row-cell${p}-expanded-row-cell-fixed {
|
|
941
993
|
position: sticky;
|
|
942
994
|
inset-inline-start: 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.mjs","names":[],"sources":["../../../src/base-ui/Table/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\n/** Own prefix so rc-table classNames never collide with antd's global `.ant-table` CSS. */\nexport const PREFIX_CLS = 'lobe-table';\n\nconst p = `.${PREFIX_CLS}`;\n\n// Cell padding comes from the size class through these vars, so title / footer / expanded rows\n// can reuse (and negate) it.\nconst PADDING_BLOCK = '--lobe-table-padding-block';\nconst PADDING_INLINE = '--lobe-table-padding-inline';\n\n// Matches antd's `zIndexTableFixed`.\nconst Z_FIXED = 2;\n\n// antd `expandColumnWidth`; nested tables start after it.\nexport const EXPAND_COLUMN_WIDTH = 48;\n\n// antd `selectionColumnWidth`, plus the `selections` trigger when there is one.\nexport const SELECTION_COLUMN_WIDTH = 32;\nexport const SELECTION_DROPDOWN_WIDTH = 24;\n\n/** Rows of this table's own sections only, so the rules never leak into nested tables. */\nconst ownRows = ['content', 'header', 'body', 'summary']\n .map((section) => `& > ${p}-container > ${p}-${section} > table > * > tr`)\n .join(', ');\nconst ownCells = (cell: string) =>\n ownRows\n .split(', ')\n .map((row) => `${row} > ${cell}`)\n .join(', ');\n\nexport const styles = createStaticStyles(({ css, cssVar }) => {\n // Light colorFill / dark colorFillSecondary (see --lobe-fill-border in ThemeProvider).\n const borderColor = `var(--lobe-fill-border, ${cssVar.colorFill})`;\n const border = `1px solid ${borderColor}`;\n // Dark: colorFillQuaternary on the clipped container; unset in light so variants keep their fills.\n const surface = (light: string) => `var(--lobe-table-surface, ${light})`;\n // Cell background. Every table root resets it to colorBgContainer (so nested / borderless\n // tables never inherit it); outlined / filled switch it to transparent in dark.\n const cellBg = `var(--lobe-table-cell, ${cssVar.colorBgContainer})`;\n // The variant fill that opaque composites (fixed cells, sticky holder, summary) repeat\n // once. Reset to transparent per root; outlined / filled set it to the dark surface.\n const fill = 'var(--lobe-table-fill, transparent)';\n // Opaque base under fixed / sticky cells: the real color behind the table, so base + fill\n // matches the translucent body exactly. Override with --lobe-table-canvas; inside a Surface\n // card it is the card's solid color; dark default colorBgLayout (page), light colorBgContainer.\n const solid = 'var(--lobe-table-solid)';\n const solidWith = (...fills: string[]) =>\n `${fills.map((f) => `linear-gradient(${f}, ${f})`).join(', ')}, ${solid}`;\n const variantVars = `\n --lobe-table-solid: var(\n --lobe-table-canvas,\n var(--lobe-surface-bg-solid, var(--lobe-table-canvas-default, ${cssVar.colorBgContainer}))\n );\n --lobe-table-cell: var(--lobe-table-cell-bg, ${cssVar.colorBgContainer});\n --lobe-table-fill: var(--lobe-table-surface, transparent);\n `;\n const fixShadowBase = `\n pointer-events: none;\n content: '';\n position: absolute;\n inset-block: 0 -1px;\n width: 30px;\n transition: box-shadow ${cssVar.motionDurationSlow};\n `;\n const startShadow = `box-shadow: inset 10px 0 8px -8px ${cssVar.colorSplit};`;\n const endShadow = `box-shadow: inset -10px 0 8px -8px ${cssVar.colorSplit};`;\n\n return {\n outlined: css`\n &${p}-outlined {\n ${variantVars}\n /* The square root must not paint behind the rounded frame: the clipped container\n is the ONE layer carrying the body (light colorBgContainer, dark\n colorFillQuaternary). Title / footer are siblings, so they paint it once too. */\n background: transparent;\n\n & > ${p}-container {\n background: ${surface(cssVar.colorBgContainer)};\n }\n\n & > ${p}-title, & > ${p}-footer {\n background: ${surface(cssVar.colorBgContainer)};\n }\n\n & > ${p}-title {\n border: ${border};\n border-block-end: 0;\n border-start-start-radius: ${cssVar.borderRadiusLG};\n border-start-end-radius: ${cssVar.borderRadiusLG};\n }\n\n /* The container draws the top and both side edges; the last row draws the bottom.\n No column dividers (grouped headers included): rows are split horizontally only. */\n & > ${p}-container {\n overflow: clip;\n\n border-block-start: ${border};\n border-inline: ${border};\n border-radius: ${cssVar.borderRadiusLG};\n\n /* Same lift as the dashboard Surface card (both modes). Outer shadow on the framed\n container is not clipped by its own overflow. */\n box-shadow: rgb(0 0 0 / 4%) 0 1px 2px 0;\n }\n\n & > ${p}-title + ${p}-container {\n border-start-start-radius: 0;\n border-start-end-radius: 0;\n }\n\n &:has(> ${p}-footer) > ${p}-container {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n }\n\n & > ${p}-footer {\n border: ${border};\n border-block-start: 0;\n border-end-start-radius: ${cssVar.borderRadiusLG};\n border-end-end-radius: ${cssVar.borderRadiusLG};\n }\n\n /* Every header row (including the last) draws one bottom edge — no inset\n shadow underneath, or group headers look double-thick. */\n & > ${p}-container > * > table > thead > tr > th {\n border-block-end: ${border};\n\n /* Extra FillQuaternary layer on top of the container fill. */\n background: ${cellBg};\n box-shadow: inset 0 999px 0 ${cssVar.colorFillQuaternary};\n }\n\n /* Fixed cells: opaque canvas (--lobe-table-solid) + the container fill once. */\n & ${p}-tbody > tr > td${p}-cell-fix, & ${p}-tbody-virtual ${p}-cell${p}-cell-fix {\n background: ${solidWith(fill)};\n box-shadow: none;\n }\n\n /* Header: container fill + one Quaternary wash (box-shadow), like other th. */\n & ${p}-thead > tr > th${p}-cell-fix, & ${p}-thead > tr > td${p}-cell-fix {\n background: ${solidWith(fill)};\n box-shadow: inset 0 999px 0 ${cssVar.colorFillQuaternary};\n }\n }\n `,\n\n /* Mirrors Block \\`filled\\`: one colorFillTertiary (dark: colorFillQuaternary on the clipped\n container) surface straight on the parent and no frame border. */\n filled: css`\n &${p}-filled {\n ${variantVars}\n /* Filled owns its fill in both modes (Block filled = colorFillTertiary; dark uses the\n Quaternary surface) and its opaque base is the page behind it, not colorBgContainer. */\n --lobe-table-fill: var(--lobe-table-surface, ${cssVar.colorFillTertiary});\n --lobe-table-solid: var(\n --lobe-table-canvas,\n var(--lobe-surface-bg-solid, ${cssVar.colorBgLayout})\n );\n\n /* Root stays clear (square box, would bleed past the rounded corners); the clipped\n container is the ONE fill layer: light FillTertiary, dark colorFillQuaternary. */\n background: transparent;\n\n & > ${p}-title, & > ${p}-footer {\n border-radius: ${cssVar.borderRadiusLG};\n background: ${fill};\n }\n\n & > ${p}-title {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n }\n\n & > ${p}-footer {\n border-start-start-radius: 0;\n border-start-end-radius: 0;\n }\n\n & > ${p}-container {\n overflow: clip;\n border-radius: ${cssVar.borderRadiusLG};\n background: ${fill};\n }\n\n & > ${p}-title + ${p}-container {\n border-start-start-radius: 0;\n border-start-end-radius: 0;\n }\n\n &:has(> ${p}-footer) > ${p}-container {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n }\n\n /* Header band: one extra FillQuaternary wash over the container fill. */\n & ${p}-thead > tr > th,\n & ${p}-thead > tr > td {\n background: transparent;\n box-shadow:\n inset 0 -1px 0 ${borderColor},\n inset 0 999px 0 ${cssVar.colorFillQuaternary};\n }\n\n /* Row dividers stay on (base border rule); body is clear over the container fill. */\n & ${p}-tbody > tr > td,\n & ${p}-tbody > tr > th,\n & ${p}-tbody-virtual ${p}-cell {\n background: transparent;\n }\n\n /* Fixed cells must be opaque: canvas (--lobe-table-solid) + the same fill; header adds one wash. */\n & ${p}-thead > tr > th${p}-cell-fix, & ${p}-thead > tr > td${p}-cell-fix {\n background: ${solidWith(fill)};\n box-shadow:\n inset 0 -1px 0 ${borderColor},\n inset 0 999px 0 ${cssVar.colorFillQuaternary};\n }\n\n & ${p}-tbody > tr > td${p}-cell-fix {\n background: ${solidWith(fill)};\n box-shadow: none;\n }\n }\n `,\n /**\n * Borderless: everything but the header is see-through, so the table sits on whatever\n * surface hosts it. Hover / selected rows are translucent fills. Fixed (sticky) cells\n * stay opaque in colorBgContainer so scrolled content never shows underneath them.\n */\n borderless: css`\n && {\n background: transparent;\n }\n\n && ${p}-tbody > tr > td,\n && ${p}-tbody > tr > th,\n && ${p}-tbody-virtual ${p}-cell, && ${p}-summary, && ${p}-summary > tr > td,\n && ${p}-summary > tr > th,\n && > ${p}-footer {\n background: transparent;\n }\n\n && ${p}-tbody > tr > td${p}-cell-row-hover, && ${p}-tbody-virtual ${p}-row:hover > ${p}-cell {\n background: color-mix(in srgb, ${cssVar.colorText} 3%, transparent);\n }\n\n && ${p}-tbody > tr${p}-row-selected > td {\n background: color-mix(in srgb, ${cssVar.colorPrimary} 6%, transparent);\n\n &${p}-cell-row-hover {\n background: color-mix(in srgb, ${cssVar.colorPrimary} 10%, transparent);\n }\n }\n\n &&\n ${p}-tbody\n > tr\n > td${p}-cell-fix,\n &&\n ${p}-tbody\n > tr\n > th${p}-cell-fix,\n &&\n ${p}-tbody-virtual\n ${p}-cell${p}-cell-fix {\n background: ${cssVar.colorBgContainer};\n }\n\n && ${p}-tbody > tr > td${p}-cell-fix${p}-cell-row-hover {\n background: color-mix(in srgb, ${cssVar.colorBgContainer}, ${cssVar.colorText} 3%);\n }\n\n && ${p}-tbody > tr${p}-row-selected > td${p}-cell-fix {\n background: color-mix(in srgb, ${cssVar.colorBgContainer}, ${cssVar.colorPrimary} 6%);\n\n &${p}-cell-row-hover {\n background: color-mix(in srgb, ${cssVar.colorBgContainer}, ${cssVar.colorPrimary} 10%);\n }\n }\n `,\n /**\n * Grouped (multi-level) headers only: column dividers in header and body so the\n * group spans stay readable. Plain tables never get vertical dividers.\n */\n grouped: css`\n ${ownCells('th')}, ${ownCells('td')} {\n border-inline-end: ${border};\n }\n\n & ${p}-tbody-virtual ${p}-cell {\n border-inline-end: ${border};\n }\n\n /* Outlined: the container already draws the trailing edge. Other variants: the\n rightmost body cell and first header row cell stop at the table edge. */\n &:not(${p}-outlined) ${p}-tbody > tr > td:last-child,\n &:not(${p}-outlined) ${p}-thead > tr:first-child > th:last-child,\n &${p}-outlined ${p}-tbody > tr > td:last-child,\n &${p}-outlined ${p}-thead > tr:first-child > th:last-child {\n border-inline-end: 0;\n }\n `,\n clickable: css`\n cursor: pointer;\n `,\n /** Title text of an `ellipsis` column; truncates inside the sort button / header controls. */\n columnTitle: css`\n overflow: hidden;\n\n min-width: 0;\n\n text-overflow: ellipsis;\n word-break: keep-all;\n white-space: nowrap;\n `,\n filterActive: css`\n &&,\n &&:hover {\n color: ${cssVar.colorPrimary};\n }\n `,\n filterButton: css`\n flex: none;\n margin-block: -4px;\n `,\n filterButtons: css`\n display: flex;\n gap: 8px;\n align-items: center;\n justify-content: space-between;\n\n padding-block: 7px;\n padding-inline: 8px;\n border-block-start: 1px solid ${cssVar.colorSplit};\n `,\n filterCheckAll: css`\n margin-block-end: 4px;\n padding-inline: 4px;\n `,\n filterDropdown: css`\n display: flex;\n flex-direction: column;\n min-width: 120px;\n `,\n filterEmpty: css`\n padding-block: 16px;\n padding-inline: 0;\n `,\n filterGroup: css`\n display: flex;\n flex-direction: column;\n\n & > div:not(:first-child) {\n padding-inline-start: 20px;\n }\n `,\n filterGroupTitle: css`\n padding-block: 5px;\n padding-inline: 8px;\n font-size: 12px;\n color: ${cssVar.colorTextDescription};\n `,\n filterItem: css`\n display: flex;\n align-items: center;\n\n padding-block: 5px;\n padding-inline: 8px;\n border-radius: ${cssVar.borderRadiusSM};\n\n white-space: nowrap;\n\n &:hover {\n background: ${cssVar.colorFillTertiary};\n }\n\n & > label {\n cursor: pointer;\n flex: 1;\n }\n `,\n filterMenu: css`\n overflow: auto;\n display: flex;\n flex-direction: column;\n\n max-height: 264px;\n padding: 4px;\n `,\n filterPopup: css`\n overflow: hidden;\n padding: 0;\n `,\n filterSearch: css`\n padding: 8px;\n border-block-end: 1px solid ${cssVar.colorSplit};\n `,\n filterTree: css`\n overflow: auto;\n max-height: 264px;\n padding: 8px;\n `,\n headerInner: css`\n display: inline-flex;\n gap: 6px;\n align-items: center;\n\n min-width: 0;\n max-width: 100%;\n\n vertical-align: middle;\n `,\n hoverable: css`\n & ${p}-tbody > tr > ${p}-cell-row-hover, & ${p}-tbody-virtual ${p}-row:hover > ${p}-cell {\n background: color-mix(in srgb, ${cssVar.colorBgContainer}, ${cssVar.colorText} 3%);\n }\n `,\n loading: css`\n position: absolute;\n z-index: calc(var(--columns-count, 1) * 2 + ${Z_FIXED} + 2);\n inset: 0;\n\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: center;\n justify-content: center;\n\n color: ${cssVar.colorTextSecondary};\n\n background: color-mix(in srgb, ${cssVar.colorBgContainer} 60%, transparent);\n `,\n /**\n * Empty-state loading body. Tracks follow leaf column widths so bars sit under the\n * live header; cell padding reuses the size CSS vars on the table ancestor.\n */\n skeleton: css`\n display: flex;\n flex-direction: column;\n\n width: 100%;\n min-width: 0;\n\n text-align: start;\n `,\n skeletonCell: css`\n display: flex;\n align-items: center;\n\n min-width: 0;\n padding-block: var(${PADDING_BLOCK});\n padding-inline: var(${PADDING_INLINE});\n `,\n skeletonRow: css`\n display: grid;\n align-items: stretch;\n\n width: 100%;\n min-width: 0;\n border-block-end: 1px solid ${borderColor};\n\n &:last-child {\n border-block-end: 0;\n }\n `,\n // antd `paginationMargin` (token.margin): keep the pager off the table above and off\n // whatever sits below the table.\n pagination: css`\n display: flex;\n margin-block: 16px;\n `,\n paginationCenter: css`\n justify-content: center;\n `,\n paginationEnd: css`\n justify-content: flex-end;\n `,\n paginationStart: css`\n justify-content: flex-start;\n `,\n paginationTop: css`\n margin-block: 0 16px;\n `,\n root: css`\n min-width: 0;\n `,\n /** Header box of the selection column; `selectionExtra` hangs off its end. */\n selection: css`\n position: relative;\n display: inline-flex;\n flex-direction: column;\n vertical-align: middle;\n `,\n selectionColumn: css`\n && {\n padding-inline: 8px;\n text-align: center;\n }\n\n & > * {\n vertical-align: middle;\n }\n `,\n selectionExtra: css`\n position: absolute;\n z-index: 1;\n inset-block-start: 0;\n\n display: flex;\n align-items: center;\n\n height: 100%;\n margin-inline-start: 100%;\n padding-inline-start: 2px;\n `,\n selectionRadioGroup: css`\n display: inline-flex;\n vertical-align: middle;\n `,\n selectionTrigger: css`\n flex: none;\n margin-block: -4px;\n `,\n sizeLarge: css`\n ${PADDING_BLOCK}: 16px;\n ${PADDING_INLINE}: 16px;\n `,\n sizeMedium: css`\n ${PADDING_BLOCK}: 12px;\n ${PADDING_INLINE}: 16px;\n `,\n sizeSmall: css`\n ${PADDING_BLOCK}: 8px;\n ${PADDING_INLINE}: 12px;\n `,\n // Title + sort ActionIcon row (not a button — the ActionIcon owns the click).\n sortButton: css`\n display: inline-flex;\n gap: 4px;\n align-items: center;\n\n min-width: 0;\n max-width: 100%;\n `,\n // Matches the filter trigger: small ActionIcon with a slight negative margin so the\n // 24px block does not grow the header.\n sortCaret: css`\n flex: none;\n margin-block: -4px;\n `,\n sortTitle: css`\n cursor: pointer;\n min-width: 0;\n `,\n sortedColumn: css`\n ${p}-tbody > tr > &${p}-cell {\n background: ${cssVar.colorFillQuaternary};\n }\n `,\n spinContainer: css`\n position: relative;\n `,\n table: css`\n /* Reset per root so nested / borderless tables never inherit a parent's variant vars. */\n --lobe-table-cell: ${cssVar.colorBgContainer};\n --lobe-table-fill: transparent;\n --lobe-table-solid: ${cssVar.colorBgContainer};\n\n font-size: 14px;\n color: ${cssVar.colorText};\n background: ${cssVar.colorBgContainer};\n\n & table {\n border-spacing: 0;\n border-collapse: separate;\n width: 100%;\n text-align: start;\n }\n\n /* ============================== Cell ============================== */\n & ${p}-cell, & ${p}-thead > tr > th,\n & ${p}-tbody > tr > td,\n & tfoot > tr > th,\n & tfoot > tr > td {\n position: relative;\n padding-block: var(${PADDING_BLOCK});\n padding-inline: var(${PADDING_INLINE});\n overflow-wrap: break-word;\n }\n\n & ${p}-thead > tr > th,\n & ${p}-thead > tr > td {\n font-size: 13px;\n font-weight: 500;\n color: ${cssVar.colorTextSecondary};\n text-align: start;\n\n /* Clear in dark (outlined) so the container fill shows; Quaternary is the extra header layer. */\n background: ${cellBg};\n box-shadow:\n inset 0 -1px 0 ${borderColor},\n inset 0 999px 0 ${cssVar.colorFillQuaternary};\n\n &[colspan]:not([colspan='1']) {\n text-align: center;\n }\n }\n\n /* th covers rowScope row headers. */\n & ${p}-tbody > tr > td,\n & ${p}-tbody > tr > th {\n border-block-end: ${border};\n\n font-weight: inherit;\n font-variant-numeric: tabular-nums;\n text-align: start;\n\n /* Clear in dark (outlined) so the container fill shows through. */\n background: ${cellBg};\n\n transition: background-color ${cssVar.motionDurationMid};\n }\n\n &:not(${p}-outlined) ${p}-tbody > tr:last-child > td,\n &:not(${p}-outlined) ${p}-tbody > tr:last-child > th {\n border-block-end: 0;\n }\n\n & ${p}-tbody > tr${p}-placeholder > td {\n padding-block: 32px;\n color: ${cssVar.colorTextDescription};\n text-align: center;\n }\n\n /* Skeleton loading fills the placeholder like real body rows. */\n & ${p}-tbody > tr${p}-placeholder > td:has([data-table-skeleton]) {\n padding: 0;\n color: inherit;\n text-align: start;\n vertical-align: top;\n }\n\n & ${p}-cell-scrollbar:not([rowspan]) {\n box-shadow: 0 1px 0 1px ${cssVar.colorFillQuaternary};\n }\n\n /* ============================ Ellipsis ============================ */\n & ${p}-cell-ellipsis {\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: keep-all;\n white-space: nowrap;\n\n &${p}-cell-fix-start-shadow, &${p}-cell-fix-end-shadow {\n overflow: visible;\n\n & ${p}-cell-content {\n overflow: hidden;\n display: block;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n }\n\n /* ========================== Title / Footer ========================= */\n & > ${p}-title, & > ${p}-footer {\n padding-block: var(${PADDING_BLOCK});\n padding-inline: var(${PADDING_INLINE});\n }\n\n & > ${p}-footer {\n color: ${cssVar.colorText};\n background: ${cssVar.colorFillQuaternary};\n }\n\n /* ============================== Fixed ============================= */\n & ${p}-container {\n position: relative;\n\n &::before,\n &::after {\n ${fixShadowBase}\n z-index: calc(var(--columns-count, 1) * 2 + ${Z_FIXED} + 1);\n }\n\n &::before {\n inset-inline-start: 0;\n }\n\n &::after {\n inset-inline-end: 0;\n }\n }\n\n &${p}-has-fix-start > ${p}-container::before, &${p}-has-fix-end > ${p}-container::after {\n display: none;\n }\n\n &${p}-fix-start-shadow-show > ${p}-container::before {\n ${startShadow}\n }\n\n &${p}-fix-end-shadow-show > ${p}-container::after {\n ${endShadow}\n }\n\n /* Must outrank the generic cell rule that sets position: relative. */\n &\n ${p}-thead\n > tr\n > th${p}-cell-fix,\n &\n ${p}-tbody\n > tr\n > td${p}-cell-fix,\n &\n ${p}-cell${p}-cell-fix {\n position: sticky;\n z-index: calc(var(--z-offset-reverse) + ${Z_FIXED});\n }\n\n & ${p}-cell-fix {\n background: ${cssVar.colorBgContainer};\n\n &::after {\n ${fixShadowBase}\n }\n }\n\n & ${p}-cell-fix-start::after {\n inset-inline-start: 100%;\n }\n\n & ${p}-cell-fix-end::after {\n inset-inline-end: 100%;\n }\n\n & ${p}-cell-fix-start-shadow-show::after {\n ${startShadow}\n }\n\n & ${p}-cell-fix-end-shadow-show::after {\n ${endShadow}\n }\n\n /* ============================= Sticky ============================= */\n & ${p}-sticky-holder {\n position: sticky;\n z-index: calc(var(--columns-count, 1) * 2 + ${Z_FIXED} + 1);\n background: ${solidWith(fill)};\n }\n\n & ${p}-sticky-scroll {\n position: sticky;\n z-index: calc(var(--columns-count, 1) * 2 + ${Z_FIXED} + 1);\n inset-block-end: 0;\n\n display: flex;\n align-items: center;\n\n height: 8px !important;\n border-block-start: ${border};\n\n opacity: 0.65;\n background: ${cssVar.colorFillQuaternary};\n\n &-bar {\n position: absolute;\n inset-block-end: 0;\n\n height: 8px;\n border-radius: 100px;\n\n background-color: ${cssVar.colorFill};\n\n transition:\n all ${cssVar.motionDurationSlow},\n transform 0s;\n\n &:hover,\n &-active {\n background-color: ${cssVar.colorFillSecondary};\n }\n }\n }\n\n /* ============================ Selection =========================== */\n & ${p}-selection-col {\n width: ${SELECTION_COLUMN_WIDTH}px;\n\n &${p}-selection-col-with-dropdown {\n width: ${SELECTION_COLUMN_WIDTH + SELECTION_DROPDOWN_WIDTH}px;\n }\n }\n\n &${p}-outlined ${p}-selection-col {\n width: ${SELECTION_COLUMN_WIDTH + 16}px;\n\n &${p}-selection-col-with-dropdown {\n width: ${SELECTION_COLUMN_WIDTH + SELECTION_DROPDOWN_WIDTH + 16}px;\n }\n }\n\n & ${p}-tbody > tr${p}-row-selected > td {\n background: color-mix(in srgb, ${cssVar.colorBgContainer}, ${cssVar.colorPrimary} 6%);\n\n &${p}-cell-row-hover {\n background: color-mix(in srgb, ${cssVar.colorBgContainer}, ${cssVar.colorPrimary} 10%);\n }\n }\n\n /* ========================= Expand / Tree ========================== */\n & ${p}-expand-icon-col {\n width: ${EXPAND_COLUMN_WIDTH}px;\n }\n\n & ${p}-row-expand-icon-cell {\n text-align: center;\n\n & ${p}-row-expand-icon {\n float: none;\n display: inline-flex;\n vertical-align: sub;\n }\n }\n\n & ${p}-row-indent {\n float: inline-start;\n height: 1px;\n }\n\n & ${p}-row-expand-icon {\n float: inline-start;\n flex: none;\n vertical-align: middle;\n\n &${p}-row-expand-icon-spaced {\n display: inline-block;\n width: 24px;\n height: 24px;\n visibility: hidden;\n }\n }\n\n & ${p}-row-indent + ${p}-row-expand-icon {\n margin-block: -1px;\n margin-inline-end: 8px;\n }\n\n & tr${p}-expanded-row > td,\n & tr${p}-expanded-row:hover > td {\n background: ${cssVar.colorFillQuaternary};\n }\n\n & ${p}-expanded-row-fixed {\n position: relative;\n\n margin-block: calc(var(${PADDING_BLOCK}) * -1);\n margin-inline: calc(var(${PADDING_INLINE}) * -1);\n padding-block: var(${PADDING_BLOCK});\n padding-inline: var(${PADDING_INLINE});\n }\n\n /* ========================== Nested table ========================== */\n\n /* A table alone in a cell fills it, starting after the expand column. */\n &\n ${p}-tbody\n > tr\n > td\n > ${p}-wrapper:only-child,\n &\n ${p}-tbody\n > tr\n > td\n > ${p}-expanded-row-fixed\n > ${p}-wrapper:only-child {\n & ${p} {\n margin-block: calc(var(${PADDING_BLOCK}) * -1);\n margin-inline: calc(${EXPAND_COLUMN_WIDTH}px - var(${PADDING_INLINE}))\n calc(var(${PADDING_INLINE}) * -1);\n }\n\n & ${p}-tbody > tr:last-child > td {\n border-block-end: 0;\n }\n\n /* The outer cell already draws the frame: keep only the start edge of a bordered nest. */\n & ${p}${p}-outlined {\n & > ${p}-title, & > ${p}-container, & > ${p}-footer {\n border-block: 0;\n border-inline-end: 0;\n border-radius: 0;\n box-shadow: none;\n }\n\n & > ${p}-title + ${p}-container {\n border-block-start: ${border};\n }\n\n &:has(> ${p}-footer) > ${p}-container {\n border-block-end: ${border};\n }\n }\n }\n\n &${p}-outlined ${p}-tbody > tr > td > ${p}-expanded-row-fixed {\n margin-inline: calc((var(${PADDING_INLINE}) + 1px) * -1);\n }\n\n /* ============================= Summary ============================ */\n & ${p}-summary {\n position: relative;\n z-index: ${Z_FIXED};\n\n /* Opaque: canvas + the variant fill once. */\n background: ${solidWith(fill)};\n\n & > tr > th,\n & > tr > td {\n border-block-end: ${border};\n }\n }\n\n & div${p}-summary {\n box-shadow: 0 -1px 0 ${borderColor};\n }\n\n /* A fixed summary under \\`sticky\\` is a sticky holder too; keep it sticky (antd orders sticky last). */\n & ${p}-summary${p}-sticky-holder {\n position: sticky;\n z-index: calc(var(--columns-count, 1) * 2 + ${Z_FIXED} + 1);\n }\n\n & tfoot > tr > th,\n & tfoot > tr > td {\n border-block-start: ${border};\n }\n\n /* ============================= Virtual ============================ */\n & ${p}-tbody-virtual {\n &\n ${p}-tbody-virtual-holder-inner\n > ${p}-row,\n &\n ${p}-tbody-virtual-holder-inner\n > div:not(${p}-row)\n > ${p}-row {\n display: flex;\n box-sizing: border-box;\n width: 100%;\n\n & > ${p}-cell {\n align-content: center;\n }\n }\n\n & ${p}-cell {\n border-block-end: ${border};\n background: ${cellBg};\n transition: background-color ${cssVar.motionDurationMid};\n }\n\n & ${p}-tbody-virtual-scrollbar {\n cursor: pointer;\n\n &:hover {\n background-color: ${cssVar.colorFillQuaternary};\n }\n }\n\n & ${p}-expanded-row ${p}-expanded-row-cell${p}-expanded-row-cell-fixed {\n position: sticky;\n inset-inline-start: 0;\n overflow: hidden;\n width: calc(var(--virtual-width) - 1px);\n }\n }\n `,\n };\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"style.mjs","names":[],"sources":["../../../src/base-ui/Table/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\n/** Own prefix so rc-table classNames never collide with antd's global `.ant-table` CSS. */\nexport const PREFIX_CLS = 'lobe-table';\n\nconst p = `.${PREFIX_CLS}`;\n\n// Cell padding comes from the size class through these vars, so title / footer / expanded rows\n// can reuse (and negate) it.\nconst PADDING_BLOCK = '--lobe-table-padding-block';\nconst PADDING_INLINE = '--lobe-table-padding-inline';\n\n// Matches antd's `zIndexTableFixed`.\nconst Z_FIXED = 2;\n\n// antd `expandColumnWidth`; nested tables start after it.\nexport const EXPAND_COLUMN_WIDTH = 48;\n\n// antd `selectionColumnWidth`, plus the `selections` trigger when there is one.\nexport const SELECTION_COLUMN_WIDTH = 32;\nexport const SELECTION_DROPDOWN_WIDTH = 24;\n\n/** Rows of this table's own sections only, so the rules never leak into nested tables. */\nconst ownRows = ['content', 'header', 'body', 'summary']\n .map((section) => `& > ${p}-container > ${p}-${section} > table > * > tr`)\n .join(', ');\nconst ownCells = (cell: string) =>\n ownRows\n .split(', ')\n .map((row) => `${row} > ${cell}`)\n .join(', ');\n\nexport const styles = createStaticStyles(({ css, cssVar }) => {\n // Light colorFill / dark colorFillSecondary (see --lobe-fill-border in ThemeProvider).\n const borderColor = `var(--lobe-fill-border, ${cssVar.colorFill})`;\n const border = `1px solid ${borderColor}`;\n // Dark: colorFillQuaternary on the clipped container; unset in light so variants keep their fills.\n const surface = (light: string) => `var(--lobe-table-surface, ${light})`;\n // Cell background. Every table root resets it to colorBgContainer (so nested / borderless\n // tables never inherit it); outlined / filled switch it to transparent in dark.\n const cellBg = `var(--lobe-table-cell, ${cssVar.colorBgContainer})`;\n // The variant fill that opaque composites (fixed cells, sticky holder, summary) repeat\n // once. Reset to transparent per root; outlined / filled set it to the dark surface.\n const fill = 'var(--lobe-table-fill, transparent)';\n // Row states: translucent fills on the cell only (never on tr), same for every variant,\n // normal / fixed cells and the virtual body.\n const hoverBg = cssVar.colorFillTertiary;\n const selectedBg = `color-mix(in srgb, ${cssVar.colorPrimary} 6%, transparent)`;\n const selectedHoverBg = `color-mix(in srgb, ${cssVar.colorPrimary} 10%, transparent)`;\n // Fixed cells are see-through. Their frosted backdrop is not painted per cell (each box\n // would blur on its own and show seams at every row): FixedFrost portals one sticky pane\n // per fixed side into each scroll host (frostRail / frostStart / frostEnd below). The\n // sticky header is a single element and blurs itself.\n const frost = `\n -webkit-backdrop-filter: blur(16px);\n backdrop-filter: blur(16px);\n `;\n const variantVars = `\n --lobe-table-cell: var(--lobe-table-cell-bg, ${cssVar.colorBgContainer});\n --lobe-table-fill: var(--lobe-table-surface, transparent);\n `;\n const fixShadowBase = `\n pointer-events: none;\n content: '';\n position: absolute;\n inset-block: 0 -1px;\n width: 30px;\n transition: box-shadow ${cssVar.motionDurationSlow};\n `;\n const startShadow = `box-shadow: inset 10px 0 8px -8px ${cssVar.colorSplit};`;\n const endShadow = `box-shadow: inset -10px 0 8px -8px ${cssVar.colorSplit};`;\n\n return {\n outlined: css`\n &${p}-outlined {\n ${variantVars}\n /* The square root must not paint behind the rounded frame: the clipped container\n is the ONE layer carrying the body (light colorBgContainer, dark\n colorFillQuaternary). Title / footer are siblings, so they paint it once too. */\n background: transparent;\n\n & > ${p}-container {\n background: ${surface(cssVar.colorBgContainer)};\n }\n\n & > ${p}-title, & > ${p}-footer {\n background: ${surface(cssVar.colorBgContainer)};\n }\n\n & > ${p}-title {\n border: ${border};\n border-block-end: 0;\n border-start-start-radius: ${cssVar.borderRadiusLG};\n border-start-end-radius: ${cssVar.borderRadiusLG};\n }\n\n /* The container draws the full frame (incl. bottom). Last-row borders used to stand\n in for the bottom edge, but with scroll.y / virtual the last row sits inside the\n body viewport - overflow:clip + radius then eats that line at the rounded corners.\n No column dividers (grouped headers included): rows are split horizontally only. */\n & > ${p}-container {\n overflow: clip;\n border: ${border};\n border-radius: ${cssVar.borderRadiusLG};\n\n /* Same lift as the dashboard Surface card (both modes). Outer shadow on the framed\n container is not clipped by its own overflow. */\n box-shadow: rgb(0 0 0 / 4%) 0 1px 2px 0;\n }\n\n & > ${p}-title + ${p}-container {\n border-start-start-radius: 0;\n border-start-end-radius: 0;\n }\n\n &:has(> ${p}-footer) > ${p}-container {\n border-block-end: 0;\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n }\n\n & > ${p}-footer {\n border: ${border};\n border-block-start: 0;\n border-end-start-radius: ${cssVar.borderRadiusLG};\n border-end-end-radius: ${cssVar.borderRadiusLG};\n }\n\n /* Every header row (including the last) draws one bottom edge — no inset\n shadow underneath, or group headers look double-thick. */\n & > ${p}-container > * > table > thead > tr > th {\n border-block-end: ${border};\n\n /* Extra FillQuaternary layer on top of the container fill. */\n background: ${cellBg};\n box-shadow: inset 0 999px 0 ${cssVar.colorFillQuaternary};\n }\n\n /* Fixed cells: see-through (container fill shows) + backdrop blur only. */\n & ${p}-tbody > tr > td${p}-cell-fix, & ${p}-tbody-virtual ${p}-cell${p}-cell-fix {\n background: transparent;\n box-shadow: none;\n }\n\n /* Header: container fill + one Quaternary wash (box-shadow), like other th. */\n & ${p}-thead > tr > th${p}-cell-fix, & ${p}-thead > tr > td${p}-cell-fix {\n background: transparent;\n box-shadow: inset 0 999px 0 ${cssVar.colorFillQuaternary};\n }\n }\n `,\n\n /* Mirrors Block \\`filled\\`: one colorFillTertiary (dark: colorFillQuaternary on the clipped\n container) surface straight on the parent and no frame border. */\n /* FixedFrost rail: absolute over the table (or the virtual row layer), z-index 1 puts it\n above scrolling cells (z auto) and under fixed cells (z >= 2). */\n frostRail: css`\n pointer-events: none;\n\n position: absolute;\n z-index: 1;\n inset-block-start: 0;\n inset-inline-start: 0;\n\n display: flex;\n `,\n frostStart: css`\n position: sticky;\n inset-inline-start: 0;\n flex: none;\n height: 100%;\n ${frost}\n `,\n frostEnd: css`\n position: sticky;\n inset-inline-end: 0;\n\n flex: none;\n\n height: 100%;\n margin-inline-start: auto;\n ${frost}\n `,\n filled: css`\n &${p}-filled {\n ${variantVars}\n /* Filled owns its fill in both modes (Block filled = colorFillTertiary; dark uses the\n Quaternary surface) and its opaque base is the page behind it, not colorBgContainer. */\n --lobe-table-fill: var(--lobe-table-surface, ${cssVar.colorFillTertiary});\n\n /* Root stays clear (square box, would bleed past the rounded corners); the clipped\n container is the ONE fill layer: light FillTertiary, dark colorFillQuaternary. */\n background: transparent;\n\n & > ${p}-title, & > ${p}-footer {\n border-radius: ${cssVar.borderRadiusLG};\n background: ${fill};\n }\n\n & > ${p}-title {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n }\n\n & > ${p}-footer {\n border-start-start-radius: 0;\n border-start-end-radius: 0;\n }\n\n & > ${p}-container {\n overflow: clip;\n border-radius: ${cssVar.borderRadiusLG};\n background: ${fill};\n }\n\n & > ${p}-title + ${p}-container {\n border-start-start-radius: 0;\n border-start-end-radius: 0;\n }\n\n &:has(> ${p}-footer) > ${p}-container {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n }\n\n /* Header band: one extra FillQuaternary wash over the container fill. */\n & ${p}-thead > tr > th,\n & ${p}-thead > tr > td {\n background: transparent;\n box-shadow:\n inset 0 -1px 0 ${borderColor},\n inset 0 999px 0 ${cssVar.colorFillQuaternary};\n }\n\n /* Row dividers stay on (base border rule); body is clear over the container fill. */\n & ${p}-tbody > tr > td,\n & ${p}-tbody > tr > th,\n & ${p}-tbody-virtual ${p}-cell {\n background: transparent;\n }\n\n /* Fixed cells: see-through + blur; header keeps the same divider + wash as every th. */\n & ${p}-thead > tr > th${p}-cell-fix, & ${p}-thead > tr > td${p}-cell-fix {\n background: transparent;\n box-shadow:\n inset 0 -1px 0 ${borderColor},\n inset 0 999px 0 ${cssVar.colorFillQuaternary};\n }\n\n & ${p}-tbody > tr > td${p}-cell-fix {\n background: transparent;\n box-shadow: none;\n }\n }\n `,\n /**\n * Borderless: everything but the header is see-through, so the table sits on whatever\n * surface hosts it. Hover / selected rows are translucent fills. Fixed (sticky) cells\n * are see-through with a frosted backdrop so scrolled content stays obscured.\n */\n borderless: css`\n && {\n background: transparent;\n }\n\n && ${p}-tbody > tr > td,\n && ${p}-tbody > tr > th,\n && ${p}-tbody-virtual ${p}-cell, && ${p}-summary, && ${p}-summary > tr > td,\n && ${p}-summary > tr > th,\n && > ${p}-footer {\n background: transparent;\n }\n\n && ${p}-tbody > tr > td${p}-cell-row-hover, && ${p}-tbody-virtual ${p}-row:hover > ${p}-cell {\n background: ${hoverBg};\n }\n\n && ${p}-tbody > tr${p}-row-selected > td {\n background: ${selectedBg};\n\n &${p}-cell-row-hover {\n background: ${selectedHoverBg};\n }\n }\n\n &&\n ${p}-tbody\n > tr\n > td${p}-cell-fix,\n &&\n ${p}-tbody\n > tr\n > th${p}-cell-fix,\n &&\n ${p}-tbody-virtual\n ${p}-cell${p}-cell-fix {\n background: transparent;\n }\n\n && ${p}-tbody > tr > td${p}-cell-fix${p}-cell-row-hover {\n background: ${hoverBg};\n }\n\n && ${p}-tbody > tr${p}-row-selected > td${p}-cell-fix {\n background: ${selectedBg};\n\n &${p}-cell-row-hover {\n background: ${selectedHoverBg};\n }\n }\n `,\n /**\n * Grouped (multi-level) headers only: column dividers in header and body so the\n * group spans stay readable. Plain tables never get vertical dividers.\n */\n grouped: css`\n ${ownCells('th')}, ${ownCells('td')} {\n border-inline-end: ${border};\n }\n\n & ${p}-tbody-virtual ${p}-cell {\n border-inline-end: ${border};\n }\n\n /* Outlined: the container already draws the trailing edge. Other variants: the\n rightmost body cell and first header row cell stop at the table edge. */\n &:not(${p}-outlined) ${p}-tbody > tr > td:last-child,\n &:not(${p}-outlined) ${p}-thead > tr:first-child > th:last-child,\n &${p}-outlined ${p}-tbody > tr > td:last-child,\n &${p}-outlined ${p}-thead > tr:first-child > th:last-child {\n border-inline-end: 0;\n }\n `,\n clickable: css`\n cursor: pointer;\n `,\n /** Title text of an `ellipsis` column; truncates inside the sort button / header controls. */\n columnTitle: css`\n overflow: hidden;\n\n min-width: 0;\n\n text-overflow: ellipsis;\n word-break: keep-all;\n white-space: nowrap;\n `,\n filterActive: css`\n &&,\n &&:hover {\n color: ${cssVar.colorPrimary};\n }\n `,\n filterButton: css`\n flex: none;\n margin-block: -4px;\n `,\n filterButtons: css`\n display: flex;\n gap: 8px;\n align-items: center;\n justify-content: space-between;\n\n padding-block: 7px;\n padding-inline: 8px;\n border-block-start: 1px solid ${cssVar.colorSplit};\n `,\n filterCheckAll: css`\n margin-block-end: 4px;\n padding-inline: 4px;\n `,\n filterDropdown: css`\n display: flex;\n flex-direction: column;\n min-width: 120px;\n `,\n filterEmpty: css`\n padding-block: 16px;\n padding-inline: 0;\n `,\n filterGroup: css`\n display: flex;\n flex-direction: column;\n\n & > div:not(:first-child) {\n padding-inline-start: 20px;\n }\n `,\n filterGroupTitle: css`\n padding-block: 5px;\n padding-inline: 8px;\n font-size: 12px;\n color: ${cssVar.colorTextDescription};\n `,\n filterItem: css`\n display: flex;\n align-items: center;\n\n padding-block: 5px;\n padding-inline: 8px;\n border-radius: ${cssVar.borderRadiusSM};\n\n white-space: nowrap;\n\n &:hover {\n background: ${cssVar.colorFillTertiary};\n }\n\n & > label {\n cursor: pointer;\n flex: 1;\n }\n `,\n filterMenu: css`\n overflow: auto;\n display: flex;\n flex-direction: column;\n\n max-height: 264px;\n padding: 4px;\n `,\n filterPopup: css`\n overflow: hidden;\n padding: 0;\n `,\n filterSearch: css`\n padding: 8px;\n border-block-end: 1px solid ${cssVar.colorSplit};\n `,\n filterTree: css`\n overflow: auto;\n max-height: 264px;\n padding: 8px;\n `,\n headerInner: css`\n display: inline-flex;\n gap: 6px;\n align-items: center;\n\n min-width: 0;\n max-width: 100%;\n\n vertical-align: middle;\n `,\n hoverable: css`\n /* &&& outranks the variant cell rules (filled clear cells, transparent fixed cells). */\n &&& ${p}-tbody > tr > ${p}-cell-row-hover, &&& ${p}-tbody-virtual ${p}-row:hover > ${p}-cell {\n background: ${hoverBg};\n }\n `,\n loading: css`\n position: absolute;\n z-index: calc(var(--columns-count, 1) * 2 + ${Z_FIXED} + 2);\n inset: 0;\n\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: center;\n justify-content: center;\n\n color: ${cssVar.colorTextSecondary};\n\n background: color-mix(in srgb, ${cssVar.colorBgContainer} 60%, transparent);\n `,\n /**\n * Empty-state loading body. Tracks follow leaf column widths so bars sit under the\n * live header; cell padding reuses the size CSS vars on the table ancestor.\n */\n skeleton: css`\n display: flex;\n flex-direction: column;\n\n width: 100%;\n min-width: 0;\n\n text-align: start;\n `,\n skeletonCell: css`\n display: flex;\n align-items: center;\n\n min-width: 0;\n padding-block: var(${PADDING_BLOCK});\n padding-inline: var(${PADDING_INLINE});\n `,\n skeletonRow: css`\n display: grid;\n align-items: stretch;\n\n width: 100%;\n min-width: 0;\n border-block-end: 1px solid ${borderColor};\n\n &:last-child {\n border-block-end: 0;\n }\n `,\n // antd `paginationMargin` (token.margin): keep the pager off the table above and off\n // whatever sits below the table.\n pagination: css`\n display: flex;\n margin-block: 16px;\n `,\n paginationCenter: css`\n justify-content: center;\n `,\n paginationEnd: css`\n justify-content: flex-end;\n `,\n paginationStart: css`\n justify-content: flex-start;\n `,\n paginationTop: css`\n margin-block: 0 16px;\n `,\n root: css`\n min-width: 0;\n `,\n /** Header box of the selection column; `selectionExtra` hangs off its end. */\n selection: css`\n position: relative;\n display: inline-flex;\n flex-direction: column;\n vertical-align: middle;\n `,\n selectionColumn: css`\n && {\n padding-inline: 8px;\n text-align: center;\n }\n\n & > * {\n vertical-align: middle;\n }\n `,\n selectionExtra: css`\n position: absolute;\n z-index: 1;\n inset-block-start: 0;\n\n display: flex;\n align-items: center;\n\n height: 100%;\n margin-inline-start: 100%;\n padding-inline-start: 2px;\n `,\n selectionRadioGroup: css`\n display: inline-flex;\n vertical-align: middle;\n `,\n selectionTrigger: css`\n flex: none;\n margin-block: -4px;\n `,\n sizeLarge: css`\n ${PADDING_BLOCK}: 16px;\n ${PADDING_INLINE}: 16px;\n\n /* Same as VIRTUAL_ROW_HEIGHT in Table.tsx (padding * 2 + 22px line + 1px divider). */\n --lobe-table-virtual-row-height: calc(16px * 2 + 23px);\n `,\n sizeMedium: css`\n ${PADDING_BLOCK}: 12px;\n ${PADDING_INLINE}: 16px;\n\n /* Same as VIRTUAL_ROW_HEIGHT in Table.tsx (padding * 2 + 22px line + 1px divider). */\n --lobe-table-virtual-row-height: calc(12px * 2 + 23px);\n `,\n sizeSmall: css`\n ${PADDING_BLOCK}: 8px;\n ${PADDING_INLINE}: 12px;\n\n /* Same as VIRTUAL_ROW_HEIGHT in Table.tsx (padding * 2 + 22px line + 1px divider). */\n --lobe-table-virtual-row-height: calc(8px * 2 + 23px);\n `,\n // Title + sort ActionIcon row (not a button — the ActionIcon owns the click).\n sortButton: css`\n display: inline-flex;\n gap: 4px;\n align-items: center;\n\n min-width: 0;\n max-width: 100%;\n `,\n // Matches the filter trigger: small ActionIcon with a slight negative margin so the\n // 24px block does not grow the header.\n sortCaret: css`\n flex: none;\n margin-block: -4px;\n `,\n sortTitle: css`\n cursor: pointer;\n min-width: 0;\n `,\n sortedColumn: css`\n ${p}-tbody > tr > &${p}-cell {\n background: ${cssVar.colorFillQuaternary};\n }\n `,\n spinContainer: css`\n position: relative;\n `,\n table: css`\n /* Reset per root so nested / borderless tables never inherit a parent's variant vars. */\n --lobe-table-cell: ${cssVar.colorBgContainer};\n --lobe-table-fill: transparent;\n\n font-size: 14px;\n color: ${cssVar.colorText};\n background: ${cssVar.colorBgContainer};\n\n & table {\n border-spacing: 0;\n border-collapse: separate;\n width: 100%;\n text-align: start;\n }\n\n /* ============================== Cell ============================== */\n & ${p}-cell, & ${p}-thead > tr > th,\n & ${p}-tbody > tr > td,\n & tfoot > tr > th,\n & tfoot > tr > td {\n position: relative;\n\n padding-block: var(${PADDING_BLOCK});\n padding-inline: var(${PADDING_INLINE});\n\n overflow-wrap: break-word;\n\n /* The global \\`* { vertical-align: baseline }\\` reset drops the UA's middle for cells. */\n vertical-align: middle;\n }\n\n /* Row-merged body cells (rowSpan > 1, table and virtual body alike) get vertical\n dividers so the block reads apart from the neighbour rows' lines. Drawn on ::before\n (::after is the fixed-column scroll shadow) so cell box-shadows stay untouched. The\n first / last column skip the edge the frame or table edge already provides. */\n & ${p}-tbody > tr > td[rowspan]:not([rowspan='0'], [rowspan='1'])::before,\n & ${p}-tbody-virtual ${p}-cell[rowspan]:not([rowspan='0'], [rowspan='1'])::before {\n pointer-events: none;\n content: '';\n\n position: absolute;\n inset: 0;\n\n border-inline: ${border};\n }\n\n & ${p}-tbody > tr > td[rowspan]:first-child::before,\n & ${p}-tbody-virtual ${p}-cell[rowspan]:first-child::before {\n border-inline-start: 0;\n }\n\n & ${p}-tbody > tr > td[rowspan]:last-child::before,\n & ${p}-tbody-virtual ${p}-cell[rowspan]:last-child::before {\n border-inline-end: 0;\n }\n\n & ${p}-thead > tr > th,\n & ${p}-thead > tr > td {\n font-size: 13px;\n font-weight: 500;\n color: ${cssVar.colorTextSecondary};\n text-align: start;\n\n /* Clear in dark (outlined) so the container fill shows; Quaternary is the extra header layer. */\n background: ${cellBg};\n box-shadow:\n inset 0 -1px 0 ${borderColor},\n inset 0 999px 0 ${cssVar.colorFillQuaternary};\n\n &[colspan]:not([colspan='1']) {\n text-align: center;\n }\n }\n\n /* th covers rowScope row headers. */\n & ${p}-tbody > tr > td,\n & ${p}-tbody > tr > th {\n border-block-end: ${border};\n\n font-weight: inherit;\n font-variant-numeric: tabular-nums;\n text-align: start;\n\n /* Clear in dark (outlined) so the container fill shows through. */\n background: ${cellBg};\n\n transition: background-color ${cssVar.motionDurationMid};\n }\n\n /* Filled / outlined drop the last body divider: filled because its fill is the edge,\n outlined because the container now draws the frame bottom (avoids a double line, and\n keeps the outline when scroll.y / virtual would otherwise scroll the last-row edge\n away). Borderless keeps it as the closing rule under the rows. */\n &${p}-filled ${p}-tbody > tr:last-child > td,\n &${p}-filled ${p}-tbody > tr:last-child > th,\n &${p}-outlined ${p}-tbody > tr:last-child > td,\n &${p}-outlined ${p}-tbody > tr:last-child > th {\n border-block-end: 0;\n }\n\n /* Borderless with a summary: tfoot draws its own top rule, so skip the last-row one. */\n &${p}-borderless table:has(> tfoot) > ${p}-tbody > tr:last-child > td,\n &${p}-borderless table:has(> tfoot) > ${p}-tbody > tr:last-child > th {\n border-block-end: 0;\n }\n\n & ${p}-tbody > tr${p}-placeholder > td {\n padding-block: 32px;\n color: ${cssVar.colorTextDescription};\n text-align: center;\n }\n\n /* Skeleton loading fills the placeholder like real body rows. */\n & ${p}-tbody > tr${p}-placeholder > td:has([data-table-skeleton]) {\n padding: 0;\n color: inherit;\n text-align: start;\n vertical-align: top;\n }\n\n & ${p}-cell-scrollbar:not([rowspan]) {\n box-shadow: 0 1px 0 1px ${cssVar.colorFillQuaternary};\n }\n\n /* ============================ Ellipsis ============================ */\n & ${p}-cell-ellipsis {\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: keep-all;\n white-space: nowrap;\n\n &${p}-cell-fix-start-shadow, &${p}-cell-fix-end-shadow {\n overflow: visible;\n\n & ${p}-cell-content {\n overflow: hidden;\n display: block;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n }\n\n /* ========================== Title / Footer ========================= */\n & > ${p}-title, & > ${p}-footer {\n padding-block: var(${PADDING_BLOCK});\n padding-inline: var(${PADDING_INLINE});\n }\n\n & > ${p}-footer {\n color: ${cssVar.colorText};\n background: ${cssVar.colorFillQuaternary};\n }\n\n /* ============================== Fixed ============================= */\n & ${p}-container {\n position: relative;\n\n &::before,\n &::after {\n ${fixShadowBase}\n z-index: calc(var(--columns-count, 1) * 2 + ${Z_FIXED} + 1);\n }\n\n &::before {\n inset-inline-start: 0;\n }\n\n &::after {\n inset-inline-end: 0;\n }\n }\n\n &${p}-has-fix-start > ${p}-container::before, &${p}-has-fix-end > ${p}-container::after {\n display: none;\n }\n\n &${p}-fix-start-shadow-show > ${p}-container::before {\n ${startShadow}\n }\n\n &${p}-fix-end-shadow-show > ${p}-container::after {\n ${endShadow}\n }\n\n /* Must outrank the generic cell rule that sets position: relative. */\n &\n ${p}-thead\n > tr\n > th${p}-cell-fix,\n &\n ${p}-tbody\n > tr\n > td${p}-cell-fix,\n &\n ${p}-cell${p}-cell-fix {\n position: sticky;\n z-index: calc(var(--z-offset-reverse) + ${Z_FIXED});\n }\n\n & ${p}-cell-fix {\n background: transparent;\n\n &::after {\n ${fixShadowBase}\n }\n }\n\n & ${p}-cell-fix-start::after {\n inset-inline-start: 100%;\n }\n\n & ${p}-cell-fix-end::after {\n inset-inline-end: 100%;\n }\n\n & ${p}-cell-fix-start-shadow-show::after {\n ${startShadow}\n }\n\n & ${p}-cell-fix-end-shadow-show::after {\n ${endShadow}\n }\n\n /* ============================= Sticky ============================= */\n & ${p}-sticky-holder {\n position: sticky;\n z-index: calc(var(--columns-count, 1) * 2 + ${Z_FIXED} + 1);\n background: transparent;\n\n /* The whole sticky header is one element, so it blurs as one continuous block. */\n ${frost}\n }\n\n & ${p}-sticky-scroll {\n position: sticky;\n z-index: calc(var(--columns-count, 1) * 2 + ${Z_FIXED} + 1);\n inset-block-end: 0;\n }\n\n /* ============================ Selection =========================== */\n & ${p}-selection-col {\n width: ${SELECTION_COLUMN_WIDTH}px;\n\n &${p}-selection-col-with-dropdown {\n width: ${SELECTION_COLUMN_WIDTH + SELECTION_DROPDOWN_WIDTH}px;\n }\n }\n\n &${p}-outlined ${p}-selection-col {\n width: ${SELECTION_COLUMN_WIDTH + 16}px;\n\n &${p}-selection-col-with-dropdown {\n width: ${SELECTION_COLUMN_WIDTH + SELECTION_DROPDOWN_WIDTH + 16}px;\n }\n }\n\n /* The table css carries no hoverable class, so use a fourth & to outrank hover too. */\n &&&& ${p}-tbody > tr${p}-row-selected > td {\n background: ${selectedBg};\n\n &${p}-cell-row-hover {\n background: ${selectedHoverBg};\n }\n }\n\n /* ========================= Expand / Tree ========================== */\n & ${p}-expand-icon-col {\n width: ${EXPAND_COLUMN_WIDTH}px;\n }\n\n & ${p}-row-expand-icon-cell {\n text-align: center;\n\n & ${p}-row-expand-icon {\n float: none;\n display: inline-flex;\n vertical-align: sub;\n }\n }\n\n & ${p}-row-indent {\n float: inline-start;\n height: 1px;\n }\n\n & ${p}-row-expand-icon {\n float: inline-start;\n flex: none;\n vertical-align: middle;\n\n &${p}-row-expand-icon-spaced {\n display: inline-block;\n width: 24px;\n height: 24px;\n visibility: hidden;\n }\n }\n\n & ${p}-row-indent + ${p}-row-expand-icon {\n margin-block: -1px;\n margin-inline-end: 8px;\n }\n\n & tr${p}-expanded-row > td,\n & tr${p}-expanded-row:hover > td {\n background: ${cssVar.colorFillQuaternary};\n }\n\n & ${p}-expanded-row-fixed {\n position: relative;\n\n margin-block: calc(var(${PADDING_BLOCK}) * -1);\n margin-inline: calc(var(${PADDING_INLINE}) * -1);\n padding-block: var(${PADDING_BLOCK});\n padding-inline: var(${PADDING_INLINE});\n }\n\n /* ========================== Nested table ========================== */\n\n /* A table alone in a cell fills it, starting after the expand column. */\n &\n ${p}-tbody\n > tr\n > td\n > ${p}-wrapper:only-child,\n &\n ${p}-tbody\n > tr\n > td\n > ${p}-expanded-row-fixed\n > ${p}-wrapper:only-child {\n & ${p} {\n margin-block: calc(var(${PADDING_BLOCK}) * -1);\n margin-inline: calc(${EXPAND_COLUMN_WIDTH}px - var(${PADDING_INLINE}))\n calc(var(${PADDING_INLINE}) * -1);\n }\n\n & ${p}-tbody > tr:last-child > td {\n border-block-end: 0;\n }\n\n /* The outer cell already draws the frame: keep only the start edge of a bordered nest. */\n & ${p}${p}-outlined {\n & > ${p}-title, & > ${p}-container, & > ${p}-footer {\n border-block: 0;\n border-inline-end: 0;\n border-radius: 0;\n box-shadow: none;\n }\n\n & > ${p}-title + ${p}-container {\n border-block-start: ${border};\n }\n\n &:has(> ${p}-footer) > ${p}-container {\n border-block-end: ${border};\n }\n }\n }\n\n &${p}-outlined ${p}-tbody > tr > td > ${p}-expanded-row-fixed {\n margin-inline: calc((var(${PADDING_INLINE}) + 1px) * -1);\n }\n\n /* ============================= Summary ============================ */\n & ${p}-summary {\n position: relative;\n z-index: ${Z_FIXED};\n\n /* See-through; a sticky summary is a sticky holder and gets its frost there. */\n background: transparent;\n\n & > tr > th,\n & > tr > td {\n border-block-end: ${border};\n }\n }\n\n & div${p}-summary {\n box-shadow: 0 -1px 0 ${borderColor};\n }\n\n /* A fixed summary under \\`sticky\\` is a sticky holder too; keep it sticky (antd orders sticky last). */\n & ${p}-summary${p}-sticky-holder {\n position: sticky;\n z-index: calc(var(--columns-count, 1) * 2 + ${Z_FIXED} + 1);\n }\n\n & tfoot > tr > th,\n & tfoot > tr > td {\n border-block-start: ${border};\n }\n\n /* ============================= Virtual ============================ */\n & ${p}-tbody-virtual {\n &\n ${p}-tbody-virtual-holder-inner\n > ${p}-row,\n &\n ${p}-tbody-virtual-holder-inner\n > div:not(${p}-row)\n > ${p}-row {\n display: flex;\n box-sizing: border-box;\n width: 100%;\n\n /* Virtual rows are locked to the listItemHeight estimate (an integer). Measured\n heights then equal the estimate, so a rowSpan cell (height = summed row sizes)\n ends exactly on the neighbour rows' divider instead of drifting by sub-pixel\n rounding or unmeasured-row estimates. */\n &:not(${p}-row-extra, ${p}-expanded-row) {\n height: var(--lobe-table-virtual-row-height);\n }\n\n & > ${p}-cell {\n align-content: center;\n }\n }\n\n & ${p}-cell {\n border-block-end: ${border};\n background: ${cellBg};\n transition: background-color ${cssVar.motionDurationMid};\n }\n\n & ${p}-expanded-row ${p}-expanded-row-cell${p}-expanded-row-cell-fixed {\n position: sticky;\n inset-inline-start: 0;\n overflow: hidden;\n width: calc(var(--virtual-width) - 1px);\n }\n }\n `,\n };\n});\n"],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ declare const variants: (props?: ({
|
|
|
42
42
|
mark?: boolean | null | undefined;
|
|
43
43
|
shiny?: boolean | null | undefined;
|
|
44
44
|
strong?: boolean | null | undefined;
|
|
45
|
-
type?: "
|
|
45
|
+
type?: "danger" | "warning" | "success" | "info" | "secondary" | null | undefined;
|
|
46
46
|
underline?: boolean | null | undefined;
|
|
47
47
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
48
48
|
//#endregion
|