@visactor/vtable-sheet 1.22.0 → 1.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/cjs/components/vtable-sheet.d.ts +2 -2
  2. package/cjs/components/vtable-sheet.js +28 -2
  3. package/cjs/components/vtable-sheet.js.map +1 -1
  4. package/cjs/core/WorkSheet.d.ts +3 -0
  5. package/cjs/core/WorkSheet.js +22 -3
  6. package/cjs/core/WorkSheet.js.map +1 -1
  7. package/cjs/core/table-plugins.js +1 -2
  8. package/cjs/core/table-plugins.js.map +1 -1
  9. package/cjs/formula/__tests__/formula-case-correction.test.d.ts +1 -0
  10. package/cjs/formula/__tests__/formula-case-correction.test.js +70 -0
  11. package/cjs/formula/__tests__/formula-case-correction.test.js.map +1 -0
  12. package/cjs/formula/formula-engine.d.ts +12 -1
  13. package/cjs/formula/formula-engine.js +281 -28
  14. package/cjs/formula/formula-engine.js.map +1 -1
  15. package/cjs/index.d.ts +1 -1
  16. package/cjs/index.js +1 -1
  17. package/cjs/index.js.map +1 -1
  18. package/cjs/managers/formula-manager.d.ts +2 -0
  19. package/cjs/managers/formula-manager.js +29 -0
  20. package/cjs/managers/formula-manager.js.map +1 -1
  21. package/cjs/ts-types/index.d.ts +2 -2
  22. package/cjs/ts-types/index.js.map +1 -1
  23. package/dist/vtable-sheet.js +771 -158
  24. package/dist/vtable-sheet.min.js +1 -1
  25. package/es/components/vtable-sheet.d.ts +2 -2
  26. package/es/components/vtable-sheet.js +29 -3
  27. package/es/components/vtable-sheet.js.map +1 -1
  28. package/es/core/WorkSheet.d.ts +3 -0
  29. package/es/core/WorkSheet.js +22 -3
  30. package/es/core/WorkSheet.js.map +1 -1
  31. package/es/core/table-plugins.js +1 -2
  32. package/es/core/table-plugins.js.map +1 -1
  33. package/es/formula/__tests__/formula-case-correction.test.d.ts +1 -0
  34. package/es/formula/__tests__/formula-case-correction.test.js +64 -0
  35. package/es/formula/__tests__/formula-case-correction.test.js.map +1 -0
  36. package/es/formula/formula-engine.d.ts +12 -1
  37. package/es/formula/formula-engine.js +281 -28
  38. package/es/formula/formula-engine.js.map +1 -1
  39. package/es/index.d.ts +1 -1
  40. package/es/index.js +1 -1
  41. package/es/index.js.map +1 -1
  42. package/es/managers/formula-manager.d.ts +2 -0
  43. package/es/managers/formula-manager.js +29 -0
  44. package/es/managers/formula-manager.js.map +1 -1
  45. package/es/ts-types/index.d.ts +2 -2
  46. package/es/ts-types/index.js.map +1 -1
  47. package/package.json +5 -5
@@ -1,7 +1,7 @@
1
1
  import { FormulaManager } from '../managers/formula-manager';
2
2
  import SheetManager from '../managers/sheet-manager';
3
3
  import { WorkSheet } from '../core/WorkSheet';
4
- import type { IVTableSheetOptions, ISheetDefine } from '../ts-types';
4
+ import type { IVTableSheetOptions, ISheetDefine, ImportResult } from '../ts-types';
5
5
  import { FormulaUIManager } from '../formula/formula-ui-manager';
6
6
  export default class VTableSheet {
7
7
  private container;
@@ -48,7 +48,7 @@ export default class VTableSheet {
48
48
  getActiveSheet(): WorkSheet | null;
49
49
  saveToConfig(): IVTableSheetOptions;
50
50
  exportSheetToFile(fileType: 'csv' | 'xlsx'): void;
51
- importFileToSheet(): void;
51
+ importFileToSheet(): Promise<ImportResult | void>;
52
52
  getContainer(): HTMLElement;
53
53
  getRootElement(): HTMLElement;
54
54
  getOptions(): IVTableSheetOptions;
@@ -23,6 +23,30 @@ var __createBinding = this && this.__createBinding || (Object.create ? function(
23
23
  var result = {};
24
24
  if (null != mod) for (var k in mod) "default" !== k && Object.prototype.hasOwnProperty.call(mod, k) && __createBinding(result, mod, k);
25
25
  return __setModuleDefault(result, mod), result;
26
+ }, __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) {
27
+ return new (P || (P = Promise))((function(resolve, reject) {
28
+ function fulfilled(value) {
29
+ try {
30
+ step(generator.next(value));
31
+ } catch (e) {
32
+ reject(e);
33
+ }
34
+ }
35
+ function rejected(value) {
36
+ try {
37
+ step(generator.throw(value));
38
+ } catch (e) {
39
+ reject(e);
40
+ }
41
+ }
42
+ function step(result) {
43
+ var value;
44
+ result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) {
45
+ resolve(value);
46
+ }))).then(fulfilled, rejected);
47
+ }
48
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
49
+ }));
26
50
  }, __rest = this && this.__rest || function(s, e) {
27
51
  var t = {};
28
52
  for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t[p] = s[p]);
@@ -341,8 +365,10 @@ class VTableSheet {
341
365
  }
342
366
  importFileToSheet() {
343
367
  var _a;
344
- const sheet = this.getActiveSheet();
345
- sheet && (null === (_a = sheet.tableInstance) || void 0 === _a ? void 0 : _a.importFile) && sheet.tableInstance.importFile();
368
+ return __awaiter(this, void 0, void 0, (function*() {
369
+ const sheet = this.getActiveSheet();
370
+ if (sheet) return (null === (_a = sheet.tableInstance) || void 0 === _a ? void 0 : _a.importFile) ? yield sheet.tableInstance.importFile() : void 0;
371
+ }));
346
372
  }
