@visactor/vtable-plugins 1.23.3 → 1.24.0-alpha.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 (143) hide show
  1. package/cjs/auto-fill/index.d.ts +3 -2
  2. package/cjs/auto-fill/index.js.map +1 -1
  3. package/cjs/auto-fill/series-converters.d.ts +3 -3
  4. package/cjs/auto-fill/series-converters.js.map +1 -1
  5. package/cjs/contextmenu/handle-menu-helper.js +1 -2
  6. package/cjs/contextmenu/index.js +2 -1
  7. package/cjs/excel-edit-cell-keyboard.d.ts +4 -2
  8. package/cjs/excel-edit-cell-keyboard.js.map +1 -1
  9. package/cjs/filter/filter-engine.js +5 -1
  10. package/cjs/filter/filter-engine.js.map +1 -1
  11. package/cjs/filter/filter-state-manager.d.ts +6 -1
  12. package/cjs/filter/filter-state-manager.js +81 -0
  13. package/cjs/filter/filter-state-manager.js.map +1 -1
  14. package/cjs/filter/filter-toolbar.d.ts +2 -0
  15. package/cjs/filter/filter-toolbar.js +23 -3
  16. package/cjs/filter/filter-toolbar.js.map +1 -1
  17. package/cjs/filter/filter.d.ts +4 -2
  18. package/cjs/filter/filter.js +32 -10
  19. package/cjs/filter/filter.js.map +1 -1
  20. package/cjs/filter/index.js +2 -1
  21. package/cjs/filter/types.d.ts +3 -0
  22. package/cjs/filter/types.js.map +1 -1
  23. package/cjs/filter/value-filter.js +11 -41
  24. package/cjs/filter/value-filter.js.map +1 -1
  25. package/cjs/filter/value-filter.syncSingleStateFromTableData.backup.d.ts +46 -0
  26. package/cjs/filter/value-filter.syncSingleStateFromTableData.backup.js +247 -0
  27. package/cjs/filter/value-filter.syncSingleStateFromTableData.backup.js.map +1 -0
  28. package/cjs/history/formula.d.ts +40 -0
  29. package/cjs/history/formula.js +112 -0
  30. package/cjs/history/formula.js.map +1 -0
  31. package/cjs/history/history-plugin.d.ts +88 -0
  32. package/cjs/history/history-plugin.js +699 -0
  33. package/cjs/history/history-plugin.js.map +1 -0
  34. package/cjs/history/index.d.ts +3 -0
  35. package/cjs/history/index.js +24 -0
  36. package/cjs/history/index.js.map +1 -0
  37. package/cjs/history/replay.d.ts +9 -0
  38. package/cjs/history/replay.js +268 -0
  39. package/cjs/history/replay.js.map +1 -0
  40. package/cjs/history/sheet-key.d.ts +9 -0
  41. package/cjs/history/sheet-key.js +44 -0
  42. package/cjs/history/sheet-key.js.map +1 -0
  43. package/cjs/history/snapshot.d.ts +15 -0
  44. package/cjs/history/snapshot.js +78 -0
  45. package/cjs/history/snapshot.js.map +1 -0
  46. package/cjs/history/types.d.ts +105 -0
  47. package/cjs/history/types.js +6 -0
  48. package/cjs/history/types.js.map +1 -0
  49. package/cjs/history-plugin.d.ts +1 -0
  50. package/cjs/history-plugin.js +21 -0
  51. package/cjs/history-plugin.js.map +1 -0
  52. package/cjs/index.d.ts +1 -0
  53. package/cjs/index.js +2 -1
  54. package/cjs/index.js.map +1 -1
  55. package/cjs/master-detail-plugin/checkbox.js +1 -1
  56. package/cjs/master-detail-plugin/config.js +1 -1
  57. package/cjs/master-detail-plugin/core.js +1 -1
  58. package/cjs/master-detail-plugin/events.js +1 -1
  59. package/cjs/master-detail-plugin/types.d.ts +1 -1
  60. package/cjs/master-detail-plugin/types.js.map +1 -1
  61. package/cjs/rotate-table.d.ts +7 -6
  62. package/cjs/rotate-table.js +12 -13
  63. package/cjs/rotate-table.js.map +1 -1
  64. package/cjs/row-series.js +2 -1
  65. package/cjs/table-export/util/pagination.js.map +1 -1
  66. package/cjs/wps-fill-handle.d.ts +4 -2
  67. package/cjs/wps-fill-handle.js.map +1 -1
  68. package/dist/vtable-plugins.js +1903 -81
  69. package/dist/vtable-plugins.min.js +3 -3
  70. package/es/auto-fill/index.d.ts +3 -2
  71. package/es/auto-fill/index.js.map +1 -1
  72. package/es/auto-fill/series-converters.d.ts +3 -3
  73. package/es/auto-fill/series-converters.js.map +1 -1
  74. package/es/contextmenu/handle-menu-helper.js +1 -2
  75. package/es/contextmenu/index.js +2 -1
  76. package/es/excel-edit-cell-keyboard.d.ts +4 -2
  77. package/es/excel-edit-cell-keyboard.js.map +1 -1
  78. package/es/filter/filter-engine.js +5 -1
  79. package/es/filter/filter-engine.js.map +1 -1
  80. package/es/filter/filter-state-manager.d.ts +6 -1
  81. package/es/filter/filter-state-manager.js +81 -0
  82. package/es/filter/filter-state-manager.js.map +1 -1
  83. package/es/filter/filter-toolbar.d.ts +2 -0
  84. package/es/filter/filter-toolbar.js +23 -3
  85. package/es/filter/filter-toolbar.js.map +1 -1
  86. package/es/filter/filter.d.ts +4 -2
  87. package/es/filter/filter.js +32 -10
  88. package/es/filter/filter.js.map +1 -1
  89. package/es/filter/index.js +2 -1
  90. package/es/filter/types.d.ts +3 -0
  91. package/es/filter/types.js.map +1 -1
  92. package/es/filter/value-filter.js +12 -41
  93. package/es/filter/value-filter.js.map +1 -1
  94. package/es/filter/value-filter.syncSingleStateFromTableData.backup.d.ts +46 -0
  95. package/es/filter/value-filter.syncSingleStateFromTableData.backup.js +242 -0
  96. package/es/filter/value-filter.syncSingleStateFromTableData.backup.js.map +1 -0
  97. package/es/history/formula.d.ts +40 -0
  98. package/es/history/formula.js +103 -0
  99. package/es/history/formula.js.map +1 -0
  100. package/es/history/history-plugin.d.ts +88 -0
  101. package/es/history/history-plugin.js +698 -0
  102. package/es/history/history-plugin.js.map +1 -0
  103. package/es/history/index.d.ts +3 -0
  104. package/es/history/index.js +4 -0
  105. package/es/history/index.js.map +1 -0
  106. package/es/history/replay.d.ts +9 -0
  107. package/es/history/replay.js +260 -0
  108. package/es/history/replay.js.map +1 -0
  109. package/es/history/sheet-key.d.ts +9 -0
  110. package/es/history/sheet-key.js +38 -0
  111. package/es/history/sheet-key.js.map +1 -0
  112. package/es/history/snapshot.d.ts +15 -0
  113. package/es/history/snapshot.js +71 -0
  114. package/es/history/snapshot.js.map +1 -0
  115. package/es/history/types.d.ts +105 -0
  116. package/es/history/types.js +2 -0
  117. package/es/history/types.js.map +1 -0
  118. package/es/history-plugin.d.ts +1 -0
  119. package/es/history-plugin.js +2 -0
  120. package/es/history-plugin.js.map +1 -0
  121. package/es/index.d.ts +1 -0
  122. package/es/index.js +2 -0
  123. package/es/index.js.map +1 -1
  124. package/es/master-detail-plugin/checkbox.js +1 -1
  125. package/es/master-detail-plugin/config.js +1 -1
  126. package/es/master-detail-plugin/core.js +1 -1
  127. package/es/master-detail-plugin/events.js +1 -1
  128. package/es/master-detail-plugin/types.d.ts +1 -1
  129. package/es/master-detail-plugin/types.js.map +1 -1
  130. package/es/rotate-table.d.ts +7 -6
  131. package/es/rotate-table.js +2 -3
  132. package/es/rotate-table.js.map +1 -1
  133. package/es/row-series.js +2 -1
  134. package/es/table-export/util/pagination.js.map +1 -1
  135. package/es/wps-fill-handle.d.ts +4 -2
  136. package/es/wps-fill-handle.js.map +1 -1
  137. package/package.json +9 -7
  138. package/cjs/auto-fill/__tests__/formula-integration.test.d.ts +0 -23
  139. package/cjs/auto-fill/__tests__/formula-integration.test.js +0 -61
  140. package/cjs/auto-fill/__tests__/formula-integration.test.js.map +0 -1
  141. package/es/auto-fill/__tests__/formula-integration.test.d.ts +0 -23
  142. package/es/auto-fill/__tests__/formula-integration.test.js +0 -54
  143. package/es/auto-fill/__tests__/formula-integration.test.js.map +0 -1
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ function resolveSheetKey(args) {
4
+ var _a, _b, _c;
5
+ const {vtableSheet: vtableSheet, table: table, cached: cached} = args;
6
+ if (!vtableSheet) return {
7
+ sheetKey: void 0,
8
+ cached: void 0
9
+ };
10
+ if (cached) return {
11
+ sheetKey: cached,
12
+ cached: cached
13
+ };
14
+ try {
15
+ const workSheetInstances = vtableSheet.workSheetInstances;
16
+ if (workSheetInstances && table) for (const [sheetKey, worksheet] of workSheetInstances.entries()) if ((null == worksheet ? void 0 : worksheet.tableInstance) === table) return {
17
+ sheetKey: sheetKey,
18
+ cached: sheetKey
19
+ };
20
+ const active = null === (_a = vtableSheet.getActiveSheet) || void 0 === _a ? void 0 : _a.call(vtableSheet);
21
+ if (null == active ? void 0 : active.getKey) {
22
+ const key = active.getKey();
23
+ return {
24
+ sheetKey: key,
25
+ cached: key
26
+ };
27
+ }
28
+ const activeDefine = null === (_c = null === (_b = vtableSheet.sheetManager) || void 0 === _b ? void 0 : _b.getActiveSheet) || void 0 === _c ? void 0 : _c.call(_b), key = null == activeDefine ? void 0 : activeDefine.sheetKey;
29
+ return {
30
+ sheetKey: key,
31
+ cached: key
32
+ };
33
+ } catch (_d) {
34
+ return {
35
+ sheetKey: void 0,
36
+ cached: void 0
37
+ };
38
+ }
39
+ }
40
+
41
+ Object.defineProperty(exports, "__esModule", {
42
+ value: !0
43
+ }), exports.resolveSheetKey = void 0, exports.resolveSheetKey = resolveSheetKey;
44
+ //# sourceMappingURL=sheet-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/history/sheet-key.ts"],"names":[],"mappings":";;;AAEA,SAAgB,eAAe,CAAC,IAA+E;;IAI7G,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,WAAW,EAAE;QAChB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;KACnD;IACD,IAAI,MAAM,EAAE;QACV,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;KACrC;IACD,IAAI;QAEF,MAAM,kBAAkB,GAAiC,WAAW,CAAC,kBAAkB,CAAC;QACxF,IAAI,kBAAkB,IAAI,KAAK,EAAE;YAC/B,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,kBAAkB,CAAC,OAAO,EAAE,EAAE;gBAChE,IAAI,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,aAAa,MAAK,KAAK,EAAE;oBACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;iBACvC;aACF;SACF;QAED,MAAM,MAAM,GAAG,MAAA,WAAW,CAAC,cAAc,2DAAI,CAAC;QAC9C,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAE;YAClB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;SACvC;QACD,MAAM,YAAY,GAAG,MAAA,MAAA,WAAW,CAAC,YAAY,0CAAE,cAAc,kDAAI,CAAC;QAClE,MAAM,GAAG,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,CAAC;QACnC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;KACvC;IAAC,WAAM;QACN,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;KACnD;AACH,CAAC;AAjCD,0CAiCC","file":"sheet-key.js","sourcesContent":["import type { ListTable } from '@visactor/vtable';\n\nexport function resolveSheetKey(args: { vtableSheet: any; table: ListTable | null; cached: string | undefined }): {\n sheetKey: string | undefined;\n cached: string | undefined;\n} {\n const { vtableSheet, table, cached } = args;\n if (!vtableSheet) {\n return { sheetKey: undefined, cached: undefined };\n }\n if (cached) {\n return { sheetKey: cached, cached };\n }\n try {\n // 优先通过 tableInstance 反查出 worksheet key,避免多 sheet 场景下拿错 active sheet。\n const workSheetInstances: Map<string, any> | undefined = vtableSheet.workSheetInstances;\n if (workSheetInstances && table) {\n for (const [sheetKey, worksheet] of workSheetInstances.entries()) {\n if (worksheet?.tableInstance === table) {\n return { sheetKey, cached: sheetKey };\n }\n }\n }\n // 回退到 active sheet key。\n const active = vtableSheet.getActiveSheet?.();\n if (active?.getKey) {\n const key = active.getKey();\n return { sheetKey: key, cached: key };\n }\n const activeDefine = vtableSheet.sheetManager?.getActiveSheet?.();\n const key = activeDefine?.sheetKey;\n return { sheetKey: key, cached: key };\n } catch {\n return { sheetKey: undefined, cached: undefined };\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import type { ListTable, TYPES } from '@visactor/vtable';
2
+ export interface SnapshotState {
3
+ prevColumnsSnapshot: TYPES.ColumnDefine[] | null;
4
+ prevMergeSnapshot: TYPES.CustomMergeCellArray | undefined;
5
+ prevRecordsSnapshot: any[] | null;
6
+ prevFormulasSnapshot?: Record<string, string> | null;
7
+ prevResizedRowHeightsSnapshot?: Record<number, number> | null;
8
+ prevResizedColWidthsSnapshot?: Record<number, number> | null;
9
+ }
10
+ export declare function cloneDeep<T>(input: T, cache?: WeakMap<object, any>): T;
11
+ export declare function captureSnapshot(table: ListTable, state: SnapshotState, options?: {
12
+ formulaManager?: any;
13
+ sheetKey?: string;
14
+ }): void;
15
+ export declare function cloneRecord(record: any): any;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ function cloneDeep(input, cache = new WeakMap) {
4
+ if (null == input) return input;
5
+ const t = typeof input;
6
+ if ("function" === t || "object" !== t) return input;
7
+ const obj = input;
8
+ if (obj instanceof Date) return new Date(obj.getTime());
9
+ if (obj instanceof RegExp) return new RegExp(obj);
10
+ if (cache.has(obj)) return cache.get(obj);
11
+ if (Array.isArray(obj)) {
12
+ const arr = [];
13
+ cache.set(obj, arr);
14
+ for (let i = 0; i < obj.length; i++) arr[i] = cloneDeep(obj[i], cache);
15
+ return arr;
16
+ }
17
+ const out = {};
18
+ return cache.set(obj, out), Object.keys(obj).forEach((key => {
19
+ out[key] = cloneDeep(obj[key], cache);
20
+ })), out;
21
+ }
22
+
23
+ function captureSnapshot(table, state, options) {
24
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
25
+ const tableOptions = table.options || {}, columns = tableOptions.columns;
26
+ Array.isArray(columns) ? state.prevColumnsSnapshot = columns.map((c => cloneDeep(c))) : state.prevColumnsSnapshot = null;
27
+ const merge = tableOptions.customMergeCell;
28
+ Array.isArray(merge) ? state.prevMergeSnapshot = merge.map((m => Object.assign(Object.assign({}, m), {
29
+ range: {
30
+ start: Object.assign({}, m.range.start),
31
+ end: Object.assign({}, m.range.end)
32
+ }
33
+ }))) : state.prevMergeSnapshot = merge;
34
+ const records = table.records || [];
35
+ Array.isArray(records) ? state.prevRecordsSnapshot = records.map((r => cloneRecord(r))) : state.prevRecordsSnapshot = null;
36
+ try {
37
+ const resizedRowIndexs = Array.from(null !== (_d = null === (_c = null === (_b = null === (_a = table.internalProps) || void 0 === _a ? void 0 : _a._heightResizedRowMap) || void 0 === _b ? void 0 : _b.keys) || void 0 === _c ? void 0 : _c.call(_b)) && void 0 !== _d ? _d : []);
38
+ if (resizedRowIndexs.length && "function" == typeof table.getRowHeight) {
39
+ const map = {};
40
+ resizedRowIndexs.forEach((rowIndex => {
41
+ if ("number" != typeof rowIndex) return;
42
+ const h = table.getRowHeight(rowIndex);
43
+ "number" == typeof h && (map[rowIndex] = h);
44
+ })), state.prevResizedRowHeightsSnapshot = map;
45
+ } else state.prevResizedRowHeightsSnapshot = null;
46
+ } catch (_k) {
47
+ state.prevResizedRowHeightsSnapshot = null;
48
+ }
49
+ try {
50
+ const resizedColIndexs = Array.from(null !== (_h = null === (_g = null === (_f = null === (_e = table.internalProps) || void 0 === _e ? void 0 : _e._widthResizedColMap) || void 0 === _f ? void 0 : _f.keys) || void 0 === _g ? void 0 : _g.call(_f)) && void 0 !== _h ? _h : []);
51
+ if (resizedColIndexs.length && "function" == typeof table.getColWidth) {
52
+ const map = {};
53
+ resizedColIndexs.forEach((colIndex => {
54
+ if ("number" != typeof colIndex) return;
55
+ const w = table.getColWidth(colIndex);
56
+ "number" == typeof w && (map[colIndex] = w);
57
+ })), state.prevResizedColWidthsSnapshot = map;
58
+ } else state.prevResizedColWidthsSnapshot = null;
59
+ } catch (_l) {
60
+ state.prevResizedColWidthsSnapshot = null;
61
+ }
62
+ if ((null === (_j = null == options ? void 0 : options.formulaManager) || void 0 === _j ? void 0 : _j.exportFormulas) && options.sheetKey) try {
63
+ const formulas = options.formulaManager.exportFormulas(options.sheetKey);
64
+ state.prevFormulasSnapshot = formulas ? Object.assign({}, formulas) : null;
65
+ } catch (_m) {
66
+ state.prevFormulasSnapshot = null;
67
+ } else state.prevFormulasSnapshot = null;
68
+ }
69
+
70
+ function cloneRecord(record) {
71
+ return Array.isArray(record) ? record.slice() : record && "object" == typeof record ? Object.assign({}, record) : record;
72
+ }
73
+
74
+ Object.defineProperty(exports, "__esModule", {
75
+ value: !0
76
+ }), exports.cloneRecord = exports.captureSnapshot = exports.cloneDeep = void 0,
77
+ exports.cloneDeep = cloneDeep, exports.captureSnapshot = captureSnapshot, exports.cloneRecord = cloneRecord;
78
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/history/snapshot.ts"],"names":[],"mappings":"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","file":"snapshot.js","sourcesContent":["import type { ListTable, TYPES } from '@visactor/vtable';\n\nexport interface SnapshotState {\n prevColumnsSnapshot: TYPES.ColumnDefine[] | null;\n prevMergeSnapshot: TYPES.CustomMergeCellArray | undefined;\n prevRecordsSnapshot: any[] | null;\n prevFormulasSnapshot?: Record<string, string> | null;\n prevResizedRowHeightsSnapshot?: Record<number, number> | null;\n prevResizedColWidthsSnapshot?: Record<number, number> | null;\n}\n\n// 轻量深拷贝:用于把 VTable 的 columns 配置快照化,避免撤销时被后续原地修改污染。\nexport function cloneDeep<T>(input: T, cache: WeakMap<object, any> = new WeakMap()): T {\n if (input === null || input === undefined) {\n return input;\n }\n const t = typeof input;\n if (t === 'function' || t !== 'object') {\n return input;\n }\n const obj = input as any;\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as any;\n }\n if (obj instanceof RegExp) {\n return new RegExp(obj) as any;\n }\n if (cache.has(obj)) {\n return cache.get(obj);\n }\n if (Array.isArray(obj)) {\n const arr: any[] = [];\n cache.set(obj, arr);\n for (let i = 0; i < obj.length; i++) {\n arr[i] = cloneDeep(obj[i], cache);\n }\n return arr as any;\n }\n const out: Record<string, any> = {};\n cache.set(obj, out);\n Object.keys(obj).forEach(key => {\n out[key] = cloneDeep(obj[key], cache);\n });\n return out as any;\n}\n\nexport function captureSnapshot(\n table: ListTable,\n state: SnapshotState,\n options?: { formulaManager?: any; sheetKey?: string }\n): void {\n const tableOptions: any = table.options || {};\n\n // columns / merge / records 都是“下一次事件”的变更前状态来源,必须快照化。\n const columns = tableOptions.columns as TYPES.ColumnDefine[] | undefined;\n if (Array.isArray(columns)) {\n state.prevColumnsSnapshot = columns.map(c => cloneDeep(c));\n } else {\n state.prevColumnsSnapshot = null;\n }\n\n const merge = tableOptions.customMergeCell as TYPES.CustomMergeCellArray | undefined;\n if (Array.isArray(merge)) {\n state.prevMergeSnapshot = merge.map(m => ({\n ...m,\n range: {\n start: { ...m.range.start },\n end: { ...m.range.end }\n }\n }));\n } else {\n state.prevMergeSnapshot = merge;\n }\n\n const records = (table.records || []) as any[];\n if (Array.isArray(records)) {\n state.prevRecordsSnapshot = records.map(r => cloneRecord(r));\n } else {\n state.prevRecordsSnapshot = null;\n }\n\n try {\n const resizedRowIndexs = Array.from((table as any).internalProps?._heightResizedRowMap?.keys?.() ?? []);\n if (resizedRowIndexs.length && typeof (table as any).getRowHeight === 'function') {\n const map: Record<number, number> = {};\n resizedRowIndexs.forEach((rowIndex: any) => {\n if (typeof rowIndex !== 'number') {\n return;\n }\n const h = (table as any).getRowHeight(rowIndex);\n if (typeof h === 'number') {\n map[rowIndex] = h;\n }\n });\n state.prevResizedRowHeightsSnapshot = map;\n } else {\n state.prevResizedRowHeightsSnapshot = null;\n }\n } catch {\n state.prevResizedRowHeightsSnapshot = null;\n }\n\n try {\n const resizedColIndexs = Array.from((table as any).internalProps?._widthResizedColMap?.keys?.() ?? []);\n if (resizedColIndexs.length && typeof (table as any).getColWidth === 'function') {\n const map: Record<number, number> = {};\n resizedColIndexs.forEach((colIndex: any) => {\n if (typeof colIndex !== 'number') {\n return;\n }\n const w = (table as any).getColWidth(colIndex);\n if (typeof w === 'number') {\n map[colIndex] = w;\n }\n });\n state.prevResizedColWidthsSnapshot = map;\n } else {\n state.prevResizedColWidthsSnapshot = null;\n }\n } catch {\n state.prevResizedColWidthsSnapshot = null;\n }\n\n // 仅在 vtable-sheet 场景下可用:用于删除列撤销时恢复公式关系。\n if (options?.formulaManager?.exportFormulas && options.sheetKey) {\n try {\n const formulas = options.formulaManager.exportFormulas(options.sheetKey);\n state.prevFormulasSnapshot = formulas ? { ...formulas } : null;\n } catch {\n state.prevFormulasSnapshot = null;\n }\n } else {\n state.prevFormulasSnapshot = null;\n }\n}\n\nexport function cloneRecord(record: any): any {\n if (Array.isArray(record)) {\n return record.slice();\n }\n if (record && typeof record === 'object') {\n return { ...record };\n }\n return record;\n}\n"]}
@@ -0,0 +1,105 @@
1
+ import type { ListTable, TYPES } from '@visactor/vtable';
2
+ export interface HistoryPluginOptions {
3
+ id?: string;
4
+ maxHistory?: number;
5
+ enableCompression?: boolean;
6
+ onTransactionPushed?: (args: {
7
+ tx: HistoryTransaction;
8
+ sheetKey?: string;
9
+ table?: ListTable;
10
+ }) => void;
11
+ }
12
+ export type HistoryCommandType = 'cell' | 'cells' | 'merge_cells' | 'filter' | 'sort' | 'add_record' | 'delete_record' | 'update_record' | 'add_column' | 'delete_column' | 'change_header_position' | 'resize_row' | 'resize_column';
13
+ export interface CellChange {
14
+ row: number;
15
+ col: number;
16
+ oldContent: any;
17
+ newContent: any;
18
+ }
19
+ export interface BaseCommand {
20
+ type: HistoryCommandType;
21
+ sheetKey?: string;
22
+ }
23
+ export interface CellCommand extends BaseCommand {
24
+ type: 'cell' | 'cells';
25
+ cells: CellChange[];
26
+ }
27
+ export interface MergeCellsCommand extends BaseCommand {
28
+ type: 'merge_cells';
29
+ startCol: number;
30
+ startRow: number;
31
+ endCol: number;
32
+ endRow: number;
33
+ oldCustomMergeCell: any;
34
+ newCustomMergeCell: any;
35
+ }
36
+ export interface FilterCommand extends BaseCommand {
37
+ type: 'filter';
38
+ pluginId: string;
39
+ oldSnapshot: any;
40
+ newSnapshot: any;
41
+ }
42
+ export interface SortCommand extends BaseCommand {
43
+ type: 'sort';
44
+ oldSortState: TYPES.SortState | TYPES.SortState[] | null;
45
+ newSortState: TYPES.SortState | TYPES.SortState[] | null;
46
+ }
47
+ export interface AddRecordCommand extends BaseCommand {
48
+ type: 'add_record';
49
+ records: any[];
50
+ recordIndex?: number | number[];
51
+ recordCount: number;
52
+ rawInsertIndex?: number;
53
+ anchorBefore?: any;
54
+ anchorAfter?: any;
55
+ }
56
+ export interface DeleteRecordCommand extends BaseCommand {
57
+ type: 'delete_record';
58
+ records: any[];
59
+ recordIndexs: (number | number[])[];
60
+ deletedRowHeights?: Record<number, number>;
61
+ oldCustomMergeCell?: any;
62
+ newCustomMergeCell?: any;
63
+ }
64
+ export interface UpdateRecordCommand extends BaseCommand {
65
+ type: 'update_record';
66
+ oldRecords: any[];
67
+ newRecords: any[];
68
+ recordIndexs: (number | number[])[];
69
+ }
70
+ export interface AddColumnCommand extends BaseCommand {
71
+ type: 'add_column';
72
+ columnIndex: number;
73
+ columnCount: number;
74
+ columns: TYPES.ColumnDefine[];
75
+ }
76
+ export interface DeleteColumnCommand extends BaseCommand {
77
+ type: 'delete_column';
78
+ deleteColIndexs: number[];
79
+ columns: TYPES.ColumnDefine[];
80
+ deletedRecordValues?: any[][];
81
+ deletedFormulas?: Record<string, string>;
82
+ deletedColWidths?: Record<number, number>;
83
+ }
84
+ export interface ChangeHeaderPositionCommand extends BaseCommand {
85
+ type: 'change_header_position';
86
+ moving: 'column' | 'row';
87
+ sourceIndex: number;
88
+ targetIndex: number;
89
+ }
90
+ export interface ResizeRowCommand extends BaseCommand {
91
+ type: 'resize_row';
92
+ row: number;
93
+ oldHeight: number;
94
+ newHeight: number;
95
+ }
96
+ export interface ResizeColumnCommand extends BaseCommand {
97
+ type: 'resize_column';
98
+ col: number;
99
+ oldWidth: number;
100
+ newWidth: number;
101
+ }
102
+ export type HistoryCommand = CellCommand | MergeCellsCommand | FilterCommand | SortCommand | AddRecordCommand | DeleteRecordCommand | UpdateRecordCommand | AddColumnCommand | DeleteColumnCommand | ChangeHeaderPositionCommand | ResizeRowCommand | ResizeColumnCommand;
103
+ export interface HistoryTransaction {
104
+ commands: HistoryCommand[];
105
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/history/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["import type { ListTable, TYPES } from '@visactor/vtable';\n\nexport interface HistoryPluginOptions {\n id?: string;\n maxHistory?: number;\n enableCompression?: boolean;\n onTransactionPushed?: (args: { tx: HistoryTransaction; sheetKey?: string; table?: ListTable }) => void;\n}\n\n// 命令是 HistoryPlugin 最小回放单元;事务(transaction)是一次 undo/redo 的原子操作。\nexport type HistoryCommandType =\n | 'cell'\n | 'cells'\n | 'merge_cells'\n | 'filter'\n | 'sort'\n | 'add_record'\n | 'delete_record'\n | 'update_record'\n | 'add_column'\n | 'delete_column'\n | 'change_header_position'\n | 'resize_row'\n | 'resize_column';\n\nexport interface CellChange {\n row: number;\n col: number;\n oldContent: any;\n newContent: any;\n}\n\nexport interface BaseCommand {\n type: HistoryCommandType;\n sheetKey?: string;\n}\n\nexport interface CellCommand extends BaseCommand {\n type: 'cell' | 'cells';\n cells: CellChange[];\n}\n\nexport interface MergeCellsCommand extends BaseCommand {\n type: 'merge_cells';\n startCol: number;\n startRow: number;\n endCol: number;\n endRow: number;\n oldCustomMergeCell: any;\n newCustomMergeCell: any;\n}\n\nexport interface FilterCommand extends BaseCommand {\n type: 'filter';\n pluginId: string;\n oldSnapshot: any;\n newSnapshot: any;\n}\n\nexport interface SortCommand extends BaseCommand {\n type: 'sort';\n oldSortState: TYPES.SortState | TYPES.SortState[] | null;\n newSortState: TYPES.SortState | TYPES.SortState[] | null;\n}\n\nexport interface AddRecordCommand extends BaseCommand {\n type: 'add_record';\n records: any[];\n recordIndex?: number | number[];\n recordCount: number;\n rawInsertIndex?: number;\n anchorBefore?: any;\n anchorAfter?: any;\n}\n\nexport interface DeleteRecordCommand extends BaseCommand {\n type: 'delete_record';\n records: any[];\n recordIndexs: (number | number[])[];\n deletedRowHeights?: Record<number, number>;\n oldCustomMergeCell?: any;\n newCustomMergeCell?: any;\n}\n\nexport interface UpdateRecordCommand extends BaseCommand {\n type: 'update_record';\n oldRecords: any[];\n newRecords: any[];\n recordIndexs: (number | number[])[];\n}\n\nexport interface AddColumnCommand extends BaseCommand {\n type: 'add_column';\n columnIndex: number;\n columnCount: number;\n columns: TYPES.ColumnDefine[];\n}\n\nexport interface DeleteColumnCommand extends BaseCommand {\n type: 'delete_column';\n deleteColIndexs: number[];\n columns: TYPES.ColumnDefine[];\n // 仅二维数组 records 场景需要:恢复被 splice 掉的列值。\n deletedRecordValues?: any[][];\n // vtable-sheet 场景需要:恢复被删除列上的公式关系(A1 -> formula)。\n deletedFormulas?: Record<string, string>;\n deletedColWidths?: Record<number, number>;\n}\n\nexport interface ChangeHeaderPositionCommand extends BaseCommand {\n type: 'change_header_position';\n moving: 'column' | 'row';\n sourceIndex: number;\n targetIndex: number;\n}\n\nexport interface ResizeRowCommand extends BaseCommand {\n type: 'resize_row';\n row: number;\n oldHeight: number;\n newHeight: number;\n}\n\nexport interface ResizeColumnCommand extends BaseCommand {\n type: 'resize_column';\n col: number;\n oldWidth: number;\n newWidth: number;\n}\n\nexport type HistoryCommand =\n | CellCommand\n | MergeCellsCommand\n | FilterCommand\n | SortCommand\n | AddRecordCommand\n | DeleteRecordCommand\n | UpdateRecordCommand\n | AddColumnCommand\n | DeleteColumnCommand\n | ChangeHeaderPositionCommand\n | ResizeRowCommand\n | ResizeColumnCommand;\n\nexport interface HistoryTransaction {\n commands: HistoryCommand[];\n}\n"]}
@@ -0,0 +1 @@
1
+ export * from './history';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
4
+ void 0 === k2 && (k2 = k);
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
7
+ enumerable: !0,
8
+ get: function() {
9
+ return m[k];
10
+ }
11
+ }), Object.defineProperty(o, k2, desc);
12
+ } : function(o, m, k, k2) {
13
+ void 0 === k2 && (k2 = k), o[k2] = m[k];
14
+ }), __exportStar = this && this.__exportStar || function(m, exports) {
15
+ for (var p in m) "default" === p || Object.prototype.hasOwnProperty.call(exports, p) || __createBinding(exports, m, p);
16
+ };
17
+
18
+ Object.defineProperty(exports, "__esModule", {
19
+ value: !0
20
+ }), __exportStar(require("./history"), exports);
21
+ //# sourceMappingURL=history-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/history-plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B","file":"history-plugin.js","sourcesContent":["export * from './history';\n"]}
package/cjs/index.d.ts CHANGED
@@ -20,3 +20,4 @@ export * from './context-menu';
20
20
  export * from './filter';
