@omegagrid/grid-core 0.10.2 → 0.10.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/dist/__generated/functions.d.ts +4 -0
  2. package/dist/__generated/functions.d.ts.map +1 -0
  3. package/dist/__generated/functions.js +45 -0
  4. package/dist/__generated/functions.js.map +1 -0
  5. package/dist/calculations/autofill.d.ts +7 -0
  6. package/dist/calculations/autofill.d.ts.map +1 -0
  7. package/dist/calculations/autofill.js +84 -0
  8. package/dist/calculations/autofill.js.map +1 -0
  9. package/dist/calculations/conditions.d.ts +4 -0
  10. package/dist/calculations/conditions.d.ts.map +1 -0
  11. package/dist/calculations/conditions.js +41 -0
  12. package/dist/calculations/conditions.js.map +1 -0
  13. package/dist/calculations/context.d.ts +53 -0
  14. package/dist/calculations/context.d.ts.map +1 -0
  15. package/dist/calculations/context.js +85 -0
  16. package/dist/calculations/context.js.map +1 -0
  17. package/dist/calculations/formula.d.ts +89 -0
  18. package/dist/calculations/formula.d.ts.map +1 -0
  19. package/dist/calculations/formula.js +443 -0
  20. package/dist/calculations/formula.js.map +1 -0
  21. package/dist/calculations/functions/dates.d.ts +13 -0
  22. package/dist/calculations/functions/dates.d.ts.map +1 -0
  23. package/dist/calculations/functions/dates.js +58 -0
  24. package/dist/calculations/functions/dates.js.map +1 -0
  25. package/dist/calculations/functions/index.d.ts +11 -0
  26. package/dist/calculations/functions/index.d.ts.map +1 -0
  27. package/dist/calculations/functions/index.js +21 -0
  28. package/dist/calculations/functions/index.js.map +1 -0
  29. package/dist/calculations/functions/logical.d.ts +11 -0
  30. package/dist/calculations/functions/logical.d.ts.map +1 -0
  31. package/dist/calculations/functions/logical.js +50 -0
  32. package/dist/calculations/functions/logical.js.map +1 -0
  33. package/dist/calculations/functions/lookup.d.ts +18 -0
  34. package/dist/calculations/functions/lookup.d.ts.map +1 -0
  35. package/dist/calculations/functions/lookup.js +169 -0
  36. package/dist/calculations/functions/lookup.js.map +1 -0
  37. package/dist/calculations/functions/math.d.ts +72 -0
  38. package/dist/calculations/functions/math.d.ts.map +1 -0
  39. package/dist/calculations/functions/math.js +182 -0
  40. package/dist/calculations/functions/math.js.map +1 -0
  41. package/dist/calculations/functions/special.d.ts +2 -0
  42. package/dist/calculations/functions/special.d.ts.map +1 -0
  43. package/dist/calculations/functions/special.js +51 -0
  44. package/dist/calculations/functions/special.js.map +1 -0
  45. package/dist/calculations/functions/statistical.d.ts +7 -0
  46. package/dist/calculations/functions/statistical.d.ts.map +1 -0
  47. package/dist/calculations/functions/statistical.js +47 -0
  48. package/dist/calculations/functions/statistical.js.map +1 -0
  49. package/dist/calculations/functions/text.d.ts +29 -0
  50. package/dist/calculations/functions/text.d.ts.map +1 -0
  51. package/dist/calculations/functions/text.js +58 -0
  52. package/dist/calculations/functions/text.js.map +1 -0
  53. package/dist/calculations/helpers.d.ts +13 -0
  54. package/dist/calculations/helpers.d.ts.map +1 -0
  55. package/dist/calculations/helpers.js +32 -0
  56. package/dist/calculations/helpers.js.map +1 -0
  57. package/dist/calculations/index.d.ts +7 -0
  58. package/dist/calculations/index.d.ts.map +1 -0
  59. package/dist/calculations/index.js +7 -0
  60. package/dist/calculations/index.js.map +1 -0
  61. package/dist/calculations/operators.d.ts +19 -0
  62. package/dist/calculations/operators.d.ts.map +1 -0
  63. package/dist/calculations/operators.js +58 -0
  64. package/dist/calculations/operators.js.map +1 -0
  65. package/dist/calculations/tokenization.d.ts +36 -0
  66. package/dist/calculations/tokenization.d.ts.map +1 -0
  67. package/dist/calculations/tokenization.js +203 -0
  68. package/dist/calculations/tokenization.js.map +1 -0
  69. package/dist/common/index.d.ts +2 -0
  70. package/dist/common/index.d.ts.map +1 -0
  71. package/dist/common/index.js +2 -0
  72. package/dist/common/index.js.map +1 -0
  73. package/dist/common/range.d.ts +66 -0
  74. package/dist/common/range.d.ts.map +1 -0
  75. package/dist/common/range.js +222 -0
  76. package/dist/common/range.js.map +1 -0
  77. package/dist/constants.d.ts +68 -0
  78. package/dist/constants.d.ts.map +1 -0
  79. package/dist/constants.js +127 -0
  80. package/dist/constants.js.map +1 -0
  81. package/dist/index.d.ts +8 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +8 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/model/calculationModel.d.ts +30 -0
  86. package/dist/model/calculationModel.d.ts.map +1 -0
  87. package/dist/model/calculationModel.js +206 -0
  88. package/dist/model/calculationModel.js.map +1 -0
  89. package/dist/model/cellModel.d.ts +134 -0
  90. package/dist/model/cellModel.d.ts.map +1 -0
  91. package/dist/model/cellModel.js +371 -0
  92. package/dist/model/cellModel.js.map +1 -0
  93. package/dist/model/columnModel.d.ts +160 -0
  94. package/dist/model/columnModel.d.ts.map +1 -0
  95. package/dist/model/columnModel.js +159 -0
  96. package/dist/model/columnModel.js.map +1 -0
  97. package/dist/model/commentModel.d.ts +58 -0
  98. package/dist/model/commentModel.d.ts.map +1 -0
  99. package/dist/model/commentModel.js +81 -0
  100. package/dist/model/commentModel.js.map +1 -0
  101. package/dist/model/conditionalFormats.d.ts +104 -0
  102. package/dist/model/conditionalFormats.d.ts.map +1 -0
  103. package/dist/model/conditionalFormats.js +414 -0
  104. package/dist/model/conditionalFormats.js.map +1 -0
  105. package/dist/model/cssStyle.d.ts +20 -0
  106. package/dist/model/cssStyle.d.ts.map +1 -0
  107. package/dist/model/cssStyle.js +301 -0
  108. package/dist/model/cssStyle.js.map +1 -0
  109. package/dist/model/dependencies.d.ts +30 -0
  110. package/dist/model/dependencies.d.ts.map +1 -0
  111. package/dist/model/dependencies.js +139 -0
  112. package/dist/model/dependencies.js.map +1 -0
  113. package/dist/model/dependencyModel.d.ts +9 -0
  114. package/dist/model/dependencyModel.d.ts.map +1 -0
  115. package/dist/model/dependencyModel.js +9 -0
  116. package/dist/model/dependencyModel.js.map +1 -0
  117. package/dist/model/elementModel.d.ts +103 -0
  118. package/dist/model/elementModel.d.ts.map +1 -0
  119. package/dist/model/elementModel.js +181 -0
  120. package/dist/model/elementModel.js.map +1 -0
  121. package/dist/model/filterModel.d.ts +35 -0
  122. package/dist/model/filterModel.d.ts.map +1 -0
  123. package/dist/model/filterModel.js +153 -0
  124. package/dist/model/filterModel.js.map +1 -0
  125. package/dist/model/gridModel.d.ts +181 -0
  126. package/dist/model/gridModel.d.ts.map +1 -0
  127. package/dist/model/gridModel.js +797 -0
  128. package/dist/model/gridModel.js.map +1 -0
  129. package/dist/model/groupModel.d.ts +26 -0
  130. package/dist/model/groupModel.d.ts.map +1 -0
  131. package/dist/model/groupModel.js +112 -0
  132. package/dist/model/groupModel.js.map +1 -0
  133. package/dist/model/history.d.ts +24 -0
  134. package/dist/model/history.d.ts.map +1 -0
  135. package/dist/model/history.js +35 -0
  136. package/dist/model/history.js.map +1 -0
  137. package/dist/model/index.d.ts +23 -0
  138. package/dist/model/index.d.ts.map +1 -0
  139. package/dist/model/index.js +23 -0
  140. package/dist/model/index.js.map +1 -0
  141. package/dist/model/iterableRange.d.ts +49 -0
  142. package/dist/model/iterableRange.d.ts.map +1 -0
  143. package/dist/model/iterableRange.js +108 -0
  144. package/dist/model/iterableRange.js.map +1 -0
  145. package/dist/model/merges.d.ts +34 -0
  146. package/dist/model/merges.d.ts.map +1 -0
  147. package/dist/model/merges.js +123 -0
  148. package/dist/model/merges.js.map +1 -0
  149. package/dist/model/namingModel.d.ts +25 -0
  150. package/dist/model/namingModel.d.ts.map +1 -0
  151. package/dist/model/namingModel.js +77 -0
  152. package/dist/model/namingModel.js.map +1 -0
  153. package/dist/model/options.d.ts +257 -0
  154. package/dist/model/options.d.ts.map +1 -0
  155. package/dist/model/options.js +35 -0
  156. package/dist/model/options.js.map +1 -0
  157. package/dist/model/rowModel.d.ts +104 -0
  158. package/dist/model/rowModel.d.ts.map +1 -0
  159. package/dist/model/rowModel.js +155 -0
  160. package/dist/model/rowModel.js.map +1 -0
  161. package/dist/model/selectionModel.d.ts +19 -0
  162. package/dist/model/selectionModel.d.ts.map +1 -0
  163. package/dist/model/selectionModel.js +40 -0
  164. package/dist/model/selectionModel.js.map +1 -0
  165. package/dist/model/sortingModel.d.ts +46 -0
  166. package/dist/model/sortingModel.d.ts.map +1 -0
  167. package/dist/model/sortingModel.js +157 -0
  168. package/dist/model/sortingModel.js.map +1 -0
  169. package/dist/model/style.d.ts +90 -0
  170. package/dist/model/style.d.ts.map +1 -0
  171. package/dist/model/style.js +34 -0
  172. package/dist/model/style.js.map +1 -0
  173. package/dist/model/styleModel.d.ts +22 -0
  174. package/dist/model/styleModel.d.ts.map +1 -0
  175. package/dist/model/styleModel.js +91 -0
  176. package/dist/model/styleModel.js.map +1 -0
  177. package/dist/model/tableTheme.d.ts +46 -0
  178. package/dist/model/tableTheme.d.ts.map +1 -0
  179. package/dist/model/tableTheme.js +93 -0
  180. package/dist/model/tableTheme.js.map +1 -0
  181. package/dist/model/validations.d.ts +5 -0
  182. package/dist/model/validations.d.ts.map +1 -0
  183. package/dist/model/validations.js +24 -0
  184. package/dist/model/validations.js.map +1 -0
  185. package/dist/sparklines/index.d.ts +2 -0
  186. package/dist/sparklines/index.d.ts.map +1 -0
  187. package/dist/sparklines/index.js +2 -0
  188. package/dist/sparklines/index.js.map +1 -0
  189. package/dist/sparklines/sparklines.d.ts +59 -0
  190. package/dist/sparklines/sparklines.d.ts.map +1 -0
  191. package/dist/sparklines/sparklines.js +176 -0
  192. package/dist/sparklines/sparklines.js.map +1 -0
  193. package/dist/types.d.ts +103 -0
  194. package/dist/types.d.ts.map +1 -0
  195. package/dist/types.js +2 -0
  196. package/dist/types.js.map +1 -0
  197. package/dist/utils.d.ts +4 -0
  198. package/dist/utils.d.ts.map +1 -0
  199. package/dist/utils.js +11 -0
  200. package/dist/utils.js.map +1 -0
  201. package/package.json +3 -3
