@lobehub/ui 5.61.1 → 5.62.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/es/base-ui/ProTable/ColumnSetting.mjs +156 -0
  2. package/es/base-ui/ProTable/ColumnSetting.mjs.map +1 -0
  3. package/es/base-ui/ProTable/FieldControl.mjs +108 -0
  4. package/es/base-ui/ProTable/FieldControl.mjs.map +1 -0
  5. package/es/base-ui/ProTable/LightFilter.mjs +71 -0
  6. package/es/base-ui/ProTable/LightFilter.mjs.map +1 -0
  7. package/es/base-ui/ProTable/OptionPopover.mjs +21 -0
  8. package/es/base-ui/ProTable/OptionPopover.mjs.map +1 -0
  9. package/es/base-ui/ProTable/ProTable.d.mts +13 -0
  10. package/es/base-ui/ProTable/ProTable.mjs +651 -0
  11. package/es/base-ui/ProTable/ProTable.mjs.map +1 -0
  12. package/es/base-ui/ProTable/SearchForm.mjs +138 -0
  13. package/es/base-ui/ProTable/SearchForm.mjs.map +1 -0
  14. package/es/base-ui/ProTable/index.d.mts +3 -0
  15. package/es/base-ui/ProTable/index.mjs +1 -0
  16. package/es/base-ui/ProTable/renderValue.mjs +118 -0
  17. package/es/base-ui/ProTable/renderValue.mjs.map +1 -0
  18. package/es/base-ui/ProTable/style.mjs +373 -0
  19. package/es/base-ui/ProTable/style.mjs.map +1 -0
  20. package/es/base-ui/ProTable/type.d.mts +343 -0
  21. package/es/base-ui/ProTable/useFetchData.mjs +98 -0
  22. package/es/base-ui/ProTable/useFetchData.mjs.map +1 -0
  23. package/es/base-ui/ProTable/useSearchForm.mjs +151 -0
  24. package/es/base-ui/ProTable/useSearchForm.mjs.map +1 -0
  25. package/es/base-ui/ProTable/utils.mjs +102 -0
  26. package/es/base-ui/ProTable/utils.mjs.map +1 -0
  27. package/es/base-ui/Table/Table.mjs +18 -4
  28. package/es/base-ui/Table/Table.mjs.map +1 -1
  29. package/es/base-ui/Table/index.d.mts +2 -2
  30. package/es/base-ui/Table/type.d.mts +21 -5
  31. package/es/base-ui/Table/useSorter.mjs +13 -1
  32. package/es/base-ui/Table/useSorter.mjs.map +1 -1
  33. package/es/base-ui/index.d.mts +2 -2
  34. package/es/dashboard/ConsoleShell/style.mjs +3 -1
  35. package/es/dashboard/ConsoleShell/style.mjs.map +1 -1
  36. package/es/dashboard/MetricStrip/MetricCell.mjs +25 -14
  37. package/es/dashboard/MetricStrip/MetricCell.mjs.map +1 -1
  38. package/es/dashboard/MetricStrip/style.mjs +14 -0
  39. package/es/dashboard/MetricStrip/style.mjs.map +1 -1
  40. package/es/dashboard/MetricStrip/type.d.mts +2 -0
  41. package/es/dashboard/StatCard/StatCard.d.mts +1 -1
  42. package/es/dashboard/StatCard/StatCard.mjs +2 -1
  43. package/es/dashboard/StatCard/StatCard.mjs.map +1 -1
  44. package/es/dashboard/StatCard/type.d.mts +2 -0
  45. package/es/dashboard/Surface/style.d.mts +3 -2
  46. package/es/dashboard/Surface/style.mjs +7 -3
  47. package/es/dashboard/Surface/style.mjs.map +1 -1
  48. package/package.json +5 -1
