@omegagrid/grid-core 0.11.2 → 0.11.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/model/calculationModel.d.ts.map +1 -1
- package/dist/model/calculationModel.js +39 -1
- package/dist/model/calculationModel.js.map +1 -1
- package/dist/model/cellModel.d.ts +2 -0
- package/dist/model/cellModel.d.ts.map +1 -1
- package/dist/model/cellModel.js.map +1 -1
- package/dist/model/gridModel.d.ts +10 -0
- package/dist/model/gridModel.d.ts.map +1 -1
- package/dist/model/gridModel.js +44 -10
- package/dist/model/gridModel.js.map +1 -1
- package/dist/model/iterableRange.js +1 -1
- package/dist/model/iterableRange.js.map +1 -1
- package/dist/model/options.d.ts +2 -0
- package/dist/model/options.d.ts.map +1 -1
- package/dist/model/options.js.map +1 -1
- package/dist/model/tableTheme.js +8 -7
- package/dist/model/tableTheme.js.map +1 -1
- package/package.json +3 -3
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAehD,eAAO,MAAM,sBAAsB,EAI9B,aAAa,CAAC;AAEnB,eAAO,MAAM,oBAAoB,EAG5B,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAehD,eAAO,MAAM,sBAAsB,EAI9B,aAAa,CAAC;AAEnB,eAAO,MAAM,oBAAoB,EAG5B,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwFjB,wBAqBC"}
|
package/dist/constants.js
CHANGED
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants as coreConstants } from '@omegagrid/core';\nimport { Options, FilterOptions, TreeOptions } from './model';\nimport { SparklineOptions } from './sparklines';\n\nconst DEFAULT_SPARKLINE_OPTIONS = {\n\tminValue: 'auto',\n\tmaxValue: 'auto',\n\ttype: 'line',\n\tstyle: {\n\t\tcolor: '0094FF',\n\t\tweight: 1\n\t},\n\tmarker: {\n\t\tcolor: 'ff0000'\n\t}\n} as SparklineOptions;\n\nexport const DEFAULT_FILTER_OPTIONS = {\n\tenabled: false,\n\tincludeChildren: true,\n\tincludeParents: true\n} as FilterOptions;\n\nexport const DEFAULT_TREE_OPTIONS = {\n\tenabled: true,\n\treversed: false,\n} as TreeOptions;\n\nconst ROW_HEIGHT = 22;\n\nconst DEFAULT_OPTIONS: Options = {\n\trows: 100,\n\tcolumns: 20,\n\treadOnly: false,\n\trowNumbers: true,\n\trowPriority: 2,\n\trowTree: {enabled: true},\n\tcolumnTree: {enabled: true},\n\tcolLetters: true,\n\temptyPlaceholder: true,\n\tfreezeTop: 0,\n\tfontSize: 14,\n\trowHeight: ROW_HEIGHT,\n\trowResize: true,\n\tcolumnWidth: 100,\n\tcolumnResize: true,\n\tcolumnPriority: 1,\n\tfreezeLeft: 0,\n\tfreezeRight: 0,\n\tfreezeBottom: 0,\n\tmaxSortingColumns: 3,\n\tnumberFormat: null,\n\tlevelIndentFactor: 2,\n\tcellIndentFactor: 10,\n\temptyClickable: false,\n\tgrid: true,\n\tautofill: true,\n\tformulas: true,\n\tundoRedo: true,\n\tcommandWindow: true,\n\tcellCache: true,\n\tsingleCellModel: false,\n\tzoom: 1,\n\tediting: {\n\t\trowInsertion: true,\n\t\trowDeletion: true,\n\t\tcolInsertion: true,\n\t\tcolDeletion: true,\n\t\trowOutline: true,\n\t\tcolOutline: true,\n\t\tdateCalendarEditor: false\n\t},\n\tcomments: {\n\t\thideTimeout: 1000,\n\t\toffsetX: 30,\n\t\toffsetY: -30,\n\t\tzIndex: 500,\n\t\theaderPosition: 'top'\n\t},\n\tscrolling: {\n\t\tverticalOverscroll: true,\n\t\thorizontalOverscroll: true,\n\t\tscrollbarVisibilityTreshold: 100\n\t},\n\tselecting: {\n\t\tenabled: true,\n\t\tmultiSelect: true,\n\t},\n\tevents: {\n\t\tclick: {\n\t\t\tmouseMoveTreshold: 10\n\t\t}\n\t},\n\tclipboard: {\n\t\tpasteProps: ['v', 'dv'],\n\t\trowPasteMode: 'rewrite_append',\n\t\tcolumnPasteMode: 'rewrite'\n\t},\n\tprint: {\n\t\tdpi: 600,\n\t\tmargins: {\n\t\t\tleft: 6.35,\n\t\t\tright: 6.35,\n\t\t\ttop: 19.05,\n\t\t\tbottom: 19.05,\n\t\t\theader: 7.62,\n\t\t\tfooter: 7.62\n\t\t},\n\t\torientation: 'portrait',\n\t\tpaper: 'A4'\n\t}\n};\n\nexport default {\n\tROW_HEIGHT: ROW_HEIGHT,\n\tRESIZE_TRESHOLD: 10,\n\tROW_HEADER_WIDTH: 60,\n\tSLIDER_SIZE: 12,\n\tEXPANDER_SIZE: 13,\n\tMAX_CACHE_ITEMS: 5000, //50000,\n\tCACHE_CLEAN_INTERVAL: 30,\n\tCOMMENT_HIDE_TIMEOUT: 1000,\n\tSELECTOR_BORDER_WIDTH: 1,\n\tMIN_ROW_HEIGHT: 5,\n\tMIN_COL_WIDTH: 5,\n\tSPARKLINE_GAP: 4,\n\tAUTOSCROLL_TRESHOLD: 100,\n\tAUTOSCROLL_RATIO: 1.1,\n\tAUTOSCROLL_INTERVAL: 100,\n\tDEFAULT_SPARKLINE_OPTIONS: DEFAULT_SPARKLINE_OPTIONS,\n\tDEFAULT_OPTIONS: DEFAULT_OPTIONS,\n\tMAX_COMMENT_AUTOHEIGHT: 300,\n\tMIN_COMMENT_AUTOHEIGHT: 25,\n\t...coreConstants\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants as coreConstants } from '@omegagrid/core';\nimport { Options, FilterOptions, TreeOptions } from './model';\nimport { SparklineOptions } from './sparklines';\n\nconst DEFAULT_SPARKLINE_OPTIONS = {\n\tminValue: 'auto',\n\tmaxValue: 'auto',\n\ttype: 'line',\n\tstyle: {\n\t\tcolor: '0094FF',\n\t\tweight: 1\n\t},\n\tmarker: {\n\t\tcolor: 'ff0000'\n\t}\n} as SparklineOptions;\n\nexport const DEFAULT_FILTER_OPTIONS = {\n\tenabled: false,\n\tincludeChildren: true,\n\tincludeParents: true\n} as FilterOptions;\n\nexport const DEFAULT_TREE_OPTIONS = {\n\tenabled: true,\n\treversed: false,\n} as TreeOptions;\n\nconst ROW_HEIGHT = 22;\n\nconst DEFAULT_OPTIONS: Options = {\n\trows: 100,\n\tcolumns: 20,\n\treadOnly: false,\n\trowNumbers: true,\n\trowPriority: 2,\n\trowTree: {enabled: true},\n\tcolumnTree: {enabled: true},\n\tcolLetters: true,\n\temptyPlaceholder: true,\n\tfreezeTop: 0,\n\tfontSize: 14,\n\trowHeight: ROW_HEIGHT,\n\trowResize: true,\n\tcolumnWidth: 100,\n\tcolumnResize: true,\n\tcolumnPriority: 1,\n\tfreezeLeft: 0,\n\tfreezeRight: 0,\n\tfreezeBottom: 0,\n\tmaxSortingColumns: 3,\n\tnumberFormat: null,\n\tlevelIndentFactor: 2,\n\tcellIndentFactor: 10,\n\temptyClickable: false,\n\tgrid: true,\n\tautofill: true,\n\tformulas: true,\n\tmaxCalculationDepth: 50,\n\tundoRedo: true,\n\tcommandWindow: true,\n\tcellCache: true,\n\tsingleCellModel: false,\n\tzoom: 1,\n\tediting: {\n\t\trowInsertion: true,\n\t\trowDeletion: true,\n\t\tcolInsertion: true,\n\t\tcolDeletion: true,\n\t\trowOutline: true,\n\t\tcolOutline: true,\n\t\tdateCalendarEditor: false\n\t},\n\tcomments: {\n\t\thideTimeout: 1000,\n\t\toffsetX: 30,\n\t\toffsetY: -30,\n\t\tzIndex: 500,\n\t\theaderPosition: 'top'\n\t},\n\tscrolling: {\n\t\tverticalOverscroll: true,\n\t\thorizontalOverscroll: true,\n\t\tscrollbarVisibilityTreshold: 100\n\t},\n\tselecting: {\n\t\tenabled: true,\n\t\tmultiSelect: true,\n\t},\n\tevents: {\n\t\tclick: {\n\t\t\tmouseMoveTreshold: 10\n\t\t}\n\t},\n\tclipboard: {\n\t\tpasteProps: ['v', 'dv'],\n\t\trowPasteMode: 'rewrite_append',\n\t\tcolumnPasteMode: 'rewrite'\n\t},\n\tprint: {\n\t\tdpi: 600,\n\t\tmargins: {\n\t\t\tleft: 6.35,\n\t\t\tright: 6.35,\n\t\t\ttop: 19.05,\n\t\t\tbottom: 19.05,\n\t\t\theader: 7.62,\n\t\t\tfooter: 7.62\n\t\t},\n\t\torientation: 'portrait',\n\t\tpaper: 'A4'\n\t}\n};\n\nexport default {\n\tROW_HEIGHT: ROW_HEIGHT,\n\tRESIZE_TRESHOLD: 10,\n\tROW_HEADER_WIDTH: 60,\n\tSLIDER_SIZE: 12,\n\tEXPANDER_SIZE: 13,\n\tMAX_CACHE_ITEMS: 5000, //50000,\n\tCACHE_CLEAN_INTERVAL: 30,\n\tCOMMENT_HIDE_TIMEOUT: 1000,\n\tSELECTOR_BORDER_WIDTH: 1,\n\tMIN_ROW_HEIGHT: 5,\n\tMIN_COL_WIDTH: 5,\n\tSPARKLINE_GAP: 4,\n\tAUTOSCROLL_TRESHOLD: 100,\n\tAUTOSCROLL_RATIO: 1.1,\n\tAUTOSCROLL_INTERVAL: 100,\n\tDEFAULT_SPARKLINE_OPTIONS: DEFAULT_SPARKLINE_OPTIONS,\n\tDEFAULT_OPTIONS: DEFAULT_OPTIONS,\n\tMAX_COMMENT_AUTOHEIGHT: 300,\n\tMIN_COMMENT_AUTOHEIGHT: 25,\n\t...coreConstants\n}\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculationModel.d.ts","sourceRoot":"","sources":["../../src/model/calculationModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAY,MAAM,UAAU,CAAC;AACpE,OAAO,EAAsB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"calculationModel.d.ts","sourceRoot":"","sources":["../../src/model/calculationModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAY,MAAM,UAAU,CAAC;AACpE,OAAO,EAAsB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA4BpD,qBAAa,gBAAiB,SAAQ,eAAe;IAEpD,OAAO,CAAC,UAAU,CAAmB;IACrC,IAAI,SAAS,cAA6B;IAE1C,OAAO,CAAC,SAAS,CAA8B;IAC/C,IAAI,QAAQ,yBAA4B;IAExC,OAAO,CAAC,OAAO,CAAqB;gBAExB,KAAK,EAAE,SAAS;IAK5B,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,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO;IA6CrD,WAAW;IAIX,iBAAiB,CAAC,QAAQ,EAAE,QAAQ;IAkBpC,KAAK,CAAC,OAAO,EAAE,YAAY;IAqB3B,eAAe;IAef,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAc5C,wBAAwB,CAAC,IAAI,EAAE,SAAS;IASxC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC;CA2B/C"}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import { CalculationContext, Formula, Tokenizer } from "../calculations";
|
|
2
2
|
import { DependencyModel } from "./dependencyModel";
|
|
3
|
+
/**
|
|
4
|
+
* cells being evaluated right now, shared by all models
|
|
5
|
+
* so the references between sheets are covered as well
|
|
6
|
+
*/
|
|
7
|
+
const evaluationStack = new Set();
|
|
8
|
+
/** error propagated through the evaluation stack to every cell of the reference chain */
|
|
9
|
+
class EvaluationStackError extends Error {
|
|
10
|
+
/** @param origin cell where the propagation stops, the error propagates to the top of the stack when not set */
|
|
11
|
+
constructor(message, origin) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.origin = origin;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
3
16
|
function evaluationErrorHandler(error) {
|
|
4
|
-
if (error instanceof
|
|
17
|
+
if (error instanceof EvaluationStackError) {
|
|
18
|
+
return error.message;
|
|
19
|
+
}
|
|
20
|
+
else if (error instanceof RangeError) {
|
|
5
21
|
if (error.message == 'Maximum call stack size exceeded') {
|
|
6
22
|
return 'infinite loop';
|
|
7
23
|
}
|
|
@@ -81,7 +97,19 @@ export class CalculationModel extends DependencyModel {
|
|
|
81
97
|
return null;
|
|
82
98
|
let value = null;
|
|
83
99
|
if (cell.hasFormula) {
|
|
100
|
+
if (cell.error?.persistent) {
|
|
101
|
+
// evaluated alone, the cell would take the cached values of the rest of the cycle (nesting chain)
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
else if (evaluationStack.has(cell)) {
|
|
105
|
+
throw new EvaluationStackError('circular reference', cell);
|
|
106
|
+
}
|
|
107
|
+
else if (evaluationStack.size >= this.model.options.maxCalculationDepth) {
|
|
108
|
+
throw new EvaluationStackError('maximum nesting depth exceeded');
|
|
109
|
+
}
|
|
84
110
|
const formula = this.getFormula(cell);
|
|
111
|
+
const previousCell = this.context.currentCell;
|
|
112
|
+
evaluationStack.add(cell);
|
|
85
113
|
try {
|
|
86
114
|
cell.clearError();
|
|
87
115
|
this.context.currentCell = cell;
|
|
@@ -99,6 +127,16 @@ export class CalculationModel extends DependencyModel {
|
|
|
99
127
|
}
|
|
100
128
|
catch (error) {
|
|
101
129
|
cell.error = { message: evaluationErrorHandler(error) };
|
|
130
|
+
if (error instanceof EvaluationStackError) {
|
|
131
|
+
cell.error.persistent = true;
|
|
132
|
+
// every cell of the cycle (nesting chain) gets the error, not just the deepest one
|
|
133
|
+
if (error.origin ? error.origin !== cell : evaluationStack.size > 1)
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
evaluationStack.delete(cell);
|
|
139
|
+
this.context.currentCell = previousCell; // nested evaluation must not change the cell of the outer one
|
|
102
140
|
}
|
|
103
141
|
}
|
|
104
142
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculationModel.js","sourceRoot":"","sources":["../../src/model/calculationModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { CellModel, GridModel, Viewport, RowModel } from \"../model\";\nimport { CalculationContext, Formula, FormulaString, Tokenizer } from \"../calculations\";\nimport { ShiftOptions } from \"../types\";\nimport { DependencyModel } from \"./dependencyModel\";\n\nfunction evaluationErrorHandler(error: unknown) {\n\tif (error instanceof RangeError) {\n\t\tif (error.message == 'Maximum call stack size exceeded') {\n\t\t\treturn 'infinite loop';\n\t\t} else {\n\t\t\treturn error.message;\n\t\t}\n\t} else {\n\t\treturn error.toString();\n\t}\n}\n\nexport class CalculationModel extends DependencyModel {\n\n\tprivate _tokenizer = new Tokenizer();\n\tget tokenizer() { return this._tokenizer }\n\n\tprivate _formulas = new Map<string, Formula>();\n\tget formulas() { return this._formulas }\n\n\tprivate context: CalculationContext;\n\n\tconstructor(model: GridModel) {\n\t\tsuper(model, 'calculations');\n\t\tthis.context = new CalculationContext(model);\n\t}\n\n\tcreateFormula(cell: CellModel) {\n\t\tconst f = new Formula(cell.formula, this.tokenizer);\n\t\tthis._formulas.set(cell.address, f);\n\t\tif (cell.hasOwnFormula) cell.formula = f.createFormulaString(); // normalize formula string\n\t\tthis.createDependecies(cell);\n\t\treturn f;\n\t}\n\n\tcreateDependecies(cell: CellModel) {\n\t\tconst addr = cell.address;\n\t\tif (this.formulas.has(addr)) {\n\t\t\tconst f = this.formulas.get(addr);\n\t\t\tf.ranges.forEach(([_i, r, sheet]) => this._dependencies.add(addr, r.A1, sheet));\n\t\t\tf.cells.forEach(([_i, r, sheet]) => this._dependencies.add(addr, r.A1, sheet));\n\t\t\tf.variables.forEach(([_i, v]) => {\n\t\t\t\tconst c = this.model.getCellByName(v, cell.range);\n\t\t\t\tif (c) this._dependencies.add(addr, c.address, null)\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\n\trefreshFormula(cell: CellModel) {\n\t\tcell.refreshFormula();\n\t\tthis.formulas.delete(cell.address);\n\t\tthis.clearDependecies(cell);\n\t\treturn this;\n\t}\n\n\tupdateDependencies(cell: CellModel) {\n\t\tthis.clearDependecies(cell).getFormula(cell);\n\t\treturn this;\n\t}\n\n\tgetFormula(cell: CellModel) {\n\t\treturn this._formulas.has(cell.address) ? this._formulas.get(cell.address) : this.createFormula(cell);\n\t}\n\n\trefresh() {\n\t\tthis.dependencies.clear();\n\t\tthis._formulas.clear();\n\t}\n\n\tclearDependecies(cell: CellModel) {\n\t\tconst addr = cell.address;\n\t\tthis.dependencies.clearCellDependecies(addr);\n\t\tthis.formulas.delete(addr);\n\t\treturn this;\n\t}\n\n\tevaluateFormula(formula: Formula, cell: CellModel): unknown {\n\t\tthis.context.currentCell = cell;\n\t\treturn formula.fn(this.context, { cell, formula });\n\t}\n\n\tevaluateExpression(expression: FormulaString, cell?: CellModel): unknown {\n\t\tthis.context.currentCell = cell;\n\t\tconst formula = new Formula(expression, this.tokenizer);\n\t\treturn formula.fn(this.context, { cell, formula });\n\t}\n\t\n\tevaluate(cell: CellModel, noSpill?: boolean): unknown {\n\t\tif (!cell) return null;\n\t\tlet value = null;\n\t\tif (cell.hasFormula) {\n\t\t\tconst formula = this.getFormula(cell);\n\t\t\ttry {\n\t\t\t\tcell.clearError();\n\t\t\t\tthis.context.currentCell = cell;\n\t\t\t\tvalue = formula.fn(this.context, { cell, formula });\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tif (!noSpill) this.model.spillValues({cell: cell, values: value}).range;\n\t\t\t\t\tvalue = value.length > 0 && value[0].length > 0 ? value[0][0] : null;\n\t\t\t\t\tif (noSpill) cell.value = value;\n\t\t\t\t} else {\n\t\t\t\t\tcell.value = value;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tcell.error = {message: evaluationErrorHandler(error)};\n\t\t\t}\n\t\t} else {\n\t\t\tvalue = cell.value;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tevaluateAll() {\n\t\tthis.model.rows.forEach(row => this.model.columns.forEach((_, c) => row.cell(c).evaluate()));\n\t}\n\n\tcalculateViewport(viewport: Viewport) {\n\t\tconst calculatedCells: CellModel[] = [];\n\t\tviewport.rows.forEach(row => row.cells.forEach(cell => {\n\t\t\tif (cell.hasFormula) {\n\t\t\t\tif (!cell.hasValue) {\n\t\t\t\t\tthis.evaluate(cell);\n\t\t\t\t\tif (cell.spillRange) {\n\t\t\t\t\t\tfor (const cell2 of this.model.getRangeIterator(cell.spillRange)) {\n\t\t\t\t\t\t\tcalculatedCells.push(cell2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcalculatedCells.push(cell);\n\t\t\t}\n\t\t}));\n\t\treturn calculatedCells;\n\t}\n\n\tshift(options: ShiftOptions) {\n\t\tthis.getFormulaCells().forEach(cell => {\n\t\t\tcell.formula = this.getFormula(cell).shift(options).createFormulaString(false);\n\t\t\tthis.updateDependencies(cell);\n\t\t});\n\n\t\tconst thisSheet = this.model.name;\n\t\tthis.dependencies.sheetDependants.forEach(sheet => {\n\t\t\tconst connectedModel = this.model.getConnectedModel(sheet);\n\t\t\tconnectedModel?.calculations.getFormulaCells().forEach(cell => {\n\t\t\t\tconst formula = connectedModel.calculations.getFormula(cell);\n\t\t\t\tif (formula.hasSheetReference(thisSheet)) {\n\t\t\t\t\tcell.formula = formula.shift(options).createFormulaString(false);\n\t\t\t\t\tconnectedModel.calculations.updateDependencies(cell);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tgetFormulaCells() {\n\t\tconst m = this.model;\n\t\tconst cells: CellModel[] = [];\n\t\tlet row: RowModel;\n\t\tconst rows = m.rows.length;\n\t\tconst columns = m.columns.length;\n\t\tfor (let r = 0; r < rows; r++) {\n\t\t\trow = m.rows[r];\n\t\t\tfor (let c = 0; c < columns; c++) {\n\t\t\t\tif (row.hasCellFormula(c)) cells.push(row.cell(c));\n\t\t\t}\n\t\t}\n\t\treturn cells;\n\t}\n\n\trenameSheet(oldName: string, newName: string) {\n\t\tlet renamed = false;\n\t\tthis.dependencies.renameSheet(oldName, newName);\n\t\tthis.getFormulaCells().forEach(cell => {\n\t\t\tconst f = this.getFormula(cell);\n\t\t\tif (f.renameSheet(oldName, newName)) {\n\t\t\t\tcell.formula = f.createFormulaString();\n\t\t\t\tthis.refreshFormula(cell);\n\t\t\t\trenamed = true;\n\t\t\t}\n\t\t});\n\t\treturn renamed;\n\t}\n\n\tinvalidateCellDependants(cell: CellModel) {\n\t\tconst cells: [CellModel, string?][] = [];\n\t\tthis.dependencies.getDependants(cell.range).forEach(([cell, sheet]) => {\n\t\t\tcells.push([cell, sheet]);\n\t\t\tcell.invalidateValue();\n\t\t});\n\t\treturn cells;\n\t}\n\n\tinvalidateDependants(cells: Iterable<CellModel>) {\n\t\tconst updatedCells = new Map<CellModel, string|null>();\n\t\tconst recalculatedCells = new Map<CellModel, string|null>();\n\t\tfor (const cell of cells) {\n\t\t\tthis.invalidateCellDependants(cell).forEach(([cell2, sheet]) => updatedCells.set(cell2, sheet));\n\t\t}\n\t\tupdatedCells.forEach((sheet, cell) => recalculatedCells.set(cell, sheet));\n\n\t\tfor (const cell of cells) {\n\t\t\tupdatedCells.set(cell, null);\n\t\t}\n\t\t\n\t\tupdatedCells.forEach((_sheet, updatedCell) => {\n\t\t\tthis.model.sparklines.dependencies.getDependants(updatedCell.range).forEach(([cell, sheet]) => {\n\t\t\t\trecalculatedCells.set(cell, sheet);\n\t\t\t});\n\n\t\t\tthis.model.conditionalFormats.dependencies.getDependants(updatedCell.range).forEach(([cell, sheet]) => {\n\t\t\t\tthis.model.conditionalFormats.invalidateExtremes(cell);\n\t\t\t\tcell.invalidateStyle();\n\t\t\t\trecalculatedCells.set(cell, sheet);\n\t\t\t});\n\t\t});\n\n\t\treturn recalculatedCells;\n\t}\n\n}"]}
|
|
1
|
+
{"version":3,"file":"calculationModel.js","sourceRoot":"","sources":["../../src/model/calculationModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { CellModel, GridModel, Viewport, RowModel } from \"../model\";\nimport { CalculationContext, Formula, FormulaString, Tokenizer } from \"../calculations\";\nimport { ShiftOptions } from \"../types\";\nimport { DependencyModel } from \"./dependencyModel\";\n\n/**\n * cells being evaluated right now, shared by all models\n * so the references between sheets are covered as well\n */\nconst evaluationStack = new Set<CellModel>();\n\n/** error propagated through the evaluation stack to every cell of the reference chain */\nclass EvaluationStackError extends Error {\n\t/** @param origin cell where the propagation stops, the error propagates to the top of the stack when not set */\n\tconstructor(message: string, readonly origin?: CellModel) { super(message) }\n}\n\nfunction evaluationErrorHandler(error: unknown) {\n\tif (error instanceof EvaluationStackError) {\n\t\treturn error.message;\n\t} else if (error instanceof RangeError) {\n\t\tif (error.message == 'Maximum call stack size exceeded') {\n\t\t\treturn 'infinite loop';\n\t\t} else {\n\t\t\treturn error.message;\n\t\t}\n\t} else {\n\t\treturn error.toString();\n\t}\n}\n\nexport class CalculationModel extends DependencyModel {\n\n\tprivate _tokenizer = new Tokenizer();\n\tget tokenizer() { return this._tokenizer }\n\n\tprivate _formulas = new Map<string, Formula>();\n\tget formulas() { return this._formulas }\n\n\tprivate context: CalculationContext;\n\n\tconstructor(model: GridModel) {\n\t\tsuper(model, 'calculations');\n\t\tthis.context = new CalculationContext(model);\n\t}\n\n\tcreateFormula(cell: CellModel) {\n\t\tconst f = new Formula(cell.formula, this.tokenizer);\n\t\tthis._formulas.set(cell.address, f);\n\t\tif (cell.hasOwnFormula) cell.formula = f.createFormulaString(); // normalize formula string\n\t\tthis.createDependecies(cell);\n\t\treturn f;\n\t}\n\n\tcreateDependecies(cell: CellModel) {\n\t\tconst addr = cell.address;\n\t\tif (this.formulas.has(addr)) {\n\t\t\tconst f = this.formulas.get(addr);\n\t\t\tf.ranges.forEach(([_i, r, sheet]) => this._dependencies.add(addr, r.A1, sheet));\n\t\t\tf.cells.forEach(([_i, r, sheet]) => this._dependencies.add(addr, r.A1, sheet));\n\t\t\tf.variables.forEach(([_i, v]) => {\n\t\t\t\tconst c = this.model.getCellByName(v, cell.range);\n\t\t\t\tif (c) this._dependencies.add(addr, c.address, null)\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\n\trefreshFormula(cell: CellModel) {\n\t\tcell.refreshFormula();\n\t\tthis.formulas.delete(cell.address);\n\t\tthis.clearDependecies(cell);\n\t\treturn this;\n\t}\n\n\tupdateDependencies(cell: CellModel) {\n\t\tthis.clearDependecies(cell).getFormula(cell);\n\t\treturn this;\n\t}\n\n\tgetFormula(cell: CellModel) {\n\t\treturn this._formulas.has(cell.address) ? this._formulas.get(cell.address) : this.createFormula(cell);\n\t}\n\n\trefresh() {\n\t\tthis.dependencies.clear();\n\t\tthis._formulas.clear();\n\t}\n\n\tclearDependecies(cell: CellModel) {\n\t\tconst addr = cell.address;\n\t\tthis.dependencies.clearCellDependecies(addr);\n\t\tthis.formulas.delete(addr);\n\t\treturn this;\n\t}\n\n\tevaluateFormula(formula: Formula, cell: CellModel): unknown {\n\t\tthis.context.currentCell = cell;\n\t\treturn formula.fn(this.context, { cell, formula });\n\t}\n\n\tevaluateExpression(expression: FormulaString, cell?: CellModel): unknown {\n\t\tthis.context.currentCell = cell;\n\t\tconst formula = new Formula(expression, this.tokenizer);\n\t\treturn formula.fn(this.context, { cell, formula });\n\t}\n\t\n\tevaluate(cell: CellModel, noSpill?: boolean): unknown {\n\t\tif (!cell) return null;\n\t\tlet value = null;\n\t\tif (cell.hasFormula) {\n\t\t\tif (cell.error?.persistent) {\n\t\t\t\t// evaluated alone, the cell would take the cached values of the rest of the cycle (nesting chain)\n\t\t\t\treturn null;\n\t\t\t} else if (evaluationStack.has(cell)) {\n\t\t\t\tthrow new EvaluationStackError('circular reference', cell);\n\t\t\t} else if (evaluationStack.size >= this.model.options.maxCalculationDepth) {\n\t\t\t\tthrow new EvaluationStackError('maximum nesting depth exceeded');\n\t\t\t}\n\n\t\t\tconst formula = this.getFormula(cell);\n\t\t\tconst previousCell = this.context.currentCell;\n\t\t\tevaluationStack.add(cell);\n\t\t\ttry {\n\t\t\t\tcell.clearError();\n\t\t\t\tthis.context.currentCell = cell;\n\t\t\t\tvalue = formula.fn(this.context, { cell, formula });\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tif (!noSpill) this.model.spillValues({cell: cell, values: value}).range;\n\t\t\t\t\tvalue = value.length > 0 && value[0].length > 0 ? value[0][0] : null;\n\t\t\t\t\tif (noSpill) cell.value = value;\n\t\t\t\t} else {\n\t\t\t\t\tcell.value = value;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tcell.error = {message: evaluationErrorHandler(error)};\n\t\t\t\tif (error instanceof EvaluationStackError) {\n\t\t\t\t\tcell.error.persistent = true;\n\t\t\t\t\t// every cell of the cycle (nesting chain) gets the error, not just the deepest one\n\t\t\t\t\tif (error.origin ? error.origin !== cell : evaluationStack.size > 1) throw error;\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tevaluationStack.delete(cell);\n\t\t\t\tthis.context.currentCell = previousCell; // nested evaluation must not change the cell of the outer one\n\t\t\t}\n\t\t} else {\n\t\t\tvalue = cell.value;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tevaluateAll() {\n\t\tthis.model.rows.forEach(row => this.model.columns.forEach((_, c) => row.cell(c).evaluate()));\n\t}\n\n\tcalculateViewport(viewport: Viewport) {\n\t\tconst calculatedCells: CellModel[] = [];\n\t\tviewport.rows.forEach(row => row.cells.forEach(cell => {\n\t\t\tif (cell.hasFormula) {\n\t\t\t\tif (!cell.hasValue) {\n\t\t\t\t\tthis.evaluate(cell);\n\t\t\t\t\tif (cell.spillRange) {\n\t\t\t\t\t\tfor (const cell2 of this.model.getRangeIterator(cell.spillRange)) {\n\t\t\t\t\t\t\tcalculatedCells.push(cell2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcalculatedCells.push(cell);\n\t\t\t}\n\t\t}));\n\t\treturn calculatedCells;\n\t}\n\n\tshift(options: ShiftOptions) {\n\t\tthis.getFormulaCells().forEach(cell => {\n\t\t\tcell.formula = this.getFormula(cell).shift(options).createFormulaString(false);\n\t\t\tthis.updateDependencies(cell);\n\t\t});\n\n\t\tconst thisSheet = this.model.name;\n\t\tthis.dependencies.sheetDependants.forEach(sheet => {\n\t\t\tconst connectedModel = this.model.getConnectedModel(sheet);\n\t\t\tconnectedModel?.calculations.getFormulaCells().forEach(cell => {\n\t\t\t\tconst formula = connectedModel.calculations.getFormula(cell);\n\t\t\t\tif (formula.hasSheetReference(thisSheet)) {\n\t\t\t\t\tcell.formula = formula.shift(options).createFormulaString(false);\n\t\t\t\t\tconnectedModel.calculations.updateDependencies(cell);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tgetFormulaCells() {\n\t\tconst m = this.model;\n\t\tconst cells: CellModel[] = [];\n\t\tlet row: RowModel;\n\t\tconst rows = m.rows.length;\n\t\tconst columns = m.columns.length;\n\t\tfor (let r = 0; r < rows; r++) {\n\t\t\trow = m.rows[r];\n\t\t\tfor (let c = 0; c < columns; c++) {\n\t\t\t\tif (row.hasCellFormula(c)) cells.push(row.cell(c));\n\t\t\t}\n\t\t}\n\t\treturn cells;\n\t}\n\n\trenameSheet(oldName: string, newName: string) {\n\t\tlet renamed = false;\n\t\tthis.dependencies.renameSheet(oldName, newName);\n\t\tthis.getFormulaCells().forEach(cell => {\n\t\t\tconst f = this.getFormula(cell);\n\t\t\tif (f.renameSheet(oldName, newName)) {\n\t\t\t\tcell.formula = f.createFormulaString();\n\t\t\t\tthis.refreshFormula(cell);\n\t\t\t\trenamed = true;\n\t\t\t}\n\t\t});\n\t\treturn renamed;\n\t}\n\n\tinvalidateCellDependants(cell: CellModel) {\n\t\tconst cells: [CellModel, string?][] = [];\n\t\tthis.dependencies.getDependants(cell.range).forEach(([cell, sheet]) => {\n\t\t\tcells.push([cell, sheet]);\n\t\t\tcell.invalidateValue();\n\t\t});\n\t\treturn cells;\n\t}\n\n\tinvalidateDependants(cells: Iterable<CellModel>) {\n\t\tconst updatedCells = new Map<CellModel, string|null>();\n\t\tconst recalculatedCells = new Map<CellModel, string|null>();\n\t\tfor (const cell of cells) {\n\t\t\tthis.invalidateCellDependants(cell).forEach(([cell2, sheet]) => updatedCells.set(cell2, sheet));\n\t\t}\n\t\tupdatedCells.forEach((sheet, cell) => recalculatedCells.set(cell, sheet));\n\n\t\tfor (const cell of cells) {\n\t\t\tupdatedCells.set(cell, null);\n\t\t}\n\t\t\n\t\tupdatedCells.forEach((_sheet, updatedCell) => {\n\t\t\tthis.model.sparklines.dependencies.getDependants(updatedCell.range).forEach(([cell, sheet]) => {\n\t\t\t\trecalculatedCells.set(cell, sheet);\n\t\t\t});\n\n\t\t\tthis.model.conditionalFormats.dependencies.getDependants(updatedCell.range).forEach(([cell, sheet]) => {\n\t\t\t\tthis.model.conditionalFormats.invalidateExtremes(cell);\n\t\t\t\tcell.invalidateStyle();\n\t\t\t\trecalculatedCells.set(cell, sheet);\n\t\t\t});\n\t\t});\n\n\t\treturn recalculatedCells;\n\t}\n\n}"]}
|
|
@@ -32,6 +32,8 @@ export type CellSource = {
|
|
|
32
32
|
export type CellError = {
|
|
33
33
|
message: string;
|
|
34
34
|
handled?: boolean;
|
|
35
|
+
/** the error stays until the cell value is invalidated, the cell is not evaluated meanwhile */
|
|
36
|
+
persistent?: boolean;
|
|
35
37
|
};
|
|
36
38
|
export declare class CellModel extends ElementModel {
|
|
37
39
|
_content: HTMLDivElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cellModel.d.ts","sourceRoot":"","sources":["../../src/model/cellModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAS,OAAO,EAAS,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE1F,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAkB,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,uCAAuC;AACvC,MAAM,MAAM,UAAU,GAAG;IACxB,gBAAgB;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,gBAAgB;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,iBAAiB;IACjB,CAAC,CAAC,EAAE,OAAO,CAAC;IACZ,yBAAyB;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oBAAoB;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,gBAAgB;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAC,OAAO,CAAC;IACzB,cAAc;IACd,OAAO,CAAC,EAAE,aAAa,CAAC;CACxB,GAAG,aAAa,CAAC;AAuDlB,MAAM,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"cellModel.d.ts","sourceRoot":"","sources":["../../src/model/cellModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cellModel.js","sourceRoot":"","sources":["../../src/model/cellModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComponentAdapter, dates, numbers, utils, ValueFormatter } from \"@omegagrid/core\";\nimport { hasQuotePrefix, isFormula, prefixFormula, stripQuotePrefix } from \"../calculations/formula\";\nimport { CellRange } from \"../common\";\n// import { cellTypeRendererMap } from \"../renderers\";\nimport { ColumnModel } from \"./columnModel\";\nimport { ElementModel, ElementSource } from \"./elementModel\";\nimport { GridModel } from \"./gridModel\";\nimport { RowModel } from \"./rowModel\";\nimport { Style, StylePropertyKey } from \"./style\";\nimport { CSSStyle, styleToCSStyle } from \"./cssStyle\";\nimport { CellSerializationOptions, CellType } from \"../types\";\nimport { CommentSource } from \"./commentModel\";\nimport { validateValue } from \"./validations\";\n\n/** Source object type for grid cell */\nexport type CellSource = {\n\t/** row index */\n\tr: number;\n\t/** col index */\n\tc: number;\n\t/** cell value */\n\tv?: unknown;\n\t/** cell display value */\n\tdv?: string;\n\t/** cell column span */\n\tcs?: number;\n\t/** cell row span */\n\trs?: number;\n\t/** hyperlink */\n\thl?: string;\n\t/** cell tooltip content */\n\ttooltip?: string|unknown;\n\t/** comment */\n\tcomment?: CommentSource;\n} & ElementSource;\n\nconst cellValueHandler: Record<string, (v: unknown, cell: CellModel) => unknown> = {\n\t['n']: (v) => {\n\t\tconst value = utils.isString(v) ? parseFloat((v as string).replace(',', '.')) : v;\n\t\treturn Number.isNaN(value) ? v : value;\n\t},\n\t['t']: (v) => v,\n\t['d']: (v, cell) => {\n\t\tif (v == null || v === '') return null;\n\t\tif (utils.isString(v)) {\n\t\t\ttry {\n\t\t\t\treturn utils.isNumericString(v as string)\n\t\t\t\t\t? utils.strToNum(v as string)\n\t\t\t\t\t: dates.dateToSerialDate(dates.parse(v as string, cell.model.options.formatLocale));\n\t\t\t} catch (error) {\n\t\t\t\tcell.model.logger.error(`Invalid date value in cell ${cell.address}: ${v}`);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tif (v instanceof Date) return dates.dateToSerialDate(v);\n\t\treturn v;\n\t},\n\t// TODO: unfinnished implementation of time and datetime\n\t['tm']: (v) => utils.isString(v) ? new Date(v as string) : v,\n\t['dt']: (v) => utils.isString(v) ? new Date(v as string) : v,\n\t['b']: (v) => !!v && v !== '0' && v.toString().toLowerCase() !== 'false',\n\t['s']: (v) => v,\n\t['m']: (v) => v,\n\t['g']: (v) => {\n\t\tif (v == null || v === '') return null;\n\t\tconst f = parseFloat((v as string).toString().replace(',', '.'));\n\t\treturn isNaN(f) ? v : f;\n\t},\n\t['a']: (v) => utils.isString(v) && v !== '' ? JSON.parse(v as string) : v,\n\t['h']: (v) => v,\n};\n\n/** cell types whose values are entered as a free text, only those accept the quote prefix */\nconst quotePrefixTypes: CellType[] = ['t', 'n', 'g'];\n\nconst dropdownFormatters = new Map<{k: string, v: string}[], ValueFormatter<string>>();\nconst getDropdownFormatter = (content?: { k: string, v: string }[]) => {\n\tcontent = content || null;\n\tif (!dropdownFormatters.has(content)) {\n\t\tif (content) {\n\t\t\tconst items = content.reduce((map, e) => map.set(e.k, e.v), new Map<string, string>());\n\t\t\tdropdownFormatters.set(content, (k: string) => items.has(k) ? items.get(k) : k);\n\t\t} else {\n\t\t\tdropdownFormatters.set(content, (k: string) => k);\n\t\t}\n\t}\n\treturn dropdownFormatters.get(content);\n};\n\nexport type CellError = {\n\tmessage: string;\n\thandled?: boolean;\n}\n\nexport class CellModel extends ElementModel {\n\n\tpublic _content: HTMLDivElement;\n\n\tprivate _tooltip: string|unknown;\n\tget tooltip() { return this._tooltip }\n\tset tooltip(v: string|unknown) { this._tooltip = v }\n\tget hasTooltip() { return this._tooltip != null }\n\n\tget merge() { return this.model.merges.mergedCells.get(this.address) }\n\n\tprivate _row: RowModel;\n\tget row() { return this._row }\n\tset row(v: RowModel) { this._row = v }\n\tget r() { return this._row.index}\n\n\tprivate _column: ColumnModel;\n\tget column() { return this._column }\n\tset column(v: ColumnModel) { this._column = v }\n\tget c() { return this._column.index }\n\n\t/** tells if the entered value of the cell can be prefixed by the quote prefix */\n\tget quotePrefixable() { return quotePrefixTypes.includes(this.type) }\n\n\t/**\n\t * tells if the cell value is a quote prefixed plain text,\n\t * the prefix stays a part of the value, the display value holds the value without it\n\t */\n\tget quotePrefix() { return this.quotePrefixable && !this.hasFormula && hasQuotePrefix(this._value) }\n\n\t/** cell value without the quote prefix, used where the value is compared as a text (sorting, filtering) */\n\tget plainValue() { return this.quotePrefix ? stripQuotePrefix(this._value) : this.value }\n\n\tprivate _value: unknown;\n\tprivate _evaluated = true;\n\tget hasValue() { return this._value != null }\n\tget value() {\n\t\tif (!this._evaluated) this.evaluate();\n\t\treturn this._value\n\t}\n\tset value(v: unknown) {\n\t\tif (v && this.model.formulasEnabled && isFormula(v.toString())) {\n\t\t\tthis._value = undefined;\n\t\t\tthis.formula = v as string;\n\t\t} else {\n\t\t\tlet value = this.quotePrefixable && hasQuotePrefix(v) ? v : cellValueHandler[this.type](v, this);\n\n\t\t\tif (!validateValue(this, value)) value = undefined;\n\n\t\t\tif (value !== this._value) {\n\t\t\t\tthis._value = value;\n\t\t\t\tthis._displayValue = undefined;\n\t\t\t}\n\n\t\t\tif (this.row.data && this.column.data) {\n\t\t\t\tthis.row.data[this.column.data] = this._value;\n\t\t\t}\n\t\t}\n\t}\n\tevaluate() {\n\t\tthis._value = cellValueHandler[this.type](this.model.calculations.evaluate(this), this);\n\t\tthis._evaluated = true;\n\t\treturn this._value;\n\t}\n\n\tget value2() { return this.hasFormula ? prefixFormula(this.formula) : this.value }\n\n\tprivate _displayValue: string;\n\tget hasDisplayValue() { return this._displayValue != null }\n\tget displayValue() { return this._displayValue }\n\tset displayValue(v: string) { this._displayValue = v }\n\n\t/* tells if cell has type that prefers usage of display value */\n\tget prefersDisplayValue() { return ['s', 'm'].includes(this.type) }\n\n\tprivate _error: CellError;\n\tget error() { return this._error }\n\tset error(v: CellError) { this._error = v }\n\tget hasError() { return !!this._error }\n\tclearError() { this._error = undefined }\n\n\tprivate _spillRange: CellRange;\n\tprivate _prevSpillRange: CellRange;\n\tget spillRange() { return this._spillRange }\n\tget prevSpillRange() { return this._prevSpillRange }\n\tset spillRange(v: CellRange) {\n\t\tif (this._spillRange && (!v || !this._spillRange.equals(v))) {\n\t\t\tthis._prevSpillRange = this._spillRange;\n\t\t}\n\t\tthis._spillRange = v;\n\t}\n\tget isSpillSource() { return this._spillRange != null }\n\n\tprivate _spillSource: CellModel;\n\tget spillSource() { return this._spillSource }\n\tget isSpilled() { return this._spillSource != null }\n\tspillValue(v: unknown, source?: CellModel) {\n\t\tthis.value = v;\n\t\tthis._spillSource = source;\n\t}\n\tclearSpilledValue() {\n\t\tthis._spillSource = undefined;\n\t\tthis._value = undefined;\n\t}\n\n\tprivate _sparkline: boolean = null;\n\tget hasSparkline() {\n\t\treturn this._sparkline === null ? (this._sparkline = this.model.sparklines.has(this.address)) : this._sparkline;\n\t}\n\n\tprivate _hasComment?: boolean = null;\n\tget hasComment() {\n\t\treturn this._hasComment === null ? (\n\t\t\tthis._hasComment = (this.model.comments.get(this.address) ?? []).length > 0\n\t\t) : this._hasComment;\n\t}\n\tget comments() { return this.model.comments.get(this.address) }\n\n\tprivate _composedStyle: Style;\n\tprivate _cssStyle: CSSStyle;\n\tprivate _hasStyle?: boolean = null;\n\n\tget valueFormatter(): ValueFormatter<unknown> {\n\t\tconst formatter = super.valueFormatter ?? this.row.valueFormatter ?? this.column.valueFormatter;\n\t\tif (formatter) return formatter;\n\n\t\tconst type = this.type;\n\t\tconst format = this.format;\n\t\tconst { formatLocale, fixNumberFormat } = this.model.options;\n\t\tconst v = this.value;\n\n\t\tif (v == null || v === '') { // TODO: maybe allow DropdownFormatter for v === ''\n\t\t\treturn null;\n\t\t} else if (type == 'n') {\n\t\t\tif (format != null) return numbers.getNumberFormatter(formatLocale, format, fixNumberFormat);\n\t\t\telse return this.model.options.numberFormatter;\n\t\t} else if (type == 'g') {\n\t\t\tif (format != null) return numbers.getNumberFormatter(formatLocale, format, fixNumberFormat);\n\t\t\telse if (utils.isNumber(v)) return this.model.options.numberFormatter;\n\t\t} else if (type == 't') {\n\t\t\treturn format == null ? null : numbers.getNumberFormatter(formatLocale, format, false);\n\t\t} else if (type == 'd') {\n\t\t\treturn format ? dates.getDateFormatter(formatLocale, format) : this.model.options.dateFormatter;\n\t\t} else if (type == 's' && this.editorContent) {\n\t\t\treturn getDropdownFormatter(this.editorContent as {k: string, v: string}[]);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget formattedValue(): string {\n\t\tif (this.value == null) return '';\n\t\tif (this.hasDisplayValue) return this.displayValue;\n\t\tif (this.quotePrefix) return stripQuotePrefix(this.value) as string;\n\t\treturn this.valueFormatter ? this.valueFormatter(this.value) : this.value.toString();\n\t}\n\n\tprivate get elm1() { return this.row.priority >= this.column.priority ? this.row : this.column }\n\tprivate get elm2() { return this.row.priority < this.column.priority ? this.row : this.column }\n\n\tget clickable() { return super.clickable ?? this.elm1.clickable ?? this.elm2.clickable }\n\tget type() { return super.type ?? this.elm1.type ?? this.elm2.type ?? 'g' }\n\tset type(value: CellType) { this._type = value }\n\tget editorContent() { return super.editorContent ?? this.elm1.editorContent ?? this.elm2.editorContent ?? null }\n\tget adapter() { return super.adapter ?? this.elm1.adapter ?? this.elm2.adapter }\n\tset adapter(value: ComponentAdapter) { this._adapter = value }\n\n\tget address() { return this.column.address + this.row.address }\n\tget range() { return CellRange.fromA1(this.address) }\n\tget validation() { return super.validation ?? this.elm1.validation ?? this.elm2.validation ?? this.model.options.cellValidation }\n\tget editable() { return super.editable ?? this.elm1.editable ?? this.elm2.editable ?? this.model.options.editable }\n\tset editable(v: boolean) { this._editable = v }\n\tget commentable() { return super.commentable ?? this.elm1.commentable ?? this.elm2.commentable ?? this.model.options.commentable }\n\tget renderer() { return super.renderer ?? this.elm1.renderer ?? this.elm2.renderer }\n\tget afterRenderer() { return super.afterRenderer ?? this.elm1.afterRenderer ?? this.elm2.afterRenderer ?? this.model.options.afterRenderer }\n\tget commentRenderer() { return super.commentRenderer ?? this.elm1.commentRenderer ?? this.elm2.commentRenderer ?? this.model.options.comments.renderer }\n\tget editorFactory() { return super.editorFactory ?? this.elm1.editorFactory ?? this.elm2.editorFactory }\n\tget format() { return super.format ?? this.elm1.format ?? this.elm2.format }\n\tset format(v: numbers.NumberFormatString) { super.format = v }\n\n\tprivate _hyperlink : string;\n\tget hyperlink() { return this._hyperlink }\n\tset hyperlink(v: string) { this._hyperlink = v }\n\n\tprivate _hasFormula: boolean;\n\n\tget hasOwnFormula() { return !!this._formula }\n\tget hasFormula() {\n\t\tif (this._hasFormula == null) this._hasFormula = !!this.formula;\n\t\treturn this._hasFormula;\n\t}\n\tget formula() { return this._formula ?? this.elm1.formula ?? this.elm2.formula }\n\tset formula(v: string) {\n\t\tsuper.formula = v;\n\t\tthis.refreshFormula();\n\t}\n\n\tgetProperty(key: string) { return super.getProperty(key) ?? this.elm1.getProperty(key) ?? this.elm2.getProperty(key) }\n\n\tinvalidateValue() {\n\t\tif (this.hasFormula) {\n\t\t\tthis._value = undefined;\n\t\t\tthis._evaluated = false;\n\t\t} else {\n\t\t\tthis._evaluated = true;\n\t\t}\n\t\tthis.clearError();\n\t}\n\n\trefreshFormula() {\n\t\tthis._hasFormula = null;\n\t\tthis.invalidateValue();\n\t}\n\n\tclearFormula() {\n\t\tthis._formula = null;\n\t\tthis._hasFormula = false;\n\t\tthis._evaluated = true;\n\t}\n\n\tconstructor(model: GridModel, source: CellSource) {\n\t\tsuper(model);\n\t\tthis.row = model.rows[source.r];\n\t\tthis.column = model.columns[source.c];\n\t\tthis.populate(source);\n\t}\n\n\tpopulate(source: CellSource) {\n\t\tsuper.populate(source);\n\t\tthis._tooltip = source.tooltip;\n\t\tthis._hyperlink = source.hl;\n\t\tif (this._formula != null && this._formula !== '') this._evaluated = false;\n\t\telse if (source.v != null) this.value = source.v; // load static value only if no formula is present\n\t\tthis._displayValue = source.dv; // display value must be set after value\n\t}\n\n\tupdate(source: Partial<CellSource>) {\n\t\tconst updatedProps = super.update(source) as CellSource;\n\t\tif ('tooltip' in source) { updatedProps.tooltip = this._tooltip; this._tooltip = source.tooltip; }\n\t\tif ('hl' in source) { updatedProps.hl = this._hyperlink; this._hyperlink = source.hl; }\n\t\tif ('f' in source && this.model.formulasEnabled) { this._evaluated = false; }\n\t\telse if ('v' in source) { updatedProps.v = this.value; this.value = source.v; }\n\t\tif ('dv' in source) { updatedProps.dv = this._displayValue; this._displayValue = source.dv; }\n\t\treturn updatedProps;\n\t}\n\n\tgetSourceData(options?: CellSerializationOptions) : CellSource {\n\t\tconst data = super.getSourceData() as CellSource;\n\n\t\tif (this.merge) {\n\t\t\tdata.cs = this.merge.cs;\n\t\t\tdata.rs = this.merge.rs;\n\t\t}\n\n\t\tif (this.value != null) data.v = this.value;\n\t\tif (this.hasTooltip) data.tooltip = this._tooltip;\n\t\tif (this._hyperlink) data.hl = this._hyperlink;\n\n\t\tif (options) {\n\t\t\tif (options.displayValue && this.hasDisplayValue) data.dv = this._displayValue;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tprivate createComposedStyle(columnStyle?: Style|number, rowStyle?: Style|number, extraStyle?: Style) {\n\t\tconst styles: (number|Style)[] = [];\n\n\t\tcolumnStyle = columnStyle || this.column.style;\n\t\trowStyle = rowStyle || this.row.style;\n\t\tif (columnStyle != null && rowStyle != null) {\n\t\t\tif (this.column.priority > this.row.priority) {\n\t\t\t\tstyles.push(rowStyle, columnStyle);\n\t\t\t} else {\n\t\t\t\tstyles.push(columnStyle, rowStyle);\n\t\t\t}\n\t\t}\n\t\telse if (columnStyle != null) styles.push(columnStyle);\n\t\telse if (rowStyle != null) styles.push(rowStyle);\n\n\t\tif (this.style != null) styles.push(this.style);\n\t\tif (extraStyle != null) styles.push(extraStyle);\n\n\t\treturn styles.length > 0 ? this.model.styles.merge(...styles) : null;\n\t}\n\n\tget composedStyle() : Style {\n\t\tif (this._hasStyle === null) {\n\t\t\tconst s = this.createComposedStyle(null, null, this.model.conditionalFormats.evaluate(this));\n\t\t\tthis._hasStyle = s != null;\n\t\t\tthis._composedStyle = s;\n\t\t}\n\t\treturn this._composedStyle;\n\t}\n\n\tget calculatedIndent(): number|null {\n\t\tconst s = this.composedStyle;\n\t\tif (s?.alignment?.indent) return s.alignment.indent;\n\n\t\t// calculates cell text indent based on row level\n\t\tif (this.column.levelIndent && this.row.level > 0) {\n\t\t\treturn this.row.level * this.model.options.levelIndentFactor;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget cssStyle() : CSSStyle {\n\t\tif (this._hasStyle === false) return null;\n\t\tif (!this._cssStyle) {\n\t\t\tconst composedStyle = this.composedStyle;\n\t\t\tif (composedStyle) {\n\t\t\t\tthis._cssStyle = styleToCSStyle(composedStyle);\n\t\t\t}\n\t\t}\n\t\treturn this._cssStyle;\n\t}\n\n\tinvalidateStyle() {\n\t\tthis._hasComment = null;\n\t\tthis._hasStyle = null;\n\t\tthis._composedStyle = null;\n\t\tthis._cssStyle = null;\n\t\tthis._sparkline = null;\n\t}\n\n\tsetStyleProperties(props: Record<StylePropertyKey, unknown>) {\n\t\tsuper.setStyleProperties(props);\n\t\tthis.invalidateStyle();\n\t}\n\n\tremoveStyleProperties(props: string[]) {\n\t\tsuper.removeStyleProperties(props);\n\t\tthis.invalidateStyle();\n\t}\n\n\tpreviewStyleProperties(\n\t\tprops: Record<StylePropertyKey, unknown>,\n\t\ttype: 'cell'|'column'|'row' = 'cell'\n\t) {\n\t\tconst composedStyle = Object.assign({}, this.createComposedStyle(type == 'column' ? props : null, type == 'row' ? props : null) ?? {});\n\n\t\tif (type == 'cell') {\n\t\t\tfor (const k in props) composedStyle[k] = props[k];\n\t\t}\n\t\tthis._hasStyle = true;\n\t\tthis._cssStyle = styleToCSStyle(composedStyle);\n\t}\n\n\tvalidate() {\n\t\tif (!this.validation) return true;\n\t\treturn validateValue(this, this.value);\n\t}\n\n\ttoString() { return this.address }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"cellModel.js","sourceRoot":"","sources":["../../src/model/cellModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComponentAdapter, dates, numbers, utils, ValueFormatter } from \"@omegagrid/core\";\nimport { hasQuotePrefix, isFormula, prefixFormula, stripQuotePrefix } from \"../calculations/formula\";\nimport { CellRange } from \"../common\";\n// import { cellTypeRendererMap } from \"../renderers\";\nimport { ColumnModel } from \"./columnModel\";\nimport { ElementModel, ElementSource } from \"./elementModel\";\nimport { GridModel } from \"./gridModel\";\nimport { RowModel } from \"./rowModel\";\nimport { Style, StylePropertyKey } from \"./style\";\nimport { CSSStyle, styleToCSStyle } from \"./cssStyle\";\nimport { CellSerializationOptions, CellType } from \"../types\";\nimport { CommentSource } from \"./commentModel\";\nimport { validateValue } from \"./validations\";\n\n/** Source object type for grid cell */\nexport type CellSource = {\n\t/** row index */\n\tr: number;\n\t/** col index */\n\tc: number;\n\t/** cell value */\n\tv?: unknown;\n\t/** cell display value */\n\tdv?: string;\n\t/** cell column span */\n\tcs?: number;\n\t/** cell row span */\n\trs?: number;\n\t/** hyperlink */\n\thl?: string;\n\t/** cell tooltip content */\n\ttooltip?: string|unknown;\n\t/** comment */\n\tcomment?: CommentSource;\n} & ElementSource;\n\nconst cellValueHandler: Record<string, (v: unknown, cell: CellModel) => unknown> = {\n\t['n']: (v) => {\n\t\tconst value = utils.isString(v) ? parseFloat((v as string).replace(',', '.')) : v;\n\t\treturn Number.isNaN(value) ? v : value;\n\t},\n\t['t']: (v) => v,\n\t['d']: (v, cell) => {\n\t\tif (v == null || v === '') return null;\n\t\tif (utils.isString(v)) {\n\t\t\ttry {\n\t\t\t\treturn utils.isNumericString(v as string)\n\t\t\t\t\t? utils.strToNum(v as string)\n\t\t\t\t\t: dates.dateToSerialDate(dates.parse(v as string, cell.model.options.formatLocale));\n\t\t\t} catch (error) {\n\t\t\t\tcell.model.logger.error(`Invalid date value in cell ${cell.address}: ${v}`);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tif (v instanceof Date) return dates.dateToSerialDate(v);\n\t\treturn v;\n\t},\n\t// TODO: unfinnished implementation of time and datetime\n\t['tm']: (v) => utils.isString(v) ? new Date(v as string) : v,\n\t['dt']: (v) => utils.isString(v) ? new Date(v as string) : v,\n\t['b']: (v) => !!v && v !== '0' && v.toString().toLowerCase() !== 'false',\n\t['s']: (v) => v,\n\t['m']: (v) => v,\n\t['g']: (v) => {\n\t\tif (v == null || v === '') return null;\n\t\tconst f = parseFloat((v as string).toString().replace(',', '.'));\n\t\treturn isNaN(f) ? v : f;\n\t},\n\t['a']: (v) => utils.isString(v) && v !== '' ? JSON.parse(v as string) : v,\n\t['h']: (v) => v,\n};\n\n/** cell types whose values are entered as a free text, only those accept the quote prefix */\nconst quotePrefixTypes: CellType[] = ['t', 'n', 'g'];\n\nconst dropdownFormatters = new Map<{k: string, v: string}[], ValueFormatter<string>>();\nconst getDropdownFormatter = (content?: { k: string, v: string }[]) => {\n\tcontent = content || null;\n\tif (!dropdownFormatters.has(content)) {\n\t\tif (content) {\n\t\t\tconst items = content.reduce((map, e) => map.set(e.k, e.v), new Map<string, string>());\n\t\t\tdropdownFormatters.set(content, (k: string) => items.has(k) ? items.get(k) : k);\n\t\t} else {\n\t\t\tdropdownFormatters.set(content, (k: string) => k);\n\t\t}\n\t}\n\treturn dropdownFormatters.get(content);\n};\n\nexport type CellError = {\n\tmessage: string;\n\thandled?: boolean;\n\t/** the error stays until the cell value is invalidated, the cell is not evaluated meanwhile */\n\tpersistent?: boolean;\n}\n\nexport class CellModel extends ElementModel {\n\n\tpublic _content: HTMLDivElement;\n\n\tprivate _tooltip: string|unknown;\n\tget tooltip() { return this._tooltip }\n\tset tooltip(v: string|unknown) { this._tooltip = v }\n\tget hasTooltip() { return this._tooltip != null }\n\n\tget merge() { return this.model.merges.mergedCells.get(this.address) }\n\n\tprivate _row: RowModel;\n\tget row() { return this._row }\n\tset row(v: RowModel) { this._row = v }\n\tget r() { return this._row.index}\n\n\tprivate _column: ColumnModel;\n\tget column() { return this._column }\n\tset column(v: ColumnModel) { this._column = v }\n\tget c() { return this._column.index }\n\n\t/** tells if the entered value of the cell can be prefixed by the quote prefix */\n\tget quotePrefixable() { return quotePrefixTypes.includes(this.type) }\n\n\t/**\n\t * tells if the cell value is a quote prefixed plain text,\n\t * the prefix stays a part of the value, the display value holds the value without it\n\t */\n\tget quotePrefix() { return this.quotePrefixable && !this.hasFormula && hasQuotePrefix(this._value) }\n\n\t/** cell value without the quote prefix, used where the value is compared as a text (sorting, filtering) */\n\tget plainValue() { return this.quotePrefix ? stripQuotePrefix(this._value) : this.value }\n\n\tprivate _value: unknown;\n\tprivate _evaluated = true;\n\tget hasValue() { return this._value != null }\n\tget value() {\n\t\tif (!this._evaluated) this.evaluate();\n\t\treturn this._value\n\t}\n\tset value(v: unknown) {\n\t\tif (v && this.model.formulasEnabled && isFormula(v.toString())) {\n\t\t\tthis._value = undefined;\n\t\t\tthis.formula = v as string;\n\t\t} else {\n\t\t\tlet value = this.quotePrefixable && hasQuotePrefix(v) ? v : cellValueHandler[this.type](v, this);\n\n\t\t\tif (!validateValue(this, value)) value = undefined;\n\n\t\t\tif (value !== this._value) {\n\t\t\t\tthis._value = value;\n\t\t\t\tthis._displayValue = undefined;\n\t\t\t}\n\n\t\t\tif (this.row.data && this.column.data) {\n\t\t\t\tthis.row.data[this.column.data] = this._value;\n\t\t\t}\n\t\t}\n\t}\n\tevaluate() {\n\t\tthis._value = cellValueHandler[this.type](this.model.calculations.evaluate(this), this);\n\t\tthis._evaluated = true;\n\t\treturn this._value;\n\t}\n\n\tget value2() { return this.hasFormula ? prefixFormula(this.formula) : this.value }\n\n\tprivate _displayValue: string;\n\tget hasDisplayValue() { return this._displayValue != null }\n\tget displayValue() { return this._displayValue }\n\tset displayValue(v: string) { this._displayValue = v }\n\n\t/* tells if cell has type that prefers usage of display value */\n\tget prefersDisplayValue() { return ['s', 'm'].includes(this.type) }\n\n\tprivate _error: CellError;\n\tget error() { return this._error }\n\tset error(v: CellError) { this._error = v }\n\tget hasError() { return !!this._error }\n\tclearError() { this._error = undefined }\n\n\tprivate _spillRange: CellRange;\n\tprivate _prevSpillRange: CellRange;\n\tget spillRange() { return this._spillRange }\n\tget prevSpillRange() { return this._prevSpillRange }\n\tset spillRange(v: CellRange) {\n\t\tif (this._spillRange && (!v || !this._spillRange.equals(v))) {\n\t\t\tthis._prevSpillRange = this._spillRange;\n\t\t}\n\t\tthis._spillRange = v;\n\t}\n\tget isSpillSource() { return this._spillRange != null }\n\n\tprivate _spillSource: CellModel;\n\tget spillSource() { return this._spillSource }\n\tget isSpilled() { return this._spillSource != null }\n\tspillValue(v: unknown, source?: CellModel) {\n\t\tthis.value = v;\n\t\tthis._spillSource = source;\n\t}\n\tclearSpilledValue() {\n\t\tthis._spillSource = undefined;\n\t\tthis._value = undefined;\n\t}\n\n\tprivate _sparkline: boolean = null;\n\tget hasSparkline() {\n\t\treturn this._sparkline === null ? (this._sparkline = this.model.sparklines.has(this.address)) : this._sparkline;\n\t}\n\n\tprivate _hasComment?: boolean = null;\n\tget hasComment() {\n\t\treturn this._hasComment === null ? (\n\t\t\tthis._hasComment = (this.model.comments.get(this.address) ?? []).length > 0\n\t\t) : this._hasComment;\n\t}\n\tget comments() { return this.model.comments.get(this.address) }\n\n\tprivate _composedStyle: Style;\n\tprivate _cssStyle: CSSStyle;\n\tprivate _hasStyle?: boolean = null;\n\n\tget valueFormatter(): ValueFormatter<unknown> {\n\t\tconst formatter = super.valueFormatter ?? this.row.valueFormatter ?? this.column.valueFormatter;\n\t\tif (formatter) return formatter;\n\n\t\tconst type = this.type;\n\t\tconst format = this.format;\n\t\tconst { formatLocale, fixNumberFormat } = this.model.options;\n\t\tconst v = this.value;\n\n\t\tif (v == null || v === '') { // TODO: maybe allow DropdownFormatter for v === ''\n\t\t\treturn null;\n\t\t} else if (type == 'n') {\n\t\t\tif (format != null) return numbers.getNumberFormatter(formatLocale, format, fixNumberFormat);\n\t\t\telse return this.model.options.numberFormatter;\n\t\t} else if (type == 'g') {\n\t\t\tif (format != null) return numbers.getNumberFormatter(formatLocale, format, fixNumberFormat);\n\t\t\telse if (utils.isNumber(v)) return this.model.options.numberFormatter;\n\t\t} else if (type == 't') {\n\t\t\treturn format == null ? null : numbers.getNumberFormatter(formatLocale, format, false);\n\t\t} else if (type == 'd') {\n\t\t\treturn format ? dates.getDateFormatter(formatLocale, format) : this.model.options.dateFormatter;\n\t\t} else if (type == 's' && this.editorContent) {\n\t\t\treturn getDropdownFormatter(this.editorContent as {k: string, v: string}[]);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget formattedValue(): string {\n\t\tif (this.value == null) return '';\n\t\tif (this.hasDisplayValue) return this.displayValue;\n\t\tif (this.quotePrefix) return stripQuotePrefix(this.value) as string;\n\t\treturn this.valueFormatter ? this.valueFormatter(this.value) : this.value.toString();\n\t}\n\n\tprivate get elm1() { return this.row.priority >= this.column.priority ? this.row : this.column }\n\tprivate get elm2() { return this.row.priority < this.column.priority ? this.row : this.column }\n\n\tget clickable() { return super.clickable ?? this.elm1.clickable ?? this.elm2.clickable }\n\tget type() { return super.type ?? this.elm1.type ?? this.elm2.type ?? 'g' }\n\tset type(value: CellType) { this._type = value }\n\tget editorContent() { return super.editorContent ?? this.elm1.editorContent ?? this.elm2.editorContent ?? null }\n\tget adapter() { return super.adapter ?? this.elm1.adapter ?? this.elm2.adapter }\n\tset adapter(value: ComponentAdapter) { this._adapter = value }\n\n\tget address() { return this.column.address + this.row.address }\n\tget range() { return CellRange.fromA1(this.address) }\n\tget validation() { return super.validation ?? this.elm1.validation ?? this.elm2.validation ?? this.model.options.cellValidation }\n\tget editable() { return super.editable ?? this.elm1.editable ?? this.elm2.editable ?? this.model.options.editable }\n\tset editable(v: boolean) { this._editable = v }\n\tget commentable() { return super.commentable ?? this.elm1.commentable ?? this.elm2.commentable ?? this.model.options.commentable }\n\tget renderer() { return super.renderer ?? this.elm1.renderer ?? this.elm2.renderer }\n\tget afterRenderer() { return super.afterRenderer ?? this.elm1.afterRenderer ?? this.elm2.afterRenderer ?? this.model.options.afterRenderer }\n\tget commentRenderer() { return super.commentRenderer ?? this.elm1.commentRenderer ?? this.elm2.commentRenderer ?? this.model.options.comments.renderer }\n\tget editorFactory() { return super.editorFactory ?? this.elm1.editorFactory ?? this.elm2.editorFactory }\n\tget format() { return super.format ?? this.elm1.format ?? this.elm2.format }\n\tset format(v: numbers.NumberFormatString) { super.format = v }\n\n\tprivate _hyperlink : string;\n\tget hyperlink() { return this._hyperlink }\n\tset hyperlink(v: string) { this._hyperlink = v }\n\n\tprivate _hasFormula: boolean;\n\n\tget hasOwnFormula() { return !!this._formula }\n\tget hasFormula() {\n\t\tif (this._hasFormula == null) this._hasFormula = !!this.formula;\n\t\treturn this._hasFormula;\n\t}\n\tget formula() { return this._formula ?? this.elm1.formula ?? this.elm2.formula }\n\tset formula(v: string) {\n\t\tsuper.formula = v;\n\t\tthis.refreshFormula();\n\t}\n\n\tgetProperty(key: string) { return super.getProperty(key) ?? this.elm1.getProperty(key) ?? this.elm2.getProperty(key) }\n\n\tinvalidateValue() {\n\t\tif (this.hasFormula) {\n\t\t\tthis._value = undefined;\n\t\t\tthis._evaluated = false;\n\t\t} else {\n\t\t\tthis._evaluated = true;\n\t\t}\n\t\tthis.clearError();\n\t}\n\n\trefreshFormula() {\n\t\tthis._hasFormula = null;\n\t\tthis.invalidateValue();\n\t}\n\n\tclearFormula() {\n\t\tthis._formula = null;\n\t\tthis._hasFormula = false;\n\t\tthis._evaluated = true;\n\t}\n\n\tconstructor(model: GridModel, source: CellSource) {\n\t\tsuper(model);\n\t\tthis.row = model.rows[source.r];\n\t\tthis.column = model.columns[source.c];\n\t\tthis.populate(source);\n\t}\n\n\tpopulate(source: CellSource) {\n\t\tsuper.populate(source);\n\t\tthis._tooltip = source.tooltip;\n\t\tthis._hyperlink = source.hl;\n\t\tif (this._formula != null && this._formula !== '') this._evaluated = false;\n\t\telse if (source.v != null) this.value = source.v; // load static value only if no formula is present\n\t\tthis._displayValue = source.dv; // display value must be set after value\n\t}\n\n\tupdate(source: Partial<CellSource>) {\n\t\tconst updatedProps = super.update(source) as CellSource;\n\t\tif ('tooltip' in source) { updatedProps.tooltip = this._tooltip; this._tooltip = source.tooltip; }\n\t\tif ('hl' in source) { updatedProps.hl = this._hyperlink; this._hyperlink = source.hl; }\n\t\tif ('f' in source && this.model.formulasEnabled) { this._evaluated = false; }\n\t\telse if ('v' in source) { updatedProps.v = this.value; this.value = source.v; }\n\t\tif ('dv' in source) { updatedProps.dv = this._displayValue; this._displayValue = source.dv; }\n\t\treturn updatedProps;\n\t}\n\n\tgetSourceData(options?: CellSerializationOptions) : CellSource {\n\t\tconst data = super.getSourceData() as CellSource;\n\n\t\tif (this.merge) {\n\t\t\tdata.cs = this.merge.cs;\n\t\t\tdata.rs = this.merge.rs;\n\t\t}\n\n\t\tif (this.value != null) data.v = this.value;\n\t\tif (this.hasTooltip) data.tooltip = this._tooltip;\n\t\tif (this._hyperlink) data.hl = this._hyperlink;\n\n\t\tif (options) {\n\t\t\tif (options.displayValue && this.hasDisplayValue) data.dv = this._displayValue;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tprivate createComposedStyle(columnStyle?: Style|number, rowStyle?: Style|number, extraStyle?: Style) {\n\t\tconst styles: (number|Style)[] = [];\n\n\t\tcolumnStyle = columnStyle || this.column.style;\n\t\trowStyle = rowStyle || this.row.style;\n\t\tif (columnStyle != null && rowStyle != null) {\n\t\t\tif (this.column.priority > this.row.priority) {\n\t\t\t\tstyles.push(rowStyle, columnStyle);\n\t\t\t} else {\n\t\t\t\tstyles.push(columnStyle, rowStyle);\n\t\t\t}\n\t\t}\n\t\telse if (columnStyle != null) styles.push(columnStyle);\n\t\telse if (rowStyle != null) styles.push(rowStyle);\n\n\t\tif (this.style != null) styles.push(this.style);\n\t\tif (extraStyle != null) styles.push(extraStyle);\n\n\t\treturn styles.length > 0 ? this.model.styles.merge(...styles) : null;\n\t}\n\n\tget composedStyle() : Style {\n\t\tif (this._hasStyle === null) {\n\t\t\tconst s = this.createComposedStyle(null, null, this.model.conditionalFormats.evaluate(this));\n\t\t\tthis._hasStyle = s != null;\n\t\t\tthis._composedStyle = s;\n\t\t}\n\t\treturn this._composedStyle;\n\t}\n\n\tget calculatedIndent(): number|null {\n\t\tconst s = this.composedStyle;\n\t\tif (s?.alignment?.indent) return s.alignment.indent;\n\n\t\t// calculates cell text indent based on row level\n\t\tif (this.column.levelIndent && this.row.level > 0) {\n\t\t\treturn this.row.level * this.model.options.levelIndentFactor;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget cssStyle() : CSSStyle {\n\t\tif (this._hasStyle === false) return null;\n\t\tif (!this._cssStyle) {\n\t\t\tconst composedStyle = this.composedStyle;\n\t\t\tif (composedStyle) {\n\t\t\t\tthis._cssStyle = styleToCSStyle(composedStyle);\n\t\t\t}\n\t\t}\n\t\treturn this._cssStyle;\n\t}\n\n\tinvalidateStyle() {\n\t\tthis._hasComment = null;\n\t\tthis._hasStyle = null;\n\t\tthis._composedStyle = null;\n\t\tthis._cssStyle = null;\n\t\tthis._sparkline = null;\n\t}\n\n\tsetStyleProperties(props: Record<StylePropertyKey, unknown>) {\n\t\tsuper.setStyleProperties(props);\n\t\tthis.invalidateStyle();\n\t}\n\n\tremoveStyleProperties(props: string[]) {\n\t\tsuper.removeStyleProperties(props);\n\t\tthis.invalidateStyle();\n\t}\n\n\tpreviewStyleProperties(\n\t\tprops: Record<StylePropertyKey, unknown>,\n\t\ttype: 'cell'|'column'|'row' = 'cell'\n\t) {\n\t\tconst composedStyle = Object.assign({}, this.createComposedStyle(type == 'column' ? props : null, type == 'row' ? props : null) ?? {});\n\n\t\tif (type == 'cell') {\n\t\t\tfor (const k in props) composedStyle[k] = props[k];\n\t\t}\n\t\tthis._hasStyle = true;\n\t\tthis._cssStyle = styleToCSStyle(composedStyle);\n\t}\n\n\tvalidate() {\n\t\tif (!this.validation) return true;\n\t\treturn validateValue(this, this.value);\n\t}\n\n\ttoString() { return this.address }\n\n}\n"]}
|
|
@@ -121,6 +121,16 @@ export declare class GridModel implements Model<GridSource> {
|
|
|
121
121
|
createRows(source: RowSource[], root?: RowModel, indexOffset?: number): [RowModel, RowModel[], number, boolean];
|
|
122
122
|
insertRowData(parent: RowModel, offset: number, source: RowSource[]): void;
|
|
123
123
|
applyTheme(theme: TableTheme, invalidateCellStyles?: boolean): void;
|
|
124
|
+
/**
|
|
125
|
+
* Applies the table theme onto the given rows only - inserted rows or rows
|
|
126
|
+
* whose level changed: the row items are matched again and the cell items
|
|
127
|
+
* are applied over their cells, whose cached styles are dropped. Does
|
|
128
|
+
* nothing without a theme.
|
|
129
|
+
*/
|
|
130
|
+
applyThemeToRows(rows: RowModel[]): void;
|
|
131
|
+
/** the column counterpart of applyThemeToRows */
|
|
132
|
+
applyThemeToColumns(columns: ColumnModel[]): void;
|
|
133
|
+
private invalidateCellStyles;
|
|
124
134
|
populate(source: GridSource): void;
|
|
125
135
|
getSourceData(): GridSource;
|
|
126
136
|
calcHeaderHeights(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridModel.d.ts","sourceRoot":"","sources":["../../src/model/gridModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAQ,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAiB,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,WAAW,EAAG,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAe,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"gridModel.d.ts","sourceRoot":"","sources":["../../src/model/gridModel.ts"],"names":[],"mappings":"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"}
|
package/dist/model/gridModel.js
CHANGED
|
@@ -11,7 +11,7 @@ import { NamingModel } from "./namingModel";
|
|
|
11
11
|
import { initOptions } from "./options";
|
|
12
12
|
import { RowModel } from "./rowModel";
|
|
13
13
|
import { StyleModel } from "./styleModel";
|
|
14
|
-
import { applyCellTheme, applyRowTheme, applyTheme } from "./tableTheme";
|
|
14
|
+
import { applyCellTheme, applyColumnTheme, applyRowTheme, applyTheme } from "./tableTheme";
|
|
15
15
|
import { SortingModel } from "./sortingModel";
|
|
16
16
|
import { Merges } from "./merges";
|
|
17
17
|
import { FilterModel } from "./filterModel";
|
|
@@ -19,6 +19,17 @@ const DEFAULT_SOURCE_KEYS = [
|
|
|
19
19
|
'index', 'name', 'rows', 'columns', 'cells', 'options', 'sparklines',
|
|
20
20
|
'rules', 'comments', 'styles', 'names', 'props', 'tab', 'theme'
|
|
21
21
|
];
|
|
22
|
+
/** the lowest and the highest index of the elements (a loop - the arrays may be large) */
|
|
23
|
+
function indexBounds(elements) {
|
|
24
|
+
let first = Infinity, last = -Infinity;
|
|
25
|
+
for (const element of elements) {
|
|
26
|
+
if (element.index < first)
|
|
27
|
+
first = element.index;
|
|
28
|
+
if (element.index > last)
|
|
29
|
+
last = element.index;
|
|
30
|
+
}
|
|
31
|
+
return [first, last];
|
|
32
|
+
}
|
|
22
33
|
export class GridModel {
|
|
23
34
|
get mergedHeaders() { return this._mergedHeaders; }
|
|
24
35
|
get hasFilter() { return this._filter; }
|
|
@@ -125,11 +136,7 @@ export class GridModel {
|
|
|
125
136
|
this._maxRowLevel = Math.max(this._maxRowLevel, res[2]);
|
|
126
137
|
parent.insertChildren(res[0].children, offset);
|
|
127
138
|
this.indexRowsByTree();
|
|
128
|
-
|
|
129
|
-
const newRows = res[1];
|
|
130
|
-
applyRowTheme(this.theme, this, newRows);
|
|
131
|
-
applyCellTheme(this.theme, this, new CellRange(0, newRows[0].index, Infinity, newRows[newRows.length - 1].index));
|
|
132
|
-
}
|
|
139
|
+
this.applyThemeToRows(res[1]);
|
|
133
140
|
}
|
|
134
141
|
applyTheme(theme, invalidateCellStyles) {
|
|
135
142
|
if (invalidateCellStyles) {
|
|
@@ -139,6 +146,35 @@ export class GridModel {
|
|
|
139
146
|
}
|
|
140
147
|
applyTheme(theme, this);
|
|
141
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Applies the table theme onto the given rows only - inserted rows or rows
|
|
151
|
+
* whose level changed: the row items are matched again and the cell items
|
|
152
|
+
* are applied over their cells, whose cached styles are dropped. Does
|
|
153
|
+
* nothing without a theme.
|
|
154
|
+
*/
|
|
155
|
+
applyThemeToRows(rows) {
|
|
156
|
+
if (!this.theme || !rows.length)
|
|
157
|
+
return;
|
|
158
|
+
const [first, last] = indexBounds(rows);
|
|
159
|
+
const range = new CellRange(0, first, Infinity, last);
|
|
160
|
+
applyRowTheme(this.theme, this, rows);
|
|
161
|
+
applyCellTheme(this.theme, this, range);
|
|
162
|
+
this.invalidateCellStyles(range);
|
|
163
|
+
}
|
|
164
|
+
/** the column counterpart of applyThemeToRows */
|
|
165
|
+
applyThemeToColumns(columns) {
|
|
166
|
+
if (!this.theme || !columns.length)
|
|
167
|
+
return;
|
|
168
|
+
const [first, last] = indexBounds(columns);
|
|
169
|
+
const range = new CellRange(first, 0, last, Infinity);
|
|
170
|
+
applyColumnTheme(this.theme, this, columns);
|
|
171
|
+
applyCellTheme(this.theme, this, range);
|
|
172
|
+
this.invalidateCellStyles(range);
|
|
173
|
+
}
|
|
174
|
+
invalidateCellStyles(range) {
|
|
175
|
+
for (const cell of new IterableRange(this, range.intersect(this.gridRange), true))
|
|
176
|
+
cell.invalidateStyle();
|
|
177
|
+
}
|
|
142
178
|
populate(source) {
|
|
143
179
|
this.index = source.index;
|
|
144
180
|
this.name = source.name ?? this.name;
|
|
@@ -636,6 +672,7 @@ export class GridModel {
|
|
|
636
672
|
if (this.maxColumnLevel > 0)
|
|
637
673
|
parent.insertChildren(newColumns, index - (parent.index || -1) - 1);
|
|
638
674
|
this.indexColumns();
|
|
675
|
+
this.applyThemeToColumns(newColumns);
|
|
639
676
|
this.clearCalculations(true);
|
|
640
677
|
return newColumns;
|
|
641
678
|
}
|
|
@@ -665,10 +702,7 @@ export class GridModel {
|
|
|
665
702
|
if (this.maxRowLevel > 0)
|
|
666
703
|
parent.insertChildren(newRows, index - (parent.index || -1) - 1);
|
|
667
704
|
this.indexRows();
|
|
668
|
-
|
|
669
|
-
applyRowTheme(this.theme, this, newRows);
|
|
670
|
-
applyCellTheme(this.theme, this, new CellRange(0, newRows[0].index, Infinity, newRows[newRows.length - 1].index));
|
|
671
|
-
}
|
|
705
|
+
this.applyThemeToRows(newRows);
|
|
672
706
|
this.clearCalculations(true);
|
|
673
707
|
return newRows;
|
|
674
708
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridModel.js","sourceRoot":"","sources":["../../src/model/gridModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAqC,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAA2B,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAmB,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAoC,MAAM,eAAe,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAiB,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAc,WAAW,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,WAAW,EAAyB,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAc,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAS,MAAM,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAqC5C,MAAM,mBAAmB,GAAG;IAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY;IACpE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;CAC/D,CAAC;AAOF,MAAM,OAAO,SAAS;IA4BrB,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,cAAc,CAAA,CAAC,CAAC;IAGlD,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,OAAO,CAAA,CAAC,CAAC;IAGvC,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA,CAAC,CAAC;IACjD,IAAI,iBAAiB,KAAK,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAA,CAAC,CAAC;IAClF,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,YAAY,CAAA,CAAC,CAAC;IAG9C,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,eAAe,GAAG,CAAC,CAAA,CAAC,CAAC;IACvD,IAAI,oBAAoB,KAAK,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAA,CAAC,CAAC;IAC3F,IAAI,cAAc,KAAK,OAAO,IAAI,CAAC,eAAe,CAAA,CAAC,CAAC;IAIpD,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,YAAY,CAAA,CAAC,CAAC;IAC9C,IAAI,iBAAiB,KAAK,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;IAOpH,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAA,CAAC,CAAC;IAC5C,IAAI,UAAU,CAAC,CAAmB,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA,CAAC,CAAC;IAG5D,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,CAAa,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA,CAAC,CAAC;IAK5C,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAA,CAAC,CAAC;IAGhE,YAAY,MAAkB,EAAE,OAAiB,EAAE,MAAmB;QArDtE,gBAAW,GAA+B,EAAE,CAAC;QAC7C,mBAAc,GAAgB,IAAI,GAAG,EAAE,CAAC;QACxC,gBAAW,GAAgB,IAAI,GAAG,EAAE,CAAC;QAE5B,WAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,WAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,aAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,iBAAY,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC1C,UAAK,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9B,YAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,WAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,eAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,uBAAkB,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAKnD,YAAO,GAAG,KAAK,CAAA;QAGf,iBAAY,GAAG,CAAC,CAAC;QAKjB,oBAAe,GAAG,CAAC,CAAC;QAKpB,iBAAY,GAAG,CAAC,CAAC;QAMjB,uBAAkB,GAAG,IAAI,CAAC;QAC1B,uBAAkB,GAAG,IAAI,CAAC;QAkalC,cAAS,GAAG,GAAgB,EAAE;YAC7B,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,IAAI,CAAC;QAClB,CAAC,CAAA;QAED,iBAAY,GAAG,GAAmB,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAvZtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,iBAAiB,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IAED,eAAe,CAAC,KAAgB;QAC/B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC;IAED,WAAW,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,cAAc,CAAC,CAAY;QAC1B,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,eAAe,CAAC,CAAS,EAAE,CAAS;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,MAA+B,EAAE,MAAe;QACpD,IAAI,CAAC,KAAK,CAAC,MAAgB,CAAC;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC,MAAgB,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;QACzF,IAAI,MAAM,YAAY,SAAS;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACpE,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACb,CAAC;IAED,UAAU,CAAC,MAAmB,EAAE,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAE,WAAW,GAAG,CAAC;QAClF,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,IAAI,qBAAqB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAEzB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,SAAS;gBAAE,SAAS,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;gBAAE,oBAAoB,GAAG,IAAI,CAAC;YACrD,IAAI,SAAS,CAAC,CAAC,IAAI,IAAI;gBAAE,qBAAqB,GAAG,IAAI,CAAC;YACtD,IAAI,SAAS,CAAC,CAAC,IAAI,MAAM;gBAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC/C,QAAQ,CAAC,SAAS,GAAG,CAAC,GAAG,WAAW,CAAC;YACrC,IAAI,QAAQ,CAAC,IAAI;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,OAAO,QAAQ,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;QACrB,IAAI,oBAAoB;YAAE,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE;gBAC5E,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ;aACtC,CAAC,CAAC;aACE,IAAI,qBAAqB;YAAE,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;YAC/E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAE1B,IAAI,CAAC,qBAAqB;YAAE,oBAAoB,GAAG,IAAI,CAAC,CAAC,8BAA8B;QACvF,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAC;IACxD,CAAC;IAED,aAAa,CAAC,MAAgB,EAAE,MAAc,EAAE,MAAmB;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACnF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACzC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACnH,CAAC;IACF,CAAC;IAED,UAAU,CAAC,KAAiB,EAAE,oBAA8B;QAC3D,IAAI,oBAAoB,EAAE,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC;gBACtD,IAAI,CAAC,eAAe,EAAE,CAAC;YACxB,CAAC;QACF,CAAC;QACD,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,QAAQ,CAAC,MAAkB;QAC1B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QAEtB,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,IAAI,qBAAqB,GAAG,KAAK,CAAC;QAElC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/E,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEtE,SAAS;QACT,IAAI,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvD,UAAU;QACV,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE;YACrD,IAAI,CAAC,YAAY;gBAAE,YAAY,GAAG,EAAE,CAAC;YACrC,IAAI,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,IAAI,IAAI;gBAAE,oBAAoB,GAAG,IAAI,CAAC;YAChF,IAAI,YAAY,CAAC,CAAC,IAAI,IAAI;gBAAE,qBAAqB,GAAG,IAAI,CAAC;YACzD,IAAI,YAAY,CAAC,CAAC,IAAI,MAAM;gBAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC;YAClD,IAAI,QAAQ,CAAC,IAAI;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,OAAO,QAAQ,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,GAAG,oBAAoB,CAAC;QAC/C,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,EAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;QAC9C,IAAI,oBAAoB;YAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;gBACrG,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ;aACzC,CAAC,CAAC;aACE,IAAI,qBAAqB;YAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;;YACxG,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;QAE1C,IAAI,CAAC,qBAAqB;YAAE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,8BAA8B;QAE1F,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,OAAO;QACP,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrG,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;QAEtG,QAAQ;QACR,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,kCAAkC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC3F,CAAC;iBAAM,IAAI,UAAU,CAAC,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,EAAC,CAAC,CAAC;YACzF,CAAC;YAED,IAAI,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,EAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;YAC7F,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,aAAa;QACb,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC;gBACJ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;YACzD,CAAC;QACF,CAAC;QAED,QAAQ;QACR,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC;gBACJ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;YAC3D,CAAC;QACF,CAAC;QAED,sBAAsB;QACtB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC;gBACJ,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;YACnE,CAAC;QACF,CAAC;QAED,QAAQ;QACR,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC;gBACJ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC;YACrD,CAAC;QACF,CAAC;QAED,WAAW;QACX,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,CAAC;gBACJ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;QACF,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;QAEhC,wBAAwB;QACxB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvD,eAAe;QACf,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QAC9D,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAED,aAAa;QACZ,MAAM,IAAI,GAAG;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACrD,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;YACnC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;YAC9C,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;YAC3C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO;SACP,CAAC;QAEhB,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAEpD,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,QAAoB,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;gBAChD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;oBACf,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;oBACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,CAAC;YACF,CAAC;QACF,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEzC,MAAM,MAAM,GAAG,EAAa,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAE5C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;YAC9B,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;YACtC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;SAC1C,CAAC,CAAC;QACH,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YAC7D,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CACzB,CAAC;QAEF,OAAO,IAAI,CAAC;IACb,CAAC;IAED,iBAAiB;QAChB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC/B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;YAC7E,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5F,CAAC;YAED,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAoB,EAAE,CAAC,EAAE,EAAE;gBAClD,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;oBACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,SAAS;QACR,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,GAAG,CAAC,QAAQ;gBAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACjE,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,gBAAgB;QACf,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAc,EAAE,EAAE;gBAC3C,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC5B,CAAC,CAAC,CAAC;YAEH,6BAA6B;YAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACnC,MAAM,mBAAmB,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC/D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;oBACnC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;oBACpC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;oBACrB,mBAAmB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC9B,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC;YACxC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,8DAA8D;YAC9D,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAClF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBAChD,IAAI,GAAG,EAAE,CAAC;oBACT,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACb,CAAC;gBACD,OAAO,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,eAAe;QACd,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAa,EAAE,EAAE;YACnC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACvD,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAED,YAAY;QACX,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,MAAM;gBAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,mBAAmB;QAClB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAiB,EAAE,EAAE;YAC9C,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;YAC7B,MAAM,sBAAsB,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACrE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1C,sBAAsB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;YACpC,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;IACrB,CAAC;IAED,YAAY;QACX,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAmB,EAAE,EAAE;YAChD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1F,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBAC1D,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,MAAM,CAAC,KAAK;gBACf,CAAC,EAAE,CAAC,CAAC,CAAC;gBACN,EAAE,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC1C,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;aACb,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,sBAAsB;QACtB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;gBAAE,OAAO;YAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC1E,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;oBACzC,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAED,YAAY,CAAC,CAAS;QACrB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM;gBAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;IACrB,CAAC;IAUD,KAAK;QACJ,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAED,aAAa;QACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,WAAW,CACV,MAA8B,EAC9B,YAAoC,EACpC,MAAoD;QAEpD,MAAM,YAAY,GAAe,EAAE,CAAC;QACpC,MAAM,eAAe,GAAkB,EAAE,CAAC;QAE1C,IAAI,GAAa,CAAC;QAClB,IAAI,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,WAAW;QACX,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC1B,eAAe,IAAI,GAAG,CAAC,MAAM,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,cAAc;QACd,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/E,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC1B,eAAe,IAAI,GAAG,CAAC,MAAM,CAAC;QAC/B,CAAC;QAED,cAAc;QACd,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACxB,OAAO,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAC3D,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,eAAe,IAAI,GAAG,CAAC,MAAM,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,oBAAoB;QACpB,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/E,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,MAAmB,CAAC;QACxB,IAAI,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,eAAe;QACf,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAChC,cAAc,IAAI,MAAM,CAAC,KAAK,CAAC;YAC/B,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAED,gBAAgB;QAChB,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrF,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAChC,cAAc,IAAI,MAAM,CAAC,KAAK,CAAC;QAChC,CAAC;QAED,iBAAiB;QACjB,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACxB,OAAO,cAAc,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YAC7D,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;YAClC,cAAc,IAAI,MAAM,CAAC,KAAK,CAAC;YAC/B,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAED,sBAAsB;QACtB,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrF,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,EAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAC,CAAC,CAAC;IAC1E,CAAC;IAED,iBAAiB;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,CAAC;IAED,gBAAgB,CAAC,KAAgB,EAAE,eAAe,GAAG,KAAK;QACzD,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,MAAM,EAAC,OAAO,EAAE,IAAI,EAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QACnC,MAAM,MAAM,GAAoB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,GAAa,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC,GAAG,CAAC,CAAC;YACN,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACnF,CAAC;YACD,EAAE,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAED,iBAAiB,CAAC,KAAa;QAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACvB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;YAC/E,IAAI,GAAG,CAAC,KAAK,IAAI,KAAK;gBAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,sCAAsC;QACnF,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAED,oBAAoB,CAAC,KAAa;QACjC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QACzE,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CACnG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAC/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAC/D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CACzD,CAAC,CAAC,CAAC,IAAI,CAAC;IACV,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,gBAAgB,CAAC,KAAgB,EAAE,cAAc,GAAG,KAAK;QACxD,MAAM,IAAI,GAAG,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACzF,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,0BAA0B;QACzB,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,cAAc,CAAC,KAAgB,EAAE,cAAc,GAAG,KAAK;QACtD,MAAM,IAAI,GAAG,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACzF,OAAO,IAAI,iBAAiB,CAAW,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACrF,CAAC;IAED,iBAAiB,CAAC,KAAgB,EAAE,cAAc,GAAG,KAAK;QACzD,MAAM,IAAI,GAAG,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACzF,OAAO,IAAI,iBAAiB,CAAc,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3F,CAAC;IAED,YAAY,CAAC,KAAgB;QAC5B,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,sBAAsB,CAAI,KAAgB,EAAE,SAAiC;QAC5E,IAAI,GAAa,EAAE,IAAe,EAAE,SAAc,CAAC;QACnD,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,SAAS,GAAG,EAAE,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,IAAI;oBAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,aAAa,CAAC,KAAgB;QAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,cAAc,CAAC,KAAgB;QAC9B,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,OAAqB;QAC1B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,iBAAiB,CAAC,GAAG,GAAG,KAAK;QAC5B,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;;YAC3E,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,iBAAiB;QAChB,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC,eAAe,EAAE,CAAC;QACxB,CAAC;IACF,CAAC;IAED,qBAAqB;QACpB,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,EAAiB,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC,eAAe,EAAE,CAAC;QACxB,CAAC;IACF,CAAC;IAED,aAAa,CAAC,KAAa,EAAE,KAAa,EAAE,KAAK,GAAG,KAAK;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7E,IAAI,KAAK;YAAE,EAAE,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAC,CAAC,CAAC;QAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3F,MAAM,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC;YAAE,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,aAAa,CAAC,KAAa,EAAE,KAAa;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAC,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YACxC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACpE,yFAAyF;QACzF,mDAAmD;QACnD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;QACvC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,cAAc,CAAC;IACvB,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,IAAuB,EAAE,KAAK,GAAG,KAAK;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;QAC9E,IAAI,KAAK;YAAE,EAAE,KAAK,CAAC;QACnB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAc,CAAC,CAAC,CAAC,CAAE,IAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAc,CAAC;QACnF,IAAI,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAC,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAc,CAAC,CAAC,CAAC,CAAE,IAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3H,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC;YAAE,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACzC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACnH,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,KAAa;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,KAAa,EAAE,WAAmB;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,CAAC,EAAC,CAAC,CAAC;QACxG,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,KAAa,EAAE,WAAmB;QAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,CAAC,EAAC,CAAC,CAAC;QACzG,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,aAAa,CAAC;IACtB,CAAC;IAED,WAAW,CAAC,GAAiB;QAC5B,MAAM,EAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAC,GAAG,GAAG,CAAC;QACxD,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAoB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QAC5D,IAAI,GAAa,EAAE,SAAoB,CAAC;QAExC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CACzC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EACd,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAC7B,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAC1B,CAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,8EAA8E;YAC9E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACxD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC;YACnE,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,KAAK;YAAE,OAAO,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;QAElD,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;gBACxB,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;oBACxB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAuB,CAAC,CAAC;oBAClD,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC3C,IAAI,YAAY,EAAE,CAAC;wBAClB,SAAS,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;wBACvC,SAAS,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;oBACpC,CAAC;oBACD,IAAI,aAAa,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI;wBAAE,SAAS,CAAC,YAAY,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBACnG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC;IAClC,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,YAAuB,EAAE,WAAW,GAAG,IAAI;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC1D,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;aACjB,IAAI,IAAI,CAAC,KAAK,IAAI,WAAW;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC;IACb,CAAC;IAED,cAAc,CAAC,IAAY,EAAE,WAAW,GAAG,IAAI;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;aACnB,IAAI,IAAI,CAAC,KAAK,IAAI,WAAW;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC;IACb,CAAC;IAED,oBAAoB,CAAC,IAAY,EAAE,WAAW,GAAG,IAAI;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,MAAM;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;aAC1C,IAAI,IAAI,CAAC,KAAK,IAAI,WAAW;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACb,CAAC;IAED,cAAc;QACb,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACrG,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;YAC1D,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ;SACtC,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,EAAE,CAAC;IACxB,CAAC;IAED,iBAAiB;QAChB,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACrG,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;YAChE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ;SACzC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;IACrB,CAAC;IAED,mBAAmB,CAAC,IAAe;QAClC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,MAAM;YAC5B,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5B,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,MAAM;YACzB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1B,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACjB,CAAC;CAED","sourcesContent":["import { Matrix, tree, CustomProperties, Location, Model } from \"@omegagrid/core\";\nimport { log } from \"@omegagrid/core\";\nimport { CellValueType, ShiftOptions, SpillOptions, SpillResult, TabOptions } from \"../types\";\nimport { CalculationModel } from \"./calculationModel\";\nimport { CellRange } from \"../common/range\";\nimport { ConditionalFormats, ConditionalFormatSource } from \"./conditionalFormats\";\nimport { Sparklines, SparklineSource } from \"../sparklines/sparklines\";\nimport { CellModel, CellSource } from \"./cellModel\";\nimport { ColumnModel, ColumnHeaderModel, ColumnSource } from \"./columnModel\";\nimport { GroupModel } from \"./groupModel\";\nimport { CommentModel, CommentSource } from \"./commentModel\";\nimport { IterableAxisRange, IterableRange } from \"./iterableRange\";\nimport { NameSource, NamingModel } from \"./namingModel\";\nimport { initOptions, Options, OptionSource } from \"./options\";\nimport { RowModel, RowSource } from \"./rowModel\";\nimport { Style } from \"./style\";\nimport { StyleModel } from \"./styleModel\";\nimport { TableTheme, applyCellTheme, applyRowTheme, applyTheme } from \"./tableTheme\";\nimport { SortingModel } from \"./sortingModel\";\nimport { Merge, Merges } from \"./merges\";\nimport { FilterModel } from \"./filterModel\";\n\n\n/** Source object type for grid */\nexport type GridSource = {\n\t/** grid index with group (readonly) */\n\tindex?: number,\n\t/** sheet name */\n\tname?: string,\n\t/** row array */\n\trows?: RowSource[],\n\t/** column array */\n\tcolumns?: ColumnSource[],\n\t/** cell array */\n\tcells?: CellSource[],\n\t/** grid options */\n\toptions?: OptionSource,\n\t/** sprakline definitions */\n\tsparklines?: SparklineSource[],\n\t/** conditional format definitions */\n\trules?: ConditionalFormatSource,\n\t/** comment array */\n\tcomments?: CommentSource[],\n\t/** style array */\n\tstyles?: Style[],\n\t/** renge names */\n\tnames?: NameSource[],\n\t/** custom properties */\n\tprops?: CustomProperties,\n\t/** tab settings used when grid is within group */\n\ttab?: TabOptions,\n\t/** table theme */\n\ttheme?: TableTheme,\n\t/** additional properties */\n\t[key: string]: unknown\n};\n\nconst DEFAULT_SOURCE_KEYS = [\n\t'index', 'name', 'rows', 'columns', 'cells', 'options', 'sparklines',\n\t'rules', 'comments', 'styles', 'names', 'props', 'tab', 'theme'\n];\n\nexport type Viewport = {\n\trows: RowModel[];\n\tcolumns: ColumnModel[];\n};\n\nexport class GridModel implements Model<GridSource> {\n\t\n\tindex: number;\n\tname: string;\n\ttab: TabOptions;\n\trows: RowModel[];\n\tvisibleRows: RowModel[];\n\trowRoot: RowModel;\n\tcolRoot: ColumnModel;\n\tcolumns: ColumnModel[];\n\tvisibleColumns: ColumnModel[];\n\tvisibleColumnIndex: Record<number, number>;\n\totherSourceData: Record<string, unknown>;\n\totherModels: Record<string, Set<Model>> = {};\n\tautofitColumns: Set<number> = new Set();\n\tautofitRows: Set<number> = new Set();\n\n\treadonly merges = new Merges(this);\n\treadonly styles = new StyleModel(this);\n\treadonly comments = new CommentModel(this);\n\treadonly calculations = new CalculationModel(this);\n\treadonly names = new NamingModel(this);\n\treadonly sorting = new SortingModel(this);\n\treadonly filter = new FilterModel(this);\n\treadonly sparklines = new Sparklines(this);\n\treadonly conditionalFormats = new ConditionalFormats(this);\n\n\tprivate _mergedHeaders: (Merge & {h: ColumnHeaderModel})[];\n\tget mergedHeaders() { return this._mergedHeaders }\n\t\n\tprivate _filter = false\n\tget hasFilter() { return this._filter }\n\t\n\tprivate _maxRowLevel = 0;\n\tget hasRowTree() { return this._maxRowLevel > 0 }\n\tget hasRowTreeEnabled() { return this.hasRowTree && this.options.rowTree.enabled }\n\tget maxRowLevel() { return this._maxRowLevel }\n\t\n\tprivate _maxColumnLevel = 0;\n\tget hasColumnTree() { return this._maxColumnLevel > 0 }\n\tget hasColumnTreeEnabled() { return this.hasColumnTree && this.options.columnTree.enabled }\n\tget maxColumnLevel() { return this._maxColumnLevel }\n\t\n\tprivate _headerCount = 0;\n\tprivate _headerHeights: number[];\n\tget headerCount() { return this._headerCount }\n\tget columnHeaderCount() { return this.headerCount + (this.hasColumnTreeEnabled ? 1 : 0) + (this.hasFilter ? 1 : 0) }\n\n\tprivate _viewport: Viewport;\n\tprivate _levelBasedRowTree = true;\n\tprivate _levelBasedColTree = true;\n\n\tprotected _properties: CustomProperties;\n\tget properties() { return this._properties }\n\tset properties(v: CustomProperties) { this._properties = v }\n\n\tprotected _theme: TableTheme;\n\tget theme() { return this._theme }\n\tset theme(v: TableTheme) { this._theme = v }\n\n\tpublic readonly logger: log.Logger;\n\tpublic options: Options;\n\n\tget formulasEnabled() { return this.options.formulas !== false }\n\tpublic group: GroupModel;\n\n\tconstructor(source: GridSource, options?: Options, logger?: log.Logger) {\n\t\tthis.logger = logger;\n\t\tthis.options = options ?? initOptions(source.options);\n\t\tthis.populate(source);\n\t}\n\n\tgetConnectedModel(name: string) {\n\t\treturn this.group ? this.group.get(name) : null;\n\t}\n\n\tgetModelByRange(range: CellRange) {\n\t\treturn range.sheet ? this.getConnectedModel(range.sheet) : this;\n\t}\n\n\tgetCellByA1(a1: string) {\n\t\treturn this.getCellByRange(CellRange.fromA1(a1));\n\t}\n\n\tgetCellByRange(r: CellRange) {\n\t\treturn this.getCellByCoords(r.r1, r.c1);\n\t}\n\n\tgetCellByCoords(r: number, c: number) {\n\t\treturn this.rows[r]?.cell(c);\n\t}\n\n\tcell(coord1: string|number|CellRange, coord2?: number) {\n\t\tif (!isNaN(coord1 as number)) return this.getCellByCoords(coord1 as number, coord2 || 0);\n\t\tif (coord1 instanceof CellRange) return this.getCellByRange(coord1);\n\t\tif (typeof coord1 === 'string') return this.getCellByA1(coord1);\n\t\treturn null;\n\t}\n\n\tcreateRows(source: RowSource[], root = new RowModel(this, {l: -1}), indexOffset = 0) : [RowModel, RowModel[], number, boolean] {\n\t\tlet hasRowLevelBasedTree = false;\n\t\tlet hasRowParentBasedTree = false;\n\t\tthis.autofitRows.clear();\n\n\t\tconst rows = source.map((rowSource, r) => {\n\t\t\tif (!rowSource) rowSource = {};\n\t\t\tif (!isNaN(rowSource.l)) hasRowLevelBasedTree = true;\n\t\t\tif (rowSource.p != null) hasRowParentBasedTree = true;\n\t\t\tif (rowSource.h == 'auto') this.autofitRows.add(r);\n\t\t\tconst rowModel = new RowModel(this, rowSource);\n\t\t\trowModel.origIndex = r + indexOffset;\n\t\t\tif (rowModel.name) this.names.set(rowModel.name, CellRange.fullRow(r));\n\t\t\treturn rowModel;\n\t\t});\n\t\t\n\t\tlet maxRowLevel = -1;\n\t\tif (hasRowLevelBasedTree) maxRowLevel = tree.buildLevelBasedTree(rows, root, {\n\t\t\treverse: this.options.rowTree.reversed\n\t\t});\n\t\telse if (hasRowParentBasedTree) maxRowLevel = tree.buildParentBasedTree(rows, root);\n\t\telse root.children = rows;\n\n\t\tif (!hasRowParentBasedTree) hasRowLevelBasedTree = true; // default to level based tree\n\t\treturn [root, rows, maxRowLevel, hasRowLevelBasedTree];\n\t}\n\n\tinsertRowData(parent: RowModel, offset: number, source: RowSource[]) {\n\t\tconst res = this.createRows(source, new RowModel(this, {l: parent.level}), offset);\n\t\tthis._maxRowLevel = Math.max(this._maxRowLevel, res[2]);\n\t\tparent.insertChildren(res[0].children, offset);\n\t\tthis.indexRowsByTree();\n\t\tif (this.theme) {\n\t\t\tconst newRows = res[1];\n\t\t\tapplyRowTheme(this.theme, this, newRows);\n\t\t\tapplyCellTheme(this.theme, this, new CellRange(0, newRows[0].index, Infinity, newRows[newRows.length - 1].index));\n\t\t}\n\t}\n\n\tapplyTheme(theme: TableTheme, invalidateCellStyles?: boolean) {\n\t\tif (invalidateCellStyles) {\n\t\t\tfor (const cell of this.getInitializedCellIterator()) {\n\t\t\t\tcell.invalidateStyle();\n\t\t\t}\n\t\t}\n\t\tapplyTheme(theme, this);\n\t}\n\n\tpopulate(source: GridSource) {\n\t\tthis.index = source.index;\n\t\tthis.name = source.name ?? this.name;\n\t\tthis.tab = source.tab;\n\t\t\n\t\tlet hasColLevelBasedTree = false;\n\t\tlet hasColParentBasedTree = false;\n\n\t\tif (!source.columns) source.columns = new Array(this.options.columns).fill({});\n\t\tif (!source.rows) source.rows = new Array(this.options.rows).fill({});\n\n\t\t// styles\n\t\tif (source.styles) this.styles.populate(source.styles);\n\t\t\n\t\t// columns\n\t\tthis.autofitColumns.clear();\n\t\tthis.columns = source.columns.map((columnSource, c) => {\n\t\t\tif (!columnSource) columnSource = {};\n\t\t\tif (columnSource.l !== 0 && columnSource.l != null) hasColLevelBasedTree = true;\n\t\t\tif (columnSource.p != null) hasColParentBasedTree = true;\n\t\t\tif (columnSource.w == 'auto') this.autofitColumns.add(c);\n\t\t\tconst colModel = new ColumnModel(this, columnSource);\n\t\t\tthis._filter = colModel.hasFilter || this._filter;\n\t\t\tif (colModel.name) this.names.set(colModel.name, CellRange.fullColumn(c));\n\t\t\treturn colModel;\n\t\t});\n \n\t\tthis._levelBasedColTree = hasColLevelBasedTree;\n\t\tthis._maxColumnLevel = -1;\n\t\tthis.colRoot = new ColumnModel(this, {l: -1});\n\t\tif (hasColLevelBasedTree) this._maxColumnLevel = tree.buildLevelBasedTree(this.columns, this.colRoot, {\n\t\t\treverse: this.options.columnTree.reversed\n\t\t});\n\t\telse if (hasColParentBasedTree) this._maxColumnLevel = tree.buildParentBasedTree(this.columns, this.colRoot);\n\t\telse this.colRoot.children = this.columns;\n\t\t\n\t\tif (!hasColParentBasedTree) this._levelBasedColTree = true; // default to level based tree\n\n\t\tthis.indexColumns();\n\t\tthis.indexVisibleColumns();\n\n\t\t// rows\n\t\t[this.rowRoot, this.rows, this._maxRowLevel, this._levelBasedRowTree] = this.createRows(source.rows);\n\t\tthis.indexRows();\n\t\tthis.indexVisibleRows();\n\t\tif (this.options.pageSize && this.options.pageSize <= this.rows.length) this.rowRoot.count = Infinity;\n\n\t\t// cells\n\t\tthis.merges.clear();\n\t\tsource.comments = source.comments || [];\n\t\tsource.cells?.forEach((cellSource, i) => {\n\t\t\tconst cell = this.rows[cellSource.r] ? this.rows[cellSource.r].cell(cellSource.c, cellSource) : null;\n\t\t\tif (!cell) {\n\t\t\t\tthis.logger?.error(`invalid cell definition (index ${i}): ${JSON.stringify(cellSource)}`);\n\t\t\t} else if (cellSource.cs > 1 || cellSource.rs > 1) {\n\t\t\t\tthis.merges.add({r: cell.r, c: cell.c, rs: cellSource.rs || 1, cs: cellSource.cs || 1});\n\t\t\t}\n\n\t\t\tif (cell && cellSource.comment) {\n\t\t\t\tsource.comments.push(Object.assign(cellSource.comment, {c: cellSource.c, r: cellSource.r}));\n\t\t\t}\n\t\t});\n\t\t\n\t\t// sparklines\n\t\tif (source.sparklines) {\n\t\t\ttry {\n\t\t\t\tthis.sparklines.populate(source.sparklines);\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`Sparkline init error: ${error}`);\n\t\t\t}\n\t\t}\n\n\t\t// names\n\t\tif (source.names) {\n\t\t\ttry {\n\t\t\t\tthis.names.populate(source.names);\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`Named range init error: ${error}`);\n\t\t\t}\n\t\t}\n\n\t\t// conditional formats\n\t\tif (source.rules) {\n\t\t\ttry {\n\t\t\t\tthis.conditionalFormats.populate(source.rules);\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`Conditional formats init error: ${error}`);\n\t\t\t}\n\t\t}\n\n\t\t// theme\n\t\tif (source.theme) {\n\t\t\ttry {\n\t\t\t\tthis.applyTheme(source.theme);\n\t\t\t\tthis._theme = source.theme;\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`Theme init error: ${error}`);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// comments\n\t\tif (source.comments) {\n\t\t\ttry {\n\t\t\t\tthis.comments.populate(source.comments);\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`Comment init error: ${error}`);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// custom properties\n\t\tthis._properties = source.props;\n\n\t\t// additional properties\n\t\tthis.otherSourceData = {};\n\t\tconst defaultKeys = new Set(DEFAULT_SOURCE_KEYS);\n\t\tconst keys = Object.keys(source).filter(k => !defaultKeys.has(k));\n\t\tkeys.forEach(k => this.otherSourceData[k] = source[k]);\n\n\t\t// default sort\n\t\tif (this.options.sorting?.defaultSettings) {\n\t\t\tthis.sorting.settings = this.options.sorting.defaultSettings;\n\t\t}\n\n\t\t// default filter\n\t\tif (this.options.filters?.defaultSettings) {\n\t\t\tthis.filter.settings = this.options.filters.defaultSettings;\n\t\t}\n\n\t\tthis.calcHeaderHeights();\n\t}\n\n\tgetSourceData() {\n\t\tconst data = {\n\t\t\tindex: this.index,\n\t\t\tname: this.name,\n\t\t\ttab: this.tab,\n\t\t\tcolumns: this.columns.map(col => col.getSourceData()),\n\t\t\trows: this.rows.map(row => row.getSourceData()),\n\t\t\tstyles: this.styles.getSourceData(),\n\t\t\trules: this.conditionalFormats.getSourceData(),\n\t\t\tsparklines: this.sparklines.getSourceData(),\n\t\t\tnames: this.names.getSourceData(),\n\t\t\toptions: this.options,\n\t\t} as GridSource;\n\n\t\tif (this._properties) data.props = this._properties;\n\n\t\tconst cells = [];\n\t\tlet cellData: CellSource;\n\t\tfor (let r = 0; r < this.rows.length; r++) {\n\t\t\tfor (let c = 0; c < this.columns.length; c++) {\n\t\t\t\tcellData = this.rows[r].cell(c).getSourceData();\n\t\t\t\tif (Object.keys(cellData).length > 0) {\n\t\t\t\t\tcellData.r = r;\n\t\t\t\t\tcellData.c = c;\n\t\t\t\t\tcells.push(cellData);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (cells.length > 0) data.cells = cells;\n\t\t\n\t\tconst styles = [] as Style[];\n\t\tthis.styles.clean();\n\t\tthis.styles.map.forEach(style => styles.push(style));\n\t\tif (styles.length > 0) data.styles = styles;\n\n\t\tconst otherModelKeys = new Set([\n\t\t\t...Object.keys(this.otherModels ?? {}),\n\t\t\t...Object.keys(this.otherSourceData ?? {})\n\t\t]);\n\t\totherModelKeys.forEach(k => data[k] = this.otherModels[k] \n\t\t\t? Array.from(this.otherModels[k]).map(m => m.getSourceData())\n\t\t\t: this.otherSourceData[k]\n\t\t);\n\n\t\treturn data;\n\t}\n\n\tcalcHeaderHeights() {\n\t\tthis._headerCount = 0;\n\t\tthis._headerHeights = [];\n\t\tthis.columns.forEach((column) => {\n\t\t\tthis._headerCount = column.header ? column.header.length : this._headerCount;\n\t\t\tif (this._headerHeights.length < this._headerCount) {\n\t\t\t\tthis._headerHeights.push(...Array(this._headerCount - this._headerHeights.length).fill(0));\n\t\t\t}\n\n\t\t\tcolumn.header?.forEach((h: ColumnHeaderModel, r) => {\n\t\t\t\tif (r >= this._headerHeights.length) {\n\t\t\t\t\tthis._headerHeights.push(0);\n\t\t\t\t}\n\t\t\t\tthis._headerHeights[r] = Math.max(this._headerHeights[r], h.height ?? 0);\n\t\t\t});\n\t\t});\n\t}\n\n\tindexRows() {\n\t\tthis.visibleRows = [];\n\t\tthis.rows.forEach((row, r) => {\n\t\t\trow.index = r;\n\t\t\tif (!row.isLoaded) row.collapsed = true;\n\t\t\tif (!row.hidden && row.filterState != tree.FilterState.Filtered) {\n\t\t\t\trow.visibleIndex = this.visibleRows.length;\n\t\t\t\tthis.visibleRows.push(row);\n\t\t\t}\n\t\t});\n\t}\n\n\tindexVisibleRows() {\n\t\tthis.visibleRows = [];\n\t\tlet r = 0;\n\t\tif (this._levelBasedRowTree) {\n\t\t\tthis.rowRoot.walkVisible((node: RowModel) => {\n\t\t\t\tnode.visibleIndex = r++;\n\t\t\t\tthis.visibleRows.push(node)\n\t\t\t});\n\n\t\t\t// reverse order of row index\n\t\t\tif (this.options.rowTree.reversed) {\n\t\t\t\tconst reversedVisibleRows = new Array(this.visibleRows.length);\n\t\t\t\tthis.visibleRows.forEach((row, i) => {\n\t\t\t\t\tr = this.visibleRows.length - i - 1;\n\t\t\t\t\trow.visibleIndex = r;\n\t\t\t\t\treversedVisibleRows[r] = row;\n\t\t\t\t});\n\t\t\t\tthis.visibleRows = reversedVisibleRows;\n\t\t\t}\n\t\t} else {\n\t\t\t// in parent based node rows do not have to respect tree order\n\t\t\tthis.rowRoot.walkVisible((node: RowModel) => this.visibleRows[node.index] = node);\n\t\t\tthis.visibleRows = this.visibleRows.filter(row => {\n\t\t\t\tif (row) {\n\t\t\t\t\trow.visibleIndex = r++;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t}\n\n\tindexRowsByTree() {\n\t\tthis.rows = [];\n\t\tlet r = 0;\n\t\tthis.rowRoot.walk((row: RowModel) => {\n\t\t\trow.index = r++;\n\t\t\tthis.rows.push(row);\n\t\t});\n\t\tif (this.options.rowTree.reversed) this.rows.reverse();\n\t\tthis.indexVisibleRows();\n\t}\n\n\tindexColumns() {\n\t\tthis.visibleColumns = [];\n\t\tthis.columns.forEach((column, c) => {\n\t\t\tcolumn.index = c;\n\t\t\tif (!column.hidden) this.visibleColumns.push(column);\n\t\t});\n\t}\n\n\tindexVisibleColumns() {\n\t\tthis.visibleColumns = [];\n\t\tthis.visibleColumnIndex = {};\n\t\tlet c = 0;\n\t\tthis.colRoot.walkVisible((node: ColumnModel) => {\n\t\t\tnode.visibleIndex = c;\n\t\t\tthis.visibleColumnIndex[node.index] = c++;\n\t\t\tthis.visibleColumns.push(node);\n\t\t});\n\n\t\t// reverse order of column index\n\t\tif (this.options.columnTree.reversed) {\n\t\t\tthis.visibleColumnIndex = {};\n\t\t\tconst reversedVisibleColumns = new Array(this.visibleColumns.length);\n\t\t\tthis.visibleColumns.forEach((column, i) => {\n\t\t\t\tc = this.visibleColumns.length - i - 1;\n\t\t\t\tcolumn.visibleIndex = c;\n\t\t\t\tthis.visibleColumnIndex[column.index] = c;\n\t\t\t\treversedVisibleColumns[c] = column;\n\t\t\t});\n\t\t\tthis.visibleColumns = reversedVisibleColumns;\n\t\t}\n\n\t\tthis.indexHeaders();\n\t}\n\n\tindexHeaders() {\n\t\tthis._mergedHeaders = [];\n\t\tthis._headerCount = 0;\n\t\tthis.colRoot.walkVisible((column: ColumnModel) => {\n\t\t\tthis._headerCount = Math.max(column.header ? column.header.length : 0, this._headerCount);\n\t\t\tcolumn.mergedHeaders.forEach(h => this._mergedHeaders.push({\n\t\t\t\th: h,\n\t\t\t\tc: column.index,\n\t\t\t\tr: h.r,\n\t\t\t\tcs: column.calculateRealColspan(h.cs ?? 1),\n\t\t\t\trs: h.rs ?? 1\n\t\t\t}));\n\t\t});\n\n\t\t// hidden header cells\n\t\tthis._mergedHeaders.forEach(h => {\n\t\t\tif (h.h.hidden) return;\n\t\t\t\n\t\t\tfor (let c = h.c; c < h.c + h.cs; c++) {\n\t\t\t\tfor (let r = h.r; r < h.r + h.rs; r++) {\n\t\t\t\t\tif ((r > h.r || c > h.c) && this.columns[c] && this.columns[c].header[r]) {\n\t\t\t\t\t\tthis.columns[c].header[r].hidden = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tthis.calcHeaderHeights();\n\t}\n\n\tremoveHeader(r: number) {\n\t\tthis.columns.forEach(column => {\n\t\t\tif (r < column.header.length) column.header.splice(r, 1);\n\t\t});\n\t\tthis.indexHeaders();\n\t}\n\n\tclearRows = () : RowModel[] => {\n\t\tthis.rowRoot.clearChildren();\n\t\tthis.rows = [];\n\t\treturn this.rows;\n\t}\n\t\n\tclearColumns = () : ColumnModel[] => this.columns = [];\n\n\tclear() {\n\t\tthis.clearRows();\n\t\tthis.clearColumns();\n\t\tthis.resetViewport();\n\t}\n\n\tresetViewport() {\n\t\tthis._viewport = null;\n\t\treturn this;\n\t}\n\n\tgetViewport(\n\t\toffset: {c: number, r: number}, \n\t\tviewportSize: {w: number, h: number}, \n\t\tfreeze: {t: number, l: number, b: number, r: number},\n\t) : Viewport {\n\t\tconst viewportRows: RowModel[] = [];\n\t\tconst viewportColumns: ColumnModel[] = [];\n\n\t\tlet row: RowModel;\n\t\tlet remainingHeight = viewportSize.h;\n\t\tlet r = 0;\n\t\t// top rows\n\t\tfor (r = 0; r < freeze.t; r++) {\n\t\t\trow = this.visibleRows[r];\n\t\t\tremainingHeight -= row.height;\n\t\t\tviewportRows.push(row);\n\t\t}\n\n\t\t// bottom rows\n\t\tfor (r = this.visibleRows.length - freeze.b; r < this.visibleRows.length; r++) {\n\t\t\trow = this.visibleRows[r];\n\t\t\tremainingHeight -= row.height;\n\t\t}\n\n\t\t// center rows\n\t\tr = freeze.t + offset.r;\n\t\twhile (remainingHeight > 0 && r < this.visibleRows.length) {\n\t\t\trow = this.visibleRows[r++];\n\t\t\tremainingHeight -= row.height;\n\t\t\tviewportRows.push(row);\n\t\t}\n\n\t\t// bottom rows again\n\t\tfor (r = this.visibleRows.length - freeze.b; r < this.visibleRows.length; r++) {\n\t\t\tviewportRows.push(this.visibleRows[r]);\n\t\t}\n\n\t\tlet column: ColumnModel;\n\t\tlet remainingWidth = viewportSize.w;\n\t\tlet c = 0;\n\n\t\t// left columns\n\t\tfor (c = 0; c < freeze.l; c++) {\n\t\t\tcolumn = this.visibleColumns[c];\n\t\t\tremainingWidth -= column.width;\n\t\t\tviewportColumns.push(column);\n\t\t}\n\n\t\t// right columns\n\t\tfor (c = this.visibleColumns.length - freeze.r; c < this.visibleColumns.length; c++) {\n\t\t\tcolumn = this.visibleColumns[c];\n\t\t\tremainingWidth -= column.width;\n\t\t}\n\n\t\t// center columns\n\t\tc = freeze.l + offset.c;\n\t\twhile (remainingWidth > 0 && c < this.visibleColumns.length) {\n\t\t\tcolumn = this.visibleColumns[c++];\n\t\t\tremainingWidth -= column.width;\n\t\t\tviewportColumns.push(column);\n\t\t}\n\n\t\t// right columns again\n\t\tfor (c = this.visibleColumns.length - freeze.r; c < this.visibleColumns.length; c++) {\n\t\t\tviewportColumns.push(this.visibleColumns[c]);\n\t\t}\n\n\t\treturn (this._viewport = {rows: viewportRows, columns: viewportColumns});\n\t}\n\n\tcalculateViewport() {\n\t\treturn this._viewport ? this.calculations.calculateViewport(this._viewport) : [];\n\t}\n\n\tgetValuesInRange(range: CellRange, formattedValues = false) {\n\t\trange = range.intersect(this.gridRange);\n\t\tif (!range) return [];\n\t\tconst {columns, rows} = range.size;\n\t\tconst values: Matrix<unknown> = new Array(rows);\n\t\tlet i = 0, j = 0;\n\t\tlet row: RowModel;\n\t\tfor (let r = range.r1; r <= range.r2; r++) {\n\t\t\tvalues[i] = new Array(columns);\n\t\t\tj = 0;\n\t\t\trow = this.rows[r];\n\t\t\tfor (let c = range.c1; c <= range.c2; c++) {\n\t\t\t\tvalues[i][j++] = formattedValues ? row.cell(c).formattedValue : row.cell(c).value;\n\t\t\t}\n\t\t\t++i;\n\t\t}\n\n\t\treturn values;\n\t}\n\n\tsetRowExpandLevel(level: number) {\n\t\tthis.rows.forEach(row => {\n\t\t\trow.collapsed = (!row.isLoaded && !row.isPartialyLoaded) || row.level >= level;\n\t\t\tif (row.level <= level) row.hidden = false; // remove hidden flag for visible rows\n\t\t});\n\t\tthis.indexVisibleRows();\n\t}\n\t\n\tsetColumnExpandLevel(level: number) {\n\t\tthis.columns.forEach(column => column.collapsed = column.level >= level);\n\t\tthis.indexVisibleColumns();\n\t}\n\n\tgetViewportRange() {\n\t\treturn this._viewport && this._viewport.columns.length && this._viewport.rows.length ? new CellRange(\n\t\t\tthis._viewport.columns[0].index,\n\t\t\tthis._viewport.rows[0].index,\n\t\t\tthis._viewport.columns[this._viewport.columns.length - 1].index,\n\t\t\tthis._viewport.rows[this._viewport.rows.length - 1].index,\n\t\t) : null;\n\t}\n\n\tget gridRange() {\n\t\treturn new CellRange(0, 0, this.columns.length - 1, this.rows.length - 1);\n\t}\n\n\tgetRangeIterator(range: CellRange, withinViewport = false) {\n\t\tconst clip = withinViewport && this._viewport ? this.getViewportRange() : this.gridRange;\n\t\treturn new IterableRange(this, clip && range.intersect(clip));\n\t}\n\n\tgetInitializedCellIterator() {\n\t\treturn new IterableRange(this, this.gridRange, true);\n\t}\n\n\tgetRowIterator(range: CellRange, withinViewport = false) {\n\t\tconst clip = withinViewport && this._viewport ? this.getViewportRange() : this.gridRange;\n\t\treturn new IterableAxisRange<RowModel>(this, clip && range.intersect(clip), 'rows');\n\t}\n\n\tgetColumnIterator(range: CellRange, withinViewport = false) {\n\t\tconst clip = withinViewport && this._viewport ? this.getViewportRange() : this.gridRange;\n\t\treturn new IterableAxisRange<ColumnModel>(this, clip && range.intersect(clip), 'columns');\n\t}\n\n\tgetCellArray(range: CellRange) {\n\t\tconst cells: CellModel[] = [];\n\t\tfor (const cell of this.getRangeIterator(range)) {\n\t\t\tcells.push(cell);\n\t\t}\n\t\treturn cells;\n\t}\n\n\ttransformRangeToMatrix<T>(range: CellRange, transform: (cell: CellModel) => T): Matrix<T> {\n\t\tlet row: RowModel, cell: CellModel, rowValues: T[];\n\t\trange = range.intersect(this.gridRange);\n\t\tconst cells: Matrix<T> = [];\n\t\tfor (let r = range.r1; r <= range.r2; r++) {\n\t\t\trow = this.rows[r];\n\t\t\tif (!row) continue;\n\t\t\trowValues = [];\n\t\t\tfor (let c = range.c1; c <= range.c2; c++) {\n\t\t\t\tcell = row.cell(c);\n\t\t\t\tif (cell) rowValues.push(transform(cell));\n\t\t\t}\t\n\t\t\tcells.push(rowValues);\n\t\t}\n\t\treturn cells;\n\t}\n\n\tgetCellMatrix(range: CellRange) {\n\t\treturn this.getModelByRange(range)?.transformRangeToMatrix(range, c => c);\n\t}\n\n\tgetValueMatrix(range: CellRange) {\n\t\treturn this.getModelByRange(range)?.transformRangeToMatrix(range, c => c.value);\n\t}\n\n\tshift(options: ShiftOptions) {\n\t\toptions.sheet = this.name;\n\t\tthis.merges.shift(options);\n\t\tthis.calculations.shift(options);\n\t\tthis.names.shift(options);\n\t\tthis.comments.shift(options);\n\t\tthis.sparklines.shift(options);\n\t}\n\n\tclearCalculations(all = false) {\n\t\tif (all && this.group) this.group.models.forEach(m => m.calculations.refresh());\n\t\telse this.calculations.refresh();\n\t}\n\n\trefreshSparklines() {\n\t\tthis.sparklines.updateRangeMaps();\n\t\tfor (const cell of this.getInitializedCellIterator()) {\n\t\t\tcell.invalidateStyle();\n\t\t}\n\t}\n\n\tclearCalculatedStyles() {\n\t\tthis.conditionalFormats.refresh();\n\t\tconst cells = [] as CellModel[];\n\t\tfor (const cell of this.getInitializedCellIterator()) {\n\t\t\tcells.push(cell);\n\t\t\tcell.invalidateStyle();\n\t\t}\n\t}\n\n\tinsertColumns(index: number, count: number, after = false) {\n\t\tconst parent = this.columns[Math.min(this.columns.length - 1, index)].parent;\n\t\tif (after) ++index;\n\t\tthis.shift({index: index, offset: count, direction: 'right'});\n\t\tfor (let r = 0; r < this.rows.length; r++) this.rows[r].insertColumns(index, count, false);\n\t\tconst newColumns = (new Array(count)).fill(null).map(() => new ColumnModel(this));\n\t\tthis.columns.splice(index, 0, ...newColumns);\n\t\tif (this.maxColumnLevel > 0) parent.insertChildren(newColumns, index - (parent.index || -1) - 1);\n\t\tthis.indexColumns();\n\t\tthis.clearCalculations(true);\n\t\treturn newColumns;\n\t}\n\n\tdeleteColumns(index: number, count: number) {\n\t\tconst parent = this.columns[index].parent;\n\t\tthis.shift({index: index, offset: count, direction: 'left'});\n\t\tconst deletedCells: CellModel[][] = [];\n\t\tfor (let r = 0; r < this.rows.length; r++)\n\t\t\tdeletedCells.push(this.rows[r].deleteColumns(index, count, false));\n\t\t// const deletedColumns: [ColumnModel, CellModel[]][] = this.columns.splice(index, count)\n\t\t// \t.map((column, i) => [column, deletedCells[i]]);\n\t\tconst deletedColumns = this.columns.splice(index, count);\n\t\tparent?.deleteChildren(deletedColumns);\n\t\tthis.indexColumns();\n\t\tthis.clearCalculations(true);\n\t\treturn deletedColumns;\n\t}\n\n\tinsertRows(index: number, rows: number|RowModel[], after = false) {\n\t\tconst parentIndex = Math.min(this.rows.length - 1, index);\n\t\tconst parent = parentIndex < 0 ? this.rowRoot : this.rows[parentIndex].parent;\n\t\tif (after) ++index;\n\t\tconst count = isNaN(rows as number) ? (rows as RowModel[]).length : rows as number;\n\t\tthis.shift({index: index, offset: count, direction: 'down'});\n\t\tconst newRows = isNaN(rows as number) ? (rows as RowModel[]) : (new Array(count)).fill(null).map(() => new RowModel(this));\n\t\tthis.rows.splice(index, 0, ...newRows);\n\t\tif (this.maxRowLevel > 0) parent.insertChildren(newRows, index - (parent.index || -1) - 1);\n\t\tthis.indexRows();\n\t\tif (this.theme) {\n\t\t\tapplyRowTheme(this.theme, this, newRows);\n\t\t\tapplyCellTheme(this.theme, this, new CellRange(0, newRows[0].index, Infinity, newRows[newRows.length - 1].index));\n\t\t}\n\t\tthis.clearCalculations(true);\n\t\treturn newRows;\n\t}\n\n\tdeleteRows(index: number, count: number) {\n\t\tconst parent = this.rows[index].parent;\n\t\tthis.shift({index: index, offset: count, direction: 'up'});\n\t\tconst deletedRows = this.rows.splice(index, count);\n\t\tparent?.deleteChildren(deletedRows);\n\t\tthis.indexRows();\n\t\tthis.clearCalculations(true);\n\t\treturn deletedRows;\n\t}\n\n\tmoveRows(index: number, count: number, targetIndex: number) {\n\t\tconst movingRows = this.rows.splice(index, count);\n\t\tthis.rows.splice(targetIndex, 0, ...movingRows);\n\t\tthis.shift({index: index, offset: targetIndex - index, direction: 'down', maxIndex: index + count - 1});\n\t\tthis.indexRows();\n\t\tthis.clearCalculations(true);\n\t\treturn movingRows;\n\t}\n\n\tmoveColumns(index: number, count: number, targetIndex: number) {\n\t\tconst movingColumns = this.columns.splice(index, count);\n\t\tthis.columns.splice(targetIndex, 0, ...movingColumns);\n\t\tthis.shift({index: index, offset: targetIndex - index, direction: 'right', maxIndex: index + count - 1});\n\t\tthis.indexColumns();\n\t\tthis.clearCalculations(true);\n\t\treturn movingColumns;\n\t}\n\n\tspillValues(opt: SpillOptions): SpillResult {\n\t\tconst {cell, values, displayValues, propertyCell} = opt;\n\t\tconst cells: CellModel[] = [];\n\t\tconst oldValues: CellValueType[] = [];\n\t\tconst empty = values.length === 0 || values[0].length === 0;\n\t\tlet row: RowModel, spillCell: CellModel;\n\n\t\tconst range = empty ? null : new CellRange(\n\t\t\tcell.c, cell.r,\n\t\t\tcell.c + values[0].length - 1,\n\t\t\tcell.r + values.length - 1\n\t\t)\n\n\t\tif (cell.spillRange) {\n\t\t\t// clear values from previous evaluations not contained in the new spill range\n\t\t\tthis.getRangeIterator(cell.spillRange, true).forEach(c => {\n\t\t\t\tif (cell != c && !range?.contains(c.range)) c.clearSpilledValue();\n\t\t\t});\n\t\t}\n\n\t\tcell.spillRange = range;\n\t\tif (empty) return {cells, oldValues, range: null};\n\n\t\tfor (let r = range.r1; r <= range.r2; r++) {\n\t\t\trow = this.rows[r];\n\t\t\tif (!row) continue;\n\t\t\tconst r2 = r - range.r1;\n\t\t\tfor (let c = range.c1; c <= range.c2; c++) {\n\t\t\t\tconst c2 = c - range.c1;\n\t\t\t\tspillCell = row.cell(c);\n\t\t\t\tif (spillCell.editable) {\n\t\t\t\t\toldValues.push(spillCell.value2 as CellValueType);\n\t\t\t\t\tspillCell.spillValue(values[r2][c2], cell);\n\t\t\t\t\tif (propertyCell) {\n\t\t\t\t\t\tspillCell.format = propertyCell.format;\n\t\t\t\t\t\tspillCell.type = propertyCell.type;\n\t\t\t\t\t}\n\t\t\t\t\tif (displayValues && displayValues[r2][c2] != null) spillCell.displayValue = displayValues[r2][c2];\n\t\t\t\t\tcells.push(spillCell);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {cells, oldValues, range};\n\t}\n\n\tgetCellByName(name: string, contextRange: CellRange, searchGroup = true): CellModel {\n\t\tconst cell = this.names.getCellByName(name, contextRange);\n\t\tif (cell) return cell;\n\t\telse if (this.group && searchGroup) return this.group.getCellByName(name, contextRange);\n\t\treturn null;\n\t}\n\n\tgetRangeByName(name: string, searchGroup = true): CellRange {\n\t\tconst range = this.names.getRangeByName(name);\n\t\tif (range) return range;\n\t\telse if (this.group && searchGroup) return this.group.getRangeByName(name);\n\t\treturn null;\n\t}\n\n\tgetValueMatrixByName(name: string, searchGroup = true): Matrix<unknown> {\n\t\tconst matrix = this.names.getRangeByName(name);\n\t\tif (matrix) return this.getValueMatrix(matrix);\n\t\telse if (this.group && searchGroup) return this.group.getValueMatrixByName(name);\n\t\treturn null;\n\t}\n\n\trebuildRowTree() {\n\t\tconst buildFunction = this._levelBasedRowTree ? tree.buildLevelBasedTree : tree.buildParentBasedTree;\n\t\tthis._maxRowLevel = buildFunction(this.rows, this.rowRoot, {\n\t\t\treverse: this.options.rowTree.reversed\n\t\t});\n\t\tthis.indexRowsByTree();\n\t}\n\n\trebuildColumnTree() {\n\t\tconst buildFunction = this._levelBasedColTree ? tree.buildLevelBasedTree : tree.buildParentBasedTree;\n\t\tthis._maxColumnLevel = buildFunction(this.columns, this.colRoot, {\n\t\t\treverse: this.options.columnTree.reversed\n\t\t});\n\t\tthis.indexColumns();\n\t}\n\n\tcalculateCellOffset(cell: CellRange) : Location {\n\t\tlet x = 0, y = 0;\n\t\tfor (let c = 0; c < cell.c1; c++) {\n\t\t\tif (!this.columns[c]) break;\n\t\t\tx += this.columns[c].width;\n\t\t}\n\t\tfor (let r = 0; r < cell.r1; r++) {\n\t\t\tif (!this.rows[r]) break;\n\t\t\ty += this.rows[r].height;\n\t\t}\n\t\treturn { x, y };\n\t}\n\n}"]}
|
|
1
|
+
{"version":3,"file":"gridModel.js","sourceRoot":"","sources":["../../src/model/gridModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix, tree, CustomProperties, Location, Model } from \"@omegagrid/core\";\nimport { log } from \"@omegagrid/core\";\nimport { CellValueType, ShiftOptions, SpillOptions, SpillResult, TabOptions } from \"../types\";\nimport { CalculationModel } from \"./calculationModel\";\nimport { CellRange } from \"../common/range\";\nimport { ConditionalFormats, ConditionalFormatSource } from \"./conditionalFormats\";\nimport { Sparklines, SparklineSource } from \"../sparklines/sparklines\";\nimport { CellModel, CellSource } from \"./cellModel\";\nimport { ColumnModel, ColumnHeaderModel, ColumnSource } from \"./columnModel\";\nimport { GroupModel } from \"./groupModel\";\nimport { CommentModel, CommentSource } from \"./commentModel\";\nimport { IterableAxisRange, IterableRange } from \"./iterableRange\";\nimport { NameSource, NamingModel } from \"./namingModel\";\nimport { initOptions, Options, OptionSource } from \"./options\";\nimport { RowModel, RowSource } from \"./rowModel\";\nimport { Style } from \"./style\";\nimport { StyleModel } from \"./styleModel\";\nimport { TableTheme, applyCellTheme, applyColumnTheme, applyRowTheme, applyTheme } from \"./tableTheme\";\nimport { SortingModel } from \"./sortingModel\";\nimport { Merge, Merges } from \"./merges\";\nimport { FilterModel } from \"./filterModel\";\n\n\n/** Source object type for grid */\nexport type GridSource = {\n\t/** grid index with group (readonly) */\n\tindex?: number,\n\t/** sheet name */\n\tname?: string,\n\t/** row array */\n\trows?: RowSource[],\n\t/** column array */\n\tcolumns?: ColumnSource[],\n\t/** cell array */\n\tcells?: CellSource[],\n\t/** grid options */\n\toptions?: OptionSource,\n\t/** sprakline definitions */\n\tsparklines?: SparklineSource[],\n\t/** conditional format definitions */\n\trules?: ConditionalFormatSource,\n\t/** comment array */\n\tcomments?: CommentSource[],\n\t/** style array */\n\tstyles?: Style[],\n\t/** renge names */\n\tnames?: NameSource[],\n\t/** custom properties */\n\tprops?: CustomProperties,\n\t/** tab settings used when grid is within group */\n\ttab?: TabOptions,\n\t/** table theme */\n\ttheme?: TableTheme,\n\t/** additional properties */\n\t[key: string]: unknown\n};\n\nconst DEFAULT_SOURCE_KEYS = [\n\t'index', 'name', 'rows', 'columns', 'cells', 'options', 'sparklines',\n\t'rules', 'comments', 'styles', 'names', 'props', 'tab', 'theme'\n];\n\nexport type Viewport = {\n\trows: RowModel[];\n\tcolumns: ColumnModel[];\n};\n\n/** the lowest and the highest index of the elements (a loop - the arrays may be large) */\nfunction indexBounds(elements: (RowModel|ColumnModel)[]): [number, number] {\n\tlet first = Infinity, last = -Infinity;\n\tfor (const element of elements) {\n\t\tif (element.index < first) first = element.index;\n\t\tif (element.index > last) last = element.index;\n\t}\n\treturn [first, last];\n}\n\nexport class GridModel implements Model<GridSource> {\n\t\n\tindex: number;\n\tname: string;\n\ttab: TabOptions;\n\trows: RowModel[];\n\tvisibleRows: RowModel[];\n\trowRoot: RowModel;\n\tcolRoot: ColumnModel;\n\tcolumns: ColumnModel[];\n\tvisibleColumns: ColumnModel[];\n\tvisibleColumnIndex: Record<number, number>;\n\totherSourceData: Record<string, unknown>;\n\totherModels: Record<string, Set<Model>> = {};\n\tautofitColumns: Set<number> = new Set();\n\tautofitRows: Set<number> = new Set();\n\n\treadonly merges = new Merges(this);\n\treadonly styles = new StyleModel(this);\n\treadonly comments = new CommentModel(this);\n\treadonly calculations = new CalculationModel(this);\n\treadonly names = new NamingModel(this);\n\treadonly sorting = new SortingModel(this);\n\treadonly filter = new FilterModel(this);\n\treadonly sparklines = new Sparklines(this);\n\treadonly conditionalFormats = new ConditionalFormats(this);\n\n\tprivate _mergedHeaders: (Merge & {h: ColumnHeaderModel})[];\n\tget mergedHeaders() { return this._mergedHeaders }\n\t\n\tprivate _filter = false\n\tget hasFilter() { return this._filter }\n\t\n\tprivate _maxRowLevel = 0;\n\tget hasRowTree() { return this._maxRowLevel > 0 }\n\tget hasRowTreeEnabled() { return this.hasRowTree && this.options.rowTree.enabled }\n\tget maxRowLevel() { return this._maxRowLevel }\n\t\n\tprivate _maxColumnLevel = 0;\n\tget hasColumnTree() { return this._maxColumnLevel > 0 }\n\tget hasColumnTreeEnabled() { return this.hasColumnTree && this.options.columnTree.enabled }\n\tget maxColumnLevel() { return this._maxColumnLevel }\n\t\n\tprivate _headerCount = 0;\n\tprivate _headerHeights: number[];\n\tget headerCount() { return this._headerCount }\n\tget columnHeaderCount() { return this.headerCount + (this.hasColumnTreeEnabled ? 1 : 0) + (this.hasFilter ? 1 : 0) }\n\n\tprivate _viewport: Viewport;\n\tprivate _levelBasedRowTree = true;\n\tprivate _levelBasedColTree = true;\n\n\tprotected _properties: CustomProperties;\n\tget properties() { return this._properties }\n\tset properties(v: CustomProperties) { this._properties = v }\n\n\tprotected _theme: TableTheme;\n\tget theme() { return this._theme }\n\tset theme(v: TableTheme) { this._theme = v }\n\n\tpublic readonly logger: log.Logger;\n\tpublic options: Options;\n\n\tget formulasEnabled() { return this.options.formulas !== false }\n\tpublic group: GroupModel;\n\n\tconstructor(source: GridSource, options?: Options, logger?: log.Logger) {\n\t\tthis.logger = logger;\n\t\tthis.options = options ?? initOptions(source.options);\n\t\tthis.populate(source);\n\t}\n\n\tgetConnectedModel(name: string) {\n\t\treturn this.group ? this.group.get(name) : null;\n\t}\n\n\tgetModelByRange(range: CellRange) {\n\t\treturn range.sheet ? this.getConnectedModel(range.sheet) : this;\n\t}\n\n\tgetCellByA1(a1: string) {\n\t\treturn this.getCellByRange(CellRange.fromA1(a1));\n\t}\n\n\tgetCellByRange(r: CellRange) {\n\t\treturn this.getCellByCoords(r.r1, r.c1);\n\t}\n\n\tgetCellByCoords(r: number, c: number) {\n\t\treturn this.rows[r]?.cell(c);\n\t}\n\n\tcell(coord1: string|number|CellRange, coord2?: number) {\n\t\tif (!isNaN(coord1 as number)) return this.getCellByCoords(coord1 as number, coord2 || 0);\n\t\tif (coord1 instanceof CellRange) return this.getCellByRange(coord1);\n\t\tif (typeof coord1 === 'string') return this.getCellByA1(coord1);\n\t\treturn null;\n\t}\n\n\tcreateRows(source: RowSource[], root = new RowModel(this, {l: -1}), indexOffset = 0) : [RowModel, RowModel[], number, boolean] {\n\t\tlet hasRowLevelBasedTree = false;\n\t\tlet hasRowParentBasedTree = false;\n\t\tthis.autofitRows.clear();\n\n\t\tconst rows = source.map((rowSource, r) => {\n\t\t\tif (!rowSource) rowSource = {};\n\t\t\tif (!isNaN(rowSource.l)) hasRowLevelBasedTree = true;\n\t\t\tif (rowSource.p != null) hasRowParentBasedTree = true;\n\t\t\tif (rowSource.h == 'auto') this.autofitRows.add(r);\n\t\t\tconst rowModel = new RowModel(this, rowSource);\n\t\t\trowModel.origIndex = r + indexOffset;\n\t\t\tif (rowModel.name) this.names.set(rowModel.name, CellRange.fullRow(r));\n\t\t\treturn rowModel;\n\t\t});\n\t\t\n\t\tlet maxRowLevel = -1;\n\t\tif (hasRowLevelBasedTree) maxRowLevel = tree.buildLevelBasedTree(rows, root, {\n\t\t\treverse: this.options.rowTree.reversed\n\t\t});\n\t\telse if (hasRowParentBasedTree) maxRowLevel = tree.buildParentBasedTree(rows, root);\n\t\telse root.children = rows;\n\n\t\tif (!hasRowParentBasedTree) hasRowLevelBasedTree = true; // default to level based tree\n\t\treturn [root, rows, maxRowLevel, hasRowLevelBasedTree];\n\t}\n\n\tinsertRowData(parent: RowModel, offset: number, source: RowSource[]) {\n\t\tconst res = this.createRows(source, new RowModel(this, {l: parent.level}), offset);\n\t\tthis._maxRowLevel = Math.max(this._maxRowLevel, res[2]);\n\t\tparent.insertChildren(res[0].children, offset);\n\t\tthis.indexRowsByTree();\n\t\tthis.applyThemeToRows(res[1]);\n\t}\n\n\tapplyTheme(theme: TableTheme, invalidateCellStyles?: boolean) {\n\t\tif (invalidateCellStyles) {\n\t\t\tfor (const cell of this.getInitializedCellIterator()) {\n\t\t\t\tcell.invalidateStyle();\n\t\t\t}\n\t\t}\n\t\tapplyTheme(theme, this);\n\t}\n\n\t/**\n\t * Applies the table theme onto the given rows only - inserted rows or rows\n\t * whose level changed: the row items are matched again and the cell items\n\t * are applied over their cells, whose cached styles are dropped. Does\n\t * nothing without a theme.\n\t */\n\tapplyThemeToRows(rows: RowModel[]) {\n\t\tif (!this.theme || !rows.length) return;\n\t\tconst [first, last] = indexBounds(rows);\n\t\tconst range = new CellRange(0, first, Infinity, last);\n\t\tapplyRowTheme(this.theme, this, rows);\n\t\tapplyCellTheme(this.theme, this, range);\n\t\tthis.invalidateCellStyles(range);\n\t}\n\n\t/** the column counterpart of applyThemeToRows */\n\tapplyThemeToColumns(columns: ColumnModel[]) {\n\t\tif (!this.theme || !columns.length) return;\n\t\tconst [first, last] = indexBounds(columns);\n\t\tconst range = new CellRange(first, 0, last, Infinity);\n\t\tapplyColumnTheme(this.theme, this, columns);\n\t\tapplyCellTheme(this.theme, this, range);\n\t\tthis.invalidateCellStyles(range);\n\t}\n\n\tprivate invalidateCellStyles(range: CellRange) {\n\t\tfor (const cell of new IterableRange(this, range.intersect(this.gridRange), true)) cell.invalidateStyle();\n\t}\n\n\tpopulate(source: GridSource) {\n\t\tthis.index = source.index;\n\t\tthis.name = source.name ?? this.name;\n\t\tthis.tab = source.tab;\n\t\t\n\t\tlet hasColLevelBasedTree = false;\n\t\tlet hasColParentBasedTree = false;\n\n\t\tif (!source.columns) source.columns = new Array(this.options.columns).fill({});\n\t\tif (!source.rows) source.rows = new Array(this.options.rows).fill({});\n\n\t\t// styles\n\t\tif (source.styles) this.styles.populate(source.styles);\n\t\t\n\t\t// columns\n\t\tthis.autofitColumns.clear();\n\t\tthis.columns = source.columns.map((columnSource, c) => {\n\t\t\tif (!columnSource) columnSource = {};\n\t\t\tif (columnSource.l !== 0 && columnSource.l != null) hasColLevelBasedTree = true;\n\t\t\tif (columnSource.p != null) hasColParentBasedTree = true;\n\t\t\tif (columnSource.w == 'auto') this.autofitColumns.add(c);\n\t\t\tconst colModel = new ColumnModel(this, columnSource);\n\t\t\tthis._filter = colModel.hasFilter || this._filter;\n\t\t\tif (colModel.name) this.names.set(colModel.name, CellRange.fullColumn(c));\n\t\t\treturn colModel;\n\t\t});\n \n\t\tthis._levelBasedColTree = hasColLevelBasedTree;\n\t\tthis._maxColumnLevel = -1;\n\t\tthis.colRoot = new ColumnModel(this, {l: -1});\n\t\tif (hasColLevelBasedTree) this._maxColumnLevel = tree.buildLevelBasedTree(this.columns, this.colRoot, {\n\t\t\treverse: this.options.columnTree.reversed\n\t\t});\n\t\telse if (hasColParentBasedTree) this._maxColumnLevel = tree.buildParentBasedTree(this.columns, this.colRoot);\n\t\telse this.colRoot.children = this.columns;\n\t\t\n\t\tif (!hasColParentBasedTree) this._levelBasedColTree = true; // default to level based tree\n\n\t\tthis.indexColumns();\n\t\tthis.indexVisibleColumns();\n\n\t\t// rows\n\t\t[this.rowRoot, this.rows, this._maxRowLevel, this._levelBasedRowTree] = this.createRows(source.rows);\n\t\tthis.indexRows();\n\t\tthis.indexVisibleRows();\n\t\tif (this.options.pageSize && this.options.pageSize <= this.rows.length) this.rowRoot.count = Infinity;\n\n\t\t// cells\n\t\tthis.merges.clear();\n\t\tsource.comments = source.comments || [];\n\t\tsource.cells?.forEach((cellSource, i) => {\n\t\t\tconst cell = this.rows[cellSource.r] ? this.rows[cellSource.r].cell(cellSource.c, cellSource) : null;\n\t\t\tif (!cell) {\n\t\t\t\tthis.logger?.error(`invalid cell definition (index ${i}): ${JSON.stringify(cellSource)}`);\n\t\t\t} else if (cellSource.cs > 1 || cellSource.rs > 1) {\n\t\t\t\tthis.merges.add({r: cell.r, c: cell.c, rs: cellSource.rs || 1, cs: cellSource.cs || 1});\n\t\t\t}\n\n\t\t\tif (cell && cellSource.comment) {\n\t\t\t\tsource.comments.push(Object.assign(cellSource.comment, {c: cellSource.c, r: cellSource.r}));\n\t\t\t}\n\t\t});\n\t\t\n\t\t// sparklines\n\t\tif (source.sparklines) {\n\t\t\ttry {\n\t\t\t\tthis.sparklines.populate(source.sparklines);\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`Sparkline init error: ${error}`);\n\t\t\t}\n\t\t}\n\n\t\t// names\n\t\tif (source.names) {\n\t\t\ttry {\n\t\t\t\tthis.names.populate(source.names);\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`Named range init error: ${error}`);\n\t\t\t}\n\t\t}\n\n\t\t// conditional formats\n\t\tif (source.rules) {\n\t\t\ttry {\n\t\t\t\tthis.conditionalFormats.populate(source.rules);\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`Conditional formats init error: ${error}`);\n\t\t\t}\n\t\t}\n\n\t\t// theme\n\t\tif (source.theme) {\n\t\t\ttry {\n\t\t\t\tthis.applyTheme(source.theme);\n\t\t\t\tthis._theme = source.theme;\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`Theme init error: ${error}`);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// comments\n\t\tif (source.comments) {\n\t\t\ttry {\n\t\t\t\tthis.comments.populate(source.comments);\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`Comment init error: ${error}`);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// custom properties\n\t\tthis._properties = source.props;\n\n\t\t// additional properties\n\t\tthis.otherSourceData = {};\n\t\tconst defaultKeys = new Set(DEFAULT_SOURCE_KEYS);\n\t\tconst keys = Object.keys(source).filter(k => !defaultKeys.has(k));\n\t\tkeys.forEach(k => this.otherSourceData[k] = source[k]);\n\n\t\t// default sort\n\t\tif (this.options.sorting?.defaultSettings) {\n\t\t\tthis.sorting.settings = this.options.sorting.defaultSettings;\n\t\t}\n\n\t\t// default filter\n\t\tif (this.options.filters?.defaultSettings) {\n\t\t\tthis.filter.settings = this.options.filters.defaultSettings;\n\t\t}\n\n\t\tthis.calcHeaderHeights();\n\t}\n\n\tgetSourceData() {\n\t\tconst data = {\n\t\t\tindex: this.index,\n\t\t\tname: this.name,\n\t\t\ttab: this.tab,\n\t\t\tcolumns: this.columns.map(col => col.getSourceData()),\n\t\t\trows: this.rows.map(row => row.getSourceData()),\n\t\t\tstyles: this.styles.getSourceData(),\n\t\t\trules: this.conditionalFormats.getSourceData(),\n\t\t\tsparklines: this.sparklines.getSourceData(),\n\t\t\tnames: this.names.getSourceData(),\n\t\t\toptions: this.options,\n\t\t} as GridSource;\n\n\t\tif (this._properties) data.props = this._properties;\n\n\t\tconst cells = [];\n\t\tlet cellData: CellSource;\n\t\tfor (let r = 0; r < this.rows.length; r++) {\n\t\t\tfor (let c = 0; c < this.columns.length; c++) {\n\t\t\t\tcellData = this.rows[r].cell(c).getSourceData();\n\t\t\t\tif (Object.keys(cellData).length > 0) {\n\t\t\t\t\tcellData.r = r;\n\t\t\t\t\tcellData.c = c;\n\t\t\t\t\tcells.push(cellData);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (cells.length > 0) data.cells = cells;\n\t\t\n\t\tconst styles = [] as Style[];\n\t\tthis.styles.clean();\n\t\tthis.styles.map.forEach(style => styles.push(style));\n\t\tif (styles.length > 0) data.styles = styles;\n\n\t\tconst otherModelKeys = new Set([\n\t\t\t...Object.keys(this.otherModels ?? {}),\n\t\t\t...Object.keys(this.otherSourceData ?? {})\n\t\t]);\n\t\totherModelKeys.forEach(k => data[k] = this.otherModels[k] \n\t\t\t? Array.from(this.otherModels[k]).map(m => m.getSourceData())\n\t\t\t: this.otherSourceData[k]\n\t\t);\n\n\t\treturn data;\n\t}\n\n\tcalcHeaderHeights() {\n\t\tthis._headerCount = 0;\n\t\tthis._headerHeights = [];\n\t\tthis.columns.forEach((column) => {\n\t\t\tthis._headerCount = column.header ? column.header.length : this._headerCount;\n\t\t\tif (this._headerHeights.length < this._headerCount) {\n\t\t\t\tthis._headerHeights.push(...Array(this._headerCount - this._headerHeights.length).fill(0));\n\t\t\t}\n\n\t\t\tcolumn.header?.forEach((h: ColumnHeaderModel, r) => {\n\t\t\t\tif (r >= this._headerHeights.length) {\n\t\t\t\t\tthis._headerHeights.push(0);\n\t\t\t\t}\n\t\t\t\tthis._headerHeights[r] = Math.max(this._headerHeights[r], h.height ?? 0);\n\t\t\t});\n\t\t});\n\t}\n\n\tindexRows() {\n\t\tthis.visibleRows = [];\n\t\tthis.rows.forEach((row, r) => {\n\t\t\trow.index = r;\n\t\t\tif (!row.isLoaded) row.collapsed = true;\n\t\t\tif (!row.hidden && row.filterState != tree.FilterState.Filtered) {\n\t\t\t\trow.visibleIndex = this.visibleRows.length;\n\t\t\t\tthis.visibleRows.push(row);\n\t\t\t}\n\t\t});\n\t}\n\n\tindexVisibleRows() {\n\t\tthis.visibleRows = [];\n\t\tlet r = 0;\n\t\tif (this._levelBasedRowTree) {\n\t\t\tthis.rowRoot.walkVisible((node: RowModel) => {\n\t\t\t\tnode.visibleIndex = r++;\n\t\t\t\tthis.visibleRows.push(node)\n\t\t\t});\n\n\t\t\t// reverse order of row index\n\t\t\tif (this.options.rowTree.reversed) {\n\t\t\t\tconst reversedVisibleRows = new Array(this.visibleRows.length);\n\t\t\t\tthis.visibleRows.forEach((row, i) => {\n\t\t\t\t\tr = this.visibleRows.length - i - 1;\n\t\t\t\t\trow.visibleIndex = r;\n\t\t\t\t\treversedVisibleRows[r] = row;\n\t\t\t\t});\n\t\t\t\tthis.visibleRows = reversedVisibleRows;\n\t\t\t}\n\t\t} else {\n\t\t\t// in parent based node rows do not have to respect tree order\n\t\t\tthis.rowRoot.walkVisible((node: RowModel) => this.visibleRows[node.index] = node);\n\t\t\tthis.visibleRows = this.visibleRows.filter(row => {\n\t\t\t\tif (row) {\n\t\t\t\t\trow.visibleIndex = r++;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t}\n\n\tindexRowsByTree() {\n\t\tthis.rows = [];\n\t\tlet r = 0;\n\t\tthis.rowRoot.walk((row: RowModel) => {\n\t\t\trow.index = r++;\n\t\t\tthis.rows.push(row);\n\t\t});\n\t\tif (this.options.rowTree.reversed) this.rows.reverse();\n\t\tthis.indexVisibleRows();\n\t}\n\n\tindexColumns() {\n\t\tthis.visibleColumns = [];\n\t\tthis.columns.forEach((column, c) => {\n\t\t\tcolumn.index = c;\n\t\t\tif (!column.hidden) this.visibleColumns.push(column);\n\t\t});\n\t}\n\n\tindexVisibleColumns() {\n\t\tthis.visibleColumns = [];\n\t\tthis.visibleColumnIndex = {};\n\t\tlet c = 0;\n\t\tthis.colRoot.walkVisible((node: ColumnModel) => {\n\t\t\tnode.visibleIndex = c;\n\t\t\tthis.visibleColumnIndex[node.index] = c++;\n\t\t\tthis.visibleColumns.push(node);\n\t\t});\n\n\t\t// reverse order of column index\n\t\tif (this.options.columnTree.reversed) {\n\t\t\tthis.visibleColumnIndex = {};\n\t\t\tconst reversedVisibleColumns = new Array(this.visibleColumns.length);\n\t\t\tthis.visibleColumns.forEach((column, i) => {\n\t\t\t\tc = this.visibleColumns.length - i - 1;\n\t\t\t\tcolumn.visibleIndex = c;\n\t\t\t\tthis.visibleColumnIndex[column.index] = c;\n\t\t\t\treversedVisibleColumns[c] = column;\n\t\t\t});\n\t\t\tthis.visibleColumns = reversedVisibleColumns;\n\t\t}\n\n\t\tthis.indexHeaders();\n\t}\n\n\tindexHeaders() {\n\t\tthis._mergedHeaders = [];\n\t\tthis._headerCount = 0;\n\t\tthis.colRoot.walkVisible((column: ColumnModel) => {\n\t\t\tthis._headerCount = Math.max(column.header ? column.header.length : 0, this._headerCount);\n\t\t\tcolumn.mergedHeaders.forEach(h => this._mergedHeaders.push({\n\t\t\t\th: h,\n\t\t\t\tc: column.index,\n\t\t\t\tr: h.r,\n\t\t\t\tcs: column.calculateRealColspan(h.cs ?? 1),\n\t\t\t\trs: h.rs ?? 1\n\t\t\t}));\n\t\t});\n\n\t\t// hidden header cells\n\t\tthis._mergedHeaders.forEach(h => {\n\t\t\tif (h.h.hidden) return;\n\t\t\t\n\t\t\tfor (let c = h.c; c < h.c + h.cs; c++) {\n\t\t\t\tfor (let r = h.r; r < h.r + h.rs; r++) {\n\t\t\t\t\tif ((r > h.r || c > h.c) && this.columns[c] && this.columns[c].header[r]) {\n\t\t\t\t\t\tthis.columns[c].header[r].hidden = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tthis.calcHeaderHeights();\n\t}\n\n\tremoveHeader(r: number) {\n\t\tthis.columns.forEach(column => {\n\t\t\tif (r < column.header.length) column.header.splice(r, 1);\n\t\t});\n\t\tthis.indexHeaders();\n\t}\n\n\tclearRows = () : RowModel[] => {\n\t\tthis.rowRoot.clearChildren();\n\t\tthis.rows = [];\n\t\treturn this.rows;\n\t}\n\t\n\tclearColumns = () : ColumnModel[] => this.columns = [];\n\n\tclear() {\n\t\tthis.clearRows();\n\t\tthis.clearColumns();\n\t\tthis.resetViewport();\n\t}\n\n\tresetViewport() {\n\t\tthis._viewport = null;\n\t\treturn this;\n\t}\n\n\tgetViewport(\n\t\toffset: {c: number, r: number}, \n\t\tviewportSize: {w: number, h: number}, \n\t\tfreeze: {t: number, l: number, b: number, r: number},\n\t) : Viewport {\n\t\tconst viewportRows: RowModel[] = [];\n\t\tconst viewportColumns: ColumnModel[] = [];\n\n\t\tlet row: RowModel;\n\t\tlet remainingHeight = viewportSize.h;\n\t\tlet r = 0;\n\t\t// top rows\n\t\tfor (r = 0; r < freeze.t; r++) {\n\t\t\trow = this.visibleRows[r];\n\t\t\tremainingHeight -= row.height;\n\t\t\tviewportRows.push(row);\n\t\t}\n\n\t\t// bottom rows\n\t\tfor (r = this.visibleRows.length - freeze.b; r < this.visibleRows.length; r++) {\n\t\t\trow = this.visibleRows[r];\n\t\t\tremainingHeight -= row.height;\n\t\t}\n\n\t\t// center rows\n\t\tr = freeze.t + offset.r;\n\t\twhile (remainingHeight > 0 && r < this.visibleRows.length) {\n\t\t\trow = this.visibleRows[r++];\n\t\t\tremainingHeight -= row.height;\n\t\t\tviewportRows.push(row);\n\t\t}\n\n\t\t// bottom rows again\n\t\tfor (r = this.visibleRows.length - freeze.b; r < this.visibleRows.length; r++) {\n\t\t\tviewportRows.push(this.visibleRows[r]);\n\t\t}\n\n\t\tlet column: ColumnModel;\n\t\tlet remainingWidth = viewportSize.w;\n\t\tlet c = 0;\n\n\t\t// left columns\n\t\tfor (c = 0; c < freeze.l; c++) {\n\t\t\tcolumn = this.visibleColumns[c];\n\t\t\tremainingWidth -= column.width;\n\t\t\tviewportColumns.push(column);\n\t\t}\n\n\t\t// right columns\n\t\tfor (c = this.visibleColumns.length - freeze.r; c < this.visibleColumns.length; c++) {\n\t\t\tcolumn = this.visibleColumns[c];\n\t\t\tremainingWidth -= column.width;\n\t\t}\n\n\t\t// center columns\n\t\tc = freeze.l + offset.c;\n\t\twhile (remainingWidth > 0 && c < this.visibleColumns.length) {\n\t\t\tcolumn = this.visibleColumns[c++];\n\t\t\tremainingWidth -= column.width;\n\t\t\tviewportColumns.push(column);\n\t\t}\n\n\t\t// right columns again\n\t\tfor (c = this.visibleColumns.length - freeze.r; c < this.visibleColumns.length; c++) {\n\t\t\tviewportColumns.push(this.visibleColumns[c]);\n\t\t}\n\n\t\treturn (this._viewport = {rows: viewportRows, columns: viewportColumns});\n\t}\n\n\tcalculateViewport() {\n\t\treturn this._viewport ? this.calculations.calculateViewport(this._viewport) : [];\n\t}\n\n\tgetValuesInRange(range: CellRange, formattedValues = false) {\n\t\trange = range.intersect(this.gridRange);\n\t\tif (!range) return [];\n\t\tconst {columns, rows} = range.size;\n\t\tconst values: Matrix<unknown> = new Array(rows);\n\t\tlet i = 0, j = 0;\n\t\tlet row: RowModel;\n\t\tfor (let r = range.r1; r <= range.r2; r++) {\n\t\t\tvalues[i] = new Array(columns);\n\t\t\tj = 0;\n\t\t\trow = this.rows[r];\n\t\t\tfor (let c = range.c1; c <= range.c2; c++) {\n\t\t\t\tvalues[i][j++] = formattedValues ? row.cell(c).formattedValue : row.cell(c).value;\n\t\t\t}\n\t\t\t++i;\n\t\t}\n\n\t\treturn values;\n\t}\n\n\tsetRowExpandLevel(level: number) {\n\t\tthis.rows.forEach(row => {\n\t\t\trow.collapsed = (!row.isLoaded && !row.isPartialyLoaded) || row.level >= level;\n\t\t\tif (row.level <= level) row.hidden = false; // remove hidden flag for visible rows\n\t\t});\n\t\tthis.indexVisibleRows();\n\t}\n\t\n\tsetColumnExpandLevel(level: number) {\n\t\tthis.columns.forEach(column => column.collapsed = column.level >= level);\n\t\tthis.indexVisibleColumns();\n\t}\n\n\tgetViewportRange() {\n\t\treturn this._viewport && this._viewport.columns.length && this._viewport.rows.length ? new CellRange(\n\t\t\tthis._viewport.columns[0].index,\n\t\t\tthis._viewport.rows[0].index,\n\t\t\tthis._viewport.columns[this._viewport.columns.length - 1].index,\n\t\t\tthis._viewport.rows[this._viewport.rows.length - 1].index,\n\t\t) : null;\n\t}\n\n\tget gridRange() {\n\t\treturn new CellRange(0, 0, this.columns.length - 1, this.rows.length - 1);\n\t}\n\n\tgetRangeIterator(range: CellRange, withinViewport = false) {\n\t\tconst clip = withinViewport && this._viewport ? this.getViewportRange() : this.gridRange;\n\t\treturn new IterableRange(this, clip && range.intersect(clip));\n\t}\n\n\tgetInitializedCellIterator() {\n\t\treturn new IterableRange(this, this.gridRange, true);\n\t}\n\n\tgetRowIterator(range: CellRange, withinViewport = false) {\n\t\tconst clip = withinViewport && this._viewport ? this.getViewportRange() : this.gridRange;\n\t\treturn new IterableAxisRange<RowModel>(this, clip && range.intersect(clip), 'rows');\n\t}\n\n\tgetColumnIterator(range: CellRange, withinViewport = false) {\n\t\tconst clip = withinViewport && this._viewport ? this.getViewportRange() : this.gridRange;\n\t\treturn new IterableAxisRange<ColumnModel>(this, clip && range.intersect(clip), 'columns');\n\t}\n\n\tgetCellArray(range: CellRange) {\n\t\tconst cells: CellModel[] = [];\n\t\tfor (const cell of this.getRangeIterator(range)) {\n\t\t\tcells.push(cell);\n\t\t}\n\t\treturn cells;\n\t}\n\n\ttransformRangeToMatrix<T>(range: CellRange, transform: (cell: CellModel) => T): Matrix<T> {\n\t\tlet row: RowModel, cell: CellModel, rowValues: T[];\n\t\trange = range.intersect(this.gridRange);\n\t\tconst cells: Matrix<T> = [];\n\t\tfor (let r = range.r1; r <= range.r2; r++) {\n\t\t\trow = this.rows[r];\n\t\t\tif (!row) continue;\n\t\t\trowValues = [];\n\t\t\tfor (let c = range.c1; c <= range.c2; c++) {\n\t\t\t\tcell = row.cell(c);\n\t\t\t\tif (cell) rowValues.push(transform(cell));\n\t\t\t}\t\n\t\t\tcells.push(rowValues);\n\t\t}\n\t\treturn cells;\n\t}\n\n\tgetCellMatrix(range: CellRange) {\n\t\treturn this.getModelByRange(range)?.transformRangeToMatrix(range, c => c);\n\t}\n\n\tgetValueMatrix(range: CellRange) {\n\t\treturn this.getModelByRange(range)?.transformRangeToMatrix(range, c => c.value);\n\t}\n\n\tshift(options: ShiftOptions) {\n\t\toptions.sheet = this.name;\n\t\tthis.merges.shift(options);\n\t\tthis.calculations.shift(options);\n\t\tthis.names.shift(options);\n\t\tthis.comments.shift(options);\n\t\tthis.sparklines.shift(options);\n\t}\n\n\tclearCalculations(all = false) {\n\t\tif (all && this.group) this.group.models.forEach(m => m.calculations.refresh());\n\t\telse this.calculations.refresh();\n\t}\n\n\trefreshSparklines() {\n\t\tthis.sparklines.updateRangeMaps();\n\t\tfor (const cell of this.getInitializedCellIterator()) {\n\t\t\tcell.invalidateStyle();\n\t\t}\n\t}\n\n\tclearCalculatedStyles() {\n\t\tthis.conditionalFormats.refresh();\n\t\tconst cells = [] as CellModel[];\n\t\tfor (const cell of this.getInitializedCellIterator()) {\n\t\t\tcells.push(cell);\n\t\t\tcell.invalidateStyle();\n\t\t}\n\t}\n\n\tinsertColumns(index: number, count: number, after = false) {\n\t\tconst parent = this.columns[Math.min(this.columns.length - 1, index)].parent;\n\t\tif (after) ++index;\n\t\tthis.shift({index: index, offset: count, direction: 'right'});\n\t\tfor (let r = 0; r < this.rows.length; r++) this.rows[r].insertColumns(index, count, false);\n\t\tconst newColumns = (new Array(count)).fill(null).map(() => new ColumnModel(this));\n\t\tthis.columns.splice(index, 0, ...newColumns);\n\t\tif (this.maxColumnLevel > 0) parent.insertChildren(newColumns, index - (parent.index || -1) - 1);\n\t\tthis.indexColumns();\n\t\tthis.applyThemeToColumns(newColumns);\n\t\tthis.clearCalculations(true);\n\t\treturn newColumns;\n\t}\n\n\tdeleteColumns(index: number, count: number) {\n\t\tconst parent = this.columns[index].parent;\n\t\tthis.shift({index: index, offset: count, direction: 'left'});\n\t\tconst deletedCells: CellModel[][] = [];\n\t\tfor (let r = 0; r < this.rows.length; r++)\n\t\t\tdeletedCells.push(this.rows[r].deleteColumns(index, count, false));\n\t\t// const deletedColumns: [ColumnModel, CellModel[]][] = this.columns.splice(index, count)\n\t\t// \t.map((column, i) => [column, deletedCells[i]]);\n\t\tconst deletedColumns = this.columns.splice(index, count);\n\t\tparent?.deleteChildren(deletedColumns);\n\t\tthis.indexColumns();\n\t\tthis.clearCalculations(true);\n\t\treturn deletedColumns;\n\t}\n\n\tinsertRows(index: number, rows: number|RowModel[], after = false) {\n\t\tconst parentIndex = Math.min(this.rows.length - 1, index);\n\t\tconst parent = parentIndex < 0 ? this.rowRoot : this.rows[parentIndex].parent;\n\t\tif (after) ++index;\n\t\tconst count = isNaN(rows as number) ? (rows as RowModel[]).length : rows as number;\n\t\tthis.shift({index: index, offset: count, direction: 'down'});\n\t\tconst newRows = isNaN(rows as number) ? (rows as RowModel[]) : (new Array(count)).fill(null).map(() => new RowModel(this));\n\t\tthis.rows.splice(index, 0, ...newRows);\n\t\tif (this.maxRowLevel > 0) parent.insertChildren(newRows, index - (parent.index || -1) - 1);\n\t\tthis.indexRows();\n\t\tthis.applyThemeToRows(newRows);\n\t\tthis.clearCalculations(true);\n\t\treturn newRows;\n\t}\n\n\tdeleteRows(index: number, count: number) {\n\t\tconst parent = this.rows[index].parent;\n\t\tthis.shift({index: index, offset: count, direction: 'up'});\n\t\tconst deletedRows = this.rows.splice(index, count);\n\t\tparent?.deleteChildren(deletedRows);\n\t\tthis.indexRows();\n\t\tthis.clearCalculations(true);\n\t\treturn deletedRows;\n\t}\n\n\tmoveRows(index: number, count: number, targetIndex: number) {\n\t\tconst movingRows = this.rows.splice(index, count);\n\t\tthis.rows.splice(targetIndex, 0, ...movingRows);\n\t\tthis.shift({index: index, offset: targetIndex - index, direction: 'down', maxIndex: index + count - 1});\n\t\tthis.indexRows();\n\t\tthis.clearCalculations(true);\n\t\treturn movingRows;\n\t}\n\n\tmoveColumns(index: number, count: number, targetIndex: number) {\n\t\tconst movingColumns = this.columns.splice(index, count);\n\t\tthis.columns.splice(targetIndex, 0, ...movingColumns);\n\t\tthis.shift({index: index, offset: targetIndex - index, direction: 'right', maxIndex: index + count - 1});\n\t\tthis.indexColumns();\n\t\tthis.clearCalculations(true);\n\t\treturn movingColumns;\n\t}\n\n\tspillValues(opt: SpillOptions): SpillResult {\n\t\tconst {cell, values, displayValues, propertyCell} = opt;\n\t\tconst cells: CellModel[] = [];\n\t\tconst oldValues: CellValueType[] = [];\n\t\tconst empty = values.length === 0 || values[0].length === 0;\n\t\tlet row: RowModel, spillCell: CellModel;\n\n\t\tconst range = empty ? null : new CellRange(\n\t\t\tcell.c, cell.r,\n\t\t\tcell.c + values[0].length - 1,\n\t\t\tcell.r + values.length - 1\n\t\t)\n\n\t\tif (cell.spillRange) {\n\t\t\t// clear values from previous evaluations not contained in the new spill range\n\t\t\tthis.getRangeIterator(cell.spillRange, true).forEach(c => {\n\t\t\t\tif (cell != c && !range?.contains(c.range)) c.clearSpilledValue();\n\t\t\t});\n\t\t}\n\n\t\tcell.spillRange = range;\n\t\tif (empty) return {cells, oldValues, range: null};\n\n\t\tfor (let r = range.r1; r <= range.r2; r++) {\n\t\t\trow = this.rows[r];\n\t\t\tif (!row) continue;\n\t\t\tconst r2 = r - range.r1;\n\t\t\tfor (let c = range.c1; c <= range.c2; c++) {\n\t\t\t\tconst c2 = c - range.c1;\n\t\t\t\tspillCell = row.cell(c);\n\t\t\t\tif (spillCell.editable) {\n\t\t\t\t\toldValues.push(spillCell.value2 as CellValueType);\n\t\t\t\t\tspillCell.spillValue(values[r2][c2], cell);\n\t\t\t\t\tif (propertyCell) {\n\t\t\t\t\t\tspillCell.format = propertyCell.format;\n\t\t\t\t\t\tspillCell.type = propertyCell.type;\n\t\t\t\t\t}\n\t\t\t\t\tif (displayValues && displayValues[r2][c2] != null) spillCell.displayValue = displayValues[r2][c2];\n\t\t\t\t\tcells.push(spillCell);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {cells, oldValues, range};\n\t}\n\n\tgetCellByName(name: string, contextRange: CellRange, searchGroup = true): CellModel {\n\t\tconst cell = this.names.getCellByName(name, contextRange);\n\t\tif (cell) return cell;\n\t\telse if (this.group && searchGroup) return this.group.getCellByName(name, contextRange);\n\t\treturn null;\n\t}\n\n\tgetRangeByName(name: string, searchGroup = true): CellRange {\n\t\tconst range = this.names.getRangeByName(name);\n\t\tif (range) return range;\n\t\telse if (this.group && searchGroup) return this.group.getRangeByName(name);\n\t\treturn null;\n\t}\n\n\tgetValueMatrixByName(name: string, searchGroup = true): Matrix<unknown> {\n\t\tconst matrix = this.names.getRangeByName(name);\n\t\tif (matrix) return this.getValueMatrix(matrix);\n\t\telse if (this.group && searchGroup) return this.group.getValueMatrixByName(name);\n\t\treturn null;\n\t}\n\n\trebuildRowTree() {\n\t\tconst buildFunction = this._levelBasedRowTree ? tree.buildLevelBasedTree : tree.buildParentBasedTree;\n\t\tthis._maxRowLevel = buildFunction(this.rows, this.rowRoot, {\n\t\t\treverse: this.options.rowTree.reversed\n\t\t});\n\t\tthis.indexRowsByTree();\n\t}\n\n\trebuildColumnTree() {\n\t\tconst buildFunction = this._levelBasedColTree ? tree.buildLevelBasedTree : tree.buildParentBasedTree;\n\t\tthis._maxColumnLevel = buildFunction(this.columns, this.colRoot, {\n\t\t\treverse: this.options.columnTree.reversed\n\t\t});\n\t\tthis.indexColumns();\n\t}\n\n\tcalculateCellOffset(cell: CellRange) : Location {\n\t\tlet x = 0, y = 0;\n\t\tfor (let c = 0; c < cell.c1; c++) {\n\t\t\tif (!this.columns[c]) break;\n\t\t\tx += this.columns[c].width;\n\t\t}\n\t\tfor (let r = 0; r < cell.r1; r++) {\n\t\t\tif (!this.rows[r]) break;\n\t\t\ty += this.rows[r].height;\n\t\t}\n\t\treturn { x, y };\n\t}\n\n}"]}
|
|
@@ -23,7 +23,7 @@ export class IterableRange extends CellRange {
|
|
|
23
23
|
this.c = 0;
|
|
24
24
|
this.r++;
|
|
25
25
|
}
|
|
26
|
-
cell = this.model.rows[this.r]
|
|
26
|
+
cell = this.model.rows[this.r + this.r1]?.cells[this.c + this.c1]; // the offsets of a sub-range
|
|
27
27
|
this.done = this.c >= this.size.columns - 1 && this.r >= this.size.rows - 1;
|
|
28
28
|
}
|
|
29
29
|
return cell;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterableRange.js","sourceRoot":"","sources":["../../src/model/iterableRange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAM5C,MAAM,OAAO,aAAc,SAAQ,SAAS;IAM3C,YAAoB,KAAgB,EAAE,KAAgB,EAAU,kBAAkB,KAAK;QACtF,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAD/B,UAAK,GAAL,KAAK,CAAW;QAA4B,oBAAe,GAAf,eAAe,CAAQ;QAJ/E,MAAC,GAAG,CAAC,CAAC;QACN,MAAC,GAAG,CAAC,CAAC,CAAC;QACP,SAAI,GAAG,KAAK,CAAC;QAIpB,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAEJ,eAAe;QACd,IAAI,IAAe,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,CAAC,EAAE,CAAC;YACV,CAAC;iBAAM,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACX,IAAI,CAAC,CAAC,EAAE,CAAC;YACV,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"iterableRange.js","sourceRoot":"","sources":["../../src/model/iterableRange.ts"],"names":[],"mappings":"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","sourcesContent":["import { CellRange } from \"../common/range\";\nimport { CellModel } from \"./cellModel\";\nimport { ColumnModel } from \"./columnModel\";\nimport { GridModel } from \"./gridModel\";\nimport { RowModel } from \"./rowModel\";\n\nexport class IterableRange extends CellRange {\n\t\n\tprivate r = 0;\n\tprivate c = -1;\n\tprivate done = false;\n\n\tconstructor(private model: GridModel, range: CellRange, private initializedOnly = false) {\n\t\tsuper(range?.c1, range?.r1, range?.c2, range?.r2);\n\t\tif (!range) this.done = true;\n\t}\n\n\t[Symbol.iterator]() {\n return this;\n }\n\n\tnextInitialized() {\n\t\tlet cell: CellModel;\n\t\twhile (!this.done && !cell) {\n\t\t\tif (this.c < this.size.columns - 1) {\n\t\t\t\tthis.c++;\n\t\t\t} else if (this.r < this.size.rows - 1) {\n\t\t\t\tthis.c = 0;\n\t\t\t\tthis.r++;\n\t\t\t}\n\t\t\tcell = this.model.rows[this.r + this.r1]?.cells[this.c + this.c1]; // the offsets of a sub-range\n\t\t\tthis.done = this.c >= this.size.columns - 1 && this.r >= this.size.rows - 1;\n\t\t}\n\t\treturn cell;\n\t}\n\n next(): {done: boolean, value?: CellModel} {\n if (this.done) {\n\t\t\treturn {done: true};\n\t\t} else if (this.c < this.size.columns - 1) {\n\t\t\tthis.c++;\n\t\t} else if (this.r < this.size.rows - 1) {\n\t\t\tthis.c = 0;\n\t\t\tthis.r++;\n\t\t}\n\n\t\tthis.done = this.c >= this.size.columns - 1 && this.r >= this.size.rows - 1;\n\t\tconst row = this.model.rows[this.r + this.r1];\n\t\tconst c = this.c + this.c1;\n\t\tconst cell = this.initializedOnly && !row.isCellInitialized(c) ? this.nextInitialized() : row?.cell(c);\n\t\treturn cell ? {done: false, value: cell} : {done: true};\n\t}\n\n\tforEach(callback: (cell: CellModel) => void) {\n\t\tlet cell: CellModel;\n\t\twhile ((cell = this.next().value)) {\n\t\t\tcallback(cell);\n\t\t}\n\t}\n\n}\n\nexport class IterableAddressRange extends CellRange {\n\t\n\tprivate r = 0;\n\tprivate c = -1;\n\tprivate done = false;\n\n\tconstructor(range: CellRange) { \n\t\tsuper(range.c1, range.r1, range.c2, range.r2);\n\t}\n\n\t[Symbol.iterator]() {\n return this;\n }\n\n next() {\n if (this.done) {\n\t\t\treturn {done: true};\n\t\t} else if (this.c < this.size.columns - 1) {\n\t\t\tthis.c++;\n\t\t} else if (this.r < this.size.rows - 1) {\n\t\t\tthis.c = 0;\n\t\t\tthis.r++;\n\t\t}\n\n\t\tthis.done = this.c == this.size.columns - 1 && this.r == this.size.rows - 1;\n\t\treturn {done: false, value: new CellRange(this.c + this.c1, this.r + this.r1)};\n }\n\n}\n\nexport class IterableAxisRange<TModel extends RowModel|ColumnModel> extends CellRange {\n\t\n\tprivate i = 0;\n\tprivate key: 'r1'|'c1';\n\tprivate axis: 'rows'|'columns';\n\tprivate done = false;\n\n\tconstructor(private model: GridModel, range: CellRange, axis: 'rows'|'columns') {\n\t\tsuper(range?.c1, range?.r1, range?.c2, range?.r2);\n\t\tthis.axis = axis;\n\t\tthis.key = axis === 'rows' ? 'r1' : 'c1';\n\t\tif (!range) this.done = true;\n\t}\n\n\t[Symbol.iterator]() {\n return this;\n }\n\n next(): {done: boolean, value?: TModel} {\n if (this.done) {\n\t\t\treturn {done: true};\n\t\t} else if (this.i < this.size[this.axis] - 1) {\n\t\t\tthis.i++;\n\t\t}\n\n\t\tthis.done = this.i >= this.size[this.axis] - 1;\n\t\tconst row = this.model[this.axis][this.i + this[this.key]] as TModel;\n\t\treturn row ? {done: false, value: row} : {done: true};\n\t}\n\n\tforEach(callback: (cell: TModel) => void) {\n\t\tlet axis: TModel;\n\t\twhile ((axis = this.next().value)) {\n\t\t\tcallback(axis);\n\t\t}\n\t}\n\n}\n"]}
|
package/dist/model/options.d.ts
CHANGED
|
@@ -191,6 +191,8 @@ export type Options = {
|
|
|
191
191
|
editable?: boolean;
|
|
192
192
|
/** enables formulas, enabled by default */
|
|
193
193
|
formulas?: boolean;
|
|
194
|
+
/** maximum nesting depth of the formula evaluation, deeper reference chains end with an error */
|
|
195
|
+
maxCalculationDepth?: number;
|
|
194
196
|
/** enables default cell commenting */
|
|
195
197
|
commentable?: boolean;
|
|
196
198
|
/** enables autofill function */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/model/options.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/model/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAqB,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGtD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,cAAc,CAAC;AAE/C,MAAM,MAAM,cAAc,GAAG;IAC5B,gCAAgC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,mCAAmC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,yCAAyC;IACzC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAE7B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC9B,6DAA6D;IAC7D,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC,iCAAiC;IACjC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,mCAAmC;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,YAAY,IAAI,QAAQ,GAAG;IAC7D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;CAC/B,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,YAAY,IAAI;IACrD,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAA;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACjC,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAC1B,+BAA+B;IAC/B,KAAK,EAAE;QACN,mEAAmE;QACnE,iBAAiB,EAAE,MAAM,CAAA;KACzB,CAAA;CACD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,+BAA+B;IAC/B,eAAe,CAAC,EAAE,YAAY,EAAE,CAAA;CAChC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sEAAsE;IACtE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uEAAuE;IACvE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8BAA8B;IAC9B,eAAe,CAAC,EAAE,cAAc,EAAE,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAA;AAGD,MAAM,MAAM,WAAW,GAAG;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAC,SAAS,GAAC,gBAAgB,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,CAAC,MAAM,UAAU,CAAC,EAAE,GAAC,KAAK,CAAC;IAEvC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC;IAE5B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAC1B,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,kEAAkE;IAClE,SAAS,CAAC,EAAE,YAAY,CAAC;IAEzB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6BAA6B;IAC7B,WAAW,CAAC,EAAE,WAAW,GAAC,UAAU,CAAC;IAErC,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,uBAAuB;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,GAAC,KAAK,CAAC,SAAS,CAAC;IAExC,2BAA2B;IAC3B,OAAO,CAAC,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAA;KACd,CAAA;CACD,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;CACpB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,qBAAqB;IACrB,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,qCAAqC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,WAAW,CAAC;IAEzB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,qCAAqC;IACrC,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,kDAAkD;IAClD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iEAAiE;IACjE,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,yCAAyC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,4BAA4B;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,kDAAkD;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,wDAAwD;IACxD,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,uCAAuC;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC;IAElD,qCAAqC;IACrC,aAAa,CAAC,EAAE,KAAK,CAAC,qBAAqB,CAAC;IAE5C,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,iGAAiG;IACjG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,sCAAsC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,0CAA0C;IAC1C,eAAe,CAAC,EAAE;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;IAEzC,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,2DAA2D;IAC3D,aAAa,CAAC,EAAE,QAAQ,CAAC;IAEzB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,kCAAkC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,mBAAmB;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB,sBAAsB;IACtB,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB,wBAAwB;IACxB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAE7B,sBAAsB;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B,wBAAwB;IACxB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAE7B,oBAAoB;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,yCAAyC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,cAAc,CAAC;IAEzB,wBAAwB;IACxB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAE7B,oCAAoC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,6BAA6B;IAC7B,SAAS,CAAC,EAAE,WAAW,CAAC;IAExB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,wDAAwD;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,wCAAwC;IACxC,KAAK,CAAC,EAAE,YAAY,CAAC;IAErB,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,yDAAyD;IACzD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAC,YAAY,GAAC,SAAS,GAAC,gBAAgB,CAAC,GAAG;IAC7F,OAAO,CAAC,EAAE,OAAO,GAAC,WAAW,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,GAAC,WAAW,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,GAAC,aAAa,CAAC;IAChC,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACtC,CAAA;AAED,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,WAAW,GAAE,YAAmB,GAAG,OAAO,CA+BtG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/model/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAiB,KAAK,EAAmB,MAAM,iBAAiB,CAAC;AAGpG,OAAO,SAAS,EAAE,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAyVxD,MAAM,UAAU,WAAW,CAAC,OAA+B,EAAE,cAA4B,IAAI;IAC5F,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAe,EAAE,EAAE,SAAS,CAAC,eAAe,EAAE,WAAW,EAAE,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAE/H,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACtB,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACtF,CAAC;SAAM,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QACjC,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACpB,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9E,CAAC;SAAM,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC/B,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACvB,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS;QAAE,GAAG,CAAC,OAAO,GAAG,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAC,CAAC;IAC3E,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,sBAAsB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAErE,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS;QAAE,GAAG,CAAC,OAAO,GAAG,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAC,CAAC;IAC3E,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,oBAAoB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAEnE,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,SAAS;QAAE,GAAG,CAAC,UAAU,GAAG,EAAC,OAAO,EAAE,GAAG,CAAC,UAAU,EAAC,CAAC;IACpF,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,oBAAoB,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAEzE,IAAI,GAAG,CAAC,cAAc;QAAE,GAAG,CAAC,cAAc,GAAG,uBAAuB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEzF,OAAO,GAAc,CAAC;AACvB,CAAC","sourcesContent":["import { numbers, initCommonOptions, CommonOptions, dates, MenuItem, paper } from \"@omegagrid/core\";\nimport { CellValidation, CellValidationSource, Renderer, StyleSource } from \"../types\";\nimport { CommentOptions, FilterSettings, SortSettings } from \"../model\";\nimport constants, { DEFAULT_FILTER_OPTIONS, DEFAULT_TREE_OPTIONS } from \"../constants\";\nimport { utils } from \"@omegagrid/core\";\nimport { ElementModel } from \"./elementModel\";\nimport { CellModel, CellSource } from \"./cellModel\";\nimport { RowModel } from \"./rowModel\";\nimport { ColumnModel } from \"./columnModel\";\nimport { CellAddress, RangeAddress } from \"../common\";\nimport { normalizeCellValidation } from \"./validations\";\n\nexport type ViewMode = 'grid' | 'singleObject';\n\nexport type EditingOptions = {\n\t/** enable inserting new rows */\n\trowInsertion?: boolean,\n\n\t/** enable deleting rows */\n\trowDeletion?: boolean,\n\n\t/** enable editing row outline levels */\n\trowOutline?: boolean,\n\n\t/** enable inserting new columns */\n\tcolInsertion?: boolean,\n\n\t/** enable deleting columns */\n\tcolDeletion?: boolean,\n\n\t/** enable editing column outline levels */\n\tcolOutline?: boolean,\n\n\t/** use calendar editor for date cells */\n\tdateCalendarEditor?: boolean,\n\n};\n\nexport type ScrollingOptions = {\n\t/** maximum proximity of cursor to scrollbar to be visible */\n\tscrollbarVisibilityTreshold?: number,\n\n\t/** enable vertical overscroll */\n\tverticalOverscroll?: boolean,\n\n\t/** enable horizontal overscroll */\n\thorizontalOverscroll?: boolean,\n};\n\nexport type GridMenuItem<T extends ElementModel> = MenuItem & {\n\thidden?: (model: T) => boolean,\n}\n\nexport type MenuOptionsItem<T extends ElementModel> = {\n\titems: GridMenuItem<T>[],\n\thidden?: (model: T) => boolean,\n\treplace?: boolean\n};\n\nexport type MenuOptions = {\n\tcell: MenuOptionsItem<CellModel>,\n\trow: MenuOptionsItem<RowModel>,\n\tcolumn: MenuOptionsItem<ColumnModel>,\n};\n\nexport type EventOptions = {\n\t/** grid click event options */\n\tclick: {\n\t\t/** maximum mouse move path length, after click event is allowed */\n\t\tmouseMoveTreshold: number\n\t}\n};\n\nexport type SortingOptions = {\n\t/** column sorting enabled */\n\tenabled?: boolean,\n\t\n\t/** maximum number of columns that can be sorted */\n\tmaxColumns?: number,\n\t\n\t/** initial sorting settings */\n\tdefaultSettings?: SortSettings[]\n};\n\nexport type FilterOptions = {\n\tenabled?: boolean;\n\t/** the parents of the matched rows will be included in the results */\n\tincludeParents?: boolean;\n\t/** the children of the matched rows will be included in the results */\n\tincludeChildren?: boolean;\n\t/** initial filter settings */\n\tdefaultSettings?: FilterSettings[]\n}\n\nexport type SelectingOptions = {\n\tenabled?: boolean;\n\tmultiSelect?: boolean;\n}\n\n\nexport type TreeOptions = {\n\tenabled?: boolean;\n\treversed?: boolean;\n}\n\nexport type PasteMode = 'insert'|'rewrite'|'rewrite_append';\n\nexport type ClipboardOptions = {\n\tpasteProps: (keyof CellSource)[]|'all';\n\n\t/**\n\t * paste mode for rows, \n\t * \tinsert = always insert new rows\n\t * \trewrite = rewrite when rows are availible\n\t * \trewrite_append = rewrite when rows are availible, otherwise insert new rows; default\n\t */\n\trowPasteMode?: PasteMode;\n\n\t/**\n\t * paste mode for columns, \n\t * \tinsert = always insert new columns\n\t * \trewrite = rewrite when columns are availible; default\n\t * \trewrite_append = rewrite when columns are availible, otherwise insert new columns\n\t */\n\tcolumnPasteMode?: PasteMode;\n\n\t/**\n\t * Skips hidden rows when pasting data.\n\t * Values are pasted into nearest visible row.\n\t */\n\tskipHiddenRows?: boolean;\n}\n\nexport type PrintOptions = {\n\t/** idexes of rows, after which page break will be inserted */\n\trowBreaks?: number[];\n\n\t/** range of rows to repeat at the top of each page, eg: \"1:20\" */\n\trowTitles?: RangeAddress;\n\n\t/** print scale, 50 = 50% */\n\tscale?: number;\n\n\t/** print page orientation */\n\torientation?: 'landscape'|'portrait';\n\n\t/** print quality */\n\tdpi?: number;\n\n\t/** print paper size */\n\tpaper?: paper.PaperType|paper.PaperSize;\n\n\t/** page margin settings */\n\tmargins?: {\n\t\ttop: number,\n\t\tbottom: number,\n\t\tleft: number,\n\t\tright: number,\n\t\theader: number,\n\t\tfooter: number\n\t}\n}\n\nexport type HeaderOptions = {\n\tstyle?: StyleSource;\n}\n\nexport type Options = {\n\tviewMode?: ViewMode,\n\n\t/** default number of rows */\n\trows?: number;\n\n\t/** default number of columns */\n\tcolumns?: number;\n\n\t/** readOnly cells */\n\treadOnly?: boolean;\n\n\t/** header options */\n\theaders?: HeaderOptions;\n\n\t/** render column with row numbers */\n\trowNumbers?: boolean;\n\n\t/** render column with row numbers */\n\trowResize?: boolean;\n\n\t/** default row priority */\n\trowPriority?: number;\n\n\t/** render column with row tree outline */\n\trowTree?: TreeOptions;\n\n\t/** render header row with column letters */\n\tcolLetters?: boolean;\n\n\t/** render row with column tree outline */\n\tcolumnTree?: TreeOptions;\n\n\t/** default column priority */\n\tcolumnPriority?: number;\n\n\t/** render column with row numbers */\n\tcolumnResize?: boolean;\n\n\t/** render tree buttons in column header labels */\n\tcolumnHeaderTreeButtons?: boolean;\n\n\t/** number of freezed rows on the top */\n\tfreezeTop?: number;\n\t\n\t/** number of freezed columns on the left */\n\tfreezeLeft?: number;\n\n\t/** number of freezed columns on the right, not implemented yet */\n\tfreezeRight?: number;\n\n\t/** number of freezed rows on the bottom, not implemented yet */\n\tfreezeBottom?: number;\n\n\t/** default font size */\n\tfontSize?: number;\n\n\t/** default row height */\n\trowHeight?: number;\n\n\t/** remove row hidden property after its parent is expanded */\n\tunhideRowAfterExpand?: boolean;\n\n\t/** default column width */\n\tcolumnWidth?: number;\n\n\t/** remove column hidden property after its parent is expanded */\n\tunhideColumnAfterExpand?: boolean;\n\n\t/** style source are native css styles */\n\tcssStyles?: boolean;\n\n\t/** cell border visibility */\n\tgrid?: boolean,\n\t\n\t/** column filter options */\n\tfilters?: FilterOptions,\n\n\t/** default number format */\n\tnumberFormat?: string,\n\t\n\t/** tries to repair invalid number/date formats */\n\tfixNumberFormat?: boolean,\n\n\t/** shows click indicator even in cells without value */\n\temptyClickable?: boolean,\n\n\t/** custom number formatter function */\n\tnumberFormatter?: numbers.NumberFormatterFunction,\n\n\t/** custom date formatter function */\n\tdateFormatter?: dates.DateFormatterFunction,\n\t\n\t/** enables default cell editing */\n\teditable?: boolean,\n\n\t/** enables formulas, enabled by default */\n\tformulas?: boolean,\n\n\t/** enables default cell commenting */\n\tcommentable?: boolean,\n\n\t/** enables autofill function */\n\tautofill?: boolean,\n\n\t/** number of rows on one page for dynamic row fetching */\n\tpageSize?: number,\n\n\t/** enables command window */\n\tcommandWindow?: boolean,\n\n\t/** enables undo/redo */\n\tundoRedo?: boolean,\n\n\t/** location of cell with level buttons */\n\tlevelButtonCell?: {c: number, r: number},\n\n\t/** shows placeholder if grid is empty */\n\temptyPlaceholder?: boolean,\n\n\t/** custom cell renderer applied after default renderers */\n\tafterRenderer?: Renderer,\n\n\t/** factor of cell indentation */\n\tcellIndentFactor?: number,\n\n\t/** factor of level indentation */\n\tlevelIndentFactor?: number,\n\n\t/** menu options */\n\tmenus?: MenuOptions,\n\n\t/** editing options */\n\tediting?: EditingOptions,\n\n\t/** selecting options */\n\tselecting?: SelectingOptions,\n\n\t/** comment options */\n\tcomments?: CommentOptions,\n\t\n\t/** scrolling options */\n\tscrolling?: ScrollingOptions,\n\n\t/** event options */\n\tevents?: EventOptions,\n\t\n\t/** max number of sorted columns, deprecated */\n\tmaxSortingColumns?: number;\n\n\t/** enabled column sorting, deprecated */\n\tcolumnSorting?: boolean,\n\n\t/** column sorting options */\n\tsorting?: SortingOptions,\n\n\t/** clipboard options */\n\tclipboard?: ClipboardOptions,\n\n\t/** default cell validation rules */\n\tcellValidation?: CellValidation,\n\n\t/** first cell in viewport */\n\tfirstCell?: CellAddress,\n\n\t/** cell element caching */\n\tcellCache?: boolean,\n\n\t/** use single cell model instance for all grid cells */\n\tsingleCellModel?: boolean,\n\n\t/** options for raw html export/print */\n\tprint?: PrintOptions,\n\n\t/** grid zoom factor */\n\tzoom?: number,\n\n\t/** hides the outer border of the grid (right and top) */\n\thideOuterBorder?: boolean,\n} & CommonOptions;\n\nexport type OptionSource = Omit<Options, 'rowTree'|'columnTree'|'filters'|'cellValidation'> & {\n\trowTree?: boolean|TreeOptions;\n\tcolumnTree?: boolean|TreeOptions;\n\tfilters?: boolean|FilterOptions;\n\tcellValidation?: CellValidationSource;\n}\n\nexport function initOptions(options?: Partial<OptionSource>, origOptions: OptionSource = null): Options {\n\tconst opt = utils.mergeDeep<OptionSource>({}, constants.DEFAULT_OPTIONS, origOptions, initCommonOptions(options, origOptions));\n\t\n\tif (opt.numberFormat) {\n\t\topt.numberFormatter = numbers.getNumberFormatter(opt.formatLocale, opt.numberFormat);\n\t} else if (!opt.numberFormatter) {\n\t\topt.numberFormatter = numbers.getNumberFormatter(opt.formatLocale);\n\t}\n\n\tif (opt.dateFormat) {\n\t\topt.dateFormatter = dates.getDateFormatter(opt.formatLocale, opt.dateFormat);\n\t} else if (!opt.dateFormatter) {\n\t\topt.dateFormatter = dates.getDateFormatter(opt.formatLocale);\n\t}\n\n\tif (opt.columnSorting) {\n\t\topt.sorting = opt.sorting || {enabled: true};\n\t}\n\t\n\tif (typeof opt.filters === 'boolean') opt.filters = {enabled: opt.filters};\n\topt.filters = Object.assign({}, DEFAULT_FILTER_OPTIONS, opt.filters);\n\n\tif (typeof opt.rowTree === 'boolean') opt.rowTree = {enabled: opt.rowTree};\n\topt.rowTree = Object.assign({}, DEFAULT_TREE_OPTIONS, opt.rowTree);\n\n\tif (typeof opt.columnTree === 'boolean') opt.columnTree = {enabled: opt.columnTree};\n\topt.columnTree = Object.assign({}, DEFAULT_TREE_OPTIONS, opt.columnTree);\n\n\tif (opt.cellValidation) opt.cellValidation = normalizeCellValidation(opt.cellValidation);\n\n\treturn opt as Options;\n}"]}
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/model/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAiB,KAAK,EAAmB,MAAM,iBAAiB,CAAC;AAGpG,OAAO,SAAS,EAAE,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AA4VxD,MAAM,UAAU,WAAW,CAAC,OAA+B,EAAE,cAA4B,IAAI;IAC5F,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAe,EAAE,EAAE,SAAS,CAAC,eAAe,EAAE,WAAW,EAAE,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAE/H,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACtB,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACtF,CAAC;SAAM,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QACjC,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACpB,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9E,CAAC;SAAM,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC/B,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACvB,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS;QAAE,GAAG,CAAC,OAAO,GAAG,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAC,CAAC;IAC3E,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,sBAAsB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAErE,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS;QAAE,GAAG,CAAC,OAAO,GAAG,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAC,CAAC;IAC3E,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,oBAAoB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAEnE,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,SAAS;QAAE,GAAG,CAAC,UAAU,GAAG,EAAC,OAAO,EAAE,GAAG,CAAC,UAAU,EAAC,CAAC;IACpF,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,oBAAoB,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAEzE,IAAI,GAAG,CAAC,cAAc;QAAE,GAAG,CAAC,cAAc,GAAG,uBAAuB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEzF,OAAO,GAAc,CAAC;AACvB,CAAC","sourcesContent":["import { numbers, initCommonOptions, CommonOptions, dates, MenuItem, paper } from \"@omegagrid/core\";\nimport { CellValidation, CellValidationSource, Renderer, StyleSource } from \"../types\";\nimport { CommentOptions, FilterSettings, SortSettings } from \"../model\";\nimport constants, { DEFAULT_FILTER_OPTIONS, DEFAULT_TREE_OPTIONS } from \"../constants\";\nimport { utils } from \"@omegagrid/core\";\nimport { ElementModel } from \"./elementModel\";\nimport { CellModel, CellSource } from \"./cellModel\";\nimport { RowModel } from \"./rowModel\";\nimport { ColumnModel } from \"./columnModel\";\nimport { CellAddress, RangeAddress } from \"../common\";\nimport { normalizeCellValidation } from \"./validations\";\n\nexport type ViewMode = 'grid' | 'singleObject';\n\nexport type EditingOptions = {\n\t/** enable inserting new rows */\n\trowInsertion?: boolean,\n\n\t/** enable deleting rows */\n\trowDeletion?: boolean,\n\n\t/** enable editing row outline levels */\n\trowOutline?: boolean,\n\n\t/** enable inserting new columns */\n\tcolInsertion?: boolean,\n\n\t/** enable deleting columns */\n\tcolDeletion?: boolean,\n\n\t/** enable editing column outline levels */\n\tcolOutline?: boolean,\n\n\t/** use calendar editor for date cells */\n\tdateCalendarEditor?: boolean,\n\n};\n\nexport type ScrollingOptions = {\n\t/** maximum proximity of cursor to scrollbar to be visible */\n\tscrollbarVisibilityTreshold?: number,\n\n\t/** enable vertical overscroll */\n\tverticalOverscroll?: boolean,\n\n\t/** enable horizontal overscroll */\n\thorizontalOverscroll?: boolean,\n};\n\nexport type GridMenuItem<T extends ElementModel> = MenuItem & {\n\thidden?: (model: T) => boolean,\n}\n\nexport type MenuOptionsItem<T extends ElementModel> = {\n\titems: GridMenuItem<T>[],\n\thidden?: (model: T) => boolean,\n\treplace?: boolean\n};\n\nexport type MenuOptions = {\n\tcell: MenuOptionsItem<CellModel>,\n\trow: MenuOptionsItem<RowModel>,\n\tcolumn: MenuOptionsItem<ColumnModel>,\n};\n\nexport type EventOptions = {\n\t/** grid click event options */\n\tclick: {\n\t\t/** maximum mouse move path length, after click event is allowed */\n\t\tmouseMoveTreshold: number\n\t}\n};\n\nexport type SortingOptions = {\n\t/** column sorting enabled */\n\tenabled?: boolean,\n\t\n\t/** maximum number of columns that can be sorted */\n\tmaxColumns?: number,\n\t\n\t/** initial sorting settings */\n\tdefaultSettings?: SortSettings[]\n};\n\nexport type FilterOptions = {\n\tenabled?: boolean;\n\t/** the parents of the matched rows will be included in the results */\n\tincludeParents?: boolean;\n\t/** the children of the matched rows will be included in the results */\n\tincludeChildren?: boolean;\n\t/** initial filter settings */\n\tdefaultSettings?: FilterSettings[]\n}\n\nexport type SelectingOptions = {\n\tenabled?: boolean;\n\tmultiSelect?: boolean;\n}\n\n\nexport type TreeOptions = {\n\tenabled?: boolean;\n\treversed?: boolean;\n}\n\nexport type PasteMode = 'insert'|'rewrite'|'rewrite_append';\n\nexport type ClipboardOptions = {\n\tpasteProps: (keyof CellSource)[]|'all';\n\n\t/**\n\t * paste mode for rows, \n\t * \tinsert = always insert new rows\n\t * \trewrite = rewrite when rows are availible\n\t * \trewrite_append = rewrite when rows are availible, otherwise insert new rows; default\n\t */\n\trowPasteMode?: PasteMode;\n\n\t/**\n\t * paste mode for columns, \n\t * \tinsert = always insert new columns\n\t * \trewrite = rewrite when columns are availible; default\n\t * \trewrite_append = rewrite when columns are availible, otherwise insert new columns\n\t */\n\tcolumnPasteMode?: PasteMode;\n\n\t/**\n\t * Skips hidden rows when pasting data.\n\t * Values are pasted into nearest visible row.\n\t */\n\tskipHiddenRows?: boolean;\n}\n\nexport type PrintOptions = {\n\t/** idexes of rows, after which page break will be inserted */\n\trowBreaks?: number[];\n\n\t/** range of rows to repeat at the top of each page, eg: \"1:20\" */\n\trowTitles?: RangeAddress;\n\n\t/** print scale, 50 = 50% */\n\tscale?: number;\n\n\t/** print page orientation */\n\torientation?: 'landscape'|'portrait';\n\n\t/** print quality */\n\tdpi?: number;\n\n\t/** print paper size */\n\tpaper?: paper.PaperType|paper.PaperSize;\n\n\t/** page margin settings */\n\tmargins?: {\n\t\ttop: number,\n\t\tbottom: number,\n\t\tleft: number,\n\t\tright: number,\n\t\theader: number,\n\t\tfooter: number\n\t}\n}\n\nexport type HeaderOptions = {\n\tstyle?: StyleSource;\n}\n\nexport type Options = {\n\tviewMode?: ViewMode,\n\n\t/** default number of rows */\n\trows?: number;\n\n\t/** default number of columns */\n\tcolumns?: number;\n\n\t/** readOnly cells */\n\treadOnly?: boolean;\n\n\t/** header options */\n\theaders?: HeaderOptions;\n\n\t/** render column with row numbers */\n\trowNumbers?: boolean;\n\n\t/** render column with row numbers */\n\trowResize?: boolean;\n\n\t/** default row priority */\n\trowPriority?: number;\n\n\t/** render column with row tree outline */\n\trowTree?: TreeOptions;\n\n\t/** render header row with column letters */\n\tcolLetters?: boolean;\n\n\t/** render row with column tree outline */\n\tcolumnTree?: TreeOptions;\n\n\t/** default column priority */\n\tcolumnPriority?: number;\n\n\t/** render column with row numbers */\n\tcolumnResize?: boolean;\n\n\t/** render tree buttons in column header labels */\n\tcolumnHeaderTreeButtons?: boolean;\n\n\t/** number of freezed rows on the top */\n\tfreezeTop?: number;\n\t\n\t/** number of freezed columns on the left */\n\tfreezeLeft?: number;\n\n\t/** number of freezed columns on the right, not implemented yet */\n\tfreezeRight?: number;\n\n\t/** number of freezed rows on the bottom, not implemented yet */\n\tfreezeBottom?: number;\n\n\t/** default font size */\n\tfontSize?: number;\n\n\t/** default row height */\n\trowHeight?: number;\n\n\t/** remove row hidden property after its parent is expanded */\n\tunhideRowAfterExpand?: boolean;\n\n\t/** default column width */\n\tcolumnWidth?: number;\n\n\t/** remove column hidden property after its parent is expanded */\n\tunhideColumnAfterExpand?: boolean;\n\n\t/** style source are native css styles */\n\tcssStyles?: boolean;\n\n\t/** cell border visibility */\n\tgrid?: boolean,\n\t\n\t/** column filter options */\n\tfilters?: FilterOptions,\n\n\t/** default number format */\n\tnumberFormat?: string,\n\t\n\t/** tries to repair invalid number/date formats */\n\tfixNumberFormat?: boolean,\n\n\t/** shows click indicator even in cells without value */\n\temptyClickable?: boolean,\n\n\t/** custom number formatter function */\n\tnumberFormatter?: numbers.NumberFormatterFunction,\n\n\t/** custom date formatter function */\n\tdateFormatter?: dates.DateFormatterFunction,\n\t\n\t/** enables default cell editing */\n\teditable?: boolean,\n\n\t/** enables formulas, enabled by default */\n\tformulas?: boolean,\n\n\t/** maximum nesting depth of the formula evaluation, deeper reference chains end with an error */\n\tmaxCalculationDepth?: number,\n\n\t/** enables default cell commenting */\n\tcommentable?: boolean,\n\n\t/** enables autofill function */\n\tautofill?: boolean,\n\n\t/** number of rows on one page for dynamic row fetching */\n\tpageSize?: number,\n\n\t/** enables command window */\n\tcommandWindow?: boolean,\n\n\t/** enables undo/redo */\n\tundoRedo?: boolean,\n\n\t/** location of cell with level buttons */\n\tlevelButtonCell?: {c: number, r: number},\n\n\t/** shows placeholder if grid is empty */\n\temptyPlaceholder?: boolean,\n\n\t/** custom cell renderer applied after default renderers */\n\tafterRenderer?: Renderer,\n\n\t/** factor of cell indentation */\n\tcellIndentFactor?: number,\n\n\t/** factor of level indentation */\n\tlevelIndentFactor?: number,\n\n\t/** menu options */\n\tmenus?: MenuOptions,\n\n\t/** editing options */\n\tediting?: EditingOptions,\n\n\t/** selecting options */\n\tselecting?: SelectingOptions,\n\n\t/** comment options */\n\tcomments?: CommentOptions,\n\t\n\t/** scrolling options */\n\tscrolling?: ScrollingOptions,\n\n\t/** event options */\n\tevents?: EventOptions,\n\t\n\t/** max number of sorted columns, deprecated */\n\tmaxSortingColumns?: number;\n\n\t/** enabled column sorting, deprecated */\n\tcolumnSorting?: boolean,\n\n\t/** column sorting options */\n\tsorting?: SortingOptions,\n\n\t/** clipboard options */\n\tclipboard?: ClipboardOptions,\n\n\t/** default cell validation rules */\n\tcellValidation?: CellValidation,\n\n\t/** first cell in viewport */\n\tfirstCell?: CellAddress,\n\n\t/** cell element caching */\n\tcellCache?: boolean,\n\n\t/** use single cell model instance for all grid cells */\n\tsingleCellModel?: boolean,\n\n\t/** options for raw html export/print */\n\tprint?: PrintOptions,\n\n\t/** grid zoom factor */\n\tzoom?: number,\n\n\t/** hides the outer border of the grid (right and top) */\n\thideOuterBorder?: boolean,\n} & CommonOptions;\n\nexport type OptionSource = Omit<Options, 'rowTree'|'columnTree'|'filters'|'cellValidation'> & {\n\trowTree?: boolean|TreeOptions;\n\tcolumnTree?: boolean|TreeOptions;\n\tfilters?: boolean|FilterOptions;\n\tcellValidation?: CellValidationSource;\n}\n\nexport function initOptions(options?: Partial<OptionSource>, origOptions: OptionSource = null): Options {\n\tconst opt = utils.mergeDeep<OptionSource>({}, constants.DEFAULT_OPTIONS, origOptions, initCommonOptions(options, origOptions));\n\t\n\tif (opt.numberFormat) {\n\t\topt.numberFormatter = numbers.getNumberFormatter(opt.formatLocale, opt.numberFormat);\n\t} else if (!opt.numberFormatter) {\n\t\topt.numberFormatter = numbers.getNumberFormatter(opt.formatLocale);\n\t}\n\n\tif (opt.dateFormat) {\n\t\topt.dateFormatter = dates.getDateFormatter(opt.formatLocale, opt.dateFormat);\n\t} else if (!opt.dateFormatter) {\n\t\topt.dateFormatter = dates.getDateFormatter(opt.formatLocale);\n\t}\n\n\tif (opt.columnSorting) {\n\t\topt.sorting = opt.sorting || {enabled: true};\n\t}\n\t\n\tif (typeof opt.filters === 'boolean') opt.filters = {enabled: opt.filters};\n\topt.filters = Object.assign({}, DEFAULT_FILTER_OPTIONS, opt.filters);\n\n\tif (typeof opt.rowTree === 'boolean') opt.rowTree = {enabled: opt.rowTree};\n\topt.rowTree = Object.assign({}, DEFAULT_TREE_OPTIONS, opt.rowTree);\n\n\tif (typeof opt.columnTree === 'boolean') opt.columnTree = {enabled: opt.columnTree};\n\topt.columnTree = Object.assign({}, DEFAULT_TREE_OPTIONS, opt.columnTree);\n\n\tif (opt.cellValidation) opt.cellValidation = normalizeCellValidation(opt.cellValidation);\n\n\treturn opt as Options;\n}"]}
|
package/dist/model/tableTheme.js
CHANGED
|
@@ -54,11 +54,11 @@ function applyAxisTheme(theme, model, type, tableElements) {
|
|
|
54
54
|
effectiveNodes = nodes.filter(node => matchItems.every(match => matchProperty(node, match)));
|
|
55
55
|
}
|
|
56
56
|
else {
|
|
57
|
-
if (item.index > -1) {
|
|
58
|
-
effectiveNodes =
|
|
57
|
+
if (item.index > -1) { // by the index - nodes may be a subset of the axis
|
|
58
|
+
effectiveNodes = nodes.filter(node => node.index == item.index);
|
|
59
59
|
}
|
|
60
60
|
else if (item.level > -1) {
|
|
61
|
-
effectiveNodes = levelMap.get(item.level);
|
|
61
|
+
effectiveNodes = levelMap.get(item.level) ?? [];
|
|
62
62
|
}
|
|
63
63
|
else {
|
|
64
64
|
effectiveNodes = nodes;
|
|
@@ -106,10 +106,11 @@ export function applyCellTheme(theme, model, range) {
|
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
|
-
else if (item.type) { // conditional format
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
109
|
+
else if (item.type) { // conditional format over the whole table - already in place when applied onto a range
|
|
110
|
+
if (!range)
|
|
111
|
+
model.conditionalFormats.add(Object.assign({
|
|
112
|
+
ranges: 'A:' + model.columns[model.columns.length - 1].address
|
|
113
|
+
}, item));
|
|
113
114
|
}
|
|
114
115
|
else { // static format
|
|
115
116
|
for (const column of model.columns) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tableTheme.js","sourceRoot":"","sources":["../../src/model/tableTheme.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { tree, utils } from \"@omegagrid/core\";\nimport { GridModel } from \"./gridModel\";\nimport { RowModel } from \"./rowModel\";\nimport { ColumnModel } from \"./columnModel\";\nimport { ConditionalFormatItemSource } from \"./conditionalFormats\";\nimport { CellModel } from \"./cellModel\";\nimport { CellRange } from \"../common\";\n\n/** @deprecated use MatchItem */\nexport type ThemeItemCondtion = {\n\tproperty?: keyof CellModel;\n\tvalue?: unknown;\n}\n\nexport type MatchValue = string|number|boolean|RegExp;\n\nexport type MatchItem = {\n\t/** matched model property (rows/columns: e.g. 'name', 'level', 'index'; cells: any CellModel property) */\n\tproperty: string;\n\t/**\n\t * Expected value(s); an array matches when ANY of the values matches (OR).\n\t * String/RegExp values of the 'name' property use the nameToRegExp conventions.\n\t */\n\tvalue: MatchValue|MatchValue[];\n}\n\nexport type ThemeItem = Omit<ConditionalFormatItemSource, 'ranges'> & {\n\t/** @deprecated use matches */\n\tconditions?: ThemeItemCondtion[];\n\t/**\n\t * Model matchers (rows/columns match node properties, cells match cell\n\t * properties): all items of an array must match (AND); the OR lives in\n\t * each item's value array.\n\t */\n\tmatches?: MatchItem|MatchItem[];\n};\n\nexport type ThemeAxisItem = ThemeItem & {\n\t/** @deprecated use matches - style will apply on cells with specific row/column index */\n\tindex?: number;\n\t/** @deprecated use matches - style will apply on cells with specific row/column level */\n\tlevel?: number;\n\t/** @deprecated use matches - style will apply on cells their names are matching regular expression */\n\tname?: string|RegExp;\n\t/** axis property priority */\n\tpriority?: number;\n}\n\nexport type ThemeRowItem = ThemeAxisItem & {\n\t/** row height */\n\theight?: number;\n}\n\nexport type ThemeColumnItem = ThemeAxisItem & {\n\t/** column width */\n\twidth?: number;\n}\n\nexport type TableTheme = {\n\t/** theme name */\n\tname: string;\n\t/** styles for cells */\n\tcells?: ThemeItem[],\n\t/** styles for columns */\n\tcolumns?: ThemeColumnItem[],\n\t/** styles for rows */\n\trows?: ThemeRowItem[],\n}\n\n/**\n * Name matcher: a RegExp is used as is, a '/'-delimited string is a regular\n * expression as written, any other string matches the whole node name with\n * '*' as a wildcard (the rest escaped). String forms match CASE-INSENSITIVELY,\n * so the theme patterns stay simple; pass a RegExp instance for exact casing.\n */\nexport function nameToRegExp(name: string|RegExp): RegExp {\n\tif (name instanceof RegExp) return name;\n\tconst value = String(name);\n\tif (value.length > 2 && value.startsWith('/') && value.endsWith('/')) {\n\t\ttry {\n\t\t\treturn new RegExp(value.slice(1, -1), 'i');\n\t\t} catch {\n\t\t\t// fall through to the wildcard form\n\t\t}\n\t}\n\treturn new RegExp(`^${value.split('*').map(part => utils.escapeRegExp(part)).join('.*')}$`, 'i');\n}\n\n/**\n * Shared evaluator of the theme matchers (axis item matches and cell conditions):\n * the target's property must equal one of the expected values; string/RegExp values\n * of the 'name' property are matched through the nameToRegExp conventions.\n */\nfunction matchProperty(target: any, match: {property?: string, value?: unknown}): boolean {\n\tif (!match.property) return match.value == null;\n\tconst actual = target[match.property];\n\tconst values = Array.isArray(match.value) ? match.value : [match.value];\n\treturn values.some(value => match.property == 'name' && (typeof value === 'string' || value instanceof RegExp)\n\t\t? nameToRegExp(value).test(String(actual ?? ''))\n\t\t: actual == value);\n}\n\nfunction getLevelMap<T extends tree.TreeNodeType>(nodes: T[]) {\n\tconst map = new Map<number, T[]>();\n\tfor (const node of nodes) {\n\t\tif (!map.has(node.level)) map.set(node.level, []);\n\t\tmap.get(node.level).push(node);\n\t}\n\treturn map;\n}\n\nfunction applyAxisTheme(theme: TableTheme, model: GridModel, type: 'rows'|'columns', tableElements?: (RowModel|ColumnModel)[]) {\n\tconst nodes = tableElements ?? (type == 'rows' ? model.rows : model.columns);\n\tconst levelMap = getLevelMap<RowModel|ColumnModel>(nodes);\n\tconst themeItems = theme[type] ?? [];\n\n\tfor (const item of themeItems) {\n\t\tlet effectiveNodes: (RowModel|ColumnModel)[];\n\t\tif (item.matches) {\n\t\t\tconst matchItems = Array.isArray(item.matches) ? item.matches : [item.matches];\n\t\t\teffectiveNodes = nodes.filter(node => matchItems.every(match => matchProperty(node, match)));\n\t\t} else {\n\t\t\tif (item.index > -1) {\n\t\t\t\teffectiveNodes = [nodes[item.index]];\n\t\t\t} else if (item.level > -1) {\n\t\t\t\teffectiveNodes = levelMap.get(item.level);\n\t\t\t} else {\n\t\t\t\teffectiveNodes = nodes;\n\t\t\t}\n\n\t\t\tif (item.name) {\n\t\t\t\tconst nameRegExp = nameToRegExp(item.name);\n\t\t\t\teffectiveNodes = effectiveNodes.filter(node => nameRegExp.test(node.name));\n\t\t\t}\n\t\t}\n\n\t\teffectiveNodes?.forEach(node => {\n\t\t\tif (item.priority != null) node.priority = item.priority;\n\n\t\t\tif (item.type) { // conditional format\n\t\t\t\tmodel.conditionalFormats.add(Object.assign({\n\t\t\t\t\tranges: `${node.address}:${node.address}`\n\t\t\t\t}, item));\n\t\t\t} else { // static format\n\t\t\t\tnode.style = model.styles.add(item.style).id;\n\n\t\t\t\tif (type == 'rows' && (item as ThemeRowItem).height != null) {\n\t\t\t\t\t(node as RowModel).height = (item as ThemeRowItem).height;\n\t\t\t\t} else if (type == 'columns' && (item as ThemeColumnItem).width != null) {\n\t\t\t\t\t(node as ColumnModel).width = (item as ThemeColumnItem).width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/** matchers of a theme item - matches takes precedence over the deprecated conditions */\nfunction getMatchItems(item: ThemeItem): {property?: string, value?: unknown}[]|undefined {\n\tif (item.matches) return Array.isArray(item.matches) ? item.matches : [item.matches];\n\treturn item.conditions;\n}\n\nexport function applyCellTheme(theme: TableTheme, model: GridModel, range?: CellRange) {\n\tconst themeItems = theme.cells ?? [];\n\n\tfor (const item of themeItems) {\n\t\tconst matchItems = getMatchItems(item);\n\t\tif (matchItems?.length) {\n\t\t\tconst iterator = model.getRangeIterator(range ?? model.gridRange);\n\t\t\tfor (const cell of iterator) {\n\t\t\t\tif (matchItems.every(match => matchProperty(cell, match))) {\n\t\t\t\t\tcell.style = model.styles.add(item.style).id;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (item.type) { // conditional format\n\t\t\tmodel.conditionalFormats.add(Object.assign({\n\t\t\t\tranges: 'A:' + model.columns[model.columns.length - 1].address\n\t\t\t}, item));\n\t\t} else { // static format\n\t\t\tfor (const column of model.columns) {\n\t\t\t\tif (column.style != null) continue;\n\t\t\t\tcolumn.style = model.styles.add(item.style).id;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function applyColumnTheme(theme: TableTheme, model: GridModel, columns?: ColumnModel[]) {\n\tapplyAxisTheme(theme, model, 'columns', columns);\n}\n\nexport function applyRowTheme(theme: TableTheme, model: GridModel, rows?: RowModel[]) {\n\tapplyAxisTheme(theme, model, 'rows', rows);\n}\n\nexport function applyTheme(theme: TableTheme, model: GridModel) {\n\tapplyCellTheme(theme, model);\n\tapplyColumnTheme(theme, model);\n\tapplyRowTheme(theme, model);\n}"]}
|
|
1
|
+
{"version":3,"file":"tableTheme.js","sourceRoot":"","sources":["../../src/model/tableTheme.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { tree, utils } from \"@omegagrid/core\";\nimport { GridModel } from \"./gridModel\";\nimport { RowModel } from \"./rowModel\";\nimport { ColumnModel } from \"./columnModel\";\nimport { ConditionalFormatItemSource } from \"./conditionalFormats\";\nimport { CellModel } from \"./cellModel\";\nimport { CellRange } from \"../common\";\n\n/** @deprecated use MatchItem */\nexport type ThemeItemCondtion = {\n\tproperty?: keyof CellModel;\n\tvalue?: unknown;\n}\n\nexport type MatchValue = string|number|boolean|RegExp;\n\nexport type MatchItem = {\n\t/** matched model property (rows/columns: e.g. 'name', 'level', 'index'; cells: any CellModel property) */\n\tproperty: string;\n\t/**\n\t * Expected value(s); an array matches when ANY of the values matches (OR).\n\t * String/RegExp values of the 'name' property use the nameToRegExp conventions.\n\t */\n\tvalue: MatchValue|MatchValue[];\n}\n\nexport type ThemeItem = Omit<ConditionalFormatItemSource, 'ranges'> & {\n\t/** @deprecated use matches */\n\tconditions?: ThemeItemCondtion[];\n\t/**\n\t * Model matchers (rows/columns match node properties, cells match cell\n\t * properties): all items of an array must match (AND); the OR lives in\n\t * each item's value array.\n\t */\n\tmatches?: MatchItem|MatchItem[];\n};\n\nexport type ThemeAxisItem = ThemeItem & {\n\t/** @deprecated use matches - style will apply on cells with specific row/column index */\n\tindex?: number;\n\t/** @deprecated use matches - style will apply on cells with specific row/column level */\n\tlevel?: number;\n\t/** @deprecated use matches - style will apply on cells their names are matching regular expression */\n\tname?: string|RegExp;\n\t/** axis property priority */\n\tpriority?: number;\n}\n\nexport type ThemeRowItem = ThemeAxisItem & {\n\t/** row height */\n\theight?: number;\n}\n\nexport type ThemeColumnItem = ThemeAxisItem & {\n\t/** column width */\n\twidth?: number;\n}\n\nexport type TableTheme = {\n\t/** theme name */\n\tname: string;\n\t/** styles for cells */\n\tcells?: ThemeItem[],\n\t/** styles for columns */\n\tcolumns?: ThemeColumnItem[],\n\t/** styles for rows */\n\trows?: ThemeRowItem[],\n}\n\n/**\n * Name matcher: a RegExp is used as is, a '/'-delimited string is a regular\n * expression as written, any other string matches the whole node name with\n * '*' as a wildcard (the rest escaped). String forms match CASE-INSENSITIVELY,\n * so the theme patterns stay simple; pass a RegExp instance for exact casing.\n */\nexport function nameToRegExp(name: string|RegExp): RegExp {\n\tif (name instanceof RegExp) return name;\n\tconst value = String(name);\n\tif (value.length > 2 && value.startsWith('/') && value.endsWith('/')) {\n\t\ttry {\n\t\t\treturn new RegExp(value.slice(1, -1), 'i');\n\t\t} catch {\n\t\t\t// fall through to the wildcard form\n\t\t}\n\t}\n\treturn new RegExp(`^${value.split('*').map(part => utils.escapeRegExp(part)).join('.*')}$`, 'i');\n}\n\n/**\n * Shared evaluator of the theme matchers (axis item matches and cell conditions):\n * the target's property must equal one of the expected values; string/RegExp values\n * of the 'name' property are matched through the nameToRegExp conventions.\n */\nfunction matchProperty(target: any, match: {property?: string, value?: unknown}): boolean {\n\tif (!match.property) return match.value == null;\n\tconst actual = target[match.property];\n\tconst values = Array.isArray(match.value) ? match.value : [match.value];\n\treturn values.some(value => match.property == 'name' && (typeof value === 'string' || value instanceof RegExp)\n\t\t? nameToRegExp(value).test(String(actual ?? ''))\n\t\t: actual == value);\n}\n\nfunction getLevelMap<T extends tree.TreeNodeType>(nodes: T[]) {\n\tconst map = new Map<number, T[]>();\n\tfor (const node of nodes) {\n\t\tif (!map.has(node.level)) map.set(node.level, []);\n\t\tmap.get(node.level).push(node);\n\t}\n\treturn map;\n}\n\nfunction applyAxisTheme(theme: TableTheme, model: GridModel, type: 'rows'|'columns', tableElements?: (RowModel|ColumnModel)[]) {\n\tconst nodes = tableElements ?? (type == 'rows' ? model.rows : model.columns);\n\tconst levelMap = getLevelMap<RowModel|ColumnModel>(nodes);\n\tconst themeItems = theme[type] ?? [];\n\n\tfor (const item of themeItems) {\n\t\tlet effectiveNodes: (RowModel|ColumnModel)[];\n\t\tif (item.matches) {\n\t\t\tconst matchItems = Array.isArray(item.matches) ? item.matches : [item.matches];\n\t\t\teffectiveNodes = nodes.filter(node => matchItems.every(match => matchProperty(node, match)));\n\t\t} else {\n\t\t\tif (item.index > -1) { // by the index - nodes may be a subset of the axis\n\t\t\t\teffectiveNodes = nodes.filter(node => node.index == item.index);\n\t\t\t} else if (item.level > -1) {\n\t\t\t\teffectiveNodes = levelMap.get(item.level) ?? [];\n\t\t\t} else {\n\t\t\t\teffectiveNodes = nodes;\n\t\t\t}\n\n\t\t\tif (item.name) {\n\t\t\t\tconst nameRegExp = nameToRegExp(item.name);\n\t\t\t\teffectiveNodes = effectiveNodes.filter(node => nameRegExp.test(node.name));\n\t\t\t}\n\t\t}\n\n\t\teffectiveNodes?.forEach(node => {\n\t\t\tif (item.priority != null) node.priority = item.priority;\n\n\t\t\tif (item.type) { // conditional format\n\t\t\t\tmodel.conditionalFormats.add(Object.assign({\n\t\t\t\t\tranges: `${node.address}:${node.address}`\n\t\t\t\t}, item));\n\t\t\t} else { // static format\n\t\t\t\tnode.style = model.styles.add(item.style).id;\n\n\t\t\t\tif (type == 'rows' && (item as ThemeRowItem).height != null) {\n\t\t\t\t\t(node as RowModel).height = (item as ThemeRowItem).height;\n\t\t\t\t} else if (type == 'columns' && (item as ThemeColumnItem).width != null) {\n\t\t\t\t\t(node as ColumnModel).width = (item as ThemeColumnItem).width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/** matchers of a theme item - matches takes precedence over the deprecated conditions */\nfunction getMatchItems(item: ThemeItem): {property?: string, value?: unknown}[]|undefined {\n\tif (item.matches) return Array.isArray(item.matches) ? item.matches : [item.matches];\n\treturn item.conditions;\n}\n\nexport function applyCellTheme(theme: TableTheme, model: GridModel, range?: CellRange) {\n\tconst themeItems = theme.cells ?? [];\n\n\tfor (const item of themeItems) {\n\t\tconst matchItems = getMatchItems(item);\n\t\tif (matchItems?.length) {\n\t\t\tconst iterator = model.getRangeIterator(range ?? model.gridRange);\n\t\t\tfor (const cell of iterator) {\n\t\t\t\tif (matchItems.every(match => matchProperty(cell, match))) {\n\t\t\t\t\tcell.style = model.styles.add(item.style).id;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (item.type) { // conditional format over the whole table - already in place when applied onto a range\n\t\t\tif (!range) model.conditionalFormats.add(Object.assign({\n\t\t\t\tranges: 'A:' + model.columns[model.columns.length - 1].address\n\t\t\t}, item));\n\t\t} else { // static format\n\t\t\tfor (const column of model.columns) {\n\t\t\t\tif (column.style != null) continue;\n\t\t\t\tcolumn.style = model.styles.add(item.style).id;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function applyColumnTheme(theme: TableTheme, model: GridModel, columns?: ColumnModel[]) {\n\tapplyAxisTheme(theme, model, 'columns', columns);\n}\n\nexport function applyRowTheme(theme: TableTheme, model: GridModel, rows?: RowModel[]) {\n\tapplyAxisTheme(theme, model, 'rows', rows);\n}\n\nexport function applyTheme(theme: TableTheme, model: GridModel) {\n\tapplyCellTheme(theme, model);\n\tapplyColumnTheme(theme, model);\n\tapplyRowTheme(theme, model);\n}"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omegagrid/grid-core",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.4",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"description": "Grid model, no ui components",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"generate-functions-docs": "node ./scripts/generate-functions-docs.cjs"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@omegagrid/core": "^0.11.
|
|
32
|
-
"@omegagrid/localize": "^0.11.
|
|
31
|
+
"@omegagrid/core": "^0.11.4",
|
|
32
|
+
"@omegagrid/localize": "^0.11.4",
|
|
33
33
|
"@stdlib/stats": "^0.0.13",
|
|
34
34
|
"color": "^4.2.3",
|
|
35
35
|
"date-fns": "^3.2.0",
|