@@ -0,0 +1,176 @@
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
@@ -0,0 +1 @@
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}"]}
@@ -0,0 +1,103 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACjH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,KAAK,cAAc,CAAC;AAChF,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,KAAK,cAAc,CAAC;AAE7G,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,KAAK,MAAM,CAAC;AAE9D,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAE9D,MAAM,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,EAAE,CAAA;CAErB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAC,OAAO,GAAC,YAAY,GAAC,eAAe,GAAC,YAAY,GAAC,eAAe,GAAC,UAAU,GAAC,aAAa,GAAC,UAAU,CAAC;AACrI,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;AACpC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAC,MAAM,GAAC,OAAO,GAAC,QAAQ,EAAE,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,GAAG,GAAC,GAAG,CAAC;AAE3C,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,oBAAoB,CAAC;AAE1D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAC,MAAM,GAAC,KAAK,GAAC,QAAQ,CAAC;AAEvD,MAAM,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAC,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAClC,gCAAgC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,GAAC,MAAM,CAAC;IAExB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACxD,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,GAAG;IACpE,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAC1B,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,SAAS,EAAE,SAAS,CAAC;IACrB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;CACf,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,sBAAsB,EAAE,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;CAC/B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,KAAK,EAAE,SAAS,CAAC;CACjB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB,CAAA"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
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"]}
@@ -0,0 +1,4 @@
1
+ export declare const SHEET_NAME_REGEX: RegExp;
2
+ export declare function isSheetNameValid(name: string): boolean;
3
+ export declare function sanitizeSheetName(name: string): string;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
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 ADDED
@@ -0,0 +1,11 @@
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
@@ -0,0 +1 @@
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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omegagrid/grid-core",
3
- "version": "0.10.2",
3
+ "version": "0.10.5",
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.10.2",
32
- "@omegagrid/localize": "^0.10.2",
31
+ "@omegagrid/core": "^0.10.5",
32
+ "@omegagrid/localize": "^0.10.5",
33
33
  "@stdlib/stats": "^0.0.13",
34
34
  "color": "^4.2.3",
35
35
  "date-fns": "^3.2.0",