@fangxinyan/lumina 0.2.0 → 0.2.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 (56) hide show
  1. package/README.md +18 -7
  2. package/dist/{Table-ADVN6LXP.css → Table-YKVM42SW.css} +1 -1
  3. package/dist/Table.cjs +3 -3
  4. package/dist/Table.js +1 -1
  5. package/dist/{chunk-55NTFU7Y.js → chunk-E6R63QOL.js} +3 -3
  6. package/dist/{chunk-55NTFU7Y.js.map → chunk-E6R63QOL.js.map} +1 -1
  7. package/dist/{chunk-IFERLHCL.cjs → chunk-SBMOIE5C.cjs} +3 -3
  8. package/dist/{chunk-IFERLHCL.cjs.map → chunk-SBMOIE5C.cjs.map} +1 -1
  9. package/dist/index.cjs +4 -4
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.d.cts +1 -1
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.js +2 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/styles.css +1 -1
  16. package/docs/llms/accordion.md +66 -0
  17. package/docs/llms/alert.md +64 -0
  18. package/docs/llms/avatar.md +55 -0
  19. package/docs/llms/badge.md +41 -0
  20. package/docs/llms/button.md +122 -0
  21. package/docs/llms/calendar.md +44 -0
  22. package/docs/llms/card.md +68 -0
  23. package/docs/llms/cascader.md +33 -0
  24. package/docs/llms/checkbox.md +41 -0
  25. package/docs/llms/colorpicker.md +82 -0
  26. package/docs/llms/divider.md +69 -0
  27. package/docs/llms/drawer.md +70 -0
  28. package/docs/llms/empty.md +52 -0
  29. package/docs/llms/icon.md +34 -0
  30. package/docs/llms/image.md +39 -0
  31. package/docs/llms/input.md +127 -0
  32. package/docs/llms/intro.md +6 -0
  33. package/docs/llms/list.md +41 -0
  34. package/docs/llms/modal.md +89 -0
  35. package/docs/llms/pagination.md +82 -0
  36. package/docs/llms/popover.md +34 -0
  37. package/docs/llms/progress.md +58 -0
  38. package/docs/llms/radio.md +43 -0
  39. package/docs/llms/select.md +99 -0
  40. package/docs/llms/sidebar.md +43 -0
  41. package/docs/llms/skeleton.md +88 -0
  42. package/docs/llms/slider.md +72 -0
  43. package/docs/llms/spinner.md +58 -0
  44. package/docs/llms/switch.md +60 -0
  45. package/docs/llms/table.md +188 -0
  46. package/docs/llms/tablepro.md +56 -0
  47. package/docs/llms/tabs.md +50 -0
  48. package/docs/llms/tag.md +77 -0
  49. package/docs/llms/theme.md +165 -0
  50. package/docs/llms/titlebar.md +40 -0
  51. package/docs/llms/toast.md +51 -0
  52. package/docs/llms/tooltip.md +38 -0
  53. package/docs/llms/typography.md +103 -0
  54. package/docs/llms/windowcontrols.md +31 -0
  55. package/docs/llms.md +97 -0
  56. package/package.json +8 -2
package/README.md CHANGED
@@ -4,6 +4,17 @@
4
4
 
5
5
  柔和、温润的拟态(Neumorphism)风格组件库,使用 **React 18** + **TypeScript**,开箱即用地适配 **Electron** 桌面应用场景 —— 包含窗口标题栏、侧边栏、抽屉、弹窗等桌面级组件。
6
6
 
7
+ > **🤖 AI coding assistants**: this package ships a **per-component LLM reference** designed for on-demand reading, so you don't have to pull the full API dump every time.
8
+ >
9
+ > - **Index** (global conventions + component list): `node_modules/@fangxinyan/lumina/docs/llms.md`
10
+ > — subpath export `@fangxinyan/lumina/llms.md`
11
+ > - **Per-component docs** (import / runnable examples / full props table): `node_modules/@fangxinyan/lumina/docs/llms/<id>.md`
12
+ > — subpath export `@fangxinyan/lumina/llms/<id>.md` (e.g. `.../llms/button.md`, `.../llms/table.md`)
13
+ >
14
+ > Online raw URLs:
15
+ > <https://raw.githubusercontent.com/LHorTL/lumina/main/docs/llms.md>
16
+ > <https://raw.githubusercontent.com/LHorTL/lumina/main/docs/llms/button.md>
17
+
7
18
  ## ✨ 特性
8
19
 
9
20
  - **TypeScript 优先** — 全量类型定义,IDE 智能提示完善
@@ -16,11 +27,11 @@
16
27
  ## 📦 安装
17
28
 
18
29
  ```bash
19
- npm install lumina
30
+ npm install @fangxinyan/lumina
20
31
  # 或
21
- pnpm add lumina
32
+ pnpm add @fangxinyan/lumina
22
33
  # 或
23
- yarn add lumina
34
+ yarn add @fangxinyan/lumina
24
35
  ```
25
36
 
26
37
  Peer deps: `react@>=18`, `react-dom@>=18`.
@@ -28,8 +39,8 @@ Peer deps: `react@>=18`, `react-dom@>=18`.
28
39
  ## 🚀 快速上手
29
40
 
