@visactor/vtable-sheet 1.22.13-alpha.0 → 1.23.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 (177) hide show
  1. package/cjs/components/sheet-tab-event-handler.js +1 -1
  2. package/cjs/components/sheet-tab-event-handler.js.map +1 -1
  3. package/cjs/components/vtable-sheet.d.ts +18 -12
  4. package/cjs/components/vtable-sheet.js +77 -48
  5. package/cjs/components/vtable-sheet.js.map +1 -1
  6. package/cjs/core/WorkSheet.d.ts +12 -7
  7. package/cjs/core/WorkSheet.js +38 -67
  8. package/cjs/core/WorkSheet.js.map +1 -1
  9. package/cjs/core/table-plugins.d.ts +1 -1
  10. package/cjs/core/table-plugins.js +45 -24
  11. package/cjs/core/table-plugins.js.map +1 -1
  12. package/cjs/event/base-event-manager.d.ts +21 -0
  13. package/cjs/event/base-event-manager.js +58 -0
  14. package/cjs/event/base-event-manager.js.map +1 -0
  15. package/cjs/event/dom-event-manager.d.ts +10 -0
  16. package/cjs/event/dom-event-manager.js +31 -0
  17. package/cjs/event/dom-event-manager.js.map +1 -0
  18. package/cjs/event/event-interfaces.d.ts +46 -0
  19. package/cjs/event/event-interfaces.js +6 -0
  20. package/cjs/event/event-interfaces.js.map +1 -0
  21. package/cjs/event/event-performance.d.ts +20 -0
  22. package/cjs/event/event-performance.js +94 -0
  23. package/cjs/event/event-performance.js.map +1 -0
  24. package/cjs/event/event-validator.d.ts +10 -0
  25. package/cjs/event/event-validator.js +78 -0
  26. package/cjs/event/event-validator.js.map +1 -0
  27. package/cjs/event/formula-event-utils.d.ts +30 -0
  28. package/cjs/event/formula-event-utils.js +69 -0
  29. package/cjs/event/formula-event-utils.js.map +1 -0
  30. package/cjs/event/index.d.ts +9 -0
  31. package/cjs/event/index.js +78 -0
  32. package/cjs/event/index.js.map +1 -0
  33. package/cjs/event/spreadsheet-event-manager.d.ts +27 -0
  34. package/cjs/event/spreadsheet-event-manager.js +143 -0
  35. package/cjs/event/spreadsheet-event-manager.js.map +1 -0
  36. package/cjs/event/table-event-relay.d.ts +30 -0
  37. package/cjs/event/table-event-relay.js +105 -0
  38. package/cjs/event/table-event-relay.js.map +1 -0
  39. package/cjs/event/vtable-sheet-event-bus.d.ts +23 -0
  40. package/cjs/event/vtable-sheet-event-bus.js +75 -0
  41. package/cjs/event/vtable-sheet-event-bus.js.map +1 -0
  42. package/cjs/event/worksheet-event-manager.d.ts +28 -0
  43. package/cjs/event/worksheet-event-manager.js +82 -0
  44. package/cjs/event/worksheet-event-manager.js.map +1 -0
  45. package/cjs/formula/formula-engine.js +7 -4
  46. package/cjs/formula/formula-engine.js.map +1 -1
  47. package/cjs/formula/formula-range-selector.d.ts +3 -3
  48. package/cjs/formula/formula-range-selector.js +4 -4
  49. package/cjs/formula/formula-range-selector.js.map +1 -1
  50. package/cjs/formula/index.js +1 -2
  51. package/cjs/index.d.ts +1 -1
  52. package/cjs/index.js +1 -1
  53. package/cjs/index.js.map +1 -1
  54. package/cjs/managers/formula-manager.d.ts +1 -0
  55. package/cjs/managers/formula-manager.js +33 -2
  56. package/cjs/managers/formula-manager.js.map +1 -1
  57. package/cjs/managers/menu-manager.d.ts +2 -0
  58. package/cjs/managers/menu-manager.js +32 -7
  59. package/cjs/managers/menu-manager.js.map +1 -1
  60. package/cjs/managers/sheet-manager.d.ts +4 -1
  61. package/cjs/managers/sheet-manager.js +40 -5
  62. package/cjs/managers/sheet-manager.js.map +1 -1
  63. package/cjs/managers/tab-drag-manager.js +2 -2
  64. package/cjs/managers/tab-drag-manager.js.map +1 -1
  65. package/cjs/sheet-helper.d.ts +11 -12
  66. package/cjs/sheet-helper.js +18 -23
  67. package/cjs/sheet-helper.js.map +1 -1
  68. package/cjs/styles/sheet-tab.js +2 -1
  69. package/cjs/ts-types/formula.js +1 -2
  70. package/cjs/ts-types/index.d.ts +1 -1
  71. package/cjs/ts-types/index.js +3 -3
  72. package/cjs/ts-types/index.js.map +1 -1
  73. package/cjs/ts-types/spreadsheet-events.d.ts +195 -0
  74. package/cjs/ts-types/spreadsheet-events.js +26 -0
  75. package/cjs/ts-types/spreadsheet-events.js.map +1 -0
  76. package/dist/vtable-sheet.js +1240 -366
  77. package/dist/vtable-sheet.min.js +1 -1
  78. package/es/components/sheet-tab-event-handler.js +1 -1
  79. package/es/components/sheet-tab-event-handler.js.map +1 -1
  80. package/es/components/vtable-sheet.d.ts +18 -12
  81. package/es/components/vtable-sheet.js +84 -51
  82. package/es/components/vtable-sheet.js.map +1 -1
  83. package/es/core/WorkSheet.d.ts +12 -7
  84. package/es/core/WorkSheet.js +38 -69
  85. package/es/core/WorkSheet.js.map +1 -1
  86. package/es/core/table-plugins.d.ts +1 -1
  87. package/es/core/table-plugins.js +45 -24
  88. package/es/core/table-plugins.js.map +1 -1
  89. package/es/event/base-event-manager.d.ts +21 -0
  90. package/es/event/base-event-manager.js +52 -0
  91. package/es/event/base-event-manager.js.map +1 -0
  92. package/es/event/dom-event-manager.d.ts +10 -0
  93. package/es/event/dom-event-manager.js +23 -0
  94. package/es/event/dom-event-manager.js.map +1 -0
  95. package/es/event/event-interfaces.d.ts +46 -0
  96. package/es/event/event-interfaces.js +2 -0
  97. package/es/event/event-interfaces.js.map +1 -0
  98. package/es/event/event-performance.d.ts +20 -0
  99. package/es/event/event-performance.js +86 -0
  100. package/es/event/event-performance.js.map +1 -0
  101. package/es/event/event-validator.d.ts +10 -0
  102. package/es/event/event-validator.js +70 -0
  103. package/es/event/event-validator.js.map +1 -0
  104. package/es/event/formula-event-utils.d.ts +30 -0
  105. package/es/event/formula-event-utils.js +61 -0
  106. package/es/event/formula-event-utils.js.map +1 -0
  107. package/es/event/index.d.ts +9 -0
  108. package/es/event/index.js +16 -0
  109. package/es/event/index.js.map +1 -0
  110. package/es/event/spreadsheet-event-manager.d.ts +27 -0
  111. package/es/event/spreadsheet-event-manager.js +137 -0
  112. package/es/event/spreadsheet-event-manager.js.map +1 -0
  113. package/es/event/table-event-relay.d.ts +30 -0
  114. package/es/event/table-event-relay.js +97 -0
  115. package/es/event/table-event-relay.js.map +1 -0
  116. package/es/event/vtable-sheet-event-bus.d.ts +23 -0
  117. package/es/event/vtable-sheet-event-bus.js +67 -0
  118. package/es/event/vtable-sheet-event-bus.js.map +1 -0
  119. package/es/event/worksheet-event-manager.d.ts +28 -0
  120. package/es/event/worksheet-event-manager.js +76 -0
  121. package/es/event/worksheet-event-manager.js.map +1 -0
  122. package/es/formula/formula-engine.js +7 -4
  123. package/es/formula/formula-engine.js.map +1 -1
  124. package/es/formula/formula-range-selector.d.ts +3 -3
  125. package/es/formula/formula-range-selector.js +5 -3
  126. package/es/formula/formula-range-selector.js.map +1 -1
  127. package/es/formula/index.js +1 -2
  128. package/es/index.d.ts +1 -1
  129. package/es/index.js +1 -1
  130. package/es/index.js.map +1 -1
  131. package/es/managers/formula-manager.d.ts +1 -0
  132. package/es/managers/formula-manager.js +33 -2
  133. package/es/managers/formula-manager.js.map +1 -1
  134. package/es/managers/menu-manager.d.ts +2 -0
  135. package/es/managers/menu-manager.js +32 -7
  136. package/es/managers/menu-manager.js.map +1 -1
  137. package/es/managers/sheet-manager.d.ts +4 -1
  138. package/es/managers/sheet-manager.js +39 -5
  139. package/es/managers/sheet-manager.js.map +1 -1
  140. package/es/managers/tab-drag-manager.js +2 -2
  141. package/es/managers/tab-drag-manager.js.map +1 -1
  142. package/es/sheet-helper.d.ts +11 -12
  143. package/es/sheet-helper.js +13 -16
  144. package/es/sheet-helper.js.map +1 -1
  145. package/es/styles/sheet-tab.js +2 -1
  146. package/es/ts-types/formula.js +1 -2
  147. package/es/ts-types/index.d.ts +1 -1
  148. package/es/ts-types/index.js +2 -2
  149. package/es/ts-types/index.js.map +1 -1
  150. package/es/ts-types/spreadsheet-events.d.ts +195 -0
  151. package/es/ts-types/spreadsheet-events.js +23 -0
  152. package/es/ts-types/spreadsheet-events.js.map +1 -0
  153. package/package.json +5 -5
  154. package/cjs/event/event-manager.d.ts +0 -28
  155. package/cjs/event/event-manager.js +0 -62
  156. package/cjs/event/event-manager.js.map +0 -1
  157. package/cjs/event/event-target.d.ts +0 -12
  158. package/cjs/event/event-target.js +0 -50
  159. package/cjs/event/event-target.js.map +0 -1
  160. package/cjs/ts-types/event.d.ts +0 -90
  161. package/cjs/ts-types/event.js +0 -11
  162. package/cjs/ts-types/event.js.map +0 -1
  163. package/cjs/ts-types/events.d.ts +0 -1
  164. package/cjs/ts-types/events.js +0 -1
  165. package/cjs/ts-types/events.js.map +0 -1
  166. package/es/event/event-manager.d.ts +0 -28
  167. package/es/event/event-manager.js +0 -54
  168. package/es/event/event-manager.js.map +0 -1
  169. package/es/event/event-target.d.ts +0 -12
  170. package/es/event/event-target.js +0 -42
  171. package/es/event/event-target.js.map +0 -1
  172. package/es/ts-types/event.d.ts +0 -90
  173. package/es/ts-types/event.js +0 -7
  174. package/es/ts-types/event.js.map +0 -1
  175. package/es/ts-types/events.d.ts +0 -1
  176. package/es/ts-types/events.js +0 -1
  177. package/es/ts-types/events.js.map +0 -1
