@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,103 @@
|
|
|
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 { UnionValue, ValueType } from 'treb-base-types';
|
|
23
|
+
|
|
24
|
+
export enum ErrorType {
|
|
25
|
+
Argument = 'ARG',
|
|
26
|
+
Data = 'DATA',
|
|
27
|
+
Reference = 'REF',
|
|
28
|
+
Name = 'NAME',
|
|
29
|
+
Expression = 'EXPR',
|
|
30
|
+
Value = 'VALUE',
|
|
31
|
+
Unknown = 'UNK',
|
|
32
|
+
NotImpl = 'NOTIMPL',
|
|
33
|
+
Div0 = 'DIV/0',
|
|
34
|
+
NA = 'N/A',
|
|
35
|
+
Loop = 'LOOP', // circular reference
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface FunctionError {
|
|
39
|
+
error: ErrorType;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// export const ArgumentError: FunctionError = { error: ErrorType.Argument };
|
|
43
|
+
// export const ReferenceError: FunctionError = { error: ErrorType.Reference };
|
|
44
|
+
//export const ExpressionError: FunctionError = { error: ErrorType.Expression };
|
|
45
|
+
// export const NameError: FunctionError = { error: ErrorType.Name };
|
|
46
|
+
// export const ValueError: FunctionError = { error: ErrorType.Value };
|
|
47
|
+
// export const DataError: FunctionError = { error: ErrorType.Data };
|
|
48
|
+
// export const DivideByZeroError: FunctionError = { error: ErrorType.Div0 };
|
|
49
|
+
// export const UnknownError: FunctionError = { error: ErrorType.Unknown };
|
|
50
|
+
export const NotImplError: FunctionError = { error: ErrorType.NotImpl };
|
|
51
|
+
|
|
52
|
+
export const NAError = (): UnionValue => {
|
|
53
|
+
return { type: ValueType.error, value: ErrorType.NA };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export const ExpressionError = (): UnionValue => {
|
|
57
|
+
return { type: ValueType.error, value: ErrorType.Expression };
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export const DataError = (): UnionValue => {
|
|
61
|
+
return { type: ValueType.error, value: ErrorType.Data };
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const DivideByZeroError = (): UnionValue => {
|
|
65
|
+
return { type: ValueType.error, value: ErrorType.Div0 };
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export const ArgumentError = (): UnionValue => {
|
|
69
|
+
return { type: ValueType.error, value: ErrorType.Argument };
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const ValueError = (): UnionValue => {
|
|
73
|
+
return { type: ValueType.error, value: ErrorType.Value };
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const ReferenceError = (): UnionValue => {
|
|
77
|
+
return { type: ValueType.error, value: ErrorType.Reference };
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export const NameError = (): UnionValue => {
|
|
81
|
+
return { type: ValueType.error, value: ErrorType.Name };
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export const UnknownError = (): UnionValue => {
|
|
85
|
+
return { type: ValueType.error, value: ErrorType.Unknown };
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
/** type guard function */
|
|
90
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
91
|
+
export const IsError = (test: any): test is FunctionError => {
|
|
92
|
+
return test && typeof test.error && (
|
|
93
|
+
test.error === ErrorType.Argument ||
|
|
94
|
+
test.error === ErrorType.Reference ||
|
|
95
|
+
test.error === ErrorType.Name ||
|
|
96
|
+
test.error === ErrorType.Expression ||
|
|
97
|
+
test.error === ErrorType.Data ||
|
|
98
|
+
test.error === ErrorType.Unknown ||
|
|
99
|
+
test.error === ErrorType.NotImpl ||
|
|
100
|
+
test.error === ErrorType.Value ||
|
|
101
|
+
test.error === ErrorType.Div0
|
|
102
|
+
);
|
|
103
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
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 {
|
|
23
|
+
ExtendedFunctionDescriptor, CompositeFunctionDescriptor,
|
|
24
|
+
FunctionMap, ExtendedFunctionMap } from './descriptors';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* singleton (static instance) of function library; includes utility methods
|
|
28
|
+
*/
|
|
29
|
+
export class FunctionLibrary {
|
|
30
|
+
|
|
31
|
+
/** the actual functions */
|
|
32
|
+
protected functions: ExtendedFunctionMap = {};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* register one or more functions. keys in the passed object are
|
|
36
|
+
* considered the canonical function names, and must be (icase) unique.
|
|
37
|
+
*/
|
|
38
|
+
public Register(...maps: FunctionMap[]): void {
|
|
39
|
+
|
|
40
|
+
for (const map of maps) {
|
|
41
|
+
|
|
42
|
+
for (const name of Object.keys(map)) {
|
|
43
|
+
|
|
44
|
+
// some rules for names. the length thing is arbitrary, but come on.
|
|
45
|
+
// leading ascii-letter is also kind of arbitrary, but it can't be
|
|
46
|
+
// a number. the legal characters thing is probably broken: we should
|
|
47
|
+
// allow extended characters.
|
|
48
|
+
|
|
49
|
+
if (/[^a-zA-Z0-9._]/.test(name)) {
|
|
50
|
+
throw new Error('invalid function name (invalid character)');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (name.length > 255) {
|
|
54
|
+
throw new Error('invalid function name (too long, > 255)');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (/^[^a-zA-Z]/.test(name)) {
|
|
58
|
+
throw new Error('invalid function name (start with an ascii letter)');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const normalized = name.toLowerCase();
|
|
62
|
+
if (this.functions[normalized]) {
|
|
63
|
+
throw new Error(`function name (${normalized}) is already in use`);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const descriptor = map[name] as ExtendedFunctionDescriptor;
|
|
67
|
+
descriptor.canonical_name = name;
|
|
68
|
+
|
|
69
|
+
this.functions[normalized] = descriptor;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** lookup function (actual map is protected) */
|
|
77
|
+
public Get(name: string) {
|
|
78
|
+
const normalized = name.toLowerCase();
|
|
79
|
+
return this.functions[normalized];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** get a list, for AC services */
|
|
83
|
+
public List() {
|
|
84
|
+
const list: ExtendedFunctionMap = {};
|
|
85
|
+
for (const key of Object.keys(this.functions)) {
|
|
86
|
+
list[key] = this.functions[key];
|
|
87
|
+
}
|
|
88
|
+
return list;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* create an alias. we clone the descriptor and use the alias as the
|
|
93
|
+
* canonical name, so should work better than just a pointer.
|
|
94
|
+
*/
|
|
95
|
+
public Alias(name: string, reference: string) {
|
|
96
|
+
const ref = this.Get(reference);
|
|
97
|
+
if (!ref) {
|
|
98
|
+
throw new Error(`referenced function ${reference} does not exist`);
|
|
99
|
+
}
|
|
100
|
+
this.Register({[name]: {...ref} as CompositeFunctionDescriptor});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
}
|