@omegagrid/grid-core 0.2.5

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 (185) hide show
  1. package/dist/calculations/autofill.d.ts +7 -0
  2. package/dist/calculations/autofill.d.ts.map +1 -0
  3. package/dist/calculations/autofill.js +81 -0
  4. package/dist/calculations/autofill.js.map +1 -0
  5. package/dist/calculations/calculationModel.d.ts +35 -0
  6. package/dist/calculations/calculationModel.d.ts.map +1 -0
  7. package/dist/calculations/calculationModel.js +199 -0
  8. package/dist/calculations/calculationModel.js.map +1 -0
  9. package/dist/calculations/conditions.d.ts +4 -0
  10. package/dist/calculations/conditions.d.ts.map +1 -0
  11. package/dist/calculations/conditions.js +46 -0
  12. package/dist/calculations/conditions.js.map +1 -0
  13. package/dist/calculations/context.d.ts +53 -0
  14. package/dist/calculations/context.d.ts.map +1 -0
  15. package/dist/calculations/context.js +83 -0
  16. package/dist/calculations/context.js.map +1 -0
  17. package/dist/calculations/formula.d.ts +69 -0
  18. package/dist/calculations/formula.d.ts.map +1 -0
  19. package/dist/calculations/formula.js +360 -0
  20. package/dist/calculations/formula.js.map +1 -0
  21. package/dist/calculations/functions/dates.d.ts +6 -0
  22. package/dist/calculations/functions/dates.d.ts.map +1 -0
  23. package/dist/calculations/functions/dates.js +28 -0
  24. package/dist/calculations/functions/dates.js.map +1 -0
  25. package/dist/calculations/functions/helpers.d.ts +11 -0
  26. package/dist/calculations/functions/helpers.d.ts.map +1 -0
  27. package/dist/calculations/functions/helpers.js +38 -0
  28. package/dist/calculations/functions/helpers.js.map +1 -0
  29. package/dist/calculations/functions/index.d.ts +5 -0
  30. package/dist/calculations/functions/index.d.ts.map +1 -0
  31. package/dist/calculations/functions/index.js +73 -0
  32. package/dist/calculations/functions/index.js.map +1 -0
  33. package/dist/calculations/functions/logical.d.ts +10 -0
  34. package/dist/calculations/functions/logical.d.ts.map +1 -0
  35. package/dist/calculations/functions/logical.js +49 -0
  36. package/dist/calculations/functions/logical.js.map +1 -0
  37. package/dist/calculations/functions/lookup.d.ts +17 -0
  38. package/dist/calculations/functions/lookup.d.ts.map +1 -0
  39. package/dist/calculations/functions/lookup.js +167 -0
  40. package/dist/calculations/functions/lookup.js.map +1 -0
  41. package/dist/calculations/functions/math.d.ts +62 -0
  42. package/dist/calculations/functions/math.d.ts.map +1 -0
  43. package/dist/calculations/functions/math.js +228 -0
  44. package/dist/calculations/functions/math.js.map +1 -0
  45. package/dist/calculations/functions/special.d.ts +2 -0
  46. package/dist/calculations/functions/special.d.ts.map +1 -0
  47. package/dist/calculations/functions/special.js +55 -0
  48. package/dist/calculations/functions/special.js.map +1 -0
  49. package/dist/calculations/functions/statistical.d.ts +5 -0
  50. package/dist/calculations/functions/statistical.d.ts.map +1 -0
  51. package/dist/calculations/functions/statistical.js +47 -0
  52. package/dist/calculations/functions/statistical.js.map +1 -0
  53. package/dist/calculations/functions/text.d.ts +5 -0
  54. package/dist/calculations/functions/text.d.ts.map +1 -0
  55. package/dist/calculations/functions/text.js +23 -0
  56. package/dist/calculations/functions/text.js.map +1 -0
  57. package/dist/calculations/index.d.ts +6 -0
  58. package/dist/calculations/index.d.ts.map +1 -0
  59. package/dist/calculations/index.js +22 -0
  60. package/dist/calculations/index.js.map +1 -0
  61. package/dist/calculations/operators.d.ts +19 -0
  62. package/dist/calculations/operators.d.ts.map +1 -0
  63. package/dist/calculations/operators.js +66 -0
  64. package/dist/calculations/operators.js.map +1 -0
  65. package/dist/calculations/tokenization.d.ts +34 -0
  66. package/dist/calculations/tokenization.d.ts.map +1 -0
  67. package/dist/calculations/tokenization.js +192 -0
  68. package/dist/calculations/tokenization.js.map +1 -0
  69. package/dist/comments/comments.d.ts +37 -0
  70. package/dist/comments/comments.d.ts.map +1 -0
  71. package/dist/comments/comments.js +39 -0
  72. package/dist/comments/comments.js.map +1 -0
  73. package/dist/comments/index.d.ts +2 -0
  74. package/dist/comments/index.d.ts.map +1 -0
  75. package/dist/comments/index.js +18 -0
  76. package/dist/comments/index.js.map +1 -0
  77. package/dist/common/index.d.ts +2 -0
  78. package/dist/common/index.d.ts.map +1 -0
  79. package/dist/common/index.js +18 -0
  80. package/dist/common/index.js.map +1 -0
  81. package/dist/common/range.d.ts +65 -0
  82. package/dist/common/range.d.ts.map +1 -0
  83. package/dist/common/range.js +220 -0
  84. package/dist/common/range.js.map +1 -0
  85. package/dist/constants.d.ts +60 -0
  86. package/dist/constants.d.ts.map +1 -0
  87. package/dist/constants.js +75 -0
  88. package/dist/constants.js.map +1 -0
  89. package/dist/formatting/conditionalFormats.d.ts +34 -0
  90. package/dist/formatting/conditionalFormats.d.ts.map +1 -0
  91. package/dist/formatting/conditionalFormats.js +107 -0
  92. package/dist/formatting/conditionalFormats.js.map +1 -0
  93. package/dist/formatting/index.d.ts +2 -0
  94. package/dist/formatting/index.d.ts.map +1 -0
  95. package/dist/formatting/index.js +18 -0
  96. package/dist/formatting/index.js.map +1 -0
  97. package/dist/index.d.ts +9 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +30 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/model/cellModel.d.ts +105 -0
  102. package/dist/model/cellModel.d.ts.map +1 -0
  103. package/dist/model/cellModel.js +251 -0
  104. package/dist/model/cellModel.js.map +1 -0
  105. package/dist/model/columnModel.d.ts +132 -0
  106. package/dist/model/columnModel.d.ts.map +1 -0
  107. package/dist/model/columnModel.js +147 -0
  108. package/dist/model/columnModel.js.map +1 -0
  109. package/dist/model/columnSorting.d.ts +50 -0
  110. package/dist/model/columnSorting.d.ts.map +1 -0
  111. package/dist/model/columnSorting.js +164 -0
  112. package/dist/model/columnSorting.js.map +1 -0
  113. package/dist/model/cssStyle.d.ts +18 -0
  114. package/dist/model/cssStyle.d.ts.map +1 -0
  115. package/dist/model/cssStyle.js +197 -0
  116. package/dist/model/cssStyle.js.map +1 -0
  117. package/dist/model/dependencies.d.ts +28 -0
  118. package/dist/model/dependencies.d.ts.map +1 -0
  119. package/dist/model/dependencies.js +129 -0
  120. package/dist/model/dependencies.js.map +1 -0
  121. package/dist/model/elementModel.d.ts +98 -0
  122. package/dist/model/elementModel.d.ts.map +1 -0
  123. package/dist/model/elementModel.js +109 -0
  124. package/dist/model/elementModel.js.map +1 -0
  125. package/dist/model/filterModel.d.ts +22 -0
  126. package/dist/model/filterModel.d.ts.map +1 -0
  127. package/dist/model/filterModel.js +83 -0
  128. package/dist/model/filterModel.js.map +1 -0
  129. package/dist/model/gridModel.d.ts +172 -0
  130. package/dist/model/gridModel.d.ts.map +1 -0
  131. package/dist/model/gridModel.js +639 -0
  132. package/dist/model/gridModel.js.map +1 -0
  133. package/dist/model/groupModel.d.ts +23 -0
  134. package/dist/model/groupModel.d.ts.map +1 -0
  135. package/dist/model/groupModel.js +102 -0
  136. package/dist/model/groupModel.js.map +1 -0
  137. package/dist/model/history.d.ts +21 -0
  138. package/dist/model/history.d.ts.map +1 -0
  139. package/dist/model/history.js +39 -0
  140. package/dist/model/history.js.map +1 -0
  141. package/dist/model/index.d.ts +17 -0
  142. package/dist/model/index.d.ts.map +1 -0
  143. package/dist/model/index.js +33 -0
  144. package/dist/model/index.js.map +1 -0
  145. package/dist/model/iterableRange.d.ts +32 -0
  146. package/dist/model/iterableRange.d.ts.map +1 -0
  147. package/dist/model/iterableRange.js +79 -0
  148. package/dist/model/iterableRange.js.map +1 -0
  149. package/dist/model/namingModel.d.ts +24 -0
  150. package/dist/model/namingModel.d.ts.map +1 -0
  151. package/dist/model/namingModel.js +75 -0
  152. package/dist/model/namingModel.js.map +1 -0
  153. package/dist/model/options.d.ts +56 -0
  154. package/dist/model/options.d.ts.map +1 -0
  155. package/dist/model/options.js +27 -0
  156. package/dist/model/options.js.map +1 -0
  157. package/dist/model/rowModel.d.ts +91 -0
  158. package/dist/model/rowModel.d.ts.map +1 -0
  159. package/dist/model/rowModel.js +137 -0
  160. package/dist/model/rowModel.js.map +1 -0
  161. package/dist/model/selectionModel.d.ts +20 -0
  162. package/dist/model/selectionModel.d.ts.map +1 -0
  163. package/dist/model/selectionModel.js +45 -0
  164. package/dist/model/selectionModel.js.map +1 -0
  165. package/dist/model/style.d.ts +73 -0
  166. package/dist/model/style.d.ts.map +1 -0
  167. package/dist/model/style.js +38 -0
  168. package/dist/model/style.js.map +1 -0
  169. package/dist/model/styleModel.d.ts +20 -0
  170. package/dist/model/styleModel.d.ts.map +1 -0
  171. package/dist/model/styleModel.js +85 -0
  172. package/dist/model/styleModel.js.map +1 -0
  173. package/dist/sparklines/index.d.ts +2 -0
  174. package/dist/sparklines/index.d.ts.map +1 -0
  175. package/dist/sparklines/index.js +18 -0
  176. package/dist/sparklines/index.js.map +1 -0
  177. package/dist/sparklines/sparklines.d.ts +61 -0
  178. package/dist/sparklines/sparklines.d.ts.map +1 -0
  179. package/dist/sparklines/sparklines.js +185 -0
  180. package/dist/sparklines/sparklines.js.map +1 -0
  181. package/dist/types.d.ts +27 -0
  182. package/dist/types.d.ts.map +1 -0
  183. package/dist/types.js +9 -0
  184. package/dist/types.js.map +1 -0
  185. package/package.json +56 -0
