@taocompany/magic-grid 0.6.3 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -294,7 +294,7 @@ const columns: ColumnDef[] = [
294
294
  | `indexColumn.width` | `40` | 列宽 px(最小 40) |
295
295
  | `indexColumn.start` | `1` | 起始序号 |
296
296
  | `indexColumn.focusMode` | `'multiple'` | 辅助定位模式 |
297
- | `indexColumn.syncToSelectionColumn` | `true` **(MG)** | 索引定位单向同步行选择 |
297
+ | `indexColumn.syncToSelectionColumn` | `true` **(MG)** | 索引定位单向同步行选择;用户点击索引列或 `setIndexFocus`(`mode: 'default'`)时生效 |
298
298
  | `indexColumn.showRowDragHandle` | `false` | 不显示行拖拽把柄 |
299
299
  | `indexColumn.enableRowResizer` | `false` | 不可拖拽调整行高 |
300
300
 
@@ -305,7 +305,7 @@ const columns: ColumnDef[] = [
305
305
  | `rowSelection` | `'single'` | 单选模式 |
306
306
  | `selectionColumn.width` | `40` | 列宽 px |
307
307
  | `selectionColumn.selectAllLabel` | `'全选'` | 全选 checkbox aria-label |
308
- | `reserveSelection` | `false` | 数据刷新后不保留选中 |
308
+ | `reserveSelection` | `false` | 数据刷新后是否保留选中行;离屏选中可用 `clearRowSelection({ scope: 'all' })` 清空 |
309
309
 
310
310
  `rowSelection` 对象形式时,`groupSelectsChildren` 默认 `true`(tree 模式父节点级联子孙)。
311
311
 
@@ -518,7 +518,7 @@ const columns: ColumnDef[] = [
518
518
  | `width` | `number` | `40` | 列宽 px(最小 40) |
519
519
  | `start` | `number` | `1` | 起始序号(1-based 展示 = rowIndex + start) |
520
520
  | `focusMode` | `'single' \| 'multiple'` | `'multiple'` | 辅助定位模式 |
521
- | `syncToSelectionColumn` | `boolean` | `false`(MagicGrid 组件层默认 `true`) | 索引列定位是否单向同步到行选择列;仅当 `focusMode` 与 `rowSelection` 同为 single 或同为 multiple 时生效 |
521
+ | `syncToSelectionColumn` | `boolean` | `false`(MagicGrid 组件层默认 `true`) | 索引列定位是否单向同步到行选择列;仅当 `focusMode` 与 `rowSelection` 同为 single 或同为 multiple 时生效。用户在索引列上操作,或 API `setIndexFocus`(`mode: 'default'`)时同步;点击其他区域清除索引定位、行删除 / rowId 迁移等不同步 |
522
522
  | `index` | `(rowIndex) => number \| string` | — | 自定义序号展示 |
523
523
  | `showRowDragHandle` | `boolean` | `false` | 在索引列显示行拖拽把柄 |
524
524
  | `enableRowResizer` | `boolean` | `false` | 索引列底边可拖拽调整行高 |
@@ -531,7 +531,7 @@ const columns: ColumnDef[] = [
531
531
  | `rowSelection` | `'single' \| 'multiple' \| false \| RowSelectionConfig` | `'single'` | 行选择模式;`false` 禁用 |
532
532
  | `selectionColumn` | `SelectionColumnOptions` | — | 行选择列配置 |
533
533
  | `selectable` | `SelectableFn` | — | 行 checkbox 是否可勾选;省略时全部可选 |
534
- | `reserveSelection` | `boolean` | `false` | 数据刷新后是否保留选中行 |
534
+ | `reserveSelection` | `boolean` | `false` | 数据刷新后是否保留选中行;离屏选中可用 `clearRowSelection({ scope: 'all' })` 清空 |
535
535
  | `isRowDisabled` | `boolean \| IsRowDisabledFn` | — | 行级禁用(该行全部数据列 disabled) |
536
536
 
537
537
  `RowSelectionConfig`:
@@ -974,12 +974,43 @@ api.getColumns().some((c) => c.colId === 'internalCode') // false
974
974
  | `width` | `number` | `40` | 列宽 px(最小 40) |
975
975
  | `start` | `number` | `1` | 起始序号(1-based 展示 = rowIndex + start) |
976
976
  | `focusMode` | `'single' \| 'multiple'` | `'multiple'` | 辅助定位模式 |
977
- | `syncToSelectionColumn` | `boolean` | core `false` / MagicGrid `true` | 索引列定位单向同步到行选择列 |
977
+ | `syncToSelectionColumn` | `boolean` | core `false` / MagicGrid `true` | 索引列定位单向同步到行选择列;用户点击索引列或 `setIndexFocus`(`mode: 'default'`)时生效 |
978
978
  | `index` | `(rowIndex) => number \| string` | — | 自定义序号展示 |
979
979
  | `showRowDragHandle` | `boolean` | `false` | 在索引列显示行拖拽把柄 |
980
980
  | `enableRowResizer` | `boolean` | `false` | 索引列底边可拖拽调整行高 |
981
981
  | `headerAlign` / `headerValign` / `align` / `valign` / `footerAlign` / `footerValign` | `GridHorizontalAlign` / `GridVerticalAlign` | `'center'` | 对齐配置 |
982
982
 
983
+ ### SetIndexFocusOptions
984
+
985
+ `setIndexFocus` 的可选第二参数:
986
+
987
+ | 字段 | 类型 | 默认值 | 说明 |
988
+ |------|------|--------|------|
989
+ | `mode` | `'default' \| 'manual'` | `'default'` | `default`:与用户点击索引列一致,按 grid `syncToSelectionColumn` 决定是否同步行选择列;`manual`:由 `syncToSelectionColumn` 显式控制 |
990
+ | `syncToSelectionColumn` | `boolean` | `false`(仅 `mode: 'manual'` 时生效) | 是否同步行选择列;可覆盖 grid 配置 |
991
+
992
+ ```ts
993
+ api.setIndexFocus(2) // 默认模式
994
+ api.setIndexFocus(2, { mode: 'default' }) // 同上
995
+ api.setIndexFocus(2, { mode: 'manual', syncToSelectionColumn: false }) // 仅定位,不选中
996
+ api.setIndexFocus(2, { mode: 'manual', syncToSelectionColumn: true }) // 强制同步选中
997
+ api.setIndexFocus([]) // 清除定位
998
+ ```
999
+
1000
+ ### ClearRowSelectionOptions
1001
+
1002
+ `clearRowSelection` 的可选参数:
1003
+
1004
+ | 字段 | 类型 | 默认值 | 说明 |
1005
+ |------|------|--------|------|
1006
+ | `scope` | `'current' \| 'all'` | `'all'` | `all`:清空全部选中(含 `reserveSelection` 离屏选中);`current`:仅取消当前 display 中的选中 |
1007
+
1008
+ ```ts
1009
+ api.clearRowSelection() // 清空全部
1010
+ api.clearRowSelection({ scope: 'all' }) // 同上
1011
+ api.clearRowSelection({ scope: 'current' }) // 仅清当前可见 display 中的选中
1012
+ ```
1013
+
983
1014
  ### SelectionColumnOptions
984
1015
 
985
1016
  行选择列配置,通过 `selectionColumn` prop 传入(`rowSelection !== false` 时生效)。
@@ -1506,7 +1537,7 @@ payload 为 `RowClickedEvent<TData>` / `RowDoubleClickedEvent<TData>`(默认 `
1506
1537
 
1507
1538
  #### `selection-changed`
1508
1539
 
1509
- 行选择列 checkbox 选中集变化时触发。MagicGrid:`@selection-changed`。仅反映 checkbox 勾选,不含索引列定位(见 `index-focus-changed`)。
1540
+ 行选择列 checkbox 选中集变化时触发。MagicGrid:`@selection-changed`。仅反映 checkbox 勾选,不含索引列定位(见 `index-focus-changed`)。也可通过 `api.getSelectedRowIds()` 同步读取当前选中。
1510
1541
 
1511
1542
  payload 为 `SelectionChangedEvent`:
1512
1543
 
@@ -1516,7 +1547,7 @@ payload 为 `SelectionChangedEvent`:
1516
1547
 
1517
1548
  #### `index-focus-changed`
1518
1549
 
1519
- 索引列辅助定位变化时触发。MagicGrid:`@index-focus-changed`。与 checkbox 选中(`selection-changed`)独立。
1550
+ 索引列辅助定位变化时触发。MagicGrid:`@index-focus-changed`。与 checkbox 选中(`selection-changed`)独立。也可通过 `api.getIndexFocusedRowIds()` 同步读取当前定位。
1520
1551
 
1521
1552
  payload 为 `IndexFocusChangedEvent`:
1522
1553
 
@@ -2087,11 +2118,48 @@ async function addRow() {
2087
2118
 
2088
2119
  #### 行选择 / 索引定位
2089
2120
 
2090
- | 方法 | 参数 | 说明 |
2091
- |------|------|------|
2092
- | `toggleRowSelection(rowIds, selected?, force?)` | selected 省略时 toggle | 切换/设置 checkbox 选中 |
2093
- | `toggleAllSelection(selected?)` | 仅 multiple 模式 | 表头全选操作 |
2094
- | `setIndexFocus(rowIds)` | | 设置索引列辅助定位 |
2121
+ | 方法 | 参数 | 返回值 | 说明 |
2122
+ |------|------|--------|------|
2123
+ | `toggleRowSelection(rowIds, selected?, force?)` | selected 省略时 toggle | `void` | 切换/设置 checkbox 选中;变更时 emit `selectionChanged` |
2124
+ | `toggleAllSelection(selected?)` | 仅 multiple 模式 | `void` | 表头全选操作;`false` 仅取消可见可选行,保留 disabled 已选行 |
2125
+ | `clearRowSelection(options?)` | `ClearRowSelectionOptions` | `void` | 清空行 checkbox 选中;变更时 emit `selectionChanged` |
2126
+ | `getSelectedRowIds()` | — | `BusinessRowId[]` | 读取当前 checkbox 选中(与 `selectionChanged.selectedRowIds` 同型) |
2127
+ | `setIndexFocus(rowIds, options?)` | `SetIndexFocusOptions` | `void` | 编程式设置索引列辅助定位,不进入鼠标拖拉;变更时 emit `indexFocusChanged` |
2128
+ | `getIndexFocusedRowIds()` | — | `BusinessRowId[]` | 读取当前索引列辅助定位;未启用 `showIndexColumn` 时返回 `[]` |
2129
+
2130
+ **`clearRowSelection`**
2131
+
2132
+ | `options.scope` | 行为 |
2133
+ |-----------------|------|
2134
+ | `'all'`(默认) | 清空全部选中,含 `reserveSelection` 保留的离屏选中 |
2135
+ | `'current'` | 仅取消当前 display 中的选中,保留离屏选中 |
2136
+
2137
+ **`setIndexFocus`**
2138
+
2139
+ 须启用 `showIndexColumn`。`focusMode: 'single'` 时仅保留首个有效 id。
2140
+
2141
+ | `options.mode` | 同步行选择列 |
2142
+ |----------------|-------------|
2143
+ | `'default'`(默认) | 与用户点击索引列一致,按 `indexColumn.syncToSelectionColumn` 决定 |
2144
+ | `'manual'` | 由 `syncToSelectionColumn` 显式控制(可覆盖 grid 配置;省略时视为 `false`) |
2145
+
2146
+ ```ts
2147
+ // 行选择
2148
+ api.toggleRowSelection([1, 3], true)
2149
+ api.getSelectedRowIds() // => [1, 3]
2150
+ api.clearRowSelection() // 清空全部(含离屏)
2151
+ api.clearRowSelection({ scope: 'current' }) // 仅清当前 display
2152
+
2153
+ // 索引定位
2154
+ api.setIndexFocus(2)
2155
+ api.setIndexFocus([1, 2, 3]) // multiple 模式
2156
+ api.setIndexFocus([]) // 清除
2157
+ api.getIndexFocusedRowIds() // => [2]
2158
+
2159
+ api.setIndexFocus(2, { mode: 'manual', syncToSelectionColumn: false }) // 仅定位
2160
+ ```
2161
+
2162
+ 类型 `SetIndexFocusOptions`、`ClearRowSelectionOptions` 见 [Options 类型参考](#options-类型参考)。
2095
2163
 
2096
2164
  #### 展开 / 分组 / 树
2097
2165
 
@@ -3305,7 +3373,7 @@ const onRowChanged = (e: RowValueChangedEvent<OrderRow, number>) => {
3305
3373
  const cells: EditingCellPosition<OrderRow, unknown>[] = api.getEditingCells()
3306
3374
  ```
3307
3375
 
3308
- 常用导出:`GridReadyEvent`、`CellValueChangedEvent`、`RowClickedEvent`、`FilterModel`、`GridEventMap`、`GridEventHandler`。
3376
+ 常用导出:`GridReadyEvent`、`CellValueChangedEvent`、`RowClickedEvent`、`FilterModel`、`GridEventMap`、`GridEventHandler`、`SetIndexFocusOptions`、`ClearRowSelectionOptions`、`BusinessRowId`。
3309
3377
 
3310
3378
  ### 严格模式建议
3311
3379
 
@@ -1 +1 @@
1
- {"version":3,"file":"cellEditorCache-DmICiO9q.js","names":[],"sources":["../src/core/types/indexColumn.ts","../src/core/types/rowSelectionOptions.ts","../src/core/types/selectionColumn.ts","../src/core/types/cellEditorMode.ts","../src/core/types/cellEditorCache.ts"],"sourcesContent":["import type { ColumnDef } from '@types'\r\nimport type { GridHorizontalAlign, GridVerticalAlign } from '@core/types/align'\r\n\r\n/** 系统索引列 colId;用户 columns 不得占用 */\r\nexport const INDEX_COLUMN_ID = '__index__'\r\n\r\n/** 索引列最小(默认)宽度 px */\r\nexport const INDEX_COLUMN_MIN_WIDTH = 40\r\n\r\n/** 索引列默认起始序号(1-based 展示 = rowIndex + start) */\r\nexport const DEFAULT_INDEX_COLUMN_START = 1\r\n\r\n/** 索引列配置 */\r\nexport interface IndexColumnOptions {\r\n /** 表头文案;默认空字符串 */\r\n label?: string\r\n /** 列宽 px;默认 40;小于 40 时钳制为 40 */\r\n width?: number\r\n /** 起始序号(1-based 展示 = rowIndex + start);默认 1 */\r\n start?: number\r\n /**\r\n * 辅助定位模式:single / multiple(multiple 支持 Ctrl/Shift/拖拉范围)\r\n * 默认 multiple(Excel 行号式交互)\r\n */\r\n focusMode?: 'single' | 'multiple'\r\n /**\r\n * 索引列定位是否单向同步到行选择列(业务选中);core 默认 false,MagicGrid 组件层默认 true。\r\n * 仅当 indexColumn.focusMode 与 rowSelection 同为 single 或同为 multiple 时生效。\r\n * 仅用户在索引列上操作(点击/拖选/再次点击取消)时同步;点击其他区域清除索引定位不同步行选择列。\r\n */\r\n syncToSelectionColumn?: boolean\r\n /** 表头水平对齐;默认 center */\r\n headerAlign?: GridHorizontalAlign\r\n /** 表头垂直对齐;默认 center */\r\n headerValign?: GridVerticalAlign\r\n /** 表体水平对齐;默认 center */\r\n align?: GridHorizontalAlign\r\n /** 表体垂直对齐;默认 center */\r\n valign?: GridVerticalAlign\r\n /** footer 水平对齐;默认 center */\r\n footerAlign?: GridHorizontalAlign\r\n /** footer 垂直对齐;默认 center */\r\n footerValign?: GridVerticalAlign\r\n /**\r\n * 自定义序号展示;入参为 rowsToDisplay 下标。\r\n * 缺省:(rowIndex) => String(rowIndex + start)\r\n */\r\n index?: (rowIndex: number) => number | string\r\n /**\r\n * 在索引列 cell 内显示行拖拽把柄;默认 false。\r\n * 需配合 Grid `rowDragManaged` 或监听 `rowDragEnd` 自行改序。\r\n */\r\n showRowDragHandle?: boolean\r\n /**\r\n * 索引列底边可拖拽调整行高;默认 false。\r\n * 对标 AG Grid Row Numbers `enableRowResizer`。\r\n */\r\n enableRowResizer?: boolean\r\n}\r\n\r\n/** Grid 级索引列开关与配置(块 0 类型;块 1+ 消费) */\r\nexport interface IndexColumnGridOptions {\r\n /** 是否显示最左侧索引列;默认 false */\r\n showIndexColumn?: boolean\r\n /** 索引列配置;showIndexColumn=true 时生效 */\r\n indexColumn?: IndexColumnOptions\r\n}\r\n\r\nexport interface ResolvedIndexColumnOptions {\r\n label: string\r\n width: number\r\n start: number\r\n focusMode: 'single' | 'multiple'\r\n syncToSelectionColumn: boolean\r\n showRowDragHandle: boolean\r\n enableRowResizer: boolean\r\n headerAlign: GridHorizontalAlign\r\n headerValign: GridVerticalAlign\r\n align: GridHorizontalAlign\r\n valign: GridVerticalAlign\r\n footerAlign: GridHorizontalAlign\r\n footerValign: GridVerticalAlign\r\n index?: (rowIndex: number) => number | string\r\n}\r\n\r\nexport interface ResolvedIndexColumnGridOptions {\r\n showIndexColumn: boolean\r\n indexColumn: ResolvedIndexColumnOptions\r\n}\r\n\r\nexport function resolveIndexColumnWidth(width?: number): number {\r\n return Math.max(INDEX_COLUMN_MIN_WIDTH, width ?? INDEX_COLUMN_MIN_WIDTH)\r\n}\r\n\r\nexport function resolveIndexColumnOptions(\r\n options: IndexColumnOptions = {},\r\n): ResolvedIndexColumnOptions {\r\n return {\r\n label: options.label ?? '',\r\n width: resolveIndexColumnWidth(options.width),\r\n start: options.start ?? DEFAULT_INDEX_COLUMN_START,\r\n focusMode: options.focusMode === 'single' ? 'single' : 'multiple',\r\n syncToSelectionColumn: options.syncToSelectionColumn ?? false,\r\n showRowDragHandle: options.showRowDragHandle ?? false,\r\n enableRowResizer: options.enableRowResizer ?? false,\r\n headerAlign: options.headerAlign ?? 'center',\r\n headerValign: options.headerValign ?? 'center',\r\n align: options.align ?? 'center',\r\n valign: options.valign ?? 'center',\r\n footerAlign: options.footerAlign ?? 'center',\r\n footerValign: options.footerValign ?? 'center',\r\n index: options.index,\r\n }\r\n}\r\n\r\nexport function resolveIndexColumnGridOptions(\r\n options: IndexColumnGridOptions = {},\r\n): ResolvedIndexColumnGridOptions {\r\n return {\r\n showIndexColumn: options.showIndexColumn ?? false,\r\n indexColumn: resolveIndexColumnOptions(options.indexColumn),\r\n }\r\n}\r\n\r\nexport function isIndexColumn(colId: string): boolean {\r\n return colId === INDEX_COLUMN_ID\r\n}\r\n\r\nexport function resolveColumnDefColId(column: ColumnDef, index: number): string {\r\n return column.key ?? column.prop ?? `col_${index}`\r\n}\r\n\r\n/** 开发模式:用户 columns 占用系统索引列 colId 时告警 */\r\nexport function warnIfUserColumnsConflictWithIndexColumn(\r\n columns: readonly ColumnDef[],\r\n): void {\r\n if (!import.meta.env.DEV) {\r\n return\r\n }\r\n\r\n columns.forEach((column, index) => {\r\n const colId = resolveColumnDefColId(column, index)\r\n if (colId === INDEX_COLUMN_ID || column.key === INDEX_COLUMN_ID) {\r\n console.warn(\r\n `[magic-grid] Column \"${INDEX_COLUMN_ID}\" is reserved for the system index column. ` +\r\n 'Remove it from your columns definition or use showIndexColumn instead.',\r\n )\r\n }\r\n })\r\n}\r\n","export type RowSelectionMode = 'single' | 'multiple'\n\n/** 行选择配置(Phase 19 · groupSelectsChildren) */\nexport interface RowSelectionConfig {\n mode: RowSelectionMode\n /**\n * tree 模式下选中父节点是否级联选中子孙。默认 `true`。\n * 对标 AG Grid rowSelection.groupSelectsChildren。\n */\n groupSelectsChildren?: boolean\n}\n\nexport type RowSelectionInput =\n | RowSelectionMode\n | false\n | RowSelectionConfig\n\nexport interface ResolvedRowSelectionOptions {\n mode: RowSelectionMode | false\n groupSelectsChildren: boolean\n}\n\nexport function normalizeRowSelectionInput(\n input: RowSelectionInput | undefined,\n): ResolvedRowSelectionOptions {\n if (input === false) {\n return { mode: false, groupSelectsChildren: true }\n }\n\n if (input == null) {\n return { mode: 'single', groupSelectsChildren: true }\n }\n\n if (typeof input === 'string') {\n return {\n mode: input === 'multiple' ? 'multiple' : 'single',\n groupSelectsChildren: true,\n }\n }\n\n return {\n mode: input.mode === 'multiple' ? 'multiple' : 'single',\n groupSelectsChildren: input.groupSelectsChildren ?? true,\n }\n}\n\nexport function normalizeRowSelectionMode(\n resolved: ResolvedRowSelectionOptions,\n): RowSelectionMode | false {\n return resolved.mode\n}\n","import type { RowSelectionMode } from '@core/selection/selectionService'\r\nimport {\r\n normalizeRowSelectionInput,\r\n type RowSelectionInput,\r\n} from '@core/types/rowSelectionOptions'\r\n\r\nimport { resolveColumnDefColId } from './indexColumn'\r\nimport type { GridHorizontalAlign, GridVerticalAlign } from '@core/types/align'\r\nimport type { ColumnDef } from '@types'\r\n\r\n/** 系统行选择列 colId;用户 columns 不得占用 */\r\nexport const SELECTION_COLUMN_ID = '__select__'\r\n\r\n/** 行选择列最小宽度 px */\r\nexport const SELECTION_COLUMN_MIN_WIDTH = 40\r\n\r\n/** 行选择列默认宽度 px */\r\nexport const SELECTION_COLUMN_DEFAULT_WIDTH = 40\r\n\r\n/** 表头全选 checkbox 默认 aria-label */\r\nexport const DEFAULT_SELECTION_SELECT_ALL_LABEL = '全选'\r\n\r\n/** 行选择列配置 */\r\nexport interface SelectionColumnOptions {\r\n /** 列宽 px;默认 40;小于 40 时钳制为 40 */\r\n width?: number\r\n /** 表头全选 checkbox 的 aria-label;默认「全选」 */\r\n selectAllLabel?: string\r\n /** 行 checkbox 的 aria-label 工厂 */\r\n rowLabel?: (rowIndex: number) => string\r\n /** 表头水平对齐;默认 center */\r\n headerAlign?: GridHorizontalAlign\r\n /** 表头垂直对齐;默认 center */\r\n headerValign?: GridVerticalAlign\r\n /** 表体水平对齐;默认 center */\r\n align?: GridHorizontalAlign\r\n /** 表体垂直对齐;默认 center */\r\n valign?: GridVerticalAlign\r\n /** footer 水平对齐;默认 center */\r\n footerAlign?: GridHorizontalAlign\r\n /** footer 垂直对齐;默认 center */\r\n footerValign?: GridVerticalAlign\r\n}\r\n\r\n/** Grid 级行选择列配置(块 0 类型;块 1+ 消费) */\r\nexport interface SelectionColumnGridOptions {\r\n /** 行选择列配置;rowSelection !== false 时生效 */\r\n selectionColumn?: SelectionColumnOptions\r\n}\r\n\r\nexport interface ResolvedSelectionColumnOptions {\r\n width: number\r\n selectAllLabel: string\r\n rowLabel?: (rowIndex: number) => string\r\n headerAlign: GridHorizontalAlign\r\n headerValign: GridVerticalAlign\r\n align: GridHorizontalAlign\r\n valign: GridVerticalAlign\r\n footerAlign: GridHorizontalAlign\r\n footerValign: GridVerticalAlign\r\n}\r\n\r\nexport interface ResolvedSelectionColumnGridOptions {\r\n /** rowSelection !== false */\r\n enabled: boolean\r\n /** 行选模式;enabled=false 时为占位 single */\r\n mode: RowSelectionMode\r\n selectionColumn: ResolvedSelectionColumnOptions\r\n}\r\n\r\nexport function resolveSelectionColumnWidth(width?: number): number {\r\n return Math.max(SELECTION_COLUMN_MIN_WIDTH, width ?? SELECTION_COLUMN_DEFAULT_WIDTH)\r\n}\r\n\r\nexport function resolveSelectionColumnOptions(\r\n options: SelectionColumnOptions = {},\r\n): ResolvedSelectionColumnOptions {\r\n return {\r\n width: resolveSelectionColumnWidth(options.width),\r\n selectAllLabel: options.selectAllLabel ?? DEFAULT_SELECTION_SELECT_ALL_LABEL,\r\n rowLabel: options.rowLabel,\r\n headerAlign: options.headerAlign ?? 'center',\r\n headerValign: options.headerValign ?? 'center',\r\n align: options.align ?? 'center',\r\n valign: options.valign ?? 'center',\r\n footerAlign: options.footerAlign ?? 'center',\r\n footerValign: options.footerValign ?? 'center',\r\n }\r\n}\r\n\r\nexport function resolveSelectionColumnGridOptions(\r\n options: {\r\n rowSelection?: RowSelectionInput\r\n selectionColumn?: SelectionColumnOptions\r\n } = {},\r\n): ResolvedSelectionColumnGridOptions {\r\n // Grid 直建时缺省 rowSelection 仍不注入行选择列;MagicGrid 默认传 'single'。\r\n if (options.rowSelection == null) {\r\n return {\r\n enabled: false,\r\n mode: 'single',\r\n selectionColumn: resolveSelectionColumnOptions(options.selectionColumn),\r\n }\r\n }\r\n\r\n const resolved = normalizeRowSelectionInput(options.rowSelection)\r\n const enabled = resolved.mode !== false\r\n\r\n return {\r\n enabled,\r\n mode: enabled && resolved.mode !== false ? resolved.mode : 'single',\r\n selectionColumn: resolveSelectionColumnOptions(options.selectionColumn),\r\n }\r\n}\r\n\r\nexport function isSelectionColumn(colId: string): boolean {\r\n return colId === SELECTION_COLUMN_ID\r\n}\r\n\r\n/** 开发模式:用户 columns 占用系统行选择列 colId 时告警 */\r\nexport function warnIfUserColumnsConflictWithSelectionColumn(\r\n columns: readonly ColumnDef[],\r\n): void {\r\n if (!import.meta.env.DEV) {\r\n return\r\n }\r\n\r\n columns.forEach((column, index) => {\r\n const colId = resolveColumnDefColId(column, index)\r\n if (colId === SELECTION_COLUMN_ID || column.key === SELECTION_COLUMN_ID) {\r\n console.warn(\r\n `[magic-grid] Column \"${SELECTION_COLUMN_ID}\" is reserved for the system row selection column. ` +\r\n 'Remove it from your columns definition; use rowSelection instead.',\r\n )\r\n }\r\n })\r\n}\r\n","import { isIndexColumn } from '@core/types/indexColumn'\r\nimport { isSelectionColumn } from '@core/types/selectionColumn'\r\nimport { isBuiltInCellEditor } from '@core/types/cellEditor'\r\n\r\n/** 单元格编辑器呈现模式:overlay 进入编辑态;inline 常驻格内 */\r\nexport type CellEditorMode = 'overlay' | 'inline'\r\n\r\n/** 缺省 overlay,与 Phase 3 行为一致 */\r\nexport const DEFAULT_CELL_EDITOR_MODE: CellEditorMode = 'overlay'\r\n\r\n/** 解析列级 cellEditorMode;缺省 overlay */\r\nexport function resolveCellEditorMode(mode?: CellEditorMode): CellEditorMode {\r\n if (mode === 'inline') {\r\n return 'inline'\r\n }\r\n return DEFAULT_CELL_EDITOR_MODE\r\n}\r\n\r\n/** 系统列强制 overlay;用户列解析 cellEditorMode */\r\nexport function resolveColumnCellEditorMode(\r\n colId: string,\r\n mode?: CellEditorMode,\r\n): CellEditorMode {\r\n if (isIndexColumn(colId) || isSelectionColumn(colId)) {\r\n return DEFAULT_CELL_EDITOR_MODE\r\n }\r\n return resolveCellEditorMode(mode)\r\n}\r\n\r\n/** 是否为 inline 常驻编辑器列(须配置 cellEditor;系统列恒 false) */\r\nexport function isInlineEditorColumn(column: {\r\n colId: string\r\n cellEditorMode?: CellEditorMode\r\n cellEditor?: unknown\r\n}): boolean {\r\n if (isIndexColumn(column.colId) || isSelectionColumn(column.colId)) {\r\n return false\r\n }\r\n\r\n if (resolveCellEditorMode(column.cellEditorMode) !== 'inline') {\r\n return false\r\n }\r\n\r\n return column.cellEditor != null\r\n}\r\n\r\n/** 开发模式:inline 误配告警 */\r\nexport function warnIfInlineEditorMisconfigured(\r\n colId: string,\r\n options: {\r\n cellEditorMode?: CellEditorMode\r\n cellEditor?: unknown\r\n },\r\n): void {\r\n if (!import.meta.env.DEV) {\r\n return\r\n }\r\n\r\n const isSystem = isIndexColumn(colId) || isSelectionColumn(colId)\r\n\r\n if (isSystem && options.cellEditorMode === 'inline') {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" is a system column and cannot use cellEditorMode: 'inline'. ` +\r\n 'Inline editors apply to user data columns only.',\r\n )\r\n return\r\n }\r\n\r\n if (options.cellEditorMode === 'inline' && options.cellEditor == null) {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" has cellEditorMode: 'inline' but no cellEditor. ` +\r\n 'Configure cellEditor (e.g. \"checkbox\") or remove inline mode.',\r\n )\r\n }\r\n}\r\n\r\nconst INLINE_NATIVE_EDITORS = new Set(['text', 'number', 'checkbox', 'switch'])\r\n\r\n/** 开发模式:inline 列使用可能依赖 overlay/teleport 的编辑器时告警 */\r\nexport function warnIfInlineOverlayEditor(\r\n colId: string,\r\n options: {\r\n cellEditorMode?: CellEditorMode\r\n cellEditor?: unknown\r\n },\r\n): void {\r\n if (!import.meta.env.DEV || options.cellEditorMode !== 'inline') {\r\n return\r\n }\r\n\r\n const editor = options.cellEditor\r\n if (editor == null) {\r\n return\r\n }\r\n\r\n if (typeof editor === 'function') {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" uses cellEditorMode: 'inline' with a custom editor function. ` +\r\n 'Inline editors must not use overlay/teleport; prefer checkbox, switch, text, or number.',\r\n )\r\n return\r\n }\r\n\r\n if (typeof editor === 'string' && !INLINE_NATIVE_EDITORS.has(editor) && !isBuiltInCellEditor(editor)) {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" uses cellEditorMode: 'inline' with editor \"${editor}\" ` +\r\n 'which may require an overlay surface. Prefer \"checkbox\", \"switch\", \"text\", or \"number\" for inline columns.',\r\n )\r\n }\r\n}\r\n","/**\n * Cell Editor Cache — 类型与纯函数(Phase 42 / M35)\n *\n * 职责:Grid/列 opt-in 开关解析、存储键规则、是否向 overlay 列注入 API。\n * 可变状态与 LRU 在 {@link CellEditorCacheService}(`cellEditorCacheService.ts`)。\n *\n * 存储键:`${rowPart}::${colId}::${resolvedKey}`\n * - rowPart:业务 rowId 字符串;transient 行为 `\\0${internalRowId}`\n * - resolvedKey:消费方 key + 可选列级 namespace 前缀\n */\nimport type { BusinessRowId } from '@core/types/businessRowId'\nimport type { CellEditorMode } from '@core/types/cellEditorMode'\nimport { isInlineEditorColumn } from '@core/types/cellEditorMode'\n\n/** 消费方未传 key 且列无 string namespace 时的默认 slot */\nexport const DEFAULT_CELL_EDITOR_CACHE_KEY = 'default'\n\n/** 列级 flag:`true` 启用 · `string` 固定 namespace · `false` 全局开启时 opt-out */\nexport type CellEditorCacheColumnFlag = boolean | string\n\n/** Grid 级配置(MagicGrid `enableCellEditorCache` / `cellEditorCacheMaxEntries`) */\nexport interface CellEditorCacheGridOptions {\n /**\n * 为所有 overlay 列注入 get/set/clear API。\n * 默认 false(零开销);列级 `cellEditorCache: false` 可显式 opt-out。\n */\n enableCellEditorCache?: boolean\n\n /**\n * 会话 cache 最大 **cell bucket** 数 `(rowId,colId)`;超出 LRU 淘汰。\n * 默认不限。\n */\n cellEditorCacheMaxEntries?: number\n}\n\nexport interface ResolvedCellEditorCacheGridOptions {\n enableCellEditorCache: boolean\n cellEditorCacheMaxEntries: number | undefined\n}\n\nexport function resolveCellEditorCacheGridOptions(\n options: CellEditorCacheGridOptions = {},\n): ResolvedCellEditorCacheGridOptions {\n const maxEntries = options.cellEditorCacheMaxEntries\n return {\n enableCellEditorCache: options.enableCellEditorCache ?? false,\n cellEditorCacheMaxEntries:\n maxEntries != null && Number.isFinite(maxEntries) && maxEntries > 0\n ? Math.floor(maxEntries)\n : undefined,\n }\n}\n\n/**\n * 存储键 rowId 段。\n * transient 行业务 id 为 null,须传 internalRowId 以免多行新增互相覆盖。\n */\nexport function buildCellEditorCacheRowPart(\n rowId: BusinessRowId,\n internalRowId?: string,\n): string {\n if (rowId !== null) {\n return String(rowId)\n }\n if (internalRowId) {\n return `\\0${internalRowId}`\n }\n return '\\0transient'\n}\n\n/** 完整 Map 键:`rowPart::colId::key` */\nexport function buildCellEditorCacheStorageKey(\n rowId: BusinessRowId,\n colId: string,\n key: string = DEFAULT_CELL_EDITOR_CACHE_KEY,\n options?: { internalRowId?: string },\n): string {\n const rowPart = buildCellEditorCacheRowPart(rowId, options?.internalRowId)\n return `${rowPart}::${colId}::${key}`\n}\n\n/** LRU 粒度:同一格 `(rowId,colId)` 下所有 namespace key 共用一个 bucket */\nexport function buildCellEditorCacheBucketKey(\n rowId: BusinessRowId,\n colId: string,\n options?: { internalRowId?: string },\n): string {\n const rowPart = buildCellEditorCacheRowPart(rowId, options?.internalRowId)\n return `${rowPart}::${colId}`\n}\n\nexport interface ResolveCellEditorCacheKeyOptions {\n userKey?: string\n columnCellEditorCache?: CellEditorCacheColumnFlag\n}\n\n/**\n * 消费方 key → 存储层 key。\n * 列级 `cellEditorCache: 'part'` 时:`getCellCache()` → `part`;`getCellCache('options')` → `part::options`。\n */\nexport function resolveCellEditorCacheKey(\n options: ResolveCellEditorCacheKeyOptions = {},\n): string {\n const { userKey, columnCellEditorCache } = options\n const namespace =\n typeof columnCellEditorCache === 'string' ? columnCellEditorCache : undefined\n\n if (userKey != null && userKey !== '') {\n return namespace ? `${namespace}::${userKey}` : userKey\n }\n\n if (namespace) {\n return namespace\n }\n\n return DEFAULT_CELL_EDITOR_CACHE_KEY\n}\n\nexport interface ShouldInjectCellEditorCacheApiOptions {\n enableCellEditorCache: boolean\n colId: string\n cellEditorMode?: CellEditorMode\n cellEditor?: unknown\n columnCellEditorCache?: CellEditorCacheColumnFlag\n}\n\n/** inline 列、列级 false、或未开启全局开关 → 不注入(CellEditorParams 上无 cache 方法) */\nexport function shouldInjectCellEditorCacheApi(\n options: ShouldInjectCellEditorCacheApiOptions,\n): boolean {\n if (\n isInlineEditorColumn({\n colId: options.colId,\n cellEditorMode: options.cellEditorMode,\n cellEditor: options.cellEditor,\n })\n ) {\n return false\n }\n\n if (options.columnCellEditorCache === false) {\n return false\n }\n\n if (\n options.columnCellEditorCache === true ||\n typeof options.columnCellEditorCache === 'string'\n ) {\n return true\n }\n\n return options.enableCellEditorCache\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cellEditorCache-DmICiO9q.js","names":[],"sources":["../src/core/types/indexColumn.ts","../src/core/types/rowSelectionOptions.ts","../src/core/types/selectionColumn.ts","../src/core/types/cellEditorMode.ts","../src/core/types/cellEditorCache.ts"],"sourcesContent":["import type { ColumnDef } from '@types'\r\nimport type { GridHorizontalAlign, GridVerticalAlign } from '@core/types/align'\r\n\r\n/** 系统索引列 colId;用户 columns 不得占用 */\r\nexport const INDEX_COLUMN_ID = '__index__'\r\n\r\n/** 索引列最小(默认)宽度 px */\r\nexport const INDEX_COLUMN_MIN_WIDTH = 40\r\n\r\n/** 索引列默认起始序号(1-based 展示 = rowIndex + start) */\r\nexport const DEFAULT_INDEX_COLUMN_START = 1\r\n\r\n/** 索引列配置 */\r\nexport interface IndexColumnOptions {\r\n /** 表头文案;默认空字符串 */\r\n label?: string\r\n /** 列宽 px;默认 40;小于 40 时钳制为 40 */\r\n width?: number\r\n /** 起始序号(1-based 展示 = rowIndex + start);默认 1 */\r\n start?: number\r\n /**\r\n * 辅助定位模式:single / multiple(multiple 支持 Ctrl/Shift/拖拉范围)\r\n * 默认 multiple(Excel 行号式交互)\r\n */\r\n focusMode?: 'single' | 'multiple'\r\n /**\r\n * 索引列定位是否单向同步到行选择列(业务选中);core 默认 false,MagicGrid 组件层默认 true。\r\n * 仅当 indexColumn.focusMode 与 rowSelection 同为 single 或同为 multiple 时生效。\r\n * 用户在索引列上操作(点击/拖选/再次点击取消)或 API `setIndexFocus`(`mode: 'default'`)时同步;\r\n * 点击其他区域清除索引定位、行删除 / rowId 迁移等不同步行选择列。\r\n */\r\n syncToSelectionColumn?: boolean\r\n /** 表头水平对齐;默认 center */\r\n headerAlign?: GridHorizontalAlign\r\n /** 表头垂直对齐;默认 center */\r\n headerValign?: GridVerticalAlign\r\n /** 表体水平对齐;默认 center */\r\n align?: GridHorizontalAlign\r\n /** 表体垂直对齐;默认 center */\r\n valign?: GridVerticalAlign\r\n /** footer 水平对齐;默认 center */\r\n footerAlign?: GridHorizontalAlign\r\n /** footer 垂直对齐;默认 center */\r\n footerValign?: GridVerticalAlign\r\n /**\r\n * 自定义序号展示;入参为 rowsToDisplay 下标。\r\n * 缺省:(rowIndex) => String(rowIndex + start)\r\n */\r\n index?: (rowIndex: number) => number | string\r\n /**\r\n * 在索引列 cell 内显示行拖拽把柄;默认 false。\r\n * 需配合 Grid `rowDragManaged` 或监听 `rowDragEnd` 自行改序。\r\n */\r\n showRowDragHandle?: boolean\r\n /**\r\n * 索引列底边可拖拽调整行高;默认 false。\r\n * 对标 AG Grid Row Numbers `enableRowResizer`。\r\n */\r\n enableRowResizer?: boolean\r\n}\r\n\r\n/** Grid 级索引列开关与配置(块 0 类型;块 1+ 消费) */\r\nexport interface IndexColumnGridOptions {\r\n /** 是否显示最左侧索引列;默认 false */\r\n showIndexColumn?: boolean\r\n /** 索引列配置;showIndexColumn=true 时生效 */\r\n indexColumn?: IndexColumnOptions\r\n}\r\n\r\nexport interface ResolvedIndexColumnOptions {\r\n label: string\r\n width: number\r\n start: number\r\n focusMode: 'single' | 'multiple'\r\n syncToSelectionColumn: boolean\r\n showRowDragHandle: boolean\r\n enableRowResizer: boolean\r\n headerAlign: GridHorizontalAlign\r\n headerValign: GridVerticalAlign\r\n align: GridHorizontalAlign\r\n valign: GridVerticalAlign\r\n footerAlign: GridHorizontalAlign\r\n footerValign: GridVerticalAlign\r\n index?: (rowIndex: number) => number | string\r\n}\r\n\r\nexport interface ResolvedIndexColumnGridOptions {\r\n showIndexColumn: boolean\r\n indexColumn: ResolvedIndexColumnOptions\r\n}\r\n\r\nexport function resolveIndexColumnWidth(width?: number): number {\r\n return Math.max(INDEX_COLUMN_MIN_WIDTH, width ?? INDEX_COLUMN_MIN_WIDTH)\r\n}\r\n\r\nexport function resolveIndexColumnOptions(\r\n options: IndexColumnOptions = {},\r\n): ResolvedIndexColumnOptions {\r\n return {\r\n label: options.label ?? '',\r\n width: resolveIndexColumnWidth(options.width),\r\n start: options.start ?? DEFAULT_INDEX_COLUMN_START,\r\n focusMode: options.focusMode === 'single' ? 'single' : 'multiple',\r\n syncToSelectionColumn: options.syncToSelectionColumn ?? false,\r\n showRowDragHandle: options.showRowDragHandle ?? false,\r\n enableRowResizer: options.enableRowResizer ?? false,\r\n headerAlign: options.headerAlign ?? 'center',\r\n headerValign: options.headerValign ?? 'center',\r\n align: options.align ?? 'center',\r\n valign: options.valign ?? 'center',\r\n footerAlign: options.footerAlign ?? 'center',\r\n footerValign: options.footerValign ?? 'center',\r\n index: options.index,\r\n }\r\n}\r\n\r\nexport function resolveIndexColumnGridOptions(\r\n options: IndexColumnGridOptions = {},\r\n): ResolvedIndexColumnGridOptions {\r\n return {\r\n showIndexColumn: options.showIndexColumn ?? false,\r\n indexColumn: resolveIndexColumnOptions(options.indexColumn),\r\n }\r\n}\r\n\r\nexport function isIndexColumn(colId: string): boolean {\r\n return colId === INDEX_COLUMN_ID\r\n}\r\n\r\n/** `setIndexFocus` 同步策略:default 跟随 grid 配置;manual 由调用方显式控制 */\r\nexport type SetIndexFocusMode = 'default' | 'manual'\r\n\r\n/** `GridApi.setIndexFocus` 可选参数 */\r\nexport interface SetIndexFocusOptions {\r\n /**\r\n * - `default`(默认):与用户点击索引列一致,按 `indexColumn.syncToSelectionColumn` 决定是否同步\r\n * - `manual`:由 `syncToSelectionColumn` 显式控制,可覆盖 grid 配置\r\n */\r\n mode?: SetIndexFocusMode\r\n /** `mode: 'manual'` 时生效;省略时视为 `false` */\r\n syncToSelectionColumn?: boolean\r\n}\r\n\r\nexport function resolveColumnDefColId(column: ColumnDef, index: number): string {\r\n return column.key ?? column.prop ?? `col_${index}`\r\n}\r\n\r\n/** 开发模式:用户 columns 占用系统索引列 colId 时告警 */\r\nexport function warnIfUserColumnsConflictWithIndexColumn(\r\n columns: readonly ColumnDef[],\r\n): void {\r\n if (!import.meta.env.DEV) {\r\n return\r\n }\r\n\r\n columns.forEach((column, index) => {\r\n const colId = resolveColumnDefColId(column, index)\r\n if (colId === INDEX_COLUMN_ID || column.key === INDEX_COLUMN_ID) {\r\n console.warn(\r\n `[magic-grid] Column \"${INDEX_COLUMN_ID}\" is reserved for the system index column. ` +\r\n 'Remove it from your columns definition or use showIndexColumn instead.',\r\n )\r\n }\r\n })\r\n}\r\n","export type RowSelectionMode = 'single' | 'multiple'\n\n/** 行选择配置(Phase 19 · groupSelectsChildren) */\nexport interface RowSelectionConfig {\n mode: RowSelectionMode\n /**\n * tree 模式下选中父节点是否级联选中子孙。默认 `true`。\n * 对标 AG Grid rowSelection.groupSelectsChildren。\n */\n groupSelectsChildren?: boolean\n}\n\nexport type RowSelectionInput =\n | RowSelectionMode\n | false\n | RowSelectionConfig\n\nexport interface ResolvedRowSelectionOptions {\n mode: RowSelectionMode | false\n groupSelectsChildren: boolean\n}\n\nexport function normalizeRowSelectionInput(\n input: RowSelectionInput | undefined,\n): ResolvedRowSelectionOptions {\n if (input === false) {\n return { mode: false, groupSelectsChildren: true }\n }\n\n if (input == null) {\n return { mode: 'single', groupSelectsChildren: true }\n }\n\n if (typeof input === 'string') {\n return {\n mode: input === 'multiple' ? 'multiple' : 'single',\n groupSelectsChildren: true,\n }\n }\n\n return {\n mode: input.mode === 'multiple' ? 'multiple' : 'single',\n groupSelectsChildren: input.groupSelectsChildren ?? true,\n }\n}\n\nexport function normalizeRowSelectionMode(\n resolved: ResolvedRowSelectionOptions,\n): RowSelectionMode | false {\n return resolved.mode\n}\n","import type { RowSelectionMode } from '@core/selection/selectionService'\r\nimport {\r\n normalizeRowSelectionInput,\r\n type RowSelectionInput,\r\n} from '@core/types/rowSelectionOptions'\r\n\r\nimport { resolveColumnDefColId } from './indexColumn'\r\nimport type { GridHorizontalAlign, GridVerticalAlign } from '@core/types/align'\r\nimport type { ColumnDef } from '@types'\r\n\r\n/** 系统行选择列 colId;用户 columns 不得占用 */\r\nexport const SELECTION_COLUMN_ID = '__select__'\r\n\r\n/** 行选择列最小宽度 px */\r\nexport const SELECTION_COLUMN_MIN_WIDTH = 40\r\n\r\n/** 行选择列默认宽度 px */\r\nexport const SELECTION_COLUMN_DEFAULT_WIDTH = 40\r\n\r\n/** 表头全选 checkbox 默认 aria-label */\r\nexport const DEFAULT_SELECTION_SELECT_ALL_LABEL = '全选'\r\n\r\n/** 行选择列配置 */\r\nexport interface SelectionColumnOptions {\r\n /** 列宽 px;默认 40;小于 40 时钳制为 40 */\r\n width?: number\r\n /** 表头全选 checkbox 的 aria-label;默认「全选」 */\r\n selectAllLabel?: string\r\n /** 行 checkbox 的 aria-label 工厂 */\r\n rowLabel?: (rowIndex: number) => string\r\n /** 表头水平对齐;默认 center */\r\n headerAlign?: GridHorizontalAlign\r\n /** 表头垂直对齐;默认 center */\r\n headerValign?: GridVerticalAlign\r\n /** 表体水平对齐;默认 center */\r\n align?: GridHorizontalAlign\r\n /** 表体垂直对齐;默认 center */\r\n valign?: GridVerticalAlign\r\n /** footer 水平对齐;默认 center */\r\n footerAlign?: GridHorizontalAlign\r\n /** footer 垂直对齐;默认 center */\r\n footerValign?: GridVerticalAlign\r\n}\r\n\r\n/** Grid 级行选择列配置(块 0 类型;块 1+ 消费) */\r\nexport interface SelectionColumnGridOptions {\r\n /** 行选择列配置;rowSelection !== false 时生效 */\r\n selectionColumn?: SelectionColumnOptions\r\n}\r\n\r\nexport interface ResolvedSelectionColumnOptions {\r\n width: number\r\n selectAllLabel: string\r\n rowLabel?: (rowIndex: number) => string\r\n headerAlign: GridHorizontalAlign\r\n headerValign: GridVerticalAlign\r\n align: GridHorizontalAlign\r\n valign: GridVerticalAlign\r\n footerAlign: GridHorizontalAlign\r\n footerValign: GridVerticalAlign\r\n}\r\n\r\nexport interface ResolvedSelectionColumnGridOptions {\r\n /** rowSelection !== false */\r\n enabled: boolean\r\n /** 行选模式;enabled=false 时为占位 single */\r\n mode: RowSelectionMode\r\n selectionColumn: ResolvedSelectionColumnOptions\r\n}\r\n\r\nexport function resolveSelectionColumnWidth(width?: number): number {\r\n return Math.max(SELECTION_COLUMN_MIN_WIDTH, width ?? SELECTION_COLUMN_DEFAULT_WIDTH)\r\n}\r\n\r\nexport function resolveSelectionColumnOptions(\r\n options: SelectionColumnOptions = {},\r\n): ResolvedSelectionColumnOptions {\r\n return {\r\n width: resolveSelectionColumnWidth(options.width),\r\n selectAllLabel: options.selectAllLabel ?? DEFAULT_SELECTION_SELECT_ALL_LABEL,\r\n rowLabel: options.rowLabel,\r\n headerAlign: options.headerAlign ?? 'center',\r\n headerValign: options.headerValign ?? 'center',\r\n align: options.align ?? 'center',\r\n valign: options.valign ?? 'center',\r\n footerAlign: options.footerAlign ?? 'center',\r\n footerValign: options.footerValign ?? 'center',\r\n }\r\n}\r\n\r\nexport function resolveSelectionColumnGridOptions(\r\n options: {\r\n rowSelection?: RowSelectionInput\r\n selectionColumn?: SelectionColumnOptions\r\n } = {},\r\n): ResolvedSelectionColumnGridOptions {\r\n // Grid 直建时缺省 rowSelection 仍不注入行选择列;MagicGrid 默认传 'single'。\r\n if (options.rowSelection == null) {\r\n return {\r\n enabled: false,\r\n mode: 'single',\r\n selectionColumn: resolveSelectionColumnOptions(options.selectionColumn),\r\n }\r\n }\r\n\r\n const resolved = normalizeRowSelectionInput(options.rowSelection)\r\n const enabled = resolved.mode !== false\r\n\r\n return {\r\n enabled,\r\n mode: enabled && resolved.mode !== false ? resolved.mode : 'single',\r\n selectionColumn: resolveSelectionColumnOptions(options.selectionColumn),\r\n }\r\n}\r\n\r\nexport function isSelectionColumn(colId: string): boolean {\r\n return colId === SELECTION_COLUMN_ID\r\n}\r\n\r\n/** 开发模式:用户 columns 占用系统行选择列 colId 时告警 */\r\nexport function warnIfUserColumnsConflictWithSelectionColumn(\r\n columns: readonly ColumnDef[],\r\n): void {\r\n if (!import.meta.env.DEV) {\r\n return\r\n }\r\n\r\n columns.forEach((column, index) => {\r\n const colId = resolveColumnDefColId(column, index)\r\n if (colId === SELECTION_COLUMN_ID || column.key === SELECTION_COLUMN_ID) {\r\n console.warn(\r\n `[magic-grid] Column \"${SELECTION_COLUMN_ID}\" is reserved for the system row selection column. ` +\r\n 'Remove it from your columns definition; use rowSelection instead.',\r\n )\r\n }\r\n })\r\n}\r\n","import { isIndexColumn } from '@core/types/indexColumn'\r\nimport { isSelectionColumn } from '@core/types/selectionColumn'\r\nimport { isBuiltInCellEditor } from '@core/types/cellEditor'\r\n\r\n/** 单元格编辑器呈现模式:overlay 进入编辑态;inline 常驻格内 */\r\nexport type CellEditorMode = 'overlay' | 'inline'\r\n\r\n/** 缺省 overlay,与 Phase 3 行为一致 */\r\nexport const DEFAULT_CELL_EDITOR_MODE: CellEditorMode = 'overlay'\r\n\r\n/** 解析列级 cellEditorMode;缺省 overlay */\r\nexport function resolveCellEditorMode(mode?: CellEditorMode): CellEditorMode {\r\n if (mode === 'inline') {\r\n return 'inline'\r\n }\r\n return DEFAULT_CELL_EDITOR_MODE\r\n}\r\n\r\n/** 系统列强制 overlay;用户列解析 cellEditorMode */\r\nexport function resolveColumnCellEditorMode(\r\n colId: string,\r\n mode?: CellEditorMode,\r\n): CellEditorMode {\r\n if (isIndexColumn(colId) || isSelectionColumn(colId)) {\r\n return DEFAULT_CELL_EDITOR_MODE\r\n }\r\n return resolveCellEditorMode(mode)\r\n}\r\n\r\n/** 是否为 inline 常驻编辑器列(须配置 cellEditor;系统列恒 false) */\r\nexport function isInlineEditorColumn(column: {\r\n colId: string\r\n cellEditorMode?: CellEditorMode\r\n cellEditor?: unknown\r\n}): boolean {\r\n if (isIndexColumn(column.colId) || isSelectionColumn(column.colId)) {\r\n return false\r\n }\r\n\r\n if (resolveCellEditorMode(column.cellEditorMode) !== 'inline') {\r\n return false\r\n }\r\n\r\n return column.cellEditor != null\r\n}\r\n\r\n/** 开发模式:inline 误配告警 */\r\nexport function warnIfInlineEditorMisconfigured(\r\n colId: string,\r\n options: {\r\n cellEditorMode?: CellEditorMode\r\n cellEditor?: unknown\r\n },\r\n): void {\r\n if (!import.meta.env.DEV) {\r\n return\r\n }\r\n\r\n const isSystem = isIndexColumn(colId) || isSelectionColumn(colId)\r\n\r\n if (isSystem && options.cellEditorMode === 'inline') {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" is a system column and cannot use cellEditorMode: 'inline'. ` +\r\n 'Inline editors apply to user data columns only.',\r\n )\r\n return\r\n }\r\n\r\n if (options.cellEditorMode === 'inline' && options.cellEditor == null) {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" has cellEditorMode: 'inline' but no cellEditor. ` +\r\n 'Configure cellEditor (e.g. \"checkbox\") or remove inline mode.',\r\n )\r\n }\r\n}\r\n\r\nconst INLINE_NATIVE_EDITORS = new Set(['text', 'number', 'checkbox', 'switch'])\r\n\r\n/** 开发模式:inline 列使用可能依赖 overlay/teleport 的编辑器时告警 */\r\nexport function warnIfInlineOverlayEditor(\r\n colId: string,\r\n options: {\r\n cellEditorMode?: CellEditorMode\r\n cellEditor?: unknown\r\n },\r\n): void {\r\n if (!import.meta.env.DEV || options.cellEditorMode !== 'inline') {\r\n return\r\n }\r\n\r\n const editor = options.cellEditor\r\n if (editor == null) {\r\n return\r\n }\r\n\r\n if (typeof editor === 'function') {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" uses cellEditorMode: 'inline' with a custom editor function. ` +\r\n 'Inline editors must not use overlay/teleport; prefer checkbox, switch, text, or number.',\r\n )\r\n return\r\n }\r\n\r\n if (typeof editor === 'string' && !INLINE_NATIVE_EDITORS.has(editor) && !isBuiltInCellEditor(editor)) {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" uses cellEditorMode: 'inline' with editor \"${editor}\" ` +\r\n 'which may require an overlay surface. Prefer \"checkbox\", \"switch\", \"text\", or \"number\" for inline columns.',\r\n )\r\n }\r\n}\r\n","/**\n * Cell Editor Cache — 类型与纯函数(Phase 42 / M35)\n *\n * 职责:Grid/列 opt-in 开关解析、存储键规则、是否向 overlay 列注入 API。\n * 可变状态与 LRU 在 {@link CellEditorCacheService}(`cellEditorCacheService.ts`)。\n *\n * 存储键:`${rowPart}::${colId}::${resolvedKey}`\n * - rowPart:业务 rowId 字符串;transient 行为 `\\0${internalRowId}`\n * - resolvedKey:消费方 key + 可选列级 namespace 前缀\n */\nimport type { BusinessRowId } from '@core/types/businessRowId'\nimport type { CellEditorMode } from '@core/types/cellEditorMode'\nimport { isInlineEditorColumn } from '@core/types/cellEditorMode'\n\n/** 消费方未传 key 且列无 string namespace 时的默认 slot */\nexport const DEFAULT_CELL_EDITOR_CACHE_KEY = 'default'\n\n/** 列级 flag:`true` 启用 · `string` 固定 namespace · `false` 全局开启时 opt-out */\nexport type CellEditorCacheColumnFlag = boolean | string\n\n/** Grid 级配置(MagicGrid `enableCellEditorCache` / `cellEditorCacheMaxEntries`) */\nexport interface CellEditorCacheGridOptions {\n /**\n * 为所有 overlay 列注入 get/set/clear API。\n * 默认 false(零开销);列级 `cellEditorCache: false` 可显式 opt-out。\n */\n enableCellEditorCache?: boolean\n\n /**\n * 会话 cache 最大 **cell bucket** 数 `(rowId,colId)`;超出 LRU 淘汰。\n * 默认不限。\n */\n cellEditorCacheMaxEntries?: number\n}\n\nexport interface ResolvedCellEditorCacheGridOptions {\n enableCellEditorCache: boolean\n cellEditorCacheMaxEntries: number | undefined\n}\n\nexport function resolveCellEditorCacheGridOptions(\n options: CellEditorCacheGridOptions = {},\n): ResolvedCellEditorCacheGridOptions {\n const maxEntries = options.cellEditorCacheMaxEntries\n return {\n enableCellEditorCache: options.enableCellEditorCache ?? false,\n cellEditorCacheMaxEntries:\n maxEntries != null && Number.isFinite(maxEntries) && maxEntries > 0\n ? Math.floor(maxEntries)\n : undefined,\n }\n}\n\n/**\n * 存储键 rowId 段。\n * transient 行业务 id 为 null,须传 internalRowId 以免多行新增互相覆盖。\n */\nexport function buildCellEditorCacheRowPart(\n rowId: BusinessRowId,\n internalRowId?: string,\n): string {\n if (rowId !== null) {\n return String(rowId)\n }\n if (internalRowId) {\n return `\\0${internalRowId}`\n }\n return '\\0transient'\n}\n\n/** 完整 Map 键:`rowPart::colId::key` */\nexport function buildCellEditorCacheStorageKey(\n rowId: BusinessRowId,\n colId: string,\n key: string = DEFAULT_CELL_EDITOR_CACHE_KEY,\n options?: { internalRowId?: string },\n): string {\n const rowPart = buildCellEditorCacheRowPart(rowId, options?.internalRowId)\n return `${rowPart}::${colId}::${key}`\n}\n\n/** LRU 粒度:同一格 `(rowId,colId)` 下所有 namespace key 共用一个 bucket */\nexport function buildCellEditorCacheBucketKey(\n rowId: BusinessRowId,\n colId: string,\n options?: { internalRowId?: string },\n): string {\n const rowPart = buildCellEditorCacheRowPart(rowId, options?.internalRowId)\n return `${rowPart}::${colId}`\n}\n\nexport interface ResolveCellEditorCacheKeyOptions {\n userKey?: string\n columnCellEditorCache?: CellEditorCacheColumnFlag\n}\n\n/**\n * 消费方 key → 存储层 key。\n * 列级 `cellEditorCache: 'part'` 时:`getCellCache()` → `part`;`getCellCache('options')` → `part::options`。\n */\nexport function resolveCellEditorCacheKey(\n options: ResolveCellEditorCacheKeyOptions = {},\n): string {\n const { userKey, columnCellEditorCache } = options\n const namespace =\n typeof columnCellEditorCache === 'string' ? columnCellEditorCache : undefined\n\n if (userKey != null && userKey !== '') {\n return namespace ? `${namespace}::${userKey}` : userKey\n }\n\n if (namespace) {\n return namespace\n }\n\n return DEFAULT_CELL_EDITOR_CACHE_KEY\n}\n\nexport interface ShouldInjectCellEditorCacheApiOptions {\n enableCellEditorCache: boolean\n colId: string\n cellEditorMode?: CellEditorMode\n cellEditor?: unknown\n columnCellEditorCache?: CellEditorCacheColumnFlag\n}\n\n/** inline 列、列级 false、或未开启全局开关 → 不注入(CellEditorParams 上无 cache 方法) */\nexport function shouldInjectCellEditorCacheApi(\n options: ShouldInjectCellEditorCacheApiOptions,\n): boolean {\n if (\n isInlineEditorColumn({\n colId: options.colId,\n cellEditorMode: options.cellEditorMode,\n cellEditor: options.cellEditor,\n })\n ) {\n return false\n }\n\n if (options.columnCellEditorCache === false) {\n return false\n }\n\n if (\n options.columnCellEditorCache === true ||\n typeof options.columnCellEditorCache === 'string'\n ) {\n return true\n }\n\n return options.enableCellEditorCache\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cellEditorCache-ymzG_TG0.cjs","names":[],"sources":["../src/core/types/indexColumn.ts","../src/core/types/rowSelectionOptions.ts","../src/core/types/selectionColumn.ts","../src/core/types/cellEditorMode.ts","../src/core/types/cellEditorCache.ts"],"sourcesContent":["import type { ColumnDef } from '@types'\r\nimport type { GridHorizontalAlign, GridVerticalAlign } from '@core/types/align'\r\n\r\n/** 系统索引列 colId;用户 columns 不得占用 */\r\nexport const INDEX_COLUMN_ID = '__index__'\r\n\r\n/** 索引列最小(默认)宽度 px */\r\nexport const INDEX_COLUMN_MIN_WIDTH = 40\r\n\r\n/** 索引列默认起始序号(1-based 展示 = rowIndex + start) */\r\nexport const DEFAULT_INDEX_COLUMN_START = 1\r\n\r\n/** 索引列配置 */\r\nexport interface IndexColumnOptions {\r\n /** 表头文案;默认空字符串 */\r\n label?: string\r\n /** 列宽 px;默认 40;小于 40 时钳制为 40 */\r\n width?: number\r\n /** 起始序号(1-based 展示 = rowIndex + start);默认 1 */\r\n start?: number\r\n /**\r\n * 辅助定位模式:single / multiple(multiple 支持 Ctrl/Shift/拖拉范围)\r\n * 默认 multiple(Excel 行号式交互)\r\n */\r\n focusMode?: 'single' | 'multiple'\r\n /**\r\n * 索引列定位是否单向同步到行选择列(业务选中);core 默认 false,MagicGrid 组件层默认 true。\r\n * 仅当 indexColumn.focusMode 与 rowSelection 同为 single 或同为 multiple 时生效。\r\n * 仅用户在索引列上操作(点击/拖选/再次点击取消)时同步;点击其他区域清除索引定位不同步行选择列。\r\n */\r\n syncToSelectionColumn?: boolean\r\n /** 表头水平对齐;默认 center */\r\n headerAlign?: GridHorizontalAlign\r\n /** 表头垂直对齐;默认 center */\r\n headerValign?: GridVerticalAlign\r\n /** 表体水平对齐;默认 center */\r\n align?: GridHorizontalAlign\r\n /** 表体垂直对齐;默认 center */\r\n valign?: GridVerticalAlign\r\n /** footer 水平对齐;默认 center */\r\n footerAlign?: GridHorizontalAlign\r\n /** footer 垂直对齐;默认 center */\r\n footerValign?: GridVerticalAlign\r\n /**\r\n * 自定义序号展示;入参为 rowsToDisplay 下标。\r\n * 缺省:(rowIndex) => String(rowIndex + start)\r\n */\r\n index?: (rowIndex: number) => number | string\r\n /**\r\n * 在索引列 cell 内显示行拖拽把柄;默认 false。\r\n * 需配合 Grid `rowDragManaged` 或监听 `rowDragEnd` 自行改序。\r\n */\r\n showRowDragHandle?: boolean\r\n /**\r\n * 索引列底边可拖拽调整行高;默认 false。\r\n * 对标 AG Grid Row Numbers `enableRowResizer`。\r\n */\r\n enableRowResizer?: boolean\r\n}\r\n\r\n/** Grid 级索引列开关与配置(块 0 类型;块 1+ 消费) */\r\nexport interface IndexColumnGridOptions {\r\n /** 是否显示最左侧索引列;默认 false */\r\n showIndexColumn?: boolean\r\n /** 索引列配置;showIndexColumn=true 时生效 */\r\n indexColumn?: IndexColumnOptions\r\n}\r\n\r\nexport interface ResolvedIndexColumnOptions {\r\n label: string\r\n width: number\r\n start: number\r\n focusMode: 'single' | 'multiple'\r\n syncToSelectionColumn: boolean\r\n showRowDragHandle: boolean\r\n enableRowResizer: boolean\r\n headerAlign: GridHorizontalAlign\r\n headerValign: GridVerticalAlign\r\n align: GridHorizontalAlign\r\n valign: GridVerticalAlign\r\n footerAlign: GridHorizontalAlign\r\n footerValign: GridVerticalAlign\r\n index?: (rowIndex: number) => number | string\r\n}\r\n\r\nexport interface ResolvedIndexColumnGridOptions {\r\n showIndexColumn: boolean\r\n indexColumn: ResolvedIndexColumnOptions\r\n}\r\n\r\nexport function resolveIndexColumnWidth(width?: number): number {\r\n return Math.max(INDEX_COLUMN_MIN_WIDTH, width ?? INDEX_COLUMN_MIN_WIDTH)\r\n}\r\n\r\nexport function resolveIndexColumnOptions(\r\n options: IndexColumnOptions = {},\r\n): ResolvedIndexColumnOptions {\r\n return {\r\n label: options.label ?? '',\r\n width: resolveIndexColumnWidth(options.width),\r\n start: options.start ?? DEFAULT_INDEX_COLUMN_START,\r\n focusMode: options.focusMode === 'single' ? 'single' : 'multiple',\r\n syncToSelectionColumn: options.syncToSelectionColumn ?? false,\r\n showRowDragHandle: options.showRowDragHandle ?? false,\r\n enableRowResizer: options.enableRowResizer ?? false,\r\n headerAlign: options.headerAlign ?? 'center',\r\n headerValign: options.headerValign ?? 'center',\r\n align: options.align ?? 'center',\r\n valign: options.valign ?? 'center',\r\n footerAlign: options.footerAlign ?? 'center',\r\n footerValign: options.footerValign ?? 'center',\r\n index: options.index,\r\n }\r\n}\r\n\r\nexport function resolveIndexColumnGridOptions(\r\n options: IndexColumnGridOptions = {},\r\n): ResolvedIndexColumnGridOptions {\r\n return {\r\n showIndexColumn: options.showIndexColumn ?? false,\r\n indexColumn: resolveIndexColumnOptions(options.indexColumn),\r\n }\r\n}\r\n\r\nexport function isIndexColumn(colId: string): boolean {\r\n return colId === INDEX_COLUMN_ID\r\n}\r\n\r\nexport function resolveColumnDefColId(column: ColumnDef, index: number): string {\r\n return column.key ?? column.prop ?? `col_${index}`\r\n}\r\n\r\n/** 开发模式:用户 columns 占用系统索引列 colId 时告警 */\r\nexport function warnIfUserColumnsConflictWithIndexColumn(\r\n columns: readonly ColumnDef[],\r\n): void {\r\n if (!import.meta.env.DEV) {\r\n return\r\n }\r\n\r\n columns.forEach((column, index) => {\r\n const colId = resolveColumnDefColId(column, index)\r\n if (colId === INDEX_COLUMN_ID || column.key === INDEX_COLUMN_ID) {\r\n console.warn(\r\n `[magic-grid] Column \"${INDEX_COLUMN_ID}\" is reserved for the system index column. ` +\r\n 'Remove it from your columns definition or use showIndexColumn instead.',\r\n )\r\n }\r\n })\r\n}\r\n","export type RowSelectionMode = 'single' | 'multiple'\n\n/** 行选择配置(Phase 19 · groupSelectsChildren) */\nexport interface RowSelectionConfig {\n mode: RowSelectionMode\n /**\n * tree 模式下选中父节点是否级联选中子孙。默认 `true`。\n * 对标 AG Grid rowSelection.groupSelectsChildren。\n */\n groupSelectsChildren?: boolean\n}\n\nexport type RowSelectionInput =\n | RowSelectionMode\n | false\n | RowSelectionConfig\n\nexport interface ResolvedRowSelectionOptions {\n mode: RowSelectionMode | false\n groupSelectsChildren: boolean\n}\n\nexport function normalizeRowSelectionInput(\n input: RowSelectionInput | undefined,\n): ResolvedRowSelectionOptions {\n if (input === false) {\n return { mode: false, groupSelectsChildren: true }\n }\n\n if (input == null) {\n return { mode: 'single', groupSelectsChildren: true }\n }\n\n if (typeof input === 'string') {\n return {\n mode: input === 'multiple' ? 'multiple' : 'single',\n groupSelectsChildren: true,\n }\n }\n\n return {\n mode: input.mode === 'multiple' ? 'multiple' : 'single',\n groupSelectsChildren: input.groupSelectsChildren ?? true,\n }\n}\n\nexport function normalizeRowSelectionMode(\n resolved: ResolvedRowSelectionOptions,\n): RowSelectionMode | false {\n return resolved.mode\n}\n","import type { RowSelectionMode } from '@core/selection/selectionService'\r\nimport {\r\n normalizeRowSelectionInput,\r\n type RowSelectionInput,\r\n} from '@core/types/rowSelectionOptions'\r\n\r\nimport { resolveColumnDefColId } from './indexColumn'\r\nimport type { GridHorizontalAlign, GridVerticalAlign } from '@core/types/align'\r\nimport type { ColumnDef } from '@types'\r\n\r\n/** 系统行选择列 colId;用户 columns 不得占用 */\r\nexport const SELECTION_COLUMN_ID = '__select__'\r\n\r\n/** 行选择列最小宽度 px */\r\nexport const SELECTION_COLUMN_MIN_WIDTH = 40\r\n\r\n/** 行选择列默认宽度 px */\r\nexport const SELECTION_COLUMN_DEFAULT_WIDTH = 40\r\n\r\n/** 表头全选 checkbox 默认 aria-label */\r\nexport const DEFAULT_SELECTION_SELECT_ALL_LABEL = '全选'\r\n\r\n/** 行选择列配置 */\r\nexport interface SelectionColumnOptions {\r\n /** 列宽 px;默认 40;小于 40 时钳制为 40 */\r\n width?: number\r\n /** 表头全选 checkbox 的 aria-label;默认「全选」 */\r\n selectAllLabel?: string\r\n /** 行 checkbox 的 aria-label 工厂 */\r\n rowLabel?: (rowIndex: number) => string\r\n /** 表头水平对齐;默认 center */\r\n headerAlign?: GridHorizontalAlign\r\n /** 表头垂直对齐;默认 center */\r\n headerValign?: GridVerticalAlign\r\n /** 表体水平对齐;默认 center */\r\n align?: GridHorizontalAlign\r\n /** 表体垂直对齐;默认 center */\r\n valign?: GridVerticalAlign\r\n /** footer 水平对齐;默认 center */\r\n footerAlign?: GridHorizontalAlign\r\n /** footer 垂直对齐;默认 center */\r\n footerValign?: GridVerticalAlign\r\n}\r\n\r\n/** Grid 级行选择列配置(块 0 类型;块 1+ 消费) */\r\nexport interface SelectionColumnGridOptions {\r\n /** 行选择列配置;rowSelection !== false 时生效 */\r\n selectionColumn?: SelectionColumnOptions\r\n}\r\n\r\nexport interface ResolvedSelectionColumnOptions {\r\n width: number\r\n selectAllLabel: string\r\n rowLabel?: (rowIndex: number) => string\r\n headerAlign: GridHorizontalAlign\r\n headerValign: GridVerticalAlign\r\n align: GridHorizontalAlign\r\n valign: GridVerticalAlign\r\n footerAlign: GridHorizontalAlign\r\n footerValign: GridVerticalAlign\r\n}\r\n\r\nexport interface ResolvedSelectionColumnGridOptions {\r\n /** rowSelection !== false */\r\n enabled: boolean\r\n /** 行选模式;enabled=false 时为占位 single */\r\n mode: RowSelectionMode\r\n selectionColumn: ResolvedSelectionColumnOptions\r\n}\r\n\r\nexport function resolveSelectionColumnWidth(width?: number): number {\r\n return Math.max(SELECTION_COLUMN_MIN_WIDTH, width ?? SELECTION_COLUMN_DEFAULT_WIDTH)\r\n}\r\n\r\nexport function resolveSelectionColumnOptions(\r\n options: SelectionColumnOptions = {},\r\n): ResolvedSelectionColumnOptions {\r\n return {\r\n width: resolveSelectionColumnWidth(options.width),\r\n selectAllLabel: options.selectAllLabel ?? DEFAULT_SELECTION_SELECT_ALL_LABEL,\r\n rowLabel: options.rowLabel,\r\n headerAlign: options.headerAlign ?? 'center',\r\n headerValign: options.headerValign ?? 'center',\r\n align: options.align ?? 'center',\r\n valign: options.valign ?? 'center',\r\n footerAlign: options.footerAlign ?? 'center',\r\n footerValign: options.footerValign ?? 'center',\r\n }\r\n}\r\n\r\nexport function resolveSelectionColumnGridOptions(\r\n options: {\r\n rowSelection?: RowSelectionInput\r\n selectionColumn?: SelectionColumnOptions\r\n } = {},\r\n): ResolvedSelectionColumnGridOptions {\r\n // Grid 直建时缺省 rowSelection 仍不注入行选择列;MagicGrid 默认传 'single'。\r\n if (options.rowSelection == null) {\r\n return {\r\n enabled: false,\r\n mode: 'single',\r\n selectionColumn: resolveSelectionColumnOptions(options.selectionColumn),\r\n }\r\n }\r\n\r\n const resolved = normalizeRowSelectionInput(options.rowSelection)\r\n const enabled = resolved.mode !== false\r\n\r\n return {\r\n enabled,\r\n mode: enabled && resolved.mode !== false ? resolved.mode : 'single',\r\n selectionColumn: resolveSelectionColumnOptions(options.selectionColumn),\r\n }\r\n}\r\n\r\nexport function isSelectionColumn(colId: string): boolean {\r\n return colId === SELECTION_COLUMN_ID\r\n}\r\n\r\n/** 开发模式:用户 columns 占用系统行选择列 colId 时告警 */\r\nexport function warnIfUserColumnsConflictWithSelectionColumn(\r\n columns: readonly ColumnDef[],\r\n): void {\r\n if (!import.meta.env.DEV) {\r\n return\r\n }\r\n\r\n columns.forEach((column, index) => {\r\n const colId = resolveColumnDefColId(column, index)\r\n if (colId === SELECTION_COLUMN_ID || column.key === SELECTION_COLUMN_ID) {\r\n console.warn(\r\n `[magic-grid] Column \"${SELECTION_COLUMN_ID}\" is reserved for the system row selection column. ` +\r\n 'Remove it from your columns definition; use rowSelection instead.',\r\n )\r\n }\r\n })\r\n}\r\n","import { isIndexColumn } from '@core/types/indexColumn'\r\nimport { isSelectionColumn } from '@core/types/selectionColumn'\r\nimport { isBuiltInCellEditor } from '@core/types/cellEditor'\r\n\r\n/** 单元格编辑器呈现模式:overlay 进入编辑态;inline 常驻格内 */\r\nexport type CellEditorMode = 'overlay' | 'inline'\r\n\r\n/** 缺省 overlay,与 Phase 3 行为一致 */\r\nexport const DEFAULT_CELL_EDITOR_MODE: CellEditorMode = 'overlay'\r\n\r\n/** 解析列级 cellEditorMode;缺省 overlay */\r\nexport function resolveCellEditorMode(mode?: CellEditorMode): CellEditorMode {\r\n if (mode === 'inline') {\r\n return 'inline'\r\n }\r\n return DEFAULT_CELL_EDITOR_MODE\r\n}\r\n\r\n/** 系统列强制 overlay;用户列解析 cellEditorMode */\r\nexport function resolveColumnCellEditorMode(\r\n colId: string,\r\n mode?: CellEditorMode,\r\n): CellEditorMode {\r\n if (isIndexColumn(colId) || isSelectionColumn(colId)) {\r\n return DEFAULT_CELL_EDITOR_MODE\r\n }\r\n return resolveCellEditorMode(mode)\r\n}\r\n\r\n/** 是否为 inline 常驻编辑器列(须配置 cellEditor;系统列恒 false) */\r\nexport function isInlineEditorColumn(column: {\r\n colId: string\r\n cellEditorMode?: CellEditorMode\r\n cellEditor?: unknown\r\n}): boolean {\r\n if (isIndexColumn(column.colId) || isSelectionColumn(column.colId)) {\r\n return false\r\n }\r\n\r\n if (resolveCellEditorMode(column.cellEditorMode) !== 'inline') {\r\n return false\r\n }\r\n\r\n return column.cellEditor != null\r\n}\r\n\r\n/** 开发模式:inline 误配告警 */\r\nexport function warnIfInlineEditorMisconfigured(\r\n colId: string,\r\n options: {\r\n cellEditorMode?: CellEditorMode\r\n cellEditor?: unknown\r\n },\r\n): void {\r\n if (!import.meta.env.DEV) {\r\n return\r\n }\r\n\r\n const isSystem = isIndexColumn(colId) || isSelectionColumn(colId)\r\n\r\n if (isSystem && options.cellEditorMode === 'inline') {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" is a system column and cannot use cellEditorMode: 'inline'. ` +\r\n 'Inline editors apply to user data columns only.',\r\n )\r\n return\r\n }\r\n\r\n if (options.cellEditorMode === 'inline' && options.cellEditor == null) {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" has cellEditorMode: 'inline' but no cellEditor. ` +\r\n 'Configure cellEditor (e.g. \"checkbox\") or remove inline mode.',\r\n )\r\n }\r\n}\r\n\r\nconst INLINE_NATIVE_EDITORS = new Set(['text', 'number', 'checkbox', 'switch'])\r\n\r\n/** 开发模式:inline 列使用可能依赖 overlay/teleport 的编辑器时告警 */\r\nexport function warnIfInlineOverlayEditor(\r\n colId: string,\r\n options: {\r\n cellEditorMode?: CellEditorMode\r\n cellEditor?: unknown\r\n },\r\n): void {\r\n if (!import.meta.env.DEV || options.cellEditorMode !== 'inline') {\r\n return\r\n }\r\n\r\n const editor = options.cellEditor\r\n if (editor == null) {\r\n return\r\n }\r\n\r\n if (typeof editor === 'function') {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" uses cellEditorMode: 'inline' with a custom editor function. ` +\r\n 'Inline editors must not use overlay/teleport; prefer checkbox, switch, text, or number.',\r\n )\r\n return\r\n }\r\n\r\n if (typeof editor === 'string' && !INLINE_NATIVE_EDITORS.has(editor) && !isBuiltInCellEditor(editor)) {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" uses cellEditorMode: 'inline' with editor \"${editor}\" ` +\r\n 'which may require an overlay surface. Prefer \"checkbox\", \"switch\", \"text\", or \"number\" for inline columns.',\r\n )\r\n }\r\n}\r\n","/**\n * Cell Editor Cache — 类型与纯函数(Phase 42 / M35)\n *\n * 职责:Grid/列 opt-in 开关解析、存储键规则、是否向 overlay 列注入 API。\n * 可变状态与 LRU 在 {@link CellEditorCacheService}(`cellEditorCacheService.ts`)。\n *\n * 存储键:`${rowPart}::${colId}::${resolvedKey}`\n * - rowPart:业务 rowId 字符串;transient 行为 `\\0${internalRowId}`\n * - resolvedKey:消费方 key + 可选列级 namespace 前缀\n */\nimport type { BusinessRowId } from '@core/types/businessRowId'\nimport type { CellEditorMode } from '@core/types/cellEditorMode'\nimport { isInlineEditorColumn } from '@core/types/cellEditorMode'\n\n/** 消费方未传 key 且列无 string namespace 时的默认 slot */\nexport const DEFAULT_CELL_EDITOR_CACHE_KEY = 'default'\n\n/** 列级 flag:`true` 启用 · `string` 固定 namespace · `false` 全局开启时 opt-out */\nexport type CellEditorCacheColumnFlag = boolean | string\n\n/** Grid 级配置(MagicGrid `enableCellEditorCache` / `cellEditorCacheMaxEntries`) */\nexport interface CellEditorCacheGridOptions {\n /**\n * 为所有 overlay 列注入 get/set/clear API。\n * 默认 false(零开销);列级 `cellEditorCache: false` 可显式 opt-out。\n */\n enableCellEditorCache?: boolean\n\n /**\n * 会话 cache 最大 **cell bucket** 数 `(rowId,colId)`;超出 LRU 淘汰。\n * 默认不限。\n */\n cellEditorCacheMaxEntries?: number\n}\n\nexport interface ResolvedCellEditorCacheGridOptions {\n enableCellEditorCache: boolean\n cellEditorCacheMaxEntries: number | undefined\n}\n\nexport function resolveCellEditorCacheGridOptions(\n options: CellEditorCacheGridOptions = {},\n): ResolvedCellEditorCacheGridOptions {\n const maxEntries = options.cellEditorCacheMaxEntries\n return {\n enableCellEditorCache: options.enableCellEditorCache ?? false,\n cellEditorCacheMaxEntries:\n maxEntries != null && Number.isFinite(maxEntries) && maxEntries > 0\n ? Math.floor(maxEntries)\n : undefined,\n }\n}\n\n/**\n * 存储键 rowId 段。\n * transient 行业务 id 为 null,须传 internalRowId 以免多行新增互相覆盖。\n */\nexport function buildCellEditorCacheRowPart(\n rowId: BusinessRowId,\n internalRowId?: string,\n): string {\n if (rowId !== null) {\n return String(rowId)\n }\n if (internalRowId) {\n return `\\0${internalRowId}`\n }\n return '\\0transient'\n}\n\n/** 完整 Map 键:`rowPart::colId::key` */\nexport function buildCellEditorCacheStorageKey(\n rowId: BusinessRowId,\n colId: string,\n key: string = DEFAULT_CELL_EDITOR_CACHE_KEY,\n options?: { internalRowId?: string },\n): string {\n const rowPart = buildCellEditorCacheRowPart(rowId, options?.internalRowId)\n return `${rowPart}::${colId}::${key}`\n}\n\n/** LRU 粒度:同一格 `(rowId,colId)` 下所有 namespace key 共用一个 bucket */\nexport function buildCellEditorCacheBucketKey(\n rowId: BusinessRowId,\n colId: string,\n options?: { internalRowId?: string },\n): string {\n const rowPart = buildCellEditorCacheRowPart(rowId, options?.internalRowId)\n return `${rowPart}::${colId}`\n}\n\nexport interface ResolveCellEditorCacheKeyOptions {\n userKey?: string\n columnCellEditorCache?: CellEditorCacheColumnFlag\n}\n\n/**\n * 消费方 key → 存储层 key。\n * 列级 `cellEditorCache: 'part'` 时:`getCellCache()` → `part`;`getCellCache('options')` → `part::options`。\n */\nexport function resolveCellEditorCacheKey(\n options: ResolveCellEditorCacheKeyOptions = {},\n): string {\n const { userKey, columnCellEditorCache } = options\n const namespace =\n typeof columnCellEditorCache === 'string' ? columnCellEditorCache : undefined\n\n if (userKey != null && userKey !== '') {\n return namespace ? `${namespace}::${userKey}` : userKey\n }\n\n if (namespace) {\n return namespace\n }\n\n return DEFAULT_CELL_EDITOR_CACHE_KEY\n}\n\nexport interface ShouldInjectCellEditorCacheApiOptions {\n enableCellEditorCache: boolean\n colId: string\n cellEditorMode?: CellEditorMode\n cellEditor?: unknown\n columnCellEditorCache?: CellEditorCacheColumnFlag\n}\n\n/** inline 列、列级 false、或未开启全局开关 → 不注入(CellEditorParams 上无 cache 方法) */\nexport function shouldInjectCellEditorCacheApi(\n options: ShouldInjectCellEditorCacheApiOptions,\n): boolean {\n if (\n isInlineEditorColumn({\n colId: options.colId,\n cellEditorMode: options.cellEditorMode,\n cellEditor: options.cellEditor,\n })\n ) {\n return false\n }\n\n if (options.columnCellEditorCache === false) {\n return false\n }\n\n if (\n options.columnCellEditorCache === true ||\n typeof options.columnCellEditorCache === 'string'\n ) {\n return true\n }\n\n return options.enableCellEditorCache\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cellEditorCache-ymzG_TG0.cjs","names":[],"sources":["../src/core/types/indexColumn.ts","../src/core/types/rowSelectionOptions.ts","../src/core/types/selectionColumn.ts","../src/core/types/cellEditorMode.ts","../src/core/types/cellEditorCache.ts"],"sourcesContent":["import type { ColumnDef } from '@types'\r\nimport type { GridHorizontalAlign, GridVerticalAlign } from '@core/types/align'\r\n\r\n/** 系统索引列 colId;用户 columns 不得占用 */\r\nexport const INDEX_COLUMN_ID = '__index__'\r\n\r\n/** 索引列最小(默认)宽度 px */\r\nexport const INDEX_COLUMN_MIN_WIDTH = 40\r\n\r\n/** 索引列默认起始序号(1-based 展示 = rowIndex + start) */\r\nexport const DEFAULT_INDEX_COLUMN_START = 1\r\n\r\n/** 索引列配置 */\r\nexport interface IndexColumnOptions {\r\n /** 表头文案;默认空字符串 */\r\n label?: string\r\n /** 列宽 px;默认 40;小于 40 时钳制为 40 */\r\n width?: number\r\n /** 起始序号(1-based 展示 = rowIndex + start);默认 1 */\r\n start?: number\r\n /**\r\n * 辅助定位模式:single / multiple(multiple 支持 Ctrl/Shift/拖拉范围)\r\n * 默认 multiple(Excel 行号式交互)\r\n */\r\n focusMode?: 'single' | 'multiple'\r\n /**\r\n * 索引列定位是否单向同步到行选择列(业务选中);core 默认 false,MagicGrid 组件层默认 true。\r\n * 仅当 indexColumn.focusMode 与 rowSelection 同为 single 或同为 multiple 时生效。\r\n * 用户在索引列上操作(点击/拖选/再次点击取消)或 API `setIndexFocus`(`mode: 'default'`)时同步;\r\n * 点击其他区域清除索引定位、行删除 / rowId 迁移等不同步行选择列。\r\n */\r\n syncToSelectionColumn?: boolean\r\n /** 表头水平对齐;默认 center */\r\n headerAlign?: GridHorizontalAlign\r\n /** 表头垂直对齐;默认 center */\r\n headerValign?: GridVerticalAlign\r\n /** 表体水平对齐;默认 center */\r\n align?: GridHorizontalAlign\r\n /** 表体垂直对齐;默认 center */\r\n valign?: GridVerticalAlign\r\n /** footer 水平对齐;默认 center */\r\n footerAlign?: GridHorizontalAlign\r\n /** footer 垂直对齐;默认 center */\r\n footerValign?: GridVerticalAlign\r\n /**\r\n * 自定义序号展示;入参为 rowsToDisplay 下标。\r\n * 缺省:(rowIndex) => String(rowIndex + start)\r\n */\r\n index?: (rowIndex: number) => number | string\r\n /**\r\n * 在索引列 cell 内显示行拖拽把柄;默认 false。\r\n * 需配合 Grid `rowDragManaged` 或监听 `rowDragEnd` 自行改序。\r\n */\r\n showRowDragHandle?: boolean\r\n /**\r\n * 索引列底边可拖拽调整行高;默认 false。\r\n * 对标 AG Grid Row Numbers `enableRowResizer`。\r\n */\r\n enableRowResizer?: boolean\r\n}\r\n\r\n/** Grid 级索引列开关与配置(块 0 类型;块 1+ 消费) */\r\nexport interface IndexColumnGridOptions {\r\n /** 是否显示最左侧索引列;默认 false */\r\n showIndexColumn?: boolean\r\n /** 索引列配置;showIndexColumn=true 时生效 */\r\n indexColumn?: IndexColumnOptions\r\n}\r\n\r\nexport interface ResolvedIndexColumnOptions {\r\n label: string\r\n width: number\r\n start: number\r\n focusMode: 'single' | 'multiple'\r\n syncToSelectionColumn: boolean\r\n showRowDragHandle: boolean\r\n enableRowResizer: boolean\r\n headerAlign: GridHorizontalAlign\r\n headerValign: GridVerticalAlign\r\n align: GridHorizontalAlign\r\n valign: GridVerticalAlign\r\n footerAlign: GridHorizontalAlign\r\n footerValign: GridVerticalAlign\r\n index?: (rowIndex: number) => number | string\r\n}\r\n\r\nexport interface ResolvedIndexColumnGridOptions {\r\n showIndexColumn: boolean\r\n indexColumn: ResolvedIndexColumnOptions\r\n}\r\n\r\nexport function resolveIndexColumnWidth(width?: number): number {\r\n return Math.max(INDEX_COLUMN_MIN_WIDTH, width ?? INDEX_COLUMN_MIN_WIDTH)\r\n}\r\n\r\nexport function resolveIndexColumnOptions(\r\n options: IndexColumnOptions = {},\r\n): ResolvedIndexColumnOptions {\r\n return {\r\n label: options.label ?? '',\r\n width: resolveIndexColumnWidth(options.width),\r\n start: options.start ?? DEFAULT_INDEX_COLUMN_START,\r\n focusMode: options.focusMode === 'single' ? 'single' : 'multiple',\r\n syncToSelectionColumn: options.syncToSelectionColumn ?? false,\r\n showRowDragHandle: options.showRowDragHandle ?? false,\r\n enableRowResizer: options.enableRowResizer ?? false,\r\n headerAlign: options.headerAlign ?? 'center',\r\n headerValign: options.headerValign ?? 'center',\r\n align: options.align ?? 'center',\r\n valign: options.valign ?? 'center',\r\n footerAlign: options.footerAlign ?? 'center',\r\n footerValign: options.footerValign ?? 'center',\r\n index: options.index,\r\n }\r\n}\r\n\r\nexport function resolveIndexColumnGridOptions(\r\n options: IndexColumnGridOptions = {},\r\n): ResolvedIndexColumnGridOptions {\r\n return {\r\n showIndexColumn: options.showIndexColumn ?? false,\r\n indexColumn: resolveIndexColumnOptions(options.indexColumn),\r\n }\r\n}\r\n\r\nexport function isIndexColumn(colId: string): boolean {\r\n return colId === INDEX_COLUMN_ID\r\n}\r\n\r\n/** `setIndexFocus` 同步策略:default 跟随 grid 配置;manual 由调用方显式控制 */\r\nexport type SetIndexFocusMode = 'default' | 'manual'\r\n\r\n/** `GridApi.setIndexFocus` 可选参数 */\r\nexport interface SetIndexFocusOptions {\r\n /**\r\n * - `default`(默认):与用户点击索引列一致,按 `indexColumn.syncToSelectionColumn` 决定是否同步\r\n * - `manual`:由 `syncToSelectionColumn` 显式控制,可覆盖 grid 配置\r\n */\r\n mode?: SetIndexFocusMode\r\n /** `mode: 'manual'` 时生效;省略时视为 `false` */\r\n syncToSelectionColumn?: boolean\r\n}\r\n\r\nexport function resolveColumnDefColId(column: ColumnDef, index: number): string {\r\n return column.key ?? column.prop ?? `col_${index}`\r\n}\r\n\r\n/** 开发模式:用户 columns 占用系统索引列 colId 时告警 */\r\nexport function warnIfUserColumnsConflictWithIndexColumn(\r\n columns: readonly ColumnDef[],\r\n): void {\r\n if (!import.meta.env.DEV) {\r\n return\r\n }\r\n\r\n columns.forEach((column, index) => {\r\n const colId = resolveColumnDefColId(column, index)\r\n if (colId === INDEX_COLUMN_ID || column.key === INDEX_COLUMN_ID) {\r\n console.warn(\r\n `[magic-grid] Column \"${INDEX_COLUMN_ID}\" is reserved for the system index column. ` +\r\n 'Remove it from your columns definition or use showIndexColumn instead.',\r\n )\r\n }\r\n })\r\n}\r\n","export type RowSelectionMode = 'single' | 'multiple'\n\n/** 行选择配置(Phase 19 · groupSelectsChildren) */\nexport interface RowSelectionConfig {\n mode: RowSelectionMode\n /**\n * tree 模式下选中父节点是否级联选中子孙。默认 `true`。\n * 对标 AG Grid rowSelection.groupSelectsChildren。\n */\n groupSelectsChildren?: boolean\n}\n\nexport type RowSelectionInput =\n | RowSelectionMode\n | false\n | RowSelectionConfig\n\nexport interface ResolvedRowSelectionOptions {\n mode: RowSelectionMode | false\n groupSelectsChildren: boolean\n}\n\nexport function normalizeRowSelectionInput(\n input: RowSelectionInput | undefined,\n): ResolvedRowSelectionOptions {\n if (input === false) {\n return { mode: false, groupSelectsChildren: true }\n }\n\n if (input == null) {\n return { mode: 'single', groupSelectsChildren: true }\n }\n\n if (typeof input === 'string') {\n return {\n mode: input === 'multiple' ? 'multiple' : 'single',\n groupSelectsChildren: true,\n }\n }\n\n return {\n mode: input.mode === 'multiple' ? 'multiple' : 'single',\n groupSelectsChildren: input.groupSelectsChildren ?? true,\n }\n}\n\nexport function normalizeRowSelectionMode(\n resolved: ResolvedRowSelectionOptions,\n): RowSelectionMode | false {\n return resolved.mode\n}\n","import type { RowSelectionMode } from '@core/selection/selectionService'\r\nimport {\r\n normalizeRowSelectionInput,\r\n type RowSelectionInput,\r\n} from '@core/types/rowSelectionOptions'\r\n\r\nimport { resolveColumnDefColId } from './indexColumn'\r\nimport type { GridHorizontalAlign, GridVerticalAlign } from '@core/types/align'\r\nimport type { ColumnDef } from '@types'\r\n\r\n/** 系统行选择列 colId;用户 columns 不得占用 */\r\nexport const SELECTION_COLUMN_ID = '__select__'\r\n\r\n/** 行选择列最小宽度 px */\r\nexport const SELECTION_COLUMN_MIN_WIDTH = 40\r\n\r\n/** 行选择列默认宽度 px */\r\nexport const SELECTION_COLUMN_DEFAULT_WIDTH = 40\r\n\r\n/** 表头全选 checkbox 默认 aria-label */\r\nexport const DEFAULT_SELECTION_SELECT_ALL_LABEL = '全选'\r\n\r\n/** 行选择列配置 */\r\nexport interface SelectionColumnOptions {\r\n /** 列宽 px;默认 40;小于 40 时钳制为 40 */\r\n width?: number\r\n /** 表头全选 checkbox 的 aria-label;默认「全选」 */\r\n selectAllLabel?: string\r\n /** 行 checkbox 的 aria-label 工厂 */\r\n rowLabel?: (rowIndex: number) => string\r\n /** 表头水平对齐;默认 center */\r\n headerAlign?: GridHorizontalAlign\r\n /** 表头垂直对齐;默认 center */\r\n headerValign?: GridVerticalAlign\r\n /** 表体水平对齐;默认 center */\r\n align?: GridHorizontalAlign\r\n /** 表体垂直对齐;默认 center */\r\n valign?: GridVerticalAlign\r\n /** footer 水平对齐;默认 center */\r\n footerAlign?: GridHorizontalAlign\r\n /** footer 垂直对齐;默认 center */\r\n footerValign?: GridVerticalAlign\r\n}\r\n\r\n/** Grid 级行选择列配置(块 0 类型;块 1+ 消费) */\r\nexport interface SelectionColumnGridOptions {\r\n /** 行选择列配置;rowSelection !== false 时生效 */\r\n selectionColumn?: SelectionColumnOptions\r\n}\r\n\r\nexport interface ResolvedSelectionColumnOptions {\r\n width: number\r\n selectAllLabel: string\r\n rowLabel?: (rowIndex: number) => string\r\n headerAlign: GridHorizontalAlign\r\n headerValign: GridVerticalAlign\r\n align: GridHorizontalAlign\r\n valign: GridVerticalAlign\r\n footerAlign: GridHorizontalAlign\r\n footerValign: GridVerticalAlign\r\n}\r\n\r\nexport interface ResolvedSelectionColumnGridOptions {\r\n /** rowSelection !== false */\r\n enabled: boolean\r\n /** 行选模式;enabled=false 时为占位 single */\r\n mode: RowSelectionMode\r\n selectionColumn: ResolvedSelectionColumnOptions\r\n}\r\n\r\nexport function resolveSelectionColumnWidth(width?: number): number {\r\n return Math.max(SELECTION_COLUMN_MIN_WIDTH, width ?? SELECTION_COLUMN_DEFAULT_WIDTH)\r\n}\r\n\r\nexport function resolveSelectionColumnOptions(\r\n options: SelectionColumnOptions = {},\r\n): ResolvedSelectionColumnOptions {\r\n return {\r\n width: resolveSelectionColumnWidth(options.width),\r\n selectAllLabel: options.selectAllLabel ?? DEFAULT_SELECTION_SELECT_ALL_LABEL,\r\n rowLabel: options.rowLabel,\r\n headerAlign: options.headerAlign ?? 'center',\r\n headerValign: options.headerValign ?? 'center',\r\n align: options.align ?? 'center',\r\n valign: options.valign ?? 'center',\r\n footerAlign: options.footerAlign ?? 'center',\r\n footerValign: options.footerValign ?? 'center',\r\n }\r\n}\r\n\r\nexport function resolveSelectionColumnGridOptions(\r\n options: {\r\n rowSelection?: RowSelectionInput\r\n selectionColumn?: SelectionColumnOptions\r\n } = {},\r\n): ResolvedSelectionColumnGridOptions {\r\n // Grid 直建时缺省 rowSelection 仍不注入行选择列;MagicGrid 默认传 'single'。\r\n if (options.rowSelection == null) {\r\n return {\r\n enabled: false,\r\n mode: 'single',\r\n selectionColumn: resolveSelectionColumnOptions(options.selectionColumn),\r\n }\r\n }\r\n\r\n const resolved = normalizeRowSelectionInput(options.rowSelection)\r\n const enabled = resolved.mode !== false\r\n\r\n return {\r\n enabled,\r\n mode: enabled && resolved.mode !== false ? resolved.mode : 'single',\r\n selectionColumn: resolveSelectionColumnOptions(options.selectionColumn),\r\n }\r\n}\r\n\r\nexport function isSelectionColumn(colId: string): boolean {\r\n return colId === SELECTION_COLUMN_ID\r\n}\r\n\r\n/** 开发模式:用户 columns 占用系统行选择列 colId 时告警 */\r\nexport function warnIfUserColumnsConflictWithSelectionColumn(\r\n columns: readonly ColumnDef[],\r\n): void {\r\n if (!import.meta.env.DEV) {\r\n return\r\n }\r\n\r\n columns.forEach((column, index) => {\r\n const colId = resolveColumnDefColId(column, index)\r\n if (colId === SELECTION_COLUMN_ID || column.key === SELECTION_COLUMN_ID) {\r\n console.warn(\r\n `[magic-grid] Column \"${SELECTION_COLUMN_ID}\" is reserved for the system row selection column. ` +\r\n 'Remove it from your columns definition; use rowSelection instead.',\r\n )\r\n }\r\n })\r\n}\r\n","import { isIndexColumn } from '@core/types/indexColumn'\r\nimport { isSelectionColumn } from '@core/types/selectionColumn'\r\nimport { isBuiltInCellEditor } from '@core/types/cellEditor'\r\n\r\n/** 单元格编辑器呈现模式:overlay 进入编辑态;inline 常驻格内 */\r\nexport type CellEditorMode = 'overlay' | 'inline'\r\n\r\n/** 缺省 overlay,与 Phase 3 行为一致 */\r\nexport const DEFAULT_CELL_EDITOR_MODE: CellEditorMode = 'overlay'\r\n\r\n/** 解析列级 cellEditorMode;缺省 overlay */\r\nexport function resolveCellEditorMode(mode?: CellEditorMode): CellEditorMode {\r\n if (mode === 'inline') {\r\n return 'inline'\r\n }\r\n return DEFAULT_CELL_EDITOR_MODE\r\n}\r\n\r\n/** 系统列强制 overlay;用户列解析 cellEditorMode */\r\nexport function resolveColumnCellEditorMode(\r\n colId: string,\r\n mode?: CellEditorMode,\r\n): CellEditorMode {\r\n if (isIndexColumn(colId) || isSelectionColumn(colId)) {\r\n return DEFAULT_CELL_EDITOR_MODE\r\n }\r\n return resolveCellEditorMode(mode)\r\n}\r\n\r\n/** 是否为 inline 常驻编辑器列(须配置 cellEditor;系统列恒 false) */\r\nexport function isInlineEditorColumn(column: {\r\n colId: string\r\n cellEditorMode?: CellEditorMode\r\n cellEditor?: unknown\r\n}): boolean {\r\n if (isIndexColumn(column.colId) || isSelectionColumn(column.colId)) {\r\n return false\r\n }\r\n\r\n if (resolveCellEditorMode(column.cellEditorMode) !== 'inline') {\r\n return false\r\n }\r\n\r\n return column.cellEditor != null\r\n}\r\n\r\n/** 开发模式:inline 误配告警 */\r\nexport function warnIfInlineEditorMisconfigured(\r\n colId: string,\r\n options: {\r\n cellEditorMode?: CellEditorMode\r\n cellEditor?: unknown\r\n },\r\n): void {\r\n if (!import.meta.env.DEV) {\r\n return\r\n }\r\n\r\n const isSystem = isIndexColumn(colId) || isSelectionColumn(colId)\r\n\r\n if (isSystem && options.cellEditorMode === 'inline') {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" is a system column and cannot use cellEditorMode: 'inline'. ` +\r\n 'Inline editors apply to user data columns only.',\r\n )\r\n return\r\n }\r\n\r\n if (options.cellEditorMode === 'inline' && options.cellEditor == null) {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" has cellEditorMode: 'inline' but no cellEditor. ` +\r\n 'Configure cellEditor (e.g. \"checkbox\") or remove inline mode.',\r\n )\r\n }\r\n}\r\n\r\nconst INLINE_NATIVE_EDITORS = new Set(['text', 'number', 'checkbox', 'switch'])\r\n\r\n/** 开发模式:inline 列使用可能依赖 overlay/teleport 的编辑器时告警 */\r\nexport function warnIfInlineOverlayEditor(\r\n colId: string,\r\n options: {\r\n cellEditorMode?: CellEditorMode\r\n cellEditor?: unknown\r\n },\r\n): void {\r\n if (!import.meta.env.DEV || options.cellEditorMode !== 'inline') {\r\n return\r\n }\r\n\r\n const editor = options.cellEditor\r\n if (editor == null) {\r\n return\r\n }\r\n\r\n if (typeof editor === 'function') {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" uses cellEditorMode: 'inline' with a custom editor function. ` +\r\n 'Inline editors must not use overlay/teleport; prefer checkbox, switch, text, or number.',\r\n )\r\n return\r\n }\r\n\r\n if (typeof editor === 'string' && !INLINE_NATIVE_EDITORS.has(editor) && !isBuiltInCellEditor(editor)) {\r\n console.warn(\r\n `[magic-grid] Column \"${colId}\" uses cellEditorMode: 'inline' with editor \"${editor}\" ` +\r\n 'which may require an overlay surface. Prefer \"checkbox\", \"switch\", \"text\", or \"number\" for inline columns.',\r\n )\r\n }\r\n}\r\n","/**\n * Cell Editor Cache — 类型与纯函数(Phase 42 / M35)\n *\n * 职责:Grid/列 opt-in 开关解析、存储键规则、是否向 overlay 列注入 API。\n * 可变状态与 LRU 在 {@link CellEditorCacheService}(`cellEditorCacheService.ts`)。\n *\n * 存储键:`${rowPart}::${colId}::${resolvedKey}`\n * - rowPart:业务 rowId 字符串;transient 行为 `\\0${internalRowId}`\n * - resolvedKey:消费方 key + 可选列级 namespace 前缀\n */\nimport type { BusinessRowId } from '@core/types/businessRowId'\nimport type { CellEditorMode } from '@core/types/cellEditorMode'\nimport { isInlineEditorColumn } from '@core/types/cellEditorMode'\n\n/** 消费方未传 key 且列无 string namespace 时的默认 slot */\nexport const DEFAULT_CELL_EDITOR_CACHE_KEY = 'default'\n\n/** 列级 flag:`true` 启用 · `string` 固定 namespace · `false` 全局开启时 opt-out */\nexport type CellEditorCacheColumnFlag = boolean | string\n\n/** Grid 级配置(MagicGrid `enableCellEditorCache` / `cellEditorCacheMaxEntries`) */\nexport interface CellEditorCacheGridOptions {\n /**\n * 为所有 overlay 列注入 get/set/clear API。\n * 默认 false(零开销);列级 `cellEditorCache: false` 可显式 opt-out。\n */\n enableCellEditorCache?: boolean\n\n /**\n * 会话 cache 最大 **cell bucket** 数 `(rowId,colId)`;超出 LRU 淘汰。\n * 默认不限。\n */\n cellEditorCacheMaxEntries?: number\n}\n\nexport interface ResolvedCellEditorCacheGridOptions {\n enableCellEditorCache: boolean\n cellEditorCacheMaxEntries: number | undefined\n}\n\nexport function resolveCellEditorCacheGridOptions(\n options: CellEditorCacheGridOptions = {},\n): ResolvedCellEditorCacheGridOptions {\n const maxEntries = options.cellEditorCacheMaxEntries\n return {\n enableCellEditorCache: options.enableCellEditorCache ?? false,\n cellEditorCacheMaxEntries:\n maxEntries != null && Number.isFinite(maxEntries) && maxEntries > 0\n ? Math.floor(maxEntries)\n : undefined,\n }\n}\n\n/**\n * 存储键 rowId 段。\n * transient 行业务 id 为 null,须传 internalRowId 以免多行新增互相覆盖。\n */\nexport function buildCellEditorCacheRowPart(\n rowId: BusinessRowId,\n internalRowId?: string,\n): string {\n if (rowId !== null) {\n return String(rowId)\n }\n if (internalRowId) {\n return `\\0${internalRowId}`\n }\n return '\\0transient'\n}\n\n/** 完整 Map 键:`rowPart::colId::key` */\nexport function buildCellEditorCacheStorageKey(\n rowId: BusinessRowId,\n colId: string,\n key: string = DEFAULT_CELL_EDITOR_CACHE_KEY,\n options?: { internalRowId?: string },\n): string {\n const rowPart = buildCellEditorCacheRowPart(rowId, options?.internalRowId)\n return `${rowPart}::${colId}::${key}`\n}\n\n/** LRU 粒度:同一格 `(rowId,colId)` 下所有 namespace key 共用一个 bucket */\nexport function buildCellEditorCacheBucketKey(\n rowId: BusinessRowId,\n colId: string,\n options?: { internalRowId?: string },\n): string {\n const rowPart = buildCellEditorCacheRowPart(rowId, options?.internalRowId)\n return `${rowPart}::${colId}`\n}\n\nexport interface ResolveCellEditorCacheKeyOptions {\n userKey?: string\n columnCellEditorCache?: CellEditorCacheColumnFlag\n}\n\n/**\n * 消费方 key → 存储层 key。\n * 列级 `cellEditorCache: 'part'` 时:`getCellCache()` → `part`;`getCellCache('options')` → `part::options`。\n */\nexport function resolveCellEditorCacheKey(\n options: ResolveCellEditorCacheKeyOptions = {},\n): string {\n const { userKey, columnCellEditorCache } = options\n const namespace =\n typeof columnCellEditorCache === 'string' ? columnCellEditorCache : undefined\n\n if (userKey != null && userKey !== '') {\n return namespace ? `${namespace}::${userKey}` : userKey\n }\n\n if (namespace) {\n return namespace\n }\n\n return DEFAULT_CELL_EDITOR_CACHE_KEY\n}\n\nexport interface ShouldInjectCellEditorCacheApiOptions {\n enableCellEditorCache: boolean\n colId: string\n cellEditorMode?: CellEditorMode\n cellEditor?: unknown\n columnCellEditorCache?: CellEditorCacheColumnFlag\n}\n\n/** inline 列、列级 false、或未开启全局开关 → 不注入(CellEditorParams 上无 cache 方法) */\nexport function shouldInjectCellEditorCacheApi(\n options: ShouldInjectCellEditorCacheApiOptions,\n): boolean {\n if (\n isInlineEditorColumn({\n colId: options.colId,\n cellEditorMode: options.cellEditorMode,\n cellEditor: options.cellEditor,\n })\n ) {\n return false\n }\n\n if (options.columnCellEditorCache === false) {\n return false\n }\n\n if (\n options.columnCellEditorCache === true ||\n typeof options.columnCellEditorCache === 'string'\n ) {\n return true\n }\n\n return options.enableCellEditorCache\n}\n"],"mappings":"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"}
@@ -1481,7 +1481,7 @@ declare const __VLS_base: DefineComponent<ExtractPropTypes<{
1481
1481
  allowCrossLaneColumnMove: boolean;
1482
1482
  skipHeaderOnAutoSize: boolean;
1483
1483
  autoSizePadding: number;
1484
- filterSetValueMode: "reserve" | "current";
1484
+ filterSetValueMode: "current" | "reserve";
1485
1485
  filterSetDateLayoutMode: "tree" | "list";
1486
1486
  rowDragManaged: boolean;
1487
1487
  rowDragCommitMode: RowDragCommitMode;
@@ -4,7 +4,9 @@ import { CellEditorFn } from '../types/cellEditor';
4
4
  import { BusinessRowId } from '../types/businessRowId';
5
5
  import { EditSessionPhase } from '../editing/editCommitContext';
6
6
  import { ClearValidationOptions, ValidateGridOptions, GridValidationResult, ValidateCellsOptions, ClearCellValidationOptions, ValidateRowsOptions, ClearRowValidationOptions } from '../types/validation';
7
+ import { ClearRowSelectionOptions } from '../selection/selectionService';
7
8
  import { RowId, RowIdInput } from '../types/rowId';
9
+ import { SetIndexFocusOptions } from '../types/indexColumn';
8
10
  import { RowIndexMode, AddRowsOptions, RemoveRowsOptions, GetDataOptions, PromoteRowIdOptions, PromoteRowIdResult } from '../types/rowMutation';
9
11
  import { RowMoveResult } from '../row/rowMoveService';
10
12
  import { CellSpanInfo } from '../types/cellSpan';
@@ -384,18 +386,34 @@ export interface GridApi extends RowMutationGridApi {
384
386
  * `false` 取消可见可选行(**保留** disabled 已选行)
385
387
  */
386
388
  toggleAllSelection(selected?: boolean): void;
389
+ /**
390
+ * 清空行 checkbox 选中。
391
+ *
392
+ * @param options.scope
393
+ * - `all`(默认):清空全部选中,含 `reserveSelection` 保留的离屏选中
394
+ * - `current`:仅取消当前 display 中的选中,保留离屏选中
395
+ *
396
+ * 变更时 emit `selectionChanged`。
397
+ */
398
+ clearRowSelection(options?: ClearRowSelectionOptions): void;
399
+ /** 读取当前 checkbox 选中 rowId(业务类型,与 `data[rowKey]` 一致) */
400
+ getSelectedRowIds(): BusinessRowId[];
401
+ /** 读取当前索引列辅助定位 rowId;未启用 `showIndexColumn` 时返回 `[]` */
402
+ getIndexFocusedRowIds(): BusinessRowId[];
387
403
  /**
388
404
  * 设置索引列辅助定位(`IndexFocusService`),不触发鼠标拖拉。
389
405
  *
390
406
  * @param rowIds 单个或批量 rowId;传空数组 `[]` 清除定位
407
+ * @param options 同步策略,默认 `{ mode: 'default' }`
391
408
  *
392
409
  * - `focusMode: 'single'` 时仅保留首个有效 id。
393
410
  * - 变更时 emit `indexFocusChanged`。
394
- * - 若开启 `syncToSelectionColumn` 且模式兼容,会单向同步到行选择列(跳过不可选行)。
411
+ * - `mode: 'default'`:与用户点击索引列一致,按 `indexColumn.syncToSelectionColumn` 决定是否同步行选择列。
412
+ * - `mode: 'manual'`:由 `syncToSelectionColumn` 显式控制(可覆盖 grid 配置)。
395
413
  *
396
414
  * 须启用 `showIndexColumn`;未启用时为 no-op。
397
415
  */
398
- setIndexFocus(rowIds: RowIdInput): void;
416
+ setIndexFocus(rowIds: RowIdInput, options?: SetIndexFocusOptions): void;
399
417
  /** 展开主行;非 master 或未启用 `masterDetail` 时返回 `false`。 */
400
418
  expandRow(rowId: RowId): boolean;
401
419
  /** 折叠主行;未展开或未启用时返回 `false`。 */
@@ -1 +1 @@
1
- {"version":3,"file":"gridApi.d.ts","sourceRoot":"","sources":["../../../src/core/api/gridApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gridApi.d.ts","sourceRoot":"","sources":["../../../src/core/api/gridApi.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { CellStyleContext } from '../styling/cellStylePipeline';
4
4
  import { IsRowDisabledFn, RefreshDisabledStateParams } from '../types/cellDisable';
5
5
  import { RowStyle, RefreshCellStylesParams } from '../types/cellColor';
6
6
  import { EditSessionPhase } from '../editing/editCommitContext';
7
+ import { ClearRowSelectionOptions } from '../selection/selectionService';
7
8
  import { SelectableFn } from '../selection/selectable';
8
9
  import { ColumnModel } from '../column/columnModel';
9
10
  import { Column } from '../types/column';
@@ -12,7 +13,7 @@ import { RowMoveResult } from '../row/rowMoveService';
12
13
  import { EditingCellPosition, FilterCondition, FilterModel, GridEventHandler, GridEventMap, GridEventType, GridOptions, RefreshCellsParams, RenderWindow, RowNode, RowNodeTransaction, RowTransaction, SortModelItem } from '../types';
13
14
  import { GridLifecycleEventType } from '../types/gridLifecycle';
14
15
  import { SummaryOptions } from '../types/summary';
15
- import { ResolvedIndexColumnGridOptions } from '../types/indexColumn';
16
+ import { ResolvedIndexColumnGridOptions, SetIndexFocusOptions } from '../types/indexColumn';
16
17
  import { CellSpanInfo } from '../types/cellSpan';
17
18
  import { OverflowTooltipGridOptions } from '../types/overflowTooltip';
18
19
  import { EmptyStateGridOptions, OverlayType } from '../types/emptyState';
@@ -174,8 +175,11 @@ export declare class Grid {
174
175
  getColumnWidth(colId: string): number;
175
176
  setShowUnsortedSortHintOnHover(value: boolean): void;
176
177
  toggleRowSelection(rowIds: RowIdInput, selected?: boolean, force?: boolean): void;
177
- setIndexFocus(rowIds: RowIdInput): void;
178
+ setIndexFocus(rowIds: RowIdInput, options?: SetIndexFocusOptions): void;
178
179
  toggleAllSelection(selected?: boolean): void;
180
+ clearRowSelection(options?: ClearRowSelectionOptions): void;
181
+ getSelectedRowIds(): BusinessRowId[];
182
+ getIndexFocusedRowIds(): BusinessRowId[];
179
183
  isRowNodeSelectable(rowNode: RowNode): boolean;
180
184
  getSelectableRowIdAt(index: number): string | undefined;
181
185
  getSummaryOptions(): Readonly<SummaryOptions & {