@xw-components/formula-editor 18.1.0

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.
@@ -0,0 +1,318 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { DomSanitizer } from '@angular/platform-browser';
3
+ import { Node, mergeAttributes } from '@tiptap/core';
4
+ import * as i0 from "@angular/core";
5
+ export class FormulaEditorService {
6
+ constructor() {
7
+ this.sanitizer = inject(DomSanitizer);
8
+ }
9
+ initNodes() {
10
+ this.createFuncNode();
11
+ this.createFieldNode();
12
+ }
13
+ createFieldNode() {
14
+ this.fieldNode = Node.create({
15
+ name: 'field',
16
+ inline: true,
17
+ group: 'inline',
18
+ selectable: false,
19
+ draggable: true,
20
+ atom: true,
21
+ addAttributes() {
22
+ return {
23
+ id: {
24
+ default: null
25
+ },
26
+ name: {
27
+ default: ''
28
+ },
29
+ className: {
30
+ default: ''
31
+ },
32
+ dataType: {
33
+ default: 'field'
34
+ }
35
+ };
36
+ },
37
+ renderText({ node }) {
38
+ return `${node.attrs['name']}`;
39
+ },
40
+ parseHTML() {
41
+ return [{ tag: 'div[data-type="field"]' }];
42
+ },
43
+ renderHTML({ HTMLAttributes, node }) {
44
+ return [
45
+ 'div',
46
+ mergeAttributes({
47
+ 'data-type': 'field',
48
+ class: `field-node ${node.attrs['className']}` || '',
49
+ contenteditable: 'false',
50
+ style: `display: inline-block;margin: 0 4px;font-size: 13px;height: 18px;line-height: 18px;`
51
+ }, HTMLAttributes),
52
+ node.attrs['name']
53
+ ];
54
+ }
55
+ });
56
+ }
57
+ createFuncNode() {
58
+ this.funcNode = Node.create({
59
+ name: 'func',
60
+ inline: true,
61
+ group: 'inline',
62
+ selectable: false,
63
+ draggable: false,
64
+ content: 'inline*',
65
+ atom: true,
66
+ addAttributes() {
67
+ return {
68
+ id: {
69
+ default: null
70
+ },
71
+ name: {
72
+ default: ''
73
+ },
74
+ className: {
75
+ default: ''
76
+ },
77
+ dataType: {
78
+ default: 'func'
79
+ }
80
+ };
81
+ },
82
+ renderText({ node }) {
83
+ const funcName = node.attrs['name'] || '';
84
+ const childrenText = node.content.content
85
+ .map(child => {
86
+ if (child.text) {
87
+ return child.text;
88
+ }
89
+ if (child.type && child.type.spec && child.type.spec['toText']) {
90
+ return child.type.spec['toText']({ node: child });
91
+ }
92
+ return '';
93
+ })
94
+ .join('');
95
+ return `${funcName}(${childrenText})`;
96
+ },
97
+ parseHTML() {
98
+ return [{ tag: 'div[data-type="func"]' }];
99
+ },
100
+ addNodeView() {
101
+ return ({ node }) => {
102
+ const createElement = (tag, props = {}) => {
103
+ const element = document.createElement(tag);
104
+ Object.entries(props).forEach(([key, value]) => {
105
+ if (key === 'style') {
106
+ Object.entries(value).forEach(([styleKey, styleValue]) => {
107
+ element.style[styleKey] = styleValue;
108
+ });
109
+ }
110
+ else if (key === 'innerText') {
111
+ element.innerText = value;
112
+ }
113
+ else if (key === 'className') {
114
+ element.className = value;
115
+ }
116
+ else {
117
+ element.setAttribute(key, value);
118
+ }
119
+ });
120
+ return element;
121
+ };
122
+ const className = node.attrs['className'] || '';
123
+ const funcName = node.attrs['name'];
124
+ const container = createElement('span', {
125
+ style: {
126
+ display: 'inline-block',
127
+ margin: '0 4px',
128
+ fontSize: '13px'
129
+ }
130
+ });
131
+ const content = createElement('span', {
132
+ style: {
133
+ whiteSpace: 'pre-wrap',
134
+ display: 'inline-block'
135
+ },
136
+ contenteditable: 'true'
137
+ });
138
+ const before = createElement('span', {
139
+ innerText: `${funcName} `,
140
+ contenteditable: 'false',
141
+ className
142
+ });
143
+ const bracket = (value, style = {}) => {
144
+ return createElement('span', {
145
+ innerText: value,
146
+ contenteditable: 'false',
147
+ style: {
148
+ ...style
149
+ }
150
+ });
151
+ };
152
+ container.append(before, bracket('(', { marginRight: '2px' }), content, bracket(')', { marginLeft: '2px' }));
153
+ return {
154
+ dom: container,
155
+ contentDOM: content
156
+ };
157
+ };
158
+ }
159
+ });
160
+ }
161
+ /**
162
+ * 校验公式的JSON表示是否有效
163
+ * @param formula 公式的JSON表示
164
+ * @returns 校验结果,包含是否有效和错误信息数组
165
+ */
166
+ validateFormula(formula) {
167
+ const errors = [];
168
+ if (!formula) {
169
+ errors.push('公式不能为空');
170
+ return { isValid: false, errors };
171
+ }
172
+ if (formula.type !== 'doc') {
173
+ errors.push('公式根节点类型必须是 doc');
174
+ }
175
+ if (!formula.content || !Array.isArray(formula.content)) {
176
+ errors.push('公式必须包含 content 数组');
177
+ return { isValid: false, errors };
178
+ }
179
+ for (const paragraph of formula.content) {
180
+ if (paragraph.type !== 'paragraph') {
181
+ errors.push('段落类型必须是 paragraph');
182
+ continue;
183
+ }
184
+ if (!paragraph.content || !Array.isArray(paragraph.content)) {
185
+ continue;
186
+ }
187
+ for (const node of paragraph.content) {
188
+ this.validateNode(node, errors);
189
+ }
190
+ }
191
+ return {
192
+ isValid: errors.length === 0,
193
+ errors
194
+ };
195
+ }
196
+ /**
197
+ * 从JSON数据中提取内容文本或HTML
198
+ * @param jsonData 公式的JSON表示
199
+ * @param outputFormat 输出格式,'text'或'html',默认'text'
200
+ * @returns 提取的内容文本或HTML字符串
201
+ */
202
+ getContentFromJson(jsonData, outputFormat = 'text') {
203
+ if (!jsonData || !jsonData.content)
204
+ return '';
205
+ return outputFormat === 'html'
206
+ ? this.sanitizer.bypassSecurityTrustHtml(this.processContentToHtml(jsonData.content))
207
+ : this.processContent(jsonData.content);
208
+ }
209
+ processContent(content) {
210
+ if (!content || !Array.isArray(content))
211
+ return '';
212
+ return content.map(item => this.processNode(item)).join('');
213
+ }
214
+ processNode(node) {
215
+ if (!node)
216
+ return '';
217
+ switch (node.type) {
218
+ case 'func':
219
+ return this.processFuncNode(node);
220
+ case 'field':
221
+ return `{${node.attrs?.name || ''}}`;
222
+ case 'metric':
223
+ return `[${node.attrs?.name || ''}]`;
224
+ case 'text':
225
+ return node.text || '';
226
+ case 'paragraph':
227
+ return this.processContent(node.content);
228
+ case 'doc':
229
+ return this.processContent(node.content);
230
+ default:
231
+ return '';
232
+ }
233
+ }
234
+ processFuncNode(node) {
235
+ const funcName = node.attrs?.name || '';
236
+ const content = this.processContent(node.content);
237
+ return `${funcName}(${content})`;
238
+ }
239
+ processContentToHtml(content) {
240
+ if (!content || !Array.isArray(content))
241
+ return '';
242
+ return content.map(item => this.processNodeToHtml(item)).join('');
243
+ }
244
+ processNodeToHtml(node) {
245
+ if (!node)
246
+ return '';
247
+ switch (node.type) {
248
+ case 'func':
249
+ return this.processFuncNodeToHtml(node);
250
+ case 'field':
251
+ return `<span class="${node.attrs?.className || ''}" style="display: inline-block; margin: 0 4px;height: 18px;line-height: 18px;">${node.attrs?.name || ''}</span>`;
252
+ case 'text':
253
+ return this.escapeHtml(node.text || '');
254
+ case 'paragraph':
255
+ return this.processContentToHtml(node.content);
256
+ case 'doc':
257
+ return this.processContentToHtml(node.content);
258
+ default:
259
+ return '';
260
+ }
261
+ }
262
+ processFuncNodeToHtml(node) {
263
+ const funcName = node.attrs?.name || '';
264
+ const className = node.attrs?.className || '';
265
+ const content = this.processContentToHtml(node.content);
266
+ return `<span style="display: inline-block; margin: 0 4px;"><span contenteditable="false" class="${className}">${funcName}(</span><span style="white-space: pre-wrap; display: inline-block; margin: 0 4px;" contenteditable="true">${content}</span><span contenteditable="false" class="${className}">)</span></span>`;
267
+ }
268
+ escapeHtml(text) {
269
+ const div = document.createElement('div');
270
+ div.textContent = text;
271
+ return div.innerHTML;
272
+ }
273
+ validateNode(node, errors, path = '') {
274
+ if (!node || !node.type) {
275
+ return;
276
+ }
277
+ const currentPath = path ? `${path} > ${node.type}` : node.type;
278
+ if (node.type === 'func') {
279
+ this.validateFuncNode(node, errors, currentPath);
280
+ }
281
+ }
282
+ validateFuncNode(node, errors, path) {
283
+ if (!node.content || !Array.isArray(node.content)) {
284
+ return;
285
+ }
286
+ const content = node.content;
287
+ const length = content.length;
288
+ for (let i = 0; i < length; i++) {
289
+ const currentItem = content[i];
290
+ const nextItem = content[i + 1];
291
+ if (currentItem.type === 'field' || currentItem.type === 'func') {
292
+ if (i < length - 1) {
293
+ if (nextItem && nextItem.type === 'text') {
294
+ const text = nextItem.text || '';
295
+ if (!text.startsWith(',')) {
296
+ errors.push(`${path}: 参数之间必须用逗号分隔,位置 ${i + 1}`);
297
+ }
298
+ }
299
+ else {
300
+ errors.push(`${path}: 参数之间必须用逗号分隔,位置 ${i + 1}`);
301
+ }
302
+ }
303
+ }
304
+ if (currentItem.type === 'func') {
305
+ this.validateFuncNode(currentItem, errors, `${path} > ${currentItem.attrs?.name || 'func'}`);
306
+ }
307
+ }
308
+ }
309
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormulaEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
310
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormulaEditorService, providedIn: 'root' }); }
311
+ }
312
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormulaEditorService, decorators: [{
313
+ type: Injectable,
314
+ args: [{
315
+ providedIn: 'root'
316
+ }]
317
+ }] });
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXVsYS1lZGl0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvZm9ybXVsYS1lZGl0b3IvZm9ybXVsYS1lZGl0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFVLElBQUksRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBVTdELE1BQU0sT0FBTyxvQkFBb0I7SUFIakM7UUFJbUIsY0FBUyxHQUFpQixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7S0FnVmpFO0lBM1VDLFNBQVM7UUFDUCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzNCLElBQUksRUFBRSxPQUFPO1lBQ2IsTUFBTSxFQUFFLElBQUk7WUFDWixLQUFLLEVBQUUsUUFBUTtZQUNmLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsSUFBSSxFQUFFLElBQUk7WUFDVixhQUFhO2dCQUNYLE9BQU87b0JBQ0wsRUFBRSxFQUFFO3dCQUNGLE9BQU8sRUFBRSxJQUFJO3FCQUNkO29CQUNELElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsRUFBRTtxQkFDWjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsT0FBTyxFQUFFLEVBQUU7cUJBQ1o7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE9BQU8sRUFBRSxPQUFPO3FCQUNqQjtpQkFDRixDQUFDO1lBQ0osQ0FBQztZQUNELFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRTtnQkFDakIs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QUFDO1lBQ0gsQ0FBQztZQUVELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMvRixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7K0dBaFZVLG9CQUFvQjttSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBFZGl0b3IsIE5vZGUsIG1lcmdlQXR0cmlidXRlcyB9IGZyb20gJ0B0aXB0YXAvY29yZSc7XG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgaXNWYWxpZDogYm9vbGVhbjtcbiAgZXJyb3JzOiBzdHJpbmdbXTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRm9ybXVsYUVkaXRvclNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gIGZ1bmNOb2RlPzogTm9kZTtcbiAgZmllbGROb2RlPzogTm9kZTtcbiAgcGFyYW1Ob2RlPzogTm9kZTtcblxuICBpbml0Tm9kZXMoKSB7XG4gICAgdGhpcy5jcmVhdGVGdW5jTm9kZSgpO1xuICAgIHRoaXMuY3JlYXRlRmllbGROb2RlKCk7XG4gIH1cblxuICBjcmVhdGVGaWVsZE5vZGUoKSB7XG4gICAgdGhpcy5maWVsZE5vZGUgPSBOb2RlLmNyZWF0ZSh7XG4gICAgICBuYW1lOiAnZmllbGQnLFxuICAgICAgaW5saW5lOiB0cnVlLFxuICAgICAgZ3JvdXA6ICdpbmxpbmUnLFxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICBhdG9tOiB0cnVlLFxuICAgICAgYWRkQXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzTmFtZToge1xuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRhdGFUeXBlOiB7XG4gICAgICAgICAgICBkZWZhdWx0OiAnZmllbGQnXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHJlbmRlclRleHQoeyBub2RlIH0pIHtcbiAgICAgICAgcmV0dXJuIGAke25vZGUuYXR0cnNbJ25hbWUnXX1gO1xuICAgICAgfSxcbiAgICAgIHBhcnNlSFRNTCgpIHtcbiAgICAgICAgcmV0dXJuIFt7IHRhZzogJ2RpdltkYXRhLXR5cGU9XCJmaWVsZFwiXScgfV07XG4gICAgICB9LFxuICAgICAgcmVuZGVySFRNTCh7IEhUTUxBdHRyaWJ1dGVzLCBub2RlIH0pIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICBtZXJnZUF0dHJpYnV0ZXMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICdkYXRhLXR5cGUnOiAnZmllbGQnLFxuICAgICAgICAgICAgICBjbGFzczogYGZpZWxkLW5vZGUgJHtub2RlLmF0dHJzWydjbGFzc05hbWUnXX1gIHx8ICcnLFxuICAgICAgICAgICAgICBjb250ZW50ZWRpdGFibGU6ICdmYWxzZScsXG4gICAgICAgICAgICAgIHN0eWxlOiBgZGlzcGxheTogaW5saW5lLWJsb2NrO21hcmdpbjogMCA0cHg7Zm9udC1zaXplOiAxM3B4O2hlaWdodDogMThweDtsaW5lLWhlaWdodDogMThweDtgXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSFRNTEF0dHJpYnV0ZXNcbiAgICAgICAgICApLFxuICAgICAgICAgIG5vZGUuYXR0cnNbJ25hbWUnXVxuICAgICAgICBdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlRnVuY05vZGUoKSB7XG4gICAgdGhpcy5mdW5jTm9kZSA9IE5vZGUuY3JlYXRlKHtcbiAgICAgIG5hbWU6ICdmdW5jJyxcbiAgICAgIGlubGluZTogdHJ1ZSxcbiAgICAgIGdyb3VwOiAnaW5saW5lJyxcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgIGNvbnRlbnQ6ICdpbmxpbmUqJyxcbiAgICAgIGF0b206IHRydWUsXG4gICAgICBhZGRBdHRyaWJ1dGVzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY2xhc3NOYW1lOiB7XG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGF0YVR5cGU6IHtcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdmdW5jJ1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICByZW5kZXJUZXh0KHsgbm9kZSB9KSB7XG4gICAgICAgIGNvbnN0IGZ1bmNOYW1lID0gbm9kZS5hdHRyc1snbmFtZSddIHx8ICcnO1xuICAgICAgICBjb25zdCBjaGlsZHJlblRleHQgPSBub2RlLmNvbnRlbnQuY29udGVudFxuICAgICAgICAgIC5tYXAoY2hpbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaWxkLnRleHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSAmJiBjaGlsZC50eXBlLnNwZWMgJiYgY2hpbGQudHlwZS5zcGVjWyd0b1RleHQnXSkge1xuICAgICAgICAgICAgICByZXR1cm4gY2hpbGQudHlwZS5zcGVjWyd0b1RleHQnXSh7IG5vZGU6IGNoaWxkIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICByZXR1cm4gYCR7ZnVuY05hbWV9KCR7Y2hpbGRyZW5UZXh0fSlgO1xuICAgICAgfSxcbiAgICAgIHBhcnNlSFRNTCgpIHtcbiAgICAgICAgcmV0dXJuIFt7IHRhZzogJ2RpdltkYXRhLXR5cGU9XCJmdW5jXCJdJyB9XTtcbiAgICAgIH0sXG4gICAgICBhZGROb2RlVmlldygpIHtcbiAgICAgICAgcmV0dXJuICh7IG5vZGUgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNyZWF0ZUVsZW1lbnQgPSAodGFnOiBzdHJpbmcsIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhwcm9wcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChrZXkgPT09ICdzdHlsZScpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW3N0eWxlS2V5LCBzdHlsZVZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgKGVsZW1lbnQuc3R5bGUgYXMgYW55KVtzdHlsZUtleV0gPSBzdHlsZVZhbHVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2lubmVyVGV4dCcpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVyVGV4dCA9IHZhbHVlO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NsYXNzTmFtZScpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHZhbHVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub2RlLmF0dHJzWydjbGFzc05hbWUnXSB8fCAnJztcbiAgICAgICAgICBjb25zdCBmdW5jTmFtZSA9IG5vZGUuYXR0cnNbJ25hbWUnXTtcblxuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7XG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgICAgICAgbWFyZ2luOiAnMCA0cHgnLFxuICAgICAgICAgICAgICBmb250U2l6ZTogJzEzcHgnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gY3JlYXRlRWxlbWVudCgnc3BhbicsIHtcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsXG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGVudGVkaXRhYmxlOiAndHJ1ZSdcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7XG4gICAgICAgICAgICBpbm5lclRleHQ6IGAke2Z1bmNOYW1lfSBgLFxuICAgICAgICAgICAgY29udGVudGVkaXRhYmxlOiAnZmFsc2UnLFxuICAgICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBicmFja2V0ID0gKHZhbHVlOiBzdHJpbmcsIHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdzcGFuJywge1xuICAgICAgICAgICAgICBpbm5lclRleHQ6IHZhbHVlLFxuICAgICAgICAgICAgICBjb250ZW50ZWRpdGFibGU6ICdmYWxzZScsXG4gICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgLi4uc3R5bGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoYmVmb3JlLCBicmFja2V0KCcoJywgeyBtYXJnaW5SaWdodDogJzJweCcgfSksIGNvbnRlbnQsIGJyYWNrZXQoJyknLCB7IG1hcmdpbkxlZnQ6ICcycHgnIH0pKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb206IGNvbnRhaW5lcixcbiAgICAgICAgICAgIGNvbnRlbnRET006IGNvbnRlbnRcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOagoemqjOWFrOW8j+eahEpTT07ooajnpLrmmK/lkKbmnInmlYhcbiAgICogQHBhcmFtIGZvcm11bGEg5YWs5byP55qESlNPTuihqOekulxuICAgKiBAcmV0dXJucyDmoKHpqoznu5PmnpzvvIzljIXlkKvmmK/lkKbmnInmlYjlkozplJnor6/kv6Hmga/mlbDnu4RcbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZUZvcm11bGEoZm9ybXVsYTogYW55KTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKCFmb3JtdWxhKSB7XG4gICAgICBlcnJvcnMucHVzaCgn5YWs5byP5LiN6IO95Li656m6Jyk7XG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3JzIH07XG4gICAgfVxuXG4gICAgaWYgKGZvcm11bGEudHlwZSAhPT0gJ2RvYycpIHtcbiAgICAgIGVycm9ycy5wdXNoKCflhazlvI/moLnoioLngrnnsbvlnovlv4XpobvmmK8gZG9jJyk7XG4gICAgfVxuXG4gICAgaWYgKCFmb3JtdWxhLmNvbnRlbnQgfHwgIUFycmF5LmlzQXJyYXkoZm9ybXVsYS5jb250ZW50KSkge1xuICAgICAgZXJyb3JzLnB1c2goJ+WFrOW8j+W/hemhu+WMheWQqyBjb250ZW50IOaVsOe7hCcpO1xuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9ycyB9O1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGFyYWdyYXBoIG9mIGZvcm11bGEuY29udGVudCkge1xuICAgICAgaWYgKHBhcmFncmFwaC50eXBlICE9PSAncGFyYWdyYXBoJykge1xuICAgICAgICBlcnJvcnMucHVzaCgn5q616JC957G75Z6L5b+F6aG75pivIHBhcmFncmFwaCcpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwYXJhZ3JhcGguY29udGVudCB8fCAhQXJyYXkuaXNBcnJheShwYXJhZ3JhcGguY29udGVudCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBwYXJhZ3JhcGguY29udGVudCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlTm9kZShub2RlLCBlcnJvcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBlcnJvcnMubGVuZ3RoID09PSAwLFxuICAgICAgZXJyb3JzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDku45KU09O5pWw5o2u5Lit5o+Q5Y+W5YaF5a655paH5pys5oiWSFRNTFxuICAgKiBAcGFyYW0ganNvbkRhdGEg5YWs5byP55qESlNPTuihqOekulxuICAgKiBAcGFyYW0gb3V0cHV0Rm9ybWF0IOi+k+WHuuagvOW8j++8jCd0ZXh0J+aIlidodG1sJ++8jOm7mOiupCd0ZXh0J1xuICAgKiBAcmV0dXJucyDmj5Dlj5bnmoTlhoXlrrnmlofmnKzmiJZIVE1M5a2X56ym5LiyXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29udGVudEZyb21Kc29uKGpzb25EYXRhOiBOelNhZmVBbnksIG91dHB1dEZvcm1hdDogJ3RleHQnIHwgJ2h0bWwnID0gJ3RleHQnKTogc3RyaW5nIHwgU2FmZUh0bWwge1xuICAgIGlmICghanNvbkRhdGEgfHwgIWpzb25EYXRhLmNvbnRlbnQpIHJldHVybiAnJztcbiAgICByZXR1cm4gb3V0cHV0Rm9ybWF0ID09PSAnaHRtbCdcbiAgICAgID8gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy5wcm9jZXNzQ29udGVudFRvSHRtbChqc29uRGF0YS5jb250ZW50KSlcbiAgICAgIDogdGhpcy5wcm9jZXNzQ29udGVudChqc29uRGF0YS5jb250ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0NvbnRlbnQoY29udGVudDogYW55W10pOiBzdHJpbmcge1xuICAgIGlmICghY29udGVudCB8fCAhQXJyYXkuaXNBcnJheShjb250ZW50KSkgcmV0dXJuICcnO1xuICAgIHJldHVybiBjb250ZW50Lm1hcChpdGVtID0+IHRoaXMucHJvY2Vzc05vZGUoaXRlbSkpLmpvaW4oJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzTm9kZShub2RlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghbm9kZSkgcmV0dXJuICcnO1xuXG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2Z1bmMnOlxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRnVuY05vZGUobm9kZSk7XG4gICAgICBjYXNlICdmaWVsZCc6XG4gICAgICAgIHJldHVybiBgeyR7bm9kZS5hdHRycz8ubmFtZSB8fCAnJ319YDtcbiAgICAgIGNhc2UgJ21ldHJpYyc6XG4gICAgICAgIHJldHVybiBgWyR7bm9kZS5hdHRycz8ubmFtZSB8fCAnJ31dYDtcbiAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICByZXR1cm4gbm9kZS50ZXh0IHx8ICcnO1xuICAgICAgY2FzZSAncGFyYWdyYXBoJzpcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0NvbnRlbnQobm9kZS5jb250ZW50KTtcbiAgICAgIGNhc2UgJ2RvYyc6XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NDb250ZW50KG5vZGUuY29udGVudCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRnVuY05vZGUobm9kZTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBmdW5jTmFtZSA9IG5vZGUuYXR0cnM/Lm5hbWUgfHwgJyc7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucHJvY2Vzc0NvbnRlbnQobm9kZS5jb250ZW50KTtcbiAgICByZXR1cm4gYCR7ZnVuY05hbWV9KCR7Y29udGVudH0pYDtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0NvbnRlbnRUb0h0bWwoY29udGVudDogYW55W10pOiBzdHJpbmcge1xuICAgIGlmICghY29udGVudCB8fCAhQXJyYXkuaXNBcnJheShjb250ZW50KSkgcmV0dXJuICcnO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQubWFwKGl0ZW0gPT4gdGhpcy5wcm9jZXNzTm9kZVRvSHRtbChpdGVtKSkuam9pbignJyk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NOb2RlVG9IdG1sKG5vZGU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFub2RlKSByZXR1cm4gJyc7XG5cbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnZnVuYyc6XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NGdW5jTm9kZVRvSHRtbChub2RlKTtcbiAgICAgIGNhc2UgJ2ZpZWxkJzpcbiAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIiR7bm9kZS5hdHRycz8uY2xhc3NOYW1lIHx8ICcnfVwiIHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXJnaW46IDAgNHB4O2hlaWdodDogMThweDtsaW5lLWhlaWdodDogMThweDtcIj4ke25vZGUuYXR0cnM/Lm5hbWUgfHwgJyd9PC9zcGFuPmA7XG4gICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXNjYXBlSHRtbChub2RlLnRleHQgfHwgJycpO1xuICAgICAgY2FzZSAncGFyYWdyYXBoJzpcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0NvbnRlbnRUb0h0bWwobm9kZS5jb250ZW50KTtcbiAgICAgIGNhc2UgJ2RvYyc6XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NDb250ZW50VG9IdG1sKG5vZGUuY29udGVudCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRnVuY05vZGVUb0h0bWwobm9kZTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBmdW5jTmFtZSA9IG5vZGUuYXR0cnM/Lm5hbWUgfHwgJyc7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gbm9kZS5hdHRycz8uY2xhc3NOYW1lIHx8ICcnO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnByb2Nlc3NDb250ZW50VG9IdG1sKG5vZGUuY29udGVudCk7XG5cbiAgICByZXR1cm4gYDxzcGFuIHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXJnaW46IDAgNHB4O1wiPjxzcGFuIGNvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCIgY2xhc3M9XCIke2NsYXNzTmFtZX1cIj4ke2Z1bmNOYW1lfSg8L3NwYW4+PHNwYW4gc3R5bGU9XCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAwIDRweDtcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JHtjb250ZW50fTwvc3Bhbj48c3BhbiBjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiIGNsYXNzPVwiJHtjbGFzc05hbWV9XCI+KTwvc3Bhbj48L3NwYW4+YDtcbiAgfVxuXG4gIHByaXZhdGUgZXNjYXBlSHRtbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlTm9kZShub2RlOiBhbnksIGVycm9yczogc3RyaW5nW10sIHBhdGg6IHN0cmluZyA9ICcnKTogdm9pZCB7XG4gICAgaWYgKCFub2RlIHx8ICFub2RlLnR5cGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhdGggPyBgJHtwYXRofSA+ICR7bm9kZS50eXBlfWAgOiBub2RlLnR5cGU7XG5cbiAgICBpZiAobm9kZS50eXBlID09PSAnZnVuYycpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVGdW5jTm9kZShub2RlLCBlcnJvcnMsIGN1cnJlbnRQYXRoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRnVuY05vZGUobm9kZTogYW55LCBlcnJvcnM6IHN0cmluZ1tdLCBwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIW5vZGUuY29udGVudCB8fCAhQXJyYXkuaXNBcnJheShub2RlLmNvbnRlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudCA9IG5vZGUuY29udGVudDtcbiAgICBjb25zdCBsZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gY29udGVudFtpXTtcbiAgICAgIGNvbnN0IG5leHRJdGVtID0gY29udGVudFtpICsgMV07XG5cbiAgICAgIGlmIChjdXJyZW50SXRlbS50eXBlID09PSAnZmllbGQnIHx8IGN1cnJlbnRJdGVtLnR5cGUgPT09ICdmdW5jJykge1xuICAgICAgICBpZiAoaSA8IGxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBpZiAobmV4dEl0ZW0gJiYgbmV4dEl0ZW0udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gbmV4dEl0ZW0udGV4dCB8fCAnJztcbiAgICAgICAgICAgIGlmICghdGV4dC5zdGFydHNXaXRoKCcsJykpIHtcbiAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYCR7cGF0aH06IOWPguaVsOS5i+mXtOW/hemhu+eUqOmAl+WPt+WIhumalO+8jOS9jee9riAke2kgKyAxfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChgJHtwYXRofTog5Y+C5pWw5LmL6Ze05b+F6aG755So6YCX5Y+35YiG6ZqU77yM5L2N572uICR7aSArIDF9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50SXRlbS50eXBlID09PSAnZnVuYycpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUZ1bmNOb2RlKGN1cnJlbnRJdGVtLCBlcnJvcnMsIGAke3BhdGh9ID4gJHtjdXJyZW50SXRlbS5hdHRycz8ubmFtZSB8fCAnZnVuYyd9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export * from './formula-editor.component';
2
+ export * from './formula-editor.model';
3
+ export * from './formula-editor-request.service';
4
+ export * from './formula-editor.service';
5
+ export * from './formula-editor-icon';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2Zvcm11bGEtZWRpdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZm9ybXVsYS1lZGl0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybXVsYS1lZGl0b3IubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtdWxhLWVkaXRvci1yZXF1ZXN0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtdWxhLWVkaXRvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybXVsYS1lZGl0b3ItaWNvbic7XG4iXX0=