@omegagrid/grid-core 0.10.1 → 0.10.2
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/package.json +3 -3
- package/dist/__generated/functions.d.ts +0 -4
- package/dist/__generated/functions.d.ts.map +0 -1
- package/dist/__generated/functions.js +0 -45
- package/dist/__generated/functions.js.map +0 -1
- package/dist/calculations/autofill.d.ts +0 -7
- package/dist/calculations/autofill.d.ts.map +0 -1
- package/dist/calculations/autofill.js +0 -84
- package/dist/calculations/autofill.js.map +0 -1
- package/dist/calculations/conditions.d.ts +0 -4
- package/dist/calculations/conditions.d.ts.map +0 -1
- package/dist/calculations/conditions.js +0 -41
- package/dist/calculations/conditions.js.map +0 -1
- package/dist/calculations/context.d.ts +0 -53
- package/dist/calculations/context.d.ts.map +0 -1
- package/dist/calculations/context.js +0 -85
- package/dist/calculations/context.js.map +0 -1
- package/dist/calculations/formula.d.ts +0 -89
- package/dist/calculations/formula.d.ts.map +0 -1
- package/dist/calculations/formula.js +0 -443
- package/dist/calculations/formula.js.map +0 -1
- package/dist/calculations/functions/dates.d.ts +0 -13
- package/dist/calculations/functions/dates.d.ts.map +0 -1
- package/dist/calculations/functions/dates.js +0 -58
- package/dist/calculations/functions/dates.js.map +0 -1
- package/dist/calculations/functions/index.d.ts +0 -11
- package/dist/calculations/functions/index.d.ts.map +0 -1
- package/dist/calculations/functions/index.js +0 -21
- package/dist/calculations/functions/index.js.map +0 -1
- package/dist/calculations/functions/logical.d.ts +0 -11
- package/dist/calculations/functions/logical.d.ts.map +0 -1
- package/dist/calculations/functions/logical.js +0 -50
- package/dist/calculations/functions/logical.js.map +0 -1
- package/dist/calculations/functions/lookup.d.ts +0 -18
- package/dist/calculations/functions/lookup.d.ts.map +0 -1
- package/dist/calculations/functions/lookup.js +0 -169
- package/dist/calculations/functions/lookup.js.map +0 -1
- package/dist/calculations/functions/math.d.ts +0 -72
- package/dist/calculations/functions/math.d.ts.map +0 -1
- package/dist/calculations/functions/math.js +0 -182
- package/dist/calculations/functions/math.js.map +0 -1
- package/dist/calculations/functions/special.d.ts +0 -2
- package/dist/calculations/functions/special.d.ts.map +0 -1
- package/dist/calculations/functions/special.js +0 -51
- package/dist/calculations/functions/special.js.map +0 -1
- package/dist/calculations/functions/statistical.d.ts +0 -7
- package/dist/calculations/functions/statistical.d.ts.map +0 -1
- package/dist/calculations/functions/statistical.js +0 -47
- package/dist/calculations/functions/statistical.js.map +0 -1
- package/dist/calculations/functions/text.d.ts +0 -29
- package/dist/calculations/functions/text.d.ts.map +0 -1
- package/dist/calculations/functions/text.js +0 -58
- package/dist/calculations/functions/text.js.map +0 -1
- package/dist/calculations/helpers.d.ts +0 -13
- package/dist/calculations/helpers.d.ts.map +0 -1
- package/dist/calculations/helpers.js +0 -32
- package/dist/calculations/helpers.js.map +0 -1
- package/dist/calculations/index.d.ts +0 -7
- package/dist/calculations/index.d.ts.map +0 -1
- package/dist/calculations/index.js +0 -7
- package/dist/calculations/index.js.map +0 -1
- package/dist/calculations/operators.d.ts +0 -19
- package/dist/calculations/operators.d.ts.map +0 -1
- package/dist/calculations/operators.js +0 -58
- package/dist/calculations/operators.js.map +0 -1
- package/dist/calculations/tokenization.d.ts +0 -36
- package/dist/calculations/tokenization.d.ts.map +0 -1
- package/dist/calculations/tokenization.js +0 -203
- package/dist/calculations/tokenization.js.map +0 -1
- package/dist/common/index.d.ts +0 -2
- package/dist/common/index.d.ts.map +0 -1
- package/dist/common/index.js +0 -2
- package/dist/common/index.js.map +0 -1
- package/dist/common/range.d.ts +0 -66
- package/dist/common/range.d.ts.map +0 -1
- package/dist/common/range.js +0 -222
- package/dist/common/range.js.map +0 -1
- package/dist/constants.d.ts +0 -68
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -127
- package/dist/constants.js.map +0 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -8
- package/dist/index.js.map +0 -1
- package/dist/model/calculationModel.d.ts +0 -30
- package/dist/model/calculationModel.d.ts.map +0 -1
- package/dist/model/calculationModel.js +0 -206
- package/dist/model/calculationModel.js.map +0 -1
- package/dist/model/cellModel.d.ts +0 -134
- package/dist/model/cellModel.d.ts.map +0 -1
- package/dist/model/cellModel.js +0 -371
- package/dist/model/cellModel.js.map +0 -1
- package/dist/model/columnModel.d.ts +0 -160
- package/dist/model/columnModel.d.ts.map +0 -1
- package/dist/model/columnModel.js +0 -159
- package/dist/model/columnModel.js.map +0 -1
- package/dist/model/commentModel.d.ts +0 -58
- package/dist/model/commentModel.d.ts.map +0 -1
- package/dist/model/commentModel.js +0 -81
- package/dist/model/commentModel.js.map +0 -1
- package/dist/model/conditionalFormats.d.ts +0 -104
- package/dist/model/conditionalFormats.d.ts.map +0 -1
- package/dist/model/conditionalFormats.js +0 -414
- package/dist/model/conditionalFormats.js.map +0 -1
- package/dist/model/cssStyle.d.ts +0 -20
- package/dist/model/cssStyle.d.ts.map +0 -1
- package/dist/model/cssStyle.js +0 -301
- package/dist/model/cssStyle.js.map +0 -1
- package/dist/model/dependencies.d.ts +0 -30
- package/dist/model/dependencies.d.ts.map +0 -1
- package/dist/model/dependencies.js +0 -139
- package/dist/model/dependencies.js.map +0 -1
- package/dist/model/dependencyModel.d.ts +0 -9
- package/dist/model/dependencyModel.d.ts.map +0 -1
- package/dist/model/dependencyModel.js +0 -9
- package/dist/model/dependencyModel.js.map +0 -1
- package/dist/model/elementModel.d.ts +0 -103
- package/dist/model/elementModel.d.ts.map +0 -1
- package/dist/model/elementModel.js +0 -181
- package/dist/model/elementModel.js.map +0 -1
- package/dist/model/filterModel.d.ts +0 -35
- package/dist/model/filterModel.d.ts.map +0 -1
- package/dist/model/filterModel.js +0 -153
- package/dist/model/filterModel.js.map +0 -1
- package/dist/model/gridModel.d.ts +0 -181
- package/dist/model/gridModel.d.ts.map +0 -1
- package/dist/model/gridModel.js +0 -797
- package/dist/model/gridModel.js.map +0 -1
- package/dist/model/groupModel.d.ts +0 -26
- package/dist/model/groupModel.d.ts.map +0 -1
- package/dist/model/groupModel.js +0 -112
- package/dist/model/groupModel.js.map +0 -1
- package/dist/model/history.d.ts +0 -24
- package/dist/model/history.d.ts.map +0 -1
- package/dist/model/history.js +0 -35
- package/dist/model/history.js.map +0 -1
- package/dist/model/index.d.ts +0 -23
- package/dist/model/index.d.ts.map +0 -1
- package/dist/model/index.js +0 -23
- package/dist/model/index.js.map +0 -1
- package/dist/model/iterableRange.d.ts +0 -49
- package/dist/model/iterableRange.d.ts.map +0 -1
- package/dist/model/iterableRange.js +0 -108
- package/dist/model/iterableRange.js.map +0 -1
- package/dist/model/merges.d.ts +0 -34
- package/dist/model/merges.d.ts.map +0 -1
- package/dist/model/merges.js +0 -123
- package/dist/model/merges.js.map +0 -1
- package/dist/model/namingModel.d.ts +0 -25
- package/dist/model/namingModel.d.ts.map +0 -1
- package/dist/model/namingModel.js +0 -77
- package/dist/model/namingModel.js.map +0 -1
- package/dist/model/options.d.ts +0 -257
- package/dist/model/options.d.ts.map +0 -1
- package/dist/model/options.js +0 -35
- package/dist/model/options.js.map +0 -1
- package/dist/model/rowModel.d.ts +0 -104
- package/dist/model/rowModel.d.ts.map +0 -1
- package/dist/model/rowModel.js +0 -155
- package/dist/model/rowModel.js.map +0 -1
- package/dist/model/selectionModel.d.ts +0 -19
- package/dist/model/selectionModel.d.ts.map +0 -1
- package/dist/model/selectionModel.js +0 -40
- package/dist/model/selectionModel.js.map +0 -1
- package/dist/model/sortingModel.d.ts +0 -46
- package/dist/model/sortingModel.d.ts.map +0 -1
- package/dist/model/sortingModel.js +0 -157
- package/dist/model/sortingModel.js.map +0 -1
- package/dist/model/style.d.ts +0 -90
- package/dist/model/style.d.ts.map +0 -1
- package/dist/model/style.js +0 -34
- package/dist/model/style.js.map +0 -1
- package/dist/model/styleModel.d.ts +0 -22
- package/dist/model/styleModel.d.ts.map +0 -1
- package/dist/model/styleModel.js +0 -91
- package/dist/model/styleModel.js.map +0 -1
- package/dist/model/tableTheme.d.ts +0 -46
- package/dist/model/tableTheme.d.ts.map +0 -1
- package/dist/model/tableTheme.js +0 -93
- package/dist/model/tableTheme.js.map +0 -1
- package/dist/model/validations.d.ts +0 -5
- package/dist/model/validations.d.ts.map +0 -1
- package/dist/model/validations.js +0 -24
- package/dist/model/validations.js.map +0 -1
- package/dist/sparklines/index.d.ts +0 -2
- package/dist/sparklines/index.d.ts.map +0 -1
- package/dist/sparklines/index.js +0 -2
- package/dist/sparklines/index.js.map +0 -1
- package/dist/sparklines/sparklines.d.ts +0 -59
- package/dist/sparklines/sparklines.d.ts.map +0 -1
- package/dist/sparklines/sparklines.js +0 -176
- package/dist/sparklines/sparklines.js.map +0 -1
- package/dist/types.d.ts +0 -103
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/utils.d.ts +0 -4
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -11
- package/dist/utils.js.map +0 -1
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import { utils } from "@omegagrid/core";
|
|
2
|
-
import { CellRange } from "../common";
|
|
3
|
-
import constants from "../constants";
|
|
4
|
-
import { DependencyModel } from "../model/dependencyModel";
|
|
5
|
-
export class Sparklines extends DependencyModel {
|
|
6
|
-
constructor(model, sourceData) {
|
|
7
|
-
super(model, 'sparklines');
|
|
8
|
-
this.model = model;
|
|
9
|
-
this.map = new Map();
|
|
10
|
-
this.groups = new Map();
|
|
11
|
-
this.extremes = new Map();
|
|
12
|
-
this.maxIndex = 0;
|
|
13
|
-
this.updateRangeMap = false;
|
|
14
|
-
this.populate(sourceData);
|
|
15
|
-
}
|
|
16
|
-
populate(sourceData) {
|
|
17
|
-
sourceData?.forEach(item => {
|
|
18
|
-
try {
|
|
19
|
-
this.add(CellRange.fromA1(item.location), Array.isArray(item.data)
|
|
20
|
-
? item.data.map(addr => [CellRange.fromA1(addr)])
|
|
21
|
-
: item.data.split(',').map(addr => [CellRange.fromA1(addr)]), utils.mergeDeep({}, constants.DEFAULT_SPARKLINE_OPTIONS, item.options));
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
this.model.logger.error(`sparkline error: ${JSON.stringify(item)}`, error);
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
getSourceData() {
|
|
29
|
-
const data = [];
|
|
30
|
-
this.groups.forEach(group => {
|
|
31
|
-
data.push({
|
|
32
|
-
location: group.locRange.A1,
|
|
33
|
-
data: group.dataRanges.map(r => r[0].A1).join(','),
|
|
34
|
-
options: {
|
|
35
|
-
minValue: group.minValue,
|
|
36
|
-
maxValue: group.maxValue,
|
|
37
|
-
type: group.type,
|
|
38
|
-
style: group.style,
|
|
39
|
-
marker: group.marker
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
return data;
|
|
44
|
-
}
|
|
45
|
-
has(address) {
|
|
46
|
-
return this.map.has(address);
|
|
47
|
-
}
|
|
48
|
-
get(address) {
|
|
49
|
-
return this.map.get(address);
|
|
50
|
-
}
|
|
51
|
-
createDependencies(address) {
|
|
52
|
-
const item = this.map.get(address);
|
|
53
|
-
item[1].forEach(dataRange => this._dependencies.add(address, dataRange[0].A1, dataRange[1]));
|
|
54
|
-
}
|
|
55
|
-
updateRangeMaps() {
|
|
56
|
-
this.dependencies.clear();
|
|
57
|
-
this.map.clear();
|
|
58
|
-
this.groups.forEach((group, groupIndex) => this.createRangeMap(groupIndex, group.locRange, group.dataRanges));
|
|
59
|
-
}
|
|
60
|
-
getValues(address) {
|
|
61
|
-
if (this.updateRangeMap)
|
|
62
|
-
this.updateRangeMaps();
|
|
63
|
-
const item = this.map.get(address);
|
|
64
|
-
const model = item[1][0][1] ? this.model.getConnectedModel(item[1][0][1]) : this.model;
|
|
65
|
-
if (!this._dependencies.has(address))
|
|
66
|
-
this.createDependencies(address);
|
|
67
|
-
return item[1].flatMap(dataRange => model.getValuesInRange(dataRange[0])[0]);
|
|
68
|
-
}
|
|
69
|
-
getExtremes(address) {
|
|
70
|
-
const item = this.map.get(address);
|
|
71
|
-
const model = item[1][0][1] ? this.model.getConnectedModel(item[1][0][1]) : this.model;
|
|
72
|
-
const group = this.groups.get(item[0]);
|
|
73
|
-
let localExtremes;
|
|
74
|
-
let commonExtremes;
|
|
75
|
-
let min, max;
|
|
76
|
-
if (group.minValue == null || utils.isString(group.minValue)) {
|
|
77
|
-
if ((group.minValue || 'auto') == 'auto') {
|
|
78
|
-
localExtremes = localExtremes ?? utils.minmax2d(...item[1].map(itm => model.getValuesInRange(itm[0])));
|
|
79
|
-
min = localExtremes[0];
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
if (!this.extremes.has(item[0])) {
|
|
83
|
-
this.extremes.set(item[0], utils.minmax2d(...group.dataRanges.map(dr => model.getValuesInRange(dr[0]))));
|
|
84
|
-
}
|
|
85
|
-
commonExtremes = this.extremes.get(item[0]);
|
|
86
|
-
min = commonExtremes[0];
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
min = group.minValue;
|
|
91
|
-
}
|
|
92
|
-
if (group.maxValue == null || utils.isString(group.maxValue)) {
|
|
93
|
-
if ((group.maxValue || 'auto') == 'auto') {
|
|
94
|
-
localExtremes = localExtremes ?? utils.minmax2d(...item[1].map(itm => model.getValuesInRange(itm[0])));
|
|
95
|
-
max = localExtremes[1];
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
if (!this.extremes.has(item[0])) {
|
|
99
|
-
this.extremes.set(item[0], utils.minmax2d(...group.dataRanges.map(dr => model.getValuesInRange(dr[0]))));
|
|
100
|
-
}
|
|
101
|
-
commonExtremes = this.extremes.get(item[0]);
|
|
102
|
-
max = commonExtremes[1];
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
max = group.maxValue;
|
|
107
|
-
}
|
|
108
|
-
return [min, max];
|
|
109
|
-
}
|
|
110
|
-
createRangeMap(groupIndex, locRange, dataRanges) {
|
|
111
|
-
locRange = locRange.intersect(this.model.gridRange);
|
|
112
|
-
const dataSize = dataRanges[0][0].size;
|
|
113
|
-
const locSize = locRange.size;
|
|
114
|
-
if (locSize.columns > 1 && locSize.rows > 1) {
|
|
115
|
-
this.model.logger?.error(`invalid sparkline location range: ${locRange.A1}`);
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
let vertical = false;
|
|
119
|
-
if (locSize.columns == 1 && locSize.rows == 1)
|
|
120
|
-
vertical = dataSize.rows > 1;
|
|
121
|
-
else
|
|
122
|
-
vertical = locSize.columns > 1;
|
|
123
|
-
if (vertical) {
|
|
124
|
-
for (let c = locRange.c1; c <= locRange.c2; c++) {
|
|
125
|
-
this.map.set((new CellRange(c, locRange.r1).A1), [groupIndex,
|
|
126
|
-
dataRanges.map(([dr, sheet]) => [new CellRange(dr.c1 + c - locRange.c1, dr.r1, dr.c1 + c - locRange.c1, dr.r2), sheet])
|
|
127
|
-
]);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
for (let r = locRange.r1; r <= locRange.r2; r++) {
|
|
132
|
-
this.map.set((new CellRange(locRange.c1, r).A1), [groupIndex,
|
|
133
|
-
dataRanges.map(([dr, sheet]) => [new CellRange(dr.c1, dr.r1 + r - locRange.r1, dr.c2, dr.r1 + r - locRange.r1), sheet])
|
|
134
|
-
]);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
add(locRange, dataRanges, options) {
|
|
139
|
-
// if ((vertical && locSize.columns != dataSize.columns) || (!vertical && locSize.rows != dataSize.rows)) {
|
|
140
|
-
// this.model.logger?.error(`invalid sparkline data range: ${dataRanges[0][0].A1}`);
|
|
141
|
-
// return;
|
|
142
|
-
// }
|
|
143
|
-
const groupIndex = ++this.maxIndex;
|
|
144
|
-
if (locRange && dataRanges)
|
|
145
|
-
this.createRangeMap(groupIndex, locRange, dataRanges);
|
|
146
|
-
this.groups.set(groupIndex, Object.assign({ dataRanges, locRange }, JSON.parse(JSON.stringify(constants.DEFAULT_SPARKLINE_OPTIONS)), options));
|
|
147
|
-
}
|
|
148
|
-
update(groupIndex, locRange, dataRanges, options) {
|
|
149
|
-
const group = this.groups.get(groupIndex);
|
|
150
|
-
Object.assign(group, { dataRanges, locRange }, options);
|
|
151
|
-
this.updateRangeMap = true;
|
|
152
|
-
}
|
|
153
|
-
delete(groupIndex) {
|
|
154
|
-
this.groups.delete(groupIndex);
|
|
155
|
-
this.updateRangeMap = true;
|
|
156
|
-
}
|
|
157
|
-
shift(options) {
|
|
158
|
-
// TODO - tady je nekde chyba, workaround updateRangeMaps updatuje uplne vsechno
|
|
159
|
-
// Array.from(this.map.keys()).forEach((addr) => {
|
|
160
|
-
// const keyRange = CellRange.fromA1(addr);
|
|
161
|
-
// this.map.get(addr)[1].forEach(([r]) => r.shift(index, offset, direction));
|
|
162
|
-
// keyRange.shift(index, offset, direction);
|
|
163
|
-
// if (keyRange.A1 != addr) {
|
|
164
|
-
// this.map.set(keyRange.A1, this.map.get(addr));
|
|
165
|
-
// this.map.delete(addr);
|
|
166
|
-
// }
|
|
167
|
-
// });
|
|
168
|
-
// this.dependencies.clear();
|
|
169
|
-
this.groups.forEach(g => {
|
|
170
|
-
g.dataRanges.forEach(([r]) => r.shift(options));
|
|
171
|
-
g.locRange.shift(options);
|
|
172
|
-
});
|
|
173
|
-
this.updateRangeMaps();
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
//# sourceMappingURL=sparklines.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sparklines.js","sourceRoot":"","sources":["../../src/sparklines/sparklines.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix, utils } from \"@omegagrid/core\";\nimport { CellAddress, CellRange, RangeAddress } from \"../common\";\nimport constants from \"../constants\";\nimport { GridModel } from \"../model\";\nimport { DependencyModel } from \"../model/dependencyModel\";\nimport { ShiftOptions } from \"../types\";\n\nexport type SparklineType = 'line'|'column';\nexport type SparklineExtremeValue = 'auto'|'common'|number;\nexport type SparklineOptions = {\n\t/** Minimum value of sparkline (absolute value, \"auto\", \"common\") */\n\tminValue: SparklineExtremeValue,\n\t/** Maximum value of sparkline (bsolute value, \"auto\", \"common\") */\n\tmaxValue: SparklineExtremeValue,\n\t/** Chart type (\"line\", \"column\") */\n\ttype: SparklineType,\n\tstyle: {\n\t\tcolor: string,\n\t\tweight: number\n\t},\n\tmarker?: {\n\t\tcolor: string\n\t}\n};\n\n/** Source object type for sparkline definition */\nexport type SparklineSource = {\n\t/** Cell range containing sparklines */\n\tlocation: RangeAddress,\n\t/** Cell ranges of sparkline data sources. Array or comma separated string. */\n\tdata: RangeAddress|RangeAddress[],\n\t/** Sparkline options */\n\toptions?: Partial<SparklineOptions>\n}\n\nexport type SparklineDataRanges = [CellRange, string?][];\n\n// [group_index, range, sheet]\nexport type SparklineItem = [number, SparklineDataRanges];\nexport type SparklineGroupDef = SparklineOptions & {dataRanges: SparklineDataRanges, locRange: CellRange};\n\nexport class Sparklines extends DependencyModel {\n\n\tmap = new Map<CellAddress, SparklineItem>();\n\tgroups = new Map<number, SparklineGroupDef>();\n\textremes = new Map<number, [number, number]>();\n\n\tmaxIndex = 0;\n\tupdateRangeMap = false;\n\n\tconstructor(public readonly model: GridModel, sourceData?: SparklineSource[]) {\n\t\tsuper(model, 'sparklines');\n\t\tthis.populate(sourceData);\n\t}\n\n\tpopulate(sourceData: SparklineSource[]) {\n\t\tsourceData?.forEach(item => {\n\t\t\ttry {\n\t\t\t\tthis.add(\n\t\t\t\t\tCellRange.fromA1(item.location), \n\t\t\t\t\tArray.isArray(item.data) \n\t\t\t\t\t\t? item.data.map(addr => [CellRange.fromA1(addr)])\n\t\t\t\t\t\t: (item.data as string).split(',').map(addr => [CellRange.fromA1(addr)]),\n\t\t\t\t\tutils.mergeDeep<Partial<SparklineOptions>>({}, constants.DEFAULT_SPARKLINE_OPTIONS, item.options) as SparklineOptions\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tthis.model.logger.error(`sparkline error: ${JSON.stringify(item)}`, error);\n\t\t\t}\n\t\t});\n\t}\n\n\tgetSourceData() {\n\t\tconst data: SparklineSource[] = [];\n\t\tthis.groups.forEach(group => {\n\t\t\tdata.push({\n\t\t\t\tlocation: group.locRange.A1,\n\t\t\t\tdata: group.dataRanges.map(r => r[0].A1).join(','),\n\t\t\t\toptions: {\n\t\t\t\t\tminValue: group.minValue,\n\t\t\t\t\tmaxValue: group.maxValue,\n\t\t\t\t\ttype: group.type,\n\t\t\t\t\tstyle: group.style,\n\t\t\t\t\tmarker: group.marker\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn data;\n\t}\n\n\thas(address: CellAddress) {\n\t\treturn this.map.has(address);\n\t}\n\n\tget(address: CellAddress): SparklineItem {\n\t\treturn this.map.get(address);\n\t}\n\n\tcreateDependencies(address: CellAddress) {\n\t\tconst item = this.map.get(address);\n\t\titem[1].forEach(dataRange => this._dependencies.add(address, dataRange[0].A1, dataRange[1]));\n\t}\n\n\tupdateRangeMaps() {\n\t\tthis.dependencies.clear();\n\t\tthis.map.clear();\n\t\tthis.groups.forEach((group, groupIndex) => this.createRangeMap(groupIndex, group.locRange, group.dataRanges));\n\t}\n\n\tgetValues(address: CellAddress) {\n\t\tif (this.updateRangeMap) this.updateRangeMaps();\n\t\tconst item = this.map.get(address);\n\t\tconst model = item[1][0][1] ? this.model.getConnectedModel(item[1][0][1]) : this.model;\n\t\tif (!this._dependencies.has(address)) this.createDependencies(address);\n\t\treturn item[1].flatMap(dataRange => model.getValuesInRange(dataRange[0])[0] as number[]);\n\t}\n\n\tgetExtremes(address: CellAddress): [number, number] {\n\t\tconst item = this.map.get(address);\n\t\tconst model = item[1][0][1] ? this.model.getConnectedModel(item[1][0][1]) : this.model;\n\t\tconst group = this.groups.get(item[0]);\n\t\tlet localExtremes: [number, number];\n\t\tlet commonExtremes: [number, number];\n\t\tlet min: number, max: number;\n\t\t\n\t\tif (group.minValue == null || utils.isString(group.minValue)) {\n\t\t\tif ((group.minValue || 'auto') == 'auto') {\n\t\t\t\tlocalExtremes = localExtremes ?? utils.minmax2d(...item[1].map(itm => model.getValuesInRange(itm[0]) as Matrix<number>));\n\t\t\t\tmin = localExtremes[0];\n\t\t\t} else {\n\t\t\t\tif (!this.extremes.has(item[0])) {\n\t\t\t\t\tthis.extremes.set(\n\t\t\t\t\t\titem[0],\n\t\t\t\t\t\tutils.minmax2d(...group.dataRanges.map(dr => model.getValuesInRange(dr[0]) as Matrix<number>))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcommonExtremes = this.extremes.get(item[0]);\n\t\t\t\tmin = commonExtremes[0];\n\t\t\t}\n\t\t} else {\n\t\t\tmin = group.minValue as number;\n\t\t}\n\t\t\n\t\tif (group.maxValue == null || utils.isString(group.maxValue)) {\n\t\t\tif ((group.maxValue || 'auto') == 'auto') {\n\t\t\t\tlocalExtremes = localExtremes ?? utils.minmax2d(...item[1].map(itm => model.getValuesInRange(itm[0]) as Matrix<number>));\n\t\t\t\tmax = localExtremes[1];\n\t\t\t} else {\n\t\t\t\tif (!this.extremes.has(item[0])) {\n\t\t\t\t\tthis.extremes.set(\n\t\t\t\t\t\titem[0], \n\t\t\t\t\t\tutils.minmax2d(...group.dataRanges.map(dr => model.getValuesInRange(dr[0]) as Matrix<number>))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcommonExtremes = this.extremes.get(item[0]);\n\t\t\t\tmax = commonExtremes[1];\n\t\t\t}\n\t\t} else {\n\t\t\tmax = group.maxValue as number;\n\t\t}\n\n\t\treturn [min, max];\n\t}\n\n\tcreateRangeMap(groupIndex: number, locRange: CellRange, dataRanges: SparklineDataRanges) {\n\t\tlocRange = locRange.intersect(this.model.gridRange);\n\t\t\n\t\tconst dataSize = dataRanges[0][0].size;\n\t\tconst locSize = locRange.size;\n\n\t\tif (locSize.columns > 1 && locSize.rows > 1) {\n\t\t\tthis.model.logger?.error(`invalid sparkline location range: ${locRange.A1}`);\n\t\t\treturn;\n\t\t}\n\n\t\tlet vertical = false;\n\t\tif (locSize.columns == 1 && locSize.rows == 1) vertical = dataSize.rows > 1;\n\t\telse vertical = locSize.columns > 1;\n\n\t\tif (vertical) {\n\t\t\tfor (let c = locRange.c1; c <= locRange.c2; c++) {\n\t\t\t\tthis.map.set((new CellRange(c, locRange.r1).A1), [groupIndex, \n\t\t\t\t\tdataRanges.map(([dr, sheet]) => [new CellRange(\n\t\t\t\t\t\tdr.c1 + c - locRange.c1,\n\t\t\t\t\t\tdr.r1,\n\t\t\t\t\t\tdr.c1 + c - locRange.c1,\n\t\t\t\t\t\tdr.r2\n\t\t\t\t\t), sheet])\n\t\t\t\t]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let r = locRange.r1; r <= locRange.r2; r++) {\n\t\t\t\tthis.map.set((new CellRange(locRange.c1, r).A1), [groupIndex, \n\t\t\t\t\tdataRanges.map(([dr, sheet]) => [new CellRange(\n\t\t\t\t\t\tdr.c1,\n\t\t\t\t\t\tdr.r1 + r - locRange.r1,\n\t\t\t\t\t\tdr.c2,\n\t\t\t\t\t\tdr.r1 + r - locRange.r1,\n\t\t\t\t\t), sheet])\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t}\n\n\tadd(locRange: CellRange, dataRanges: SparklineDataRanges, options?: SparklineOptions) {\n\t\t// if ((vertical && locSize.columns != dataSize.columns) || (!vertical && locSize.rows != dataSize.rows)) {\n\t\t// \tthis.model.logger?.error(`invalid sparkline data range: ${dataRanges[0][0].A1}`);\n\t\t// \treturn;\n\t\t// }\n\n\t\tconst groupIndex = ++this.maxIndex;\n\t\tif (locRange && dataRanges) this.createRangeMap(groupIndex, locRange, dataRanges);\n\t\tthis.groups.set(groupIndex, Object.assign({ dataRanges, locRange }, JSON.parse(JSON.stringify(constants.DEFAULT_SPARKLINE_OPTIONS)), options));\n\t}\n\n\tupdate(groupIndex: number, locRange: CellRange, dataRanges: SparklineDataRanges, options?: SparklineOptions) {\n\t\tconst group = this.groups.get(groupIndex);\n\t\tObject.assign(group, { dataRanges, locRange }, options);\n\t\tthis.updateRangeMap = true;\n\t}\n\n\tdelete(groupIndex: number) {\n\t\tthis.groups.delete(groupIndex);\n\t\tthis.updateRangeMap = true;\n\t}\n\n\tshift(options: ShiftOptions) {\n\t\t// TODO - tady je nekde chyba, workaround updateRangeMaps updatuje uplne vsechno\n\t\t// Array.from(this.map.keys()).forEach((addr) => {\n\t\t// \tconst keyRange = CellRange.fromA1(addr);\n\t\t// \tthis.map.get(addr)[1].forEach(([r]) => r.shift(index, offset, direction));\n\t\t// \tkeyRange.shift(index, offset, direction);\n\t\t// \tif (keyRange.A1 != addr) {\n\t\t// \t\tthis.map.set(keyRange.A1, this.map.get(addr));\n\t\t// \t\tthis.map.delete(addr);\n\t\t// \t}\n\t\t// });\n\t\t// this.dependencies.clear();\n\n\t\tthis.groups.forEach(g => {\n\t\t\tg.dataRanges.forEach(([r]) => r.shift(options));\n\t\t\tg.locRange.shift(options);\n\t\t});\n\t\tthis.updateRangeMaps()\n\t}\n\n}"]}
|
package/dist/types.d.ts
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { ColorTypes, Direction, Size, Location, UIValueType, Matrix, KeyValue, MenuItem } from "@omegagrid/core";
|
|
2
|
-
import { CSSStyle, CellModel, GridSource, Style, CommentItem, TableTheme } from "./model";
|
|
3
|
-
import { CellRange } from "./common";
|
|
4
|
-
export type Renderer = (div: HTMLDivElement, cell: CellModel) => HTMLDivElement;
|
|
5
|
-
export type CommentRenderer = (div: HTMLDivElement, comment: CommentItem, cell: CellModel) => HTMLDivElement;
|
|
6
|
-
export type Comparer = (a: CellModel, b: CellModel) => number;
|
|
7
|
-
export type FormulaFunction = (...args: unknown[]) => unknown;
|
|
8
|
-
export type BaseGroupModelSource = {
|
|
9
|
-
models: GridSource[];
|
|
10
|
-
themes?: TableTheme[];
|
|
11
|
-
};
|
|
12
|
-
export type EditType = 'value' | 'style' | 'insert_row' | 'insert_column' | 'delete_row' | 'delete_column' | 'move_row' | 'move_column' | 'autofill';
|
|
13
|
-
export type CellValueType = unknown;
|
|
14
|
-
export type FilterValue = string | number | boolean | KeyValue[];
|
|
15
|
-
/**
|
|
16
|
-
* Actions = 'a',
|
|
17
|
-
* Html = 'h'
|
|
18
|
-
*/
|
|
19
|
-
export type AditionalUIValueType = 'a' | 'h';
|
|
20
|
-
export type CellType = UIValueType | AditionalUIValueType;
|
|
21
|
-
export type StyleSource = number | string | Style | CSSStyle;
|
|
22
|
-
export type CellAction = {
|
|
23
|
-
action: string;
|
|
24
|
-
icon?: string;
|
|
25
|
-
text?: string;
|
|
26
|
-
title?: string;
|
|
27
|
-
color?: ColorTypes;
|
|
28
|
-
type?: 'button' | 'menu';
|
|
29
|
-
items?: MenuItem[];
|
|
30
|
-
};
|
|
31
|
-
export type CellValidationSource = {
|
|
32
|
-
/** Allow invalid cell values */
|
|
33
|
-
allowInvalid?: boolean;
|
|
34
|
-
/** Validation pattern */
|
|
35
|
-
pattern?: string | RegExp;
|
|
36
|
-
/** Validation function */
|
|
37
|
-
validate?: (cell: CellModel, value: unknown) => boolean;
|
|
38
|
-
};
|
|
39
|
-
export type CellValidation = Omit<CellValidationSource, 'pattern'> & {
|
|
40
|
-
/** Validation pattern */
|
|
41
|
-
pattern?: RegExp;
|
|
42
|
-
};
|
|
43
|
-
export type ShiftOptions = {
|
|
44
|
-
/** Index of the first shifted row/column */
|
|
45
|
-
index: number;
|
|
46
|
-
/** Number of rows/columns to shift */
|
|
47
|
-
offset: number;
|
|
48
|
-
/** Shift direction up/down for rows, left/right for columns */
|
|
49
|
-
direction: Direction;
|
|
50
|
-
/** Name of the sheet where the shift occured */
|
|
51
|
-
sheet?: string;
|
|
52
|
-
/** Force shift on all references */
|
|
53
|
-
allSheets?: boolean;
|
|
54
|
-
/** Maximum affected index */
|
|
55
|
-
maxIndex?: number;
|
|
56
|
-
/** Shift anchored coords */
|
|
57
|
-
ignoreAnchors?: boolean;
|
|
58
|
-
};
|
|
59
|
-
export type FormulaFuncParamDescription = {
|
|
60
|
-
name: string;
|
|
61
|
-
type: string;
|
|
62
|
-
description: string;
|
|
63
|
-
optional: boolean;
|
|
64
|
-
default?: string;
|
|
65
|
-
};
|
|
66
|
-
export type FormulaFuncDescription = {
|
|
67
|
-
name: string;
|
|
68
|
-
params: FormulaFuncParamDescription[];
|
|
69
|
-
returns: string;
|
|
70
|
-
description: string;
|
|
71
|
-
links: string[];
|
|
72
|
-
};
|
|
73
|
-
export type FormulaFuncGroupDescription = {
|
|
74
|
-
name: string;
|
|
75
|
-
functions: FormulaFuncDescription[];
|
|
76
|
-
};
|
|
77
|
-
export type TabOptions = {
|
|
78
|
-
color?: string;
|
|
79
|
-
hidden?: boolean;
|
|
80
|
-
};
|
|
81
|
-
export type ObjectModel = {
|
|
82
|
-
location: Location;
|
|
83
|
-
size: Size;
|
|
84
|
-
zIndex?: number;
|
|
85
|
-
};
|
|
86
|
-
export type SpillOptions = {
|
|
87
|
-
cell: CellModel;
|
|
88
|
-
values: Matrix;
|
|
89
|
-
propertyCell?: CellModel;
|
|
90
|
-
displayValues?: Matrix<string>;
|
|
91
|
-
};
|
|
92
|
-
export type SpillResult = {
|
|
93
|
-
cells: CellModel[];
|
|
94
|
-
oldValues: CellValueType[];
|
|
95
|
-
range: CellRange;
|
|
96
|
-
};
|
|
97
|
-
export type AutofitOptions = {
|
|
98
|
-
visibleOnly?: boolean;
|
|
99
|
-
};
|
|
100
|
-
export type CellSerializationOptions = {
|
|
101
|
-
displayValue?: boolean;
|
|
102
|
-
};
|
|
103
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
DELETED
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import { ColorTypes, Direction, Size, Location, UIValueType, Matrix, KeyValue, MenuItem } from \"@omegagrid/core\";\nimport { CSSStyle, CellModel, GridSource, Style, CommentItem, TableTheme } from \"./model\";\nimport { CellRange } from \"./common\";\n\nexport type Renderer = (div: HTMLDivElement, cell: CellModel) => HTMLDivElement;\nexport type CommentRenderer = (div: HTMLDivElement, comment: CommentItem, cell: CellModel) => HTMLDivElement;\n\nexport type Comparer = (a: CellModel, b: CellModel) => number;\n\nexport type FormulaFunction = (...args: unknown[]) => unknown;\n\nexport type BaseGroupModelSource = {\n\tmodels: GridSource[],\n\tthemes?: TableTheme[]\n\t//layout: TabSplitContainerModel\n}\n\nexport type EditType = 'value'|'style'|'insert_row'|'insert_column'|'delete_row'|'delete_column'|'move_row'|'move_column'|'autofill';\nexport type CellValueType = unknown; //number|string|boolean|object|null;\nexport type FilterValue = string|number|boolean|KeyValue[];\n\n/**\n * Actions = 'a',\n * Html = 'h'\n */\nexport type AditionalUIValueType = 'a'|'h';\n\nexport type CellType = UIValueType | AditionalUIValueType;\n\nexport type StyleSource = number|string|Style|CSSStyle;\n\nexport type CellAction = {\n\taction: string,\n\ticon?: string,\n\ttext?: string,\n\ttitle?: string,\n\tcolor?: ColorTypes,\n\ttype?: 'button'|'menu',\n\titems?: MenuItem[]\n}\n\nexport type CellValidationSource = {\n\t/** Allow invalid cell values */\n\tallowInvalid?: boolean,\n\n\t/** Validation pattern */\n\tpattern?: string|RegExp,\n\n\t/** Validation function */\n\tvalidate?: (cell: CellModel, value: unknown) => boolean,\n}\n\nexport type CellValidation = Omit<CellValidationSource, 'pattern'> & {\n\t/** Validation pattern */\n\tpattern?: RegExp,\n}\n\nexport type ShiftOptions = {\n\t/** Index of the first shifted row/column */\n\tindex: number;\n\t/** Number of rows/columns to shift */\n\toffset: number;\n\t/** Shift direction up/down for rows, left/right for columns */\n\tdirection: Direction;\n\t/** Name of the sheet where the shift occured */\n\tsheet?: string;\n\t/** Force shift on all references */\n\tallSheets?: boolean;\n\t/** Maximum affected index */\n\tmaxIndex?: number;\n\t/** Shift anchored coords */\n\tignoreAnchors?: boolean;\n}\n\nexport type FormulaFuncParamDescription = {\n\tname: string,\n\ttype: string,\n\tdescription: string,\n\toptional: boolean,\n\tdefault?: string\n}\n\nexport type FormulaFuncDescription = {\n\tname: string,\n\tparams: FormulaFuncParamDescription[],\n\treturns: string,\n\tdescription: string,\n\tlinks: string[]\n}\n\nexport type FormulaFuncGroupDescription = {\n\tname: string,\n\tfunctions: FormulaFuncDescription[]\n}\n\nexport type TabOptions = {\n\tcolor?: string,\n\thidden?: boolean,\n}\n\nexport type ObjectModel = {\n\tlocation: Location;\n\tsize: Size;\n\tzIndex?: number;\n}\n\nexport type SpillOptions = {\n\tcell: CellModel; \n\tvalues: Matrix;\n\tpropertyCell?: CellModel;\n\tdisplayValues?: Matrix<string>;\n}\n\nexport type SpillResult = {\n\tcells: CellModel[];\n\toldValues: CellValueType[];\n\trange: CellRange;\n}\n\nexport type AutofitOptions = {\n\tvisibleOnly?: boolean;\n}\n\nexport type CellSerializationOptions = {\n\tdisplayValue?: boolean;\n}\n"]}
|
package/dist/utils.d.ts
DELETED
package/dist/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,QAAuC,CAAC;AAErE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,WAE5C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAItD"}
|
package/dist/utils.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-useless-escape */
|
|
2
|
-
export const SHEET_NAME_REGEX = /^(?!.*[\\\/\*\[\]\:\?"])(.{1,31})$/;
|
|
3
|
-
export function isSheetNameValid(name) {
|
|
4
|
-
return SHEET_NAME_REGEX.test(name);
|
|
5
|
-
}
|
|
6
|
-
export function sanitizeSheetName(name) {
|
|
7
|
-
const invalidChars = ['\\', '/', '*', '[', ']', ':', '?', '"'];
|
|
8
|
-
invalidChars.forEach(char => name = name.replace(new RegExp(`\\${char}`, 'g'), ''));
|
|
9
|
-
return name;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,oCAAoC,CAAC;AAErE,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC7C,MAAM,YAAY,GAAa,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACzE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpF,OAAO,IAAI,CAAC;AACb,CAAC","sourcesContent":["/* eslint-disable no-useless-escape */\n\nexport const SHEET_NAME_REGEX = /^(?!.*[\\\\\\/\\*\\[\\]\\:\\?\"])(.{1,31})$/;\n\nexport function isSheetNameValid(name: string) {\n\treturn SHEET_NAME_REGEX.test(name);\n}\n\nexport function sanitizeSheetName(name: string): string {\n\tconst invalidChars: string[] = ['\\\\', '/', '*', '[', ']', ':', '?', '\"'];\n\tinvalidChars.forEach(char => name = name.replace(new RegExp(`\\\\${char}`, 'g'), ''));\n\treturn name;\n}\n"]}
|