347
373
  getContainer() {
348
374
  return this.container;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/vtable-sheet.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAA6D;AAC7D,8EAAqD;AACrD,iDAA8C;AAC9C,yDAA2C;AAC3C,yDAAwD;AACxD,0DAAsD;AACtD,mDAAoD;AAEpD,0CAAiD;AACjD,oFAA+D;AAE/D,0EAAsE;AACtE,8DAA0D;AAG1D,2DAAuD;AACvD,sEAAiE;AACjE,uEAAiE;AAGjE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,8BAAa,CAAC,CAAC;AACjD,MAAqB,WAAW;IAwC9B,YAAY,SAAsB,EAAE,OAA4B;QAzBxD,oBAAe,GAAqB,IAAI,CAAC;QAEjD,uBAAkB,GAA2B,IAAI,GAAG,EAAE,CAAC;QAE/C,wBAAmB,GAA+B,IAAI,CAAC;QAOvD,sBAAiB,GAAuB,IAAI,CAAC;QAC7C,oBAAe,GAAuB,IAAI,CAAC;QAC3C,oBAAe,GAAuB,IAAI,CAAC;QAajD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAGjD,IAAI,CAAC,YAAY,GAAG,IAAI,uBAAY,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,IAAI,gCAAc,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAY,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAmB,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,gBAAgB,GAAG,IAAI,qCAAgB,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,oBAAoB,GAAG,IAAI,8CAAoB,CAAC,IAAI,CAAC,CAAC;QAG3D,IAAI,CAAC,MAAM,EAAE,CAAC;QAGd,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAKO,mBAAmB,CAAC,OAA4B;QACtD,uBACE,cAAc,EAAE,IAAI,EACpB,YAAY,EAAE,IAAI,EAClB,gBAAgB,EAAE,EAAE,EACpB,eAAe,EAAE,GAAG,IACjB,OAAO,EACV;IACJ,CAAC;IAKO,uBAAuB;QAC7B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,OAAO;SACR;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;QACxD,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,mBAAmB,GAAG,IAAI,0CAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC3E,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;SACjD;IACH,CAAC;IAKO,MAAM;;QAEZ,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,wBAAwB,CAAC;QAGtD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACnD,YAAY,CAAC,SAAS,GAAG,4BAA4B,CAAC;QACtD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAG3C,IAAI,MAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,0CAAE,IAAI,EAAE;YAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;YACzD,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAChD;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YAC/B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;YAClE,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAEjD,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAChC;QAGD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,sBAAsB,CAAC;QACvD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAGlD,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7C,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACpD;IACH,CAAC;IAKO,cAAc;QAEpB,MAAM,OAAO,GACX,kDAAkD;YAClD,mEAAmE;YACnE,QAAQ,CAAC;QACX,MAAM,QAAQ,GACZ,kDAAkD;YAClD,+EAA+E;YAC/E,QAAQ,CAAC;QACX,MAAM,SAAS,GACb,kDAAkD;YAClD,gFAAgF;YAChF,QAAQ,CAAC;QACX,MAAM,QAAQ,GACZ,kDAAkD;YAClD,8FAA8F;YAC9F,uFAAuF;YACvF,QAAQ,CAAC;QAEX,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/C,QAAQ,CAAC,SAAS,GAAG,sBAAsB,CAAC;QAG5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/C,QAAQ,CAAC,SAAS,GAAG,wBAAwB,CAAC;QAC9C,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAChC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAG/B,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpD,aAAa,CAAC,SAAS,GAAG,6BAA6B,CAAC;QACxD,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAC5C,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAChF,CAAC;QACF,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAGpC,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACtD,eAAe,CAAC,SAAS,GAAG,+BAA+B,CAAC;QAC5D,eAAe,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACvC,aAAa,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAG3C,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChD,SAAS,CAAC,SAAS,GAAG,yBAAyB,CAAC;QAChD,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAGhC,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnD,SAAS,CAAC,SAAS,GAAG,yBAAyB,CAAC;QAChD,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC;QAC9B,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC;QAC1B,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC/D,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAGhC,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjD,UAAU,CAAC,SAAS,GAAG,0BAA0B,CAAC;QAGlD,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvD,aAAa,CAAC,SAAS,GAAG,4BAA4B,CAAC;QACvD,aAAa,CAAC,SAAS,GAAG,QAAQ,CAAC;QACnC,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC;QAC7B,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;QAChH,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAGtC,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxD,cAAc,CAAC,SAAS,GAAG,4BAA4B,CAAC;QACxD,cAAc,CAAC,SAAS,GAAG,SAAS,CAAC;QACrC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC;QAC9B,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;QAClH,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAGvC,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACpD,UAAU,CAAC,SAAS,GAAG,0BAA0B,CAAC;QAClD,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAC;QAChC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC;QAC3B,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAGnC,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACnD,aAAa,CAAC,SAAS,GAAG,wBAAwB,CAAC;QACnD,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAEpC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAEjC,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClF,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,QAAQ,CAAC;IAClB,CAAC;IAKO,eAAe;QACrB,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE,CAAC;IAC7C,CAAC;IAKD,eAAe,CACb,aAAgG;;sCAAhG,EAAA,sBAA6B,IAAI,CAAC,eAAe,0CAAE,aAAa,CAAC,8BAA8B,CAAC;QAEhG,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO;SACR;QAED,MAAM,IAAI,GAAG,aAAa,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACjB,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9B,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAIO,kBAAkB,CAAC,KAAmB,EAAE,KAAa;QAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,SAAS,GAAG,kBAAkB,CAAC;QACnC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC;QACjC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;QAC7B,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxE,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE,CACpC,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CACnF,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE/F,OAAO,GAAG,CAAC;IACb,CAAC;IAKD,eAAe;QACb,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE,CAAC;IAC9C,CAAC;IAKO,UAAU;QAChB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAEzD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAyB,EAAE,EAAE;gBACxD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAGH,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACpF,IAAI,WAAW,EAAE;gBACf,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC;aACvC;iBAAM;gBACL,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;aAClD;YAGD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;SACpC;aAAM;YAEL,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;IACH,CAAC;IAMD,aAAa,CAAC,QAAgB;QAE5B,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAG3C,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO;SACR;QAGD,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACzC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC/C,CAAC,CAAC,CAAC;QAGH,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;YACxD,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YAC9C,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;YAGhC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAG7C,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,CAAC;YAGhD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;SAChD;aAAM;YAEL,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAC3D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;YAGhC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAG7C,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,EAAE,CAAC;YAGvB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;SAChD;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,KAAmB;QAC1B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAMD,WAAW,CAAC,QAAgB;QAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE;YAC1C,IAAA,uBAAY,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAChC,OAAO;SACR;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SAC1C;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAElE,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;SACvC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;IAC3C,CAAC;IACD,QAAQ,CAAC,QAAgB;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IACD,YAAY;QACV,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;IAC1C,CAAC;IAMO,uBAAuB,CAAC,WAAyB;;QACvD,8BAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE7B,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;QACrD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;QAGvD,MAAM,KAAK,GAAG,IAAI,qBAAS,CAAC,IAAI,EAAE,gCAC7B,WAAW,KACd,SAAS,EAAE,IAAI,CAAC,cAAc,EAC9B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,aAAa,EACrB,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAC/C,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAC7C,OAAO,EAAE,IAAA,+BAAe,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,EACnD,YAAY,EAAE,SAAS,EACvB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE;gBACN,qBAAqB,EAAE,KAAK;aAC7B,EACD,KAAK,EAAE;gBACL,WAAW,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;gBACzD,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC7B,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;gBACxC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACtB,EACD,eAAe,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,EAClD,eAAe,EAAE,WAAW,CAAC,SAAS,EACtC,KAAK,EAAE,CAAA,MAAA,WAAW,CAAC,KAAK,0CAAE,UAAU,MAAI,MAAA,IAAI,CAAC,OAAO,CAAC,KAAK,0CAAE,UAAU,CAAA,GAChE,CAAC,CAAC;QAGV,KAAK,CAAC,EAAE,CAAC,6BAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAC/E,KAAK,CAAC,EAAE,CAAC,6BAAkB,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;QAC9F,KAAK,CAAC,EAAE,CAAC,6BAAkB,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,sCAAsC,CAAC,CAAC;QACzG,KAAK,CAAC,EAAE,CAAC,6BAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,sCAAsC,CAAC,CAAC;QAGrG,IAAI;YACF,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YACrG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAEnE,IAAI,WAAW,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACxE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;aAC/D;SACF;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,QAAQ,wCAAwC,EAAE,KAAK,CAAC,CAAC;SAE5F;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAMO,YAAY,CAAC,QAAgB,EAAE,QAAgC;QACrE,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACnD,OAAO;SACR;QAED,IAAI;YAEF,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAExF,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,cAAc,EAAE;gBAE/C,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAEhD,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;aAC5E;YAGD,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC;SAC7C;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,qCAAqC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;SACxE;IACH,CAAC;IAOO,YAAY,CAAC,OAAe;QAElC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;SACvD;QACD,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QAEjC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAErC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACzD,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC;SAC3B;QACD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,CAAC;IAKO,kBAAkB,CAAC,KAAgB,EAAE,WAAyB;QAEpE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YAC5B,OAAO;SACR;QAKD,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE;gBAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAQ,CAAC;gBACxF,IAAI,YAAY,EAAE;oBAChB,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;iBACtD;qBAAM;oBACL,OAAO,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,QAAQ,kCAAkC,CAAC,CAAC;iBAC/E;aACF;iBAAM;gBACL,OAAO,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,QAAQ,iBAAiB,CAAC,CAAC;aAC9D;QACH,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;IAKO,YAAY;QAElB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,QAAQ,UAAU,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,SAAS,UAAU,GAAG,CAAC,EAAE,CAAC;QAC5C,IAAI,GAAG,GAAG,OAAO,CAAC;QAClB,IAAI,KAAK,GAAG,SAAS,CAAC;QACtB,IAAI,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC;QAE3B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACxF,OAAO,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACzD,KAAK,IAAI,CAAC,CAAC;YACX,GAAG,GAAG,QAAQ,KAAK,EAAE,CAAC;YACtB,KAAK,GAAG,SAAS,KAAK,EAAE,CAAC;SAC1B;QAGD,MAAM,QAAQ,GAAiB;YAC7B,QAAQ,EAAE,GAAG;YACb,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,EAAE;SACT,CAAC;QAGF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAGrC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAKO,gBAAgB;QACtB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;IAC3C,CAAC;IAKD,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAID,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAKD,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAKD,YAAY;QAEV,MAAM,MAAM,GAAmB,EAAE,CAAC;QAElC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACnE,IAAI,QAAQ,EAAE;gBACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAEtC,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;oBAEjD,MAAW,IAAI,UAAK,MAAM,EAApB,EAAW,CAAS,CAAC;oBAE3B,OAAO,IAAI,CAAC,KAAK,CAAC;oBAClB,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;gBAEH,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAG5G,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;oBACzB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;iBACpB;qBAAM;oBACL,OAAO,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;iBACpC;gBAED,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEpG,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;oBACxB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;iBACjB;qBAAM;oBACL,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;iBAChC;gBAGD,IAAI,WAAW,GAAG,IAAI,CAAC;gBACvB,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAQ,CAAC;gBAC3F,IAAI,YAAY,EAAE;oBAChB,WAAW,GAAG,YAAY,CAAC,cAAc,EAAE,CAAC;iBAC7C;gBAGD,IAAI,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC;gBAC/D,IAAI,gBAAgB,CAAC;gBACrB,IAAI,SAAS,EAAE;oBACb,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBAC/D,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,iBACvC,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,KAAK,EAAE,IAAI,CAAC,KAAK,IACd,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EACtD,CAAC,CAAC;iBACL;gBAGD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAE1E,MAAM,CAAC,IAAI,iCACN,WAAW,KACd,IAAI;oBACJ,OAAO,EACP,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,eAA6C,EACvF,UAAU,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,EACrD,cAAc,EAAE,QAAQ,CAAC,aAAa,CAAC,cAAc,EACrD,cAAc,EAAE,QAAQ,CAAC,aAAa,CAAC,cAAc,EACrD,MAAM,EAAE,WAAW,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,QAAQ,EAC5E,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,IACjE,CAAC;aACJ;iBAAM;gBACL,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aAC1B;QACH,CAAC,CAAC,CAAC;QAEH,uCACK,IAAI,CAAC,OAAO,KACf,MAAM,IACN;IACJ,CAAC;IAGD,iBAAiB,CAAC,QAAwB;;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;QACD,IAAI,QAAQ,KAAK,KAAK,EAAE;YACtB,IAAI,MAAC,KAAK,CAAC,aAAqB,0CAAE,WAAW,EAAE;gBAC5C,KAAK,CAAC,aAAqB,CAAC,WAAW,EAAE,CAAC;aAC5C;iBAAM;gBACL,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;aAC3E;SACF;aAAM;YACL,IAAI,MAAC,KAAK,CAAC,aAAqB,0CAAE,aAAa,EAAE;gBAC9C,KAAK,CAAC,aAAqB,CAAC,aAAa,EAAE,CAAC;aAC9C;iBAAM;gBACL,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;aAC3E;SACF;IACH,CAAC;IAED,iBAAiB;;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;QACD,IAAI,MAAC,KAAK,CAAC,aAAqB,0CAAE,UAAU,EAAE;YAC3C,KAAK,CAAC,aAAqB,CAAC,UAAU,EAAE,CAAC;SAC3C;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;SAC3E;IACH,CAAC;IAID,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAKD,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAKD,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAKD,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAKD,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAKD,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAKD,OAAO;QAEL,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAEhC,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,EAAE,CAAC;QAEvD,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACzC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;YACnD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC3D;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;SACpC;QACD,IAAI,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE;YAC5C,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;SACpD;IACH,CAAC;IAOD,UAAU,CAAC,QAAgB;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,EAAE,CAAC;SACX;QACD,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAMD,aAAa;QACX,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IAKD,MAAM;;QAKJ,MAAA,IAAI,CAAC,cAAc,EAAE,0CAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IAKD,4BAA4B,CAC1B,KAA6E,EAC7E,OAAe,EACf,OAAe;QAEf,MAAM,CAAC,qBAAQ,KAAK,CAAE,CAAC;QACvB,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC;QAC/D,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC;QAC/D,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;YAC5B,OAAO,CAAC,CAAC;SACV;QAED,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC;QACtC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC;QAGtC,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,EAAE;YACtF,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;SAC/D;QAED,IAAI,OAAO,IAAI,OAAO,EAAE;YAEtB,IAAI,OAAO,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE;gBACnD,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;aACjB;iBAAM,IAAI,OAAO,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE;gBACxD,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;aACf;iBAAM,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE;gBAChC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;aACjB;SACF;aAAM;YAEL,IAAI,OAAO,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE;gBACnD,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;aACjB;iBAAM,IAAI,OAAO,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE;gBACxD,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;aACf;iBAAM,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE;gBAChC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;aACjB;SACF;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAh2BD,8BAg2BC","file":"vtable-sheet.js","sourcesContent":["import { FormulaManager } from '../managers/formula-manager';\nimport SheetManager from '../managers/sheet-manager';\nimport { WorkSheet } from '../core/WorkSheet';\nimport * as VTable from '@visactor/vtable';\nimport { getTablePlugins } from '../core/table-plugins';\nimport { EventManager } from '../event/event-manager';\nimport { showSnackbar } from '../tools/ui/snackbar';\nimport type { IVTableSheetOptions, ISheetDefine, CellValueChangedEvent } from '../ts-types';\nimport { WorkSheetEventType } from '../ts-types';\nimport SheetTabDragManager from '../managers/tab-drag-manager';\nimport { checkTabTitle } from '../tools';\nimport { FormulaAutocomplete } from '../formula/formula-autocomplete';\nimport { formulaEditor } from '../formula/formula-editor';\nimport { CellHighlightManager } from '../formula/cell-highlight-manager';\nimport type { TYPES } from '@visactor/vtable';\nimport { MenuManager } from '../managers/menu-manager';\nimport { FormulaUIManager } from '../formula/formula-ui-manager';\nimport { SheetTabEventHandler } from './sheet-tab-event-handler';\n\n// 注册公式编辑器\nVTable.register.editor('formula', formulaEditor);\nexport default class VTableSheet {\n /** DOM容器 */\n private container: HTMLElement;\n /** 配置选项 */\n private options: IVTableSheetOptions;\n /** sheet管理器 */\n private sheetManager: SheetManager;\n /** 公式管理器 */\n formulaManager: FormulaManager;\n /** 事件管理器 */\n private eventManager: EventManager;\n\n /** 菜单管理 */\n private menuManager: MenuManager;\n /** 当前活动sheet实例 */\n private activeWorkSheet: WorkSheet | null = null;\n /** 所有sheet实例 */\n workSheetInstances: Map<string, WorkSheet> = new Map();\n /** 公式自动补全 */\n private formulaAutocomplete: FormulaAutocomplete | null = null;\n\n /** 公式UI管理器 */\n formulaUIManager: FormulaUIManager;\n\n /** UI组件 */\n private rootElement: HTMLElement;\n private formulaBarElement: HTMLElement | null = null;\n private sheetTabElement: HTMLElement | null = null;\n private mainMenuElement: HTMLElement | null = null;\n private contentElement: HTMLElement;\n\n // tab拖拽管理器\n private dragManager: SheetTabDragManager;\n /** sheet标签事件处理器 */\n private sheetTabEventHandler: SheetTabEventHandler;\n\n /**\n * 构造函数\n * @param options 配置选项\n */\n constructor(container: HTMLElement, options: IVTableSheetOptions) {\n this.container = container;\n this.options = this.mergeDefaultOptions(options);\n\n // 创建管理器\n this.sheetManager = new SheetManager();\n this.formulaManager = new FormulaManager(this);\n this.eventManager = new EventManager(this);\n this.dragManager = new SheetTabDragManager(this);\n this.menuManager = new MenuManager(this);\n this.formulaUIManager = new FormulaUIManager(this);\n this.sheetTabEventHandler = new SheetTabEventHandler(this);\n\n // 初始化UI\n this.initUI();\n\n // 初始化sheets\n this.initSheets();\n\n this.resize();\n }\n\n /**\n * 合并默认配置\n */\n private mergeDefaultOptions(options: IVTableSheetOptions): IVTableSheetOptions {\n return {\n showFormulaBar: true,\n showSheetTab: true,\n defaultRowHeight: 25,\n defaultColWidth: 100,\n ...options\n };\n }\n\n /**\n * 初始化公式自动补全\n */\n private initFormulaAutocomplete(): void {\n if (!this.formulaBarElement) {\n return;\n }\n\n const formulaInput = this.formulaUIManager.formulaInput;\n if (formulaInput) {\n this.formulaAutocomplete = new FormulaAutocomplete(this.rootElement, this);\n this.formulaAutocomplete.attachTo(formulaInput);\n }\n }\n\n /**\n * 初始化UI\n */\n private initUI(): void {\n // 创建根元素\n this.rootElement = document.createElement('div');\n this.rootElement.className = 'vtable-sheet-container';\n // this.rootElement.style.width = `${this.options.width}px`;\n // this.rootElement.style.height = `${this.options.height}px`;\n this.container.appendChild(this.rootElement);\n //创建顶部菜单和公式的容器\n const topContainer = document.createElement('div');\n topContainer.className = 'vtable-sheet-top-container';\n this.rootElement.appendChild(topContainer);\n\n // 创建主菜单\n if (this.options.mainMenu?.show) {\n this.mainMenuElement = this.menuManager.createMainMenu();\n topContainer.appendChild(this.mainMenuElement);\n }\n // 创建公式栏\n if (this.options.showFormulaBar) {\n this.formulaBarElement = this.formulaUIManager.createFormulaBar();\n topContainer.appendChild(this.formulaBarElement);\n\n this.initFormulaAutocomplete();\n }\n\n // 创建内容区域\n this.contentElement = document.createElement('div');\n this.contentElement.className = 'vtable-sheet-content';\n this.rootElement.appendChild(this.contentElement);\n\n // 创建sheet切换栏\n if (this.options.showSheetTab) {\n this.sheetTabElement = this.createSheetTab();\n this.rootElement.appendChild(this.sheetTabElement);\n }\n }\n\n /**\n * 创建sheet切换栏\n */\n private createSheetTab(): HTMLElement {\n // SVG图标常量\n const addIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z\"/>' +\n '</svg>';\n const leftIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>' +\n '</svg>';\n const rightIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/>' +\n '</svg>';\n const menuIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 ' +\n '.9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/>' +\n '</svg>';\n\n const sheetTab = document.createElement('div');\n sheetTab.className = 'vtable-sheet-tab-bar';\n\n // 创建左侧渐变效果\n const fadeLeft = document.createElement('div');\n fadeLeft.className = 'vtable-sheet-fade-left';\n fadeLeft.style.display = 'none';\n sheetTab.appendChild(fadeLeft);\n\n // 创建中间的tabs容器\n const tabsContainer = document.createElement('div');\n tabsContainer.className = 'vtable-sheet-tabs-container';\n tabsContainer.addEventListener('scroll', () =>\n this.sheetTabEventHandler.updateFadeEffects(tabsContainer, fadeLeft, fadeRight)\n );\n sheetTab.appendChild(tabsContainer);\n\n // 创建插入指示器\n const insertIndicator = document.createElement('div');\n insertIndicator.className = 'vtable-sheet-insert-indicator';\n insertIndicator.style.display = 'none';\n tabsContainer.appendChild(insertIndicator);\n\n // 创建右侧渐变效果\n const fadeRight = document.createElement('div');\n fadeRight.className = 'vtable-sheet-fade-right';\n sheetTab.appendChild(fadeRight);\n\n // 添加新增sheet按钮\n const addButton = document.createElement('button');\n addButton.className = 'vtable-sheet-add-button';\n addButton.innerHTML = addIcon;\n addButton.title = '添加工作表';\n addButton.addEventListener('click', () => this._addNewSheet());\n sheetTab.appendChild(addButton);\n\n // 创建导航按钮容器\n const navButtons = document.createElement('div');\n navButtons.className = 'vtable-sheet-nav-buttons';\n\n // 创建左侧滚动按钮\n const leftScrollBtn = document.createElement('button');\n leftScrollBtn.className = 'vtable-sheet-scroll-button';\n leftScrollBtn.innerHTML = leftIcon;\n leftScrollBtn.title = '向左滚动';\n leftScrollBtn.addEventListener('click', () => this.sheetTabEventHandler.scrollSheetTabs('left', tabsContainer));\n navButtons.appendChild(leftScrollBtn);\n\n // 创建右侧滚动按钮\n const rightScrollBtn = document.createElement('button');\n rightScrollBtn.className = 'vtable-sheet-scroll-button';\n rightScrollBtn.innerHTML = rightIcon;\n rightScrollBtn.title = '向右滚动';\n rightScrollBtn.addEventListener('click', () => this.sheetTabEventHandler.scrollSheetTabs('right', tabsContainer));\n navButtons.appendChild(rightScrollBtn);\n\n // 创建sheet菜单按钮\n const menuButton = document.createElement('button');\n menuButton.className = 'vtable-sheet-menu-button';\n menuButton.innerHTML = menuIcon;\n menuButton.title = '工作表选项';\n menuButton.addEventListener('click', e => this.sheetTabEventHandler.toggleSheetMenu(e));\n navButtons.appendChild(menuButton);\n\n // 创建菜单容器\n const menuContainer = document.createElement('ul');\n menuContainer.className = 'vtable-sheet-menu-list';\n sheetTab.appendChild(menuContainer);\n\n sheetTab.appendChild(navButtons);\n // 初始化渐变效果\n setTimeout(() => {\n this.sheetTabEventHandler.updateFadeEffects(tabsContainer, fadeLeft, fadeRight);\n }, 100);\n\n return sheetTab;\n }\n\n /**\n * 激活sheet标签并滚动到可见区域\n */\n private _activeSheetTab(): void {\n this.sheetTabEventHandler.activeSheetTab();\n }\n /**\n * 更新sheet切换标签\n * @param tabsContainer 标签容器\n */\n updateSheetTabs(\n tabsContainer: HTMLElement = this.sheetTabElement?.querySelector('.vtable-sheet-tabs-container')\n ): void {\n if (!tabsContainer) {\n return;\n }\n // 清除现有标签\n const tabs = tabsContainer.querySelectorAll('.vtable-sheet-tab');\n tabs.forEach(tab => {\n tab.remove();\n });\n // 添加sheet标签\n const sheets = this.sheetManager.getAllSheets();\n sheets.forEach((sheet, index) => {\n tabsContainer.appendChild(this.createSheetTabItem(sheet, index));\n });\n // 激活sheet标签并滚动到可见区域\n this._activeSheetTab();\n }\n /**\n * 创建tab栏标签项\n */\n private createSheetTabItem(sheet: ISheetDefine, index: number): HTMLElement {\n const tab = document.createElement('div');\n tab.className = 'vtable-sheet-tab';\n tab.dataset.key = sheet.sheetKey;\n tab.textContent = sheet.sheetTitle;\n tab.title = sheet.sheetTitle;\n tab.addEventListener('click', () => this.activateSheet(sheet.sheetKey));\n tab.addEventListener('dblclick', () =>\n this.sheetTabEventHandler.handleSheetTabDblClick(sheet.sheetKey, sheet.sheetTitle)\n );\n // 拖拽事件\n tab.addEventListener('mousedown', e => this.dragManager.handleTabMouseDown(e, sheet.sheetKey));\n\n return tab;\n }\n\n /**\n * 更新sheet列表\n */\n updateSheetMenu(): void {\n this.sheetTabEventHandler.updateSheetMenu();\n }\n\n /**\n * 初始化sheets\n */\n private initSheets(): void {\n if (this.options.sheets && this.options.sheets.length > 0) {\n // 添加所有sheet\n this.options.sheets.forEach((sheetDefine: ISheetDefine) => {\n this.sheetManager.addSheet(sheetDefine);\n });\n\n // 找到active的sheet\n let activeSheetKey = '';\n const activeSheet = this.options.sheets.find((sheet: ISheetDefine) => sheet.active);\n if (activeSheet) {\n activeSheetKey = activeSheet.sheetKey;\n } else {\n activeSheetKey = this.options.sheets[0].sheetKey;\n }\n\n // 激活sheet\n this.activateSheet(activeSheetKey);\n } else {\n // 如果没有提供sheets,创建一个默认的\n this._addNewSheet();\n }\n }\n\n /**\n * 激活指定sheet\n * @param sheetKey sheet的key\n */\n activateSheet(sheetKey: string): void {\n // 设置活动sheet\n this.sheetManager.setActiveSheet(sheetKey);\n\n // 获取sheet定义\n const sheetDefine = this.sheetManager.getSheet(sheetKey);\n if (!sheetDefine) {\n return;\n }\n\n // 隐藏所有sheet实例\n this.workSheetInstances.forEach(instance => {\n instance.getElement().style.display = 'none';\n });\n\n // 如果已经存在实例,则显示并激活对应tab和menu\n if (this.workSheetInstances.has(sheetKey)) {\n const instance = this.workSheetInstances.get(sheetKey)!;\n instance.getElement().style.display = 'block';\n this.activeWorkSheet = instance;\n\n // 更新公式管理器中的活动工作表(在实例激活后)\n this.formulaManager.setActiveSheet(sheetKey);\n\n // sheet标签和菜单项激活样式\n this._activeSheetTab();\n this.sheetTabEventHandler.activeSheetMenuItem();\n\n // 恢复筛选状态\n this.restoreFilterState(instance, sheetDefine);\n } else {\n // 创建新的sheet实例\n const instance = this.createWorkSheetInstance(sheetDefine);\n this.workSheetInstances.set(sheetKey, instance);\n this.activeWorkSheet = instance;\n\n // 更新公式管理器中的活动工作表(在实例创建后)\n this.formulaManager.setActiveSheet(sheetKey);\n\n // 刷新sheet标签和菜单\n this.updateSheetTabs();\n this.updateSheetMenu();\n\n // 恢复筛选状态\n this.restoreFilterState(instance, sheetDefine);\n }\n\n this.updateFormulaBar();\n }\n\n addSheet(sheet: ISheetDefine): void {\n this.sheetManager.addSheet(sheet);\n this.updateSheetTabs();\n this.updateSheetMenu();\n }\n\n /**\n * 删除sheet\n * @param sheetKey 工作表key\n */\n removeSheet(sheetKey: string): void {\n if (this.sheetManager.getSheetCount() <= 1) {\n showSnackbar('至少保留一个工作表', 1300);\n return;\n }\n // 删除实例对应的dom元素\n const instance = this.workSheetInstances.get(sheetKey);\n if (instance) {\n instance.getElement().remove();\n this.workSheetInstances.delete(sheetKey);\n }\n // 删除sheet定义\n const newActiveSheetKey = this.sheetManager.removeSheet(sheetKey);\n // 激活新的sheet(如果有)\n if (newActiveSheetKey) {\n this.activateSheet(newActiveSheetKey);\n }\n this.updateSheetTabs();\n this.updateSheetMenu();\n }\n getSheetCount(): number {\n return this.sheetManager.getSheetCount();\n }\n getSheet(sheetKey: string): ISheetDefine | null {\n return this.sheetManager.getSheet(sheetKey);\n }\n getAllSheets(): ISheetDefine[] {\n return this.sheetManager.getAllSheets();\n }\n\n /**\n * 创建sheet实例\n * @param sheetDefine sheet的定义\n */\n private createWorkSheetInstance(sheetDefine: ISheetDefine): WorkSheet {\n formulaEditor.setSheet(this);\n // 计算内容区域大小\n const contentWidth = this.contentElement.clientWidth;\n const contentHeight = this.contentElement.clientHeight;\n\n // 创建sheet实例\n const sheet = new WorkSheet(this, {\n ...sheetDefine,\n container: this.contentElement,\n width: contentWidth,\n height: contentHeight,\n defaultRowHeight: this.options.defaultRowHeight,\n defaultColWidth: this.options.defaultColWidth,\n plugins: getTablePlugins(sheetDefine, this.options),\n headerEditor: 'formula',\n editor: 'formula',\n select: {\n makeSelectCellVisible: false\n },\n style: {\n borderColor: ['#E1E4E8', '#E1E4E8', '#E1E4E8', '#E1E4E8'],\n borderLineWidth: [1, 1, 1, 1],\n borderLineDash: [null, null, null, null],\n padding: [8, 8, 8, 8]\n },\n editCellTrigger: ['api', 'keydown', 'doubleclick'],\n customMergeCell: sheetDefine.cellMerge,\n theme: sheetDefine.theme?.tableTheme || this.options.theme?.tableTheme\n } as any);\n\n // 注册事件 - 使用预先绑定的事件处理方法和WorkSheetEventType枚举\n sheet.on(WorkSheetEventType.CELL_CLICK, this.eventManager.handleCellClickBind);\n sheet.on(WorkSheetEventType.CELL_VALUE_CHANGED, this.eventManager.handleCellValueChangedBind);\n sheet.on(WorkSheetEventType.SELECTION_CHANGED, this.eventManager.handleSelectionChangedForRangeModeBind);\n sheet.on(WorkSheetEventType.SELECTION_END, this.eventManager.handleSelectionChangedForRangeModeBind);\n\n // 在公式管理器中添加这个sheet\n try {\n const normalizedData = this.formulaManager.normalizeSheetData(sheetDefine.data, sheet.tableInstance);\n this.formulaManager.addSheet(sheetDefine.sheetKey, normalizedData);\n // 加载保存的公式数据(如果有)\n if (sheetDefine.formulas && Object.keys(sheetDefine.formulas).length > 0) {\n this.loadFormulas(sheetDefine.sheetKey, sheetDefine.formulas);\n }\n } catch (error) {\n console.warn(`Sheet ${sheetDefine.sheetKey} may already exist in formula manager:`, error);\n // 如果添加失败(可能已存在),继续执行\n }\n\n return sheet;\n }\n /**\n * 加载指定工作表的公式数据\n * @param sheetKey 工作表键\n * @param formulas 公式数据 (A1表示法的单元格引用 -> 公式内容)\n */\n private loadFormulas(sheetKey: string, formulas: Record<string, string>): void {\n if (!formulas || Object.keys(formulas).length === 0) {\n return;\n }\n\n try {\n // 优化公式计算顺序\n const sortedFormulas = this.formulaManager.sortFormulasByDependency(sheetKey, formulas);\n // 按照优化后的顺序设置公式\n for (const [cellRef, formula] of sortedFormulas) {\n // 解析单元格引用 (如 A1, B2) 到行列索引\n const { row, col } = this.parseCellKey(cellRef);\n // 设置单元格公式\n this.formulaManager.setCellContent({ sheet: sheetKey, row, col }, formula);\n }\n\n // 刷新计算\n this.formulaManager.rebuildAndRecalculate();\n } catch (error) {\n console.error(`Failed to load formulas for sheet ${sheetKey}:`, error);\n }\n }\n\n /**\n * 将单元格引用(A1表示法)解析为行列索引\n * @param cellKey 单元格引用 (如 A1, B2)\n * @returns 行列索引 (0-based)\n */\n private parseCellKey(cellKey: string): { row: number; col: number } {\n // 匹配列引用(字母部分)和行引用(数字部分)\n const match = cellKey.match(/^([A-Za-z]+)(\\d+)$/);\n if (!match) {\n throw new Error(`Invalid cell reference: ${cellKey}`);\n }\n const [, colStr, rowStr] = match;\n // 解析行索引 (1-based -> 0-based)\n const row = parseInt(rowStr, 10) - 1;\n // 解析列索引 (A -> 0, B -> 1, ..., Z -> 25, AA -> 26, etc.)\n let col = 0;\n for (let i = 0; i < colStr.length; i++) {\n const charCode = colStr.toUpperCase().charCodeAt(i) - 65; // 65 is ASCII for 'A'\n col = col * 26 + charCode;\n }\n return { row, col };\n }\n\n /**\n * 恢复筛选状态\n */\n private restoreFilterState(sheet: WorkSheet, sheetDefine: ISheetDefine): void {\n // 如果没有保存的筛选状态,直接返回\n if (!sheetDefine.filterState) {\n return;\n }\n\n // console.log(`恢复 Sheet ${sheetDefine.sheetKey} 的筛选状态:`, sheetDefine.filterState);\n\n // 等待表格初始化完成\n setTimeout(() => {\n if (sheet.tableInstance && sheet.tableInstance.pluginManager) {\n const filterPlugin = sheet.tableInstance.pluginManager.getPluginByName('Filter') as any;\n if (filterPlugin) {\n filterPlugin.setFilterState(sheetDefine.filterState);\n } else {\n console.warn(`Sheet ${sheetDefine.sheetKey} 未找到筛选插件或插件不支持 setFilterState 方法`);\n }\n } else {\n console.warn(`Sheet ${sheetDefine.sheetKey} 表格实例或插件管理器未初始化`);\n }\n }, 0);\n }\n\n /**\n * 添加新sheet\n */\n private _addNewSheet(): void {\n // 生成新sheet的key和title\n const sheetCount = this.sheetManager.getSheetCount();\n const baseKey = `sheet${sheetCount + 1}`;\n const baseTitle = `Sheet ${sheetCount + 1}`;\n let key = baseKey;\n let title = baseTitle;\n let index = sheetCount + 1;\n // 检查key和title是否被占用,递增直到唯一\n const existingKeys = new Set(this.sheetManager.getAllSheets().map(s => s.sheetKey));\n const existingTitles = new Set(this.sheetManager.getAllSheets().map(s => s.sheetTitle));\n while (existingKeys.has(key) || existingTitles.has(title)) {\n index += 1;\n key = `sheet${index}`;\n title = `Sheet ${index}`;\n }\n\n // 创建新sheet配置\n const newSheet: ISheetDefine = {\n sheetKey: key,\n sheetTitle: title,\n columnCount: 20,\n rowCount: 100,\n data: []\n };\n\n // 添加到管理器\n this.sheetManager.addSheet(newSheet);\n\n // 激活新sheet\n this.activateSheet(key);\n }\n\n /**\n * 更新公式栏\n */\n private updateFormulaBar(): void {\n this.formulaUIManager.updateFormulaBar();\n }\n\n /**\n * 获取公式管理器\n */\n getFormulaManager(): FormulaManager {\n return this.formulaManager;\n }\n /**\n * 获取Sheet管理器\n */\n getSheetManager(): SheetManager {\n return this.sheetManager;\n }\n\n /**\n * 获取活动Sheet实例\n */\n getActiveSheet(): WorkSheet | null {\n return this.activeWorkSheet;\n }\n\n /**\n * 保存所有数据为配置\n */\n saveToConfig(): IVTableSheetOptions {\n // 收集所有sheet的数据\n const sheets: ISheetDefine[] = [];\n\n this.sheetManager.getAllSheets().forEach(sheetDefine => {\n const instance = this.workSheetInstances.get(sheetDefine.sheetKey);\n if (instance) {\n const data = instance.getCopiedData();\n //column中去除field字段 (field字段会在columns.map中被使用)\n const columns = instance.getColumns().map(column => {\n // 解构时省略field属性\n const { ...rest } = column;\n // 删除field属性\n delete rest.field;\n return rest;\n });\n // 找到最后一个有title的列的索引\n const lastTitleIndex = columns.reduce((lastIndex, column, index) => (column.title ? index : lastIndex), -1);\n\n // 从最后一个有title的列之后删除所有列\n if (lastTitleIndex === -1) {\n columns.length = 0; // 清空数组\n } else {\n columns.splice(lastTitleIndex + 1);\n }\n // 找到最后一个有非空值的行\n const lastDataIndex = data.reduce((lastIndex, rowData, index) => (rowData ? index : lastIndex), -1);\n // 保留到最后一个有值的行,删除之后的空行\n if (lastDataIndex === -1) {\n data.length = 0; // 清空数组\n } else {\n data.splice(lastDataIndex + 1);\n }\n\n // 获取筛选状态\n let filterState = null;\n const filterPlugin = instance.tableInstance.pluginManager.getPluginByName('Filter') as any;\n if (filterPlugin) {\n filterState = filterPlugin.getFilterState();\n }\n\n // 获取排序状态\n let sortState = instance.tableInstance.internalProps.sortState;\n let currentSortState;\n if (sortState) {\n sortState = Array.isArray(sortState) ? sortState : [sortState];\n currentSortState = sortState.map(item => ({\n field: item.field,\n order: item.order,\n ...(item.orderFn != null && { orderFn: item.orderFn })\n }));\n }\n\n // 使用FormulaManager的导出方法获取所有公式\n const formulas = this.formulaManager.exportFormulas(sheetDefine.sheetKey);\n\n sheets.push({\n ...sheetDefine,\n data,\n columns,\n cellMerge: instance.tableInstance.options.customMergeCell as TYPES.CustomMergeCellArray,\n showHeader: instance.tableInstance.options.showHeader,\n frozenRowCount: instance.tableInstance.frozenRowCount,\n frozenColCount: instance.tableInstance.frozenColCount,\n active: sheetDefine.sheetKey === this.sheetManager.getActiveSheet().sheetKey,\n filterState: filterState,\n sortState: currentSortState,\n formulas: Object.keys(formulas).length > 0 ? formulas : undefined\n });\n } else {\n sheets.push(sheetDefine);\n }\n });\n\n return {\n ...this.options,\n sheets\n };\n }\n\n /** 导出当前sheet到文件 */\n exportSheetToFile(fileType: 'csv' | 'xlsx'): void {\n const sheet = this.getActiveSheet();\n if (!sheet) {\n return;\n }\n if (fileType === 'csv') {\n if ((sheet.tableInstance as any)?.exportToCsv) {\n (sheet.tableInstance as any).exportToCsv();\n } else {\n console.warn('Please configure TableExportPlugin in VTablePluginModules');\n }\n } else {\n if ((sheet.tableInstance as any)?.exportToExcel) {\n (sheet.tableInstance as any).exportToExcel();\n } else {\n console.warn('Please configure TableExportPlugin in VTablePluginModules');\n }\n }\n }\n /** 导入文件到当前sheet */\n importFileToSheet(): void {\n const sheet = this.getActiveSheet();\n if (!sheet) {\n return;\n }\n if ((sheet.tableInstance as any)?.importFile) {\n (sheet.tableInstance as any).importFile();\n } else {\n console.warn('Please configure ExcelImportPlugin in VTablePluginModules');\n }\n }\n /**\n * 获取容器元素\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n\n /**\n * 获取根元素\n */\n getRootElement(): HTMLElement {\n return this.rootElement;\n }\n\n /**\n * 获取选项\n */\n getOptions(): IVTableSheetOptions {\n return this.options;\n }\n\n /**\n * 获取公式栏元素\n */\n getFormulaBarElement(): HTMLElement | null {\n return this.formulaBarElement;\n }\n\n /**\n * 获取sheet标签栏元素\n */\n getSheetTabElement(): HTMLElement | null {\n return this.sheetTabElement;\n }\n\n /**\n * 获取内容区域元素\n */\n getContentElement(): HTMLElement {\n return this.contentElement;\n }\n\n /**\n * 销毁实例\n */\n release(): void {\n // 释放事件管理器\n this.eventManager.release();\n this.formulaManager.release();\n this.formulaUIManager.release();\n // 移除点击外部监听器\n this.sheetTabEventHandler.removeClickOutsideListener();\n // 销毁所有sheet实例\n this.workSheetInstances.forEach(instance => {\n instance.release();\n });\n // 清空容器\n if (this.rootElement && this.rootElement.parentNode) {\n this.rootElement.parentNode.removeChild(this.rootElement);\n }\n\n if (this.formulaAutocomplete) {\n this.formulaAutocomplete.release();\n }\n if (this.formulaManager.cellHighlightManager) {\n this.formulaManager.cellHighlightManager.release();\n }\n }\n\n /**\n * 导出指定sheet的数据\n * @param sheetKey sheet的key\n * @returns 数据\n */\n exportData(sheetKey: string): any[][] {\n const sheet = this.workSheetInstances.get(sheetKey);\n if (!sheet) {\n return [];\n }\n return sheet.getData();\n }\n\n /**\n * 导出所有sheet的数据\n * @returns 数据\n */\n exportAllData(): any[][] {\n const sheets = Array.from(this.workSheetInstances.values());\n return sheets.map(sheet => sheet.getData());\n }\n\n /**\n * resize\n */\n resize(): void {\n // const containerWidth = this.getContainer().clientWidth;\n // const containerHeight = this.getContainer().clientHeight;\n // this.rootElement.style.width = `${this.getOptions().width || containerWidth}px`;\n // this.rootElement.style.height = `${this.getOptions().height || containerHeight}px`;\n this.getActiveSheet()?.resize();\n }\n\n /**\n * 若所选范围包含当前正在编辑的单元格,自动排除该单元格以避免 #CYCLE!\n */\n 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}\n"]}
1
+ {"version":3,"sources":["../src/components/vtable-sheet.ts"],"names":[],"mappings":"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","file":"vtable-sheet.js","sourcesContent":["import { FormulaManager } from '../managers/formula-manager';\nimport SheetManager from '../managers/sheet-manager';\nimport { WorkSheet } from '../core/WorkSheet';\nimport * as VTable from '@visactor/vtable';\nimport { getTablePlugins } from '../core/table-plugins';\nimport { EventManager } from '../event/event-manager';\nimport { showSnackbar } from '../tools/ui/snackbar';\nimport type { IVTableSheetOptions, ISheetDefine, CellValueChangedEvent, ImportResult } from '../ts-types';\nimport { WorkSheetEventType } from '../ts-types';\nimport SheetTabDragManager from '../managers/tab-drag-manager';\nimport { checkTabTitle } from '../tools';\nimport { FormulaAutocomplete } from '../formula/formula-autocomplete';\nimport { formulaEditor } from '../formula/formula-editor';\nimport { CellHighlightManager } from '../formula/cell-highlight-manager';\nimport type { TYPES } from '@visactor/vtable';\nimport { MenuManager } from '../managers/menu-manager';\nimport { FormulaUIManager } from '../formula/formula-ui-manager';\nimport { SheetTabEventHandler } from './sheet-tab-event-handler';\n\n// 注册公式编辑器\nVTable.register.editor('formula', formulaEditor);\nexport default class VTableSheet {\n /** DOM容器 */\n private container: HTMLElement;\n /** 配置选项 */\n private options: IVTableSheetOptions;\n /** sheet管理器 */\n private sheetManager: SheetManager;\n /** 公式管理器 */\n formulaManager: FormulaManager;\n /** 事件管理器 */\n private eventManager: EventManager;\n\n /** 菜单管理 */\n private menuManager: MenuManager;\n /** 当前活动sheet实例 */\n private activeWorkSheet: WorkSheet | null = null;\n /** 所有sheet实例 */\n workSheetInstances: Map<string, WorkSheet> = new Map();\n /** 公式自动补全 */\n private formulaAutocomplete: FormulaAutocomplete | null = null;\n\n /** 公式UI管理器 */\n formulaUIManager: FormulaUIManager;\n\n /** UI组件 */\n private rootElement: HTMLElement;\n private formulaBarElement: HTMLElement | null = null;\n private sheetTabElement: HTMLElement | null = null;\n private mainMenuElement: HTMLElement | null = null;\n private contentElement: HTMLElement;\n\n // tab拖拽管理器\n private dragManager: SheetTabDragManager;\n /** sheet标签事件处理器 */\n private sheetTabEventHandler: SheetTabEventHandler;\n\n /**\n * 构造函数\n * @param options 配置选项\n */\n constructor(container: HTMLElement, options: IVTableSheetOptions) {\n this.container = container;\n this.options = this.mergeDefaultOptions(options);\n\n // 创建管理器\n this.sheetManager = new SheetManager();\n this.formulaManager = new FormulaManager(this);\n this.eventManager = new EventManager(this);\n this.dragManager = new SheetTabDragManager(this);\n this.menuManager = new MenuManager(this);\n this.formulaUIManager = new FormulaUIManager(this);\n this.sheetTabEventHandler = new SheetTabEventHandler(this);\n\n // 初始化UI\n this.initUI();\n\n // 初始化sheets\n this.initSheets();\n\n this.resize();\n }\n\n /**\n * 合并默认配置\n */\n private mergeDefaultOptions(options: IVTableSheetOptions): IVTableSheetOptions {\n return {\n showFormulaBar: true,\n showSheetTab: true,\n defaultRowHeight: 25,\n defaultColWidth: 100,\n ...options\n };\n }\n\n /**\n * 初始化公式自动补全\n */\n private initFormulaAutocomplete(): void {\n if (!this.formulaBarElement) {\n return;\n }\n\n const formulaInput = this.formulaUIManager.formulaInput;\n if (formulaInput) {\n this.formulaAutocomplete = new FormulaAutocomplete(this.rootElement, this);\n this.formulaAutocomplete.attachTo(formulaInput);\n }\n }\n\n /**\n * 初始化UI\n */\n private initUI(): void {\n // 创建根元素\n this.rootElement = document.createElement('div');\n this.rootElement.className = 'vtable-sheet-container';\n // this.rootElement.style.width = `${this.options.width}px`;\n // this.rootElement.style.height = `${this.options.height}px`;\n this.container.appendChild(this.rootElement);\n //创建顶部菜单和公式的容器\n const topContainer = document.createElement('div');\n topContainer.className = 'vtable-sheet-top-container';\n this.rootElement.appendChild(topContainer);\n\n // 创建主菜单\n if (this.options.mainMenu?.show) {\n this.mainMenuElement = this.menuManager.createMainMenu();\n topContainer.appendChild(this.mainMenuElement);\n }\n // 创建公式栏\n if (this.options.showFormulaBar) {\n this.formulaBarElement = this.formulaUIManager.createFormulaBar();\n topContainer.appendChild(this.formulaBarElement);\n\n this.initFormulaAutocomplete();\n }\n\n // 创建内容区域\n this.contentElement = document.createElement('div');\n this.contentElement.className = 'vtable-sheet-content';\n this.rootElement.appendChild(this.contentElement);\n\n // 创建sheet切换栏\n if (this.options.showSheetTab) {\n this.sheetTabElement = this.createSheetTab();\n this.rootElement.appendChild(this.sheetTabElement);\n }\n }\n\n /**\n * 创建sheet切换栏\n */\n private createSheetTab(): HTMLElement {\n // SVG图标常量\n const addIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z\"/>' +\n '</svg>';\n const leftIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>' +\n '</svg>';\n const rightIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/>' +\n '</svg>';\n const menuIcon =\n '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\">' +\n '<path fill=\"currentColor\" d=\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 ' +\n '.9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/>' +\n '</svg>';\n\n const sheetTab = document.createElement('div');\n sheetTab.className = 'vtable-sheet-tab-bar';\n\n // 创建左侧渐变效果\n const fadeLeft = document.createElement('div');\n fadeLeft.className = 'vtable-sheet-fade-left';\n fadeLeft.style.display = 'none';\n sheetTab.appendChild(fadeLeft);\n\n // 创建中间的tabs容器\n const tabsContainer = document.createElement('div');\n tabsContainer.className = 'vtable-sheet-tabs-container';\n tabsContainer.addEventListener('scroll', () =>\n this.sheetTabEventHandler.updateFadeEffects(tabsContainer, fadeLeft, fadeRight)\n );\n sheetTab.appendChild(tabsContainer);\n\n // 创建插入指示器\n const insertIndicator = document.createElement('div');\n insertIndicator.className = 'vtable-sheet-insert-indicator';\n insertIndicator.style.display = 'none';\n tabsContainer.appendChild(insertIndicator);\n\n // 创建右侧渐变效果\n const fadeRight = document.createElement('div');\n fadeRight.className = 'vtable-sheet-fade-right';\n sheetTab.appendChild(fadeRight);\n\n // 添加新增sheet按钮\n const addButton = document.createElement('button');\n addButton.className = 'vtable-sheet-add-button';\n addButton.innerHTML = addIcon;\n addButton.title = '添加工作表';\n addButton.addEventListener('click', () => this._addNewSheet());\n sheetTab.appendChild(addButton);\n\n // 创建导航按钮容器\n const navButtons = document.createElement('div');\n navButtons.className = 'vtable-sheet-nav-buttons';\n\n // 创建左侧滚动按钮\n const leftScrollBtn = document.createElement('button');\n leftScrollBtn.className = 'vtable-sheet-scroll-button';\n leftScrollBtn.innerHTML = leftIcon;\n leftScrollBtn.title = '向左滚动';\n leftScrollBtn.addEventListener('click', () => this.sheetTabEventHandler.scrollSheetTabs('left', tabsContainer));\n navButtons.appendChild(leftScrollBtn);\n\n // 创建右侧滚动按钮\n const rightScrollBtn = document.createElement('button');\n rightScrollBtn.className = 'vtable-sheet-scroll-button';\n rightScrollBtn.innerHTML = rightIcon;\n rightScrollBtn.title = '向右滚动';\n rightScrollBtn.addEventListener('click', () => this.sheetTabEventHandler.scrollSheetTabs('right', tabsContainer));\n navButtons.appendChild(rightScrollBtn);\n\n // 创建sheet菜单按钮\n const menuButton = document.createElement('button');\n menuButton.className = 'vtable-sheet-menu-button';\n menuButton.innerHTML = menuIcon;\n menuButton.title = '工作表选项';\n menuButton.addEventListener('click', e => this.sheetTabEventHandler.toggleSheetMenu(e));\n navButtons.appendChild(menuButton);\n\n // 创建菜单容器\n const menuContainer = document.createElement('ul');\n menuContainer.className = 'vtable-sheet-menu-list';\n sheetTab.appendChild(menuContainer);\n\n sheetTab.appendChild(navButtons);\n // 初始化渐变效果\n setTimeout(() => {\n this.sheetTabEventHandler.updateFadeEffects(tabsContainer, fadeLeft, fadeRight);\n }, 100);\n\n return sheetTab;\n }\n\n /**\n * 激活sheet标签并滚动到可见区域\n */\n private _activeSheetTab(): void {\n this.sheetTabEventHandler.activeSheetTab();\n }\n /**\n * 更新sheet切换标签\n * @param tabsContainer 标签容器\n */\n updateSheetTabs(\n tabsContainer: HTMLElement = this.sheetTabElement?.querySelector('.vtable-sheet-tabs-container')\n ): void {\n if (!tabsContainer) {\n return;\n }\n // 清除现有标签\n const tabs = tabsContainer.querySelectorAll('.vtable-sheet-tab');\n tabs.forEach(tab => {\n tab.remove();\n });\n // 添加sheet标签\n const sheets = this.sheetManager.getAllSheets();\n sheets.forEach((sheet, index) => {\n tabsContainer.appendChild(this.createSheetTabItem(sheet, index));\n });\n // 激活sheet标签并滚动到可见区域\n this._activeSheetTab();\n }\n /**\n * 创建tab栏标签项\n */\n private createSheetTabItem(sheet: ISheetDefine, index: number): HTMLElement {\n const tab = document.createElement('div');\n tab.className = 'vtable-sheet-tab';\n tab.dataset.key = sheet.sheetKey;\n tab.textContent = sheet.sheetTitle;\n tab.title = sheet.sheetTitle;\n tab.addEventListener('click', () => this.activateSheet(sheet.sheetKey));\n tab.addEventListener('dblclick', () =>\n this.sheetTabEventHandler.handleSheetTabDblClick(sheet.sheetKey, sheet.sheetTitle)\n );\n // 拖拽事件\n tab.addEventListener('mousedown', e => this.dragManager.handleTabMouseDown(e, sheet.sheetKey));\n\n return tab;\n }\n\n /**\n * 更新sheet列表\n */\n updateSheetMenu(): void {\n this.sheetTabEventHandler.updateSheetMenu();\n }\n\n /**\n * 初始化sheets\n */\n private initSheets(): void {\n if (this.options.sheets && this.options.sheets.length > 0) {\n // 添加所有sheet\n this.options.sheets.forEach((sheetDefine: ISheetDefine) => {\n this.sheetManager.addSheet(sheetDefine);\n });\n\n // 找到active的sheet\n let activeSheetKey = '';\n const activeSheet = this.options.sheets.find((sheet: ISheetDefine) => sheet.active);\n if (activeSheet) {\n activeSheetKey = activeSheet.sheetKey;\n } else {\n activeSheetKey = this.options.sheets[0].sheetKey;\n }\n\n // 激活sheet\n this.activateSheet(activeSheetKey);\n } else {\n // 如果没有提供sheets,创建一个默认的\n this._addNewSheet();\n }\n }\n\n /**\n * 激活指定sheet\n * @param sheetKey sheet的key\n */\n activateSheet(sheetKey: string): void {\n // 设置活动sheet\n this.sheetManager.setActiveSheet(sheetKey);\n\n // 获取sheet定义\n const sheetDefine = this.sheetManager.getSheet(sheetKey);\n if (!sheetDefine) {\n return;\n }\n\n // 隐藏所有sheet实例\n this.workSheetInstances.forEach(instance => {\n instance.getElement().style.display = 'none';\n });\n\n // 如果已经存在实例,则显示并激活对应tab和menu\n if (this.workSheetInstances.has(sheetKey)) {\n const instance = this.workSheetInstances.get(sheetKey)!;\n instance.getElement().style.display = 'block';\n this.activeWorkSheet = instance;\n\n // 更新公式管理器中的活动工作表(在实例激活后)\n this.formulaManager.setActiveSheet(sheetKey);\n\n // sheet标签和菜单项激活样式\n this._activeSheetTab();\n this.sheetTabEventHandler.activeSheetMenuItem();\n\n // 恢复筛选状态\n this.restoreFilterState(instance, sheetDefine);\n } else {\n // 创建新的sheet实例\n const instance = this.createWorkSheetInstance(sheetDefine);\n this.workSheetInstances.set(sheetKey, instance);\n this.activeWorkSheet = instance;\n\n // 更新公式管理器中的活动工作表(在实例创建后)\n this.formulaManager.setActiveSheet(sheetKey);\n\n // 刷新sheet标签和菜单\n this.updateSheetTabs();\n this.updateSheetMenu();\n\n // 恢复筛选状态\n this.restoreFilterState(instance, sheetDefine);\n }\n\n this.updateFormulaBar();\n }\n\n addSheet(sheet: ISheetDefine): void {\n this.sheetManager.addSheet(sheet);\n this.updateSheetTabs();\n this.updateSheetMenu();\n }\n\n /**\n * 删除sheet\n * @param sheetKey 工作表key\n */\n removeSheet(sheetKey: string): void {\n if (this.sheetManager.getSheetCount() <= 1) {\n showSnackbar('至少保留一个工作表', 1300);\n return;\n }\n // 删除实例对应的dom元素\n const instance = this.workSheetInstances.get(sheetKey);\n if (instance) {\n instance.getElement().remove();\n this.workSheetInstances.delete(sheetKey);\n }\n // 删除sheet定义\n const newActiveSheetKey = this.sheetManager.removeSheet(sheetKey);\n // 激活新的sheet(如果有)\n if (newActiveSheetKey) {\n this.activateSheet(newActiveSheetKey);\n }\n this.updateSheetTabs();\n this.updateSheetMenu();\n }\n getSheetCount(): number {\n return this.sheetManager.getSheetCount();\n }\n getSheet(sheetKey: string): ISheetDefine | null {\n return this.sheetManager.getSheet(sheetKey);\n }\n getAllSheets(): ISheetDefine[] {\n return this.sheetManager.getAllSheets();\n }\n\n /**\n * 创建sheet实例\n * @param sheetDefine sheet的定义\n */\n private createWorkSheetInstance(sheetDefine: ISheetDefine): WorkSheet {\n formulaEditor.setSheet(this);\n // 计算内容区域大小\n const contentWidth = this.contentElement.clientWidth;\n const contentHeight = this.contentElement.clientHeight;\n\n // 创建sheet实例\n const sheet = new WorkSheet(this, {\n ...sheetDefine,\n container: this.contentElement,\n width: contentWidth,\n height: contentHeight,\n defaultRowHeight: this.options.defaultRowHeight,\n defaultColWidth: this.options.defaultColWidth,\n plugins: getTablePlugins(sheetDefine, this.options),\n headerEditor: 'formula',\n editor: 'formula',\n select: {\n makeSelectCellVisible: false\n },\n style: {\n borderColor: ['#E1E4E8', '#E1E4E8', '#E1E4E8', '#E1E4E8'],\n borderLineWidth: [1, 1, 1, 1],\n borderLineDash: [null, null, null, null],\n padding: [8, 8, 8, 8]\n },\n editCellTrigger: ['api', 'keydown', 'doubleclick'],\n customMergeCell: sheetDefine.cellMerge,\n theme: sheetDefine.theme?.tableTheme || this.options.theme?.tableTheme\n } as any);\n\n // 注册事件 - 使用预先绑定的事件处理方法和WorkSheetEventType枚举\n sheet.on(WorkSheetEventType.CELL_CLICK, this.eventManager.handleCellClickBind);\n sheet.on(WorkSheetEventType.CELL_VALUE_CHANGED, this.eventManager.handleCellValueChangedBind);\n sheet.on(WorkSheetEventType.SELECTION_CHANGED, this.eventManager.handleSelectionChangedForRangeModeBind);\n sheet.on(WorkSheetEventType.SELECTION_END, this.eventManager.handleSelectionChangedForRangeModeBind);\n\n // 在公式管理器中添加这个sheet\n try {\n const normalizedData = this.formulaManager.normalizeSheetData(sheetDefine.data, sheet.tableInstance);\n this.formulaManager.addSheet(sheetDefine.sheetKey, normalizedData);\n // 加载保存的公式数据(如果有)\n if (sheetDefine.formulas && Object.keys(sheetDefine.formulas).length > 0) {\n this.loadFormulas(sheetDefine.sheetKey, sheetDefine.formulas);\n }\n } catch (error) {\n console.warn(`Sheet ${sheetDefine.sheetKey} may already exist in formula manager:`, error);\n // 如果添加失败(可能已存在),继续执行\n }\n\n return sheet;\n }\n /**\n * 加载指定工作表的公式数据\n * @param sheetKey 工作表键\n * @param formulas 公式数据 (A1表示法的单元格引用 -> 公式内容)\n */\n private loadFormulas(sheetKey: string, formulas: Record<string, string>): void {\n if (!formulas || Object.keys(formulas).length === 0) {\n return;\n }\n\n try {\n // 优化公式计算顺序\n const sortedFormulas = this.formulaManager.sortFormulasByDependency(sheetKey, formulas);\n // 按照优化后的顺序设置公式\n for (const [cellRef, formula] of sortedFormulas) {\n // 解析单元格引用 (如 A1, B2) 到行列索引\n const { row, col } = this.parseCellKey(cellRef);\n // 设置单元格公式\n this.formulaManager.setCellContent({ sheet: sheetKey, row, col }, formula);\n }\n\n // 刷新计算\n this.formulaManager.rebuildAndRecalculate();\n } catch (error) {\n console.error(`Failed to load formulas for sheet ${sheetKey}:`, error);\n }\n }\n\n /**\n * 将单元格引用(A1表示法)解析为行列索引\n * @param cellKey 单元格引用 (如 A1, B2)\n * @returns 行列索引 (0-based)\n */\n private parseCellKey(cellKey: string): { row: number; col: number } {\n // 匹配列引用(字母部分)和行引用(数字部分)\n const match = cellKey.match(/^([A-Za-z]+)(\\d+)$/);\n if (!match) {\n throw new Error(`Invalid cell reference: ${cellKey}`);\n }\n const [, colStr, rowStr] = match;\n // 解析行索引 (1-based -> 0-based)\n const row = parseInt(rowStr, 10) - 1;\n // 解析列索引 (A -> 0, B -> 1, ..., Z -> 25, AA -> 26, etc.)\n let col = 0;\n for (let i = 0; i < colStr.length; i++) {\n const charCode = colStr.toUpperCase().charCodeAt(i) - 65; // 65 is ASCII for 'A'\n col = col * 26 + charCode;\n }\n return { row, col };\n }\n\n /**\n * 恢复筛选状态\n */\n private restoreFilterState(sheet: WorkSheet, sheetDefine: ISheetDefine): void {\n // 如果没有保存的筛选状态,直接返回\n if (!sheetDefine.filterState) {\n return;\n }\n\n // console.log(`恢复 Sheet ${sheetDefine.sheetKey} 的筛选状态:`, sheetDefine.filterState);\n\n // 等待表格初始化完成\n setTimeout(() => {\n if (sheet.tableInstance && sheet.tableInstance.pluginManager) {\n const filterPlugin = sheet.tableInstance.pluginManager.getPluginByName('Filter') as any;\n if (filterPlugin) {\n filterPlugin.setFilterState(sheetDefine.filterState);\n } else {\n console.warn(`Sheet ${sheetDefine.sheetKey} 未找到筛选插件或插件不支持 setFilterState 方法`);\n }\n } else {\n console.warn(`Sheet ${sheetDefine.sheetKey} 表格实例或插件管理器未初始化`);\n }\n }, 0);\n }\n\n /**\n * 添加新sheet\n */\n private _addNewSheet(): void {\n // 生成新sheet的key和title\n const sheetCount = this.sheetManager.getSheetCount();\n const baseKey = `sheet${sheetCount + 1}`;\n const baseTitle = `Sheet ${sheetCount + 1}`;\n let key = baseKey;\n let title = baseTitle;\n let index = sheetCount + 1;\n // 检查key和title是否被占用,递增直到唯一\n const existingKeys = new Set(this.sheetManager.getAllSheets().map(s => s.sheetKey));\n const existingTitles = new Set(this.sheetManager.getAllSheets().map(s => s.sheetTitle));\n while (existingKeys.has(key) || existingTitles.has(title)) {\n index += 1;\n key = `sheet${index}`;\n title = `Sheet ${index}`;\n }\n\n // 创建新sheet配置\n const newSheet: ISheetDefine = {\n sheetKey: key,\n sheetTitle: title,\n columnCount: 20,\n rowCount: 100,\n data: []\n };\n\n // 添加到管理器\n this.sheetManager.addSheet(newSheet);\n\n // 激活新sheet\n this.activateSheet(key);\n }\n\n /**\n * 更新公式栏\n */\n private updateFormulaBar(): void {\n this.formulaUIManager.updateFormulaBar();\n }\n\n /**\n * 获取公式管理器\n */\n getFormulaManager(): FormulaManager {\n return this.formulaManager;\n }\n /**\n * 获取Sheet管理器\n */\n getSheetManager(): SheetManager {\n return this.sheetManager;\n }\n\n /**\n * 获取活动Sheet实例\n */\n getActiveSheet(): WorkSheet | null {\n return this.activeWorkSheet;\n }\n\n /**\n * 保存所有数据为配置\n */\n saveToConfig(): IVTableSheetOptions {\n // 收集所有sheet的数据\n const sheets: ISheetDefine[] = [];\n\n this.sheetManager.getAllSheets().forEach(sheetDefine => {\n const instance = this.workSheetInstances.get(sheetDefine.sheetKey);\n if (instance) {\n const data = instance.getCopiedData();\n //column中去除field字段 (field字段会在columns.map中被使用)\n const columns = instance.getColumns().map(column => {\n // 解构时省略field属性\n const { ...rest } = column;\n // 删除field属性\n delete rest.field;\n return rest;\n });\n // 找到最后一个有title的列的索引\n const lastTitleIndex = columns.reduce((lastIndex, column, index) => (column.title ? index : lastIndex), -1);\n\n // 从最后一个有title的列之后删除所有列\n if (lastTitleIndex === -1) {\n columns.length = 0; // 清空数组\n } else {\n columns.splice(lastTitleIndex + 1);\n }\n // 找到最后一个有非空值的行\n const lastDataIndex = data.reduce((lastIndex, rowData, index) => (rowData ? index : lastIndex), -1);\n // 保留到最后一个有值的行,删除之后的空行\n if (lastDataIndex === -1) {\n data.length = 0; // 清空数组\n } else {\n data.splice(lastDataIndex + 1);\n }\n\n // 获取筛选状态\n let filterState = null;\n const filterPlugin = instance.tableInstance.pluginManager.getPluginByName('Filter') as any;\n if (filterPlugin) {\n filterState = filterPlugin.getFilterState();\n }\n\n // 获取排序状态\n let sortState = instance.tableInstance.internalProps.sortState;\n let currentSortState;\n if (sortState) {\n sortState = Array.isArray(sortState) ? sortState : [sortState];\n currentSortState = sortState.map(item => ({\n field: item.field,\n order: item.order,\n ...(item.orderFn != null && { orderFn: item.orderFn })\n }));\n }\n\n // 使用FormulaManager的导出方法获取所有公式\n const formulas = this.formulaManager.exportFormulas(sheetDefine.sheetKey);\n\n sheets.push({\n ...sheetDefine,\n data,\n columns,\n cellMerge: instance.tableInstance.options.customMergeCell as TYPES.CustomMergeCellArray,\n showHeader: instance.tableInstance.options.showHeader,\n frozenRowCount: instance.tableInstance.frozenRowCount,\n frozenColCount: instance.tableInstance.frozenColCount,\n active: sheetDefine.sheetKey === this.sheetManager.getActiveSheet().sheetKey,\n filterState: filterState,\n sortState: currentSortState,\n formulas: Object.keys(formulas).length > 0 ? formulas : undefined\n });\n } else {\n sheets.push(sheetDefine);\n }\n });\n\n return {\n ...this.options,\n sheets\n };\n }\n\n /** 导出当前sheet到文件 */\n exportSheetToFile(fileType: 'csv' | 'xlsx'): void {\n const sheet = this.getActiveSheet();\n if (!sheet) {\n return;\n }\n if (fileType === 'csv') {\n if ((sheet.tableInstance as any)?.exportToCsv) {\n (sheet.tableInstance as any).exportToCsv();\n } else {\n console.warn('Please configure TableExportPlugin in VTablePluginModules');\n }\n } else {\n if ((sheet.tableInstance as any)?.exportToExcel) {\n (sheet.tableInstance as any).exportToExcel();\n } else {\n console.warn('Please configure TableExportPlugin in VTablePluginModules');\n }\n }\n }\n /** 导入文件到当前sheet */\n async importFileToSheet(): Promise<ImportResult | void> {\n const sheet = this.getActiveSheet();\n if (!sheet) {\n return;\n }\n if ((sheet.tableInstance as any)?.importFile) {\n return await (sheet.tableInstance as any).importFile();\n } else {\n console.warn('Please configure ExcelImportPlugin in VTablePluginModules');\n }\n }\n /**\n * 获取容器元素\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n\n /**\n * 获取根元素\n */\n getRootElement(): HTMLElement {\n return this.rootElement;\n }\n\n /**\n * 获取选项\n */\n getOptions(): IVTableSheetOptions {\n return this.options;\n }\n\n /**\n * 获取公式栏元素\n */\n getFormulaBarElement(): HTMLElement | null {\n return this.formulaBarElement;\n }\n\n /**\n * 获取sheet标签栏元素\n */\n getSheetTabElement(): HTMLElement | null {\n return this.sheetTabElement;\n }\n\n /**\n * 获取内容区域元素\n */\n getContentElement(): HTMLElement {\n return this.contentElement;\n }\n\n /**\n * 销毁实例\n */\n release(): void {\n // 释放事件管理器\n this.eventManager.release();\n this.formulaManager.release();\n this.formulaUIManager.release();\n // 移除点击外部监听器\n this.sheetTabEventHandler.removeClickOutsideListener();\n // 销毁所有sheet实例\n this.workSheetInstances.forEach(instance => {\n instance.release();\n });\n // 清空容器\n if (this.rootElement && this.rootElement.parentNode) {\n this.rootElement.parentNode.removeChild(this.rootElement);\n }\n\n if (this.formulaAutocomplete) {\n this.formulaAutocomplete.release();\n }\n if (this.formulaManager.cellHighlightManager) {\n this.formulaManager.cellHighlightManager.release();\n }\n }\n\n /**\n * 导出指定sheet的数据\n * @param sheetKey sheet的key\n * @returns 数据\n */\n exportData(sheetKey: string): any[][] {\n const sheet = this.workSheetInstances.get(sheetKey);\n if (!sheet) {\n return [];\n }\n return sheet.getData();\n }\n\n /**\n * 导出所有sheet的数据\n * @returns 数据\n */\n exportAllData(): any[][] {\n const sheets = Array.from(this.workSheetInstances.values());\n return sheets.map(sheet => sheet.getData());\n }\n\n /**\n * resize\n */\n resize(): void {\n // const containerWidth = this.getContainer().clientWidth;\n // const containerHeight = this.getContainer().clientHeight;\n // this.rootElement.style.width = `${this.getOptions().width || containerWidth}px`;\n // this.rootElement.style.height = `${this.getOptions().height || containerHeight}px`;\n this.getActiveSheet()?.resize();\n }\n\n /**\n * 若所选范围包含当前正在编辑的单元格,自动排除该单元格以避免 #CYCLE!\n */\n 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}\n"]}
@@ -41,6 +41,9 @@ export declare class WorkSheet extends EventTarget implements IWorkSheetAPI {
41
41
  private handleCellValueChanged;
42
42
  private handleDataRecordsChanged;
43
43
  private handleColumnsChanged;
44
+ private handleChangeHeaderPosition;
45
+ private handleChangeColumnHeaderPosition;
46
+ handleChangeRowHeaderPosition(event: any): void;
44
47
  protected fireEvent(eventName: string, eventData: any): void;
45
48
  on(eventName: string, handler: (...args: any[]) => void): this;
46
49
  private resizeTimer;
@@ -79,12 +79,16 @@ class WorkSheet extends event_target_1.EventTarget {
79
79
  cornerRadius: 0,
80
80
  borderLineWidth: 0
81
81
  });
82
- } else changedTheme = this.options.theme, changedTheme.frameStyle = Object.assign({}, this.options.theme.frameStyle, {
82
+ } else "string" == typeof this.options.theme || (changedTheme = this.options.theme,
83
+ changedTheme.frameStyle = Object.assign({}, this.options.theme.frameStyle, {
83
84
  shadowBlur: 0,
84
85
  cornerRadius: 0,
85
86
  borderLineWidth: 0
86
- });
87
+ }));
87
88
  return Object.assign(Object.assign({}, this.options), {
89
+ dragOrder: {
90
+ maintainArrayDataOrder: !0
91
+ },
88
92
  addRecordRule: "Array",
89
93
  defaultCursor: "cell",
90
94
  records: this.options.data,
@@ -124,6 +128,8 @@ class WorkSheet extends event_target_1.EventTarget {
124
128
  this.handleColumnsChanged("delete", event);
125
129
  })), this.tableInstance.on("click_cell", (() => {
126
130
  this.element.classList.add("vtable-excel-cursor");
131
+ })), this.tableInstance.on("change_header_position", (event => {
132
+ this.handleChangeHeaderPosition(event);
127
133
  })));