@@ -0,0 +1,7 @@
1
+ import { Direction } from "@omegagrid/core";
2
+ import { CellRange } from "../common";
3
+ import { CellModel, GridModel } from "../model";
4
+ export declare function extrapolateValues(source: CellModel[], count: number): unknown[];
5
+ export declare function extrapolateFormulas(cell: CellModel, direction: Direction, count: number): string[];
6
+ export declare function autofill(model: GridModel, selectedRange: CellRange, autofillRange: CellRange, direction: Direction): [CellModel[], unknown[]];
7
+ //# sourceMappingURL=autofill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autofill.d.ts","sourceRoot":"","sources":["../../src/calculations/autofill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEhD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,aA4BnE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAOvF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,4BAsClH"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.autofill = exports.extrapolateFormulas = exports.extrapolateValues = void 0;
4
+ const core_1 = require("@omegagrid/core");
5
+ const _1 = require(".");
6
+ function extrapolateValues(source, count) {
7
+ var _a;
8
+ const result = Array(count).fill(null);
9
+ let increment = 0;
10
+ let inputValues = [];
11
+ if (source.length > 1) {
12
+ inputValues = source.map(cell => parseFloat(cell.value) || 0);
13
+ increment = inputValues[1] - inputValues[0];
14
+ for (let i = 2; i < inputValues.length; i++) {
15
+ if (inputValues[i] - inputValues[i - 1] !== increment) {
16
+ increment = 0;
17
+ break;
18
+ }
19
+ }
20
+ }
21
+ if (increment == 0) {
22
+ for (let i = 0; i < count; i++) {
23
+ result[i] = (_a = source[i % source.length]) === null || _a === void 0 ? void 0 : _a.value;
24
+ }
25
+ }
26
+ else {
27
+ let prev = inputValues[inputValues.length - 1];
28
+ for (let i = 0; i < count; i++) {
29
+ prev = result[i] = prev + increment;
30
+ }
31
+ }
32
+ return result;
33
+ }
34
+ exports.extrapolateValues = extrapolateValues;
35
+ function extrapolateFormulas(cell, direction, count) {
36
+ const formula = new _1.Formula(cell.formula, cell.model.calculations.tokenizer);
37
+ const result = [];
38
+ for (let i = 0; i < count; i++) {
39
+ result.push((0, _1.prefixFormula)(formula.shift(0, 1, direction).createFormulaString()));
40
+ }
41
+ return result;
42
+ }
43
+ exports.extrapolateFormulas = extrapolateFormulas;
44
+ function autofill(model, selectedRange, autofillRange, direction) {
45
+ const sourceMatrix = model.getCellMatrix(selectedRange);
46
+ let input;
47
+ if (direction == 'right')
48
+ input = core_1.matrix.clone(sourceMatrix);
49
+ else if (direction == 'down')
50
+ input = core_1.matrix.transpose(sourceMatrix);
51
+ else if (direction == 'left')
52
+ input = core_1.matrix.reverseColumns(sourceMatrix);
53
+ else if (direction == 'up')
54
+ input = core_1.matrix.reverseColumns(core_1.matrix.transpose(sourceMatrix));
55
+ const displayValueMatrix = new Array(autofillRange.size.rows);
56
+ for (let r = 0; r < autofillRange.size.rows; r++) {
57
+ displayValueMatrix[r] = (new Array(autofillRange.size.columns));
58
+ for (let c = 0; c < autofillRange.size.columns; c++) {
59
+ const sourceCell = sourceMatrix.length > r
60
+ ? sourceMatrix[r][sourceMatrix[r].length > c ? c : 0]
61
+ : sourceMatrix[0][c];
62
+ displayValueMatrix[r][c] = sourceCell.hasDisplayValue ? sourceCell.displayValue : null;
63
+ }
64
+ }
65
+ const autofillCount = autofillRange.size[direction == 'down' || direction == 'up' ? 'rows' : 'columns'];
66
+ let output = input.map(vect => {
67
+ if (vect[vect.length - 1].hasFormula)
68
+ return extrapolateFormulas(vect[vect.length - 1], direction, autofillCount);
69
+ else
70
+ return extrapolateValues(vect, autofillCount);
71
+ });
72
+ if (direction == 'down')
73
+ output = core_1.matrix.transpose(output);
74
+ else if (direction == 'left')
75
+ output = core_1.matrix.reverseColumns(output);
76
+ else if (direction == 'up')
77
+ output = core_1.matrix.reverseRows(core_1.matrix.transpose(output));
78
+ return model.spillValues(model.getCellByRange(autofillRange.bounds[0][0]), output, model.getCellByRange(selectedRange.bounds[0][0]), displayValueMatrix);
79
+ }
80
+ exports.autofill = autofill;
81
+ //# sourceMappingURL=autofill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autofill.js","sourceRoot":"","sources":["../../src/calculations/autofill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { Direction } from "@omegagrid/core";
2
+ import { CellRange } from "../common";
3
+ import { CellModel, GridModel, Viewport, Dependencies } from "../model";
4
+ import { Formula, FormulaString } from "./formula";
5
+ import { Tokenizer } from "./tokenization";
6
+ export declare class CalculationModel {
7
+ readonly model: GridModel;
8
+ private _tokenizer;
9
+ get tokenizer(): Tokenizer;
10
+ private _dependencies;
11
+ get dependencies(): Dependencies;
12
+ private _formulas;
13
+ get formulas(): Map<string, Formula>;
14
+ private context;
15
+ private _spilledRange;
16
+ get spilledRange(): CellRange;
17
+ constructor(model: GridModel);
18
+ createFormula(cell: CellModel): Formula;
19
+ createDependecies(cell: CellModel): this;
20
+ refreshFormula(cell: CellModel): this;
21
+ updateDependencies(cell: CellModel): this;
22
+ getFormula(cell: CellModel): Formula;
23
+ refresh(): void;
24
+ clearDependecies(cell: CellModel): this;
25
+ evaluateFormula(formula: Formula, cell: CellModel): unknown;
26
+ evaluateExpression(expression: FormulaString, cell?: CellModel): unknown;
27
+ evaluate(cell: CellModel, allowSpill?: boolean): unknown;
28
+ evaluateAll(): void;
29
+ evaluateDependants(cell: CellModel): [CellModel, string?][];
30
+ calculateViewport(viewport: Viewport): CellModel[];
31
+ shift(index: number, offset: number, direction: Direction, maxIndex?: number): this;
32
+ getFormulaCells(): CellModel[];
33
+ renameSheet(oldName: string, newName: string): boolean;
34
+ }
35
+ //# sourceMappingURL=calculationModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculationModel.d.ts","sourceRoot":"","sources":["../../src/calculations/calculationModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAY,MAAM,UAAU,CAAC;AAElF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAc3C,qBAAa,gBAAgB;aAeA,KAAK,EAAE,SAAS;IAb5C,OAAO,CAAC,UAAU,CAAmB;IACrC,IAAI,SAAS,cAA6B;IAE1C,OAAO,CAAC,aAAa,CAAe;IACpC,IAAI,YAAY,iBAAgC;IAEhD,OAAO,CAAC,SAAS,CAA8B;IAC/C,IAAI,QAAQ,yBAA4B;IAExC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,aAAa,CAAY;IACjC,IAAI,YAAY,cAAgC;gBAEpB,KAAK,EAAE,SAAS;IAK5C,aAAa,CAAC,IAAI,EAAE,SAAS;IAQ7B,iBAAiB,CAAC,IAAI,EAAE,SAAS;IAcjC,cAAc,CAAC,IAAI,EAAE,SAAS;IAO9B,kBAAkB,CAAC,IAAI,EAAE,SAAS;IAKlC,UAAU,CAAC,IAAI,EAAE,SAAS;IAI1B,OAAO;IAKP,gBAAgB,CAAC,IAAI,EAAE,SAAS;IAOhC,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO;IAK3D,kBAAkB,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO;IAMxE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO;IAqCxD,WAAW;IAIX,kBAAkB,CAAC,IAAI,EAAE,SAAS;IAUlC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ;IAkBpC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAE,MAAa;IAqBlF,eAAe;IAef,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAa5C"}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CalculationModel = void 0;
4
+ const common_1 = require("../common");
5
+ const model_1 = require("../model");
6
+ const context_1 = require("./context");
7
+ const formula_1 = require("./formula");
8
+ const tokenization_1 = require("./tokenization");
9
+ function evaluationErrorHandler(error) {
10
+ if (error instanceof RangeError) {
11
+ if (error.message == 'Maximum call stack size exceeded') {
12
+ return 'infinite loop';
13
+ }
14
+ else {
15
+ return error.message;
16
+ }
17
+ }
18
+ else {
19
+ return error.toString();
20
+ }
21
+ }
22
+ class CalculationModel {
23
+ get tokenizer() { return this._tokenizer; }
24
+ get dependencies() { return this._dependencies; }
25
+ get formulas() { return this._formulas; }
26
+ get spilledRange() { return this._spilledRange; }
27
+ constructor(model) {
28
+ this.model = model;
29
+ this._tokenizer = new tokenization_1.Tokenizer();
30
+ this._formulas = new Map();
31
+ this._dependencies = new model_1.Dependencies(model);
32
+ this.context = new context_1.CalculationContext(model);
33
+ }
34
+ createFormula(cell) {
35
+ const f = new formula_1.Formula(cell.formula, this.tokenizer);
36
+ this._formulas.set(cell.address, f);
37
+ if (cell.hasOwnFormula)
38
+ cell.formula = f.createFormulaString(); // normalize formula string
39
+ this.createDependecies(cell);
40
+ return f;
41
+ }
42
+ createDependecies(cell) {
43
+ const addr = cell.address;
44
+ if (this.formulas.has(addr)) {
45
+ const f = this.formulas.get(addr);
46
+ f.ranges.forEach(([_i, r, sheet]) => this._dependencies.add(addr, r.A1, sheet));
47
+ f.cells.forEach(([_i, r, sheet]) => this._dependencies.add(addr, r.A1, sheet));
48
+ f.variables.forEach(([_i, v]) => {
49
+ const c = this.model.getCellByName(v, cell.range);
50
+ if (c)
51
+ this._dependencies.add(addr, c.address, null);
52
+ });
53
+ }
54
+ return this;
55
+ }
56
+ refreshFormula(cell) {
57
+ cell.refreshFormula();
58
+ this.formulas.delete(cell.address);
59
+ this.clearDependecies(cell);
60
+ return this;
61
+ }
62
+ updateDependencies(cell) {
63
+ this.clearDependecies(cell).getFormula(cell);
64
+ return this;
65
+ }
66
+ getFormula(cell) {
67
+ return this._formulas.has(cell.address) ? this._formulas.get(cell.address) : this.createFormula(cell);
68
+ }
69
+ refresh() {
70
+ this.dependencies.clear();
71
+ this._formulas.clear();
72
+ }
73
+ clearDependecies(cell) {
74
+ const addr = cell.address;
75
+ this.dependencies.clearCellDependecies(addr);
76
+ this.formulas.delete(addr);
77
+ return this;
78
+ }
79
+ evaluateFormula(formula, cell) {
80
+ this.context.currentCell = cell;
81
+ return formula.fn(this.context, { cell, formula });
82
+ }
83
+ evaluateExpression(expression, cell) {
84
+ this.context.currentCell = cell;
85
+ const formula = new formula_1.Formula(expression, this.tokenizer);
86
+ return formula.fn(this.context, { cell, formula });
87
+ }
88
+ evaluate(cell, allowSpill) {
89
+ if (!cell)
90
+ return null;
91
+ let value = null;
92
+ const hasFormula = cell.hasFormula;
93
+ if (cell.hasValue) {
94
+ value = cell.value;
95
+ }
96
+ else if (hasFormula) {
97
+ const formula = this.getFormula(cell);
98
+ try {
99
+ cell.clearError();
100
+ this.context.currentCell = cell;
101
+ value = formula.fn(this.context, { cell, formula });
102
+ if (Array.isArray(value)) {
103
+ if (allowSpill) {
104
+ this.model.spillValues(cell, value);
105
+ this._spilledRange = new common_1.CellRange(cell.c, cell.r, cell.c + value[0].length - 1, cell.r + value.length - 1);
106
+ }
107
+ else {
108
+ this._spilledRange = null;
109
+ }
110
+ value = value[0][0];
111
+ }
112
+ else {
113
+ this._spilledRange = null;
114
+ cell.value = value;
115
+ }
116
+ }
117
+ catch (error) {
118
+ cell.error = evaluationErrorHandler(error);
119
+ }
120
+ }
121
+ return value;
122
+ }
123
+ evaluateAll() {
124
+ this.model.rows.forEach(row => this.model.columns.forEach((_, c) => this.evaluate(row.cell(c))));
125
+ }
126
+ evaluateDependants(cell) {
127
+ const cells = [];
128
+ this.dependencies.getDependants(cell.range).forEach(([cell, sheet]) => {
129
+ cell.clearCalculatedValue();
130
+ cells.push([cell, sheet]);
131
+ cell.model.calculations.evaluate(cell);
132
+ });
133
+ return cells;
134
+ }
135
+ calculateViewport(viewport) {
136
+ const calculatedCells = [];
137
+ viewport.rows.forEach(row => row.cells.forEach(cell => {
138
+ if (cell.hasFormula) {
139
+ if (!cell.hasValue) {
140
+ this.evaluate(cell);
141
+ if (this.spilledRange) {
142
+ for (const cell2 of this.model.getRangeIterator(this.spilledRange)) {
143
+ calculatedCells.push(cell2);
144
+ }
145
+ }
146
+ }
147
+ calculatedCells.push(cell);
148
+ }
149
+ }));
150
+ return calculatedCells;
151
+ }
152
+ shift(index, offset, direction, maxIndex = null) {
153
+ this.getFormulaCells().forEach(cell => {
154
+ cell.formula = this.getFormula(cell).shift(index, offset, direction, maxIndex).createFormulaString(false);
155
+ this.updateDependencies(cell);
156
+ });
157
+ const thisSheet = this.model.name;
158
+ this.dependencies.sheetDependants.forEach(sheet => {
159
+ const connectedModel = this.model.getConnectedModel(sheet);
160
+ connectedModel === null || connectedModel === void 0 ? void 0 : connectedModel.calculations.getFormulaCells().forEach(cell => {
161
+ const formula = connectedModel.calculations.getFormula(cell);
162
+ if (formula.hasSheetReference(thisSheet)) {
163
+ cell.formula = formula.shift(index, offset, direction, maxIndex).createFormulaString(false);
164
+ connectedModel.calculations.updateDependencies(cell);
165
+ }
166
+ });
167
+ });
168
+ return this;
169
+ }
170
+ getFormulaCells() {
171
+ const m = this.model;
172
+ const cells = [];
173
+ let row;
174
+ const rows = m.rows.length;
175
+ const columns = m.columns.length;
176
+ for (let r = 0; r < rows; r++) {
177
+ row = m.rows[r];
178
+ for (let c = 0; c < columns; c++) {
179
+ if (row.hasCellFormula(c))
180
+ cells.push(row.cell(c));
181
+ }
182
+ }
183
+ return cells;
184
+ }
185
+ renameSheet(oldName, newName) {
186
+ let renamed = false;
187
+ this.dependencies.renameSheet(oldName, newName);
188
+ this.getFormulaCells().forEach(cell => {
189
+ const f = this.getFormula(cell);
190
+ if (f.renameSheet(oldName, newName)) {
191
+ cell.formula = f.createFormulaString();
192
+ renamed = true;
193
+ }
194
+ });
195
+ return renamed;
196
+ }
197
+ }
198
+ exports.CalculationModel = CalculationModel;
199
+ //# sourceMappingURL=calculationModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculationModel.js","sourceRoot":"","sources":["../../src/calculations/calculationModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type Condition = string | number;
2
+ export declare function scalarCompare(s1: any, s2: any): number;
3
+ export declare function evalCondition(condition: Condition, value: unknown): boolean;
4
+ //# sourceMappingURL=conditions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../../src/calculations/conditions.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAC,MAAM,CAAC;AAEtC,wBAAgB,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAI,MAAM,CASvD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,WAoBjE"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.evalCondition = exports.scalarCompare = void 0;
5
+ const core_1 = require("@omegagrid/core");
6
+ function scalarCompare(s1, s2) {
7
+ if ((isNaN(s1) || s1 == null) && (isNaN(s2) || s2 == null)) {
8
+ s1 = s1 == null ? '' : core_1.utils.removeAccents(s1.toString()).toLowerCase();
9
+ s2 = s2 == null ? '' : core_1.utils.removeAccents(s2.toString()).toLowerCase();
10
+ }
11
+ if (s1 > s2)
12
+ return 1;
13
+ if (s1 < s2)
14
+ return -1;
15
+ return 0;
16
+ }
17
+ exports.scalarCompare = scalarCompare;
18
+ function evalCondition(condition, value) {
19
+ const isStringValue = core_1.utils.isString(value);
20
+ if (core_1.utils.isString(condition)) {
21
+ condition = condition.toString().trim();
22
+ if (condition.startsWith('=')) {
23
+ return scalarCompare(value, isStringValue ? condition.substring(1) : parseFloat(condition.substring(1))) == 0;
24
+ }
25
+ else if (condition.startsWith('>')) {
26
+ return scalarCompare(value, isStringValue ? condition.substring(1) : parseFloat(condition.substring(1))) > 0;
27
+ }
28
+ else if (condition.startsWith('<')) {
29
+ return scalarCompare(value, isStringValue ? condition.substring(1) : parseFloat(condition.substring(1))) < 0;
30
+ }
31
+ else if (condition.startsWith('>=')) {
32
+ return scalarCompare(value, isStringValue ? condition.substring(2) : parseFloat(condition.substring(2))) >= 0;
33
+ }
34
+ else if (condition.startsWith('<=')) {
35
+ return scalarCompare(value, isStringValue ? condition.substring(2) : parseFloat(condition.substring(2))) <= 0;
36
+ }
37
+ else {
38
+ return scalarCompare(value, isStringValue ? condition : (isNaN(condition) ? (condition || '') : parseFloat(condition))) == 0;
39
+ }
40
+ }
41
+ else {
42
+ return value == condition;
43
+ }
44
+ }
45
+ exports.evalCondition = evalCondition;
46
+ //# sourceMappingURL=conditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/calculations/conditions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { Matrix } from "@omegagrid/core";
2
+ import { RangeAddress } from "../common";
3
+ import { CellModel, GridModel } from "../model";
4
+ import { Operator } from "./operators";
5
+ export declare class CalculationContext {
6
+ readonly model: GridModel;
7
+ currentCell: CellModel;
8
+ constructor(model: GridModel);
9
+ getModel: (sheet: string) => GridModel;
10
+ /**
11
+ * Returns cell value
12
+ * @param a1 cell addres
13
+ * @param sheet sheet name
14
+ * @returns cell value
15
+ */
16
+ cl: (a1: RangeAddress, sheet?: string) => unknown;
17
+ /**
18
+ * Returns range value matrix
19
+ * @param a1 cell addres
20
+ * @param sheet sheet name
21
+ * @returns cell value matrix
22
+ */
23
+ rn: (a1: RangeAddress, sheet?: string) => Matrix<unknown>;
24
+ /**
25
+ * Returns cell value by range name
26
+ * @param name range (cell) name
27
+ * @param sheet sheet name
28
+ * @returns cell value
29
+ */
30
+ nv: (name: string, sheet?: string) => unknown;
31
+ /**
32
+ * Returns cell value matrix for named range
33
+ * @param a1 range address
34
+ * @param sheet sheet name
35
+ * @returns cell value matrix
36
+ */
37
+ nr: (name: string, sheet?: string) => unknown;
38
+ /**
39
+ * returns formula function
40
+ * @param name function name
41
+ * @returns
42
+ */
43
+ fn: (name: string) => import("..").FormulaFunction;
44
+ /**
45
+ * Performs matrix operation
46
+ * @param operand1
47
+ * @param operand2
48
+ * @param operator
49
+ * @return value
50
+ */
51
+ op: (operand1: Matrix, operand2: Matrix, operator: Operator) => Matrix;
52
+ }
53
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/calculations/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAa,YAAY,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAC;AAExD,qBAAa,kBAAkB;aAIF,KAAK,EAAE,SAAS;IAF5C,WAAW,EAAE,SAAS,CAAC;gBAEK,KAAK,EAAE,SAAS;IAE5C,QAAQ,UAAW,MAAM,eAIxB;IAED;;;;;OAKG;IACH,EAAE,OAAQ,YAAY,UAAU,MAAM,KAAG,OAAO,CAG9C;IAEF;;;;;OAKG;IACH,EAAE,OAAQ,YAAY,UAAU,MAAM,qBAGrC;IAED;;;;;OAKG;IACH,EAAE,SAAU,MAAM,UAAU,MAAM,KAAG,OAAO,CAG1C;IAEF;;;;;OAKG;IACH,EAAE,SAAU,MAAM,UAAU,MAAM,KAAG,OAAO,CAK1C;IAEF;;;;OAIG;IACH,EAAE,SAAU,MAAM,kCAIhB;IAEF;;;;;;OAMG;IACH,EAAE,iDAAkD,QAAQ,YAE3D;CACD"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CalculationContext = void 0;
4
+ const common_1 = require("../common");
5
+ const functions_1 = require("./functions");
6
+ const operators_1 = require("./operators");
7
+ class CalculationContext {
8
+ constructor(model) {
9
+ this.model = model;
10
+ this.getModel = (sheet) => {
11
+ const m = sheet ? this.model.getConnectedModel(sheet) : this.model;
12
+ if (m)
13
+ return m;
14
+ throw new Error(`Sheet "${sheet}" not found`);
15
+ };
16
+ /**
17
+ * Returns cell value
18
+ * @param a1 cell addres
19
+ * @param sheet sheet name
20
+ * @returns cell value
21
+ */
22
+ this.cl = (a1, sheet) => {
23
+ const m = this.getModel(sheet);
24
+ return m.calculations.evaluate(m.getCellByA1(a1));
25
+ };
26
+ /**
27
+ * Returns range value matrix
28
+ * @param a1 cell addres
29
+ * @param sheet sheet name
30
+ * @returns cell value matrix
31
+ */
32
+ this.rn = (a1, sheet) => {
33
+ const m = this.getModel(sheet);
34
+ return m.getValuesInRange(common_1.CellRange.fromA1(a1));
35
+ };
36
+ /**
37
+ * Returns cell value by range name
38
+ * @param name range (cell) name
39
+ * @param sheet sheet name
40
+ * @returns cell value
41
+ */
42
+ this.nv = (name, sheet) => {
43
+ const m = this.getModel(sheet);
44
+ return m.calculations.evaluate(m.getCellByName(name, this.currentCell.range));
45
+ };
46
+ /**
47
+ * Returns cell value matrix for named range
48
+ * @param a1 range address
49
+ * @param sheet sheet name
50
+ * @returns cell value matrix
51
+ */
52
+ this.nr = (name, sheet) => {
53
+ const m = this.getModel(sheet);
54
+ const matrix = m.getValueMatrixByName(name);
55
+ if (matrix.length === 1 && matrix[0].length === 1)
56
+ return matrix[0][0];
57
+ return matrix;
58
+ };
59
+ /**
60
+ * returns formula function
61
+ * @param name function name
62
+ * @returns
63
+ */
64
+ this.fn = (name) => {
65
+ const fn = functions_1.functions.get(name);
66
+ if (fn)
67
+ return fn;
68
+ throw new Error(`Function "${name}" not found`);
69
+ };
70
+ /**
71
+ * Performs matrix operation
72
+ * @param operand1
73
+ * @param operand2
74
+ * @param operator
75
+ * @return value
76
+ */
77
+ this.op = (operand1, operand2, operator) => {
78
+ return (0, operators_1.matrixOperation)(operand1, operand2, operator);
79
+ };
80
+ }
81
+ }
82
+ exports.CalculationContext = CalculationContext;
83
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/calculations/context.ts"],"names":[],"mappings":";;;AACA,sCAAoD;AAEpD,2CAAwC;AACxC,2CAAwD;AAExD,MAAa,kBAAkB;IAI9B,YAA4B,KAAgB;QAAhB,UAAK,GAAL,KAAK,CAAW;QAE5C,aAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;YAC5B,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACnE,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,aAAa,CAAC,CAAA;QAC9C,CAAC,CAAA;QAED;;;;;WAKG;QACH,OAAE,GAAG,CAAC,EAAgB,EAAE,KAAc,EAAW,EAAE;YAClD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC;QAEF;;;;;WAKG;QACH,OAAE,GAAG,CAAC,EAAgB,EAAE,KAAc,EAAE,EAAE;YACzC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,CAAC,gBAAgB,CAAC,kBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC,CAAA;QAED;;;;;WAKG;QACH,OAAE,GAAG,CAAC,IAAY,EAAE,KAAc,EAAW,EAAE;YAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/E,CAAC,CAAC;QAEF;;;;;WAKG;QACH,OAAE,GAAG,CAAC,IAAY,EAAE,KAAc,EAAW,EAAE;YAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,OAAO,MAAM,CAAC;QACf,CAAC,CAAC;QAEF;;;;WAIG;QACH,OAAE,GAAG,CAAC,IAAY,EAAE,EAAE;YACrB,MAAM,EAAE,GAAG,qBAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,EAAE;gBAAE,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF;;;;;;WAMG;QACH,OAAE,GAAG,CAAC,QAAgB,EAAE,QAAgB,EAAE,QAAkB,EAAU,EAAE;YACvE,OAAO,IAAA,2BAAe,EAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC,CAAA;IA1E+C,CAAC;CA2EjD;AA/ED,gDA+EC"}
@@ -0,0 +1,69 @@
1
+ import { Token, Tokenizer, TokenType } from "./tokenization";
2
+ import { FormulaFunction } from '../types';
3
+ import { CellRange } from "../common";
4
+ import { Direction } from "@omegagrid/core";
5
+ import { CellModel } from "../model";
6
+ export type FormulaString = string;
7
+ export type FormulaContext = {
8
+ cell: CellModel;
9
+ formula: Formula;
10
+ };
11
+ export type FormulaColorItem = {
12
+ color: string;
13
+ address: string;
14
+ sheet?: string;
15
+ type: TokenType;
16
+ tokenIndex: number;
17
+ };
18
+ type ExpressionNode = {
19
+ /** token */
20
+ t: string;
21
+ /** token type */
22
+ tt: TokenType;
23
+ /** sheet */
24
+ s?: string;
25
+ /** children */
26
+ c?: ExpressionNode[];
27
+ };
28
+ export declare const isFormula: (value: string) => boolean;
29
+ export declare const prefixFormula: (value: string) => string;
30
+ export declare const stripFormulaPrefix: (value: string) => string;
31
+ export declare class Formula {
32
+ private expression;
33
+ readonly tokenizer: Tokenizer;
34
+ private _formula;
35
+ private _variables;
36
+ private _cells;
37
+ private _ranges;
38
+ private _fn;
39
+ get fn(): FormulaFunction;
40
+ private _tokens;
41
+ get tokens(): Token[];
42
+ get variables(): [number, string, string?][];
43
+ get cells(): [number, CellRange, string?][];
44
+ get ranges(): [number, CellRange, string?][];
45
+ get colors(): Map<string, FormulaColorItem>;
46
+ constructor(expression: FormulaString, tokenizer: Tokenizer);
47
+ findTokenIndexAtPosition(pos: number): number;
48
+ getTokenPosition(index: number): {
49
+ min: number;
50
+ max: number;
51
+ };
52
+ updateToken(index: number, newValue: string): void;
53
+ removeToken(index: number): void;
54
+ insertToken(index: number, value: string, type: TokenType): void;
55
+ clone(): Formula;
56
+ updateDependecies(): void;
57
+ getNamedColor(name: string): string;
58
+ createFormulaString(html?: boolean, fnPrefix?: string): string;
59
+ createExpressionTree(): ExpressionNode;
60
+ createExpressionJSCode(node: ExpressionNode, parent?: ExpressionNode, arrayMode?: boolean): string;
61
+ compile(): string;
62
+ toString(prefix?: boolean): string;
63
+ toExcelString(): string;
64
+ shift(index: number, offset: number, direction: Direction, maxIndex?: number): this;
65
+ hasSheetReference(sheet: string): boolean;
66
+ renameSheet(oldName: string, newName: string): boolean;
67
+ }
68
+ export {};
69
+ //# sourceMappingURL=formula.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formula.d.ts","sourceRoot":"","sources":["../../src/calculations/formula.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,MAAM,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,cAAc,GAAG;IACrB,YAAY;IACT,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,EAAE,EAAE,SAAS,CAAC;IACd,YAAY;IACZ,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,eAAe;IACZ,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;CACxB,CAAA;AAED,eAAO,MAAM,SAAS,UAAW,MAAM,YAAuE,CAAC;AAC/G,eAAO,MAAM,aAAa,UAAW,MAAM,WAAqD,CAAC;AACjG,eAAO,MAAM,kBAAkB,UAAW,MAAM,WAAkD,CAAC;AAMnG,qBAAa,OAAO;IAkCP,OAAO,CAAC,UAAU;aAAiC,SAAS,EAAE,SAAS;IAhCnF,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,UAAU,CAA8B;IAEhD,OAAO,CAAC,MAAM,CAAiC;IAE/C,OAAO,CAAC,OAAO,CAAiC;IAEhD,OAAO,CAAC,GAAG,CAAkB;IAC7B,IAAI,EAAE,oBAAgH;IAEtH,OAAO,CAAC,OAAO,CAAU;IACzB,IAAI,MAAM,YAA0B;IAEpC,IAAI,SAAS,gCAA6B;IAC1C,IAAI,KAAK,mCAAyB;IAClC,IAAI,MAAM,mCAA0B;IAEpC,IAAI,MAAM,kCAWT;gBAEmB,UAAU,EAAE,aAAa,EAAkB,SAAS,EAAE,SAAS;IAKnF,wBAAwB,CAAC,GAAG,EAAE,MAAM;IASpC,gBAAgB,CAAC,KAAK,EAAE,MAAM;;;;IAQ9B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAM3C,WAAW,CAAC,KAAK,EAAE,MAAM;IAMzB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAMzD,KAAK;IAIL,iBAAiB;IA0BjB,aAAa,CAAC,IAAI,EAAE,MAAM;IAI1B,mBAAmB,CAAC,IAAI,UAAQ,EAAE,QAAQ,GAAE,MAAa;IAiDzD,oBAAoB,IAAK,cAAc;IAwGvC,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,OAAO,GAAI,MAAM;IAgCnG,OAAO;IAKP,QAAQ,CAAC,MAAM,UAAQ;IAIvB,aAAa;IAIb,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAE,MAAa;IAwBlF,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAO/B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CA0B5C"}