@trebco/treb 23.6.5 → 25.0.0-rc1
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/.eslintignore +8 -0
- package/.eslintrc.js +164 -0
- package/README-shadow-DOM.md +88 -0
- package/README.md +37 -130
- package/api-config.json +29 -0
- package/api-generator/api-generator-types.ts +82 -0
- package/api-generator/api-generator.ts +1172 -0
- package/api-generator/package.json +3 -0
- package/build/treb-spreadsheet.mjs +14 -0
- package/{treb.d.ts → build/treb.d.ts} +285 -269
- package/esbuild-custom-element.mjs +336 -0
- package/esbuild.js +305 -0
- package/package.json +43 -14
- package/treb-base-types/package.json +5 -0
- package/treb-base-types/src/api_types.ts +36 -0
- package/treb-base-types/src/area.ts +583 -0
- package/treb-base-types/src/basic_types.ts +45 -0
- package/treb-base-types/src/cell.ts +612 -0
- package/treb-base-types/src/cells.ts +1066 -0
- package/treb-base-types/src/color.ts +124 -0
- package/treb-base-types/src/import.ts +71 -0
- package/treb-base-types/src/index-standalone.ts +29 -0
- package/treb-base-types/src/index.ts +42 -0
- package/treb-base-types/src/layout.ts +47 -0
- package/treb-base-types/src/localization.ts +187 -0
- package/treb-base-types/src/rectangle.ts +145 -0
- package/treb-base-types/src/render_text.ts +72 -0
- package/treb-base-types/src/style.ts +545 -0
- package/treb-base-types/src/table.ts +109 -0
- package/treb-base-types/src/text_part.ts +54 -0
- package/treb-base-types/src/theme.ts +608 -0
- package/treb-base-types/src/union.ts +152 -0
- package/treb-base-types/src/value-type.ts +164 -0
- package/treb-base-types/style/resizable.css +59 -0
- package/treb-calculator/modern.tsconfig.json +11 -0
- package/treb-calculator/package.json +5 -0
- package/treb-calculator/src/calculator.ts +2546 -0
- package/treb-calculator/src/complex-math.ts +558 -0
- package/treb-calculator/src/dag/array-vertex.ts +198 -0
- package/treb-calculator/src/dag/graph.ts +951 -0
- package/treb-calculator/src/dag/leaf_vertex.ts +118 -0
- package/treb-calculator/src/dag/spreadsheet_vertex.ts +327 -0
- package/treb-calculator/src/dag/spreadsheet_vertex_base.ts +44 -0
- package/treb-calculator/src/dag/vertex.ts +352 -0
- package/treb-calculator/src/descriptors.ts +162 -0
- package/treb-calculator/src/expression-calculator.ts +1069 -0
- package/treb-calculator/src/function-error.ts +103 -0
- package/treb-calculator/src/function-library.ts +103 -0
- package/treb-calculator/src/functions/base-functions.ts +1214 -0
- package/treb-calculator/src/functions/checkbox.ts +164 -0
- package/treb-calculator/src/functions/complex-functions.ts +253 -0
- package/treb-calculator/src/functions/finance-functions.ts +399 -0
- package/treb-calculator/src/functions/information-functions.ts +102 -0
- package/treb-calculator/src/functions/matrix-functions.ts +182 -0
- package/treb-calculator/src/functions/sparkline.ts +335 -0
- package/treb-calculator/src/functions/statistics-functions.ts +350 -0
- package/treb-calculator/src/functions/text-functions.ts +298 -0
- package/treb-calculator/src/index.ts +27 -0
- package/treb-calculator/src/notifier-types.ts +59 -0
- package/treb-calculator/src/primitives.ts +428 -0
- package/treb-calculator/src/utilities.ts +305 -0
- package/treb-charts/package.json +5 -0
- package/treb-charts/src/chart-functions.ts +156 -0
- package/treb-charts/src/chart-types.ts +230 -0
- package/treb-charts/src/chart.ts +1288 -0
- package/treb-charts/src/index.ts +24 -0
- package/treb-charts/src/main.ts +37 -0
- package/treb-charts/src/rectangle.ts +52 -0
- package/treb-charts/src/renderer.ts +1841 -0
- package/treb-charts/src/util.ts +122 -0
- package/treb-charts/style/charts.scss +221 -0
- package/treb-charts/style/old-charts.scss +250 -0
- package/treb-embed/markup/layout.html +137 -0
- package/treb-embed/markup/toolbar.html +175 -0
- package/treb-embed/modern.tsconfig.json +25 -0
- package/treb-embed/src/custom-element/content-types.d.ts +18 -0
- package/treb-embed/src/custom-element/global.d.ts +11 -0
- package/treb-embed/src/custom-element/spreadsheet-constructor.ts +1227 -0
- package/treb-embed/src/custom-element/treb-global.ts +44 -0
- package/treb-embed/src/custom-element/treb-spreadsheet-element.ts +52 -0
- package/treb-embed/src/embedded-spreadsheet.ts +5362 -0
- package/treb-embed/src/index.ts +16 -0
- package/treb-embed/src/language-model.ts +41 -0
- package/treb-embed/src/options.ts +320 -0
- package/treb-embed/src/progress-dialog.ts +228 -0
- package/treb-embed/src/selection-state.ts +16 -0
- package/treb-embed/src/spinner.ts +42 -0
- package/treb-embed/src/toolbar-message.ts +96 -0
- package/treb-embed/src/types.ts +167 -0
- package/treb-embed/style/autocomplete.scss +103 -0
- package/treb-embed/style/dark-theme.scss +114 -0
- package/treb-embed/style/defaults.scss +36 -0
- package/treb-embed/style/dialog.scss +181 -0
- package/treb-embed/style/dropdown-select.scss +101 -0
- package/treb-embed/style/formula-bar.scss +193 -0
- package/treb-embed/style/grid.scss +374 -0
- package/treb-embed/style/layout.scss +424 -0
- package/treb-embed/style/mouse-mask.scss +67 -0
- package/treb-embed/style/note.scss +92 -0
- package/treb-embed/style/overlay-editor.scss +102 -0
- package/treb-embed/style/spinner.scss +92 -0
- package/treb-embed/style/tab-bar.scss +228 -0
- package/treb-embed/style/table.scss +80 -0
- package/treb-embed/style/theme-defaults.scss +444 -0
- package/treb-embed/style/toolbar.scss +416 -0
- package/treb-embed/style/tooltip.scss +68 -0
- package/treb-embed/style/treb-icons.scss +130 -0
- package/treb-embed/style/treb-spreadsheet-element.scss +20 -0
- package/treb-embed/style/z-index.scss +43 -0
- package/treb-export/docs/charts.md +68 -0
- package/treb-export/modern.tsconfig.json +19 -0
- package/treb-export/package.json +4 -0
- package/treb-export/src/address-type.ts +77 -0
- package/treb-export/src/base-template.ts +22 -0
- package/treb-export/src/column-width.ts +85 -0
- package/treb-export/src/drawing2/chart-template-components2.ts +389 -0
- package/treb-export/src/drawing2/chart2.ts +282 -0
- package/treb-export/src/drawing2/column-chart-template2.ts +521 -0
- package/treb-export/src/drawing2/donut-chart-template2.ts +296 -0
- package/treb-export/src/drawing2/drawing2.ts +355 -0
- package/treb-export/src/drawing2/embedded-image.ts +71 -0
- package/treb-export/src/drawing2/scatter-chart-template2.ts +555 -0
- package/treb-export/src/export-worker/export-worker.ts +99 -0
- package/treb-export/src/export-worker/index-modern.ts +22 -0
- package/treb-export/src/export2.ts +2204 -0
- package/treb-export/src/import2.ts +882 -0
- package/treb-export/src/relationship.ts +36 -0
- package/treb-export/src/shared-strings2.ts +128 -0
- package/treb-export/src/template-2.ts +22 -0
- package/treb-export/src/unescape_xml.ts +47 -0
- package/treb-export/src/workbook-sheet2.ts +182 -0
- package/treb-export/src/workbook-style2.ts +1285 -0
- package/treb-export/src/workbook-theme2.ts +88 -0
- package/treb-export/src/workbook2.ts +491 -0
- package/treb-export/src/xml-utils.ts +201 -0
- package/treb-export/template/base/[Content_Types].xml +2 -0
- package/treb-export/template/base/_rels/.rels +2 -0
- package/treb-export/template/base/docProps/app.xml +2 -0
- package/treb-export/template/base/docProps/core.xml +12 -0
- package/treb-export/template/base/xl/_rels/workbook.xml.rels +2 -0
- package/treb-export/template/base/xl/sharedStrings.xml +2 -0
- package/treb-export/template/base/xl/styles.xml +2 -0
- package/treb-export/template/base/xl/theme/theme1.xml +2 -0
- package/treb-export/template/base/xl/workbook.xml +2 -0
- package/treb-export/template/base/xl/worksheets/sheet1.xml +2 -0
- package/treb-export/template/base.xlsx +0 -0
- package/treb-format/package.json +8 -0
- package/treb-format/src/format.test.ts +213 -0
- package/treb-format/src/format.ts +942 -0
- package/treb-format/src/format_cache.ts +199 -0
- package/treb-format/src/format_parser.ts +723 -0
- package/treb-format/src/index.ts +25 -0
- package/treb-format/src/number_format_section.ts +100 -0
- package/treb-format/src/value_parser.ts +337 -0
- package/treb-grid/package.json +5 -0
- package/treb-grid/src/editors/autocomplete.ts +394 -0
- package/treb-grid/src/editors/autocomplete_matcher.ts +260 -0
- package/treb-grid/src/editors/formula_bar.ts +473 -0
- package/treb-grid/src/editors/formula_editor_base.ts +910 -0
- package/treb-grid/src/editors/overlay_editor.ts +511 -0
- package/treb-grid/src/index.ts +37 -0
- package/treb-grid/src/layout/base_layout.ts +2618 -0
- package/treb-grid/src/layout/grid_layout.ts +299 -0
- package/treb-grid/src/layout/rectangle_cache.ts +86 -0
- package/treb-grid/src/render/selection-renderer.ts +414 -0
- package/treb-grid/src/render/svg_header_overlay.ts +93 -0
- package/treb-grid/src/render/svg_selection_block.ts +187 -0
- package/treb-grid/src/render/tile_renderer.ts +2122 -0
- package/treb-grid/src/types/annotation.ts +216 -0
- package/treb-grid/src/types/border_constants.ts +34 -0
- package/treb-grid/src/types/clipboard_data.ts +31 -0
- package/treb-grid/src/types/data_model.ts +334 -0
- package/treb-grid/src/types/drag_mask.ts +81 -0
- package/treb-grid/src/types/grid.ts +7743 -0
- package/treb-grid/src/types/grid_base.ts +3644 -0
- package/treb-grid/src/types/grid_command.ts +470 -0
- package/treb-grid/src/types/grid_events.ts +124 -0
- package/treb-grid/src/types/grid_options.ts +97 -0
- package/treb-grid/src/types/grid_selection.ts +60 -0
- package/treb-grid/src/types/named_range.ts +369 -0
- package/treb-grid/src/types/scale-control.ts +202 -0
- package/treb-grid/src/types/serialize_options.ts +72 -0
- package/treb-grid/src/types/set_range_options.ts +52 -0
- package/treb-grid/src/types/sheet.ts +3099 -0
- package/treb-grid/src/types/sheet_types.ts +95 -0
- package/treb-grid/src/types/tab_bar.ts +464 -0
- package/treb-grid/src/types/tile.ts +59 -0
- package/treb-grid/src/types/update_flags.ts +75 -0
- package/treb-grid/src/util/dom_utilities.ts +44 -0
- package/treb-grid/src/util/fontmetrics2.ts +179 -0
- package/treb-grid/src/util/ua.ts +104 -0
- package/treb-logo.svg +18 -0
- package/treb-parser/package.json +5 -0
- package/treb-parser/src/csv-parser.ts +122 -0
- package/treb-parser/src/index.ts +25 -0
- package/treb-parser/src/md-parser.ts +526 -0
- package/treb-parser/src/parser-types.ts +397 -0
- package/treb-parser/src/parser.test.ts +298 -0
- package/treb-parser/src/parser.ts +2673 -0
- package/treb-utils/package.json +5 -0
- package/treb-utils/src/dispatch.ts +57 -0
- package/treb-utils/src/event_source.ts +147 -0
- package/treb-utils/src/ievent_source.ts +33 -0
- package/treb-utils/src/index.ts +31 -0
- package/treb-utils/src/measurement.ts +174 -0
- package/treb-utils/src/resizable.ts +160 -0
- package/treb-utils/src/scale.ts +137 -0
- package/treb-utils/src/serialize_html.ts +124 -0
- package/treb-utils/src/template.ts +70 -0
- package/treb-utils/src/validate_uri.ts +61 -0
- package/tsconfig.json +10 -0
- package/tsproject.json +30 -0
- package/util/license-plugin-esbuild.js +86 -0
- package/util/list-css-vars.sh +46 -0
- package/README-esm.md +0 -37
- package/treb-bundle.css +0 -2
- package/treb-bundle.mjs +0 -15
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of TREB.
|
|
3
|
+
*
|
|
4
|
+
* TREB is free software: you can redistribute it and/or modify it under the
|
|
5
|
+
* terms of the GNU General Public License as published by the Free Software
|
|
6
|
+
* Foundation, either version 3 of the License, or (at your option) any
|
|
7
|
+
* later version.
|
|
8
|
+
*
|
|
9
|
+
* TREB is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
10
|
+
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
11
|
+
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
12
|
+
* details.
|
|
13
|
+
*
|
|
14
|
+
* You should have received a copy of the GNU General Public License along
|
|
15
|
+
* with TREB. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
*
|
|
17
|
+
* Copyright 2022-2023 trebco, llc.
|
|
18
|
+
* info@treb.app
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import type { Vertex } from './vertex';
|
|
23
|
+
import { GraphCallbacks, SpreadsheetVertexBase } from './spreadsheet_vertex_base';
|
|
24
|
+
import type { Area, ICellAddress2 } from 'treb-base-types';
|
|
25
|
+
import type { SpreadsheetVertex } from './spreadsheet_vertex';
|
|
26
|
+
import { Color } from './vertex';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* this is a new cut at array vertices. unlike the old version, we are not
|
|
30
|
+
* trying to reduce the number of vertices (and in fact we won't). this is
|
|
31
|
+
* to handle the case of unbounded arrays (full rows or columns).
|
|
32
|
+
*
|
|
33
|
+
* standard behavior with an array is to create all vertices when the reference
|
|
34
|
+
* is created (this is wasteful, but works). this does _not_ work for unbounded
|
|
35
|
+
* arrays because we may add rows/columns later which will expand arrays.
|
|
36
|
+
*
|
|
37
|
+
* so this class is an intermediate vertex that sits between the dependent edge
|
|
38
|
+
* and all the members of the array. if a new vertex is created later, we check
|
|
39
|
+
* existing arrays to see if anyone will need to add it.
|
|
40
|
+
*
|
|
41
|
+
* the more arrays you have, the more expensive these checks are (we could
|
|
42
|
+
* probably optimize this a bit), but it only happens at create time so
|
|
43
|
+
* potentially it's not too bad -- only on initial create and when manually
|
|
44
|
+
* modifying the spreadsheet.
|
|
45
|
+
*
|
|
46
|
+
* [FIXME: that initial create step could definitely be optimized to limit checks]
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
export class ArrayVertex extends SpreadsheetVertexBase {
|
|
50
|
+
|
|
51
|
+
public static type = 'array-vertex';
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* this is the list of currently used array vertices. it will get cleaned
|
|
55
|
+
* up when a vertex is no longer used (via the instance RemoveDependent
|
|
56
|
+
* overload) and when the graph is reset (via the static Clear method).
|
|
57
|
+
*
|
|
58
|
+
* we could theoretically optimize this store, which might be useful if
|
|
59
|
+
* we start using a lot of these: split by sheet ID, sort in start/end order,
|
|
60
|
+
* and so on.
|
|
61
|
+
*/
|
|
62
|
+
private static list: ArrayVertex[] = [];
|
|
63
|
+
|
|
64
|
+
public type = ArrayVertex.type; // for type guard
|
|
65
|
+
|
|
66
|
+
/** the target area */
|
|
67
|
+
public area: Area;
|
|
68
|
+
|
|
69
|
+
/* * temporary method, we should clean up explicitly * /
|
|
70
|
+
public static CheckOutbound(): void {
|
|
71
|
+
for (const vertex of this.list) {
|
|
72
|
+
if (vertex.edges_out.length === 0) {
|
|
73
|
+
console.info('no outbound edges', vertex);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
*/
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* factory/lookup method: creates a vertex if it does not exist, or
|
|
81
|
+
* returns existing vertex. returns the vertex and a flag indicating
|
|
82
|
+
* if this was created new (true) or not (false).
|
|
83
|
+
*/
|
|
84
|
+
public static GetVertex(area: Area): [vertex: ArrayVertex, created: boolean] {
|
|
85
|
+
for (const entry of this.list) {
|
|
86
|
+
if ((entry.area.start.sheet_id === area.start.sheet_id) && entry.area.Equals(area)) {
|
|
87
|
+
return [entry, false];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return [new ArrayVertex(area), true];
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* this seems sloppy, does this clean up properly?
|
|
95
|
+
*/
|
|
96
|
+
public static Clear(): void {
|
|
97
|
+
this.list = [];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* returns a list of arrays that contain this address
|
|
102
|
+
*/
|
|
103
|
+
public static GetContainingArrays(address: ICellAddress2): ArrayVertex[] {
|
|
104
|
+
// console.info('av2 get arrays:', address.row, address.column);
|
|
105
|
+
const list: ArrayVertex[] = [];
|
|
106
|
+
for (const entry of this.list) {
|
|
107
|
+
if ((entry.area.start.sheet_id === address.sheet_id) && entry.area.Contains(address)) {
|
|
108
|
+
// console.info("match", entry.area.spreadsheet_label);
|
|
109
|
+
list.push(entry);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return list;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* if any arrays contain this address, add edges
|
|
117
|
+
*/
|
|
118
|
+
public static CreateImplicitEdges(vertex: Vertex, address: ICellAddress2): void {
|
|
119
|
+
// console.info('av2 create implicit edges:', address.row, address.column);
|
|
120
|
+
for (const entry of this.list) {
|
|
121
|
+
if ((entry.area.start.sheet_id === address.sheet_id) && entry.area.Contains(address)) {
|
|
122
|
+
// console.info("add to", entry.area.spreadsheet_label);
|
|
123
|
+
entry.DependsOn(vertex);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* constructor adds the vertex to the internal list (static to this class).
|
|
130
|
+
*
|
|
131
|
+
* UPDATE: use the factory method, which can check if a reference to this
|
|
132
|
+
* area already exists.
|
|
133
|
+
*/
|
|
134
|
+
private constructor(range: Area) {
|
|
135
|
+
super();
|
|
136
|
+
this.area = range.Clone();
|
|
137
|
+
ArrayVertex.list.push(this);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* override for RemoveDependent. if there are no more dependents, it will
|
|
142
|
+
* be removed from our internal list (and hopefully GCd, but check).
|
|
143
|
+
*/
|
|
144
|
+
public RemoveDependent(edge: Vertex): void {
|
|
145
|
+
super.RemoveDependent(edge);
|
|
146
|
+
if (!this.edges_out.size) {
|
|
147
|
+
// console.info('removing dead array vertex');
|
|
148
|
+
this.Reset();
|
|
149
|
+
ArrayVertex.list = ArrayVertex.list.filter(test => test !== this);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
public Calculate(graph: GraphCallbacks): void {
|
|
154
|
+
|
|
155
|
+
// this is copied from SpreadsheetVertex, just removing the
|
|
156
|
+
// actual calculation (because we have no output).
|
|
157
|
+
|
|
158
|
+
if (!this.dirty) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (this.color === Color.white && this.LoopCheck()) {
|
|
163
|
+
|
|
164
|
+
// console.info('LC', this);
|
|
165
|
+
this.dirty = false;
|
|
166
|
+
|
|
167
|
+
if (this.edges_in.size) {
|
|
168
|
+
|
|
169
|
+
// intuitively this seems like a good idea but I'm not sure
|
|
170
|
+
// that it is actually necessary (TODO: check)
|
|
171
|
+
|
|
172
|
+
for (const edge of this.edges_out){
|
|
173
|
+
(edge as SpreadsheetVertex).Calculate(graph);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return;
|
|
177
|
+
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
for (const edge of this.edges_in) {
|
|
182
|
+
if ((edge as SpreadsheetVertexBase).dirty) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// console.info('setting dirty -> false');
|
|
188
|
+
this.dirty = false;
|
|
189
|
+
|
|
190
|
+
for (const edge of this.edges_out){
|
|
191
|
+
(edge as SpreadsheetVertex).Calculate(graph);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// (self as any).AV2 = ArrayVertex2;
|