@taocompany/magic-grid 0.13.9 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/AGENTS.md +47 -0
  2. package/README.md +63 -10
  3. package/dist/api-manifest.json +2862 -0
  4. package/dist/components/MagicGrid/MagicGrid.vue.d.ts +86 -114
  5. package/dist/components/MagicGrid/MagicGrid.vue.d.ts.map +1 -1
  6. package/dist/components/MagicGrid/index.d.ts +9 -0
  7. package/dist/components/MagicGrid/index.d.ts.map +1 -0
  8. package/dist/components/MagicGrid/magicGridProps.d.ts +3 -3
  9. package/dist/components/MagicGrid/magicGridProps.d.ts.map +1 -1
  10. package/dist/components/MagicGrid/publicProps.d.ts +4 -0
  11. package/dist/components/MagicGrid/publicProps.d.ts.map +1 -0
  12. package/dist/core/grid/grid.d.ts.map +1 -1
  13. package/dist/core/grid/gridBootstrap.d.ts.map +1 -1
  14. package/dist/core/grid/gridColumnLayout.d.ts.map +1 -1
  15. package/dist/core/grid/gridFilter.d.ts.map +1 -1
  16. package/dist/core/grid/gridHierarchyOps.d.ts +2 -0
  17. package/dist/core/grid/gridHierarchyOps.d.ts.map +1 -1
  18. package/dist/core/grid/gridInteraction/columnResizeSession.d.ts.map +1 -1
  19. package/dist/core/grid/gridRowMutation.d.ts.map +1 -1
  20. package/dist/core/grid/gridViewport.d.ts.map +1 -1
  21. package/dist/core/renderer/rowRenderer.d.ts +2 -0
  22. package/dist/core/renderer/rowRenderer.d.ts.map +1 -1
  23. package/dist/core/row/rowComp.d.ts +1 -0
  24. package/dist/core/row/rowComp.d.ts.map +1 -1
  25. package/dist/core/styling/cellStyleOverrideService.d.ts +1 -0
  26. package/dist/core/styling/cellStyleOverrideService.d.ts.map +1 -1
  27. package/dist/core/types/cellRangeSelection.d.ts.map +1 -1
  28. package/dist/index.cjs.js +6 -6
  29. package/dist/index.cjs.js.map +1 -1
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.es.js +4593 -4561
  33. package/dist/index.es.js.map +1 -1
  34. package/dist/style.css +1 -1
  35. package/dist/token-catalog.json +2 -2
  36. package/dist/types/core.d.ts +115 -0
  37. package/dist/types/core.d.ts.map +1 -1
  38. package/dist/types/magic-grid.d.ts +38 -3
  39. package/dist/types/magic-grid.d.ts.map +1 -1
  40. package/llms.txt +19 -0
  41. package/package.json +25 -4