21
21
  export * from './table-export';
22
22
  export * from './auto-fill';
23
+ export * from './history-plugin';
package/cjs/index.js CHANGED
@@ -27,5 +27,6 @@ __exportStar(require("./gantt-export-image"), exports), __exportStar(require("./
27
27
  __exportStar(require("./wps-fill-handle"), exports), __exportStar(require("./master-detail-plugin"), exports),
28
28
  __exportStar(require("./excel-import"), exports), __exportStar(require("./table-series-number"), exports),
29
29
  __exportStar(require("./context-menu"), exports), __exportStar(require("./filter"), exports),
30
- __exportStar(require("./table-export"), exports), __exportStar(require("./auto-fill"), exports);
30
+ __exportStar(require("./table-export"), exports), __exportStar(require("./auto-fill"), exports),
31
+ __exportStar(require("./history-plugin"), exports);
31
32
  //# sourceMappingURL=index.js.map
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,qDAAmC;AACnC,qDAAmC;AACnC,mDAAiC;AACjC,kDAAgC;AAChC,+CAA6B;AAC7B,sEAAoD;AACpD,6DAA2C;AAC3C,0CAAwB;AACxB,oDAAkC;AAClC,6DAA2C;AAC3C,iDAA+B;AAC/B,uDAAqC;AACrC,yDAAuC;AACvC,oDAAkC;AAClC,yDAAuC;AACvC,iDAA+B;AAC/B,wDAAsC;AACtC,iDAA+B;AAC/B,2CAAyB;AACzB,iDAA+B;AAC/B,8CAA4B","file":"index.js","sourcesContent":["export * from './carousel-animation';\nexport * from './invert-highlight';\nexport * from './header-highlight';\nexport * from './add-row-column';\nexport * from './column-series';\nexport * from './row-series';\nexport * from './highlight-header-when-select-cell';\nexport * from './excel-edit-cell-keyboard';\nexport * from './types';\nexport * from './focus-highlight';\nexport * from './table-carousel-animation';\nexport * from './rotate-table';\nexport * from './gantt-export-image';\nexport * from './paste-add-row-column';\nexport * from './wps-fill-handle';\nexport * from './master-detail-plugin';\nexport * from './excel-import';\nexport * from './table-series-number';\nexport * from './context-menu';\nexport * from './filter';\nexport * from './table-export';\nexport * from './auto-fill';\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,qDAAmC;AACnC,qDAAmC;AACnC,mDAAiC;AACjC,kDAAgC;AAChC,+CAA6B;AAC7B,sEAAoD;AACpD,6DAA2C;AAC3C,0CAAwB;AACxB,oDAAkC;AAClC,6DAA2C;AAC3C,iDAA+B;AAC/B,uDAAqC;AACrC,yDAAuC;AACvC,oDAAkC;AAClC,yDAAuC;AACvC,iDAA+B;AAC/B,wDAAsC;AACtC,iDAA+B;AAC/B,2CAAyB;AACzB,iDAA+B;AAC/B,8CAA4B;AAC5B,mDAAiC","file":"index.js","sourcesContent":["export * from './carousel-animation';\nexport * from './invert-highlight';\nexport * from './header-highlight';\nexport * from './add-row-column';\nexport * from './column-series';\nexport * from './row-series';\nexport * from './highlight-header-when-select-cell';\nexport * from './excel-edit-cell-keyboard';\nexport * from './types';\nexport * from './focus-highlight';\nexport * from './table-carousel-animation';\nexport * from './rotate-table';\nexport * from './gantt-export-image';\nexport * from './paste-add-row-column';\nexport * from './wps-fill-handle';\nexport * from './master-detail-plugin';\nexport * from './excel-import';\nexport * from './table-series-number';\nexport * from './context-menu';\nexport * from './filter';\nexport * from './table-export';\nexport * from './auto-fill';\nexport * from './history-plugin';\n"]}
@@ -101,5 +101,5 @@ function updateAllSubTableCheckboxes(subTable, field, checked) {
101
101
  }
102
102
  }
103
103
 
104
+ exports.bindMasterDetailCheckboxChange = bindMasterDetailCheckboxChange;
104
105
  //# sourceMappingURL=checkbox.js.map
105
- exports.bindMasterDetailCheckboxChange = bindMasterDetailCheckboxChange;
@@ -178,4 +178,4 @@ class ConfigManager {
178
178
  }
179
179
 
180
180
  exports.ConfigManager = ConfigManager;
181
- //# sourceMappingURL=config.js.map
181
+ //# sourceMappingURL=config.js.map
@@ -327,4 +327,4 @@ class MasterDetailPlugin {
327
327
  }
328
328
 
329
329
  exports.MasterDetailPlugin = MasterDetailPlugin;
330
- //# sourceMappingURL=core.js.map
330
+ //# sourceMappingURL=core.js.map
@@ -262,4 +262,4 @@ class EventManager {
262
262
  }
263
263
 
264
264
  exports.EventManager = EventManager;
265
- //# sourceMappingURL=events.js.map
265
+ //# sourceMappingURL=events.js.map
@@ -1,5 +1,5 @@
1
1
  import type * as VTable from '@visactor/vtable';
2
- import type { Group } from '@visactor/vtable/src/vrender';
2
+ import type { Group } from '@visactor/vtable';
3
3
  export interface DetailTableOptions extends VTable.ListTableConstructorOptions {
4
4
  style?: {
5
5
  margin?: number | [number, number] | [number, number, number, number];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/master-detail-plugin/types.ts"],"names":[],"mappings":";;;AA+EA,SAAgB,iBAAiB,CAAC,CAAkB,EAAE,CAAkB;IACtE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QAClD,OAAO,CAAC,KAAK,CAAC,CAAC;KAChB;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACxC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;KAC3E;IAED,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC7C,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;KACrC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QAC7C,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;KACrC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAfD,8CAeC;AAKD,SAAgB,mBAAmB,CAAC,KAA4B,EAAE,MAAuB;IACvF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7D,CAAC;AAFD,kDAEC;AAKD,SAAgB,uBAAuB,CAAC,KAA4B,EAAE,MAAuB;IAC3F,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAClE,CAAC;AAFD,0DAEC","file":"types.js","sourcesContent":["import type * as VTable from '@visactor/vtable';\r\nimport type { Group } from '@visactor/vtable/src/vrender';\r\n\r\n/** 子表配置接口 - 继承 ListTableConstructorOptions */\r\nexport interface DetailTableOptions extends VTable.ListTableConstructorOptions {\r\n style?: {\r\n margin?: number | [number, number] | [number, number, number, number];\r\n height?: number | 'auto';\r\n };\r\n}\r\n\r\n/**\r\n * 主从表插件配置选项\r\n */\r\nexport interface MasterDetailPluginOptions {\r\n /** 是否启用checkbox级联功能 - 控制主从表之间的复选框联动,默认为 true */\r\n enableCheckboxCascade?: boolean;\r\n /** 子表数据的字段名 - 用于指定记录中子表数据所在的属性名,默认为 'children' */\r\n childrenKey?: string;\r\n /** 子表配置 - 可以是静态配置对象或动态配置函数 */\r\n detailTableOptions?: DetailTableOptions | ((params: { data: unknown; bodyRowIndex: number }) => DetailTableOptions);\r\n}\r\n\r\n/**\r\n * 子表checkbox状态接口\r\n */\r\nexport interface SubTableCheckboxState {\r\n checkedState: Record<string, Record<string | number, boolean | 'indeterminate'>>;\r\n headerCheckedState: Record<string | number, boolean | 'indeterminate'>;\r\n}\r\n\r\n/**\r\n * 内部属性扩展接口\r\n */\r\nexport interface InternalProps {\r\n expandedRecordIndices: (number | number[])[];\r\n subTableInstances: Map<number, VTable.ListTable>;\r\n originalRowHeights: Map<number, number>;\r\n _tempExpandedRecordIndices?: (number | number[])[];\r\n subTableCheckboxStates?: Map<number, SubTableCheckboxState>;\r\n}\r\n\r\n/**\r\n * 事件数据接口\r\n */\r\nexport interface CellContentWidthEventData {\r\n col: number;\r\n row: number;\r\n distWidth: number;\r\n cellHeight: number;\r\n detaX: number;\r\n autoRowHeight: boolean;\r\n needUpdateRowHeight: boolean;\r\n cellGroup: Group;\r\n padding: [number, number, number, number];\r\n textAlign: CanvasTextAlign;\r\n textBaseline: CanvasTextBaseline;\r\n}\r\n\r\nexport interface SelectBorderHeightEventData {\r\n startRow: number;\r\n endRow: number;\r\n currentHeight: number;\r\n selectComp: { rect: unknown; fillhandle?: unknown; role: string };\r\n}\r\n\r\n/**\r\n * 懒加载状态枚举\r\n */\r\nexport type LazyLoadState = 'loading' | 'loaded' | 'error';\r\n\r\n/**\r\n * 记录索引类型 - 支持单个数字或数字数组\r\n */\r\nexport type RecordIndexType = number | number[];\r\n\r\n/**\r\n * 工具函数:比较两个记录索引是否相等\r\n */\r\nexport function recordIndexEquals(a: RecordIndexType, b: RecordIndexType): boolean {\r\n if (typeof a === 'number' && typeof b === 'number') {\r\n return a === b;\r\n }\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n return a.length === b.length && a.every((val, index) => val === b[index]);\r\n }\r\n // 一个是数字,一个是数组的情况\r\n if (typeof a === 'number' && Array.isArray(b)) {\r\n return b.length === 1 && b[0] === a;\r\n }\r\n if (Array.isArray(a) && typeof b === 'number') {\r\n return a.length === 1 && a[0] === b;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * 工具函数:检查记录索引数组中是否包含指定索引\r\n */\r\nexport function includesRecordIndex(array: (number | number[])[], target: RecordIndexType): boolean {\r\n return array.some(item => recordIndexEquals(item, target));\r\n}\r\n\r\n/**\r\n * 工具函数:在记录索引数组中查找指定索引的位置\r\n */\r\nexport function findRecordIndexPosition(array: (number | number[])[], target: RecordIndexType): number {\r\n return array.findIndex(item => recordIndexEquals(item, target));\r\n}\r\n\r\n/**\r\n * 子表事件信息接口\r\n */\r\nexport interface SubTableEventInfo {\r\n /** 子表事件类型 */\r\n eventType: keyof typeof VTable.TABLE_EVENT_TYPE;\r\n /** 主表行索引(不包含表头) */\r\n masterBodyRowIndex: number;\r\n /** 主表行索引(包含表头) */\r\n masterRowIndex: number;\r\n /** 子表实例 */\r\n subTable: unknown;\r\n /** 原始事件数据 */\r\n originalEventArgs?: unknown;\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/master-detail-plugin/types.ts"],"names":[],"mappings":";;;AAgFA,SAAgB,iBAAiB,CAAC,CAAkB,EAAE,CAAkB;IACtE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QAClD,OAAO,CAAC,KAAK,CAAC,CAAC;KAChB;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACxC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;KAC3E;IAED,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC7C,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;KACrC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QAC7C,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;KACrC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAfD,8CAeC;AAKD,SAAgB,mBAAmB,CAAC,KAA4B,EAAE,MAAuB;IACvF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7D,CAAC;AAFD,kDAEC;AAKD,SAAgB,uBAAuB,CAAC,KAA4B,EAAE,MAAuB;IAC3F,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAClE,CAAC;AAFD,0DAEC","file":"types.js","sourcesContent":["import type * as VTable from '@visactor/vtable';\r\n// Group 属于 vrender 的图形容器类型;通过 @visactor/vtable 根导出透传,避免引用 vtable 内部路径。\r\nimport type { Group } from '@visactor/vtable';\r\n\r\n/** 子表配置接口 - 继承 ListTableConstructorOptions */\r\nexport interface DetailTableOptions extends VTable.ListTableConstructorOptions {\r\n style?: {\r\n margin?: number | [number, number] | [number, number, number, number];\r\n height?: number | 'auto';\r\n };\r\n}\r\n\r\n/**\r\n * 主从表插件配置选项\r\n */\r\nexport interface MasterDetailPluginOptions {\r\n /** 是否启用checkbox级联功能 - 控制主从表之间的复选框联动,默认为 true */\r\n enableCheckboxCascade?: boolean;\r\n /** 子表数据的字段名 - 用于指定记录中子表数据所在的属性名,默认为 'children' */\r\n childrenKey?: string;\r\n /** 子表配置 - 可以是静态配置对象或动态配置函数 */\r\n detailTableOptions?: DetailTableOptions | ((params: { data: unknown; bodyRowIndex: number }) => DetailTableOptions);\r\n}\r\n\r\n/**\r\n * 子表checkbox状态接口\r\n */\r\nexport interface SubTableCheckboxState {\r\n checkedState: Record<string, Record<string | number, boolean | 'indeterminate'>>;\r\n headerCheckedState: Record<string | number, boolean | 'indeterminate'>;\r\n}\r\n\r\n/**\r\n * 内部属性扩展接口\r\n */\r\nexport interface InternalProps {\r\n expandedRecordIndices: (number | number[])[];\r\n subTableInstances: Map<number, VTable.ListTable>;\r\n originalRowHeights: Map<number, number>;\r\n _tempExpandedRecordIndices?: (number | number[])[];\r\n subTableCheckboxStates?: Map<number, SubTableCheckboxState>;\r\n}\r\n\r\n/**\r\n * 事件数据接口\r\n */\r\nexport interface CellContentWidthEventData {\r\n col: number;\r\n row: number;\r\n distWidth: number;\r\n cellHeight: number;\r\n detaX: number;\r\n autoRowHeight: boolean;\r\n needUpdateRowHeight: boolean;\r\n cellGroup: Group;\r\n padding: [number, number, number, number];\r\n textAlign: CanvasTextAlign;\r\n textBaseline: CanvasTextBaseline;\r\n}\r\n\r\nexport interface SelectBorderHeightEventData {\r\n startRow: number;\r\n endRow: number;\r\n currentHeight: number;\r\n selectComp: { rect: unknown; fillhandle?: unknown; role: string };\r\n}\r\n\r\n/**\r\n * 懒加载状态枚举\r\n */\r\nexport type LazyLoadState = 'loading' | 'loaded' | 'error';\r\n\r\n/**\r\n * 记录索引类型 - 支持单个数字或数字数组\r\n */\r\nexport type RecordIndexType = number | number[];\r\n\r\n/**\r\n * 工具函数:比较两个记录索引是否相等\r\n */\r\nexport function recordIndexEquals(a: RecordIndexType, b: RecordIndexType): boolean {\r\n if (typeof a === 'number' && typeof b === 'number') {\r\n return a === b;\r\n }\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n return a.length === b.length && a.every((val, index) => val === b[index]);\r\n }\r\n // 一个是数字,一个是数组的情况\r\n if (typeof a === 'number' && Array.isArray(b)) {\r\n return b.length === 1 && b[0] === a;\r\n }\r\n if (Array.isArray(a) && typeof b === 'number') {\r\n return a.length === 1 && a[0] === b;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * 工具函数:检查记录索引数组中是否包含指定索引\r\n */\r\nexport function includesRecordIndex(array: (number | number[])[], target: RecordIndexType): boolean {\r\n return array.some(item => recordIndexEquals(item, target));\r\n}\r\n\r\n/**\r\n * 工具函数:在记录索引数组中查找指定索引的位置\r\n */\r\nexport function findRecordIndexPosition(array: (number | number[])[], target: RecordIndexType): number {\r\n return array.findIndex(item => recordIndexEquals(item, target));\r\n}\r\n\r\n/**\r\n * 子表事件信息接口\r\n */\r\nexport interface SubTableEventInfo {\r\n /** 子表事件类型 */\r\n eventType: keyof typeof VTable.TABLE_EVENT_TYPE;\r\n /** 主表行索引(不包含表头) */\r\n masterBodyRowIndex: number;\r\n /** 主表行索引(包含表头) */\r\n masterRowIndex: number;\r\n /** 子表实例 */\r\n subTable: unknown;\r\n /** 原始事件数据 */\r\n originalEventArgs?: unknown;\r\n}\r\n"]}
@@ -1,7 +1,7 @@
1
- import { vglobal } from '@visactor/vtable/es/vrender';
2
- import type { BaseTable } from '@visactor/vtable/src/core/BaseTable';
1
+ import { vglobal } from '@visactor/vtable';
3
2
  import type { ListTable, pluginsDefinition, BaseTableAPI } from '@visactor/vtable';
4
- import type { TableEvents } from '@visactor/vtable/src/core/TABLE_EVENT_TYPE';
3
+ import { TABLE_EVENT_TYPE } from '@visactor/vtable';
4
+ type TableEventType = typeof TABLE_EVENT_TYPE[keyof typeof TABLE_EVENT_TYPE];
5
5
  import type { EventArg } from './types';
6
6
  declare module '@visactor/vtable' {
7
7
  interface ListTableAll {
@@ -22,8 +22,9 @@ export declare class RotateTablePlugin implements pluginsDefinition.IVTablePlugi
22
22
  matrix: Matrix;
23
23
  vglobal_mapToCanvasPoint: typeof vglobal.mapToCanvasPoint;
24
24
  constructor(pluginOptions?: IRotateTablePluginOptions);
25
- run(...args: [EventArg, TableEvents[keyof TableEvents] | TableEvents[keyof TableEvents][], BaseTableAPI]): void;
25
+ run(...args: [EventArg, TableEventType | TableEventType[], BaseTableAPI]): void;
26
26
  release(): void;
27
27
  }
28
- export declare function rotate90WithTransform(this: BaseTable, rotateDom: HTMLElement): void;
29
- export declare function cancelTransform(this: BaseTable, rotateDom: HTMLElement): void;
28
+ export declare function rotate90WithTransform(this: ListTable, rotateDom: HTMLElement): void;
29
+ export declare function cancelTransform(this: ListTable, rotateDom: HTMLElement): void;
30
+ export {};
@@ -4,12 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.cancelTransform = exports.rotate90WithTransform = exports.RotateTablePlugin = void 0;
6
6
 
7
- const vrender_1 = require("@visactor/vtable/es/vrender"), vtable_1 = require("@visactor/vtable");
7
+ const vtable_1 = require("@visactor/vtable"), vtable_2 = require("@visactor/vtable");
8
8
 
9
9
  class RotateTablePlugin {
10
10
  constructor(pluginOptions) {
11
11
  var _a;
12
- this.id = "rotate-table", this.name = "Rotate Table", this.runTime = [ vtable_1.TABLE_EVENT_TYPE.INITIALIZED ],
12
+ this.id = "rotate-table", this.name = "Rotate Table", this.runTime = [ vtable_2.TABLE_EVENT_TYPE.INITIALIZED ],
13
13
  this.id = null !== (_a = null == pluginOptions ? void 0 : pluginOptions.id) && void 0 !== _a ? _a : this.id;
14
14
  }
15
15
  run(...args) {
@@ -33,18 +33,18 @@ function rotate90WithTransform(rotateDom) {
33
33
  const viewPortWidth = ("undefined" != typeof window ? {
34
34
  width: window.innerWidth || document.documentElement.clientWidth,
35
35
  height: window.innerHeight || document.documentElement.clientHeight
36
- } : rotateDom.getBoundingClientRect()).width, domRect = this.getElement().getBoundingClientRect(), x1 = domRect.top, y1 = viewPortWidth - domRect.right, matrix = vrender_1.matrixAllocate.allocate(1, 0, 0, 1, 0, 0);
36
+ } : rotateDom.getBoundingClientRect()).width, domRect = this.getElement().getBoundingClientRect(), x1 = domRect.top, y1 = viewPortWidth - domRect.right, matrix = vtable_1.matrixAllocate.allocate(1, 0, 0, 1, 0, 0);
37
37
  matrix.translate(x1, y1);
38
38
  const centerX = rotateCenter - x1, centerY = rotateCenter - y1;
39
39
  matrix.translate(centerX, centerY), matrix.rotate(Math.PI / 2), matrix.translate(-centerX, -centerY);
40
40
  const rotateRablePlugin = this.pluginManager.getPluginByName("Rotate Table");
41
41
  return rotateRablePlugin && (rotateRablePlugin.matrix = matrix), matrix;
42
42
  };
43
- (0, vrender_1.registerGlobalEventTransformer)(vrender_1.vglobal, this.getElement(), getMatrix, getRect, vrender_1.transformPointForCanvas),
44
- (0, vrender_1.registerWindowEventTransformer)(this.scenegraph.stage.window, this.getElement(), getMatrix, getRect, vrender_1.transformPointForCanvas);
43
+ (0, vtable_1.registerGlobalEventTransformer)(vtable_1.vglobal, this.getElement(), getMatrix, getRect, vtable_1.transformPointForCanvas),
44
+ (0, vtable_1.registerWindowEventTransformer)(this.scenegraph.stage.window, this.getElement(), getMatrix, getRect, vtable_1.transformPointForCanvas);
45
45
  const rotateRablePlugin = this.pluginManager.getPluginByName("Rotate Table");
46
- rotateRablePlugin && (rotateRablePlugin.vglobal_mapToCanvasPoint = vrender_1.vglobal.mapToCanvasPoint),
47
- vrender_1.vglobal.mapToCanvasPoint = vrender_1.mapToCanvasPointForCanvas;
46
+ rotateRablePlugin && (rotateRablePlugin.vglobal_mapToCanvasPoint = vtable_1.vglobal.mapToCanvasPoint),
47
+ vtable_1.vglobal.mapToCanvasPoint = vtable_1.mapToCanvasPointForCanvas;
48
48
  }
49
49
 
50
50
  function cancelTransform(rotateDom) {
@@ -55,15 +55,14 @@ function cancelTransform(rotateDom) {
55
55
  x2: x2,
56
56
  y2: y2
57
57
  }), getMatrix = () => {
58
- const matrix = vrender_1.matrixAllocate.allocate(1, 0, 0, 1, 0, 0);
58
+ const matrix = vtable_1.matrixAllocate.allocate(1, 0, 0, 1, 0, 0);
59
59
  return matrix.translate(x1, y1), matrix;
60
60
  };
61
- (0, vrender_1.registerGlobalEventTransformer)(vrender_1.vglobal, this.getElement(), getMatrix, getRect, vrender_1.transformPointForCanvas),
62
- (0, vrender_1.registerWindowEventTransformer)(this.scenegraph.stage.window, this.getElement(), getMatrix, getRect, vrender_1.transformPointForCanvas);
61
+ (0, vtable_1.registerGlobalEventTransformer)(vtable_1.vglobal, this.getElement(), getMatrix, getRect, vtable_1.transformPointForCanvas),
62
+ (0, vtable_1.registerWindowEventTransformer)(this.scenegraph.stage.window, this.getElement(), getMatrix, getRect, vtable_1.transformPointForCanvas);
63
63
  const rotateRablePlugin = this.pluginManager.getPluginByName("Rotate Table");
64
- rotateRablePlugin && (vrender_1.vglobal.mapToCanvasPoint = rotateRablePlugin.vglobal_mapToCanvasPoint);
64
+ rotateRablePlugin && (vtable_1.vglobal.mapToCanvasPoint = rotateRablePlugin.vglobal_mapToCanvasPoint);
65
65
  }
66
66
 
67
67
  exports.RotateTablePlugin = RotateTablePlugin, exports.rotate90WithTransform = rotate90WithTransform,
68
- exports.cancelTransform = cancelTransform;
69
- //# sourceMappingURL=rotate-table.js.map
68
+ exports.cancelTransform = cancelTransform;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/rotate-table.ts"],"names":[],"mappings":"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","file":"rotate-table.js","sourcesContent":["import {\n matrixAllocate,\n transformPointForCanvas,\n mapToCanvasPointForCanvas,\n registerGlobalEventTransformer,\n registerWindowEventTransformer,\n vglobal\n} from '@visactor/vtable/es/vrender';\nimport type { BaseTable } from '@visactor/vtable/src/core/BaseTable';\nimport type { ListTable, pluginsDefinition, BaseTableAPI } from '@visactor/vtable';\nimport { TABLE_EVENT_TYPE } from '@visactor/vtable';\nimport type { TableEvents } from '@visactor/vtable/src/core/TABLE_EVENT_TYPE';\nimport type { EventArg } from './types';\n\n// Extend the ListTable interface to include the rotation methods\ndeclare module '@visactor/vtable' {\n interface ListTableAll {\n rotate90WithTransform?: (rotateDom: HTMLElement) => void;\n cancelTransform?: (rotateDom: HTMLElement) => void;\n rotateDegree?: number;\n }\n}\nimport type { Matrix } from '@visactor/vutils';\nexport type IRotateTablePluginOptions = {\n id?: string;\n // // 旋转角度\n // rotate?: number;\n};\n/**\n * 旋转表格插件。\n * 业务层旋转功能没有使用收系统接口的话,用的transform:'rotate(90deg)'的设置来达到旋转的目的。vtable及vrender都没有进行坐标处理,这样就会导致交互错乱。\n * 所以需要进行坐标转换,将旋转后的坐标转换后作为VRender及VTable逻辑中用到的坐标。\n * 这里使用transform:'rotate(90deg)'的设置来达到旋转的目的。 其他角度应该也是可以实现的,请自行扩展这个插件并兼容\n */\nexport class RotateTablePlugin implements pluginsDefinition.IVTablePlugin {\n id = `rotate-table`;\n name = 'Rotate Table';\n runTime = [TABLE_EVENT_TYPE.INITIALIZED];\n table: ListTable;\n matrix: Matrix;\n vglobal_mapToCanvasPoint: typeof vglobal.mapToCanvasPoint; // 保存vrender中vglobal的mapToCanvasPoint原方法\n // pluginOptions: IRotateTablePluginOptions;\n constructor(pluginOptions?: IRotateTablePluginOptions) {\n this.id = pluginOptions?.id ?? this.id;\n // this.pluginOptions = pluginOptions;\n }\n run(...args: [EventArg, TableEvents[keyof TableEvents] | TableEvents[keyof TableEvents][], BaseTableAPI]) {\n const table: BaseTableAPI = args[2];\n this.table = table as ListTable;\n //将函数rotate90WithTransform绑定到table实例上,一般情况下插件不需要将api绑定到table实例上,可以直接自身实现某个api功能\n (this.table as any).rotate90WithTransform = rotate90WithTransform.bind(this.table);\n (this.table as any).cancelTransform = cancelTransform.bind(this.table);\n }\n\n release() {\n // 移除绑定的事件\n }\n}\n\n/**\n * 业务层旋转功能没有使用收系统接口的话,用的transform:'rotate(90deg)'的设置来达到旋转的目的。vtable及vrender都没有进行坐标处理,这样就会导致交互错乱。\n * 所以需要进行坐标转换,将旋转后的坐标转换后作为VRender及VTable逻辑中用到的坐标。\n */\nexport function rotate90WithTransform(this: BaseTable, rotateDom: HTMLElement) {\n this.rotateDegree = 90;\n const rotateCenter =\n rotateDom.clientWidth < rotateDom.clientHeight\n ? Math.max(rotateDom.clientWidth, rotateDom.clientHeight) / 2\n : Math.min(rotateDom.clientWidth, rotateDom.clientHeight) / 2;\n const domRect = this.getElement().getBoundingClientRect();\n const x1 = domRect.left;\n const y1 = domRect.top;\n const x2 = domRect.right;\n const y2 = domRect.bottom;\n\n rotateDom.style.transform = 'rotate(90deg)';\n rotateDom.style.transformOrigin = `${rotateCenter}px ${rotateCenter}px`;\n const getRect = () => {\n return {\n x1,\n y1,\n x2,\n y2\n };\n };\n // 获取视口尺寸的通用方法\n const getViewportDimensions = () => {\n // 浏览器环境\n if (typeof window !== 'undefined') {\n return {\n width: window.innerWidth || document.documentElement.clientWidth,\n height: window.innerHeight || document.documentElement.clientHeight\n };\n }\n // 默认使用容器的尺寸\n return rotateDom.getBoundingClientRect();\n };\n\n const getMatrix = () => {\n const viewPortWidth = getViewportDimensions().width; //获取整个视口的尺寸\n const domRect = this.getElement().getBoundingClientRect(); //TODO 这个地方应该获取窗口的宽高 最好能从vglobal上直接获取\n const x1 = domRect.top;\n const y1 = viewPortWidth - domRect.right;\n\n const matrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);\n matrix.translate(x1, y1);\n const centerX = rotateCenter - x1;\n const centerY = rotateCenter - y1;\n matrix.translate(centerX, centerY);\n matrix.rotate(Math.PI / 2);\n matrix.translate(-centerX, -centerY);\n const rotateRablePlugin = this.pluginManager.getPluginByName('Rotate Table');\n if (rotateRablePlugin) {\n (rotateRablePlugin as RotateTablePlugin).matrix = matrix;\n }\n return matrix;\n };\n registerGlobalEventTransformer(vglobal, this.getElement(), getMatrix, getRect as any, transformPointForCanvas);\n registerWindowEventTransformer(\n this.scenegraph.stage.window,\n this.getElement(),\n getMatrix,\n getRect as any,\n transformPointForCanvas\n );\n const rotateRablePlugin = this.pluginManager.getPluginByName('Rotate Table');\n if (rotateRablePlugin) {\n (rotateRablePlugin as RotateTablePlugin).vglobal_mapToCanvasPoint = vglobal.mapToCanvasPoint;\n }\n vglobal.mapToCanvasPoint = mapToCanvasPointForCanvas;\n //transformPointForCanvas和mapToCanvasPointForCanvas时相对应的\n //具体逻辑在 VRender/packages/vrender-core/src/common/event-transformer.ts中\n // 可以自定义这两个函数 来修改事件属性,transformPointForCanvas中将坐标转换后存放了_canvasX _canvasY,mapToCanvasPointForCanvas中加以利用\n // 在VTable的touch文件中,利用到了_canvasX _canvasY 所以如果自定义上面两个函数也需提供_canvasX _canvasY\n}\nexport function cancelTransform(this: BaseTable, rotateDom: HTMLElement) {\n this.rotateDegree = 0;\n rotateDom.style.transform = 'none';\n rotateDom.style.transformOrigin = 'none';\n const domRect = this.getElement().getBoundingClientRect();\n const x1 = domRect.left;\n const y1 = domRect.top;\n const x2 = domRect.right;\n const y2 = domRect.bottom;\n\n const getRect = () => {\n return {\n x1,\n y1,\n x2,\n y2\n };\n };\n const getMatrix = () => {\n const matrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);\n matrix.translate(x1, y1);\n return matrix;\n };\n registerGlobalEventTransformer(vglobal, this.getElement(), getMatrix, getRect as any, transformPointForCanvas);\n registerWindowEventTransformer(\n this.scenegraph.stage.window,\n this.getElement(),\n getMatrix,\n getRect as any,\n transformPointForCanvas\n );\n const rotateRablePlugin = this.pluginManager.getPluginByName('Rotate Table');\n if (rotateRablePlugin) {\n vglobal.mapToCanvasPoint = (rotateRablePlugin as RotateTablePlugin).vglobal_mapToCanvasPoint;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/rotate-table.ts"],"names":[],"mappings":"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","file":"rotate-table.js","sourcesContent":["// 旋转坐标转换依赖 vrender 的事件坐标转换工具;通过 @visactor/vtable 根导出透传,避免依赖内部子路径。\nimport {\n matrixAllocate,\n transformPointForCanvas,\n mapToCanvasPointForCanvas,\n registerGlobalEventTransformer,\n registerWindowEventTransformer,\n vglobal\n} from '@visactor/vtable';\nimport type { ListTable, pluginsDefinition, BaseTableAPI } from '@visactor/vtable';\nimport { TABLE_EVENT_TYPE } from '@visactor/vtable';\n// 从 TABLE_EVENT_TYPE 常量对象推导出事件值的联合类型,避免依赖 vtable 内部类型路径。\ntype TableEventType = typeof TABLE_EVENT_TYPE[keyof typeof TABLE_EVENT_TYPE];\nimport type { EventArg } from './types';\n\n// Extend the ListTable interface to include the rotation methods\ndeclare module '@visactor/vtable' {\n interface ListTableAll {\n rotate90WithTransform?: (rotateDom: HTMLElement) => void;\n cancelTransform?: (rotateDom: HTMLElement) => void;\n rotateDegree?: number;\n }\n}\nimport type { Matrix } from '@visactor/vutils';\nexport type IRotateTablePluginOptions = {\n id?: string;\n // // 旋转角度\n // rotate?: number;\n};\n/**\n * 旋转表格插件。\n * 业务层旋转功能没有使用收系统接口的话,用的transform:'rotate(90deg)'的设置来达到旋转的目的。vtable及vrender都没有进行坐标处理,这样就会导致交互错乱。\n * 所以需要进行坐标转换,将旋转后的坐标转换后作为VRender及VTable逻辑中用到的坐标。\n * 这里使用transform:'rotate(90deg)'的设置来达到旋转的目的。 其他角度应该也是可以实现的,请自行扩展这个插件并兼容\n */\nexport class RotateTablePlugin implements pluginsDefinition.IVTablePlugin {\n id = `rotate-table`;\n name = 'Rotate Table';\n runTime = [TABLE_EVENT_TYPE.INITIALIZED];\n table: ListTable;\n matrix: Matrix;\n vglobal_mapToCanvasPoint: typeof vglobal.mapToCanvasPoint; // 保存vrender中vglobal的mapToCanvasPoint原方法\n // pluginOptions: IRotateTablePluginOptions;\n constructor(pluginOptions?: IRotateTablePluginOptions) {\n this.id = pluginOptions?.id ?? this.id;\n // this.pluginOptions = pluginOptions;\n }\n run(...args: [EventArg, TableEventType | TableEventType[], BaseTableAPI]) {\n const table: BaseTableAPI = args[2];\n this.table = table as ListTable;\n //将函数rotate90WithTransform绑定到table实例上,一般情况下插件不需要将api绑定到table实例上,可以直接自身实现某个api功能\n (this.table as any).rotate90WithTransform = rotate90WithTransform.bind(this.table);\n (this.table as any).cancelTransform = cancelTransform.bind(this.table);\n }\n\n release() {\n // 移除绑定的事件\n }\n}\n\n/**\n * 业务层旋转功能没有使用收系统接口的话,用的transform:'rotate(90deg)'的设置来达到旋转的目的。vtable及vrender都没有进行坐标处理,这样就会导致交互错乱。\n * 所以需要进行坐标转换,将旋转后的坐标转换后作为VRender及VTable逻辑中用到的坐标。\n */\nexport function rotate90WithTransform(this: ListTable, rotateDom: HTMLElement) {\n this.rotateDegree = 90;\n const rotateCenter =\n rotateDom.clientWidth < rotateDom.clientHeight\n ? Math.max(rotateDom.clientWidth, rotateDom.clientHeight) / 2\n : Math.min(rotateDom.clientWidth, rotateDom.clientHeight) / 2;\n const domRect = this.getElement().getBoundingClientRect();\n const x1 = domRect.left;\n const y1 = domRect.top;\n const x2 = domRect.right;\n const y2 = domRect.bottom;\n\n rotateDom.style.transform = 'rotate(90deg)';\n rotateDom.style.transformOrigin = `${rotateCenter}px ${rotateCenter}px`;\n const getRect = () => {\n return {\n x1,\n y1,\n x2,\n y2\n };\n };\n // 获取视口尺寸的通用方法\n const getViewportDimensions = () => {\n // 浏览器环境\n if (typeof window !== 'undefined') {\n return {\n width: window.innerWidth || document.documentElement.clientWidth,\n height: window.innerHeight || document.documentElement.clientHeight\n };\n }\n // 默认使用容器的尺寸\n return rotateDom.getBoundingClientRect();\n };\n\n const getMatrix = () => {\n const viewPortWidth = getViewportDimensions().width; //获取整个视口的尺寸\n const domRect = this.getElement().getBoundingClientRect(); //TODO 这个地方应该获取窗口的宽高 最好能从vglobal上直接获取\n const x1 = domRect.top;\n const y1 = viewPortWidth - domRect.right;\n\n const matrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);\n matrix.translate(x1, y1);\n const centerX = rotateCenter - x1;\n const centerY = rotateCenter - y1;\n matrix.translate(centerX, centerY);\n matrix.rotate(Math.PI / 2);\n matrix.translate(-centerX, -centerY);\n const rotateRablePlugin = this.pluginManager.getPluginByName('Rotate Table');\n if (rotateRablePlugin) {\n (rotateRablePlugin as RotateTablePlugin).matrix = matrix;\n }\n return matrix;\n };\n registerGlobalEventTransformer(vglobal, this.getElement(), getMatrix, getRect as any, transformPointForCanvas);\n registerWindowEventTransformer(\n this.scenegraph.stage.window,\n this.getElement(),\n getMatrix,\n getRect as any,\n transformPointForCanvas\n );\n const rotateRablePlugin = this.pluginManager.getPluginByName('Rotate Table');\n if (rotateRablePlugin) {\n (rotateRablePlugin as RotateTablePlugin).vglobal_mapToCanvasPoint = vglobal.mapToCanvasPoint;\n }\n vglobal.mapToCanvasPoint = mapToCanvasPointForCanvas;\n //transformPointForCanvas和mapToCanvasPointForCanvas时相对应的\n //具体逻辑在 VRender/packages/vrender-core/src/common/event-transformer.ts中\n // 可以自定义这两个函数 来修改事件属性,transformPointForCanvas中将坐标转换后存放了_canvasX _canvasY,mapToCanvasPointForCanvas中加以利用\n // 在VTable的touch文件中,利用到了_canvasX _canvasY 所以如果自定义上面两个函数也需提供_canvasX _canvasY\n}\nexport function cancelTransform(this: ListTable, rotateDom: HTMLElement) {\n this.rotateDegree = 0;\n rotateDom.style.transform = 'none';\n rotateDom.style.transformOrigin = 'none';\n const domRect = this.getElement().getBoundingClientRect();\n const x1 = domRect.left;\n const y1 = domRect.top;\n const x2 = domRect.right;\n const y2 = domRect.bottom;\n\n const getRect = () => {\n return {\n x1,\n y1,\n x2,\n y2\n };\n };\n const getMatrix = () => {\n const matrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);\n matrix.translate(x1, y1);\n return matrix;\n };\n registerGlobalEventTransformer(vglobal, this.getElement(), getMatrix, getRect as any, transformPointForCanvas);\n registerWindowEventTransformer(\n this.scenegraph.stage.window,\n this.getElement(),\n getMatrix,\n getRect as any,\n transformPointForCanvas\n );\n const rotateRablePlugin = this.pluginManager.getPluginByName('Rotate Table');\n if (rotateRablePlugin) {\n vglobal.mapToCanvasPoint = (rotateRablePlugin as RotateTablePlugin).vglobal_mapToCanvasPoint;\n }\n}\n"]}
package/cjs/row-series.js CHANGED
@@ -32,4 +32,5 @@ class RowSeriesPlugin {
32
32
  }
33
33
  }
34
34
 
35
- exports.RowSeriesPlugin = RowSeriesPlugin;
35
+ exports.RowSeriesPlugin = RowSeriesPlugin;
36
+ //# sourceMappingURL=row-series.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/table-export/util/pagination.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAG7C,SAAgB,sBAAsB,CAAC,KAAc,EAAE,aAAsB;IAC3E,MAAM,UAAU,GAAG,IAAA,kBAAS,EAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC;IAChD,IAAI,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;IAChC,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,aAAa,EAAE;YACjB,IAAI,UAAU,EAAE;gBACd,IAAI,OAAO,EAAE;oBACV,KAAK,CAAC,aAAa,CAAC,SAAkC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;oBACjF,KAAK,CAAC,kBAAkB,EAAE,CAAC;oBAC3B,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;iBAC7B;qBAAM;oBACL,MAAM,GAAG,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC;iBACvF;aACF;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QAEjB,IAAI,OAAO,IAAI,aAAa,IAAI,UAAU,EAAE;YACzC,KAAK,CAAC,aAAa,CAAC,SAAkC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAElF,KAAK,CAAC,kBAAkB,EAAE,CAAC;SAC5B;IACH,CAAC,CAAC;IACF,OAAO;QACL,KAAK;QACL,cAAc;KACf,CAAC;AACJ,CAAC;AAhCD,wDAgCC","file":"pagination.js","sourcesContent":["import { cloneDeep } from '@visactor/vutils';\nimport type { IVTable } from './type';\nimport type { PivotHeaderLayoutMap } from '@visactor/vtable/src/layout/pivot-header-layout';\nexport function handlePaginationExport(table: IVTable, exportAllData: boolean) {\n const pagination = cloneDeep(table.pagination);\n const isPivot = table.isPivotTable();\n const layoutMap = table.internalProps.layoutMap;\n let maxRow = table.rowCount - 1;\n const handleRowCount = () => {\n if (exportAllData) {\n if (pagination) {\n if (isPivot) {\n (table.internalProps.layoutMap as PivotHeaderLayoutMap).setPagination(undefined);\n table.refreshRowColCount();\n maxRow = table.rowCount - 1;\n } else {\n maxRow = table.recordsCount * layoutMap.bodyRowSpanCount + layoutMap.headerLevelCount;\n }\n }\n }\n return maxRow;\n };\n\n const reset = () => {\n // 恢复透视表的pagination配置\n if (isPivot && exportAllData && pagination) {\n (table.internalProps.layoutMap as PivotHeaderLayoutMap).setPagination(pagination);\n // 刷新,恢复分页时的rowCount,保证在导出时是正确的rowCount\n table.refreshRowColCount();\n }\n };\n return {\n reset,\n handleRowCount\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/table-export/util/pagination.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAI7C,SAAgB,sBAAsB,CAAC,KAAc,EAAE,aAAsB;IAC3E,MAAM,UAAU,GAAG,IAAA,kBAAS,EAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC;IAChD,IAAI,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;IAChC,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,aAAa,EAAE;YACjB,IAAI,UAAU,EAAE;gBACd,IAAI,OAAO,EAAE;oBACV,KAAK,CAAC,aAAa,CAAC,SAAkC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;oBACjF,KAAK,CAAC,kBAAkB,EAAE,CAAC;oBAC3B,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;iBAC7B;qBAAM;oBACL,MAAM,GAAG,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC;iBACvF;aACF;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QAEjB,IAAI,OAAO,IAAI,aAAa,IAAI,UAAU,EAAE;YACzC,KAAK,CAAC,aAAa,CAAC,SAAkC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAElF,KAAK,CAAC,kBAAkB,EAAE,CAAC;SAC5B;IACH,CAAC,CAAC;IACF,OAAO;QACL,KAAK;QACL,cAAc;KACf,CAAC;AACJ,CAAC;AAhCD,wDAgCC","file":"pagination.js","sourcesContent":["import { cloneDeep } from '@visactor/vutils';\nimport type { IVTable } from './type';\n// 仅依赖 PivotHeaderLayoutMap 的最小能力(setPagination),避免引用 @visactor/vtable 的内部路径类型,降低跨包编译耦合。\ntype PivotHeaderLayoutMap = { setPagination: (pagination?: unknown) => void };\nexport function handlePaginationExport(table: IVTable, exportAllData: boolean) {\n const pagination = cloneDeep(table.pagination);\n const isPivot = table.isPivotTable();\n const layoutMap = table.internalProps.layoutMap;\n let maxRow = table.rowCount - 1;\n const handleRowCount = () => {\n if (exportAllData) {\n if (pagination) {\n if (isPivot) {\n (table.internalProps.layoutMap as PivotHeaderLayoutMap).setPagination(undefined);\n table.refreshRowColCount();\n maxRow = table.rowCount - 1;\n } else {\n maxRow = table.recordsCount * layoutMap.bodyRowSpanCount + layoutMap.headerLevelCount;\n }\n }\n }\n return maxRow;\n };\n\n const reset = () => {\n // 恢复透视表的pagination配置\n if (isPivot && exportAllData && pagination) {\n (table.internalProps.layoutMap as PivotHeaderLayoutMap).setPagination(pagination);\n // 刷新,恢复分页时的rowCount,保证在导出时是正确的rowCount\n table.refreshRowColCount();\n }\n };\n return {\n reset,\n handleRowCount\n };\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import type { pluginsDefinition, BaseTableAPI, ListTable } from '@visactor/vtable';
2
- import type { TableEvents } from '@visactor/vtable/src/core/TABLE_EVENT_TYPE';
2
+ import { TABLE_EVENT_TYPE } from '@visactor/vtable';
3
+ type TableEventType = typeof TABLE_EVENT_TYPE[keyof typeof TABLE_EVENT_TYPE];
3
4
  import type { EventArg } from './types';
4
5
  export type IWpsFillHandlePluginOptions = {
5
6
  id?: string;
@@ -15,7 +16,8 @@ export declare class WpsFillHandlePlugin implements pluginsDefinition.IVTablePlu
15
16
  beforeDragMaxCol: number;
16
17
  beforeDragMaxRow: number;
17
18
  constructor(pluginOptions?: IWpsFillHandlePluginOptions);
18
- run(...args: [EventArg, TableEvents[keyof TableEvents] | TableEvents[keyof TableEvents][], BaseTableAPI]): void;
19
+ run(...args: [EventArg, TableEventType | TableEventType[], BaseTableAPI]): void;
19
20
  handleKeyDown(): void;
20
21
  release(): void;
21
22
  }
23
+ export {};