@@ -0,0 +1,102 @@
1
+ //#region src/base-ui/ProTable/utils.ts
2
+ const isNil = (value) => value === null || value === void 0;
3
+ const isEmptyValue = (value) => isNil(value) || value === "" || Array.isArray(value) && value.length === 0;
4
+ /** Field / state key of a column: `key`, then the dot-joined `dataIndex`, then its position. */
5
+ const getProColumnKey = (column, index) => {
6
+ if (!isNil(column.key)) return String(column.key);
7
+ const { dataIndex } = column;
8
+ if (Array.isArray(dataIndex)) return dataIndex.join(".");
9
+ if (!isNil(dataIndex)) return String(dataIndex);
10
+ return `col-${index}`;
11
+ };
12
+ /** The name a column takes in the search form (and in `params`). */
13
+ const getFieldName = (column, index) => {
14
+ const { dataIndex } = column;
15
+ if (Array.isArray(dataIndex)) return dataIndex.join(".");
16
+ if (!isNil(dataIndex)) return String(dataIndex);
17
+ return getProColumnKey(column, index);
18
+ };
19
+ const getByPath = (record, dataIndex) => {
20
+ if (isNil(dataIndex) || isNil(record)) return void 0;
21
+ return (Array.isArray(dataIndex) ? dataIndex : [dataIndex]).reduce((acc, key) => isNil(acc) ? void 0 : acc[key], record);
22
+ };
23
+ /** Set `a.b.c` style names into a nested object. */
24
+ const setByPath = (target, name, value) => {
25
+ const path = name.split(".");
26
+ let cursor = target;
27
+ path.forEach((key, index) => {
28
+ if (index === path.length - 1) {
29
+ cursor[key] = value;
30
+ return;
31
+ }
32
+ if (typeof cursor[key] !== "object" || cursor[key] === null) cursor[key] = {};
33
+ cursor = cursor[key];
34
+ });
35
+ return target;
36
+ };
37
+ const resolveValueType = (column, record) => typeof column.valueType === "function" ? column.valueType(record) : column.valueType;
38
+ const resolveValueEnum = (column, record) => typeof column.valueEnum === "function" ? column.valueEnum(record) : column.valueEnum;
39
+ const isEnumItem = (value) => typeof value === "object" && value !== null && !Array.isArray(value) && "text" in value;
40
+ /** `valueEnum` as an ordered list of `{ value, text, status }`. */
41
+ const valueEnumToList = (valueEnum) => {
42
+ if (!valueEnum) return [];
43
+ return (valueEnum instanceof Map ? [...valueEnum.entries()] : Object.entries(valueEnum)).map(([value, item]) => isEnumItem(item) ? {
44
+ ...item,
45
+ value: String(value)
46
+ } : {
47
+ text: item,
48
+ value: String(value)
49
+ });
50
+ };
51
+ const findValueEnum = (valueEnum, value) => valueEnumToList(valueEnum).find((item) => item.value === String(value));
52
+ const pad = (value) => String(value).padStart(2, "0");
53
+ const formatDate = (date, withTime = false, timeOnly = false) => {
54
+ const day = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
55
+ const time = `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
56
+ if (timeOnly) return time;
57
+ return withTime ? `${day} ${time}` : day;
58
+ };
59
+ const toDate = (value) => {
60
+ if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;
61
+ if (typeof value === "number" || typeof value === "string") {
62
+ const date = new Date(value);
63
+ return Number.isNaN(date.getTime()) ? null : date;
64
+ }
65
+ return null;
66
+ };
67
+ const DATE_TYPES = /* @__PURE__ */ new Set([
68
+ "date",
69
+ "dateTime",
70
+ "time"
71
+ ]);
72
+ const RANGE_TYPES = /* @__PURE__ */ new Set(["dateRange", "dateTimeRange"]);
73
+ const isDateType = (valueType) => !!valueType && (DATE_TYPES.has(valueType) || RANGE_TYPES.has(valueType));
74
+ const formatDateValue = (value, valueType, formatter) => {
75
+ if (Array.isArray(value)) return value.map((item) => formatDateValue(item, valueType, formatter));
76
+ const date = value instanceof Date ? value : null;
77
+ if (!date) return value;
78
+ if (formatter === false) return date;
79
+ if (formatter === "number") return date.getTime();
80
+ if (typeof formatter === "function") return formatter(date, valueType);
81
+ return formatDate(date, valueType === "dateTime" || valueType === "dateTimeRange", valueType === "time");
82
+ };
83
+ const readPersistedState = (key, type = "localStorage") => {
84
+ if (!key || typeof window === "undefined") return void 0;
85
+ try {
86
+ const raw = window[type]?.getItem(key);
87
+ return raw ? JSON.parse(raw) : void 0;
88
+ } catch {
89
+ return;
90
+ }
91
+ };
92
+ const writePersistedState = (key, type = "localStorage", value) => {
93
+ if (!key || typeof window === "undefined") return;
94
+ try {
95
+ if (value) window[type]?.setItem(key, JSON.stringify(value));
96
+ else window[type]?.removeItem(key);
97
+ } catch {}
98
+ };
99
+ //#endregion
100
+ export { findValueEnum, formatDate, formatDateValue, getByPath, getFieldName, getProColumnKey, isDateType, isEmptyValue, isNil, readPersistedState, resolveValueEnum, resolveValueType, setByPath, toDate, valueEnumToList, writePersistedState };
101
+
102
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","names":[],"sources":["../../../src/base-ui/ProTable/utils.ts"],"sourcesContent":["import type { Key, ReactNode } from 'react';\n\nimport type {\n ProColumnType,\n ProTableColumnsStateMap,\n ProTableValueEnum,\n ProTableValueEnumItem,\n ProTableValueType,\n} from './type';\n\nexport const isNil = (value: unknown): value is null | undefined =>\n value === null || value === undefined;\n\nexport const isEmptyValue = (value: unknown) =>\n isNil(value) || value === '' || (Array.isArray(value) && value.length === 0);\n\n/** Field / state key of a column: `key`, then the dot-joined `dataIndex`, then its position. */\nexport const getProColumnKey = (column: ProColumnType<any>, index: number | string): string => {\n if (!isNil(column.key)) return String(column.key);\n const { dataIndex } = column;\n if (Array.isArray(dataIndex)) return dataIndex.join('.');\n if (!isNil(dataIndex)) return String(dataIndex);\n return `col-${index}`;\n};\n\n/** The name a column takes in the search form (and in `params`). */\nexport const getFieldName = (column: ProColumnType<any>, index: number) => {\n const { dataIndex } = column;\n if (Array.isArray(dataIndex)) return dataIndex.join('.');\n if (!isNil(dataIndex)) return String(dataIndex);\n return getProColumnKey(column, index);\n};\n\nexport const getByPath = (record: any, dataIndex: ProColumnType<any>['dataIndex']) => {\n if (isNil(dataIndex) || isNil(record)) return undefined;\n const path = Array.isArray(dataIndex) ? dataIndex : [dataIndex];\n return path.reduce<any>((acc, key) => (isNil(acc) ? undefined : acc[key as any]), record);\n};\n\n/** Set `a.b.c` style names into a nested object. */\nexport const setByPath = (target: Record<string, any>, name: string, value: any) => {\n const path = name.split('.');\n let cursor = target;\n path.forEach((key, index) => {\n if (index === path.length - 1) {\n cursor[key] = value;\n return;\n }\n if (typeof cursor[key] !== 'object' || cursor[key] === null) cursor[key] = {};\n cursor = cursor[key];\n });\n return target;\n};\n\nexport const resolveValueType = (\n column: ProColumnType<any>,\n record?: any,\n): ProTableValueType | undefined =>\n typeof column.valueType === 'function' ? column.valueType(record) : column.valueType;\n\nexport const resolveValueEnum = (\n column: ProColumnType<any>,\n record?: any,\n): ProTableValueEnum | undefined =>\n typeof column.valueEnum === 'function' ? column.valueEnum(record) : column.valueEnum;\n\nconst isEnumItem = (value: unknown): value is ProTableValueEnumItem =>\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n 'text' in (value as Record<string, unknown>);\n\nexport interface ValueEnumEntry {\n color?: string;\n disabled?: boolean;\n status?: ProTableValueEnumItem['status'];\n text: ReactNode;\n value: string;\n}\n\n/** `valueEnum` as an ordered list of `{ value, text, status }`. */\nexport const valueEnumToList = (valueEnum?: ProTableValueEnum): ValueEnumEntry[] => {\n if (!valueEnum) return [];\n const entries: [unknown, unknown][] =\n valueEnum instanceof Map ? [...valueEnum.entries()] : Object.entries(valueEnum);\n return entries.map(([value, item]) =>\n isEnumItem(item)\n ? { ...item, value: String(value) }\n : { text: item as ReactNode, value: String(value) },\n );\n};\n\nexport const findValueEnum = (valueEnum: ProTableValueEnum | undefined, value: unknown) =>\n valueEnumToList(valueEnum).find((item) => item.value === String(value));\n\n// ================================ Dates ================================\n\nconst pad = (value: number) => String(value).padStart(2, '0');\n\nexport const formatDate = (date: Date, withTime = false, timeOnly = false) => {\n const day = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n const time = `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;\n if (timeOnly) return time;\n return withTime ? `${day} ${time}` : day;\n};\n\nexport const toDate = (value: unknown): Date | null => {\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;\n if (typeof value === 'number' || typeof value === 'string') {\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n }\n return null;\n};\n\nconst DATE_TYPES = new Set<ProTableValueType>(['date', 'dateTime', 'time']);\nconst RANGE_TYPES = new Set<ProTableValueType>(['dateRange', 'dateTimeRange']);\n\nexport const isDateType = (valueType?: ProTableValueType) =>\n !!valueType && (DATE_TYPES.has(valueType) || RANGE_TYPES.has(valueType));\nexport const isRangeType = (valueType?: ProTableValueType) =>\n !!valueType && RANGE_TYPES.has(valueType);\n\nexport type DateFormatter = 'string' | 'number' | false | ((value: Date, valueType: string) => any);\n\nexport const formatDateValue = (\n value: unknown,\n valueType: ProTableValueType,\n formatter: DateFormatter,\n): any => {\n if (Array.isArray(value)) return value.map((item) => formatDateValue(item, valueType, formatter));\n const date = value instanceof Date ? value : null;\n if (!date) return value;\n if (formatter === false) return date;\n if (formatter === 'number') return date.getTime();\n if (typeof formatter === 'function') return formatter(date, valueType);\n return formatDate(\n date,\n valueType === 'dateTime' || valueType === 'dateTimeRange',\n valueType === 'time',\n );\n};\n\n// ============================ Columns state ============================\n\nexport const readPersistedState = (\n key?: string,\n type: 'localStorage' | 'sessionStorage' = 'localStorage',\n): ProTableColumnsStateMap | undefined => {\n if (!key || typeof window === 'undefined') return undefined;\n try {\n const raw = window[type]?.getItem(key);\n return raw ? (JSON.parse(raw) as ProTableColumnsStateMap) : undefined;\n } catch {\n return undefined;\n }\n};\n\nexport const writePersistedState = (\n key: string | undefined,\n type: 'localStorage' | 'sessionStorage' = 'localStorage',\n value?: ProTableColumnsStateMap,\n) => {\n if (!key || typeof window === 'undefined') return;\n try {\n if (value) window[type]?.setItem(key, JSON.stringify(value));\n else window[type]?.removeItem(key);\n } catch {\n // Storage may be unavailable (private mode, quota); the in-memory state still works.\n }\n};\n\nexport const toKeyList = (keys: readonly Key[] | undefined) => (keys ? [...keys] : []);\n"],"mappings":"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"}
@@ -23,7 +23,7 @@ import { useTableState } from "./useTableState.mjs";
23
23
  import { memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from "react";
24
24
  import { jsx, jsxs } from "react/jsx-runtime";
25
25
  import { cx } from "antd-style";
26
- import { ArrowDownFromLine, ArrowUpDown, ArrowUpToLine } from "lucide-react";
26
+ import { ArrowDownFromLine, ArrowUpDown, ArrowUpToLine, Inbox } from "lucide-react";
27
27
  import RcTable, { EXPAND_COLUMN, INTERNAL_HOOKS, Summary, VirtualTable, convertChildrenToColumns } from "@rc-component/table";
28
28
  //#region src/base-ui/Table/Table.tsx
29
29
  const EMPTY_DATA = [];
@@ -74,8 +74,18 @@ const toTableRef = (element, scrollTo) => {
74
74
  return typeof value === "function" ? value.bind(target) : value;
75
75
  } });