package/AGENTS.md ADDED
@@ -0,0 +1,47 @@
1
+ # Magic Grid — Agent 约束
2
+
3
+ 面向消费 `@taocompany/magic-grid` 的代码生成(读 `node_modules` 即可,勿依赖本仓库 playground)。
4
+
5
+ ## 事实源优先级
6
+
7
+ 1. `dist/api-manifest.json`(与安装版本绑定)
8
+ 2. `dist/types/core.d.ts` + 组件 `MagicGrid.vue.d.ts`
9
+ 3. 本文件与 `llms.txt`
10
+
11
+ ## 命名(勿用其他表格库字段名)
12
+
13
+ 生成代码须使用本库 API,勿沿用常见误写字段:
14
+
15
+ | 误写 | 本库 |
16
+ |------|------|
17
+ | columnDefs | columns |
18
+ | rowData | data |
19
+ | field (列) | prop |
20
+ | headerName | label |
21
+ | colId (列) | key |
22
+
23
+ ## 组件用法
24
+
25
+ - 单文件组件:`<MagicGrid :columns="columns" :data="data" row-key="id" />`
26
+ - 需要命令式 API:`import { MagicGrid, type MagicGridComponent } from '@taocompany/magic-grid'` + `import type { MagicGridExpose } from '@taocompany/magic-grid/types/core'` → `ref<InstanceType<MagicGridComponent> & MagicGridExpose>()` → `gridRef.value?.api`
27
+ - `indexMode`(`'source' \| 'display'`)是 **GridApi.moveRow/moveRows 选项**,不是组件 prop。
28
+
29
+ ## 样式
30
+
31
+ ```ts
32
+ import '@taocompany/magic-grid/tokens.css'
33
+ import '@taocompany/magic-grid/style.css'
34
+ ```
35
+
36
+ ## 树形
37
+
38
+ - `tree: true` 时必须提供 `getDataPath`(否则运行时报错)。
39
+ - `tree` 与 `rowGrouping` 不能同时为 true。
40
+
41
+ ## 校验
42
+
43
+ 若项目配置了 `@taocompany/magic-grid-mcp`,优先调用 `validate_magic_grid_usage`;注意返回里的 `unchecked`,非字面量绑定不会全量验证。模板 `@event` 拼写错误由规则 **`unknown-emit`** 拦截(勿假设 `vue-tsc` 对全部 emit 名都能报错)。配置样例见仓库 `docs/ai/mcp-client-setup.md`(npm 包用户可读对应版本的 GitHub / 内网文档)。
44
+
45
+ ## 版本
46
+
47
+ 以 `package.json` 的 `@taocompany/magic-grid` 版本为准;manifest 内 `libraryVersion` 应一致。`@taocompany/magic-grid-mcp` **与库同 semver 发布**(升库版本后运行 `pnpm mcp:version:sync`)。
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Magic Grid
2
2
 