128
134
  }
129
135
  handleCellSelected(event) {
@@ -229,6 +235,19 @@ class WorkSheet extends event_target_1.EventTarget {
229
235
  }
230
236
  } catch (error) {}
231
237
  }
238
+ handleChangeHeaderPosition(event) {
239
+ "column" === event.movingColumnOrRow ? this.handleChangeColumnHeaderPosition(event) : this.handleChangeRowHeaderPosition(event);
240
+ }
241
+ handleChangeColumnHeaderPosition(event) {
242
+ const {source: source, target: target} = event, {col: sourceCol, row: sourceRow} = source, {col: targetCol, row: targetRow} = target, sheetKey = this.getKey(), normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(this.tableInstance.records, this.tableInstance);
243
+ this.vtableSheet.formulaManager.formulaEngine.updateSheetData(sheetKey, normalizedData),
244
+ this.vtableSheet.formulaManager.changeColumnHeaderPosition(sheetKey, sourceCol, targetCol);
245
+ }
246
+ handleChangeRowHeaderPosition(event) {
247
+ const {source: source, target: target} = event, {row: sourceRow} = source, {row: targetRow} = target, sheetKey = this.getKey(), normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(this.tableInstance.records, this.tableInstance);
248
+ this.vtableSheet.formulaManager.formulaEngine.updateSheetData(sheetKey, normalizedData),
249
+ this.vtableSheet.formulaManager.changeRowHeaderPosition(sheetKey, sourceRow, targetRow);
250
+ }
232
251
  fireEvent(eventName, eventData) {
233
252
  this.fire(eventName, eventData);
234
253
  }