76
76
  };
77
+ let warnedBordered = false;
78
+ /** `bordered` (pre-5.61) → `variant`: `true` is `outlined`; an explicit `variant` wins. */
79
+ const resolveTableVariant = (variant, bordered) => {
80
+ if (bordered !== void 0 && process.env.NODE_ENV !== "production" && !warnedBordered) {
81
+ warnedBordered = true;
82
+ console.warn("[Table] `bordered` is deprecated. Please use `variant=\"outlined\"` instead.");
83
+ }
84
+ return variant ?? (bordered ? "outlined" : "borderless");
85
+ };
77
86
  const TableInner = (props) => {
78
- const { variant = "borderless", children, childrenColumnName: legacyChildrenColumnName, className, classNames, column: columnDefaults, columns: columnsProp, components, dataSource = EMPTY_DATA, emptyText, expandable, expandedRowRender: legacyExpandedRowRender, expandIcon: legacyExpandIcon, expandIconColumnIndex: legacyExpandIconColumnIndex, footer, getPopupContainer, indentSize: legacyIndentSize, loading = false, locale, measureRowRender, onChange, onHeaderRow, onRow, onScroll, pagination, ref, rootClassName, rowClassName, rowHoverable = true, rowKey = "key", rowSelection, scroll, showHeader, showSorterTooltip: tableShowSorterTooltip = DEFAULT_SORTER_TOOLTIP, size: sizeProp, sortDirections: tableSortDirections = DEFAULT_SORT_DIRECTIONS, sticky, style, styles: customStyles, summary, tableLayout, title, virtual } = props;
87
+ const { bordered, variant: variantProp, children, childrenColumnName: legacyChildrenColumnName, className, classNames, column: columnDefaults, columns: columnsProp, components, dataSource = EMPTY_DATA, emptyText, expandable, expandedRowRender: legacyExpandedRowRender, expandIcon: legacyExpandIcon, expandIconColumnIndex: legacyExpandIconColumnIndex, footer, getPopupContainer, indentSize: legacyIndentSize, loading = false, locale, measureRowRender, onChange, onHeaderRow, onRow, onScroll, pagination, ref, rootClassName, rowClassName, rowHoverable = true, rowKey = "key", rowSelection, scroll, showHeader, showSorterTooltip: tableShowSorterTooltip = DEFAULT_SORTER_TOOLTIP, size: sizeProp, sortDirections: tableSortDirections = DEFAULT_SORT_DIRECTIONS, sticky, style, styles: customStyles, summary, tableLayout, title, virtual } = props;
88
+ const variant = resolveTableVariant(variantProp, bordered);
79
89
  const size = sizeProp ?? "middle";
80
90
  const { t } = useTranslation(table_default);
81
91
  const tableLocale = useMemo(() => ({
@@ -399,7 +409,11 @@ const TableInner = (props) => {
399
409
  screens,
400
410
  selectionColumn: hasRowSelection,
401
411
  size
402
- }) : customEmpty === void 0 ? /* @__PURE__ */ jsx(Empty, { description: t("table.emptyText") }) : typeof customEmpty === "function" ? customEmpty() : customEmpty;
412
+ }) : customEmpty === void 0 ? /* @__PURE__ */ jsx(Empty, {
413
+ description: t("table.emptyText"),
414
+ icon: Inbox,
415
+ imageSize: 40
416
+ }) : typeof customEmpty === "function" ? customEmpty() : customEmpty;
403
417
  const TableComponent = virtual ? VirtualTable : RcTable;
404
418
  return /* @__PURE__ */ jsxs("div", {
405
419
  ref: rootRef,
@@ -476,6 +490,6 @@ Table.SELECTION_INVERT = SELECTION_INVERT;
476
490
  Table.SELECTION_NONE = SELECTION_NONE;
477
491
  Table.Summary = Summary;
478
492
  //#endregion
479
- export { TableInner, Table as default };
493
+ export { TableInner, Table as default, resolveTableVariant };
480
494
 
481
495
  //# sourceMappingURL=Table.mjs.map
@@ -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 } 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\nconst TableInner = <T,>(props: TableProps<T>) => {\n const {\n variant = 'borderless',\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 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\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')} />\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 === 'outlined' && styles.outlined,\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 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\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 === 'outlined' && styles.outlined,\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,5 +1,5 @@
1
- import { FilterValue, SortOrder, TableBreakpoint, TableCellAttributes, TableClassNames, TableColumn, TableColumnEllipsis, TableColumnFilterItem, TableColumnFixed, TableColumnGroupType, TableColumnSorter, TableColumnTitle, TableColumnTitleProps, TableColumnType, TableColumnsType, TableCompareFn, TableComponents, TableComponentsSemanticName, TableCurrentDataSource, TableExpandIconProps, TableExpandableConfig, TableExpandedRowRender, TableFilterDropdownPopupProps, TableFilterDropdownProps, TableFilters, TableHeaderCellAttributes, TableLegacySemanticName, TableLoadingConfig, TableLocale, TablePaginationConfig, TablePaginationPlacement, TablePaginationPosition, TableProps, TableRef, TableRenderedCell, TableRowClassName, TableRowSelectMethod, TableRowSelection, TableRowSelectionCheckboxProps, TableRowSelectionType, TableScrollToConfig, TableSelectionItem, TableSelectionPreset, TableSemanticInfo, TableSemanticName, TableSize, TableSorterResult, TableSorterTooltipProps, TableSticky, TableStyles, TableSummaryCellProps, TableSummaryProps, TableSummaryRowProps, TableVariant } from "./type.mjs";
1
+ import { FilterValue, SortOrder, TableBreakpoint, TableCellAttributes, TableClassNames, TableColumn, TableColumnEllipsis, TableColumnFilterItem, TableColumnFixed, TableColumnGroupType, TableColumnSorter, TableColumnTitle, TableColumnTitleProps, TableColumnType, TableColumnsType, TableCompareFn, TableComponents, TableComponentsSemanticName, TableCurrentDataSource, TableExpandIconProps, TableExpandableConfig, TableExpandedRowRender, TableFilterDropdownPopupProps, TableFilterDropdownProps, TableFilters, TableHeaderCellAttributes, TableLegacySemanticName, TableLoadingConfig, TableLocale, TableMultipleSorterResult, TablePaginationConfig, TablePaginationPlacement, TablePaginationPosition, TableProps, TableRef, TableRenderedCell, TableRowClassName, TableRowSelectMethod, TableRowSelection, TableRowSelectionCheckboxProps, TableRowSelectionType, TableScrollToConfig, TableSelectionItem, TableSelectionPreset, TableSemanticInfo, TableSemanticName, TableSize, TableSorterResult, TableSorterTooltipProps, TableSticky, TableStyles, TableSummaryCellProps, TableSummaryProps, TableSummaryRowProps, TableVariant } from "./type.mjs";
2
2
  import { TableColumnProps } from "./Column.mjs";
3
3
  import { TableColumnGroupProps } from "./ColumnGroup.mjs";
4
4
  import Table from "./Table.mjs";
5
- export { type FilterValue, type SortOrder, type TableBreakpoint, type TableCellAttributes, type TableClassNames, type TableColumn, type TableColumnEllipsis, type TableColumnFilterItem, type TableColumnFixed, type TableColumnGroupProps, type TableColumnGroupType, type TableColumnProps, type TableColumnSorter, type TableColumnTitle, type TableColumnTitleProps, type TableColumnType, type TableColumnsType, type TableCompareFn, type TableComponents, type TableComponentsSemanticName, type TableCurrentDataSource, type TableExpandIconProps, type TableExpandableConfig, type TableExpandedRowRender, type TableFilterDropdownPopupProps, type TableFilterDropdownProps, type TableFilters, type TableHeaderCellAttributes, type TableLegacySemanticName, type TableLoadingConfig, type TableLocale, type TablePaginationConfig, type TablePaginationPlacement, type TablePaginationPosition, type TableProps, type TableRef, type TableRenderedCell, type TableRowClassName, type TableRowSelectMethod, type TableRowSelection, type TableRowSelectionCheckboxProps, type TableRowSelectionType, type TableScrollToConfig, type TableSelectionItem, type TableSelectionPreset, type TableSemanticInfo, type TableSemanticName, type TableSize, type TableSorterResult, type TableSorterTooltipProps, type TableSticky, type TableStyles, type TableSummaryCellProps, type TableSummaryProps, type TableSummaryRowProps, type TableVariant, Table as default };
5
+ export { type FilterValue, type SortOrder, type TableBreakpoint, type TableCellAttributes, type TableClassNames, type TableColumn, type TableColumnEllipsis, type TableColumnFilterItem, type TableColumnFixed, type TableColumnGroupProps, type TableColumnGroupType, type TableColumnProps, type TableColumnSorter, type TableColumnTitle, type TableColumnTitleProps, type TableColumnType, type TableColumnsType, type TableCompareFn, type TableComponents, type TableComponentsSemanticName, type TableCurrentDataSource, type TableExpandIconProps, type TableExpandableConfig, type TableExpandedRowRender, type TableFilterDropdownPopupProps, type TableFilterDropdownProps, type TableFilters, type TableHeaderCellAttributes, type TableLegacySemanticName, type TableLoadingConfig, type TableLocale, type TableMultipleSorterResult, type TablePaginationConfig, type TablePaginationPlacement, type TablePaginationPosition, type TableProps, type TableRef, type TableRenderedCell, type TableRowClassName, type TableRowSelectMethod, type TableRowSelection, type TableRowSelectionCheckboxProps, type TableRowSelectionType, type TableScrollToConfig, type TableSelectionItem, type TableSelectionPreset, type TableSemanticInfo, type TableSemanticName, type TableSize, type TableSorterResult, type TableSorterTooltipProps, type TableSticky, type TableStyles, type TableSummaryCellProps, type TableSummaryProps, type TableSummaryRowProps, type TableVariant, Table as default };
@@ -295,12 +295,20 @@ interface TableCurrentDataSource<T> {
295
295
  currentDataSource: T[];
296
296
  }
297
297
  interface TableSorterResult<T> {
298
- column?: TableColumn<T>;
298
+ /** The sorted (leaf) column. */
299
+ column?: TableColumnType<T>;
299
300
  columnKey?: Key;
300
301
  /** The column's `dataIndex`. */
301
302
  field?: Key | readonly Key[];
302
- order?: SortOrder;
303
+ /** `undefined` when nothing is sorted; never `null` here. */
304
+ order?: Exclude<SortOrder, null>;
303
305
  }
306
+ /**
307
+ * `onChange`'s `sorter` while several `multiple` sorters are active: the array of results, which
308
+ * also carries the first entry's `column` / `columnKey` / `field` / `order` (non-enumerable), so code
309
+ * written for a single sorter (`sorter.order`) keeps working. Narrow with `Array.isArray(sorter)`.
310
+ */
311
+ type TableMultipleSorterResult<T> = TableSorterResult<T>[] & TableSorterResult<T>;
304
312
  type TableFilters = Record<string, FilterValue[] | null>;
305
313
  /** Parts of the header / body sections: `wrapper` is the `thead` / `tbody`, then `row` (tr) and `cell` (th / td). */
306
314
  type TableComponentsSemanticName = 'cell' | 'row' | 'wrapper';
@@ -412,6 +420,11 @@ type TableRef = HTMLDivElement & {
412
420
  scrollTo: (config: TableScrollToConfig) => void;
413
421
  };
414
422
  interface TableProps$1<T> {
423
+ /**
424
+ * @deprecated Use `variant="outlined"` instead. `bordered` maps to `variant="outlined"` when
425
+ * `variant` is not set; an explicit `variant` wins.
426
+ */
427
+ bordered?: boolean;
415
428
  /** `Table.Column` / `Table.ColumnGroup` elements, used when `columns` is not set. */
416
429
  children?: ReactNode;
417
430
  /** @deprecated use `expandable.childrenColumnName` */
@@ -445,8 +458,11 @@ interface TableProps$1<T> {
445
458
  /** Wrap the hidden row rc-table uses to measure column widths (debug / custom layouts). */
446
459
  measureRowRender?: (measureRow: ReactNode) => ReactNode;
447
460
  onChange?: (pagination: TablePaginationConfig, filters: TableFilters,
448
- /** An array when more than one `multiple` sorter is active. */
449
- sorter: TableSorterResult<T> | TableSorterResult<T>[], extra: TableCurrentDataSource<T>) => void;
461
+ /**
462
+ * One result, or a `TableMultipleSorterResult` array when more than one `multiple` sorter is
463
+ * active (it still exposes the first entry's fields, so `sorter.order` type-checks either way).
464
+ */
465
+ sorter: TableSorterResult<T> | TableMultipleSorterResult<T>, extra: TableCurrentDataSource<T>) => void;
450
466
  onHeaderRow?: (columns: readonly ColumnType<T>[], index?: number) => HTMLAttributes<HTMLTableRowElement>;
451
467
  onRow?: (record: T, index: number) => HTMLAttributes<HTMLTableRowElement>;
452
468
  onScroll?: UIEventHandler<HTMLDivElement>;
@@ -498,5 +514,5 @@ interface TableProps$1<T> {
498
514
  virtual?: boolean;
499
515
  }
500
516
  //#endregion
501
- export { FilterValue, SortOrder, TableBreakpoint, TableCellAttributes, TableClassNames, TableColumn, TableColumnEllipsis, TableColumnFilterItem, TableColumnFixed, TableColumnGroupType, TableColumnSorter, TableColumnTitle, TableColumnTitleProps, TableColumnType, TableColumnsType, TableCompareFn, TableComponents, TableComponentsSemanticName, TableCurrentDataSource, TableExpandIconProps, TableExpandableConfig, TableExpandedRowRender, TableFilterDropdownPopupProps, TableFilterDropdownProps, TableFilters, TableHeaderCellAttributes, TableLegacySemanticName, TableLoadingConfig, TableLocale, TablePaginationConfig, TablePaginationPlacement, TablePaginationPosition, TableProps$1 as TableProps, TableRef, TableRenderedCell, TableRowClassName, TableRowSelectMethod, TableRowSelection, TableRowSelectionCheckboxProps, TableRowSelectionType, TableScrollToConfig, TableSelectionItem, TableSelectionPreset, TableSemanticInfo, TableSemanticName, TableSize, TableSorterResult, TableSorterTooltipProps, TableSticky, TableStyles, TableSummaryCellProps, TableSummaryProps, TableSummaryRowProps, TableVariant };
517
+ export { FilterValue, SortOrder, TableBreakpoint, TableCellAttributes, TableClassNames, TableColumn, TableColumnEllipsis, TableColumnFilterItem, TableColumnFixed, TableColumnGroupType, TableColumnSorter, TableColumnTitle, TableColumnTitleProps, TableColumnType, TableColumnsType, TableCompareFn, TableComponents, TableComponentsSemanticName, TableCurrentDataSource, TableExpandIconProps, TableExpandableConfig, TableExpandedRowRender, TableFilterDropdownPopupProps, TableFilterDropdownProps, TableFilters, TableHeaderCellAttributes, TableLegacySemanticName, TableLoadingConfig, TableLocale, TableMultipleSorterResult, TablePaginationConfig, TablePaginationPlacement, TablePaginationPosition, TableProps$1 as TableProps, TableRef, TableRenderedCell, TableRowClassName, TableRowSelectMethod, TableRowSelection, TableRowSelectionCheckboxProps, TableRowSelectionType, TableScrollToConfig, TableSelectionItem, TableSelectionPreset, TableSemanticInfo, TableSemanticName, TableSize, TableSorterResult, TableSorterTooltipProps, TableSticky, TableStyles, TableSummaryCellProps, TableSummaryProps, TableSummaryRowProps, TableVariant };
502
518
  //# sourceMappingURL=type.d.mts.map
@@ -93,7 +93,7 @@ const stateToInfo = ({ column, key, sortOrder }) => ({
93
93
  column,
94
94
  columnKey: column.key ?? key,
95
95
  field: column.dataIndex,
96
- order: sortOrder
96
+ order: sortOrder ?? void 0
97
97
  });
98
98
  /** The `sorter` argument of `onChange`: one result, or an array for several active sorters. */
99
99
  const getSorterInfo = (states) => {
@@ -106,6 +106,18 @@ const getSorterInfo = (states) => {
106
106
  order: void 0
107
107
  };
108
108
  if (active.length <= 1) return active[0] ?? {};
109
+ const [first] = active;
110
+ for (const field of [
111
+ "column",
112
+ "columnKey",
113
+ "field",
114
+ "order"
115
+ ]) Object.defineProperty(active, field, {
116
+ configurable: true,
117
+ enumerable: false,
118
+ value: first[field],
119
+ writable: true
120
+ });
109
121
  return active;
110
122
  };
111
123
  /** `sortColumns` and the legacy `sortColumn` / `sortOrder` passed to function titles. */
@@ -1 +1 @@
1
- {"version":3,"file":"useSorter.mjs","names":[],"sources":["../../../src/base-ui/Table/useSorter.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { getColumnId, getColumnPos, isColumnGroup } from './columnUtils';\nimport type {\n SortOrder,\n TableColumn,\n TableColumnTitleProps,\n TableColumnType,\n TableCompareFn,\n TableSorterResult,\n} from './type';\n\n/** One sorted (or explicitly unsorted) column; mirrors antd `SortState`. */\nexport interface SortState<T = any> {\n column: TableColumn<T>;\n /** Column id (`key`, then `dataIndex`, then position). */\n key: string;\n /** `sorter.multiple`, or `false` for a single-column sorter. */\n multiplePriority: number | false;\n sortOrder: SortOrder | undefined;\n}\n\nexport const DEFAULT_SORT_DIRECTIONS: SortOrder[] = ['ascend', 'descend'];\n\n/** Tooltip copy of the sort trigger (antd `TableLocale` sort fields). */\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const getMultiplePriority = (column: TableColumn<any>): number | false => {\n const { sorter } = column;\n return isPlainObject(sorter) && typeof sorter.multiple === 'number' ? sorter.multiple : false;\n};\n\nexport const getSortFunction = <T>(sorter: TableColumn<T>['sorter']): TableCompareFn<T> | false => {\n if (typeof sorter === 'function') return sorter;\n if (isPlainObject(sorter) && typeof sorter.compare === 'function') return sorter.compare;\n return false;\n};\n\n/** Walks `sortDirections` and drops back to unsorted after the last one, like antd. */\nexport const getNextSortOrder = (\n sortDirections: readonly SortOrder[],\n current: SortOrder | undefined,\n): SortOrder | undefined => {\n if (!current) return sortDirections[0];\n return sortDirections[sortDirections.indexOf(current) + 1];\n};\n\n/**\n * Controlled `sortOrder` states (any column, groups included) or, with `init`, the\n * `defaultSortOrder` states of sortable columns.\n */\nexport const collectSortStates = <T>(\n columns: readonly TableColumn<T>[],\n init: boolean,\n parentPos?: string,\n): SortState<T>[] => {\n const states: SortState<T>[] = [];\n const push = (column: TableColumn<T>, pos: string, sortOrder: SortOrder | undefined) =>\n states.push({\n column,\n key: getColumnId(column, pos),\n multiplePriority: getMultiplePriority(column),\n sortOrder,\n });\n\n columns.forEach((column, index) => {\n const pos = getColumnPos(index, parentPos);\n if (isColumnGroup(column)) {\n if ('sortOrder' in column) push(column, pos, column.sortOrder);\n states.push(...collectSortStates(column.children, init, pos));\n } else if (column.sorter) {\n if ('sortOrder' in column) push(column, pos, column.sortOrder);\n else if (init && column.defaultSortOrder) push(column, pos, column.defaultSortOrder);\n }\n });\n return states;\n};\n\nconst collectColumnMap = <T>(\n columns: readonly TableColumn<T>[],\n map = new Map<string, TableColumn<T>>(),\n parentPos?: string,\n) => {\n columns.forEach((column, index) => {\n const pos = getColumnPos(index, parentPos);\n map.set(getColumnId(column, pos), column);\n if (isColumnGroup(column)) collectColumnMap(column.children, map, pos);\n });\n return map;\n};\n\n/**\n * The effective sort states. Controlled `sortOrder` wins over the inner state; once a\n * single-column sorter is active (or a non-`multiple` sorter follows a `multiple` one) every later\n * state is forced to `null`, exactly like antd.\n */\nexport const mergeSortStates = <T>(\n columns: readonly TableColumn<T>[],\n innerStates: readonly SortState<T>[],\n): SortState<T>[] => {\n const controlled = collectSortStates(columns, false);\n\n if (controlled.length === 0) {\n // Drop states of removed columns and pick up the latest column objects (fresh comparators).\n const columnMap = collectColumnMap(columns);\n return innerStates\n .filter(({ key }) => columnMap.has(key))\n .map((state) => ({ ...state, column: columnMap.get(state.key)! }));\n }\n\n const result: SortState<T>[] = [];\n let valid = true;\n let multipleMode: boolean | null = null;\n const patch = (state: SortState<T>) => result.push(valid ? state : { ...state, sortOrder: null });\n\n for (const state of controlled) {\n if (multipleMode === null) {\n patch(state);\n if (state.sortOrder) {\n if (state.multiplePriority === false) valid = false;\n else multipleMode = true;\n }\n } else if (multipleMode && state.multiplePriority !== false) {\n patch(state);\n } else {\n valid = false;\n patch(state);\n }\n }\n return result;\n};\n\n/** A click replaces the sort, unless both it and the current sort are `multiple` sorters. */\nexport const getTriggeredSortStates = <T>(\n current: readonly SortState<T>[],\n next: SortState<T>,\n): SortState<T>[] => {\n if (next.multiplePriority === false || !current.length || current[0].multiplePriority === false) {\n return [next];\n }\n return [...current.filter(({ key }) => key !== next.key), next];\n};\n\nconst stateToInfo = <T>({ column, key, sortOrder }: SortState<T>): TableSorterResult<T> => ({\n column,\n // antd reports `column.key`; the id fallback keeps dataIndex-only columns identifiable.\n columnKey: column.key ?? key,\n field: (column as TableColumnType<T>).dataIndex as TableSorterResult<T>['field'],\n order: sortOrder,\n});\n\n/** The `sorter` argument of `onChange`: one result, or an array for several active sorters. */\nexport const getSorterInfo = <T>(\n states: readonly SortState<T>[],\n): TableSorterResult<T> | TableSorterResult<T>[] => {\n const active = states.filter(({ sortOrder }) => sortOrder).map((state) => stateToInfo(state));\n\n // antd keeps the last cleared column's other fields when nothing is sorted.\n if (active.length === 0 && states.length) {\n return {\n ...stateToInfo(states.at(-1)!),\n column: undefined,\n columnKey: undefined,\n field: undefined,\n order: undefined,\n };\n }\n if (active.length <= 1) return active[0] ?? {};\n return active;\n};\n\n/** `sortColumns` and the legacy `sortColumn` / `sortOrder` passed to function titles. */\nexport const getSortTitleProps = <T>(\n states: readonly SortState<T>[],\n): Pick<TableColumnTitleProps<T>, 'sortColumn' | 'sortColumns' | 'sortOrder'> => {\n const sortColumns = states.map(({ column, sortOrder }) => ({ column, order: sortOrder }));\n return {\n sortColumn: sortColumns[0]?.column,\n sortColumns,\n sortOrder: sortColumns[0]?.order,\n };\n};\n\n/**\n * Returns a sorted copy. Comparators run by descending `multiple` priority; `sorter: true` leaves\n * the order to the server. Tree children (`childrenColumnName`) are sorted recursively.\n */\nexport const sortData = <T>(\n data: readonly T[],\n states: readonly SortState<T>[],\n childrenColumnName = 'children',\n): T[] => {\n const running = states\n .filter(({ column, sortOrder }) => getSortFunction(column.sorter) && sortOrder)\n .sort((a, b) => (b.multiplePriority as number) - (a.multiplePriority as number));\n if (running.length === 0) return [...data];\n\n return [...data]\n .sort((a, b) => {\n for (const { column, sortOrder } of running) {\n const result = (getSortFunction(column.sorter) as TableCompareFn<T>)(a, b, sortOrder);\n if (result !== 0) return sortOrder === 'ascend' ? result : -result;\n }\n return 0;\n })\n .map((record) => {\n const children = (record as Record<string, unknown>)[childrenColumnName];\n return Array.isArray(children)\n ? { ...record, [childrenColumnName]: sortData(children as T[], states, childrenColumnName) }\n : record;\n });\n};\n\nexport const useSorter = <T>({\n childrenColumnName,\n data,\n sortStates,\n}: {\n childrenColumnName?: string;\n data: readonly T[];\n sortStates: readonly SortState<T>[];\n}) =>\n useMemo(\n () => sortData(data, sortStates, childrenColumnName),\n [data, sortStates, childrenColumnName],\n );\n"],"mappings":"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"}
1
+ {"version":3,"file":"useSorter.mjs","names":[],"sources":["../../../src/base-ui/Table/useSorter.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { getColumnId, getColumnPos, isColumnGroup } from './columnUtils';\nimport type {\n SortOrder,\n TableColumn,\n TableColumnTitleProps,\n TableColumnType,\n TableCompareFn,\n TableMultipleSorterResult,\n TableSorterResult,\n} from './type';\n\n/** One sorted (or explicitly unsorted) column; mirrors antd `SortState`. */\nexport interface SortState<T = any> {\n column: TableColumn<T>;\n /** Column id (`key`, then `dataIndex`, then position). */\n key: string;\n /** `sorter.multiple`, or `false` for a single-column sorter. */\n multiplePriority: number | false;\n sortOrder: SortOrder | undefined;\n}\n\nexport const DEFAULT_SORT_DIRECTIONS: SortOrder[] = ['ascend', 'descend'];\n\n/** Tooltip copy of the sort trigger (antd `TableLocale` sort fields). */\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const getMultiplePriority = (column: TableColumn<any>): number | false => {\n const { sorter } = column;\n return isPlainObject(sorter) && typeof sorter.multiple === 'number' ? sorter.multiple : false;\n};\n\nexport const getSortFunction = <T>(sorter: TableColumn<T>['sorter']): TableCompareFn<T> | false => {\n if (typeof sorter === 'function') return sorter;\n if (isPlainObject(sorter) && typeof sorter.compare === 'function') return sorter.compare;\n return false;\n};\n\n/** Walks `sortDirections` and drops back to unsorted after the last one, like antd. */\nexport const getNextSortOrder = (\n sortDirections: readonly SortOrder[],\n current: SortOrder | undefined,\n): SortOrder | undefined => {\n if (!current) return sortDirections[0];\n return sortDirections[sortDirections.indexOf(current) + 1];\n};\n\n/**\n * Controlled `sortOrder` states (any column, groups included) or, with `init`, the\n * `defaultSortOrder` states of sortable columns.\n */\nexport const collectSortStates = <T>(\n columns: readonly TableColumn<T>[],\n init: boolean,\n parentPos?: string,\n): SortState<T>[] => {\n const states: SortState<T>[] = [];\n const push = (column: TableColumn<T>, pos: string, sortOrder: SortOrder | undefined) =>\n states.push({\n column,\n key: getColumnId(column, pos),\n multiplePriority: getMultiplePriority(column),\n sortOrder,\n });\n\n columns.forEach((column, index) => {\n const pos = getColumnPos(index, parentPos);\n if (isColumnGroup(column)) {\n if ('sortOrder' in column) push(column, pos, column.sortOrder);\n states.push(...collectSortStates(column.children, init, pos));\n } else if (column.sorter) {\n if ('sortOrder' in column) push(column, pos, column.sortOrder);\n else if (init && column.defaultSortOrder) push(column, pos, column.defaultSortOrder);\n }\n });\n return states;\n};\n\nconst collectColumnMap = <T>(\n columns: readonly TableColumn<T>[],\n map = new Map<string, TableColumn<T>>(),\n parentPos?: string,\n) => {\n columns.forEach((column, index) => {\n const pos = getColumnPos(index, parentPos);\n map.set(getColumnId(column, pos), column);\n if (isColumnGroup(column)) collectColumnMap(column.children, map, pos);\n });\n return map;\n};\n\n/**\n * The effective sort states. Controlled `sortOrder` wins over the inner state; once a\n * single-column sorter is active (or a non-`multiple` sorter follows a `multiple` one) every later\n * state is forced to `null`, exactly like antd.\n */\nexport const mergeSortStates = <T>(\n columns: readonly TableColumn<T>[],\n innerStates: readonly SortState<T>[],\n): SortState<T>[] => {\n const controlled = collectSortStates(columns, false);\n\n if (controlled.length === 0) {\n // Drop states of removed columns and pick up the latest column objects (fresh comparators).\n const columnMap = collectColumnMap(columns);\n return innerStates\n .filter(({ key }) => columnMap.has(key))\n .map((state) => ({ ...state, column: columnMap.get(state.key)! }));\n }\n\n const result: SortState<T>[] = [];\n let valid = true;\n let multipleMode: boolean | null = null;\n const patch = (state: SortState<T>) => result.push(valid ? state : { ...state, sortOrder: null });\n\n for (const state of controlled) {\n if (multipleMode === null) {\n patch(state);\n if (state.sortOrder) {\n if (state.multiplePriority === false) valid = false;\n else multipleMode = true;\n }\n } else if (multipleMode && state.multiplePriority !== false) {\n patch(state);\n } else {\n valid = false;\n patch(state);\n }\n }\n return result;\n};\n\n/** A click replaces the sort, unless both it and the current sort are `multiple` sorters. */\nexport const getTriggeredSortStates = <T>(\n current: readonly SortState<T>[],\n next: SortState<T>,\n): SortState<T>[] => {\n if (next.multiplePriority === false || !current.length || current[0].multiplePriority === false) {\n return [next];\n }\n return [...current.filter(({ key }) => key !== next.key), next];\n};\n\nconst stateToInfo = <T>({ column, key, sortOrder }: SortState<T>): TableSorterResult<T> => ({\n column: column as TableColumnType<T>,\n // antd reports `column.key`; the id fallback keeps dataIndex-only columns identifiable.\n columnKey: column.key ?? key,\n field: (column as TableColumnType<T>).dataIndex as TableSorterResult<T>['field'],\n order: sortOrder ?? undefined,\n});\n\n/** The `sorter` argument of `onChange`: one result, or an array for several active sorters. */\nexport const getSorterInfo = <T>(\n states: readonly SortState<T>[],\n): TableSorterResult<T> | TableMultipleSorterResult<T> => {\n const active = states.filter(({ sortOrder }) => sortOrder).map((state) => stateToInfo(state));\n\n // antd keeps the last cleared column's other fields when nothing is sorted.\n if (active.length === 0 && states.length) {\n return {\n ...stateToInfo(states.at(-1)!),\n column: undefined,\n columnKey: undefined,\n field: undefined,\n order: undefined,\n };\n }\n if (active.length <= 1) return active[0] ?? {};\n // Pre-5.61 code reads `sorter.order` / `sorter.columnKey` directly: expose the first entry's\n // fields on the array too. Non-enumerable, so iteration, spread and equality see a plain array.\n const [first] = active;\n for (const field of ['column', 'columnKey', 'field', 'order'] as const) {\n Object.defineProperty(active, field, {\n configurable: true,\n enumerable: false,\n value: first[field],\n writable: true,\n });\n }\n return active as TableMultipleSorterResult<T>;\n};\n\n/** `sortColumns` and the legacy `sortColumn` / `sortOrder` passed to function titles. */\nexport const getSortTitleProps = <T>(\n states: readonly SortState<T>[],\n): Pick<TableColumnTitleProps<T>, 'sortColumn' | 'sortColumns' | 'sortOrder'> => {\n const sortColumns = states.map(({ column, sortOrder }) => ({ column, order: sortOrder }));\n return {\n sortColumn: sortColumns[0]?.column,\n sortColumns,\n sortOrder: sortColumns[0]?.order,\n };\n};\n\n/**\n * Returns a sorted copy. Comparators run by descending `multiple` priority; `sorter: true` leaves\n * the order to the server. Tree children (`childrenColumnName`) are sorted recursively.\n */\nexport const sortData = <T>(\n data: readonly T[],\n states: readonly SortState<T>[],\n childrenColumnName = 'children',\n): T[] => {\n const running = states\n .filter(({ column, sortOrder }) => getSortFunction(column.sorter) && sortOrder)\n .sort((a, b) => (b.multiplePriority as number) - (a.multiplePriority as number));\n if (running.length === 0) return [...data];\n\n return [...data]\n .sort((a, b) => {\n for (const { column, sortOrder } of running) {\n const result = (getSortFunction(column.sorter) as TableCompareFn<T>)(a, b, sortOrder);\n if (result !== 0) return sortOrder === 'ascend' ? result : -result;\n }\n return 0;\n })\n .map((record) => {\n const children = (record as Record<string, unknown>)[childrenColumnName];\n return Array.isArray(children)\n ? { ...record, [childrenColumnName]: sortData(children as T[], states, childrenColumnName) }\n : record;\n });\n};\n\nexport const useSorter = <T>({\n childrenColumnName,\n data,\n sortStates,\n}: {\n childrenColumnName?: string;\n data: readonly T[];\n sortStates: readonly SortState<T>[];\n}) =>\n useMemo(\n () => sortData(data, sortStates, childrenColumnName),\n [data, sortStates, childrenColumnName],\n );\n"],"mappings":"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"}