@trebco/treb 23.6.2 → 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} +293 -299
- 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,199 @@
|
|
|
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 { NumberFormat } from './format';
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* since users almost always make caches, we might as well
|
|
26
|
+
* support a universal cache. also universal base (named) types.
|
|
27
|
+
*
|
|
28
|
+
* note that for this reason, you shouldn't mutate number formats.
|
|
29
|
+
* mutate copies instead.
|
|
30
|
+
*/
|
|
31
|
+
export class NumberFormatCache {
|
|
32
|
+
|
|
33
|
+
/** cache instance */
|
|
34
|
+
private static cache: {[index: string]: NumberFormat} = {};
|
|
35
|
+
|
|
36
|
+
/** special case for the "general" formatter for complex numbers only */
|
|
37
|
+
private static complex_general: NumberFormat;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* this map is for case-insensitive mapping symbolic names to formats. we
|
|
41
|
+
* want symbolic names with casing, primarily for interop, but we also want
|
|
42
|
+
* to support icase matching.
|
|
43
|
+
*
|
|
44
|
+
* FIXME: is there a better way to do this, with a pattern or something in
|
|
45
|
+
* the cache?
|
|
46
|
+
*/
|
|
47
|
+
private static symbolc_name_map: {[index: string]: string} = {};
|
|
48
|
+
|
|
49
|
+
/** base types, with default names */
|
|
50
|
+
private static base_formats: {[index: string]: string} = {
|
|
51
|
+
|
|
52
|
+
Accounting: '_(#,##0.00_);(#,##0.00);-???',
|
|
53
|
+
Number: '0.00',
|
|
54
|
+
Integer: '0',
|
|
55
|
+
Percent: '0.00%',
|
|
56
|
+
General: '0.######', // for complex we will reduce the number of optional digits
|
|
57
|
+
Fraction: '# ?/?',
|
|
58
|
+
Dollar: '$* _(#,##0.00_);$* (#,##0.00);$* -???',
|
|
59
|
+
Exponential: '0.000e',
|
|
60
|
+
|
|
61
|
+
'Short Date': 'mm/dd/yy',
|
|
62
|
+
'Long Date': 'dddd, mmm d yyyy',
|
|
63
|
+
Timestamp: 'mm-dd-yy hh:mm:ss',
|
|
64
|
+
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/** alias types */
|
|
68
|
+
private static aliases: {[index: string]: string} = {
|
|
69
|
+
|
|
70
|
+
Scientific: 'Exponential',
|
|
71
|
+
Percentage: 'Percent',
|
|
72
|
+
Currency: 'Dollar',
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
// we switched to Uppercase symbolic names to better
|
|
76
|
+
// match imported files, but we have legacy stuff using
|
|
77
|
+
// lowercase, so add aliases.
|
|
78
|
+
|
|
79
|
+
accounting: 'Accounting',
|
|
80
|
+
number: 'Number',
|
|
81
|
+
integer: 'Integer',
|
|
82
|
+
percent: 'Percent',
|
|
83
|
+
general: 'General',
|
|
84
|
+
dollar: 'Dollar',
|
|
85
|
+
exponential: 'Exponential',
|
|
86
|
+
|
|
87
|
+
'short date': 'Short Date',
|
|
88
|
+
'long date': 'Long Date',
|
|
89
|
+
timestamp: 'Timestamp',
|
|
90
|
+
*/
|
|
91
|
+
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* we now have (some) overlay styles for complex. if the flag is set
|
|
96
|
+
* we will check the complex cache first, and
|
|
97
|
+
* @param format
|
|
98
|
+
* @param complex
|
|
99
|
+
* @returns
|
|
100
|
+
*/
|
|
101
|
+
public static Get(format: string, complex = false): NumberFormat {
|
|
102
|
+
|
|
103
|
+
if (complex && format === 'General') {
|
|
104
|
+
return this.complex_general;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// FIXME: we should use icase for symbolc formats, although not
|
|
108
|
+
// for format strings. there should (hopefully) be no case where
|
|
109
|
+
// these overlap.
|
|
110
|
+
|
|
111
|
+
const canonical_name = this.symbolc_name_map[format.toLowerCase()];
|
|
112
|
+
|
|
113
|
+
let formatter = this.cache[canonical_name || format];
|
|
114
|
+
|
|
115
|
+
if (!formatter) {
|
|
116
|
+
formatter = new NumberFormat(format);
|
|
117
|
+
this.cache[format] = formatter;
|
|
118
|
+
}
|
|
119
|
+
return formatter;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* does anyone use this? (...)
|
|
124
|
+
*/
|
|
125
|
+
public static Equals(a: string, b: string): boolean {
|
|
126
|
+
if (a === b) return true;
|
|
127
|
+
const fa = this.Get(a);
|
|
128
|
+
const fb = this.Get(b);
|
|
129
|
+
return fa.pattern === fb.pattern;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* this method is used to translate symbolic formats,
|
|
134
|
+
* without actually creating a formatter. it's a shortcut
|
|
135
|
+
* we need for exporting to xlsx.
|
|
136
|
+
*
|
|
137
|
+
* if the passed format matches a symbolic format, we return
|
|
138
|
+
* the string representation. if it doesn't match any symbolic format,
|
|
139
|
+
* the string is returned as-is.
|
|
140
|
+
*/
|
|
141
|
+
public static Translate(format: string): string {
|
|
142
|
+
|
|
143
|
+
const mapped = this.symbolc_name_map[format.toLowerCase()];
|
|
144
|
+
return mapped ? this.cache[mapped].toString() : format;
|
|
145
|
+
|
|
146
|
+
// const formatter = this.cache[format];
|
|
147
|
+
// if (formatter) { return formatter.toString(); }
|
|
148
|
+
// return format;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* check if the format (as a number format) matches a local
|
|
153
|
+
* symbolic name and if so, return that.
|
|
154
|
+
*/
|
|
155
|
+
public static SymbolicName(format: string): string|null {
|
|
156
|
+
for (const key of Object.keys(this.base_formats)){
|
|
157
|
+
if (format === this.base_formats[key]) return key;
|
|
158
|
+
}
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
public static InitCache(): void {
|
|
163
|
+
|
|
164
|
+
for (const key of Object.keys(this.base_formats)) {
|
|
165
|
+
this.cache[key] = new NumberFormat(this.base_formats[key]);
|
|
166
|
+
this.symbolc_name_map[key.toLowerCase()] = key;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// we're doing this to hide it, but we might as well allow it
|
|
170
|
+
// since js interfaces will find it regardless
|
|
171
|
+
|
|
172
|
+
this.cache['General'].magic_decimal = true;
|
|
173
|
+
|
|
174
|
+
// special general type for complex has fewer digits by default
|
|
175
|
+
|
|
176
|
+
this.complex_general = new NumberFormat('0.###');
|
|
177
|
+
this.complex_general.magic_decimal = true;
|
|
178
|
+
|
|
179
|
+
for (const key of Object.keys(this.aliases)) {
|
|
180
|
+
this.cache[key] = this.cache[this.aliases[key]];
|
|
181
|
+
this.symbolc_name_map[key.toLowerCase()] = key;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// is there a pattern for this? or a preferred way? I'm actually
|
|
189
|
+
// concerned that an optimizer might remove the method.
|
|
190
|
+
|
|
191
|
+
NumberFormatCache.InitCache();
|
|
192
|
+
|
|
193
|
+
/*
|
|
194
|
+
// DEV: expose objects to console
|
|
195
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
196
|
+
(self as any).NumberFormatCache = NumberFormatCache;
|
|
197
|
+
(self as any).NumberFormat = NumberFormat;
|
|
198
|
+
}
|
|
199
|
+
*/
|