3
- 面向 Vue 3 的高性能虚拟表格组件库。采用命令式渲染 + 行 DOM 池 + 双轴虚拟化,可稳定承载百万级行数据;API 设计对标 [AG Grid](https://www.ag-grid.com/) 社区版,覆盖排序、筛选、编辑、行分组、树形表格、框选、剪贴板等完整表格能力。
3
+ 面向 Vue 3 的通用高性能虚拟表格组件库。采用命令式渲染 + 行 DOM 池 + 双轴虚拟化,可稳定承载百万级行数据;提供排序、筛选、编辑、行分组、树形表格、框选、剪贴板等完整表格能力。
4
4
 
5
5
  ## 目录
6
6
 
@@ -53,6 +53,7 @@
53
53
  - [ColumnSettingsPanel](#columnsettingspanel)
54
54
  - [ColumnSettingsMenuItem](#columnsettingsmenuitem)
55
55
  - [ColumnSettingsMenuIcon](#columnsettingsmenuicon)
56
+ - [文档与 Agent 工具](#文档与-agent-工具)
56
57
  - [包入口与导出](#包入口与导出)
57
58
  - [TypeScript 集成](#typescript-集成)
58
59
  - [类型与校验子路径](#类型与校验子路径)
@@ -73,7 +74,7 @@
73
74
  | **体验** | 溢出 Tooltip、单元格批注、空态 Overlay、暗色主题、底部状态栏 |
74
75
  | **扩展** | 列设置面板、内置编辑器(text/number/checkbox/switch)、Vue 第三方编辑器 Composable、inline 常驻编辑器、async-validator 校验 |
75
76
 
76
- 当前版本:**0.7.5**(`@taocompany/magic-grid`)。
77
+ 当前版本:**0.14.0**(`@taocompany/magic-grid`)。
77
78
 
78
79
  > **上手路径**:安装 → [快速开始](#快速开始) → 按需查阅 [行移动](#行移动)、[树形表格](#树形表格) 等专题,以及下文 Props / Events / GridApi 索引。
79
80
 
@@ -100,12 +101,29 @@ import '@taocompany/magic-grid/style.css'
100
101
 
101
102
  > **ColumnSettingsButton / ColumnSettingsPanel** 与 MagicGrid 共用上述两份 CSS。按钮若在 **MagicGrid 容器外**,同样必须引入;列设置相关 token 在 `.mg-column-settings-button` / `.mg-column-settings-portal` 上也会注入,脱离 `.magic-grid` 可正常显示。主题拆分见 [docs/48-theme-tokens-style-split.md](docs/48-theme-tokens-style-split.md);平台自定义 token 与可视化导出方案见 [docs/49-theme-studio.md](docs/49-theme-studio.md)(在 `tokens.css` 之后加载 `mg-theme-overrides.css`)。
102
103
 
104
+ ---
105
+
106
+ ## 文档与 Agent 工具
107
+
108
+ 本文档面向**人类开发者**:用法、行为说明与 API 索引。随 npm 包发布的 **Agent 契约**(硬约束、校验规则、props/emits 机器摘要、recipe 代码)在独立文件中维护,**不在 README 重复**。
109
+
110
+ | 资源 | 读者 | 说明 |
111
+ |------|------|------|
112
+ | 本文 README | 人 | 功能说明、示例、Props / Events / Slots |
113
+ | [docs/](docs/) | 人 | 架构、阶段设计与专题(行移动、树形、Theme Studio 等) |
114
+ | 包内 `AGENTS.md` | Agent | 短约束清单(npm `files`) |
115
+ | 包内 `llms.txt` | Agent | 入口索引 |
116
+ | 包内 `dist/api-manifest.json` | Agent / MCP | 与安装版本绑定的 API 摘要(`exports`: `@taocompany/magic-grid/api-manifest.json`) |
117
+ | [`@taocompany/magic-grid-mcp`](packages/magic-grid-mcp/) | Agent / CI | 同版本号的 MCP 与 `mgc check` / `doctor`;配置见 [docs/ai/mcp-client-setup.md](docs/ai/mcp-client-setup.md) |
118
+ | [docs/ai/ai-adoption-plan.md](docs/ai/ai-adoption-plan.md) | 维护者 | 语义层 / 工具层方案总览 |
119
+
120
+ 本地 Playground 文档站:`pnpm dev` 后访问开发服务器中的 `/docs` 路由(内网/开发环境;npm 消费者不依赖该站点)。
103
121
 
104
122
  ---
105
123
 
106
124
  ## 架构与设计
107
125
 
108
- Magic Grid 采用 **命令式渲染内核 + Vue 薄封装** 的分层架构,对标 AG Grid 社区版 API 语义,渲染路径针对百万级行数据做了专门优化。
126
+ Magic Grid 采用 **命令式渲染内核 + Vue 薄封装** 的分层架构,对外以稳定的 Props / Events / `GridApi` 契约组织能力,渲染路径针对百万级行数据做了专门优化。
109
127
 
110
128
  ### 分层结构
111
129
 
@@ -440,7 +458,7 @@ api.moveRow(rowId, toIndex, 'display')
440
458
 
441
459
  ## 树形表格
442
460
 
443
- 树形表格(Tree Table)在 **扁平 `data` 数组** 上,通过 **`getDataPath`** 为每行提供 **从根到当前节点的路径**(`string[]`),内核据此构建层级并 **DFS 投影** 为可见的 `rowsToDisplay`。对标 [AG Grid Tree Data](https://www.ag-grid.com/javascript-data-grid/tree-data/) 社区版语义。
461
+ 树形表格(Tree Table)在 **扁平 `data` 数组** 上,通过 **`getDataPath`** 为每行提供 **从根到当前节点的路径**(`string[]`),内核据此构建层级并 **DFS 投影** 为可见的 `rowsToDisplay`。
444
462
 
445
463
  > **与行分组互斥**:`tree: true` 与 `rowGrouping: true` **不得同时生效**。双开时控制台 dev 警告,**`tree` 优先**,`rowGrouping` 及 `ColumnDef.rowGroup` 被忽略。flat / group / tree 三选一,见 [概述与核心概念](#概述与核心概念)。
446
464
 
@@ -448,7 +466,7 @@ api.moveRow(rowId, toIndex, 'display')
448
466
 
449
467
  #### 为什么用扁平数组 + getDataPath?
450
468
 
451
- Magic Grid **不支持**嵌套 `children` 字段作为树数据源(与 AG Grid CSRM 一致)。所有行仍存放在 **同一个 `data` 数组** 中;层级关系完全由 **`getDataPath({ data }) => string[]`** 表达:
469
+ Magic Grid **不支持**嵌套 `children` 字段作为树数据源。所有行仍存放在 **同一个 `data` 数组** 中;层级关系完全由 **`getDataPath({ data }) => string[]`** 表达:
452
470
 
453
471
  | 概念 | 说明 |
454
472
  |------|------|
@@ -565,7 +583,7 @@ const getDataPath: GetDataPathFn = ({ data }) =>
565
583
  | `getDataPath` | `GetDataPathFn` | — | `( { data } ) => string[]`,每行返回路径。**`tree: true` 时必填**,缺失则 throw |
566
584
  | `groupDefaultExpanded` | `number` | `-1` | 默认展开层级(tree / group **共用**此 prop)。`0` = 全折叠;`1` = 仅展开第一层;`-1` = 全部展开 |
567
585
  | `showTreeColumn` | `boolean` | `true` | 是否注入 tree 系统列(colId `__tree__`) |
568
- | `autoTreeColumnDef` | `Partial<ColumnDef>` | — | 覆盖 tree 列宽、pinned、headerName 等;对标 AG Grid `autoGroupColumnDef` |
586
+ | `autoTreeColumnDef` | `Partial<ColumnDef>` | — | 覆盖 tree 列宽、固定、表头等;等价于对内置 tree 系统列的 `ColumnDef` 覆盖 |
569
587
  | `treeValueGetter` | `TreeValueGetterFn` | — | 自定义 tree 列展示文案;缺省为 **`dataPath` 末段** |
570
588
  | `treeDisplayType` | `'singleColumn'` | `'singleColumn'` | v1 仅单列树展示 |
571
589
  | `treeLazyLoad` | `boolean` | `false` | 启用 CSRM 懒加载;`true` 时需 `loadTreeChildren` |
@@ -668,7 +686,7 @@ api.applyTransaction({ remove: ['fe', 'be'] })
668
686
 
669
687
  #### getDataPath 与 getData() 的关系
670
688
 
671
- - `api.getData()` 返回 **flat sourceRows**(与 AG Grid 一致),**不是** DFS 投影顺序。
689
+ - `api.getData()` 返回 **flat sourceRows**(业务数组顺序),**不是** DFS 投影顺序。
672
690
  - `api.getDataPath(rowId)` 查询某行的当前路径。
673
691
  - 展示顺序以 **`rowsToDisplay`** 为准;行索引列对 display 行 **连续编号**(1…N)。
674
692
 
@@ -1172,6 +1190,39 @@ async function persistMove(params: AsyncRowMutationMoveParams): Promise<void> {
1172
1190
  | `height` | `string \| number` | `'100%'` | 容器高度;number / 纯数字字符串 → `px`,亦支持 `%` / `vh` 等 |
1173
1191
  | `width` | `string \| number` | `'100%'` | 容器宽度;解析规则同 `height` |
1174
1192
 
1193
+ #### 行模型与加载更多
1194
+
1195
+ | Prop | 类型 | 默认值 | 说明 |
1196
+ |------|------|--------|------|
1197
+ | `rowModelType` | `'clientSide' \| 'infinite'` | `'clientSide'` | 行模型:默认全量 `data`;`infinite` 为块加载虚拟行 |
1198
+ | `infiniteDatasource` | `InfiniteRowDatasource` | — | **`rowModelType="infinite"` 时必填**。实现 `getRows`,通过 `successCallback(rows, lastRow)` 回传块数据 |
1199
+ | `blockSize` | `number` | `100` | infinite:每块行数 |
1200
+ | `maxBlocksInCache` | `number` | `10` | infinite:LRU 最多保留块数 |
1201
+ | `loadMoreRow` | `LoadMoreRowOptions` | — | **clientSide**:在 display 末尾展示「加载更多」行(`enabled` / `hasMore` / `loading` 等) |
1202
+ | `loadMoreRowRenderer` | `LoadMoreRowRendererFn` | — | 自定义 load-more 行(与 `#load-more-row` 插槽二选一) |
1203
+
1204
+ infinite 最小示例(无需 `:data`,由 datasource 按块提供):
1205
+
1206
+ ```vue
1207
+ <MagicGrid
1208
+ :columns="columns"
1209
+ row-key="id"
1210
+ row-model-type="infinite"
1211
+ :infinite-datasource="infiniteDatasource"
1212
+ />
1213
+ ```
1214
+
1215
+ clientSide 末尾加载更多:
1216
+
1217
+ ```vue
1218
+ <MagicGrid
1219
+ :columns="columns"
1220
+ :data="data"
1221
+ row-key="id"
1222
+ :load-more-row="{ enabled: true, hasMore: true }"
1223
+ />
1224
+ ```
1225
+
1175
1226
  #### 外观
1176
1227
 
1177
1228
  | Prop | 类型 | 默认值 | 说明 |
@@ -1475,7 +1526,7 @@ interface RowSelectionConfig {
1475
1526
 
1476
1527
  #### Grid 级默认与列级覆盖
1477
1528
 
1478
- 以下 Grid Prop 可一次性为**所有用户列**设定默认行为;列级字段显式配置时**以列为准**(对齐 AG Grid `defaultColDef` 语义):
1529
+ 以下 Grid Prop 可一次性为**所有用户列**设定默认行为;列级字段显式配置时**以列为准**(列级覆盖 Grid 默认):
1479
1530
 
1480
1531
  | Grid Prop | 列级字段 | 默认值 | 说明 |
1481
1532
  |-----------|----------|--------|------|
@@ -3735,7 +3786,7 @@ api.clearValidation()
3735
3786
 
3736
3787
  ## 辅助组件
3737
3788
 
3738
- 表格列设置(Phase 27)提供一组**独立组件**,对标 AG Grid 的 Side Bar + Columns Tool Panel。只要持有 `GridApi` 即可使用,不强依赖 MagicGrid 内部 DOM。
3789
+ 表格列设置(Phase 27)提供一组**独立组件**(列显隐、顺序、固定等),用于侧边栏或工具栏场景。只要持有 `GridApi` 即可使用,不强依赖 MagicGrid 内部 DOM。
3739
3790
 
3740
3791
  > **样式**:须全局引入 `tokens.css` 与 `style.css`(见 [引入样式](#引入样式))。组件类名以 `mg-column-settings-*` 为前缀。
3741
3792
 
@@ -3797,7 +3848,7 @@ function onResetColumnOrder(api: GridApi) {
3797
3848
  </template>
3798
3849
  ```
3799
3850
 
3800
- #### 方式 B:页头 / 外部工具栏(ERP 常见)
3851
+ #### 方式 B:页头 / 外部工具栏
3801
3852
 
3802
3853
  按钮放在 MagicGrid **外部**(如页面「新增」「刷新」旁)时,省略 `portalEl` 即可 Teleport 到 `document.body`;须确保已引入 `tokens.css` 与 `style.css`(见 [引入样式](#引入样式)):
3803
3854
 
@@ -4060,6 +4111,8 @@ import type { ColumnSettingsMenuIconName } from '@taocompany/magic-grid/types/co
4060
4111
  | `@taocompany/magic-grid/validation` | 校验运行时(`enrichColumnsWithValidation`、`Schema` 等) |
4061
4112
  | `@taocompany/magic-grid/tokens.css` | 设计 token(`--mg-*`,**必须**先于 style 引入) |
4062
4113
  | `@taocompany/magic-grid/style.css` | 组件样式(**必须**手动引入) |
4114
+ | `@taocompany/magic-grid/token-catalog.json` | Theme Studio / token 可视化用目录(可选) |
4115
+ | `@taocompany/magic-grid/api-manifest.json` | 构建期 API 摘要 JSON(Agent / MCP;规则正文见 manifest,不在 README 复述) |
4063
4116
 
4064
4117
  ### 主入口运行时导出
4065
4118