30
41
  ```tsx
31
- import { Button, Card, toast, ToastContainer } from "lumina";
32
- import "lumina/styles"; // 全局样式 + 设计令牌
42
+ import { Button, Card, toast, ToastContainer } from "@fangxinyan/lumina";
43
+ import "@fangxinyan/lumina/styles"; // 全局样式 + 设计令牌
33
44
 
34
45
  export default function App() {
35
46
  return (
@@ -100,8 +111,8 @@ package/
100
111
 
101
112
  ## 📚 文档
102
113
 
103
- - [组件清单](./docs/components.md)
104
- - [API 参考](./docs/api.md)
114
+ - **[🤖 AI / LLM 组件参考(索引)](./docs/llms.md)** — 全局约定 + 39 个组件的链接
115
+ - **[单组件文档](./docs/llms/)** — 每个组件一份 `.md`,AI 按需读取(例如 [`llms/button.md`](./docs/llms/button.md))
105
116
  - [设计令牌](./docs/tokens.md)
106
117
  - [Electron 集成](./docs/electron.md)
107
118
 
@@ -126,7 +126,7 @@
126
126
 
127
127
  /* Expanded row panel */
128
128
  .table tbody tr.expanded-row td {
129
- padding: 0 18px 14px 18px;
129
+ padding: 14px 18px;
130
130
  border-bottom: 1px solid var(--divider);
131
131
  background: color-mix(in oklch, var(--bg-sunken) 25%, transparent);
132
132
  }
package/dist/Table.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkIFERLHCL_cjs = require('./chunk-IFERLHCL.cjs');
3
+ var chunkSBMOIE5C_cjs = require('./chunk-SBMOIE5C.cjs');
4
4
  require('./chunk-K7PVJLW4.cjs');
5
5
  require('./chunk-EPFYIR63.cjs');
6
6
  require('./chunk-URF6RBW6.cjs');
@@ -12,11 +12,11 @@ require('./chunk-YVO7XO4W.cjs');
12
12
 
13
13
  Object.defineProperty(exports, "Table", {
14
14
  enumerable: true,
15
- get: function () { return chunkIFERLHCL_cjs.Table; }
15
+ get: function () { return chunkSBMOIE5C_cjs.Table; }
16
16
  });
17
17
  Object.defineProperty(exports, "TablePro", {
18
18
  enumerable: true,
19
- get: function () { return chunkIFERLHCL_cjs.TablePro; }
19
+ get: function () { return chunkSBMOIE5C_cjs.TablePro; }
20
20
  });
21
21
  //# sourceMappingURL=Table.cjs.map
22
22
  //# sourceMappingURL=Table.cjs.map
package/dist/Table.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Table, TablePro } from './chunk-55NTFU7Y.js';
1
+ export { Table, TablePro } from './chunk-E6R63QOL.js';
2
2
  import './chunk-TYQ5CN2C.js';
3
3
  import './chunk-ZVCMXDTP.js';
4
4
  import './chunk-AJZKESHB.js';
@@ -4,7 +4,7 @@ import { useFloating } from './chunk-V2DIQ3RH.js';
4
4
  import { Icon } from './chunk-GEYMWUW6.js';
5
5
  import './tokens-HWQ7KWPG.css';
6
6
  import './shared-NJHRNLRH.css';
7
- import './Table-ADVN6LXP.css';
7
+ import './Table-YKVM42SW.css';
8
8
  import * as React from 'react';
9
9
  import { createPortal } from 'react-dom';
10
10
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
@@ -472,5 +472,5 @@ function TablePro({
472
472
  }
473
473
 
474
474
  export { Table, TablePro };
475
- //# sourceMappingURL=chunk-55NTFU7Y.js.map
476
- //# sourceMappingURL=chunk-55NTFU7Y.js.map
475
+ //# sourceMappingURL=chunk-E6R63QOL.js.map
476
+ //# sourceMappingURL=chunk-E6R63QOL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Table/Table.tsx"],"names":["v","Fragment"],"mappings":"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","file":"chunk-55NTFU7Y.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Table.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Icon } from \"../Icon\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Pagination } from \"../Pagination\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport type RowKey = string | number;\n\nexport interface TableColumnFilterItem {\n text: React.ReactNode;\n value: string | number;\n}\n\nexport interface TableColumn<Row = any> {\n key: string;\n title: React.ReactNode;\n /** Data key to read from row, or custom render. */\n dataIndex?: keyof Row;\n render?: (value: any, row: Row, index: number) => React.ReactNode;\n width?: number | string;\n align?: \"left\" | \"center\" | \"right\";\n sortable?: boolean;\n /** Filter options shown in header dropdown. Requires `onFilter` (or data index match). */\n filters?: TableColumnFilterItem[];\n /**\n * Predicate to decide whether a row matches a given filter value.\n * If omitted, falls back to strict equality on `row[dataIndex]`.\n */\n onFilter?: (value: string | number, row: Row) => boolean;\n /**\n * Default active filter values. When `filteredValue` is controlled externally via\n * `Table.filteredValue`, prefer managing it at the table level.\n */\n defaultFilteredValue?: (string | number)[];\n /** Controlled filter selection — when provided, makes the column's filter controlled. */\n filteredValue?: (string | number)[];\n}\n\nexport type TableVariant = \"default\" | \"striped\" | \"embossed\" | \"cards\";\n\nexport interface PaginationConfig {\n /** Current page (1-indexed). Makes pagination controlled. */\n current?: number;\n /** Uncontrolled initial page. */\n defaultCurrent?: number;\n /** Items per page. */\n pageSize?: number;\n /** Default items per page (uncontrolled). */\n defaultPageSize?: number;\n /** Total item count. Defaults to `data.length` when omitted. */\n total?: number;\n /** Fired when user picks a page or changes page size. */\n onChange?: (page: number, pageSize: number) => void;\n /** Reserved for future: jump-to-page input. */\n showQuickJumper?: boolean;\n /** Reserved for future: page size dropdown. */\n showSizeChanger?: boolean;\n /** Reserved for future: selectable page sizes. */\n pageSizeOptions?: number[];\n}\n\nexport interface RowSelectionConfig<Row = any> {\n /** \"checkbox\" (default) allows multi-select; \"radio\" allows only one row at a time. */\n type?: \"checkbox\" | \"radio\";\n /** Controlled list of selected row keys. */\n selectedRowKeys?: RowKey[];\n /** Uncontrolled initial selection. */\n defaultSelectedRowKeys?: RowKey[];\n /** Fired on selection change; receives the new keys and matching rows. */\n onChange?: (selectedRowKeys: RowKey[], selectedRows: Row[]) => void;\n /** Per-row switch toggling checkbox disabled state. */\n getCheckboxProps?: (row: Row) => { disabled?: boolean };\n}\n\nexport interface ExpandableConfig<Row = any> {\n /** Controlled expanded row keys. */\n expandedRowKeys?: RowKey[];\n /** Uncontrolled initial expanded row keys. */\n defaultExpandedRowKeys?: RowKey[];\n /** Fired when a row expands / collapses. */\n onExpand?: (expanded: boolean, row: Row) => void;\n /** Render function for the expanded panel. When omitted, no expand UI renders. */\n expandedRowRender?: (row: Row, index: number) => React.ReactNode;\n /** Decide whether a given row can be expanded. */\n rowExpandable?: (row: Row) => boolean;\n}\n\nexport interface TableScrollConfig {\n /** Horizontal scroll: min-width of the inner table. */\n x?: number | string;\n /** Vertical scroll: max body height (with sticky header). */\n y?: number | string;\n}\n\nexport interface TableProps<Row = any> {\n columns: TableColumn<Row>[];\n data: Row[];\n rowKey?: keyof Row | ((row: Row) => RowKey);\n /** Visual variant. */\n variant?: TableVariant;\n /** Hoverable rows. */\n hoverable?: boolean;\n /** Striped rows (shortcut for variant=\"striped\"). */\n striped?: boolean;\n\n /** Sort state — controlled. */\n sortKey?: string;\n sortDir?: \"asc\" | \"desc\";\n onSort?: (key: string) => void;\n\n /**\n * Row selection config — preferred API (antd-style).\n * When provided, takes precedence over `selectable` / `selected` / `onSelect`.\n */\n rowSelection?: RowSelectionConfig<Row>;\n\n /**\n * @deprecated Use `rowSelection` instead. Kept for backwards compatibility.\n */\n selectable?: boolean;\n /**\n * @deprecated Use `rowSelection.selectedRowKeys` instead.\n */\n selected?: RowKey[];\n /**\n * @deprecated Use `rowSelection.onChange` instead.\n */\n onSelect?: (keys: RowKey[]) => void;\n\n /** Expandable row config. */\n expandable?: ExpandableConfig<Row>;\n\n /**\n * Pagination config — `false` disables pagination; otherwise renders a bottom\n * pagination bar and slices the data accordingly.\n */\n pagination?: false | PaginationConfig;\n\n /** Horizontal / vertical scroll config. */\n scroll?: TableScrollConfig;\n\n /** Called when user clicks a row. */\n onRowClick?: (row: Row, index: number) => void;\n /** Empty state. */\n empty?: React.ReactNode;\n className?: string;\n}\n\n/** `Table` — neumorphic data table with sorting, selection and visual variants. */\nexport function Table<Row extends Record<string, any> = any>({\n columns,\n data,\n rowKey,\n variant,\n hoverable = true,\n striped,\n sortKey,\n sortDir = \"asc\",\n onSort,\n rowSelection,\n selectable,\n selected = [],\n onSelect,\n expandable,\n pagination,\n scroll,\n onRowClick,\n empty = \"暂无数据\",\n className = \"\",\n}: TableProps<Row>) {\n const keyOf = React.useCallback(\n (row: Row, i: number): RowKey => {\n if (typeof rowKey === \"function\") return rowKey(row);\n if (rowKey) return row[rowKey] as any;\n return i;\n },\n [rowKey]\n );\n\n // ---------- Selection (rowSelection OR legacy selectable) ----------\n const selectionMode = rowSelection ? \"new\" : selectable ? \"legacy\" : \"off\";\n const selectionType = rowSelection?.type ?? \"checkbox\";\n\n const [innerSel, setInnerSel] = React.useState<RowKey[]>(\n rowSelection?.defaultSelectedRowKeys ?? []\n );\n const selControlledNew = rowSelection?.selectedRowKeys !== undefined;\n const selectedKeys: RowKey[] =\n selectionMode === \"new\"\n ? selControlledNew\n ? rowSelection!.selectedRowKeys!\n : innerSel\n : selectionMode === \"legacy\"\n ? selected\n : [];\n\n const commitSelected = (next: RowKey[], rows: Row[]) => {\n if (selectionMode === \"new\") {\n if (!selControlledNew) setInnerSel(next);\n rowSelection!.onChange?.(next, rows);\n } else if (selectionMode === \"legacy\") {\n onSelect?.(next);\n }\n };\n\n // ---------- Filters ----------\n // Per-column active filter values (internal state for uncontrolled columns).\n const [innerFilters, setInnerFilters] = React.useState<Record<string, (string | number)[]>>(\n () => {\n const out: Record<string, (string | number)[]> = {};\n for (const c of columns) {\n if (c.defaultFilteredValue && c.defaultFilteredValue.length) {\n out[c.key] = c.defaultFilteredValue;\n }\n }\n return out;\n }\n );\n const activeFilters: Record<string, (string | number)[]> = React.useMemo(() => {\n const out: Record<string, (string | number)[]> = {};\n for (const c of columns) {\n if (!c.filters?.length) continue;\n if (c.filteredValue !== undefined) {\n if (c.filteredValue.length) out[c.key] = c.filteredValue;\n } else if (innerFilters[c.key]?.length) {\n out[c.key] = innerFilters[c.key];\n }\n }\n return out;\n }, [columns, innerFilters]);\n\n const setColumnFilter = (col: TableColumn<Row>, values: (string | number)[]) => {\n if (col.filteredValue !== undefined) return; // controlled — parent must handle\n setInnerFilters((prev) => {\n const next = { ...prev };\n if (values.length === 0) delete next[col.key];\n else next[col.key] = values;\n return next;\n });\n };\n\n const filteredData = React.useMemo(() => {\n const entries = Object.entries(activeFilters);\n if (entries.length === 0) return data;\n return data.filter((row) => {\n for (const [colKey, vals] of entries) {\n const col = columns.find((c) => c.key === colKey);\n if (!col) continue;\n const match = vals.some((v) => {\n if (col.onFilter) return col.onFilter(v, row);\n if (col.dataIndex != null) {\n const cell = (row as any)[col.dataIndex];\n return cell === v || String(cell) === String(v);\n }\n return false;\n });\n if (!match) return false;\n }\n return true;\n });\n }, [data, columns, activeFilters]);\n\n // ---------- Pagination ----------\n const pagEnabled = pagination !== false && pagination !== undefined;\n const pagCfg: PaginationConfig = pagEnabled ? pagination! : {};\n const [innerPage, setInnerPage] = React.useState<number>(\n pagCfg.defaultCurrent ?? 1\n );\n const [innerPageSize, setInnerPageSize] = React.useState<number>(\n pagCfg.defaultPageSize ?? pagCfg.pageSize ?? 10\n );\n const pageControlled = pagCfg.current !== undefined;\n const curPage = pageControlled ? pagCfg.current! : innerPage;\n const curPageSize = pagCfg.pageSize ?? innerPageSize;\n const totalCount = pagCfg.total ?? filteredData.length;\n // Keep internal state in sync when caller changes pageSize uncontrolled->new.\n React.useEffect(() => {\n if (pagCfg.pageSize !== undefined && pagCfg.pageSize !== innerPageSize) {\n setInnerPageSize(pagCfg.pageSize);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pagCfg.pageSize]);\n\n // Reset to page 1 if filters pushed us past the last page\n React.useEffect(() => {\n if (!pagEnabled) return;\n const pages = Math.max(1, Math.ceil(filteredData.length / curPageSize));\n if (!pageControlled && curPage > pages) setInnerPage(pages);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filteredData.length, curPageSize, pagEnabled]);\n\n const pagedData = React.useMemo(() => {\n if (!pagEnabled) return filteredData;\n // If caller passes a pre-sliced page (total != data length and current is\n // controlled), trust them and don't re-slice.\n if (pagCfg.total !== undefined && pageControlled) {\n return filteredData;\n }\n const start = (curPage - 1) * curPageSize;\n return filteredData.slice(start, start + curPageSize);\n }, [pagEnabled, filteredData, curPage, curPageSize, pagCfg.total, pageControlled]);\n\n const onPageChange = (p: number) => {\n if (!pageControlled) setInnerPage(p);\n pagCfg.onChange?.(p, curPageSize);\n };\n\n // ---------- Expandable ----------\n const [innerExpanded, setInnerExpanded] = React.useState<RowKey[]>(\n expandable?.defaultExpandedRowKeys ?? []\n );\n const expandControlled = expandable?.expandedRowKeys !== undefined;\n const expandedKeys: RowKey[] = expandControlled\n ? expandable!.expandedRowKeys!\n : innerExpanded;\n const hasExpandable = !!expandable?.expandedRowRender;\n\n const toggleExpand = (row: Row, k: RowKey) => {\n const isOpen = expandedKeys.includes(k);\n const next = isOpen ? expandedKeys.filter((x) => x !== k) : [...expandedKeys, k];\n if (!expandControlled) setInnerExpanded(next);\n expandable?.onExpand?.(!isOpen, row);\n };\n\n // ---------- Derived bits ----------\n const v: TableVariant = variant ?? (striped ? \"striped\" : \"default\");\n const rowsToRender = pagedData;\n\n const selectableKeysOnPage = rowsToRender\n .map((r, i) => ({ row: r, k: keyOf(r, i) }))\n .filter(({ row }) => {\n if (selectionMode !== \"new\") return true;\n const props = rowSelection?.getCheckboxProps?.(row);\n return !props?.disabled;\n });\n\n const allSelectedOnPage =\n selectionMode !== \"off\" &&\n selectableKeysOnPage.length > 0 &&\n selectableKeysOnPage.every(({ k }) => selectedKeys.includes(k));\n const someSelectedOnPage =\n selectionMode !== \"off\" &&\n selectableKeysOnPage.some(({ k }) => selectedKeys.includes(k)) &&\n !allSelectedOnPage;\n\n const toggleRow = (row: Row, k: RowKey) => {\n if (selectionMode === \"new\") {\n const props = rowSelection?.getCheckboxProps?.(row);\n if (props?.disabled) return;\n let next: RowKey[];\n if (selectionType === \"radio\") {\n next = [k];\n } else {\n next = selectedKeys.includes(k)\n ? selectedKeys.filter((x) => x !== k)\n : [...selectedKeys, k];\n }\n const nextRows = data.filter((r, i) => next.includes(keyOf(r, i)));\n commitSelected(next, nextRows);\n } else if (selectionMode === \"legacy\") {\n const next = selectedKeys.includes(k)\n ? selectedKeys.filter((x) => x !== k)\n : [...selectedKeys, k];\n commitSelected(next, []);\n }\n };\n const toggleAll = () => {\n if (selectionMode === \"off\") return;\n if (selectionType === \"radio\") return; // radio doesn't support bulk toggle\n if (allSelectedOnPage) {\n // Deselect keys that appear on the current page\n const pageKeys = new Set(selectableKeysOnPage.map(({ k }) => k));\n const next = selectedKeys.filter((k) => !pageKeys.has(k));\n const nextRows = data.filter((r, i) => next.includes(keyOf(r, i)));\n commitSelected(next, nextRows);\n } else {\n // Select union of existing selection + page's selectable keys\n const set = new Set(selectedKeys);\n selectableKeysOnPage.forEach(({ k }) => set.add(k));\n const next = Array.from(set);\n const nextRows = data.filter((r, i) => next.includes(keyOf(r, i)));\n commitSelected(next, nextRows);\n }\n };\n\n const showSelCol = selectionMode !== \"off\";\n const showExpandCol = hasExpandable;\n const extraColCount = (showSelCol ? 1 : 0) + (showExpandCol ? 1 : 0);\n const totalColCount = columns.length + extraColCount;\n\n // ---------- Wrapper styling for scroll ----------\n const wrapStyle: React.CSSProperties = {};\n const innerTableStyle: React.CSSProperties = {};\n let wrapClass = \"table-wrap\";\n if (scroll?.y != null) {\n wrapStyle.maxHeight = scroll.y;\n wrapStyle.overflowY = \"auto\";\n wrapClass += \" scroll-y\";\n }\n if (scroll?.x != null) {\n wrapStyle.overflowX = \"auto\";\n innerTableStyle.minWidth = scroll.x;\n wrapClass += \" scroll-x\";\n }\n\n // ---------- Render ----------\n return (\n <>\n <div className={`${wrapClass} ${className}`} style={wrapStyle}>\n <table\n className={`table ${v} ${hoverable ? \"hoverable\" : \"\"} ${scroll?.y != null ? \"sticky-head\" : \"\"}`}\n style={innerTableStyle}\n >\n <thead>\n <tr>\n {showExpandCol && <th className=\"row-expand\" style={{ width: 40 }} />}\n {showSelCol && (\n <th className=\"row-check\" style={{ width: 44 }}>\n {selectionType === \"checkbox\" && (\n <Checkbox\n checked={allSelectedOnPage}\n indeterminate={someSelectedOnPage}\n onChange={toggleAll}\n />\n )}\n </th>\n )}\n {columns.map((c) => {\n const sorted = sortKey === c.key;\n const hasFilters = !!c.filters?.length;\n const filterActive = !!activeFilters[c.key]?.length;\n return (\n <th\n key={c.key}\n className={`${c.sortable ? \"sortable\" : \"\"} ${sorted ? \"sorted\" : \"\"} ${hasFilters ? \"filterable\" : \"\"}`}\n style={{ width: c.width, textAlign: c.align ?? \"left\" }}\n onClick={() => c.sortable && onSort?.(c.key)}\n >\n <span className=\"th-label\">{c.title}</span>\n {c.sortable && (\n <span className=\"sort-ind\">\n <Icon\n name={sorted ? (sortDir === \"asc\" ? \"chevUp\" : \"chevDown\") : \"chevDown\"}\n size={10}\n />\n </span>\n )}\n {hasFilters && (\n <ColumnFilterButton\n column={c}\n activeValues={activeFilters[c.key] ?? []}\n onApply={(values) => setColumnFilter(c, values)}\n active={filterActive}\n />\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {rowsToRender.length === 0 ? (\n <tr>\n <td colSpan={totalColCount} className=\"table-empty\">\n {empty}\n </td>\n </tr>\n ) : (\n rowsToRender.map((row, i) => {\n const k = keyOf(row, i);\n const isSel = selectedKeys.includes(k);\n const selProps = rowSelection?.getCheckboxProps?.(row);\n const canExpand =\n hasExpandable && (expandable?.rowExpandable?.(row) ?? true);\n const isExpanded = canExpand && expandedKeys.includes(k);\n return (\n <React.Fragment key={k}>\n <tr\n className={`${onRowClick ? \"clickable\" : \"\"} ${isSel ? \"selected\" : \"\"}`}\n onClick={onRowClick ? () => onRowClick(row, i) : undefined}\n >\n {showExpandCol && (\n <td\n className=\"row-expand\"\n onClick={(e) => {\n e.stopPropagation();\n if (canExpand) toggleExpand(row, k);\n }}\n >\n {canExpand && (\n <button\n type=\"button\"\n className={`expand-btn ${isExpanded ? \"open\" : \"\"}`}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? \"Collapse row\" : \"Expand row\"}\n onClick={(e) => {\n e.stopPropagation();\n toggleExpand(row, k);\n }}\n >\n <Icon name=\"chevRight\" size={12} />\n </button>\n )}\n </td>\n )}\n {showSelCol && (\n <td\n className=\"row-check\"\n onClick={(e) => {\n e.stopPropagation();\n toggleRow(row, k);\n }}\n >\n {selectionType === \"radio\" ? (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={isSel}\n disabled={selProps?.disabled}\n className={`radio-dot ${isSel ? \"checked\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n toggleRow(row, k);\n }}\n />\n ) : (\n <Checkbox\n checked={isSel}\n disabled={selProps?.disabled}\n onChange={() => toggleRow(row, k)}\n />\n )}\n </td>\n )}\n {columns.map((c) => {\n const val = c.dataIndex ? row[c.dataIndex] : undefined;\n return (\n <td key={c.key} style={{ textAlign: c.align ?? \"left\" }}>\n {c.render ? c.render(val, row, i) : (val as React.ReactNode)}\n </td>\n );\n })}\n </tr>\n {isExpanded && expandable?.expandedRowRender && (\n <tr className=\"expanded-row\">\n <td colSpan={totalColCount}>\n <div className=\"expanded-panel\">\n {expandable.expandedRowRender(row, i)}\n </div>\n </td>\n </tr>\n )}\n </React.Fragment>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n {pagEnabled && (\n <div className=\"table-pagination\">\n <Pagination\n total={totalCount}\n pageSize={curPageSize}\n page={curPage}\n onChange={onPageChange}\n />\n </div>\n )}\n </>\n );\n}\n\n/* ============ Column filter button (header popover) ============ */\n\ninterface ColumnFilterButtonProps<Row> {\n column: TableColumn<Row>;\n activeValues: (string | number)[];\n onApply: (values: (string | number)[]) => void;\n active: boolean;\n}\n\nfunction ColumnFilterButton<Row>({\n column,\n activeValues,\n onApply,\n active,\n}: ColumnFilterButtonProps<Row>) {\n const [open, setOpen] = React.useState(false);\n const [draft, setDraft] = React.useState<(string | number)[]>(activeValues);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n const { triggerRef, floatingStyle } = useFloating<HTMLButtonElement>({\n open,\n placement: \"bottom\",\n panelWidth: 200,\n panelHeight: Math.min(260, (column.filters?.length ?? 0) * 32 + 80),\n alignCross: \"end\",\n });\n\n React.useEffect(() => {\n if (open) setDraft(activeValues);\n }, [open, activeValues]);\n\n React.useEffect(() => {\n if (!open) return;\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (triggerRef.current?.contains(t)) return;\n if (panelRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const toggle = (v: string | number) =>\n setDraft((d) => (d.includes(v) ? d.filter((x) => x !== v) : [...d, v]));\n\n return (\n <>\n <button\n ref={triggerRef}\n type=\"button\"\n className={`filter-ind ${active ? \"active\" : \"\"}`}\n aria-label=\"Filter column\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen((o) => !o);\n }}\n >\n <Icon name=\"filter\" size={10} />\n </button>\n {open &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={panelRef}\n className=\"table-filter-panel\"\n style={floatingStyle}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"table-filter-options\">\n {(column.filters ?? []).map((f) => (\n <label key={String(f.value)} className=\"table-filter-item\">\n <Checkbox\n checked={draft.includes(f.value)}\n onChange={() => toggle(f.value)}\n />\n <span>{f.text}</span>\n </label>\n ))}\n </div>\n <div className=\"table-filter-actions\">\n <button\n type=\"button\"\n className=\"tf-btn ghost\"\n onClick={() => {\n setDraft([]);\n onApply([]);\n setOpen(false);\n }}\n >\n 重置\n </button>\n <button\n type=\"button\"\n className=\"tf-btn primary\"\n onClick={() => {\n onApply(draft);\n setOpen(false);\n }}\n >\n 确定\n </button>\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n\n/* ============ TablePro ============ */\n\nexport interface TableProProps<Row = any> extends TableProps<Row> {\n /** Toolbar slot — search input, filter, etc. */\n toolbar?: React.ReactNode;\n /** Right-aligned actions slot in toolbar. */\n actions?: React.ReactNode;\n /** Footer slot — usually <Pagination />. Optional now that `pagination` is built-in. */\n footer?: React.ReactNode;\n /** Title shown above the toolbar. */\n title?: React.ReactNode;\n}\n\n/**\n * `TablePro` — full-featured table card with toolbar, sortable/selectable rows,\n * variants, and a footer slot for pagination.\n *\n * Prefer the built-in `pagination` prop over rendering a `<Pagination />` in the\n * `footer` slot; `footer` still works for custom footers.\n */\nexport function TablePro<Row extends Record<string, any> = any>({\n toolbar,\n actions,\n footer,\n title,\n className = \"\",\n ...tableProps\n}: TableProProps<Row>) {\n return (\n <div className={`table-card ${className}`}>\n {(title || toolbar || actions) && (\n <div className=\"table-toolbar\">\n {title && <div className=\"table-title\">{title}</div>}\n <div className=\"table-toolbar-main\">{toolbar}</div>\n {actions && <div className=\"table-toolbar-actions\">{actions}</div>}\n </div>\n )}\n <Table {...tableProps} className=\"joined\" />\n {footer && <div className=\"table-footer\">{footer}</div>}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Table/Table.tsx"],"names":["v","Fragment"],"mappings":"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","file":"chunk-E6R63QOL.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Table.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Icon } from \"../Icon\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Pagination } from \"../Pagination\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport type RowKey = string | number;\n\nexport interface TableColumnFilterItem {\n text: React.ReactNode;\n value: string | number;\n}\n\nexport interface TableColumn<Row = any> {\n key: string;\n title: React.ReactNode;\n /** Data key to read from row, or custom render. */\n dataIndex?: keyof Row;\n render?: (value: any, row: Row, index: number) => React.ReactNode;\n width?: number | string;\n align?: \"left\" | \"center\" | \"right\";\n sortable?: boolean;\n /** Filter options shown in header dropdown. Requires `onFilter` (or data index match). */\n filters?: TableColumnFilterItem[];\n /**\n * Predicate to decide whether a row matches a given filter value.\n * If omitted, falls back to strict equality on `row[dataIndex]`.\n */\n onFilter?: (value: string | number, row: Row) => boolean;\n /**\n * Default active filter values. When `filteredValue` is controlled externally via\n * `Table.filteredValue`, prefer managing it at the table level.\n */\n defaultFilteredValue?: (string | number)[];\n /** Controlled filter selection — when provided, makes the column's filter controlled. */\n filteredValue?: (string | number)[];\n}\n\nexport type TableVariant = \"default\" | \"striped\" | \"embossed\" | \"cards\";\n\nexport interface PaginationConfig {\n /** Current page (1-indexed). Makes pagination controlled. */\n current?: number;\n /** Uncontrolled initial page. */\n defaultCurrent?: number;\n /** Items per page. */\n pageSize?: number;\n /** Default items per page (uncontrolled). */\n defaultPageSize?: number;\n /** Total item count. Defaults to `data.length` when omitted. */\n total?: number;\n /** Fired when user picks a page or changes page size. */\n onChange?: (page: number, pageSize: number) => void;\n /** Reserved for future: jump-to-page input. */\n showQuickJumper?: boolean;\n /** Reserved for future: page size dropdown. */\n showSizeChanger?: boolean;\n /** Reserved for future: selectable page sizes. */\n pageSizeOptions?: number[];\n}\n\nexport interface RowSelectionConfig<Row = any> {\n /** \"checkbox\" (default) allows multi-select; \"radio\" allows only one row at a time. */\n type?: \"checkbox\" | \"radio\";\n /** Controlled list of selected row keys. */\n selectedRowKeys?: RowKey[];\n /** Uncontrolled initial selection. */\n defaultSelectedRowKeys?: RowKey[];\n /** Fired on selection change; receives the new keys and matching rows. */\n onChange?: (selectedRowKeys: RowKey[], selectedRows: Row[]) => void;\n /** Per-row switch toggling checkbox disabled state. */\n getCheckboxProps?: (row: Row) => { disabled?: boolean };\n}\n\nexport interface ExpandableConfig<Row = any> {\n /** Controlled expanded row keys. */\n expandedRowKeys?: RowKey[];\n /** Uncontrolled initial expanded row keys. */\n defaultExpandedRowKeys?: RowKey[];\n /** Fired when a row expands / collapses. */\n onExpand?: (expanded: boolean, row: Row) => void;\n /** Render function for the expanded panel. When omitted, no expand UI renders. */\n expandedRowRender?: (row: Row, index: number) => React.ReactNode;\n /** Decide whether a given row can be expanded. */\n rowExpandable?: (row: Row) => boolean;\n}\n\nexport interface TableScrollConfig {\n /** Horizontal scroll: min-width of the inner table. */\n x?: number | string;\n /** Vertical scroll: max body height (with sticky header). */\n y?: number | string;\n}\n\nexport interface TableProps<Row = any> {\n columns: TableColumn<Row>[];\n data: Row[];\n rowKey?: keyof Row | ((row: Row) => RowKey);\n /** Visual variant. */\n variant?: TableVariant;\n /** Hoverable rows. */\n hoverable?: boolean;\n /** Striped rows (shortcut for variant=\"striped\"). */\n striped?: boolean;\n\n /** Sort state — controlled. */\n sortKey?: string;\n sortDir?: \"asc\" | \"desc\";\n onSort?: (key: string) => void;\n\n /**\n * Row selection config — preferred API (antd-style).\n * When provided, takes precedence over `selectable` / `selected` / `onSelect`.\n */\n rowSelection?: RowSelectionConfig<Row>;\n\n /**\n * @deprecated Use `rowSelection` instead. Kept for backwards compatibility.\n */\n selectable?: boolean;\n /**\n * @deprecated Use `rowSelection.selectedRowKeys` instead.\n */\n selected?: RowKey[];\n /**\n * @deprecated Use `rowSelection.onChange` instead.\n */\n onSelect?: (keys: RowKey[]) => void;\n\n /** Expandable row config. */\n expandable?: ExpandableConfig<Row>;\n\n /**\n * Pagination config — `false` disables pagination; otherwise renders a bottom\n * pagination bar and slices the data accordingly.\n */\n pagination?: false | PaginationConfig;\n\n /** Horizontal / vertical scroll config. */\n scroll?: TableScrollConfig;\n\n /** Called when user clicks a row. */\n onRowClick?: (row: Row, index: number) => void;\n /** Empty state. */\n empty?: React.ReactNode;\n className?: string;\n}\n\n/** `Table` — neumorphic data table with sorting, selection and visual variants. */\nexport function Table<Row extends Record<string, any> = any>({\n columns,\n data,\n rowKey,\n variant,\n hoverable = true,\n striped,\n sortKey,\n sortDir = \"asc\",\n onSort,\n rowSelection,\n selectable,\n selected = [],\n onSelect,\n expandable,\n pagination,\n scroll,\n onRowClick,\n empty = \"暂无数据\",\n className = \"\",\n}: TableProps<Row>) {\n const keyOf = React.useCallback(\n (row: Row, i: number): RowKey => {\n if (typeof rowKey === \"function\") return rowKey(row);\n if (rowKey) return row[rowKey] as any;\n return i;\n },\n [rowKey]\n );\n\n // ---------- Selection (rowSelection OR legacy selectable) ----------\n const selectionMode = rowSelection ? \"new\" : selectable ? \"legacy\" : \"off\";\n const selectionType = rowSelection?.type ?? \"checkbox\";\n\n const [innerSel, setInnerSel] = React.useState<RowKey[]>(\n rowSelection?.defaultSelectedRowKeys ?? []\n );\n const selControlledNew = rowSelection?.selectedRowKeys !== undefined;\n const selectedKeys: RowKey[] =\n selectionMode === \"new\"\n ? selControlledNew\n ? rowSelection!.selectedRowKeys!\n : innerSel\n : selectionMode === \"legacy\"\n ? selected\n : [];\n\n const commitSelected = (next: RowKey[], rows: Row[]) => {\n if (selectionMode === \"new\") {\n if (!selControlledNew) setInnerSel(next);\n rowSelection!.onChange?.(next, rows);\n } else if (selectionMode === \"legacy\") {\n onSelect?.(next);\n }\n };\n\n // ---------- Filters ----------\n // Per-column active filter values (internal state for uncontrolled columns).\n const [innerFilters, setInnerFilters] = React.useState<Record<string, (string | number)[]>>(\n () => {\n const out: Record<string, (string | number)[]> = {};\n for (const c of columns) {\n if (c.defaultFilteredValue && c.defaultFilteredValue.length) {\n out[c.key] = c.defaultFilteredValue;\n }\n }\n return out;\n }\n );\n const activeFilters: Record<string, (string | number)[]> = React.useMemo(() => {\n const out: Record<string, (string | number)[]> = {};\n for (const c of columns) {\n if (!c.filters?.length) continue;\n if (c.filteredValue !== undefined) {\n if (c.filteredValue.length) out[c.key] = c.filteredValue;\n } else if (innerFilters[c.key]?.length) {\n out[c.key] = innerFilters[c.key];\n }\n }\n return out;\n }, [columns, innerFilters]);\n\n const setColumnFilter = (col: TableColumn<Row>, values: (string | number)[]) => {\n if (col.filteredValue !== undefined) return; // controlled — parent must handle\n setInnerFilters((prev) => {\n const next = { ...prev };\n if (values.length === 0) delete next[col.key];\n else next[col.key] = values;\n return next;\n });\n };\n\n const filteredData = React.useMemo(() => {\n const entries = Object.entries(activeFilters);\n if (entries.length === 0) return data;\n return data.filter((row) => {\n for (const [colKey, vals] of entries) {\n const col = columns.find((c) => c.key === colKey);\n if (!col) continue;\n const match = vals.some((v) => {\n if (col.onFilter) return col.onFilter(v, row);\n if (col.dataIndex != null) {\n const cell = (row as any)[col.dataIndex];\n return cell === v || String(cell) === String(v);\n }\n return false;\n });\n if (!match) return false;\n }\n return true;\n });\n }, [data, columns, activeFilters]);\n\n // ---------- Pagination ----------\n const pagEnabled = pagination !== false && pagination !== undefined;\n const pagCfg: PaginationConfig = pagEnabled ? pagination! : {};\n const [innerPage, setInnerPage] = React.useState<number>(\n pagCfg.defaultCurrent ?? 1\n );\n const [innerPageSize, setInnerPageSize] = React.useState<number>(\n pagCfg.defaultPageSize ?? pagCfg.pageSize ?? 10\n );\n const pageControlled = pagCfg.current !== undefined;\n const curPage = pageControlled ? pagCfg.current! : innerPage;\n const curPageSize = pagCfg.pageSize ?? innerPageSize;\n const totalCount = pagCfg.total ?? filteredData.length;\n // Keep internal state in sync when caller changes pageSize uncontrolled->new.\n React.useEffect(() => {\n if (pagCfg.pageSize !== undefined && pagCfg.pageSize !== innerPageSize) {\n setInnerPageSize(pagCfg.pageSize);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pagCfg.pageSize]);\n\n // Reset to page 1 if filters pushed us past the last page\n React.useEffect(() => {\n if (!pagEnabled) return;\n const pages = Math.max(1, Math.ceil(filteredData.length / curPageSize));\n if (!pageControlled && curPage > pages) setInnerPage(pages);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filteredData.length, curPageSize, pagEnabled]);\n\n const pagedData = React.useMemo(() => {\n if (!pagEnabled) return filteredData;\n // If caller passes a pre-sliced page (total != data length and current is\n // controlled), trust them and don't re-slice.\n if (pagCfg.total !== undefined && pageControlled) {\n return filteredData;\n }\n const start = (curPage - 1) * curPageSize;\n return filteredData.slice(start, start + curPageSize);\n }, [pagEnabled, filteredData, curPage, curPageSize, pagCfg.total, pageControlled]);\n\n const onPageChange = (p: number) => {\n if (!pageControlled) setInnerPage(p);\n pagCfg.onChange?.(p, curPageSize);\n };\n\n // ---------- Expandable ----------\n const [innerExpanded, setInnerExpanded] = React.useState<RowKey[]>(\n expandable?.defaultExpandedRowKeys ?? []\n );\n const expandControlled = expandable?.expandedRowKeys !== undefined;\n const expandedKeys: RowKey[] = expandControlled\n ? expandable!.expandedRowKeys!\n : innerExpanded;\n const hasExpandable = !!expandable?.expandedRowRender;\n\n const toggleExpand = (row: Row, k: RowKey) => {\n const isOpen = expandedKeys.includes(k);\n const next = isOpen ? expandedKeys.filter((x) => x !== k) : [...expandedKeys, k];\n if (!expandControlled) setInnerExpanded(next);\n expandable?.onExpand?.(!isOpen, row);\n };\n\n // ---------- Derived bits ----------\n const v: TableVariant = variant ?? (striped ? \"striped\" : \"default\");\n const rowsToRender = pagedData;\n\n const selectableKeysOnPage = rowsToRender\n .map((r, i) => ({ row: r, k: keyOf(r, i) }))\n .filter(({ row }) => {\n if (selectionMode !== \"new\") return true;\n const props = rowSelection?.getCheckboxProps?.(row);\n return !props?.disabled;\n });\n\n const allSelectedOnPage =\n selectionMode !== \"off\" &&\n selectableKeysOnPage.length > 0 &&\n selectableKeysOnPage.every(({ k }) => selectedKeys.includes(k));\n const someSelectedOnPage =\n selectionMode !== \"off\" &&\n selectableKeysOnPage.some(({ k }) => selectedKeys.includes(k)) &&\n !allSelectedOnPage;\n\n const toggleRow = (row: Row, k: RowKey) => {\n if (selectionMode === \"new\") {\n const props = rowSelection?.getCheckboxProps?.(row);\n if (props?.disabled) return;\n let next: RowKey[];\n if (selectionType === \"radio\") {\n next = [k];\n } else {\n next = selectedKeys.includes(k)\n ? selectedKeys.filter((x) => x !== k)\n : [...selectedKeys, k];\n }\n const nextRows = data.filter((r, i) => next.includes(keyOf(r, i)));\n commitSelected(next, nextRows);\n } else if (selectionMode === \"legacy\") {\n const next = selectedKeys.includes(k)\n ? selectedKeys.filter((x) => x !== k)\n : [...selectedKeys, k];\n commitSelected(next, []);\n }\n };\n const toggleAll = () => {\n if (selectionMode === \"off\") return;\n if (selectionType === \"radio\") return; // radio doesn't support bulk toggle\n if (allSelectedOnPage) {\n // Deselect keys that appear on the current page\n const pageKeys = new Set(selectableKeysOnPage.map(({ k }) => k));\n const next = selectedKeys.filter((k) => !pageKeys.has(k));\n const nextRows = data.filter((r, i) => next.includes(keyOf(r, i)));\n commitSelected(next, nextRows);\n } else {\n // Select union of existing selection + page's selectable keys\n const set = new Set(selectedKeys);\n selectableKeysOnPage.forEach(({ k }) => set.add(k));\n const next = Array.from(set);\n const nextRows = data.filter((r, i) => next.includes(keyOf(r, i)));\n commitSelected(next, nextRows);\n }\n };\n\n const showSelCol = selectionMode !== \"off\";\n const showExpandCol = hasExpandable;\n const extraColCount = (showSelCol ? 1 : 0) + (showExpandCol ? 1 : 0);\n const totalColCount = columns.length + extraColCount;\n\n // ---------- Wrapper styling for scroll ----------\n const wrapStyle: React.CSSProperties = {};\n const innerTableStyle: React.CSSProperties = {};\n let wrapClass = \"table-wrap\";\n if (scroll?.y != null) {\n wrapStyle.maxHeight = scroll.y;\n wrapStyle.overflowY = \"auto\";\n wrapClass += \" scroll-y\";\n }\n if (scroll?.x != null) {\n wrapStyle.overflowX = \"auto\";\n innerTableStyle.minWidth = scroll.x;\n wrapClass += \" scroll-x\";\n }\n\n // ---------- Render ----------\n return (\n <>\n <div className={`${wrapClass} ${className}`} style={wrapStyle}>\n <table\n className={`table ${v} ${hoverable ? \"hoverable\" : \"\"} ${scroll?.y != null ? \"sticky-head\" : \"\"}`}\n style={innerTableStyle}\n >\n <thead>\n <tr>\n {showExpandCol && <th className=\"row-expand\" style={{ width: 40 }} />}\n {showSelCol && (\n <th className=\"row-check\" style={{ width: 44 }}>\n {selectionType === \"checkbox\" && (\n <Checkbox\n checked={allSelectedOnPage}\n indeterminate={someSelectedOnPage}\n onChange={toggleAll}\n />\n )}\n </th>\n )}\n {columns.map((c) => {\n const sorted = sortKey === c.key;\n const hasFilters = !!c.filters?.length;\n const filterActive = !!activeFilters[c.key]?.length;\n return (\n <th\n key={c.key}\n className={`${c.sortable ? \"sortable\" : \"\"} ${sorted ? \"sorted\" : \"\"} ${hasFilters ? \"filterable\" : \"\"}`}\n style={{ width: c.width, textAlign: c.align ?? \"left\" }}\n onClick={() => c.sortable && onSort?.(c.key)}\n >\n <span className=\"th-label\">{c.title}</span>\n {c.sortable && (\n <span className=\"sort-ind\">\n <Icon\n name={sorted ? (sortDir === \"asc\" ? \"chevUp\" : \"chevDown\") : \"chevDown\"}\n size={10}\n />\n </span>\n )}\n {hasFilters && (\n <ColumnFilterButton\n column={c}\n activeValues={activeFilters[c.key] ?? []}\n onApply={(values) => setColumnFilter(c, values)}\n active={filterActive}\n />\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {rowsToRender.length === 0 ? (\n <tr>\n <td colSpan={totalColCount} className=\"table-empty\">\n {empty}\n </td>\n </tr>\n ) : (\n rowsToRender.map((row, i) => {\n const k = keyOf(row, i);\n const isSel = selectedKeys.includes(k);\n const selProps = rowSelection?.getCheckboxProps?.(row);\n const canExpand =\n hasExpandable && (expandable?.rowExpandable?.(row) ?? true);\n const isExpanded = canExpand && expandedKeys.includes(k);\n return (\n <React.Fragment key={k}>\n <tr\n className={`${onRowClick ? \"clickable\" : \"\"} ${isSel ? \"selected\" : \"\"}`}\n onClick={onRowClick ? () => onRowClick(row, i) : undefined}\n >\n {showExpandCol && (\n <td\n className=\"row-expand\"\n onClick={(e) => {\n e.stopPropagation();\n if (canExpand) toggleExpand(row, k);\n }}\n >\n {canExpand && (\n <button\n type=\"button\"\n className={`expand-btn ${isExpanded ? \"open\" : \"\"}`}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? \"Collapse row\" : \"Expand row\"}\n onClick={(e) => {\n e.stopPropagation();\n toggleExpand(row, k);\n }}\n >\n <Icon name=\"chevRight\" size={12} />\n </button>\n )}\n </td>\n )}\n {showSelCol && (\n <td\n className=\"row-check\"\n onClick={(e) => {\n e.stopPropagation();\n toggleRow(row, k);\n }}\n >\n {selectionType === \"radio\" ? (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={isSel}\n disabled={selProps?.disabled}\n className={`radio-dot ${isSel ? \"checked\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n toggleRow(row, k);\n }}\n />\n ) : (\n <Checkbox\n checked={isSel}\n disabled={selProps?.disabled}\n onChange={() => toggleRow(row, k)}\n />\n )}\n </td>\n )}\n {columns.map((c) => {\n const val = c.dataIndex ? row[c.dataIndex] : undefined;\n return (\n <td key={c.key} style={{ textAlign: c.align ?? \"left\" }}>\n {c.render ? c.render(val, row, i) : (val as React.ReactNode)}\n </td>\n );\n })}\n </tr>\n {isExpanded && expandable?.expandedRowRender && (\n <tr className=\"expanded-row\">\n <td colSpan={totalColCount}>\n <div className=\"expanded-panel\">\n {expandable.expandedRowRender(row, i)}\n </div>\n </td>\n </tr>\n )}\n </React.Fragment>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n {pagEnabled && (\n <div className=\"table-pagination\">\n <Pagination\n total={totalCount}\n pageSize={curPageSize}\n page={curPage}\n onChange={onPageChange}\n />\n </div>\n )}\n </>\n );\n}\n\n/* ============ Column filter button (header popover) ============ */\n\ninterface ColumnFilterButtonProps<Row> {\n column: TableColumn<Row>;\n activeValues: (string | number)[];\n onApply: (values: (string | number)[]) => void;\n active: boolean;\n}\n\nfunction ColumnFilterButton<Row>({\n column,\n activeValues,\n onApply,\n active,\n}: ColumnFilterButtonProps<Row>) {\n const [open, setOpen] = React.useState(false);\n const [draft, setDraft] = React.useState<(string | number)[]>(activeValues);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n const { triggerRef, floatingStyle } = useFloating<HTMLButtonElement>({\n open,\n placement: \"bottom\",\n panelWidth: 200,\n panelHeight: Math.min(260, (column.filters?.length ?? 0) * 32 + 80),\n alignCross: \"end\",\n });\n\n React.useEffect(() => {\n if (open) setDraft(activeValues);\n }, [open, activeValues]);\n\n React.useEffect(() => {\n if (!open) return;\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (triggerRef.current?.contains(t)) return;\n if (panelRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const toggle = (v: string | number) =>\n setDraft((d) => (d.includes(v) ? d.filter((x) => x !== v) : [...d, v]));\n\n return (\n <>\n <button\n ref={triggerRef}\n type=\"button\"\n className={`filter-ind ${active ? \"active\" : \"\"}`}\n aria-label=\"Filter column\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen((o) => !o);\n }}\n >\n <Icon name=\"filter\" size={10} />\n </button>\n {open &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={panelRef}\n className=\"table-filter-panel\"\n style={floatingStyle}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"table-filter-options\">\n {(column.filters ?? []).map((f) => (\n <label key={String(f.value)} className=\"table-filter-item\">\n <Checkbox\n checked={draft.includes(f.value)}\n onChange={() => toggle(f.value)}\n />\n <span>{f.text}</span>\n </label>\n ))}\n </div>\n <div className=\"table-filter-actions\">\n <button\n type=\"button\"\n className=\"tf-btn ghost\"\n onClick={() => {\n setDraft([]);\n onApply([]);\n setOpen(false);\n }}\n >\n 重置\n </button>\n <button\n type=\"button\"\n className=\"tf-btn primary\"\n onClick={() => {\n onApply(draft);\n setOpen(false);\n }}\n >\n 确定\n </button>\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n\n/* ============ TablePro ============ */\n\nexport interface TableProProps<Row = any> extends TableProps<Row> {\n /** Toolbar slot — search input, filter, etc. */\n toolbar?: React.ReactNode;\n /** Right-aligned actions slot in toolbar. */\n actions?: React.ReactNode;\n /** Footer slot — usually <Pagination />. Optional now that `pagination` is built-in. */\n footer?: React.ReactNode;\n /** Title shown above the toolbar. */\n title?: React.ReactNode;\n}\n\n/**\n * `TablePro` — full-featured table card with toolbar, sortable/selectable rows,\n * variants, and a footer slot for pagination.\n *\n * Prefer the built-in `pagination` prop over rendering a `<Pagination />` in the\n * `footer` slot; `footer` still works for custom footers.\n */\nexport function TablePro<Row extends Record<string, any> = any>({\n toolbar,\n actions,\n footer,\n title,\n className = \"\",\n ...tableProps\n}: TableProProps<Row>) {\n return (\n <div className={`table-card ${className}`}>\n {(title || toolbar || actions) && (\n <div className=\"table-toolbar\">\n {title && <div className=\"table-title\">{title}</div>}\n <div className=\"table-toolbar-main\">{toolbar}</div>\n {actions && <div className=\"table-toolbar-actions\">{actions}</div>}\n </div>\n )}\n <Table {...tableProps} className=\"joined\" />\n {footer && <div className=\"table-footer\">{footer}</div>}\n </div>\n );\n}\n"]}
@@ -6,7 +6,7 @@ var chunkRZ2E3XEU_cjs = require('./chunk-RZ2E3XEU.cjs');
6
6
  var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