@@ -4,9 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  });
6
6
 
7
+ const spreadsheet_events_1 = require("../ts-types/spreadsheet-events");
8
+
7
9
  class SheetManager {
8
- constructor() {
9
- this._sheets = new Map, this._activeSheetKey = "";
10
+ constructor(eventBus) {
11
+ this._sheets = new Map, this._activeSheetKey = "", this.eventBus = eventBus;
12
+ }
13
+ getEventBus() {
14
+ return this.eventBus;
10
15
  }
11
16
  getActiveSheet() {
12
17
  if (!this._activeSheetKey || !this._sheets.has(this._activeSheetKey)) {
@@ -22,23 +27,47 @@ class SheetManager {
22
27
  }
23
28
  addSheet(sheet) {
24
29
  if (this._sheets.has(sheet.sheetKey)) throw new Error(`Sheet with key '${sheet.sheetKey}' already exists`);
30
+ const index = this._sheets.size;
25
31
  this._sheets.set(sheet.sheetKey, sheet);
32
+ const event = {
33
+ sheetKey: sheet.sheetKey,
34
+ sheetTitle: sheet.sheetTitle,
35
+ index: index
36
+ };
37
+ this.eventBus.emit(spreadsheet_events_1.VTableSheetEventType.SHEET_ADDED, event);
26
38
  }
27
39
  removeSheet(sheetKey) {
28
40
  if (!this._sheets.has(sheetKey)) throw new Error(`Sheet with key '${sheetKey}' not found`);
41
+ const sheetToRemove = this._sheets.get(sheetKey), index = Array.from(this._sheets.values()).findIndex((sheet => sheet.sheetKey === sheetKey));
42
+ let willReplaceSheetKey;
29
43
  if (sheetKey === this._activeSheetKey) {
30
44
  let nextSheet = null;
31
45
  for (const [key, sheet] of this._sheets.entries()) if (key !== sheetKey) {
32
46
  nextSheet = sheet;
33
47
  break;
34
48
  }
35
- nextSheet ? (this._activeSheetKey = nextSheet.sheetKey, nextSheet.active = !0) : this._activeSheetKey = "";
49
+ nextSheet ? (willReplaceSheetKey = nextSheet.sheetKey, nextSheet.active = !0) : (this._activeSheetKey = "",
50
+ willReplaceSheetKey = ""), this._activeSheetKey = willReplaceSheetKey;
36
51
  }
37
- return this._sheets.delete(sheetKey), this._activeSheetKey;
52
+ this._sheets.delete(sheetKey);
53
+ const event = {
54
+ sheetKey: sheetToRemove.sheetKey,
55
+ sheetTitle: sheetToRemove.sheetTitle,
56
+ index: index
57
+ };
58
+ return this.eventBus.emit(spreadsheet_events_1.VTableSheetEventType.SHEET_REMOVED, event),
59
+ willReplaceSheetKey;
38
60
  }
39
61
  renameSheet(sheetKey, newTitle) {
40
62
  if (!this._sheets.has(sheetKey)) throw new Error(`Sheet with key '${sheetKey}' not found`);
41
- this._sheets.get(sheetKey).sheetTitle = newTitle;
63
+ const sheet = this._sheets.get(sheetKey), oldTitle = sheet.sheetTitle;
64
+ sheet.sheetTitle = newTitle;
65
+ const event = {
66
+ sheetKey: sheetKey,
67
+ oldTitle: oldTitle,
68
+ newTitle: newTitle
69
+ };
70
+ this.eventBus.emit(spreadsheet_events_1.VTableSheetEventType.SHEET_RENAMED, event);
42
71
  }
43
72
  getAllSheets() {
44
73
  return Array.from(this._sheets.values());
@@ -68,6 +97,12 @@ class SheetManager {
68
97
  sheetsArray.splice(insertIndex, 0, movedSheet), this._sheets.clear(), sheetsArray.forEach((([key, sheet]) => {
69
98
  this._sheets.set(key, sheet);
70
99
  }));
100
+ const event = {
101
+ sheetKey: sourceKey,
102
+ fromIndex: sourceIndex,
103
+ toIndex: insertIndex
104
+ };
105
+ this.eventBus.emit(spreadsheet_events_1.VTableSheetEventType.SHEET_MOVED, event);
71
106
  }
72
107
  }
73
108
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/managers/sheet-manager.ts"],"names":[],"mappings":"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","file":"sheet-manager.js","sourcesContent":["import type { ISheetManager, IWorkSheetAPI } from '../ts-types/sheet';\nimport type { ISheetDefine } from '../ts-types';\n\nexport default class SheetManager implements ISheetManager {\n /** sheets集合 */\n _sheets: Map<string, ISheetDefine> = new Map();\n /** 当前活动sheet的key */\n _activeSheetKey: string = '';\n\n constructor() {\n // 初始化\n }\n\n /**\n * 获取当前活动sheet\n */\n getActiveSheet(): ISheetDefine | null {\n // 如果没有活动sheet,返回第一个sheet\n if (!this._activeSheetKey || !this._sheets.has(this._activeSheetKey)) {\n const firstSheet = this._sheets.values().next().value;\n if (firstSheet) {\n this._activeSheetKey = firstSheet.sheetKey;\n return firstSheet;\n }\n\n // 如果没有任何sheet,返回null而不是抛出错误\n return null;\n }\n\n return this._sheets.get(this._activeSheetKey)!;\n }\n\n /**\n * 设置活动sheet\n * @param sheetKey 要设置为活动sheet的sheet的key\n */\n setActiveSheet(sheetKey: string): void {\n if (!this._sheets.has(sheetKey)) {\n throw new Error(`Sheet with key '${sheetKey}' not found`);\n }\n\n this._activeSheetKey = sheetKey;\n\n // 更新所有sheet的active状态\n for (const [key, sheet] of this._sheets.entries()) {\n sheet.active = key === sheetKey;\n }\n }\n\n /**\n * 添加sheet\n * @param sheet 要添加的sheet\n */\n addSheet(sheet: ISheetDefine): void {\n // 检查key是否已存在\n if (this._sheets.has(sheet.sheetKey)) {\n throw new Error(`Sheet with key '${sheet.sheetKey}' already exists`);\n }\n\n // 添加sheet\n this._sheets.set(sheet.sheetKey, sheet);\n }\n\n /**\n * 移除sheet\n * @param sheetKey 要移除的sheet的key\n * @returns 新的活动sheet的key\n */\n removeSheet(sheetKey: string): string {\n // 检查key是否存在\n if (!this._sheets.has(sheetKey)) {\n throw new Error(`Sheet with key '${sheetKey}' not found`);\n }\n\n // 如果要移除的是当前活动sheet,需要选择新的活动sheet\n if (sheetKey === this._activeSheetKey) {\n // 查找其他sheet\n let nextSheet: ISheetDefine | null = null;\n\n for (const [key, sheet] of this._sheets.entries()) {\n if (key !== sheetKey) {\n nextSheet = sheet;\n break;\n }\n }\n\n // 如果有其他sheet,将其设为活动sheet\n if (nextSheet) {\n this._activeSheetKey = nextSheet.sheetKey;\n nextSheet.active = true;\n } else {\n this._activeSheetKey = '';\n }\n }\n\n // 移除sheet\n this._sheets.delete(sheetKey);\n return this._activeSheetKey;\n }\n\n /**\n * 重命名sheet\n * @param sheetKey 要重命名的sheet的key\n * @param newTitle 新的标题\n */\n renameSheet(sheetKey: string, newTitle: string): void {\n // 检查key是否存在\n if (!this._sheets.has(sheetKey)) {\n throw new Error(`Sheet with key '${sheetKey}' not found`);\n }\n\n // 更新标题\n const sheet = this._sheets.get(sheetKey)!;\n sheet.sheetTitle = newTitle;\n }\n\n /**\n * 获取所有sheet\n * @returns 所有sheet\n */\n getAllSheets(): ISheetDefine[] {\n return Array.from(this._sheets.values());\n }\n\n /**\n * 获取指定sheet\n * @param sheetKey 要获取的sheet的key\n * @returns 指定sheet\n */\n getSheet(sheetKey: string): ISheetDefine | null {\n return this._sheets.get(sheetKey) || null;\n }\n\n /**\n * 获取sheet数量\n * @returns sheet数量\n */\n getSheetCount(): number {\n return this._sheets.size;\n }\n\n /**\n * 获取sheet API\n * @param sheetKey 要获取的sheet的key\n * @returns sheet API\n */\n getSheetAPI(sheetKey: string): IWorkSheetAPI | null {\n // TODO: Implement sheet API\n return null;\n }\n\n /**\n * 监听sheet变化\n * @param callback 回调函数\n */\n onSheetChange(callback: (sheets: ISheetDefine[]) => void): void {\n // TODO: Implement event handling\n }\n\n /**\n * 移除sheet变化监听\n * @param callback 回调函数\n */\n offSheetChange(callback: (sheets: ISheetDefine[]) => void): void {\n // TODO: Implement event handling\n }\n\n /**\n * 监听活动sheet变化\n * @param callback 回调函数\n */\n onActiveSheetChange(callback: (sheet: ISheetDefine) => void): void {\n // TODO: Implement event handling\n }\n\n /**\n * 移除活动sheet变化监听\n * @param callback 回调函数\n */\n offActiveSheetChange(callback: (sheet: ISheetDefine) => void): void {\n // TODO: Implement event handling\n }\n\n /**\n * 移动sheet的位置\n * @param sourceKey 源sheet的key\n * @param targetKey 目标sheet的key\n */\n reorderSheet(sourceKey: string, targetKey: string, position: 'left' | 'right'): void {\n if (sourceKey === targetKey) {\n console.warn('Source and target sheet keys cannot be the same');\n return;\n }\n if (!this._sheets.has(sourceKey)) {\n throw new Error(`Source sheet '${sourceKey}' does not exist`);\n }\n if (!this._sheets.has(targetKey)) {\n throw new Error(`Target sheet '${targetKey}' does not exist`);\n }\n // 计算索引\n const sheetsArray = Array.from(this._sheets.entries());\n const sourceIndex = sheetsArray.findIndex(([key]) => key === sourceKey);\n const targetIndex = sheetsArray.findIndex(([key]) => key === targetKey);\n if (sourceIndex === -1 || targetIndex === -1 || sourceIndex === targetIndex) {\n return;\n }\n // 计算插入位置\n let insertIndex = position === 'left' ? targetIndex : targetIndex + 1;\n // 调整索引\n if (sourceIndex < insertIndex) {\n insertIndex--;\n }\n // 重排序\n const [movedSheet] = sheetsArray.splice(sourceIndex, 1);\n sheetsArray.splice(insertIndex, 0, movedSheet);\n // 清空并重新添加\n this._sheets.clear();\n sheetsArray.forEach(([key, sheet]) => {\n this._sheets.set(key, sheet);\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/managers/sheet-manager.ts"],"names":[],"mappings":"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","file":"sheet-manager.js","sourcesContent":["import type { ISheetManager, IWorkSheetAPI } from '../ts-types/sheet';\nimport type { ISheetDefine } from '../ts-types';\nimport { VTableSheetEventType } from '../ts-types/spreadsheet-events';\nimport type {\n SheetAddedEvent,\n SheetRemovedEvent,\n SheetRenamedEvent,\n SheetMovedEvent\n} from '../ts-types/spreadsheet-events';\nimport type { VTableSheetEventBus } from '../event/vtable-sheet-event-bus';\n\nexport default class SheetManager implements ISheetManager {\n /** sheets集合 */\n _sheets: Map<string, ISheetDefine> = new Map();\n /** 当前活动sheet的key */\n _activeSheetKey: string = '';\n /** 事件总线 */\n private eventBus: VTableSheetEventBus;\n\n constructor(eventBus: VTableSheetEventBus) {\n this.eventBus = eventBus;\n }\n\n /**\n * 获取事件总线\n */\n getEventBus(): VTableSheetEventBus {\n return this.eventBus;\n }\n\n /**\n * 获取当前活动sheet\n */\n getActiveSheet(): ISheetDefine | null {\n // 如果没有活动sheet,返回第一个sheet\n if (!this._activeSheetKey || !this._sheets.has(this._activeSheetKey)) {\n const firstSheet = this._sheets.values().next().value;\n if (firstSheet) {\n this._activeSheetKey = firstSheet.sheetKey;\n return firstSheet;\n }\n\n // 如果没有任何sheet,返回null而不是抛出错误\n return null;\n }\n\n return this._sheets.get(this._activeSheetKey)!;\n }\n\n /**\n * 设置活动sheet\n * @param sheetKey 要设置为活动sheet的sheet的key\n */\n setActiveSheet(sheetKey: string): void {\n if (!this._sheets.has(sheetKey)) {\n throw new Error(`Sheet with key '${sheetKey}' not found`);\n }\n\n this._activeSheetKey = sheetKey;\n\n // 更新所有sheet的active状态\n for (const [key, sheet] of this._sheets.entries()) {\n sheet.active = key === sheetKey;\n }\n }\n\n /**\n * 添加sheet\n * @param sheet 要添加的sheet\n */\n addSheet(sheet: ISheetDefine): void {\n // 检查key是否已存在\n if (this._sheets.has(sheet.sheetKey)) {\n throw new Error(`Sheet with key '${sheet.sheetKey}' already exists`);\n }\n\n const index = this._sheets.size;\n\n // 添加sheet\n this._sheets.set(sheet.sheetKey, sheet);\n\n // 触发工作表添加事件(电子表格级别)\n const event: SheetAddedEvent = {\n sheetKey: sheet.sheetKey,\n sheetTitle: sheet.sheetTitle,\n index\n };\n this.eventBus.emit(VTableSheetEventType.SHEET_ADDED, event);\n }\n\n /**\n * 移除sheet\n * @param sheetKey 要移除的sheet的key\n * @returns 新的活动sheet的key\n */\n removeSheet(sheetKey: string): string {\n // 检查key是否存在\n if (!this._sheets.has(sheetKey)) {\n throw new Error(`Sheet with key '${sheetKey}' not found`);\n }\n\n // 获取要删除的sheet信息\n const sheetToRemove = this._sheets.get(sheetKey)!;\n const allSheets = Array.from(this._sheets.values());\n const index = allSheets.findIndex(sheet => sheet.sheetKey === sheetKey);\n let willReplaceSheetKey;\n // 如果要移除的是当前活动sheet,需要选择新的活动sheet\n if (sheetKey === this._activeSheetKey) {\n // 查找其他sheet\n let nextSheet: ISheetDefine | null = null;\n\n for (const [key, sheet] of this._sheets.entries()) {\n if (key !== sheetKey) {\n nextSheet = sheet;\n break;\n }\n }\n\n // 如果有其他sheet,将其设为活动sheet\n if (nextSheet) {\n willReplaceSheetKey = nextSheet.sheetKey;\n nextSheet.active = true;\n } else {\n this._activeSheetKey = '';\n willReplaceSheetKey = '';\n }\n this._activeSheetKey = willReplaceSheetKey;\n }\n\n // 移除sheet\n this._sheets.delete(sheetKey);\n\n // 触发工作表移除事件(电子表格级别)\n const event: SheetRemovedEvent = {\n sheetKey: sheetToRemove.sheetKey,\n sheetTitle: sheetToRemove.sheetTitle,\n index\n };\n this.eventBus.emit(VTableSheetEventType.SHEET_REMOVED, event);\n\n return willReplaceSheetKey;\n }\n\n /**\n * 重命名sheet\n * @param sheetKey 要重命名的sheet的key\n * @param newTitle 新的标题\n */\n renameSheet(sheetKey: string, newTitle: string): void {\n // 检查key是否存在\n if (!this._sheets.has(sheetKey)) {\n throw new Error(`Sheet with key '${sheetKey}' not found`);\n }\n\n // 获取旧标题\n const sheet = this._sheets.get(sheetKey)!;\n const oldTitle = sheet.sheetTitle;\n\n // 更新标题\n sheet.sheetTitle = newTitle;\n\n // 触发工作表重命名事件(电子表格级别)\n const event: SheetRenamedEvent = {\n sheetKey,\n oldTitle,\n newTitle\n };\n this.eventBus.emit(VTableSheetEventType.SHEET_RENAMED, event);\n }\n\n /**\n * 获取所有sheet\n * @returns 所有sheet\n */\n getAllSheets(): ISheetDefine[] {\n return Array.from(this._sheets.values());\n }\n\n /**\n * 获取指定sheet\n * @param sheetKey 要获取的sheet的key\n * @returns 指定sheet\n */\n getSheet(sheetKey: string): ISheetDefine | null {\n return this._sheets.get(sheetKey) || null;\n }\n\n /**\n * 获取sheet数量\n * @returns sheet数量\n */\n getSheetCount(): number {\n return this._sheets.size;\n }\n\n /**\n * 获取sheet API\n * @param sheetKey 要获取的sheet的key\n * @returns sheet API\n */\n getSheetAPI(sheetKey: string): IWorkSheetAPI | null {\n // TODO: Implement sheet API\n return null;\n }\n\n /**\n * 监听sheet变化\n * @param callback 回调函数\n */\n onSheetChange(callback: (sheets: ISheetDefine[]) => void): void {\n // TODO: Implement event handling\n }\n\n /**\n * 移除sheet变化监听\n * @param callback 回调函数\n */\n offSheetChange(callback: (sheets: ISheetDefine[]) => void): void {\n // TODO: Implement event handling\n }\n\n /**\n * 监听活动sheet变化\n * @param callback 回调函数\n */\n onActiveSheetChange(callback: (sheet: ISheetDefine) => void): void {\n // TODO: Implement event handling\n }\n\n /**\n * 移除活动sheet变化监听\n * @param callback 回调函数\n */\n offActiveSheetChange(callback: (sheet: ISheetDefine) => void): void {\n // TODO: Implement event handling\n }\n\n /**\n * 移动sheet的位置\n * @param sourceKey 源sheet的key\n * @param targetKey 目标sheet的key\n */\n reorderSheet(sourceKey: string, targetKey: string, position: 'left' | 'right'): void {\n if (sourceKey === targetKey) {\n console.warn('Source and target sheet keys cannot be the same');\n return;\n }\n if (!this._sheets.has(sourceKey)) {\n throw new Error(`Source sheet '${sourceKey}' does not exist`);\n }\n if (!this._sheets.has(targetKey)) {\n throw new Error(`Target sheet '${targetKey}' does not exist`);\n }\n\n // 获取移动前的索引\n const sheetsArray = Array.from(this._sheets.entries());\n const sourceIndex = sheetsArray.findIndex(([key]) => key === sourceKey);\n const targetIndex = sheetsArray.findIndex(([key]) => key === targetKey);\n if (sourceIndex === -1 || targetIndex === -1 || sourceIndex === targetIndex) {\n return;\n }\n\n // 计算插入位置\n let insertIndex = position === 'left' ? targetIndex : targetIndex + 1;\n // 调整索引\n if (sourceIndex < insertIndex) {\n insertIndex--;\n }\n\n // 重排序\n const [movedSheet] = sheetsArray.splice(sourceIndex, 1);\n sheetsArray.splice(insertIndex, 0, movedSheet);\n\n // 清空并重新添加\n this._sheets.clear();\n sheetsArray.forEach(([key, sheet]) => {\n this._sheets.set(key, sheet);\n });\n\n // 触发工作表移动事件(电子表格级别)\n const event: SheetMovedEvent = {\n sheetKey: sourceKey,\n fromIndex: sourceIndex,\n toIndex: insertIndex\n };\n this.eventBus.emit(VTableSheetEventType.SHEET_MOVED, event);\n }\n}\n"]}
@@ -31,8 +31,8 @@ class SheetTabDragManager {
31
31
  this.dragState.isDragging && this.updateDragging(e);
32
32
  }
33
33
  handleGlobalMouseUp(e) {
34
- this.dragState.isDragging && this.endDragging(e), this.cleanupDragState(), document.removeEventListener("mousemove", (e => this.handleGlobalMouseMove(e))),
35
- document.removeEventListener("mouseup", (e => this.handleGlobalMouseUp(e)));
34
+ this.dragState.isDragging && this.endDragging(e), this.cleanupDragState(), document.removeEventListener("mousemove", this.boundMouseMove),
35
+ document.removeEventListener("mouseup", this.boundMouseUp);
36
36
  }
37
37
  startDragging() {
38
38
  this.dragState.draggedElement && this.dragState.draggedSheetKey && (this.dragState.isDragging = !0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/managers/tab-drag-manager.ts"],"names":[],"mappings":"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","file":"tab-drag-manager.js","sourcesContent":["import type VTableSheet from '../components/vtable-sheet';\n\n// 拖拽状态接口\ninterface DragState {\n isDragging: boolean;\n draggedSheetKey: string | null;\n draggedElement: HTMLElement | null;\n startX: number;\n startY: number;\n threshold: number;\n preview: HTMLElement | null;\n dropZones: Array<{\n element: HTMLElement;\n position: 'left' | 'right';\n targetKey: string;\n }>;\n}\n\nexport default class SheetTabDragManager {\n // 依赖的VTableSheet实例\n private sheet: VTableSheet;\n // 拖拽状态\n private dragState: DragState = {\n isDragging: false,\n draggedSheetKey: null,\n draggedElement: null,\n startX: 0,\n startY: 0,\n threshold: 5,\n preview: null,\n dropZones: []\n };\n // 插入指示器\n private insertIndicator: HTMLElement | null = null;\n private boundMouseMove: (e: MouseEvent) => void;\n private boundMouseUp: (e: MouseEvent) => void;\n\n constructor(sheet: VTableSheet) {\n this.sheet = sheet;\n // 绑定this上下文并存储函数引用\n this.boundMouseMove = e => this.handleGlobalMouseMove(e);\n this.boundMouseUp = e => this.handleGlobalMouseUp(e);\n }\n\n /**\n * 处理tab鼠标按下事件\n */\n handleTabMouseDown(e: MouseEvent, sheetKey: string): void {\n if (!this.insertIndicator) {\n this.insertIndicator = this.sheet.getRootElement().querySelector('.vtable-sheet-insert-indicator') as HTMLElement;\n }\n if (e.button !== 0) {\n return;\n }\n e.preventDefault();\n // 记录拖拽开始位置\n this.dragState.startX = e.clientX;\n this.dragState.startY = e.clientY;\n this.dragState.draggedSheetKey = sheetKey;\n this.dragState.draggedElement = e.target as HTMLElement;\n\n // 全局鼠标事件监听\n document.addEventListener('mousemove', this.boundMouseMove);\n document.addEventListener('mouseup', this.boundMouseUp);\n }\n\n /**\n * 处理全局鼠标移动事件\n *\n */\n handleGlobalMouseMove(e: MouseEvent): void {\n if (!this.dragState.draggedSheetKey || !this.dragState.draggedElement) {\n return;\n }\n const deltaX = Math.abs(e.clientX - this.dragState.startX);\n const deltaY = Math.abs(e.clientY - this.dragState.startY);\n // 判断是否超过拖拽阈值\n if (!this.dragState.isDragging && (deltaX > this.dragState.threshold || deltaY > this.dragState.threshold)) {\n this.startDragging();\n }\n if (this.dragState.isDragging) {\n this.updateDragging(e);\n }\n }\n\n /**\n * 处理全局鼠标抬起事件\n */\n handleGlobalMouseUp(e: MouseEvent): void {\n if (this.dragState.isDragging) {\n this.endDragging(e);\n }\n // 清理拖拽状态\n this.cleanupDragState();\n // 移除全局事件监听\n document.removeEventListener('mousemove', (e: MouseEvent) => this.handleGlobalMouseMove(e));\n document.removeEventListener('mouseup', (e: MouseEvent) => this.handleGlobalMouseUp(e));\n }\n\n /**\n * 开始拖拽\n */\n startDragging(): void {\n if (!this.dragState.draggedElement || !this.dragState.draggedSheetKey) {\n return;\n }\n this.dragState.isDragging = true;\n this.dragState.draggedElement.classList.add('dragging');\n // 创建拖拽预览\n this.createDragPreview();\n // 计算放置区域\n this.calculateDropZones();\n if (this.insertIndicator) {\n this.insertIndicator.style.display = 'block';\n }\n }\n\n /**\n * 更新拖拽状态\n */\n updateDragging(e: MouseEvent): void {\n if (!this.dragState.isDragging) {\n return;\n }\n // 更新拖拽预览位置\n this.updateDragPreview(e);\n // 检测当前鼠标位置对应的放置区域\n const dropZone = this.getDropZoneAt(e.clientX, e.clientY);\n if (dropZone) {\n this.showInsertIndicator(dropZone);\n } else {\n this.hideInsertIndicator();\n }\n }\n\n /**\n * 结束拖拽\n */\n endDragging(e: MouseEvent): void {\n if (!this.dragState.isDragging || !this.dragState.draggedSheetKey) {\n return;\n }\n // 检查是否有有效的放置目标\n const dropZone = this.getDropZoneAt(e.clientX, e.clientY);\n if (dropZone && dropZone.targetKey !== this.dragState.draggedSheetKey) {\n // 执行拖拽排序\n this.performTabReorder(this.dragState.draggedSheetKey, dropZone.targetKey, dropZone.position);\n }\n this.hideInsertIndicator();\n if (this.dragState.draggedElement) {\n this.dragState.draggedElement.classList.remove('dragging');\n }\n }\n\n /**\n * 创建拖拽预览\n */\n createDragPreview(): void {\n if (!this.dragState.draggedElement) {\n return;\n }\n // 创建拖拽预览元素\n this.dragState.preview = document.createElement('div');\n this.dragState.preview.className = 'vtable-sheet-drag-preview';\n this.dragState.preview.innerHTML = `\n <span class=\"drag-preview-text\">${this.dragState.draggedElement.textContent}</span>\n `;\n document.body.appendChild(this.dragState.preview);\n this.dragState.draggedElement.style.cursor = 'grabbing';\n }\n\n /**\n * 更新拖拽预览位置\n */\n updateDragPreview(e: MouseEvent): void {\n if (!this.dragState.preview) {\n return;\n }\n this.dragState.preview.style.left = `${e.clientX - this.dragState.preview.offsetWidth / 2}px`;\n this.dragState.preview.style.top = `${e.clientY - this.dragState.preview.offsetHeight / 2}px`;\n }\n\n /**\n * 清理拖拽预览\n */\n cleanupDragPreview(): void {\n // 移除拖拽预览元素\n if (this.dragState.preview) {\n this.dragState.preview.remove();\n this.dragState.preview = null;\n }\n if (this.dragState.draggedElement) {\n this.dragState.draggedElement.style.cursor = '';\n }\n }\n\n /**\n * 计算放置区域\n */\n calculateDropZones(): void {\n this.dragState.dropZones = [];\n const tabsContainer = this.sheet.getSheetTabElement()?.querySelector('.vtable-sheet-tabs-container') as HTMLElement;\n if (!tabsContainer) {\n return;\n }\n const tabs = tabsContainer.querySelectorAll('.vtable-sheet-tab') as NodeListOf<HTMLElement>;\n tabs.forEach(tab => {\n const sheetKey = tab.dataset.key;\n if (!sheetKey || sheetKey === this.dragState.draggedSheetKey) {\n return;\n }\n // 左侧放置区域\n this.dragState.dropZones.push({\n element: tab,\n position: 'left',\n targetKey: sheetKey\n });\n\n // 右侧放置区域\n this.dragState.dropZones.push({\n element: tab,\n position: 'right',\n targetKey: sheetKey\n });\n });\n }\n\n /**\n * 获取指定位置的放置区域\n */\n getDropZoneAt(x: number, y: number): typeof this.dragState.dropZones[0] | null {\n for (const zone of this.dragState.dropZones) {\n const rect = zone.element.getBoundingClientRect();\n\n // 检查Y坐标是否在tab范围内\n if (y < rect.top || y > rect.bottom) {\n continue;\n }\n const midX = rect.left + rect.width / 2;\n if (zone.position === 'left' && x >= rect.left && x <= midX) {\n return zone;\n } else if (zone.position === 'right' && x >= midX && x <= rect.right) {\n return zone;\n }\n }\n\n return null;\n }\n\n /**\n * 显示插入指示器\n */\n showInsertIndicator(dropZone: typeof this.dragState.dropZones[0]): void {\n if (!this.insertIndicator) {\n return;\n }\n const rect = dropZone.element.getBoundingClientRect();\n const containerRect = this.sheet\n .getRootElement()\n .querySelector('.vtable-sheet-tabs-container')\n ?.getBoundingClientRect();\n if (!containerRect) {\n return;\n }\n let indicatorX: number;\n if (dropZone.position === 'left') {\n indicatorX = rect.left - containerRect.left - 4;\n } else {\n indicatorX = rect.right - containerRect.left - 4;\n }\n this.insertIndicator.style.left = `${indicatorX}px`;\n this.insertIndicator.style.display = 'block';\n }\n\n /**\n * 隐藏插入指示器\n */\n hideInsertIndicator(): void {\n if (this.insertIndicator) {\n this.insertIndicator.style.display = 'none';\n }\n }\n\n /**\n * 执行tab排序\n * @param sourceKey 源tab的key\n * @param targetKey 目标tab的key\n * @param position 插入位置 左侧或右侧\n */\n performTabReorder(sourceKey: string, targetKey: string, position: 'left' | 'right'): void {\n try {\n this.sheet.getSheetManager().reorderSheet(sourceKey, targetKey, position);\n // 更新UI\n this.sheet.updateSheetTabs();\n this.sheet.updateSheetMenu();\n } catch (error) {\n console.error('Tab reorder failed:', error);\n }\n }\n\n /**\n * 清理拖拽状态\n */\n cleanupDragState(): void {\n this.cleanupDragPreview();\n // 重置拖拽状态\n this.dragState.isDragging = false;\n this.dragState.draggedSheetKey = null;\n this.dragState.draggedElement = null;\n this.dragState.dropZones = [];\n this.dragState.startX = 0;\n this.dragState.startY = 0;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/managers/tab-drag-manager.ts"],"names":[],"mappings":"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","file":"tab-drag-manager.js","sourcesContent":["import type VTableSheet from '../components/vtable-sheet';\n\n// 拖拽状态接口\ninterface DragState {\n isDragging: boolean;\n draggedSheetKey: string | null;\n draggedElement: HTMLElement | null;\n startX: number;\n startY: number;\n threshold: number;\n preview: HTMLElement | null;\n dropZones: Array<{\n element: HTMLElement;\n position: 'left' | 'right';\n targetKey: string;\n }>;\n}\n\nexport default class SheetTabDragManager {\n // 依赖的VTableSheet实例\n private sheet: VTableSheet;\n // 拖拽状态\n private dragState: DragState = {\n isDragging: false,\n draggedSheetKey: null,\n draggedElement: null,\n startX: 0,\n startY: 0,\n threshold: 5,\n preview: null,\n dropZones: []\n };\n // 插入指示器\n private insertIndicator: HTMLElement | null = null;\n private boundMouseMove: (e: MouseEvent) => void;\n private boundMouseUp: (e: MouseEvent) => void;\n\n constructor(sheet: VTableSheet) {\n this.sheet = sheet;\n // 绑定this上下文并存储函数引用\n this.boundMouseMove = e => this.handleGlobalMouseMove(e);\n this.boundMouseUp = e => this.handleGlobalMouseUp(e);\n }\n\n /**\n * 处理tab鼠标按下事件\n */\n handleTabMouseDown(e: MouseEvent, sheetKey: string): void {\n if (!this.insertIndicator) {\n this.insertIndicator = this.sheet.getRootElement().querySelector('.vtable-sheet-insert-indicator') as HTMLElement;\n }\n if (e.button !== 0) {\n return;\n }\n e.preventDefault();\n // 记录拖拽开始位置\n this.dragState.startX = e.clientX;\n this.dragState.startY = e.clientY;\n this.dragState.draggedSheetKey = sheetKey;\n this.dragState.draggedElement = e.target as HTMLElement;\n\n // 全局鼠标事件监听\n document.addEventListener('mousemove', this.boundMouseMove);\n document.addEventListener('mouseup', this.boundMouseUp);\n }\n\n /**\n * 处理全局鼠标移动事件\n *\n */\n handleGlobalMouseMove(e: MouseEvent): void {\n if (!this.dragState.draggedSheetKey || !this.dragState.draggedElement) {\n return;\n }\n const deltaX = Math.abs(e.clientX - this.dragState.startX);\n const deltaY = Math.abs(e.clientY - this.dragState.startY);\n // 判断是否超过拖拽阈值\n if (!this.dragState.isDragging && (deltaX > this.dragState.threshold || deltaY > this.dragState.threshold)) {\n this.startDragging();\n }\n if (this.dragState.isDragging) {\n this.updateDragging(e);\n }\n }\n\n /**\n * 处理全局鼠标抬起事件\n */\n handleGlobalMouseUp(e: MouseEvent): void {\n if (this.dragState.isDragging) {\n this.endDragging(e);\n }\n // 清理拖拽状态\n this.cleanupDragState();\n // 移除全局事件监听\n document.removeEventListener('mousemove', this.boundMouseMove);\n document.removeEventListener('mouseup', this.boundMouseUp);\n }\n\n /**\n * 开始拖拽\n */\n startDragging(): void {\n if (!this.dragState.draggedElement || !this.dragState.draggedSheetKey) {\n return;\n }\n this.dragState.isDragging = true;\n this.dragState.draggedElement.classList.add('dragging');\n // 创建拖拽预览\n this.createDragPreview();\n // 计算放置区域\n this.calculateDropZones();\n if (this.insertIndicator) {\n this.insertIndicator.style.display = 'block';\n }\n }\n\n /**\n * 更新拖拽状态\n */\n updateDragging(e: MouseEvent): void {\n if (!this.dragState.isDragging) {\n return;\n }\n // 更新拖拽预览位置\n this.updateDragPreview(e);\n // 检测当前鼠标位置对应的放置区域\n const dropZone = this.getDropZoneAt(e.clientX, e.clientY);\n if (dropZone) {\n this.showInsertIndicator(dropZone);\n } else {\n this.hideInsertIndicator();\n }\n }\n\n /**\n * 结束拖拽\n */\n endDragging(e: MouseEvent): void {\n if (!this.dragState.isDragging || !this.dragState.draggedSheetKey) {\n return;\n }\n // 检查是否有有效的放置目标\n const dropZone = this.getDropZoneAt(e.clientX, e.clientY);\n if (dropZone && dropZone.targetKey !== this.dragState.draggedSheetKey) {\n // 执行拖拽排序\n this.performTabReorder(this.dragState.draggedSheetKey, dropZone.targetKey, dropZone.position);\n }\n this.hideInsertIndicator();\n if (this.dragState.draggedElement) {\n this.dragState.draggedElement.classList.remove('dragging');\n }\n }\n\n /**\n * 创建拖拽预览\n */\n createDragPreview(): void {\n if (!this.dragState.draggedElement) {\n return;\n }\n // 创建拖拽预览元素\n this.dragState.preview = document.createElement('div');\n this.dragState.preview.className = 'vtable-sheet-drag-preview';\n this.dragState.preview.innerHTML = `\n <span class=\"drag-preview-text\">${this.dragState.draggedElement.textContent}</span>\n `;\n document.body.appendChild(this.dragState.preview);\n this.dragState.draggedElement.style.cursor = 'grabbing';\n }\n\n /**\n * 更新拖拽预览位置\n */\n updateDragPreview(e: MouseEvent): void {\n if (!this.dragState.preview) {\n return;\n }\n this.dragState.preview.style.left = `${e.clientX - this.dragState.preview.offsetWidth / 2}px`;\n this.dragState.preview.style.top = `${e.clientY - this.dragState.preview.offsetHeight / 2}px`;\n }\n\n /**\n * 清理拖拽预览\n */\n cleanupDragPreview(): void {\n // 移除拖拽预览元素\n if (this.dragState.preview) {\n this.dragState.preview.remove();\n this.dragState.preview = null;\n }\n if (this.dragState.draggedElement) {\n this.dragState.draggedElement.style.cursor = '';\n }\n }\n\n /**\n * 计算放置区域\n */\n calculateDropZones(): void {\n this.dragState.dropZones = [];\n const tabsContainer = this.sheet.getSheetTabElement()?.querySelector('.vtable-sheet-tabs-container') as HTMLElement;\n if (!tabsContainer) {\n return;\n }\n const tabs = tabsContainer.querySelectorAll('.vtable-sheet-tab') as NodeListOf<HTMLElement>;\n tabs.forEach(tab => {\n const sheetKey = tab.dataset.key;\n if (!sheetKey || sheetKey === this.dragState.draggedSheetKey) {\n return;\n }\n // 左侧放置区域\n this.dragState.dropZones.push({\n element: tab,\n position: 'left',\n targetKey: sheetKey\n });\n\n // 右侧放置区域\n this.dragState.dropZones.push({\n element: tab,\n position: 'right',\n targetKey: sheetKey\n });\n });\n }\n\n /**\n * 获取指定位置的放置区域\n */\n getDropZoneAt(x: number, y: number): typeof this.dragState.dropZones[0] | null {\n for (const zone of this.dragState.dropZones) {\n const rect = zone.element.getBoundingClientRect();\n\n // 检查Y坐标是否在tab范围内\n if (y < rect.top || y > rect.bottom) {\n continue;\n }\n const midX = rect.left + rect.width / 2;\n if (zone.position === 'left' && x >= rect.left && x <= midX) {\n return zone;\n } else if (zone.position === 'right' && x >= midX && x <= rect.right) {\n return zone;\n }\n }\n\n return null;\n }\n\n /**\n * 显示插入指示器\n */\n showInsertIndicator(dropZone: typeof this.dragState.dropZones[0]): void {\n if (!this.insertIndicator) {\n return;\n }\n const rect = dropZone.element.getBoundingClientRect();\n const containerRect = this.sheet\n .getRootElement()\n .querySelector('.vtable-sheet-tabs-container')\n ?.getBoundingClientRect();\n if (!containerRect) {\n return;\n }\n let indicatorX: number;\n if (dropZone.position === 'left') {\n indicatorX = rect.left - containerRect.left - 4;\n } else {\n indicatorX = rect.right - containerRect.left - 4;\n }\n this.insertIndicator.style.left = `${indicatorX}px`;\n this.insertIndicator.style.display = 'block';\n }\n\n /**\n * 隐藏插入指示器\n */\n hideInsertIndicator(): void {\n if (this.insertIndicator) {\n this.insertIndicator.style.display = 'none';\n }\n }\n\n /**\n * 执行tab排序\n * @param sourceKey 源tab的key\n * @param targetKey 目标tab的key\n * @param position 插入位置 左侧或右侧\n */\n performTabReorder(sourceKey: string, targetKey: string, position: 'left' | 'right'): void {\n try {\n this.sheet.getSheetManager().reorderSheet(sourceKey, targetKey, position);\n // 更新UI\n this.sheet.updateSheetTabs();\n this.sheet.updateSheetMenu();\n } catch (error) {\n console.error('Tab reorder failed:', error);\n }\n }\n\n /**\n * 清理拖拽状态\n */\n cleanupDragState(): void {\n this.cleanupDragPreview();\n // 重置拖拽状态\n this.dragState.isDragging = false;\n this.dragState.draggedSheetKey = null;\n this.dragState.draggedElement = null;\n this.dragState.dropZones = [];\n this.dragState.startX = 0;\n this.dragState.startY = 0;\n }\n}\n"]}
@@ -1,16 +1,15 @@
1
- import { SelectionMode } from './ts-types';
2
- import type { SheetConstructorOptions } from './ts-types';
3
- export declare function initOptions(options: SheetConstructorOptions): {
4
- defaultRowHeight: number;
5
- defaultColWidth: number;
6
- showRowHeader: boolean;
7
- showColHeader: boolean;
8
- editable: boolean;
9
- theme: string;
10
- selectionMode: SelectionMode;
11
- pixelRatio: number;
12
- };
13
1
  export declare function columnStringToIndex(colStr: string): number;
14
2
  export declare function columnIndexToString(colIndex: number): string;
15
3
  export declare function dataToRecords(data: any[][]): any[];
16
4
  export declare function recordsToData(records: any[], columns: any[]): any[][];
5
+ export declare function excludeEditCellFromSelection(range: {
6
+ startRow: number;
7
+ startCol: number;
8
+ endRow: number;
9
+ endCol: number;
10
+ }, editRow: number, editCol: number): {
11
+ startRow: number;
12
+ startCol: number;
13
+ endRow: number;
14
+ endCol: number;
15
+ };
@@ -1,25 +1,5 @@
1
1
  "use strict";
2
2
 
3
- Object.defineProperty(exports, "__esModule", {
4
- value: !0
5
- }), exports.recordsToData = exports.dataToRecords = exports.columnIndexToString = exports.columnStringToIndex = exports.initOptions = void 0;
6
-
7
- const ts_types_1 = require("./ts-types");
8
-
9
- function initOptions(options) {
10
- var _a, _b, _c, _d, _e, _f, _g;
11
- return {
12
- defaultRowHeight: null !== (_a = options.defaultRowHeight) && void 0 !== _a ? _a : 25,
13
- defaultColWidth: null !== (_b = options.defaultColWidth) && void 0 !== _b ? _b : 100,
14
- showRowHeader: null === (_c = options.showRowHeader) || void 0 === _c || _c,
15
- showColHeader: null === (_d = options.showColHeader) || void 0 === _d || _d,
16
- editable: null === (_e = options.editable) || void 0 === _e || _e,
17
- theme: null !== (_f = options.theme) && void 0 !== _f ? _f : "light",
18
- selectionMode: null !== (_g = options.selectionMode) && void 0 !== _g ? _g : ts_types_1.SelectionMode.CELL,
19
- pixelRatio: window.devicePixelRatio || 1
20
- };
21
- }
22
-
23
3
  function columnStringToIndex(colStr) {
24
4
  let col = 0;
25
5
  for (let i = 0; i < colStr.length; i++) col = 26 * col + (colStr.charCodeAt(i) - 64);
@@ -58,7 +38,22 @@ function recordsToData(records, columns) {
58
38
  return data;
59
39
  }
60
40
 
61
- exports.initOptions = initOptions, exports.columnStringToIndex = columnStringToIndex,
62
- exports.columnIndexToString = columnIndexToString, exports.dataToRecords = dataToRecords,
63
- exports.recordsToData = recordsToData;
41
+ function excludeEditCellFromSelection(range, editRow, editCol) {
42
+ const r = Object.assign({}, range), withinRow = r.startRow <= editRow && editRow <= r.endRow, withinCol = r.startCol <= editCol && editCol <= r.endCol;
43
+ if (!withinRow || !withinCol) return r;
44
+ const rowSpan = r.endRow - r.startRow, colSpan = r.endCol - r.startCol;
45
+ return 0 === rowSpan && 0 === colSpan && r.startRow === editRow && r.startCol === editCol ? {
46
+ startRow: -1,
47
+ startCol: -1,
48
+ endRow: -1,
49
+ endCol: -1
50
+ } : (rowSpan >= colSpan ? editRow === r.startRow && r.startRow < r.endRow ? r.startRow += 1 : editRow === r.endRow && r.startRow < r.endRow ? r.endRow -= 1 : r.startRow < r.endRow && (r.startRow += 1) : editCol === r.startCol && r.startCol < r.endCol ? r.startCol += 1 : editCol === r.endCol && r.startCol < r.endCol ? r.endCol -= 1 : r.startCol < r.endCol && (r.startCol += 1),
51
+ r);
52
+ }
53
+
54
+ Object.defineProperty(exports, "__esModule", {
55
+ value: !0
56
+ }), exports.excludeEditCellFromSelection = exports.recordsToData = exports.dataToRecords = exports.columnIndexToString = exports.columnStringToIndex = void 0,
57
+ exports.columnStringToIndex = columnStringToIndex, exports.columnIndexToString = columnIndexToString,
58
+ exports.dataToRecords = dataToRecords, exports.recordsToData = recordsToData, exports.excludeEditCellFromSelection = excludeEditCellFromSelection;
64
59
  //# sourceMappingURL=sheet-helper.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sheet-helper.ts"],"names":[],"mappings":"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","file":"sheet-helper.js","sourcesContent":["import { SelectionMode } from './ts-types';\nimport type { SheetConstructorOptions } from './ts-types';\n\n/**\n * Initialize options with defaults for the Sheet component\n * @param options User provided options\n * @returns Parsed options with defaults applied\n */\nexport function initOptions(options: SheetConstructorOptions): {\n defaultRowHeight: number;\n defaultColWidth: number;\n showRowHeader: boolean;\n showColHeader: boolean;\n editable: boolean;\n theme: string;\n selectionMode: SelectionMode;\n pixelRatio: number;\n} {\n return {\n defaultRowHeight: options.defaultRowHeight ?? 25,\n defaultColWidth: options.defaultColWidth ?? 100,\n showRowHeader: options.showRowHeader ?? true,\n showColHeader: options.showColHeader ?? true,\n editable: options.editable ?? true,\n theme: options.theme ?? 'light',\n selectionMode: options.selectionMode ?? SelectionMode.CELL,\n pixelRatio: window.devicePixelRatio || 1\n };\n}\n\n/**\n * Convert A1 notation to column index (0-based)\n * @param colStr Column string (e.g., 'A', 'B', 'AA')\n * @returns Column index (0-based)\n */\nexport function columnStringToIndex(colStr: string): number {\n let col = 0;\n for (let i = 0; i < colStr.length; i++) {\n col = col * 26 + (colStr.charCodeAt(i) - 64);\n }\n return col - 1;\n}\n\n/**\n * Convert column index to A1 notation string\n * @param colIndex Column index (0-based)\n * @returns Column string (e.g., 'A', 'B', 'AA')\n */\nexport function columnIndexToString(colIndex: number): string {\n let colStr = '';\n let tempCol = colIndex + 1;\n\n do {\n tempCol -= 1;\n colStr = String.fromCharCode(65 + (tempCol % 26)) + colStr;\n tempCol = Math.floor(tempCol / 26);\n } while (tempCol > 0);\n\n return colStr;\n}\n\n/**\n * Convert sheet data to VTable records format\n * @param data Sheet data (2D array)\n * @returns VTable records format\n */\nexport function dataToRecords(data: any[][]): any[] {\n if (!data || !data.length) {\n return [];\n }\n\n const records = [];\n const headerRow = data[0];\n\n // Skip header row if it exists\n for (let i = 1; i < data.length; i++) {\n const row = data[i];\n const record: Record<string, any> = {};\n\n for (let j = 0; j < row.length; j++) {\n // Use header row values as field names if available, otherwise use column index\n const fieldName = headerRow && j < headerRow.length ? headerRow[j] : j.toString();\n record[fieldName] = row[j];\n }\n\n records.push(record);\n }\n\n return records;\n}\n\n/**\n * Convert VTable records format to sheet data (2D array)\n * @param records VTable records\n * @param columns VTable columns definition\n * @returns Sheet data (2D array)\n */\nexport function recordsToData(records: any[], columns: any[]): any[][] {\n if (!records || !records.length) {\n return [];\n }\n\n const data: any[][] = [];\n\n // Add header row based on column definitions\n const headerRow = columns.map(col => col.title || col.field);\n data.push(headerRow);\n\n // Add data rows\n for (const record of records) {\n const row = columns.map(col => record[col.field]);\n data.push(row);\n }\n\n return data;\n}\n"]}
1
+ {"version":3,"sources":["../src/sheet-helper.ts"],"names":[],"mappings":"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","file":"sheet-helper.js","sourcesContent":["/**\n * Convert A1 notation to column index (0-based)\n * @param colStr Column string (e.g., 'A', 'B', 'AA')\n * @returns Column index (0-based)\n */\nexport function columnStringToIndex(colStr: string): number {\n let col = 0;\n for (let i = 0; i < colStr.length; i++) {\n col = col * 26 + (colStr.charCodeAt(i) - 64);\n }\n return col - 1;\n}\n\n/**\n * Convert column index to A1 notation string\n * @param colIndex Column index (0-based)\n * @returns Column string (e.g., 'A', 'B', 'AA')\n */\nexport function columnIndexToString(colIndex: number): string {\n let colStr = '';\n let tempCol = colIndex + 1;\n\n do {\n tempCol -= 1;\n colStr = String.fromCharCode(65 + (tempCol % 26)) + colStr;\n tempCol = Math.floor(tempCol / 26);\n } while (tempCol > 0);\n\n return colStr;\n}\n\n/**\n * Convert sheet data to VTable records format\n * @param data Sheet data (2D array)\n * @returns VTable records format\n */\nexport function dataToRecords(data: any[][]): any[] {\n if (!data || !data.length) {\n return [];\n }\n\n const records = [];\n const headerRow = data[0];\n\n // Skip header row if it exists\n for (let i = 1; i < data.length; i++) {\n const row = data[i];\n const record: Record<string, any> = {};\n\n for (let j = 0; j < row.length; j++) {\n // Use header row values as field names if available, otherwise use column index\n const fieldName = headerRow && j < headerRow.length ? headerRow[j] : j.toString();\n record[fieldName] = row[j];\n }\n\n records.push(record);\n }\n\n return records;\n}\n\n/**\n * Convert VTable records format to sheet data (2D array)\n * @param records VTable records\n * @param columns VTable columns definition\n * @returns Sheet data (2D array)\n */\nexport function recordsToData(records: any[], columns: any[]): any[][] {\n if (!records || !records.length) {\n return [];\n }\n\n const data: any[][] = [];\n\n // Add header row based on column definitions\n const headerRow = columns.map(col => col.title || col.field);\n data.push(headerRow);\n\n // Add data rows\n for (const record of records) {\n const row = columns.map(col => record[col.field]);\n data.push(row);\n }\n\n return data;\n}\n\n/**\n * 若所选范围包含当前正在编辑的单元格,自动排除该单元格以避免 #CYCLE!\n */\nexport function excludeEditCellFromSelection(\n range: { startRow: number; startCol: number; endRow: number; endCol: number },\n editRow: number,\n editCol: number\n) {\n const r = { ...range };\n const withinRow = r.startRow <= editRow && editRow <= r.endRow;\n const withinCol = r.startCol <= editCol && editCol <= r.endCol;\n if (!withinRow || !withinCol) {\n return r;\n }\n\n const rowSpan = r.endRow - r.startRow;\n const colSpan = r.endCol - r.startCol;\n\n // 如果选择范围就是编辑单元格本身,返回空范围(表示无效选择)\n if (rowSpan === 0 && colSpan === 0 && r.startRow === editRow && r.startCol === editCol) {\n return { startRow: -1, startCol: -1, endRow: -1, endCol: -1 };\n }\n\n if (rowSpan >= colSpan) {\n // 优先在行方向上排除编辑单元格\n if (editRow === r.startRow && r.startRow < r.endRow) {\n r.startRow += 1;\n } else if (editRow === r.endRow && r.startRow < r.endRow) {\n r.endRow -= 1;\n } else if (r.startRow < r.endRow) {\n r.startRow += 1;\n } // 中间,默认从起点缩一格\n } else {\n // 优先在列方向上排除编辑单元格\n if (editCol === r.startCol && r.startCol < r.endCol) {\n r.startCol += 1;\n } else if (editCol === r.endCol && r.startCol < r.endCol) {\n r.endCol -= 1;\n } else if (r.startCol < r.endCol) {\n r.startCol += 1;\n }\n }\n return r;\n}\n"]}
@@ -13,4 +13,5 @@ function importStyle() {
13
13
  document.head.appendChild(styleElement);
14
14
  }
15
15
 
16
- exports.importStyle = importStyle;
16
+ exports.importStyle = importStyle;
17
+ //# sourceMappingURL=sheet-tab.js.map
@@ -2,5 +2,4 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- });
6
- //# sourceMappingURL=formula.js.map
5
+ });
@@ -77,7 +77,7 @@ export interface IVTableSheetOptions {
77
77
  };
78
78
  }
79
79
  export * from './base';
80
- export * from './event';
81
80
  export * from './formula';
82
81
  export * from './filter';
83
82
  export * from './sheet';
83
+ export * from './spreadsheet-events';
@@ -31,7 +31,7 @@ Object.defineProperty(exports, "VTableTypes", {
31
31
  get: function() {
32
32
  return vtable_1.themes;
33
33
  }
34
- }), __exportStar(require("./base"), exports), __exportStar(require("./event"), exports),
35
- __exportStar(require("./formula"), exports), __exportStar(require("./filter"), exports),
36
- __exportStar(require("./sheet"), exports);
34
+ }), __exportStar(require("./base"), exports), __exportStar(require("./formula"), exports),
35
+ __exportStar(require("./filter"), exports), __exportStar(require("./sheet"), exports),
36
+ __exportStar(require("./spreadsheet-events"), exports);
37
37
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ts-types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,6CAAgF;AAKzD,4FALL,cAAW,OAKK;AAAzB,6FALgC,eAAY,OAKhC;AAiHrB,yCAAuB;AACvB,0CAAwB;AACxB,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB","file":"index.js","sourcesContent":["import type { ColumnDefine } from '@visactor/vtable';\nimport { TYPES as VTableTypes, themes as VTableThemes } from '@visactor/vtable';\nimport type { CellValue, IStyle, MainMenuItem } from './base';\nimport type { IFilterState } from './filter';\nimport type { TableSeriesNumberOptions, ImportResult } from '@visactor/vtable-plugins';\nimport type { SortState } from '@visactor/vtable/es/ts-types';\nexport { VTableThemes, VTableTypes, ImportResult };\n/** 筛选配置 */\nexport interface IFilterConfig {\n /** 指定筛选器支持的筛选模式(按值、按条件、或两者) */\n filterModes?: ('byValue' | 'byCondition')[];\n}\n\n/** 扩展的列定义,添加筛选相关配置 */\nexport interface IColumnDefine extends Omit<ColumnDefine, 'field'> {\n /** 是否启用筛选功能 */\n filter?: boolean;\n}\n\n/** Sheet定义 */\nexport interface ISheetDefine {\n /** 标题 */\n sheetTitle: string;\n /** 唯一标识 */\n sheetKey: string;\n /** 列数 */\n columnCount?: number;\n /** 行数 */\n rowCount?: number;\n /** 表头定义 */\n columns?: IColumnDefine[];\n /** 数据 */\n data?: (CellValue[] | null)[];\n /** 是否是当前活动sheet TODO 是不是放到外层更好*/\n active?: boolean;\n cellMerge?: VTableTypes.CustomMergeCellArray;\n /** 冻结行数 */\n frozenRowCount?: number;\n /** 冻结列数 */\n frozenColCount?: number;\n /** 是否显示表头 */\n showHeader?: boolean;\n /** 是否将第一行作为表头 */\n firstRowAsHeader?: boolean;\n /** 公式定义 */\n formulas?: Record<string, string>;\n /** 筛选配置 - 支持简单布尔值或详细配置对象 */\n filter?: boolean | IFilterConfig;\n /** 筛选状态 - 保存当前的筛选条件和状态 */\n filterState?: IFilterState;\n /** 排序状态 */\n sortState?: SortState[] | SortState | null;\n /** 主题 */\n theme?: IThemeDefine;\n /** 列宽配置 */\n columnWidthConfig?: {\n key: string | number;\n width: number;\n }[];\n /** 行高配置 */\n rowHeightConfig?: {\n key: number;\n height: number;\n }[];\n dragOrder?: {\n enableDragColumnOrder?: boolean;\n enableDragRowOrder?: boolean;\n };\n}\nexport interface IThemeDefine {\n rowSeriesNumberCellStyle?: TableSeriesNumberOptions['rowSeriesNumberCellStyle'];\n colSeriesNumberCellStyle?: TableSeriesNumberOptions['colSeriesNumberCellStyle'];\n /** TODO 表格以外部分的主题 */\n menuStyle?: {\n fontFamily?: string;\n fontSize?: number;\n color?: string;\n padding?: number[];\n bgColor?: string;\n };\n tableTheme: VTableThemes.ITableThemeDefine;\n}\n/** VTableSheet配置 */\nexport interface IVTableSheetOptions {\n /** Sheet列表 */\n sheets: ISheetDefine[];\n /** 是否显示工具栏 */\n showToolbar?: boolean;\n /** 是否显示公式栏 */\n showFormulaBar?: boolean;\n /** 是否显示sheet切换栏 */\n showSheetTab?: boolean;\n /** 插件 */\n VTablePluginModules?: {\n module: any;\n moduleOptions?: any;\n /** vtable-sheet逻辑中使用到的插件,可以通过这个配置来禁用掉 */\n disabled?: boolean;\n }[];\n\n /** 主菜单 */\n mainMenu?: {\n /** 是否显示 */\n show?: boolean;\n /** 菜单项 */\n items?: MainMenuItem[];\n };\n /** 主题 */\n theme?: IThemeDefine;\n /** 默认行高 */\n defaultRowHeight?: number;\n /** 默认列宽 */\n defaultColWidth?: number;\n /** 拖拽列顺序和行顺序配置 如果sheets中单独配置过,这个配置会被忽略*/\n dragOrder?: {\n enableDragColumnOrder?: boolean;\n enableDragRowOrder?: boolean;\n };\n}\nexport * from './base';\nexport * from './event';\nexport * from './formula';\nexport * from './filter';\nexport * from './sheet';\n"]}
1
+ {"version":3,"sources":["../src/ts-types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,6CAAgF;AAKzD,4FALL,cAAW,OAKK;AAAzB,6FALgC,eAAY,OAKhC;AAiHrB,yCAAuB;AACvB,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB;AACxB,uDAAqC","file":"index.js","sourcesContent":["import type { ColumnDefine } from '@visactor/vtable';\nimport { TYPES as VTableTypes, themes as VTableThemes } from '@visactor/vtable';\nimport type { CellValue, IStyle, MainMenuItem } from './base';\nimport type { IFilterState } from './filter';\nimport type { TableSeriesNumberOptions, ImportResult } from '@visactor/vtable-plugins';\nimport type { SortState } from '@visactor/vtable/es/ts-types';\nexport { VTableThemes, VTableTypes, ImportResult };\n/** 筛选配置 */\nexport interface IFilterConfig {\n /** 指定筛选器支持的筛选模式(按值、按条件、或两者) */\n filterModes?: ('byValue' | 'byCondition')[];\n}\n\n/** 扩展的列定义,添加筛选相关配置 */\nexport interface IColumnDefine extends Omit<ColumnDefine, 'field'> {\n /** 是否启用筛选功能 */\n filter?: boolean;\n}\n\n/** Sheet定义 */\nexport interface ISheetDefine {\n /** 标题 */\n sheetTitle: string;\n /** 唯一标识 */\n sheetKey: string;\n /** 列数 */\n columnCount?: number;\n /** 行数 */\n rowCount?: number;\n /** 表头定义 */\n columns?: IColumnDefine[];\n /** 数据 */\n data?: (CellValue[] | null)[];\n /** 是否是当前活动sheet TODO 是不是放到外层更好*/\n active?: boolean;\n cellMerge?: VTableTypes.CustomMergeCellArray;\n /** 冻结行数 */\n frozenRowCount?: number;\n /** 冻结列数 */\n frozenColCount?: number;\n /** 是否显示表头 */\n showHeader?: boolean;\n /** 是否将第一行作为表头 */\n firstRowAsHeader?: boolean;\n /** 公式定义 */\n formulas?: Record<string, string>;\n /** 筛选配置 - 支持简单布尔值或详细配置对象 */\n filter?: boolean | IFilterConfig;\n /** 筛选状态 - 保存当前的筛选条件和状态 */\n filterState?: IFilterState;\n /** 排序状态 */\n sortState?: SortState[] | SortState | null;\n /** 主题 */\n theme?: IThemeDefine;\n /** 列宽配置 */\n columnWidthConfig?: {\n key: string | number;\n width: number;\n }[];\n /** 行高配置 */\n rowHeightConfig?: {\n key: number;\n height: number;\n }[];\n dragOrder?: {\n enableDragColumnOrder?: boolean;\n enableDragRowOrder?: boolean;\n };\n}\nexport interface IThemeDefine {\n rowSeriesNumberCellStyle?: TableSeriesNumberOptions['rowSeriesNumberCellStyle'];\n colSeriesNumberCellStyle?: TableSeriesNumberOptions['colSeriesNumberCellStyle'];\n /** TODO 表格以外部分的主题 */\n menuStyle?: {\n fontFamily?: string;\n fontSize?: number;\n color?: string;\n padding?: number[];\n bgColor?: string;\n };\n tableTheme: VTableThemes.ITableThemeDefine;\n}\n/** VTableSheet配置 */\nexport interface IVTableSheetOptions {\n /** Sheet列表 */\n sheets: ISheetDefine[];\n /** 是否显示工具栏 */\n showToolbar?: boolean;\n /** 是否显示公式栏 */\n showFormulaBar?: boolean;\n /** 是否显示sheet切换栏 */\n showSheetTab?: boolean;\n /** 插件 */\n VTablePluginModules?: {\n module: any;\n moduleOptions?: any;\n /** vtable-sheet逻辑中使用到的插件,可以通过这个配置来禁用掉 */\n disabled?: boolean;\n }[];\n\n /** 主菜单 */\n mainMenu?: {\n /** 是否显示 */\n show?: boolean;\n /** 菜单项 */\n items?: MainMenuItem[];\n };\n /** 主题 */\n theme?: IThemeDefine;\n /** 默认行高 */\n defaultRowHeight?: number;\n /** 默认列宽 */\n defaultColWidth?: number;\n /** 拖拽列顺序和行顺序配置 如果sheets中单独配置过,这个配置会被忽略*/\n dragOrder?: {\n enableDragColumnOrder?: boolean;\n enableDragRowOrder?: boolean;\n };\n}\nexport * from './base';\nexport * from './formula';\nexport * from './filter';\nexport * from './sheet';\nexport * from './spreadsheet-events';\n"]}
@@ -0,0 +1,195 @@
1
+ import type { CellCoord, CellRange, CellValue } from './base';
2
+ export interface SortInfo {
3
+ field: string;
4
+ order: 'asc' | 'desc';
5
+ col: number;
6
+ }
7
+ export interface FilterInfo {
8
+ col: number;
9
+ conditions: FilterCondition[];
10
+ }
11
+ export interface FilterCondition {
12
+ type: 'equals' | 'contains' | 'greater_than' | 'less_than' | 'between';
13
+ value: string | number | [number, number];
14
+ }
15
+ export interface Range {
16
+ startRow: number;
17
+ endRow: number;
18
+ startCol: number;
19
+ endCol: number;
20
+ }
21
+ export declare enum VTableSheetEventType {
22
+ FORMULA_CALCULATE_START = "formula_calculate_start",
23
+ FORMULA_CALCULATE_END = "formula_calculate_end",
24
+ FORMULA_ERROR = "formula_error",
25
+ FORMULA_DEPENDENCY_CHANGED = "formula_dependency_changed",
26
+ FORMULA_ADDED = "formula_added",
27
+ FORMULA_REMOVED = "formula_removed",
28
+ DATA_LOADED = "data_loaded",
29
+ SPREADSHEET_READY = "spreadsheet_ready",
30
+ SPREADSHEET_DESTROYED = "spreadsheet_destroyed",
31
+ SPREADSHEET_RESIZED = "spreadsheet_resized",
32
+ SHEET_ADDED = "sheet_added",
33
+ SHEET_REMOVED = "sheet_removed",
34
+ SHEET_RENAMED = "sheet_renamed",
35
+ SHEET_ACTIVATED = "sheet_activated",
36
+ SHEET_DEACTIVATED = "sheet_deactivated",
37
+ SHEET_MOVED = "sheet_moved",
38
+ SHEET_VISIBILITY_CHANGED = "sheet_visibility_changed",
39
+ IMPORT_START = "import_start",
40
+ IMPORT_COMPLETED = "import_completed",
41
+ IMPORT_ERROR = "import_error",
42
+ EXPORT_START = "export_start",
43
+ EXPORT_COMPLETED = "export_completed",
44
+ EXPORT_ERROR = "export_error",
45
+ CROSS_SHEET_REFERENCE_UPDATED = "cross_sheet_reference_updated",
46
+ CROSS_SHEET_FORMULA_CALCULATE_START = "cross_sheet_formula_calculate_start",
47
+ CROSS_SHEET_FORMULA_CALCULATE_END = "cross_sheet_formula_calculate_end"
48
+ }
49
+ export declare const WORKSHEET_EVENT_TYPES: readonly ["formula_calculate_start", "formula_calculate_end", "formula_error", "formula_dependency_changed", "formula_added", "formula_removed", "data_loaded", "data_sorted", "data_filtered"];
50
+ export declare const SPREADSHEET_EVENT_TYPES: readonly ["spreadsheet_ready", "spreadsheet_destroyed", "spreadsheet_resized", "sheet_added", "sheet_removed", "sheet_renamed", "sheet_activated", "sheet_deactivated", "sheet_moved", "sheet_visibility_changed", "import_start", "import_completed", "import_error", "export_start", "export_completed", "export_error", "cross_sheet_reference_updated", "cross_sheet_formula_calculate_start", "cross_sheet_formula_calculate_end"];
51
+ export interface SheetActivatedEvent {
52
+ sheetKey: string;
53
+ sheetTitle: string;
54
+ previousSheetKey?: string;
55
+ previousSheetTitle?: string;
56
+ }
57
+ export interface SheetResizedEvent {
58
+ sheetKey: string;
59
+ sheetTitle: string;
60
+ width: number;
61
+ height: number;
62
+ }
63
+ export interface FormulaCalculateEvent {
64
+ sheetKey: string;
65
+ formulaCount?: number;
66
+ duration?: number;
67
+ }
68
+ export interface FormulaErrorEvent {
69
+ sheetKey: string;
70
+ cell: CellCoord & {
71
+ sheet: string;
72
+ };
73
+ formula: string;
74
+ error: string | Error;
75
+ }
76
+ export interface FormulaChangeEvent {
77
+ sheetKey: string;
78
+ cell: CellCoord;
79
+ formula?: string;
80
+ }
81
+ export interface FormulaDependencyChangedEvent {
82
+ sheetKey: string;
83
+ }
84
+ export interface DataSortedEvent {
85
+ sheetKey: string;
86
+ sortInfo: SortInfo;
87
+ }
88
+ export interface DataFilteredEvent {
89
+ sheetKey: string;
90
+ filterInfo: FilterInfo;
91
+ }
92
+ export interface DataLoadedEvent {
93
+ sheetKey: string;
94
+ rowCount: number;
95
+ colCount: number;
96
+ }
97
+ export interface SheetAddedEvent {
98
+ sheetKey: string;
99
+ sheetTitle: string;
100
+ index: number;
101
+ }
102
+ export interface SheetRemovedEvent {
103
+ sheetKey: string;
104
+ sheetTitle: string;
105
+ index: number;
106
+ }
107
+ export interface SheetRenamedEvent {
108
+ sheetKey: string;
109
+ oldTitle: string;
110
+ newTitle: string;
111
+ }
112
+ export interface SheetMovedEvent {
113
+ sheetKey: string;
114
+ fromIndex: number;
115
+ toIndex: number;
116
+ }
117
+ export interface SheetVisibilityChangedEvent {
118
+ sheetKey: string;
119
+ visible: boolean;
120
+ }
121
+ export interface ImportEvent {
122
+ fileType: 'xlsx' | 'xls' | 'csv';
123
+ sheetCount?: number;
124
+ error?: string | Error;
125
+ }
126
+ export interface ExportEvent {
127
+ fileType: 'xlsx' | 'csv';
128
+ sheetCount?: number;
129
+ allSheets: boolean;
130
+ error?: string | Error;
131
+ }
132
+ export interface CrossSheetReferenceEvent {
133
+ sourceSheetKey: string;
134
+ targetSheetKeys: string[];
135
+ affectedFormulaCount: number;
136
+ }
137
+ export interface RangeDataChangedEvent {
138
+ sheetKey: string;
139
+ range: CellRange;
140
+ changes: Array<{
141
+ row: number;
142
+ col: number;
143
+ oldValue: CellValue;
144
+ newValue: CellValue;
145
+ }>;
146
+ }
147
+ export interface SpreadSheetEventMap {
148
+ spreadsheet_ready: undefined;
149
+ spreadsheet_destroyed: undefined;
150
+ spreadsheet_resized: {
151
+ width: number;
152
+ height: number;
153
+ };
154
+ sheet_added: SheetAddedEvent;
155
+ sheet_removed: SheetRemovedEvent;
156
+ sheet_renamed: SheetRenamedEvent;
157
+ sheet_activated: SheetActivatedEvent;
158
+ sheet_deactivated: SheetActivatedEvent;
159
+ sheet_moved: SheetMovedEvent;
160
+ sheet_visibility_changed: SheetVisibilityChangedEvent;
161
+ import_start: ImportEvent;
162
+ import_completed: ImportEvent;
163
+ import_error: ImportEvent;
164
+ export_start: ExportEvent;
165
+ export_completed: ExportEvent;
166
+ export_error: ExportEvent;
167
+ cross_sheet_reference_updated: CrossSheetReferenceEvent;
168
+ cross_sheet_formula_calculate_start: undefined;
169
+ cross_sheet_formula_calculate_end: undefined;
170
+ }
171
+ export interface WorkSheetEventMap {
172
+ formula_calculate_start: FormulaCalculateEvent;
173
+ formula_calculate_end: FormulaCalculateEvent;
174
+ formula_error: FormulaErrorEvent;
175
+ formula_dependency_changed: FormulaDependencyChangedEvent;
176
+ formula_added: FormulaChangeEvent;
177
+ formula_removed: FormulaChangeEvent;
178
+ data_loaded: DataLoadedEvent;
179
+ sheet_added: SheetAddedEvent;
180
+ sheet_removed: SheetRemovedEvent;
181
+ sheet_renamed: SheetRenamedEvent;
182
+ sheet_moved: SheetMovedEvent;
183
+ sheet_activated: SheetActivatedEvent;
184
+ sheet_deactivated: SheetActivatedEvent;
185
+ sheet_visibility_changed: SheetVisibilityChangedEvent;
186
+ import_start: ImportEvent;
187
+ import_completed: ImportEvent;
188
+ import_error: ImportEvent;
189
+ export_start: ExportEvent;
190
+ export_completed: ExportEvent;
191
+ export_error: ExportEvent;
192
+ cross_sheet_reference_updated: CrossSheetReferenceEvent;
193
+ cross_sheet_formula_calculate_start: undefined;
194
+ cross_sheet_formula_calculate_end: undefined;
195
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ var VTableSheetEventType;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: !0
7
+ }), exports.SPREADSHEET_EVENT_TYPES = exports.WORKSHEET_EVENT_TYPES = exports.VTableSheetEventType = void 0,
8
+ function(VTableSheetEventType) {
9
+ VTableSheetEventType.FORMULA_CALCULATE_START = "formula_calculate_start", VTableSheetEventType.FORMULA_CALCULATE_END = "formula_calculate_end",
10
+ VTableSheetEventType.FORMULA_ERROR = "formula_error", VTableSheetEventType.FORMULA_DEPENDENCY_CHANGED = "formula_dependency_changed",
11
+ VTableSheetEventType.FORMULA_ADDED = "formula_added", VTableSheetEventType.FORMULA_REMOVED = "formula_removed",
12
+ VTableSheetEventType.DATA_LOADED = "data_loaded", VTableSheetEventType.SPREADSHEET_READY = "spreadsheet_ready",
13
+ VTableSheetEventType.SPREADSHEET_DESTROYED = "spreadsheet_destroyed", VTableSheetEventType.SPREADSHEET_RESIZED = "spreadsheet_resized",
14
+ VTableSheetEventType.SHEET_ADDED = "sheet_added", VTableSheetEventType.SHEET_REMOVED = "sheet_removed",
15
+ VTableSheetEventType.SHEET_RENAMED = "sheet_renamed", VTableSheetEventType.SHEET_ACTIVATED = "sheet_activated",
16
+ VTableSheetEventType.SHEET_DEACTIVATED = "sheet_deactivated", VTableSheetEventType.SHEET_MOVED = "sheet_moved",
17
+ VTableSheetEventType.SHEET_VISIBILITY_CHANGED = "sheet_visibility_changed", VTableSheetEventType.IMPORT_START = "import_start",
18
+ VTableSheetEventType.IMPORT_COMPLETED = "import_completed", VTableSheetEventType.IMPORT_ERROR = "import_error",
19
+ VTableSheetEventType.EXPORT_START = "export_start", VTableSheetEventType.EXPORT_COMPLETED = "export_completed",
20
+ VTableSheetEventType.EXPORT_ERROR = "export_error", VTableSheetEventType.CROSS_SHEET_REFERENCE_UPDATED = "cross_sheet_reference_updated",
21
+ VTableSheetEventType.CROSS_SHEET_FORMULA_CALCULATE_START = "cross_sheet_formula_calculate_start",
22
+ VTableSheetEventType.CROSS_SHEET_FORMULA_CALCULATE_END = "cross_sheet_formula_calculate_end";
23
+ }(VTableSheetEventType = exports.VTableSheetEventType || (exports.VTableSheetEventType = {})),
24
+ exports.WORKSHEET_EVENT_TYPES = [ "formula_calculate_start", "formula_calculate_end", "formula_error", "formula_dependency_changed", "formula_added", "formula_removed", "data_loaded", "data_sorted", "data_filtered" ],
25
+ exports.SPREADSHEET_EVENT_TYPES = [ "spreadsheet_ready", "spreadsheet_destroyed", "spreadsheet_resized", "sheet_added", "sheet_removed", "sheet_renamed", "sheet_activated", "sheet_deactivated", "sheet_moved", "sheet_visibility_changed", "import_start", "import_completed", "import_error", "export_start", "export_completed", "export_error", "cross_sheet_reference_updated", "cross_sheet_formula_calculate_start", "cross_sheet_formula_calculate_end" ];
26
+ //# sourceMappingURL=spreadsheet-events.js.map