@@ -267,7 +286,7 @@ class WorkSheet extends event_target_1.EventTarget {
267
286
  this.sheetTitle = title, this.options.sheetTitle = title;
268
287
  }
269
288
  getColumns() {
270
- return this.options.columns || [];
289
+ return this.tableInstance.columns || [];
271
290
  }
272
291
  getData() {
273
292
  return this.options.data || [];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/WorkSheet.ts"],"names":[],"mappings":"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","file":"WorkSheet.js","sourcesContent":["import type { ColumnDefine, ListTableConstructorOptions } from '@visactor/vtable';\nimport { ListTable } from '@visactor/vtable';\nimport { isValid, type EventEmitter } from '@visactor/vutils';\nimport { EventTarget } from '../event/event-target';\nimport type {\n IWorkSheetOptions,\n IWorkSheetAPI,\n CellCoord,\n CellRange,\n CellValue,\n CellValueChangedEvent,\n CellClickEvent,\n SelectionChangedEvent,\n IFormulaManagerOptions\n} from '../ts-types';\nimport { WorkSheetEventType } from '../ts-types';\nimport type { TYPES, VTableSheet } from '..';\nimport { isPropertyWritable } from '../tools';\nimport { VTableThemes } from '../ts-types';\nimport { detectFunctionParameterPosition } from '../formula/formula-helper';\n\n/**\n * Sheet constructor options. 内部类型Sheet的构造函数参数类型\n */\nexport type WorkSheetConstructorOptions = {\n /** 表格数据 */\n data?: any[][];\n /** 公式计算选项 */\n formula?: IFormulaManagerOptions;\n /** Sheet 唯一标识 */\n sheetKey: string;\n /** Sheet 标题 */\n sheetTitle: string;\n} & Omit<ListTableConstructorOptions, 'records'>;\n\nexport class WorkSheet extends EventTarget implements IWorkSheetAPI {\n /** 选项 */\n options: IWorkSheetOptions;\n /** 容器 */\n container: HTMLElement;\n /** 表格实例 */\n tableInstance?: ListTable;\n /** 元素 */\n element: HTMLElement;\n /** 选择范围 */\n private selection: CellRange | null = null;\n /** Sheet 唯一标识 */\n private sheetKey: string;\n /** Sheet 标题 */\n private sheetTitle: string;\n\n /** 事件总线 */\n private eventBus: EventEmitter;\n\n private vtableSheet: VTableSheet;\n\n editingCell: { sheet: string; row: number; col: number } | null = null;\n\n constructor(sheet: VTableSheet, options: IWorkSheetOptions) {\n super();\n this.options = options;\n this.container = options.container;\n\n // 初始化基本属性\n this.sheetKey = options.sheetKey;\n this.sheetTitle = options.sheetTitle;\n this.vtableSheet = sheet;\n\n // 创建表格元素\n this.element = this._createRootElement();\n this.container.appendChild(this.element);\n\n // 初始化表格\n this._initializeTable();\n\n // 设置事件监听\n this._setupEventListeners();\n }\n\n /**\n * 获取行数\n */\n get rowCount(): number {\n const data = this.getData();\n return data ? data.length : 0;\n }\n\n /**\n * 获取列数\n */\n get colCount(): number {\n const data = this.getData();\n return data && data.length > 0 ? data[0].length : 0;\n }\n\n /**\n * 获取行数\n */\n getRowCount(): number {\n return this.tableInstance.rowCount;\n }\n\n /**\n * 获取列数\n */\n getColumnCount(): number {\n return this.tableInstance.colCount;\n }\n\n /**\n * 获取表格数据\n */\n get records(): any {\n return this.getData();\n }\n\n /**\n * 获取列定义\n */\n get columns(): any {\n return this.options.columns || [];\n }\n\n /**\n * 创建根元素\n */\n private _createRootElement(): HTMLElement {\n const element = document.createElement('div');\n element.setAttribute('sheet-key', `${this.sheetKey}`);\n element.classList.add('vtable-sheet');\n element.style.outline = 'none';\n element.style.position = 'relative';\n\n const width = this.container.clientWidth || 800;\n const height = this.container.clientHeight || 600;\n\n element.style.width = `${width}px`;\n element.style.height = `${height}px`;\n\n return element;\n }\n\n /**\n * 初始化表格实例\n */\n private _initializeTable(): void {\n // 这里应该是实际的表格初始化逻辑\n const tableOptions = this._generateTableOptions();\n this.tableInstance = new ListTable(tableOptions);\n this.element.classList.add('vtable-excel-cursor');\n // 获取事件总线\n this.eventBus = (this.tableInstance as any).eventBus;\n }\n\n /**\n * 生成VTable选项\n */\n private _generateTableOptions(): ListTableConstructorOptions {\n let isShowTableHeader = this.options.showHeader;\n // 转换为ListTable的选项\n if (!this.options.columns) {\n isShowTableHeader = isValid(isShowTableHeader) ? isShowTableHeader : false;\n this.options.columns = [];\n } else {\n for (let i = 0; i < this.options.columns.length; i++) {\n this.options.columns[i].field = i;\n }\n }\n if (!this.options.data) {\n this.options.data = [];\n } else if (this.options.columns.length === 0 && this.options.firstRowAsHeader) {\n const data = this.options.data;\n if (data && data.length > 0) {\n for (let i = 0; i < data[0].length; i++) {\n this.options.columns[i] = {\n field: i,\n title: data[0][i],\n filter: !!this.options.filter\n };\n }\n }\n data.shift();\n isShowTableHeader = true;\n }\n const keyboardOptions = {\n ...this.options.keyboardOptions,\n copySelected: true,\n pasteValueToCell: true,\n showCopyCellBorder: true,\n cutSelected: true\n };\n\n //更改theme 的frameStyle\n let changedTheme: TYPES.VTableThemes.ITableThemeDefine;\n if (!this.options?.theme) {\n this.options.theme = VTableThemes.DEFAULT;\n }\n this.options.theme = this.options.theme;\n if (this.options.theme.bodyStyle && !isPropertyWritable(this.options.theme, 'bodyStyle')) {\n //测试是否使用了主题 使用了主题配置项不可写。\n changedTheme = (this.options.theme as TYPES.VTableThemes.TableTheme).extends(\n (this.options.theme as TYPES.VTableThemes.TableTheme).getExtendTheme()\n ); //防止将原主题如DARK ARCO的属性改掉\n const extendThemeOption = (changedTheme as TYPES.VTableThemes.TableTheme).getExtendTheme();\n\n extendThemeOption.frameStyle = Object.assign({}, extendThemeOption.frameStyle, {\n shadowBlur: 0,\n cornerRadius: 0,\n borderLineWidth: 0\n });\n } else {\n changedTheme = this.options.theme;\n changedTheme.frameStyle = Object.assign({}, this.options.theme.frameStyle, {\n shadowBlur: 0,\n cornerRadius: 0,\n borderLineWidth: 0\n });\n }\n return {\n ...this.options,\n addRecordRule: 'Array',\n defaultCursor: 'cell',\n records: this.options.data,\n sortState: this.options.sortState,\n container: this.element,\n showHeader: isShowTableHeader,\n keyboardOptions,\n theme: changedTheme,\n excelOptions: {\n fillHandle: true\n },\n customConfig: {\n selectCellWhenCellEditorNotExists: true\n }\n // maintainedColumnCount: 120\n // 其他特定配置\n };\n }\n\n /**\n * 设置事件监听\n */\n private _setupEventListeners(): void {\n if (this.tableInstance) {\n // 监听单元格选择事件 - 优化:移除console.log调试代码\n this.tableInstance.on('mousedown_cell', (event: any) => {\n if (this.vtableSheet.formulaManager.formulaWorkingOnCell) {\n //防止公式输入状态下,原本的input元素blur掉,导致公式输入框无法输入\n event.event.preventDefault();\n }\n });\n\n // 监听选择变化事件(多选时)\n this.tableInstance.on('selected_changed' as any, (event: any) => {\n // 判断是drag过程中的选中单元格变化\n if (!this.tableInstance.eventManager.isDraging) {\n if (!this.vtableSheet.formulaManager.formulaWorkingOnCell) {\n this.editingCell = {\n sheet: this.getKey(),\n row: event.row,\n col: event.col\n };\n }\n this.handleCellSelected(event);\n }\n this.handleSelectionChanged(event);\n });\n\n // 监听拖拽选择结束事件 - 优化:移除console.log和debugger调试代码\n this.tableInstance.on('drag_select_end' as any, (event: any) => {\n this.handleDragSelectEnd(event);\n });\n\n // 监听单元格值变更事件\n this.tableInstance.on('change_cell_value', (event: any) => {\n this.handleCellValueChanged(event);\n });\n\n // 监听数据记录变更事件 - 用于调整公式引用\n // 注意:'add_record' 事件类型需要使用 as any 绕过类型检查\n (this.tableInstance as any).on('add_record', (event: any) => {\n this.handleDataRecordsChanged('add', event);\n });\n\n // 注意:'delete_record' 事件类型需要使用 as any 绕过类型检查\n (this.tableInstance as any).on('delete_record', (event: any) => {\n this.handleDataRecordsChanged('delete', event);\n });\n // 注意:'add_column' 事件类型尚未在 VTable 中定义,这里使用 as any 绕过类型检查\n (this.tableInstance as any).on('add_column', (event: any) => {\n this.handleColumnsChanged('add', event);\n });\n\n // 注意:'delete_column' 事件类型需要使用 as any 绕过类型检查\n (this.tableInstance as any).on('delete_column', (event: any) => {\n this.handleColumnsChanged('delete', event);\n });\n\n // 监听编辑结束事件,恢复十字光标\n this.tableInstance.on('click_cell', () => {\n this.element.classList.add('vtable-excel-cursor');\n });\n }\n }\n\n /**\n * 处理单元格选择事件\n * @param event 选择事件\n */\n private handleCellSelected(event: any): void {\n // 更新选择范围\n this.selection = {\n startRow: event.row,\n startCol: event.col,\n endRow: event.row,\n endCol: event.col\n };\n\n // 使用事件类型枚举触发事件给父组件\n const cellSelectedEvent: CellClickEvent = {\n row: event.row,\n col: event.col,\n value: event.value,\n cellElement: event.cellElement,\n originalEvent: event.originalEvent\n };\n this.fire(WorkSheetEventType.CELL_CLICK, cellSelectedEvent);\n }\n\n /**\n * 处理选择变化事件\n * @param event 选择变化事件\n */\n private handleSelectionChanged(event: any): void {\n if (event?.ranges?.length) {\n const r = event.ranges[event.ranges.length - 1];\n this.selection = {\n startRow: r.start.row,\n startCol: r.start.col,\n endRow: r.end.row,\n endCol: r.end.col\n };\n }\n // 保持原始事件结构,同时确保类型符合定义\n const selectionChangedEvent: SelectionChangedEvent = {\n row: event.row,\n col: event.col,\n ranges: event.ranges,\n cells: event.cells,\n originalEvent: event.originalEvent\n };\n this.fire(WorkSheetEventType.SELECTION_CHANGED, selectionChangedEvent);\n }\n\n /**\n * 处理拖拽选择结束事件\n * @param event 拖拽选择结束事件\n */\n private handleDragSelectEnd(event: any): void {\n if (event?.cells?.length) {\n const first = event.cells[0][0];\n const lastRow = event.cells[event.cells.length - 1];\n const last = lastRow[lastRow.length - 1];\n this.selection = {\n startRow: first.row,\n startCol: first.col,\n endRow: last.row,\n endCol: last.col\n };\n }\n // 保持原始事件结构,同时确保类型符合定义\n const selectionEndEvent: SelectionChangedEvent = {\n row: event.row,\n col: event.col,\n ranges: event.ranges,\n cells: event.cells,\n originalEvent: event.originalEvent\n };\n this.fire(WorkSheetEventType.SELECTION_END, selectionEndEvent);\n }\n\n /**\n * 处理单元格值变更事件\n * @param event 值变更事件\n */\n private handleCellValueChanged(event: any): void {\n const cellValueChangedEvent: CellValueChangedEvent = {\n row: event.row,\n col: event.col,\n oldValue: event.rawValue,\n newValue: event.changedValue\n };\n this.fire(WorkSheetEventType.CELL_VALUE_CHANGED, cellValueChangedEvent);\n }\n\n /**\n * 处理数据记录变更事件 - 用于调整公式引用\n * @param type 变更类型 ('add' | 'delete')\n * @param event 数据变更事件\n */\n private handleDataRecordsChanged(type: 'add' | 'delete', event: any): void {\n try {\n const sheetKey = this.getKey();\n //#region 处理数据变化后,公式引擎中的数据也需要更新\n const normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(\n this.tableInstance.records,\n this.tableInstance\n );\n this.vtableSheet.formulaManager.formulaEngine.updateSheetData(sheetKey, normalizedData);\n //#endregion\n if (type === 'add') {\n // 处理添加记录事件\n const { recordIndex, recordCount } = event;\n if (recordIndex !== undefined && recordCount > 0) {\n // 在指定位置插入行,需要调整该位置之后的公式引用\n this.vtableSheet.formulaManager.addRows(sheetKey, recordIndex, recordCount);\n } else {\n // 默认在末尾添加\n const currentRowCount = this.getRowCount();\n this.vtableSheet.formulaManager.addRows(sheetKey, currentRowCount, recordCount);\n }\n } else if (type === 'delete') {\n // 处理删除记录事件\n const { rowIndexs, deletedCount } = event;\n if (rowIndexs && rowIndexs.length > 0) {\n // 为了简化,我们假设删除的是连续的行,从最小的索引开始\n const minIndex = Math.min(...rowIndexs.flat());\n this.vtableSheet.formulaManager.removeRows(sheetKey, minIndex, deletedCount);\n }\n }\n // update 事件不需要调整引用,因为只是数据内容变更\n } catch (error) {\n console.error(`Failed to handle data records changed (${type}):`, error);\n }\n }\n /**\n * 处理列变更事件 - 用于调整公式引用\n * @param type 变更类型 ('add' | 'delete')\n * @param event 列变更事件\n */\n private handleColumnsChanged(type: 'add' | 'delete', event: any): void {\n try {\n const sheetKey = this.getKey();\n //#region 处理数据变化后,公式引擎中的数据也需要更新\n const normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(\n this.tableInstance.records,\n this.tableInstance\n );\n this.vtableSheet.formulaManager.formulaEngine.updateSheetData(sheetKey, normalizedData);\n //#endregion\n if (type === 'add') {\n // 处理添加列事件\n const { columnIndex, columnCount } = event;\n if (columnIndex !== undefined && columnCount > 0) {\n // 在指定位置插入列,需要调整该位置之后的公式引用\n this.vtableSheet.formulaManager.addColumns(sheetKey, columnIndex, columnCount);\n } else {\n // 默认在末尾添加\n const currentColumnCount = this.getColumnCount();\n this.vtableSheet.formulaManager.addColumns(sheetKey, currentColumnCount, columnCount);\n }\n } else if (type === 'delete') {\n // 处理删除列事件\n const { deleteColIndexs } = event;\n if (deleteColIndexs && deleteColIndexs.length > 0) {\n // 为了简化,我们假设删除的是连续的列,从最小的索引开始\n const minIndex = Math.min(...deleteColIndexs.flat());\n const deletedCount = deleteColIndexs.length;\n this.vtableSheet.formulaManager.removeColumns(sheetKey, minIndex, deletedCount);\n }\n }\n // update 事件不需要调整引用,因为只是数据内容变更\n } catch (error) {\n console.error(`Failed to handle columns changed (${type}):`, error);\n }\n }\n\n /**\n * 触发事件\n * @param eventName 事件名称\n * @param eventData 事件数据\n */\n protected fireEvent(eventName: string, eventData: any): void {\n this.fire(eventName, eventData);\n }\n\n /**\n * 监听事件\n * @param eventName 事件名称\n * @param handler 事件处理函数\n */\n on(eventName: string, handler: (...args: any[]) => void): this {\n return super.on(eventName, handler);\n }\n\n // 用于防止短时间内多次调用resize的节流变量\n private resizeTimer: number | null = null;\n private isResizing = false;\n\n /**\n * 更新Sheet大小\n * 使用节流方式避免频繁调用resize\n */\n resize(): void {\n if (!this.element) {\n return;\n }\n\n // 如果正在进行调整,清除之前的定时器\n if (this.resizeTimer !== null) {\n window.clearTimeout(this.resizeTimer);\n this.resizeTimer = null;\n }\n\n // 如果已经在执行resize,设置一个短期延迟\n if (this.isResizing) {\n this.resizeTimer = window.setTimeout(() => {\n this.doResize();\n this.resizeTimer = null;\n }, 50);\n return;\n }\n\n // 否则直接执行resize\n this.doResize();\n }\n\n /**\n * 实际执行调整大小的操作\n * @private\n */\n private doResize(): void {\n try {\n this.isResizing = true;\n\n const width = this.container.clientWidth || 800;\n const height = this.container.clientHeight || 600;\n\n // 只有尺寸确实变化时才更新样式和触发表格实例的resize\n if (parseInt(this.element.style.width, 10) !== width || parseInt(this.element.style.height, 10) !== height) {\n this.element.style.width = `${width}px`;\n this.element.style.height = `${height}px`;\n\n // 更新表格实例大小\n if (this.tableInstance) {\n // 触发VTable的resize\n this.tableInstance.resize();\n }\n }\n } catch (error) {\n console.error('Error during resize:', error);\n } finally {\n this.isResizing = false;\n }\n }\n\n /**\n * 获取Sheet元素\n */\n getElement(): HTMLElement {\n return this.element;\n }\n\n /**\n * 获取Sheet容器\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n\n /**\n * 获取Sheet的key\n */\n getKey(): string {\n return this.sheetKey;\n }\n\n /**\n * 获取Sheet的标题\n */\n getTitle(): string {\n return this.sheetTitle;\n }\n\n /**\n * 设置Sheet的标题\n */\n setTitle(title: string): void {\n this.sheetTitle = title;\n this.options.sheetTitle = title;\n }\n\n /**\n * 获取列定义\n */\n getColumns(): ColumnDefine[] {\n return this.options.columns || [];\n }\n\n /**\n * 获取表格数据\n */\n getData(): any[][] {\n // 从表格实例获取数据\n return this.options.data || [];\n }\n\n getCopiedData(): any[][] {\n // 为了避免影响当前数据,所以需要复制一份数据\n return this.getData().map(row => (Array.isArray(row) ? row.slice() : []));\n }\n /**\n * 获取指定坐标的单元格值\n * @param row 行索引\n * @param col 列索引\n */\n getCellValue(row: number, col: number): any {\n if (this.tableInstance) {\n try {\n const value = this.tableInstance.getCellValue(col, row);\n return value;\n } catch (error) {\n console.warn('Failed to get cell value from VTable:', error);\n }\n }\n\n const data = this.getData();\n if (data && data[row] && data[row][col] !== undefined) {\n return data[row][col];\n }\n return null;\n }\n\n /**\n * 设置指定坐标的单元格值\n * @param row 行索引\n * @param col 列索引\n * @param value 新值\n */\n setCellValue(row: number, col: number, value: any): void {\n const data = this.getData();\n if (data && data[row]) {\n const oldValue = data[row][col];\n data[row][col] = value;\n\n // 更新表格实例\n if (this.tableInstance) {\n this.tableInstance.changeCellValue(col, row, value);\n }\n\n // 触发事件\n const event: CellValueChangedEvent = {\n row,\n col,\n oldValue,\n newValue: value\n };\n\n this.fire('cellValueChanged', event);\n }\n }\n\n /**\n * 根据A1地址获取单元格信息\n * @param address A1地址\n */\n getCellByAddress(address: string): { coord: CellCoord; value: CellValue } {\n const coord = this.coordFromAddress(address);\n return {\n coord,\n value: this.getCellValue(coord.row, coord.col)\n };\n }\n\n /**\n * 将行/列坐标转换为A1格式\n * @param coord 坐标\n */\n addressFromCoord(coord: CellCoord): string;\n addressFromCoord(row: number, col: number): string;\n addressFromCoord(coordOrRow: CellCoord | number, col?: number): string {\n let row: number;\n let colNum: number;\n\n if (typeof coordOrRow === 'object') {\n row = coordOrRow.row;\n colNum = coordOrRow.col;\n } else {\n row = coordOrRow;\n colNum = col!;\n }\n\n let colStr = '';\n let tempCol = colNum + 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}${row + 1}`;\n }\n\n /**\n * 将A1格式转换为行/列坐标\n * @param address A1地址\n */\n coordFromAddress(address: string): CellCoord {\n const match = address.match(/^([A-Z]+)([0-9]+)$/);\n if (!match) {\n throw new Error(`Invalid cell address: ${address}`);\n }\n\n const colStr = match[1];\n const rowStr = match[2];\n\n let col = 0;\n for (let i = 0; i < colStr.length; i++) {\n col = col * 26 + (colStr.charCodeAt(i) - 64);\n }\n\n return {\n row: parseInt(rowStr, 10) - 1,\n col: col - 1\n };\n }\n\n /**\n * 获取当前选择\n */\n getSelection(): CellRange | null {\n return this.selection;\n }\n\n /**\n * 获取多个选择范围(支持Ctrl/Cmd多选)\n */\n getMultipleSelections(): CellRange[] {\n if (!this.tableInstance) {\n return this.selection ? [this.selection] : [];\n }\n\n // 从底层VTable获取所有选择范围\n const vtableRanges = this.tableInstance.getSelectedCellRanges();\n\n if (vtableRanges.length === 0) {\n return this.selection ? [this.selection] : [];\n }\n\n // 转换VTable的坐标格式到WorkSheet格式\n return vtableRanges.map(range => ({\n startRow: range.start.row,\n startCol: range.start.col,\n endRow: range.end.row,\n endCol: range.end.col\n }));\n }\n\n /**\n * 将第一行设置为表头\n */\n setFirstRowAsHeader(): void {\n const data = this.getData();\n if (data && data.length > 0) {\n for (let i = 0; i < data[0].length; i++) {\n if (!this.options.columns[i]) {\n this.options.columns[i] = {\n field: i,\n title: data[0][i]\n };\n } else {\n this.options.columns[i].title = data[0][i];\n this.options.columns[i].field = i;\n }\n }\n }\n data.shift();\n this.tableInstance.updateOption({\n ...this.options,\n columns: this.options.columns,\n showHeader: true,\n records: data\n });\n }\n\n /**\n * 释放资源\n */\n release(): void {\n // 清理事件监听器\n\n // 释放表格实例\n if (this.tableInstance) {\n this.tableInstance.release();\n }\n\n // 从DOM中移除元素\n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n\n // 清除引用\n this.tableInstance?.release();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/core/WorkSheet.ts"],"names":[],"mappings":"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","file":"WorkSheet.js","sourcesContent":["import type { ColumnDefine, ListTableConstructorOptions, ColumnsDefine } from '@visactor/vtable';\nimport { ListTable } from '@visactor/vtable';\nimport { isValid, type EventEmitter } from '@visactor/vutils';\nimport { EventTarget } from '../event/event-target';\nimport type {\n IWorkSheetOptions,\n IWorkSheetAPI,\n CellCoord,\n CellRange,\n CellValue,\n CellValueChangedEvent,\n CellClickEvent,\n SelectionChangedEvent,\n IFormulaManagerOptions\n} from '../ts-types';\nimport { WorkSheetEventType } from '../ts-types';\nimport type { TYPES, VTableSheet } from '..';\nimport { isPropertyWritable } from '../tools';\nimport { VTableThemes } from '../ts-types';\nimport { detectFunctionParameterPosition } from '../formula/formula-helper';\n\n/**\n * Sheet constructor options. 内部类型Sheet的构造函数参数类型\n */\nexport type WorkSheetConstructorOptions = {\n /** 表格数据 */\n data?: any[][];\n /** 公式计算选项 */\n formula?: IFormulaManagerOptions;\n /** Sheet 唯一标识 */\n sheetKey: string;\n /** Sheet 标题 */\n sheetTitle: string;\n} & Omit<ListTableConstructorOptions, 'records'>;\n\nexport class WorkSheet extends EventTarget implements IWorkSheetAPI {\n /** 选项 */\n options: IWorkSheetOptions;\n /** 容器 */\n container: HTMLElement;\n /** 表格实例 */\n tableInstance?: ListTable;\n /** 元素 */\n element: HTMLElement;\n /** 选择范围 */\n private selection: CellRange | null = null;\n /** Sheet 唯一标识 */\n private sheetKey: string;\n /** Sheet 标题 */\n private sheetTitle: string;\n\n /** 事件总线 */\n private eventBus: EventEmitter;\n\n private vtableSheet: VTableSheet;\n\n editingCell: { sheet: string; row: number; col: number } | null = null;\n\n constructor(sheet: VTableSheet, options: IWorkSheetOptions) {\n super();\n this.options = options;\n this.container = options.container;\n\n // 初始化基本属性\n this.sheetKey = options.sheetKey;\n this.sheetTitle = options.sheetTitle;\n this.vtableSheet = sheet;\n\n // 创建表格元素\n this.element = this._createRootElement();\n this.container.appendChild(this.element);\n\n // 初始化表格\n this._initializeTable();\n\n // 设置事件监听\n this._setupEventListeners();\n }\n\n /**\n * 获取行数\n */\n get rowCount(): number {\n const data = this.getData();\n return data ? data.length : 0;\n }\n\n /**\n * 获取列数\n */\n get colCount(): number {\n const data = this.getData();\n return data && data.length > 0 ? data[0].length : 0;\n }\n\n /**\n * 获取行数\n */\n getRowCount(): number {\n return this.tableInstance.rowCount;\n }\n\n /**\n * 获取列数\n */\n getColumnCount(): number {\n return this.tableInstance.colCount;\n }\n\n /**\n * 获取表格数据\n */\n get records(): any {\n return this.getData();\n }\n\n /**\n * 获取列定义\n */\n get columns(): any {\n return this.options.columns || [];\n }\n\n /**\n * 创建根元素\n */\n private _createRootElement(): HTMLElement {\n const element = document.createElement('div');\n element.setAttribute('sheet-key', `${this.sheetKey}`);\n element.classList.add('vtable-sheet');\n element.style.outline = 'none';\n element.style.position = 'relative';\n\n const width = this.container.clientWidth || 800;\n const height = this.container.clientHeight || 600;\n\n element.style.width = `${width}px`;\n element.style.height = `${height}px`;\n\n return element;\n }\n\n /**\n * 初始化表格实例\n */\n private _initializeTable(): void {\n // 这里应该是实际的表格初始化逻辑\n const tableOptions = this._generateTableOptions();\n this.tableInstance = new ListTable(tableOptions);\n this.element.classList.add('vtable-excel-cursor');\n // 获取事件总线\n this.eventBus = (this.tableInstance as any).eventBus;\n }\n\n /**\n * 生成VTable选项\n */\n private _generateTableOptions(): ListTableConstructorOptions {\n let isShowTableHeader = this.options.showHeader;\n // 转换为ListTable的选项\n if (!this.options.columns) {\n isShowTableHeader = isValid(isShowTableHeader) ? isShowTableHeader : false;\n this.options.columns = [];\n } else {\n for (let i = 0; i < this.options.columns.length; i++) {\n this.options.columns[i].field = i;\n }\n }\n if (!this.options.data) {\n this.options.data = [];\n } else if (this.options.columns.length === 0 && this.options.firstRowAsHeader) {\n const data = this.options.data;\n if (data && data.length > 0) {\n for (let i = 0; i < data[0].length; i++) {\n this.options.columns[i] = {\n field: i,\n title: data[0][i],\n filter: !!this.options.filter\n };\n }\n }\n data.shift();\n isShowTableHeader = true;\n }\n const keyboardOptions = {\n ...this.options.keyboardOptions,\n copySelected: true,\n pasteValueToCell: true,\n showCopyCellBorder: true,\n cutSelected: true\n };\n\n //更改theme 的frameStyle\n let changedTheme: TYPES.VTableThemes.ITableThemeDefine;\n if (!this.options?.theme) {\n this.options.theme = VTableThemes.DEFAULT;\n }\n this.options.theme = this.options.theme;\n if (this.options.theme.bodyStyle && !isPropertyWritable(this.options.theme, 'bodyStyle')) {\n //测试是否使用了主题 使用了主题配置项不可写。\n changedTheme = (this.options.theme as TYPES.VTableThemes.TableTheme).extends(\n (this.options.theme as TYPES.VTableThemes.TableTheme).getExtendTheme()\n ); //防止将原主题如DARK ARCO的属性改掉\n const extendThemeOption = (changedTheme as TYPES.VTableThemes.TableTheme).getExtendTheme();\n\n extendThemeOption.frameStyle = Object.assign({}, extendThemeOption.frameStyle, {\n shadowBlur: 0,\n cornerRadius: 0,\n borderLineWidth: 0\n });\n } else {\n // 确保theme是一个对象而不是字符串\n if (typeof this.options.theme === 'string') {\n console.warn('theme is a string, it will be ignored');\n } else {\n changedTheme = this.options.theme;\n changedTheme.frameStyle = Object.assign({}, this.options.theme.frameStyle, {\n shadowBlur: 0,\n cornerRadius: 0,\n borderLineWidth: 0\n });\n }\n }\n return {\n ...(this.options as any),\n dragOrder: {\n maintainArrayDataOrder: true\n },\n addRecordRule: 'Array',\n defaultCursor: 'cell',\n records: this.options.data,\n sortState: this.options.sortState,\n container: this.element,\n showHeader: isShowTableHeader,\n keyboardOptions,\n theme: changedTheme,\n excelOptions: {\n fillHandle: true\n },\n customConfig: {\n selectCellWhenCellEditorNotExists: true\n }\n // maintainedColumnCount: 120\n // 其他特定配置\n };\n }\n\n /**\n * 设置事件监听\n */\n private _setupEventListeners(): void {\n if (this.tableInstance) {\n // 监听单元格选择事件 - 优化:移除console.log调试代码\n this.tableInstance.on('mousedown_cell', (event: any) => {\n if (this.vtableSheet.formulaManager.formulaWorkingOnCell) {\n //防止公式输入状态下,原本的input元素blur掉,导致公式输入框无法输入\n event.event.preventDefault();\n }\n });\n\n // 监听选择变化事件(多选时)\n this.tableInstance.on('selected_changed' as any, (event: any) => {\n // 判断是drag过程中的选中单元格变化\n if (!this.tableInstance.eventManager.isDraging) {\n if (!this.vtableSheet.formulaManager.formulaWorkingOnCell) {\n this.editingCell = {\n sheet: this.getKey(),\n row: event.row,\n col: event.col\n };\n }\n this.handleCellSelected(event);\n }\n this.handleSelectionChanged(event);\n });\n\n // 监听拖拽选择结束事件 - 优化:移除console.log和debugger调试代码\n this.tableInstance.on('drag_select_end' as any, (event: any) => {\n this.handleDragSelectEnd(event);\n });\n\n // 监听单元格值变更事件\n this.tableInstance.on('change_cell_value', (event: any) => {\n this.handleCellValueChanged(event);\n });\n\n // 监听数据记录变更事件 - 用于调整公式引用\n // 注意:'add_record' 事件类型需要使用 as any 绕过类型检查\n (this.tableInstance as any).on('add_record', (event: any) => {\n this.handleDataRecordsChanged('add', event);\n });\n\n // 注意:'delete_record' 事件类型需要使用 as any 绕过类型检查\n (this.tableInstance as any).on('delete_record', (event: any) => {\n this.handleDataRecordsChanged('delete', event);\n });\n // 注意:'add_column' 事件类型尚未在 VTable 中定义,这里使用 as any 绕过类型检查\n (this.tableInstance as any).on('add_column', (event: any) => {\n this.handleColumnsChanged('add', event);\n });\n\n // 注意:'delete_column' 事件类型需要使用 as any 绕过类型检查\n (this.tableInstance as any).on('delete_column', (event: any) => {\n this.handleColumnsChanged('delete', event);\n });\n\n // 监听编辑结束事件,恢复十字光标\n this.tableInstance.on('click_cell', () => {\n this.element.classList.add('vtable-excel-cursor');\n });\n // 监听编辑结束事件,恢复十字光标\n this.tableInstance.on('change_header_position', (event: any) => {\n this.handleChangeHeaderPosition(event);\n });\n }\n }\n\n /**\n * 处理单元格选择事件\n * @param event 选择事件\n */\n private handleCellSelected(event: any): void {\n // 更新选择范围\n this.selection = {\n startRow: event.row,\n startCol: event.col,\n endRow: event.row,\n endCol: event.col\n };\n\n // 使用事件类型枚举触发事件给父组件\n const cellSelectedEvent: CellClickEvent = {\n row: event.row,\n col: event.col,\n value: event.value,\n cellElement: event.cellElement,\n originalEvent: event.originalEvent\n };\n this.fire(WorkSheetEventType.CELL_CLICK, cellSelectedEvent);\n }\n\n /**\n * 处理选择变化事件\n * @param event 选择变化事件\n */\n private handleSelectionChanged(event: any): void {\n if (event?.ranges?.length) {\n const r = event.ranges[event.ranges.length - 1];\n this.selection = {\n startRow: r.start.row,\n startCol: r.start.col,\n endRow: r.end.row,\n endCol: r.end.col\n };\n }\n // 保持原始事件结构,同时确保类型符合定义\n const selectionChangedEvent: SelectionChangedEvent = {\n row: event.row,\n col: event.col,\n ranges: event.ranges,\n cells: event.cells,\n originalEvent: event.originalEvent\n };\n this.fire(WorkSheetEventType.SELECTION_CHANGED, selectionChangedEvent);\n }\n\n /**\n * 处理拖拽选择结束事件\n * @param event 拖拽选择结束事件\n */\n private handleDragSelectEnd(event: any): void {\n if (event?.cells?.length) {\n const first = event.cells[0][0];\n const lastRow = event.cells[event.cells.length - 1];\n const last = lastRow[lastRow.length - 1];\n this.selection = {\n startRow: first.row,\n startCol: first.col,\n endRow: last.row,\n endCol: last.col\n };\n }\n // 保持原始事件结构,同时确保类型符合定义\n const selectionEndEvent: SelectionChangedEvent = {\n row: event.row,\n col: event.col,\n ranges: event.ranges,\n cells: event.cells,\n originalEvent: event.originalEvent\n };\n this.fire(WorkSheetEventType.SELECTION_END, selectionEndEvent);\n }\n\n /**\n * 处理单元格值变更事件\n * @param event 值变更事件\n */\n private handleCellValueChanged(event: any): void {\n const cellValueChangedEvent: CellValueChangedEvent = {\n row: event.row,\n col: event.col,\n oldValue: event.rawValue,\n newValue: event.changedValue\n };\n this.fire(WorkSheetEventType.CELL_VALUE_CHANGED, cellValueChangedEvent);\n }\n\n /**\n * 处理数据记录变更事件 - 用于调整公式引用\n * @param type 变更类型 ('add' | 'delete')\n * @param event 数据变更事件\n */\n private handleDataRecordsChanged(type: 'add' | 'delete', event: any): void {\n try {\n const sheetKey = this.getKey();\n //#region 处理数据变化后,公式引擎中的数据也需要更新\n const normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(\n this.tableInstance.records,\n this.tableInstance\n );\n this.vtableSheet.formulaManager.formulaEngine.updateSheetData(sheetKey, normalizedData);\n //#endregion\n if (type === 'add') {\n // 处理添加记录事件\n const { recordIndex, recordCount } = event;\n if (recordIndex !== undefined && recordCount > 0) {\n // 在指定位置插入行,需要调整该位置之后的公式引用\n this.vtableSheet.formulaManager.addRows(sheetKey, recordIndex, recordCount);\n } else {\n // 默认在末尾添加\n const currentRowCount = this.getRowCount();\n this.vtableSheet.formulaManager.addRows(sheetKey, currentRowCount, recordCount);\n }\n } else if (type === 'delete') {\n // 处理删除记录事件\n const { rowIndexs, deletedCount } = event;\n if (rowIndexs && rowIndexs.length > 0) {\n // 为了简化,我们假设删除的是连续的行,从最小的索引开始\n const minIndex = Math.min(...rowIndexs.flat());\n this.vtableSheet.formulaManager.removeRows(sheetKey, minIndex, deletedCount);\n }\n }\n // update 事件不需要调整引用,因为只是数据内容变更\n } catch (error) {\n console.error(`Failed to handle data records changed (${type}):`, error);\n }\n }\n /**\n * 处理列变更事件 - 用于调整公式引用\n * @param type 变更类型 ('add' | 'delete')\n * @param event 列变更事件\n */\n private handleColumnsChanged(type: 'add' | 'delete', event: any): void {\n try {\n const sheetKey = this.getKey();\n //#region 处理数据变化后,公式引擎中的数据也需要更新\n const normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(\n this.tableInstance.records,\n this.tableInstance\n );\n this.vtableSheet.formulaManager.formulaEngine.updateSheetData(sheetKey, normalizedData);\n //#endregion\n if (type === 'add') {\n // 处理添加列事件\n const { columnIndex, columnCount } = event;\n if (columnIndex !== undefined && columnCount > 0) {\n // 在指定位置插入列,需要调整该位置之后的公式引用\n this.vtableSheet.formulaManager.addColumns(sheetKey, columnIndex, columnCount);\n } else {\n // 默认在末尾添加\n const currentColumnCount = this.getColumnCount();\n this.vtableSheet.formulaManager.addColumns(sheetKey, currentColumnCount, columnCount);\n }\n } else if (type === 'delete') {\n // 处理删除列事件\n const { deleteColIndexs } = event;\n if (deleteColIndexs && deleteColIndexs.length > 0) {\n // 为了简化,我们假设删除的是连续的列,从最小的索引开始\n const minIndex = Math.min(...deleteColIndexs.flat());\n const deletedCount = deleteColIndexs.length;\n this.vtableSheet.formulaManager.removeColumns(sheetKey, minIndex, deletedCount);\n }\n }\n // update 事件不需要调整引用,因为只是数据内容变更\n } catch (error) {\n console.error(`Failed to handle columns changed (${type}):`, error);\n }\n }\n /**\n * 处理表头位置变更事件\n * @param event 表头位置变更事件\n */\n private handleChangeHeaderPosition(event: any): void {\n console.log('handleChangeHeaderPosition', event);\n if (event.movingColumnOrRow === 'column') {\n this.handleChangeColumnHeaderPosition(event);\n } else {\n this.handleChangeRowHeaderPosition(event);\n }\n }\n /**\n * 处理列表头位置变更事件\n * @param event 列表头位置变更事件\n */\n private handleChangeColumnHeaderPosition(event: any): void {\n console.log('handleChangeColumnHeaderPosition', event);\n // 注意:tableInstance.options.columns 中的顺序并未更新(和其他操作如delete/add等操作不同)需要注意后续是否有什么问题\n const { source, target } = event;\n const { col: sourceCol, row: sourceRow } = source;\n const { col: targetCol, row: targetRow } = target;\n const sheetKey = this.getKey();\n //#region 处理数据变化后,公式引擎中的数据也需要更新\n const normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(\n this.tableInstance.records,\n this.tableInstance\n );\n this.vtableSheet.formulaManager.formulaEngine.updateSheetData(sheetKey, normalizedData);\n //#endregion\n // 在指定位置插入列,需要调整该位置之后的公式引用\n this.vtableSheet.formulaManager.changeColumnHeaderPosition(sheetKey, sourceCol, targetCol);\n }\n /**\n * 处理行表头位置变更事件\n * @param event 行表头位置变更事件\n */\n handleChangeRowHeaderPosition(event: any): void {\n // 注意:tableInstance.options.columns 中的顺序并未更新(和其他操作如delete/add等操作不同)需要注意后续是否有什么问题\n const { source, target } = event;\n const { row: sourceRow } = source;\n const { row: targetRow } = target;\n const sheetKey = this.getKey();\n //#region 处理数据变化后,公式引擎中的数据也需要更新\n const normalizedData = this.vtableSheet.formulaManager.normalizeSheetData(\n this.tableInstance.records,\n this.tableInstance\n );\n this.vtableSheet.formulaManager.formulaEngine.updateSheetData(sheetKey, normalizedData);\n //#endregion\n // 在指定位置插入行,需要调整该位置之后的公式引用\n this.vtableSheet.formulaManager.changeRowHeaderPosition(sheetKey, sourceRow, targetRow);\n }\n\n /**\n * 触发事件\n * @param eventName 事件名称\n * @param eventData 事件数据\n */\n protected fireEvent(eventName: string, eventData: any): void {\n this.fire(eventName, eventData);\n }\n\n /**\n * 监听事件\n * @param eventName 事件名称\n * @param handler 事件处理函数\n */\n on(eventName: string, handler: (...args: any[]) => void): this {\n return super.on(eventName, handler);\n }\n\n // 用于防止短时间内多次调用resize的节流变量\n private resizeTimer: number | null = null;\n private isResizing = false;\n\n /**\n * 更新Sheet大小\n * 使用节流方式避免频繁调用resize\n */\n resize(): void {\n if (!this.element) {\n return;\n }\n\n // 如果正在进行调整,清除之前的定时器\n if (this.resizeTimer !== null) {\n window.clearTimeout(this.resizeTimer);\n this.resizeTimer = null;\n }\n\n // 如果已经在执行resize,设置一个短期延迟\n if (this.isResizing) {\n this.resizeTimer = window.setTimeout(() => {\n this.doResize();\n this.resizeTimer = null;\n }, 50);\n return;\n }\n\n // 否则直接执行resize\n this.doResize();\n }\n\n /**\n * 实际执行调整大小的操作\n * @private\n */\n private doResize(): void {\n try {\n this.isResizing = true;\n\n const width = this.container.clientWidth || 800;\n const height = this.container.clientHeight || 600;\n\n // 只有尺寸确实变化时才更新样式和触发表格实例的resize\n if (parseInt(this.element.style.width, 10) !== width || parseInt(this.element.style.height, 10) !== height) {\n this.element.style.width = `${width}px`;\n this.element.style.height = `${height}px`;\n\n // 更新表格实例大小\n if (this.tableInstance) {\n // 触发VTable的resize\n this.tableInstance.resize();\n }\n }\n } catch (error) {\n console.error('Error during resize:', error);\n } finally {\n this.isResizing = false;\n }\n }\n\n /**\n * 获取Sheet元素\n */\n getElement(): HTMLElement {\n return this.element;\n }\n\n /**\n * 获取Sheet容器\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n\n /**\n * 获取Sheet的key\n */\n getKey(): string {\n return this.sheetKey;\n }\n\n /**\n * 获取Sheet的标题\n */\n getTitle(): string {\n return this.sheetTitle;\n }\n\n /**\n * 设置Sheet的标题\n */\n setTitle(title: string): void {\n this.sheetTitle = title;\n this.options.sheetTitle = title;\n }\n\n /**\n * 获取列定义\n */\n getColumns(): ColumnDefine[] {\n return this.tableInstance.columns || [];\n }\n\n /**\n * 获取表格数据\n */\n getData(): any[][] {\n // 从表格实例获取数据\n return this.options.data || [];\n }\n\n getCopiedData(): any[][] {\n // 为了避免影响当前数据,所以需要复制一份数据\n return this.getData().map(row => (Array.isArray(row) ? row.slice() : []));\n }\n /**\n * 获取指定坐标的单元格值\n * @param row 行索引\n * @param col 列索引\n */\n getCellValue(row: number, col: number): any {\n if (this.tableInstance) {\n try {\n const value = this.tableInstance.getCellValue(col, row);\n return value;\n } catch (error) {\n console.warn('Failed to get cell value from VTable:', error);\n }\n }\n\n const data = this.getData();\n if (data && data[row] && data[row][col] !== undefined) {\n return data[row][col];\n }\n return null;\n }\n\n /**\n * 设置指定坐标的单元格值\n * @param row 行索引\n * @param col 列索引\n * @param value 新值\n */\n setCellValue(row: number, col: number, value: any): void {\n const data = this.getData();\n if (data && data[row]) {\n const oldValue = data[row][col];\n data[row][col] = value;\n\n // 更新表格实例\n if (this.tableInstance) {\n this.tableInstance.changeCellValue(col, row, value);\n }\n\n // 触发事件\n const event: CellValueChangedEvent = {\n row,\n col,\n oldValue,\n newValue: value\n };\n\n this.fire('cellValueChanged', event);\n }\n }\n\n /**\n * 根据A1地址获取单元格信息\n * @param address A1地址\n */\n getCellByAddress(address: string): { coord: CellCoord; value: CellValue } {\n const coord = this.coordFromAddress(address);\n return {\n coord,\n value: this.getCellValue(coord.row, coord.col)\n };\n }\n\n /**\n * 将行/列坐标转换为A1格式\n * @param coord 坐标\n */\n addressFromCoord(coord: CellCoord): string;\n addressFromCoord(row: number, col: number): string;\n addressFromCoord(coordOrRow: CellCoord | number, col?: number): string {\n let row: number;\n let colNum: number;\n\n if (typeof coordOrRow === 'object') {\n row = coordOrRow.row;\n colNum = coordOrRow.col;\n } else {\n row = coordOrRow;\n colNum = col!;\n }\n\n let colStr = '';\n let tempCol = colNum + 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}${row + 1}`;\n }\n\n /**\n * 将A1格式转换为行/列坐标\n * @param address A1地址\n */\n coordFromAddress(address: string): CellCoord {\n const match = address.match(/^([A-Z]+)([0-9]+)$/);\n if (!match) {\n throw new Error(`Invalid cell address: ${address}`);\n }\n\n const colStr = match[1];\n const rowStr = match[2];\n\n let col = 0;\n for (let i = 0; i < colStr.length; i++) {\n col = col * 26 + (colStr.charCodeAt(i) - 64);\n }\n\n return {\n row: parseInt(rowStr, 10) - 1,\n col: col - 1\n };\n }\n\n /**\n * 获取当前选择\n */\n getSelection(): CellRange | null {\n return this.selection;\n }\n\n /**\n * 获取多个选择范围(支持Ctrl/Cmd多选)\n */\n getMultipleSelections(): CellRange[] {\n if (!this.tableInstance) {\n return this.selection ? [this.selection] : [];\n }\n\n // 从底层VTable获取所有选择范围\n const vtableRanges = this.tableInstance.getSelectedCellRanges();\n\n if (vtableRanges.length === 0) {\n return this.selection ? [this.selection] : [];\n }\n\n // 转换VTable的坐标格式到WorkSheet格式\n return vtableRanges.map((range: any) => ({\n startRow: range.start.row,\n startCol: range.start.col,\n endRow: range.end.row,\n endCol: range.end.col\n }));\n }\n\n /**\n * 将第一行设置为表头\n */\n setFirstRowAsHeader(): void {\n const data = this.getData();\n if (data && data.length > 0) {\n for (let i = 0; i < data[0].length; i++) {\n if (!this.options.columns[i]) {\n this.options.columns[i] = {\n field: i,\n title: data[0][i]\n };\n } else {\n this.options.columns[i].title = data[0][i];\n this.options.columns[i].field = i;\n }\n }\n }\n data.shift();\n this.tableInstance.updateOption({\n ...this.options,\n columns: this.options.columns as any as ColumnsDefine,\n showHeader: true,\n records: data\n });\n }\n\n /**\n * 释放资源\n */\n release(): void {\n // 清理事件监听器\n\n // 释放表格实例\n if (this.tableInstance) {\n this.tableInstance.release();\n }\n\n // 从DOM中移除元素\n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n\n // 清除引用\n this.tableInstance?.release();\n }\n}\n"]}
@@ -45,8 +45,7 @@ function getTablePlugins(sheetDefine, options) {
45
45
  plugins.push(autoFillPlugin);
46
46
  }
47
47
  return (null == options ? void 0 : options.VTablePluginModules) && options.VTablePluginModules.forEach((module => {
48
- if ("function" != typeof module.module) throw new Error(`Invalid plugin: ${module.module}`);
49
- plugins.push(new module.module(module.moduleOptions));
48
+ "function" == typeof (null == module ? void 0 : module.module) && plugins.push(new module.module(module.moduleOptions));
50
49
  })), plugins;
51
50
  }
52
51