7
7
  require('./tokens-HWQ7KWPG.css');
8
8
  require('./shared-NJHRNLRH.css');
9
- require('./Table-ADVN6LXP.css');
9
+ require('./Table-YKVM42SW.css');
10
10
  var React = require('react');
11
11
  var reactDom = require('react-dom');
12
12
  var jsxRuntime = require('react/jsx-runtime');
@@ -495,5 +495,5 @@ function TablePro({
495
495
 
496
496
  exports.Table = Table;
497
497
  exports.TablePro = TablePro;
498
- //# sourceMappingURL=chunk-IFERLHCL.cjs.map
499
- //# sourceMappingURL=chunk-IFERLHCL.cjs.map
498
+ //# sourceMappingURL=chunk-SBMOIE5C.cjs.map
499
+ //# sourceMappingURL=chunk-SBMOIE5C.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Table/Table.tsx"],"names":["React","v","jsxs","Fragment","jsx","Checkbox","Icon","Pagination","useFloating","createPortal"],"mappings":"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","file":"chunk-IFERLHCL.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Table.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Icon } from \"../Icon\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Pagination } from \"../Pagination\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport type RowKey = string | number;\n\nexport interface TableColumnFilterItem {\n text: React.ReactNode;\n value: string | number;\n}\n\nexport interface TableColumn<Row = any> {\n key: string;\n title: React.ReactNode;\n /** Data key to read from row, or custom render. */\n dataIndex?: keyof Row;\n render?: (value: any, row: Row, index: number) => React.ReactNode;\n width?: number | string;\n align?: \"left\" | \"center\" | \"right\";\n sortable?: boolean;\n /** Filter options shown in header dropdown. Requires `onFilter` (or data index match). */\n filters?: TableColumnFilterItem[];\n /**\n * Predicate to decide whether a row matches a given filter value.\n * If omitted, falls back to strict equality on `row[dataIndex]`.\n */\n onFilter?: (value: string | number, row: Row) => boolean;\n /**\n * Default active filter values. When `filteredValue` is controlled externally via\n * `Table.filteredValue`, prefer managing it at the table level.\n */\n defaultFilteredValue?: (string | number)[];\n /** Controlled filter selection — when provided, makes the column's filter controlled. */\n filteredValue?: (string | number)[];\n}\n\nexport type TableVariant = \"default\" | \"striped\" | \"embossed\" | \"cards\";\n\nexport interface PaginationConfig {\n /** Current page (1-indexed). Makes pagination controlled. */\n current?: number;\n /** Uncontrolled initial page. */\n defaultCurrent?: number;\n /** Items per page. */\n pageSize?: number;\n /** Default items per page (uncontrolled). */\n defaultPageSize?: number;\n /** Total item count. Defaults to `data.length` when omitted. */\n total?: number;\n /** Fired when user picks a page or changes page size. */\n onChange?: (page: number, pageSize: number) => void;\n /** Reserved for future: jump-to-page input. */\n showQuickJumper?: boolean;\n /** Reserved for future: page size dropdown. */\n showSizeChanger?: boolean;\n /** Reserved for future: selectable page sizes. */\n pageSizeOptions?: number[];\n}\n\nexport interface RowSelectionConfig<Row = any> {\n /** \"checkbox\" (default) allows multi-select; \"radio\" allows only one row at a time. */\n type?: \"checkbox\" | \"radio\";\n /** Controlled list of selected row keys. */\n selectedRowKeys?: RowKey[];\n /** Uncontrolled initial selection. */\n defaultSelectedRowKeys?: RowKey[];\n /** Fired on selection change; receives the new keys and matching rows. */\n onChange?: (selectedRowKeys: RowKey[], selectedRows: Row[]) => void;\n /** Per-row switch toggling checkbox disabled state. */\n getCheckboxProps?: (row: Row) => { disabled?: boolean };\n}\n\nexport interface ExpandableConfig<Row = any> {\n /** Controlled expanded row keys. */\n expandedRowKeys?: RowKey[];\n /** Uncontrolled initial expanded row keys. */\n defaultExpandedRowKeys?: RowKey[];\n /** Fired when a row expands / collapses. */\n onExpand?: (expanded: boolean, row: Row) => void;\n /** Render function for the expanded panel. When omitted, no expand UI renders. */\n expandedRowRender?: (row: Row, index: number) => React.ReactNode;\n /** Decide whether a given row can be expanded. */\n rowExpandable?: (row: Row) => boolean;\n}\n\nexport interface TableScrollConfig {\n /** Horizontal scroll: min-width of the inner table. */\n x?: number | string;\n /** Vertical scroll: max body height (with sticky header). */\n y?: number | string;\n}\n\nexport interface TableProps<Row = any> {\n columns: TableColumn<Row>[];\n data: Row[];\n rowKey?: keyof Row | ((row: Row) => RowKey);\n /** Visual variant. */\n variant?: TableVariant;\n /** Hoverable rows. */\n hoverable?: boolean;\n /** Striped rows (shortcut for variant=\"striped\"). */\n striped?: boolean;\n\n /** Sort state — controlled. */\n sortKey?: string;\n sortDir?: \"asc\" | \"desc\";\n onSort?: (key: string) => void;\n\n /**\n * Row selection config — preferred API (antd-style).\n * When provided, takes precedence over `selectable` / `selected` / `onSelect`.\n */\n rowSelection?: RowSelectionConfig<Row>;\n\n /**\n * @deprecated Use `rowSelection` instead. Kept for backwards compatibility.\n */\n selectable?: boolean;\n /**\n * @deprecated Use `rowSelection.selectedRowKeys` instead.\n */\n selected?: RowKey[];\n /**\n * @deprecated Use `rowSelection.onChange` instead.\n */\n onSelect?: (keys: RowKey[]) => void;\n\n /** Expandable row config. */\n expandable?: ExpandableConfig<Row>;\n\n /**\n * Pagination config — `false` disables pagination; otherwise renders a bottom\n * pagination bar and slices the data accordingly.\n */\n pagination?: false | PaginationConfig;\n\n /** Horizontal / vertical scroll config. */\n scroll?: TableScrollConfig;\n\n /** Called when user clicks a row. */\n onRowClick?: (row: Row, index: number) => void;\n /** Empty state. */\n empty?: React.ReactNode;\n className?: string;\n}\n\n/** `Table` — neumorphic data table with sorting, selection and visual variants. */\nexport function Table<Row extends Record<string, any> = any>({\n columns,\n data,\n rowKey,\n variant,\n hoverable = true,\n striped,\n sortKey,\n sortDir = \"asc\",\n onSort,\n rowSelection,\n selectable,\n selected = [],\n onSelect,\n expandable,\n pagination,\n scroll,\n onRowClick,\n empty = \"暂无数据\",\n className = \"\",\n}: TableProps<Row>) {\n const keyOf = React.useCallback(\n (row: Row, i: number): RowKey => {\n if (typeof rowKey === \"function\") return rowKey(row);\n if (rowKey) return row[rowKey] as any;\n return i;\n },\n [rowKey]\n );\n\n // ---------- Selection (rowSelection OR legacy selectable) ----------\n const selectionMode = rowSelection ? \"new\" : selectable ? \"legacy\" : \"off\";\n const selectionType = rowSelection?.type ?? \"checkbox\";\n\n const [innerSel, setInnerSel] = React.useState<RowKey[]>(\n rowSelection?.defaultSelectedRowKeys ?? []\n );\n const selControlledNew = rowSelection?.selectedRowKeys !== undefined;\n const selectedKeys: RowKey[] =\n selectionMode === \"new\"\n ? selControlledNew\n ? rowSelection!.selectedRowKeys!\n : innerSel\n : selectionMode === \"legacy\"\n ? selected\n : [];\n\n const commitSelected = (next: RowKey[], rows: Row[]) => {\n if (selectionMode === \"new\") {\n if (!selControlledNew) setInnerSel(next);\n rowSelection!.onChange?.(next, rows);\n } else if (selectionMode === \"legacy\") {\n onSelect?.(next);\n }\n };\n\n // ---------- Filters ----------\n // Per-column active filter values (internal state for uncontrolled columns).\n const [innerFilters, setInnerFilters] = React.useState<Record<string, (string | number)[]>>(\n () => {\n const out: Record<string, (string | number)[]> = {};\n for (const c of columns) {\n if (c.defaultFilteredValue && c.defaultFilteredValue.length) {\n out[c.key] = c.defaultFilteredValue;\n }\n }\n return out;\n }\n );\n const activeFilters: Record<string, (string | number)[]> = React.useMemo(() => {\n const out: Record<string, (string | number)[]> = {};\n for (const c of columns) {\n if (!c.filters?.length) continue;\n if (c.filteredValue !== undefined) {\n if (c.filteredValue.length) out[c.key] = c.filteredValue;\n } else if (innerFilters[c.key]?.length) {\n out[c.key] = innerFilters[c.key];\n }\n }\n return out;\n }, [columns, innerFilters]);\n\n const setColumnFilter = (col: TableColumn<Row>, values: (string | number)[]) => {\n if (col.filteredValue !== undefined) return; // controlled — parent must handle\n setInnerFilters((prev) => {\n const next = { ...prev };\n if (values.length === 0) delete next[col.key];\n else next[col.key] = values;\n return next;\n });\n };\n\n const filteredData = React.useMemo(() => {\n const entries = Object.entries(activeFilters);\n if (entries.length === 0) return data;\n return data.filter((row) => {\n for (const [colKey, vals] of entries) {\n const col = columns.find((c) => c.key === colKey);\n if (!col) continue;\n const match = vals.some((v) => {\n if (col.onFilter) return col.onFilter(v, row);\n if (col.dataIndex != null) {\n const cell = (row as any)[col.dataIndex];\n return cell === v || String(cell) === String(v);\n }\n return false;\n });\n if (!match) return false;\n }\n return true;\n });\n }, [data, columns, activeFilters]);\n\n // ---------- Pagination ----------\n const pagEnabled = pagination !== false && pagination !== undefined;\n const pagCfg: PaginationConfig = pagEnabled ? pagination! : {};\n const [innerPage, setInnerPage] = React.useState<number>(\n pagCfg.defaultCurrent ?? 1\n );\n const [innerPageSize, setInnerPageSize] = React.useState<number>(\n pagCfg.defaultPageSize ?? pagCfg.pageSize ?? 10\n );\n const pageControlled = pagCfg.current !== undefined;\n const curPage = pageControlled ? pagCfg.current! : innerPage;\n const curPageSize = pagCfg.pageSize ?? innerPageSize;\n const totalCount = pagCfg.total ?? filteredData.length;\n // Keep internal state in sync when caller changes pageSize uncontrolled->new.\n React.useEffect(() => {\n if (pagCfg.pageSize !== undefined && pagCfg.pageSize !== innerPageSize) {\n setInnerPageSize(pagCfg.pageSize);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pagCfg.pageSize]);\n\n // Reset to page 1 if filters pushed us past the last page\n React.useEffect(() => {\n if (!pagEnabled) return;\n const pages = Math.max(1, Math.ceil(filteredData.length / curPageSize));\n if (!pageControlled && curPage > pages) setInnerPage(pages);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filteredData.length, curPageSize, pagEnabled]);\n\n const pagedData = React.useMemo(() => {\n if (!pagEnabled) return filteredData;\n // If caller passes a pre-sliced page (total != data length and current is\n // controlled), trust them and don't re-slice.\n if (pagCfg.total !== undefined && pageControlled) {\n return filteredData;\n }\n const start = (curPage - 1) * curPageSize;\n return filteredData.slice(start, start + curPageSize);\n }, [pagEnabled, filteredData, curPage, curPageSize, pagCfg.total, pageControlled]);\n\n const onPageChange = (p: number) => {\n if (!pageControlled) setInnerPage(p);\n pagCfg.onChange?.(p, curPageSize);\n };\n\n // ---------- Expandable ----------\n const [innerExpanded, setInnerExpanded] = React.useState<RowKey[]>(\n expandable?.defaultExpandedRowKeys ?? []\n );\n const expandControlled = expandable?.expandedRowKeys !== undefined;\n const expandedKeys: RowKey[] = expandControlled\n ? expandable!.expandedRowKeys!\n : innerExpanded;\n const hasExpandable = !!expandable?.expandedRowRender;\n\n const toggleExpand = (row: Row, k: RowKey) => {\n const isOpen = expandedKeys.includes(k);\n const next = isOpen ? expandedKeys.filter((x) => x !== k) : [...expandedKeys, k];\n if (!expandControlled) setInnerExpanded(next);\n expandable?.onExpand?.(!isOpen, row);\n };\n\n // ---------- Derived bits ----------\n const v: TableVariant = variant ?? (striped ? \"striped\" : \"default\");\n const rowsToRender = pagedData;\n\n const selectableKeysOnPage = rowsToRender\n .map((r, i) => ({ row: r, k: keyOf(r, i) }))\n .filter(({ row }) => {\n if (selectionMode !== \"new\") return true;\n const props = rowSelection?.getCheckboxProps?.(row);\n return !props?.disabled;\n });\n\n const allSelectedOnPage =\n selectionMode !== \"off\" &&\n selectableKeysOnPage.length > 0 &&\n selectableKeysOnPage.every(({ k }) => selectedKeys.includes(k));\n const someSelectedOnPage =\n selectionMode !== \"off\" &&\n selectableKeysOnPage.some(({ k }) => selectedKeys.includes(k)) &&\n !allSelectedOnPage;\n\n const toggleRow = (row: Row, k: RowKey) => {\n if (selectionMode === \"new\") {\n const props = rowSelection?.getCheckboxProps?.(row);\n if (props?.disabled) return;\n let next: RowKey[];\n if (selectionType === \"radio\") {\n next = [k];\n } else {\n next = selectedKeys.includes(k)\n ? selectedKeys.filter((x) => x !== k)\n : [...selectedKeys, k];\n }\n const nextRows = data.filter((r, i) => next.includes(keyOf(r, i)));\n commitSelected(next, nextRows);\n } else if (selectionMode === \"legacy\") {\n const next = selectedKeys.includes(k)\n ? selectedKeys.filter((x) => x !== k)\n : [...selectedKeys, k];\n commitSelected(next, []);\n }\n };\n const toggleAll = () => {\n if (selectionMode === \"off\") return;\n if (selectionType === \"radio\") return; // radio doesn't support bulk toggle\n if (allSelectedOnPage) {\n // Deselect keys that appear on the current page\n const pageKeys = new Set(selectableKeysOnPage.map(({ k }) => k));\n const next = selectedKeys.filter((k) => !pageKeys.has(k));\n const nextRows = data.filter((r, i) => next.includes(keyOf(r, i)));\n commitSelected(next, nextRows);\n } else {\n // Select union of existing selection + page's selectable keys\n const set = new Set(selectedKeys);\n selectableKeysOnPage.forEach(({ k }) => set.add(k));\n const next = Array.from(set);\n const nextRows = data.filter((r, i) => next.includes(keyOf(r, i)));\n commitSelected(next, nextRows);\n }\n };\n\n const showSelCol = selectionMode !== \"off\";\n const showExpandCol = hasExpandable;\n const extraColCount = (showSelCol ? 1 : 0) + (showExpandCol ? 1 : 0);\n const totalColCount = columns.length + extraColCount;\n\n // ---------- Wrapper styling for scroll ----------\n const wrapStyle: React.CSSProperties = {};\n const innerTableStyle: React.CSSProperties = {};\n let wrapClass = \"table-wrap\";\n if (scroll?.y != null) {\n wrapStyle.maxHeight = scroll.y;\n wrapStyle.overflowY = \"auto\";\n wrapClass += \" scroll-y\";\n }\n if (scroll?.x != null) {\n wrapStyle.overflowX = \"auto\";\n innerTableStyle.minWidth = scroll.x;\n wrapClass += \" scroll-x\";\n }\n\n // ---------- Render ----------\n return (\n <>\n <div className={`${wrapClass} ${className}`} style={wrapStyle}>\n <table\n className={`table ${v} ${hoverable ? \"hoverable\" : \"\"} ${scroll?.y != null ? \"sticky-head\" : \"\"}`}\n style={innerTableStyle}\n >\n <thead>\n <tr>\n {showExpandCol && <th className=\"row-expand\" style={{ width: 40 }} />}\n {showSelCol && (\n <th className=\"row-check\" style={{ width: 44 }}>\n {selectionType === \"checkbox\" && (\n <Checkbox\n checked={allSelectedOnPage}\n indeterminate={someSelectedOnPage}\n onChange={toggleAll}\n />\n )}\n </th>\n )}\n {columns.map((c) => {\n const sorted = sortKey === c.key;\n const hasFilters = !!c.filters?.length;\n const filterActive = !!activeFilters[c.key]?.length;\n return (\n <th\n key={c.key}\n className={`${c.sortable ? \"sortable\" : \"\"} ${sorted ? \"sorted\" : \"\"} ${hasFilters ? \"filterable\" : \"\"}`}\n style={{ width: c.width, textAlign: c.align ?? \"left\" }}\n onClick={() => c.sortable && onSort?.(c.key)}\n >\n <span className=\"th-label\">{c.title}</span>\n {c.sortable && (\n <span className=\"sort-ind\">\n <Icon\n name={sorted ? (sortDir === \"asc\" ? \"chevUp\" : \"chevDown\") : \"chevDown\"}\n size={10}\n />\n </span>\n )}\n {hasFilters && (\n <ColumnFilterButton\n column={c}\n activeValues={activeFilters[c.key] ?? []}\n onApply={(values) => setColumnFilter(c, values)}\n active={filterActive}\n />\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {rowsToRender.length === 0 ? (\n <tr>\n <td colSpan={totalColCount} className=\"table-empty\">\n {empty}\n </td>\n </tr>\n ) : (\n rowsToRender.map((row, i) => {\n const k = keyOf(row, i);\n const isSel = selectedKeys.includes(k);\n const selProps = rowSelection?.getCheckboxProps?.(row);\n const canExpand =\n hasExpandable && (expandable?.rowExpandable?.(row) ?? true);\n const isExpanded = canExpand && expandedKeys.includes(k);\n return (\n <React.Fragment key={k}>\n <tr\n className={`${onRowClick ? \"clickable\" : \"\"} ${isSel ? \"selected\" : \"\"}`}\n onClick={onRowClick ? () => onRowClick(row, i) : undefined}\n >\n {showExpandCol && (\n <td\n className=\"row-expand\"\n onClick={(e) => {\n e.stopPropagation();\n if (canExpand) toggleExpand(row, k);\n }}\n >\n {canExpand && (\n <button\n type=\"button\"\n className={`expand-btn ${isExpanded ? \"open\" : \"\"}`}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? \"Collapse row\" : \"Expand row\"}\n onClick={(e) => {\n e.stopPropagation();\n toggleExpand(row, k);\n }}\n >\n <Icon name=\"chevRight\" size={12} />\n </button>\n )}\n </td>\n )}\n {showSelCol && (\n <td\n className=\"row-check\"\n onClick={(e) => {\n e.stopPropagation();\n toggleRow(row, k);\n }}\n >\n {selectionType === \"radio\" ? (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={isSel}\n disabled={selProps?.disabled}\n className={`radio-dot ${isSel ? \"checked\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n toggleRow(row, k);\n }}\n />\n ) : (\n <Checkbox\n checked={isSel}\n disabled={selProps?.disabled}\n onChange={() => toggleRow(row, k)}\n />\n )}\n </td>\n )}\n {columns.map((c) => {\n const val = c.dataIndex ? row[c.dataIndex] : undefined;\n return (\n <td key={c.key} style={{ textAlign: c.align ?? \"left\" }}>\n {c.render ? c.render(val, row, i) : (val as React.ReactNode)}\n </td>\n );\n })}\n </tr>\n {isExpanded && expandable?.expandedRowRender && (\n <tr className=\"expanded-row\">\n <td colSpan={totalColCount}>\n <div className=\"expanded-panel\">\n {expandable.expandedRowRender(row, i)}\n </div>\n </td>\n </tr>\n )}\n </React.Fragment>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n {pagEnabled && (\n <div className=\"table-pagination\">\n <Pagination\n total={totalCount}\n pageSize={curPageSize}\n page={curPage}\n onChange={onPageChange}\n />\n </div>\n )}\n </>\n );\n}\n\n/* ============ Column filter button (header popover) ============ */\n\ninterface ColumnFilterButtonProps<Row> {\n column: TableColumn<Row>;\n activeValues: (string | number)[];\n onApply: (values: (string | number)[]) => void;\n active: boolean;\n}\n\nfunction ColumnFilterButton<Row>({\n column,\n activeValues,\n onApply,\n active,\n}: ColumnFilterButtonProps<Row>) {\n const [open, setOpen] = React.useState(false);\n const [draft, setDraft] = React.useState<(string | number)[]>(activeValues);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n const { triggerRef, floatingStyle } = useFloating<HTMLButtonElement>({\n open,\n placement: \"bottom\",\n panelWidth: 200,\n panelHeight: Math.min(260, (column.filters?.length ?? 0) * 32 + 80),\n alignCross: \"end\",\n });\n\n React.useEffect(() => {\n if (open) setDraft(activeValues);\n }, [open, activeValues]);\n\n React.useEffect(() => {\n if (!open) return;\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (triggerRef.current?.contains(t)) return;\n if (panelRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const toggle = (v: string | number) =>\n setDraft((d) => (d.includes(v) ? d.filter((x) => x !== v) : [...d, v]));\n\n return (\n <>\n <button\n ref={triggerRef}\n type=\"button\"\n className={`filter-ind ${active ? \"active\" : \"\"}`}\n aria-label=\"Filter column\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen((o) => !o);\n }}\n >\n <Icon name=\"filter\" size={10} />\n </button>\n {open &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={panelRef}\n className=\"table-filter-panel\"\n style={floatingStyle}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"table-filter-options\">\n {(column.filters ?? []).map((f) => (\n <label key={String(f.value)} className=\"table-filter-item\">\n <Checkbox\n checked={draft.includes(f.value)}\n onChange={() => toggle(f.value)}\n />\n <span>{f.text}</span>\n </label>\n ))}\n </div>\n <div className=\"table-filter-actions\">\n <button\n type=\"button\"\n className=\"tf-btn ghost\"\n onClick={() => {\n setDraft([]);\n onApply([]);\n setOpen(false);\n }}\n >\n 重置\n </button>\n <button\n type=\"button\"\n className=\"tf-btn primary\"\n onClick={() => {\n onApply(draft);\n setOpen(false);\n }}\n >\n 确定\n </button>\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n\n/* ============ TablePro ============ */\n\nexport interface TableProProps<Row = any> extends TableProps<Row> {\n /** Toolbar slot — search input, filter, etc. */\n toolbar?: React.ReactNode;\n /** Right-aligned actions slot in toolbar. */\n actions?: React.ReactNode;\n /** Footer slot — usually <Pagination />. Optional now that `pagination` is built-in. */\n footer?: React.ReactNode;\n /** Title shown above the toolbar. */\n title?: React.ReactNode;\n}\n\n/**\n * `TablePro` — full-featured table card with toolbar, sortable/selectable rows,\n * variants, and a footer slot for pagination.\n *\n * Prefer the built-in `pagination` prop over rendering a `<Pagination />` in the\n * `footer` slot; `footer` still works for custom footers.\n */\nexport function TablePro<Row extends Record<string, any> = any>({\n toolbar,\n actions,\n footer,\n title,\n className = \"\",\n ...tableProps\n}: TableProProps<Row>) {\n return (\n <div className={`table-card ${className}`}>\n {(title || toolbar || actions) && (\n <div className=\"table-toolbar\">\n {title && <div className=\"table-title\">{title}</div>}\n <div className=\"table-toolbar-main\">{toolbar}</div>\n {actions && <div className=\"table-toolbar-actions\">{actions}</div>}\n </div>\n )}\n <Table {...tableProps} className=\"joined\" />\n {footer && <div className=\"table-footer\">{footer}</div>}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Table/Table.tsx"],"names":["React","v","jsxs","Fragment","jsx","Checkbox","Icon","Pagination","useFloating","createPortal"],"mappings":"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","file":"chunk-SBMOIE5C.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Table.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Icon } from \"../Icon\";\nimport { Checkbox } from \"../Checkbox\";\nimport { Pagination } from \"../Pagination\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport type RowKey = string | number;\n\nexport interface TableColumnFilterItem {\n text: React.ReactNode;\n value: string | number;\n}\n\nexport interface TableColumn<Row = any> {\n key: string;\n title: React.ReactNode;\n /** Data key to read from row, or custom render. */\n dataIndex?: keyof Row;\n render?: (value: any, row: Row, index: number) => React.ReactNode;\n width?: number | string;\n align?: \"left\" | \"center\" | \"right\";\n sortable?: boolean;\n /** Filter options shown in header dropdown. Requires `onFilter` (or data index match). */\n filters?: TableColumnFilterItem[];\n /**\n * Predicate to decide whether a row matches a given filter value.\n * If omitted, falls back to strict equality on `row[dataIndex]`.\n */\n onFilter?: (value: string | number, row: Row) => boolean;\n /**\n * Default active filter values. When `filteredValue` is controlled externally via\n * `Table.filteredValue`, prefer managing it at the table level.\n */\n defaultFilteredValue?: (string | number)[];\n /** Controlled filter selection — when provided, makes the column's filter controlled. */\n filteredValue?: (string | number)[];\n}\n\nexport type TableVariant = \"default\" | \"striped\" | \"embossed\" | \"cards\";\n\nexport interface PaginationConfig {\n /** Current page (1-indexed). Makes pagination controlled. */\n current?: number;\n /** Uncontrolled initial page. */\n defaultCurrent?: number;\n /** Items per page. */\n pageSize?: number;\n /** Default items per page (uncontrolled). */\n defaultPageSize?: number;\n /** Total item count. Defaults to `data.length` when omitted. */\n total?: number;\n /** Fired when user picks a page or changes page size. */\n onChange?: (page: number, pageSize: number) => void;\n /** Reserved for future: jump-to-page input. */\n showQuickJumper?: boolean;\n /** Reserved for future: page size dropdown. */\n showSizeChanger?: boolean;\n /** Reserved for future: selectable page sizes. */\n pageSizeOptions?: number[];\n}\n\nexport interface RowSelectionConfig<Row = any> {\n /** \"checkbox\" (default) allows multi-select; \"radio\" allows only one row at a time. */\n type?: \"checkbox\" | \"radio\";\n /** Controlled list of selected row keys. */\n selectedRowKeys?: RowKey[];\n /** Uncontrolled initial selection. */\n defaultSelectedRowKeys?: RowKey[];\n /** Fired on selection change; receives the new keys and matching rows. */\n onChange?: (selectedRowKeys: RowKey[], selectedRows: Row[]) => void;\n /** Per-row switch toggling checkbox disabled state. */\n getCheckboxProps?: (row: Row) => { disabled?: boolean };\n}\n\nexport interface ExpandableConfig<Row = any> {\n /** Controlled expanded row keys. */\n expandedRowKeys?: RowKey[];\n /** Uncontrolled initial expanded row keys. */\n defaultExpandedRowKeys?: RowKey[];\n /** Fired when a row expands / collapses. */\n onExpand?: (expanded: boolean, row: Row) => void;\n /** Render function for the expanded panel. When omitted, no expand UI renders. */\n expandedRowRender?: (row: Row, index: number) => React.ReactNode;\n /** Decide whether a given row can be expanded. */\n rowExpandable?: (row: Row) => boolean;\n}\n\nexport interface TableScrollConfig {\n /** Horizontal scroll: min-width of the inner table. */\n x?: number | string;\n /** Vertical scroll: max body height (with sticky header). */\n y?: number | string;\n}\n\nexport interface TableProps<Row = any> {\n columns: TableColumn<Row>[];\n data: Row[];\n rowKey?: keyof Row | ((row: Row) => RowKey);\n /** Visual variant. */\n variant?: TableVariant;\n /** Hoverable rows. */\n hoverable?: boolean;\n /** Striped rows (shortcut for variant=\"striped\"). */\n striped?: boolean;\n\n /** Sort state — controlled. */\n sortKey?: string;\n sortDir?: \"asc\" | \"desc\";\n onSort?: (key: string) => void;\n\n /**\n * Row selection config — preferred API (antd-style).\n * When provided, takes precedence over `selectable` / `selected` / `onSelect`.\n */\n rowSelection?: RowSelectionConfig<Row>;\n\n /**\n * @deprecated Use `rowSelection` instead. Kept for backwards compatibility.\n */\n selectable?: boolean;\n /**\n * @deprecated Use `rowSelection.selectedRowKeys` instead.\n */\n selected?: RowKey[];\n /**\n * @deprecated Use `rowSelection.onChange` instead.\n */\n onSelect?: (keys: RowKey[]) => void;\n\n /** Expandable row config. */\n expandable?: ExpandableConfig<Row>;\n\n /**\n * Pagination config — `false` disables pagination; otherwise renders a bottom\n * pagination bar and slices the data accordingly.\n */\n pagination?: false | PaginationConfig;\n\n /** Horizontal / vertical scroll config. */\n scroll?: TableScrollConfig;\n\n /** Called when user clicks a row. */\n onRowClick?: (row: Row, index: number) => void;\n /** Empty state. */\n empty?: React.ReactNode;\n className?: string;\n}\n\n/** `Table` — neumorphic data table with sorting, selection and visual variants. */\nexport function Table<Row extends Record<string, any> = any>({\n columns,\n data,\n rowKey,\n variant,\n hoverable = true,\n striped,\n sortKey,\n sortDir = \"asc\",\n onSort,\n rowSelection,\n selectable,\n selected = [],\n onSelect,\n expandable,\n pagination,\n scroll,\n onRowClick,\n empty = \"暂无数据\",\n className = \"\",\n}: TableProps<Row>) {\n const keyOf = React.useCallback(\n (row: Row, i: number): RowKey => {\n if (typeof rowKey === \"function\") return rowKey(row);\n if (rowKey) return row[rowKey] as any;\n return i;\n },\n [rowKey]\n );\n\n // ---------- Selection (rowSelection OR legacy selectable) ----------\n const selectionMode = rowSelection ? \"new\" : selectable ? \"legacy\" : \"off\";\n const selectionType = rowSelection?.type ?? \"checkbox\";\n\n const [innerSel, setInnerSel] = React.useState<RowKey[]>(\n rowSelection?.defaultSelectedRowKeys ?? []\n );\n const selControlledNew = rowSelection?.selectedRowKeys !== undefined;\n const selectedKeys: RowKey[] =\n selectionMode === \"new\"\n ? selControlledNew\n ? rowSelection!.selectedRowKeys!\n : innerSel\n : selectionMode === \"legacy\"\n ? selected\n : [];\n\n const commitSelected = (next: RowKey[], rows: Row[]) => {\n if (selectionMode === \"new\") {\n if (!selControlledNew) setInnerSel(next);\n rowSelection!.onChange?.(next, rows);\n } else if (selectionMode === \"legacy\") {\n onSelect?.(next);\n }\n };\n\n // ---------- Filters ----------\n // Per-column active filter values (internal state for uncontrolled columns).\n const [innerFilters, setInnerFilters] = React.useState<Record<string, (string | number)[]>>(\n () => {\n const out: Record<string, (string | number)[]> = {};\n for (const c of columns) {\n if (c.defaultFilteredValue && c.defaultFilteredValue.length) {\n out[c.key] = c.defaultFilteredValue;\n }\n }\n return out;\n }\n );\n const activeFilters: Record<string, (string | number)[]> = React.useMemo(() => {\n const out: Record<string, (string | number)[]> = {};\n for (const c of columns) {\n if (!c.filters?.length) continue;\n if (c.filteredValue !== undefined) {\n if (c.filteredValue.length) out[c.key] = c.filteredValue;\n } else if (innerFilters[c.key]?.length) {\n out[c.key] = innerFilters[c.key];\n }\n }\n return out;\n }, [columns, innerFilters]);\n\n const setColumnFilter = (col: TableColumn<Row>, values: (string | number)[]) => {\n if (col.filteredValue !== undefined) return; // controlled — parent must handle\n setInnerFilters((prev) => {\n const next = { ...prev };\n if (values.length === 0) delete next[col.key];\n else next[col.key] = values;\n return next;\n });\n };\n\n const filteredData = React.useMemo(() => {\n const entries = Object.entries(activeFilters);\n if (entries.length === 0) return data;\n return data.filter((row) => {\n for (const [colKey, vals] of entries) {\n const col = columns.find((c) => c.key === colKey);\n if (!col) continue;\n const match = vals.some((v) => {\n if (col.onFilter) return col.onFilter(v, row);\n if (col.dataIndex != null) {\n const cell = (row as any)[col.dataIndex];\n return cell === v || String(cell) === String(v);\n }\n return false;\n });\n if (!match) return false;\n }\n return true;\n });\n }, [data, columns, activeFilters]);\n\n // ---------- Pagination ----------\n const pagEnabled = pagination !== false && pagination !== undefined;\n const pagCfg: PaginationConfig = pagEnabled ? pagination! : {};\n const [innerPage, setInnerPage] = React.useState<number>(\n pagCfg.defaultCurrent ?? 1\n );\n const [innerPageSize, setInnerPageSize] = React.useState<number>(\n pagCfg.defaultPageSize ?? pagCfg.pageSize ?? 10\n );\n const pageControlled = pagCfg.current !== undefined;\n const curPage = pageControlled ? pagCfg.current! : innerPage;\n const curPageSize = pagCfg.pageSize ?? innerPageSize;\n const totalCount = pagCfg.total ?? filteredData.length;\n // Keep internal state in sync when caller changes pageSize uncontrolled->new.\n React.useEffect(() => {\n if (pagCfg.pageSize !== undefined && pagCfg.pageSize !== innerPageSize) {\n setInnerPageSize(pagCfg.pageSize);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pagCfg.pageSize]);\n\n // Reset to page 1 if filters pushed us past the last page\n React.useEffect(() => {\n if (!pagEnabled) return;\n const pages = Math.max(1, Math.ceil(filteredData.length / curPageSize));\n if (!pageControlled && curPage > pages) setInnerPage(pages);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filteredData.length, curPageSize, pagEnabled]);\n\n const pagedData = React.useMemo(() => {\n if (!pagEnabled) return filteredData;\n // If caller passes a pre-sliced page (total != data length and current is\n // controlled), trust them and don't re-slice.\n if (pagCfg.total !== undefined && pageControlled) {\n return filteredData;\n }\n const start = (curPage - 1) * curPageSize;\n return filteredData.slice(start, start + curPageSize);\n }, [pagEnabled, filteredData, curPage, curPageSize, pagCfg.total, pageControlled]);\n\n const onPageChange = (p: number) => {\n if (!pageControlled) setInnerPage(p);\n pagCfg.onChange?.(p, curPageSize);\n };\n\n // ---------- Expandable ----------\n const [innerExpanded, setInnerExpanded] = React.useState<RowKey[]>(\n expandable?.defaultExpandedRowKeys ?? []\n );\n const expandControlled = expandable?.expandedRowKeys !== undefined;\n const expandedKeys: RowKey[] = expandControlled\n ? expandable!.expandedRowKeys!\n : innerExpanded;\n const hasExpandable = !!expandable?.expandedRowRender;\n\n const toggleExpand = (row: Row, k: RowKey) => {\n const isOpen = expandedKeys.includes(k);\n const next = isOpen ? expandedKeys.filter((x) => x !== k) : [...expandedKeys, k];\n if (!expandControlled) setInnerExpanded(next);\n expandable?.onExpand?.(!isOpen, row);\n };\n\n // ---------- Derived bits ----------\n const v: TableVariant = variant ?? (striped ? \"striped\" : \"default\");\n const rowsToRender = pagedData;\n\n const selectableKeysOnPage = rowsToRender\n .map((r, i) => ({ row: r, k: keyOf(r, i) }))\n .filter(({ row }) => {\n if (selectionMode !== \"new\") return true;\n const props = rowSelection?.getCheckboxProps?.(row);\n return !props?.disabled;\n });\n\n const allSelectedOnPage =\n selectionMode !== \"off\" &&\n selectableKeysOnPage.length > 0 &&\n selectableKeysOnPage.every(({ k }) => selectedKeys.includes(k));\n const someSelectedOnPage =\n selectionMode !== \"off\" &&\n selectableKeysOnPage.some(({ k }) => selectedKeys.includes(k)) &&\n !allSelectedOnPage;\n\n const toggleRow = (row: Row, k: RowKey) => {\n if (selectionMode === \"new\") {\n const props = rowSelection?.getCheckboxProps?.(row);\n if (props?.disabled) return;\n let next: RowKey[];\n if (selectionType === \"radio\") {\n next = [k];\n } else {\n next = selectedKeys.includes(k)\n ? selectedKeys.filter((x) => x !== k)\n : [...selectedKeys, k];\n }\n const nextRows = data.filter((r, i) => next.includes(keyOf(r, i)));\n commitSelected(next, nextRows);\n } else if (selectionMode === \"legacy\") {\n const next = selectedKeys.includes(k)\n ? selectedKeys.filter((x) => x !== k)\n : [...selectedKeys, k];\n commitSelected(next, []);\n }\n };\n const toggleAll = () => {\n if (selectionMode === \"off\") return;\n if (selectionType === \"radio\") return; // radio doesn't support bulk toggle\n if (allSelectedOnPage) {\n // Deselect keys that appear on the current page\n const pageKeys = new Set(selectableKeysOnPage.map(({ k }) => k));\n const next = selectedKeys.filter((k) => !pageKeys.has(k));\n const nextRows = data.filter((r, i) => next.includes(keyOf(r, i)));\n commitSelected(next, nextRows);\n } else {\n // Select union of existing selection + page's selectable keys\n const set = new Set(selectedKeys);\n selectableKeysOnPage.forEach(({ k }) => set.add(k));\n const next = Array.from(set);\n const nextRows = data.filter((r, i) => next.includes(keyOf(r, i)));\n commitSelected(next, nextRows);\n }\n };\n\n const showSelCol = selectionMode !== \"off\";\n const showExpandCol = hasExpandable;\n const extraColCount = (showSelCol ? 1 : 0) + (showExpandCol ? 1 : 0);\n const totalColCount = columns.length + extraColCount;\n\n // ---------- Wrapper styling for scroll ----------\n const wrapStyle: React.CSSProperties = {};\n const innerTableStyle: React.CSSProperties = {};\n let wrapClass = \"table-wrap\";\n if (scroll?.y != null) {\n wrapStyle.maxHeight = scroll.y;\n wrapStyle.overflowY = \"auto\";\n wrapClass += \" scroll-y\";\n }\n if (scroll?.x != null) {\n wrapStyle.overflowX = \"auto\";\n innerTableStyle.minWidth = scroll.x;\n wrapClass += \" scroll-x\";\n }\n\n // ---------- Render ----------\n return (\n <>\n <div className={`${wrapClass} ${className}`} style={wrapStyle}>\n <table\n className={`table ${v} ${hoverable ? \"hoverable\" : \"\"} ${scroll?.y != null ? \"sticky-head\" : \"\"}`}\n style={innerTableStyle}\n >\n <thead>\n <tr>\n {showExpandCol && <th className=\"row-expand\" style={{ width: 40 }} />}\n {showSelCol && (\n <th className=\"row-check\" style={{ width: 44 }}>\n {selectionType === \"checkbox\" && (\n <Checkbox\n checked={allSelectedOnPage}\n indeterminate={someSelectedOnPage}\n onChange={toggleAll}\n />\n )}\n </th>\n )}\n {columns.map((c) => {\n const sorted = sortKey === c.key;\n const hasFilters = !!c.filters?.length;\n const filterActive = !!activeFilters[c.key]?.length;\n return (\n <th\n key={c.key}\n className={`${c.sortable ? \"sortable\" : \"\"} ${sorted ? \"sorted\" : \"\"} ${hasFilters ? \"filterable\" : \"\"}`}\n style={{ width: c.width, textAlign: c.align ?? \"left\" }}\n onClick={() => c.sortable && onSort?.(c.key)}\n >\n <span className=\"th-label\">{c.title}</span>\n {c.sortable && (\n <span className=\"sort-ind\">\n <Icon\n name={sorted ? (sortDir === \"asc\" ? \"chevUp\" : \"chevDown\") : \"chevDown\"}\n size={10}\n />\n </span>\n )}\n {hasFilters && (\n <ColumnFilterButton\n column={c}\n activeValues={activeFilters[c.key] ?? []}\n onApply={(values) => setColumnFilter(c, values)}\n active={filterActive}\n />\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {rowsToRender.length === 0 ? (\n <tr>\n <td colSpan={totalColCount} className=\"table-empty\">\n {empty}\n </td>\n </tr>\n ) : (\n rowsToRender.map((row, i) => {\n const k = keyOf(row, i);\n const isSel = selectedKeys.includes(k);\n const selProps = rowSelection?.getCheckboxProps?.(row);\n const canExpand =\n hasExpandable && (expandable?.rowExpandable?.(row) ?? true);\n const isExpanded = canExpand && expandedKeys.includes(k);\n return (\n <React.Fragment key={k}>\n <tr\n className={`${onRowClick ? \"clickable\" : \"\"} ${isSel ? \"selected\" : \"\"}`}\n onClick={onRowClick ? () => onRowClick(row, i) : undefined}\n >\n {showExpandCol && (\n <td\n className=\"row-expand\"\n onClick={(e) => {\n e.stopPropagation();\n if (canExpand) toggleExpand(row, k);\n }}\n >\n {canExpand && (\n <button\n type=\"button\"\n className={`expand-btn ${isExpanded ? \"open\" : \"\"}`}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? \"Collapse row\" : \"Expand row\"}\n onClick={(e) => {\n e.stopPropagation();\n toggleExpand(row, k);\n }}\n >\n <Icon name=\"chevRight\" size={12} />\n </button>\n )}\n </td>\n )}\n {showSelCol && (\n <td\n className=\"row-check\"\n onClick={(e) => {\n e.stopPropagation();\n toggleRow(row, k);\n }}\n >\n {selectionType === \"radio\" ? (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={isSel}\n disabled={selProps?.disabled}\n className={`radio-dot ${isSel ? \"checked\" : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n toggleRow(row, k);\n }}\n />\n ) : (\n <Checkbox\n checked={isSel}\n disabled={selProps?.disabled}\n onChange={() => toggleRow(row, k)}\n />\n )}\n </td>\n )}\n {columns.map((c) => {\n const val = c.dataIndex ? row[c.dataIndex] : undefined;\n return (\n <td key={c.key} style={{ textAlign: c.align ?? \"left\" }}>\n {c.render ? c.render(val, row, i) : (val as React.ReactNode)}\n </td>\n );\n })}\n </tr>\n {isExpanded && expandable?.expandedRowRender && (\n <tr className=\"expanded-row\">\n <td colSpan={totalColCount}>\n <div className=\"expanded-panel\">\n {expandable.expandedRowRender(row, i)}\n </div>\n </td>\n </tr>\n )}\n </React.Fragment>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n {pagEnabled && (\n <div className=\"table-pagination\">\n <Pagination\n total={totalCount}\n pageSize={curPageSize}\n page={curPage}\n onChange={onPageChange}\n />\n </div>\n )}\n </>\n );\n}\n\n/* ============ Column filter button (header popover) ============ */\n\ninterface ColumnFilterButtonProps<Row> {\n column: TableColumn<Row>;\n activeValues: (string | number)[];\n onApply: (values: (string | number)[]) => void;\n active: boolean;\n}\n\nfunction ColumnFilterButton<Row>({\n column,\n activeValues,\n onApply,\n active,\n}: ColumnFilterButtonProps<Row>) {\n const [open, setOpen] = React.useState(false);\n const [draft, setDraft] = React.useState<(string | number)[]>(activeValues);\n const panelRef = React.useRef<HTMLDivElement>(null);\n\n const { triggerRef, floatingStyle } = useFloating<HTMLButtonElement>({\n open,\n placement: \"bottom\",\n panelWidth: 200,\n panelHeight: Math.min(260, (column.filters?.length ?? 0) * 32 + 80),\n alignCross: \"end\",\n });\n\n React.useEffect(() => {\n if (open) setDraft(activeValues);\n }, [open, activeValues]);\n\n React.useEffect(() => {\n if (!open) return;\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (triggerRef.current?.contains(t)) return;\n if (panelRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const toggle = (v: string | number) =>\n setDraft((d) => (d.includes(v) ? d.filter((x) => x !== v) : [...d, v]));\n\n return (\n <>\n <button\n ref={triggerRef}\n type=\"button\"\n className={`filter-ind ${active ? \"active\" : \"\"}`}\n aria-label=\"Filter column\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen((o) => !o);\n }}\n >\n <Icon name=\"filter\" size={10} />\n </button>\n {open &&\n typeof document !== \"undefined\" &&\n createPortal(\n <div\n ref={panelRef}\n className=\"table-filter-panel\"\n style={floatingStyle}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"table-filter-options\">\n {(column.filters ?? []).map((f) => (\n <label key={String(f.value)} className=\"table-filter-item\">\n <Checkbox\n checked={draft.includes(f.value)}\n onChange={() => toggle(f.value)}\n />\n <span>{f.text}</span>\n </label>\n ))}\n </div>\n <div className=\"table-filter-actions\">\n <button\n type=\"button\"\n className=\"tf-btn ghost\"\n onClick={() => {\n setDraft([]);\n onApply([]);\n setOpen(false);\n }}\n >\n 重置\n </button>\n <button\n type=\"button\"\n className=\"tf-btn primary\"\n onClick={() => {\n onApply(draft);\n setOpen(false);\n }}\n >\n 确定\n </button>\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n\n/* ============ TablePro ============ */\n\nexport interface TableProProps<Row = any> extends TableProps<Row> {\n /** Toolbar slot — search input, filter, etc. */\n toolbar?: React.ReactNode;\n /** Right-aligned actions slot in toolbar. */\n actions?: React.ReactNode;\n /** Footer slot — usually <Pagination />. Optional now that `pagination` is built-in. */\n footer?: React.ReactNode;\n /** Title shown above the toolbar. */\n title?: React.ReactNode;\n}\n\n/**\n * `TablePro` — full-featured table card with toolbar, sortable/selectable rows,\n * variants, and a footer slot for pagination.\n *\n * Prefer the built-in `pagination` prop over rendering a `<Pagination />` in the\n * `footer` slot; `footer` still works for custom footers.\n */\nexport function TablePro<Row extends Record<string, any> = any>({\n toolbar,\n actions,\n footer,\n title,\n className = \"\",\n ...tableProps\n}: TableProProps<Row>) {\n return (\n <div className={`table-card ${className}`}>\n {(title || toolbar || actions) && (\n <div className=\"table-toolbar\">\n {title && <div className=\"table-title\">{title}</div>}\n <div className=\"table-toolbar-main\">{toolbar}</div>\n {actions && <div className=\"table-toolbar-actions\">{actions}</div>}\n </div>\n )}\n <Table {...tableProps} className=\"joined\" />\n {footer && <div className=\"table-footer\">{footer}</div>}\n </div>\n );\n}\n"]}
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkIDM6JJLP_cjs = require('./chunk-IDM6JJLP.cjs');
4
- var chunkIFERLHCL_cjs = require('./chunk-IFERLHCL.cjs');
4
+ var chunkSBMOIE5C_cjs = require('./chunk-SBMOIE5C.cjs');
5
5
  var chunkVICGQC6G_cjs = require('./chunk-VICGQC6G.cjs');
6
6
  var chunk7U6I44RV_cjs = require('./chunk-7U6I44RV.cjs');
7
7
  var chunkIKI5CS4L_cjs = require('./chunk-IKI5CS4L.cjs');
@@ -34,7 +34,7 @@ var chunkYVO7XO4W_cjs = require('./chunk-YVO7XO4W.cjs');
34
34
  var chunkJKLQOB2F_cjs = require('./chunk-JKLQOB2F.cjs');
35
35
 
36
36
  // src/index.ts
37
- var VERSION = "0.2.0";
37
+ var VERSION = "0.2.1";
38
38
 
39
39
  Object.defineProperty(exports, "Switch", {
40
40
  enumerable: true,
@@ -42,11 +42,11 @@ Object.defineProperty(exports, "Switch", {
42
42
  });
43
43
  Object.defineProperty(exports, "Table", {
44
44
  enumerable: true,
45
- get: function () { return chunkIFERLHCL_cjs.Table; }
45
+ get: function () { return chunkSBMOIE5C_cjs.Table; }
46
46
  });
47
47
  Object.defineProperty(exports, "TablePro", {
48
48
  enumerable: true,
49
- get: function () { return chunkIFERLHCL_cjs.TablePro; }
49
+ get: function () { return chunkSBMOIE5C_cjs.TablePro; }
50
50
  });
51
51
  Object.defineProperty(exports, "Segmented", {
52
52
  enumerable: true,