@wemake4u/feel-editor 1.0.2 → 1.0.4

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025 Ivan Senatore, Wemake Informatica srl
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md CHANGED
@@ -10,3 +10,9 @@ This component enables users to:
10
10
  - **Handle change events** and validation state directly in Angular components
11
11
 
12
12
  > Fully compatible with Angular reactive forms and validation workflows.
13
+
14
+
15
+ This project includes @bpmn-io/feel-editor, licensed under the MIT License with attribution requirement.
16
+ © Camunda Services GmbH
17
+ https://github.com/bpmn-io/feel-editor
18
+ As required by the license, the original bpmn.io watermark displayed by the underlying software must remain visible and must not be removed or obscured when rendered.
@@ -0,0 +1,13 @@
1
+ Third-Party Licenses for @wemake4u/feel-editor
2
+
3
+ This project includes the following third-party components:
4
+
5
+ tslib (MIT License)
6
+ © Microsoft
7
+ https://github.com/Microsoft/tslib/blob/master/LICENSE.txt
8
+
9
+ @bpmn-io/feel-editor
10
+ © Camunda Services GmbH
11
+ MIT License with attribution requirement
12
+ https://github.com/bpmn-io/feel-editor
13
+ The bpmn.io watermark included by the software MUST remain visible.
@@ -1,66 +1,14 @@
1
1
  /// <reference path="../types/feel-editor.d.ts" />
2
- import { Component, forwardRef, Input, Output, ViewChild, EventEmitter } from '@angular/core';
2
+ import { Component, Input } from '@angular/core';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import { ReactiveFormsModule } from '@angular/forms';
5
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
6
5
  import FeelEditor from '@bpmn-io/feel-editor';
7
- import { lineNumbers, EditorView } from '@codemirror/view';
8
- import { keymap } from '@codemirror/view';
9
- import { indentLess, indentMore, history, historyKeymap } from '@codemirror/commands';
10
- import * as state from '@codemirror/state';
11
6
  import { getDefaultBuiltins } from '../utils/parseBuiltins';
7
+ import { CodeEditorComponent, createValueAccessorProvider } from '@wemake4u/code-editor';
12
8
  import * as i0 from "@angular/core";
13
9
  import * as i1 from "@angular/common";
14
- export class FeelEditorComponent {
15
- editorContainerRef;
16
- change = new EventEmitter();
17
- keydown = new EventEmitter();
18
- lint = new EventEmitter();
19
- embedded = false;
20
- minHeight;
21
- maxHeight;
22
- get disabled() {
23
- return this._disabled;
24
- }
25
- set disabled(value) {
26
- if (this._disabled === value)
27
- return;
28
- this._disabled = value;
29
- this.refreshEditor();
30
- }
31
- get readonly() {
32
- return this._readonly;
33
- }
34
- set readonly(value) {
35
- if (this._readonly === value)
36
- return;
37
- this._readonly = value;
38
- this.refreshEditor();
39
- }
40
- get lineNumbers() {
41
- return this._lineNumbers;
42
- }
43
- set lineNumbers(value) {
44
- if (this._lineNumbers === value)
45
- return;
46
- this._lineNumbers = value;
47
- this.refreshEditor();
48
- }
49
- get placeholder() {
50
- return this._placeholder;
51
- }
52
- set placeholder(value) {
53
- this._placeholder = value;
54
- if (this._editor) {
55
- this._editor.setPlaceholder(value);
56
- }
57
- }
58
- get value() {
59
- return this._value;
60
- }
61
- set value(value) {
62
- this.writeValue(value);
63
- }
10
+ export class FeelEditorComponent extends CodeEditorComponent {
11
+ //#region dialect
64
12
  get dialect() {
65
13
  return this._dialect;
66
14
  }
@@ -70,6 +18,8 @@ export class FeelEditorComponent {
70
18
  this._dialect = value;
71
19
  this.refreshEditor();
72
20
  }
21
+ //#endregion
22
+ //#region builtins
73
23
  get builtins() {
74
24
  return this._builtins;
75
25
  }
@@ -79,155 +29,55 @@ export class FeelEditorComponent {
79
29
  this._builtins = value;
80
30
  this.refreshEditor();
81
31
  }
32
+ getBuiltins() {
33
+ if (Array.isArray(this._builtins)) {
34
+ return [...getDefaultBuiltins(), ...this._builtins];
35
+ }
36
+ return this._builtins;
37
+ }
38
+ //#endregion
39
+ //#region variables
82
40
  get variables() {
83
41
  return this._variables;
84
42
  }
85
43
  set variables(value) {
86
44
  this._variables = value;
87
- if (this._editor) {
88
- this._editor.setVariables(value || []);
89
- }
90
- }
91
- ngAfterViewInit() {
92
- this.isViewInit = true;
93
- this.createEditor();
94
- }
95
- writeValue(value) {
96
- this._value = value || '';
97
- if (this._editor) {
98
- this._editor.setValue(this._value);
45
+ if (this._feelEditor) {
46
+ this._feelEditor.setVariables(value || []);
99
47
  }
100
48
  }
101
- registerOnChange(fn) {
102
- this.onChange = fn;
103
- }
104
- registerOnTouched(fn) {
105
- this.onTouched = fn;
106
- }
107
- setDisabledState(isDisabled) {
108
- this.disabled = isDisabled;
109
- }
49
+ //#endregion
110
50
  //#region Private Members
111
- isViewInit = false;
112
- _editor;
113
- _value = '';
114
- _readonly = false;
115
- _disabled = false;
116
- _lineNumbers = false;
117
- _placeholder = "";
51
+ _feelEditor;
118
52
  _dialect = "expression";
119
53
  _builtins;
120
54
  _variables;
121
- onChange = (_) => { };
122
- onTouched = () => { };
123
- createEditor() {
124
- if (!this.isViewInit || !this.editorContainerRef?.nativeElement)
125
- return;
126
- this._editor = new FeelEditor({
127
- container: this.editorContainerRef.nativeElement,
128
- placeholder: this._placeholder,
129
- readOnly: (this._readonly || this._disabled),
55
+ createEditorView(container) {
56
+ this._feelEditor = new FeelEditor({
57
+ container: container,
130
58
  dialect: this.dialect,
131
- value: this._value,
59
+ value: this.value,
132
60
  builtins: this.getBuiltins() ?? undefined,
133
61
  variables: this._variables ?? undefined,
134
- onChange: (value) => {
135
- this._value = value;
136
- this.onChange(value);
137
- this.change.emit(value);
138
- },
139
- onKeyDown: (event) => this.keydown.emit(event),
140
- onLint: (issues) => this.lint.emit(issues),
141
- extensions: [...(this._lineNumbers ? [lineNumbers()] : []), EditorView.lineWrapping],
62
+ extensions: this.getExtensions()
142
63
  });
143
- this.configureEditor(this._editor);
144
- this.editorContainerRef?.nativeElement.classList.toggle('disabled', this._disabled);
145
- }
146
- destroyEditor() {
147
- if (this._editor) {
148
- this._editor = undefined;
149
- this.editorContainerRef.nativeElement.innerHTML = '';
150
- }
64
+ return this._feelEditor._cmEditor;
151
65
  }
152
- refreshEditor() {
153
- this.destroyEditor();
154
- this.createEditor();
155
- }
156
- configureEditor(editor) {
157
- if (!editor._cmEditor)
158
- return;
159
- const customKeymap = keymap.of([
160
- {
161
- key: "Shift-+",
162
- run: indentMore
163
- },
164
- {
165
- key: "Shift--",
166
- run: indentLess
167
- }
168
- ]);
169
- editor._cmEditor.dispatch({
170
- effects: state.StateEffect.appendConfig.of([
171
- history(),
172
- keymap.of(historyKeymap),
173
- customKeymap
174
- ])
175
- });
176
- }
177
- getBuiltins() {
178
- if (Array.isArray(this._builtins)) {
179
- return [...getDefaultBuiltins(), ...this._builtins];
180
- }
181
- return this._builtins;
182
- }
183
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
184
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FeelEditorComponent, isStandalone: true, selector: "feel-editor", inputs: { embedded: "embedded", minHeight: "minHeight", maxHeight: "maxHeight", disabled: "disabled", readonly: "readonly", lineNumbers: "lineNumbers", placeholder: "placeholder", value: "value", dialect: "dialect", builtins: "builtins", variables: "variables" }, outputs: { change: "change", keydown: "keydown", lint: "lint" }, providers: [
185
- {
186
- provide: NG_VALUE_ACCESSOR,
187
- useExisting: forwardRef(() => FeelEditorComponent),
188
- multi: true
189
- }
190
- ], viewQueries: [{ propertyName: "editorContainerRef", first: true, predicate: ["editorContainer"], descendants: true, static: true }], ngImport: i0, template: "<div #editorContainer\r\n class=\"feel-editor-container\"\r\n (blur)=\"onTouched()\"\r\n [ngClass]=\"embedded ? 'feel-editor-embedded' : 'feel-editor-standalone'\"\r\n [style.min-height]=\"minHeight\"\r\n [style.max-height]=\"maxHeight\">\r\n</div>\r\n", styles: [".feel-editor-container{height:100%;overflow-y:auto}.feel-editor-standalone{border:1px solid #ccc;padding:5px}.feel-editor-embedded{border:0px;padding:0}.feel-editor-container.disabled{pointer-events:none;opacity:.6}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
66
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelEditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
67
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FeelEditorComponent, isStandalone: true, selector: "feel-editor", inputs: { dialect: "dialect", builtins: "builtins", variables: "variables" }, providers: [
68
+ createValueAccessorProvider(FeelEditorComponent)
69
+ ], usesInheritance: true, ngImport: i0, template: "<div #editorContainer\r\n class=\"feel-editor-container\"\r\n (blur)=\"onTouched()\"\r\n [ngClass]=\"embedded ? 'feel-editor-embedded' : 'feel-editor-standalone'\"\r\n [style.min-height]=\"minHeight\"\r\n [style.max-height]=\"maxHeight\">\r\n</div>\r\n", styles: [".feel-editor-container{height:100%;overflow-y:auto}.feel-editor-standalone{border:1px solid #ccc;padding:5px}.feel-editor-embedded{border:0px;padding:0}.feel-editor-container.disabled{pointer-events:none;opacity:.6}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
191
70
  }
192
71
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelEditorComponent, decorators: [{
193
72
  type: Component,
194
73
  args: [{ selector: 'feel-editor', standalone: true, imports: [CommonModule, ReactiveFormsModule], providers: [
195
- {
196
- provide: NG_VALUE_ACCESSOR,
197
- useExisting: forwardRef(() => FeelEditorComponent),
198
- multi: true
199
- }
74
+ createValueAccessorProvider(FeelEditorComponent)
200
75
  ], template: "<div #editorContainer\r\n class=\"feel-editor-container\"\r\n (blur)=\"onTouched()\"\r\n [ngClass]=\"embedded ? 'feel-editor-embedded' : 'feel-editor-standalone'\"\r\n [style.min-height]=\"minHeight\"\r\n [style.max-height]=\"maxHeight\">\r\n</div>\r\n", styles: [".feel-editor-container{height:100%;overflow-y:auto}.feel-editor-standalone{border:1px solid #ccc;padding:5px}.feel-editor-embedded{border:0px;padding:0}.feel-editor-container.disabled{pointer-events:none;opacity:.6}\n"] }]
201
- }], propDecorators: { editorContainerRef: [{
202
- type: ViewChild,
203
- args: ['editorContainer', { static: true }]
204
- }], change: [{
205
- type: Output
206
- }], keydown: [{
207
- type: Output
208
- }], lint: [{
209
- type: Output
210
- }], embedded: [{
211
- type: Input
212
- }], minHeight: [{
213
- type: Input
214
- }], maxHeight: [{
215
- type: Input
216
- }], disabled: [{
217
- type: Input
218
- }], readonly: [{
219
- type: Input
220
- }], lineNumbers: [{
221
- type: Input
222
- }], placeholder: [{
223
- type: Input
224
- }], value: [{
225
- type: Input
226
- }], dialect: [{
76
+ }], propDecorators: { dialect: [{
227
77
  type: Input
228
78
  }], builtins: [{
229
79
  type: Input
230
80
  }], variables: [{
231
81
  type: Input
232
82
  }] } });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlbC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmVlbC1lZGl0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2ZlZWwtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZlZWwtZWRpdG9yL3NyYy9saWIvY29tcG9uZW50cy9mZWVsLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrREFBa0Q7QUFFbEQsT0FBTyxFQUNMLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBaUIsU0FBUyxFQUNoRCxZQUFZLEVBQzNCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxVQUFzRCxNQUFNLHNCQUFzQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNyRixPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFnQjVELE1BQU0sT0FBTyxtQkFBbUI7SUFDa0Isa0JBQWtCLENBQWM7SUFFdEUsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFDcEMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFp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QkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7Z0JBQ2xELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwrSkM1Qkgsa1JBT0Esa1JEY1ksWUFBWSw0SEFBRSxtQkFBbUI7OzRGQVNoQyxtQkFBbUI7a0JBZC9CLFNBQVM7K0JBQ0UsYUFBYSxjQUdYLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxhQUNqQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OEJBRytDLGtCQUFrQjtzQkFBakUsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRXBDLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFFRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFPRixRQUFRO3NCQURYLEtBQUs7Z0JBYUYsUUFBUTtzQkFEWCxLQUFLO2dCQWFGLFdBQVc7c0JBRGQsS0FBSztnQkFhRixXQUFXO3NCQURkLEtBQUs7Z0JBYUYsS0FBSztzQkFEUixLQUFLO2dCQVVGLE9BQU87c0JBRFYsS0FBSztnQkFhRixRQUFRO3NCQURYLEtBQUs7Z0JBYUYsU0FBUztzQkFEWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL3R5cGVzL2ZlZWwtZWRpdG9yLmQudHNcIiAvPlxyXG5cclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPdXRwdXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZFxyXG4gICwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IEZlZWxFZGl0b3IsIHsgRmVlbERpYWxlY3QsIEZlZWxCdWlsdGluLCBGZWVsVmFyaWFibGUgfSBmcm9tICdAYnBtbi1pby9mZWVsLWVkaXRvcic7XHJcbmltcG9ydCB7IGxpbmVOdW1iZXJzLCBFZGl0b3JWaWV3IH0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XHJcbmltcG9ydCB7IGtleW1hcCB9IGZyb20gJ0Bjb2RlbWlycm9yL3ZpZXcnO1xyXG5pbXBvcnQgeyBpbmRlbnRMZXNzLCBpbmRlbnRNb3JlLCBoaXN0b3J5LCBoaXN0b3J5S2V5bWFwIH0gZnJvbSAnQGNvZGVtaXJyb3IvY29tbWFuZHMnXHJcbmltcG9ydCAqIGFzIHN0YXRlIGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcclxuaW1wb3J0IHsgZ2V0RGVmYXVsdEJ1aWx0aW5zIH0gZnJvbSAnLi4vdXRpbHMvcGFyc2VCdWlsdGlucyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2ZlZWwtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmVlbC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZlZWwtZWRpdG9yLmNvbXBvbmVudC5jc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRmVlbEVkaXRvckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmVlbEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdlZGl0b3JDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBlZGl0b3JDb250YWluZXJSZWYhOiBFbGVtZW50UmVmO1xyXG5cclxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIGtleWRvd24gPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIGxpbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG5cclxuICBASW5wdXQoKSBlbWJlZGRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1pbkhlaWdodD86IHN0cmluZztcclxuICBASW5wdXQoKSBtYXhIZWlnaHQ/OiBzdHJpbmc7XHJcblxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT09IHZhbHVlKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy5yZWZyZXNoRWRpdG9yKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCByZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX3JlYWRvbmx5ID09PSB2YWx1ZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5fcmVhZG9ubHkgPSB2YWx1ZTtcclxuICAgIHRoaXMucmVmcmVzaEVkaXRvcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVOdW1iZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xpbmVOdW1iZXJzO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgbGluZU51bWJlcnModmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9saW5lTnVtYmVycyA9PT0gdmFsdWUpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuX2xpbmVOdW1iZXJzID0gdmFsdWU7XHJcbiAgICB0aGlzLnJlZnJlc2hFZGl0b3IoKTtcclxuICB9XHJcblxyXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9lZGl0b3IpIHtcclxuICAgICAgdGhpcy5fZWRpdG9yLnNldFBsYWNlaG9sZGVyKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldCBkaWFsZWN0KCk6IEZlZWxEaWFsZWN0IHtcclxuICAgIHJldHVybiB0aGlzLl9kaWFsZWN0O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlhbGVjdCh2YWx1ZTogRmVlbERpYWxlY3QpIHtcclxuICAgIGlmICh0aGlzLl9kaWFsZWN0ID09PSB2YWx1ZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5fZGlhbGVjdCA9IHZhbHVlO1xyXG4gICAgdGhpcy5yZWZyZXNoRWRpdG9yKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYnVpbHRpbnMoKTogRmVlbEJ1aWx0aW5bXSB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1aWx0aW5zO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYnVpbHRpbnModmFsdWU6IEZlZWxCdWlsdGluW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fYnVpbHRpbnMgPT09IHZhbHVlKVxyXG4gICAgICByZXR1cm47ICAgIFxyXG4gICAgdGhpcy5fYnVpbHRpbnMgPSB2YWx1ZTtcclxuICAgIHRoaXMucmVmcmVzaEVkaXRvcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZhcmlhYmxlcygpOiBGZWVsVmFyaWFibGVbXSB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlcztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZhcmlhYmxlcyh2YWx1ZTogRmVlbFZhcmlhYmxlW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl92YXJpYWJsZXMgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9lZGl0b3IpIHtcclxuICAgICAgdGhpcy5fZWRpdG9yLnNldFZhcmlhYmxlcyh2YWx1ZSB8fCBbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzVmlld0luaXQgPSB0cnVlO1xyXG4gICAgdGhpcy5jcmVhdGVFZGl0b3IoKTsgICAgXHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgfHwgJyc7XHJcbiAgICBpZiAodGhpcy5fZWRpdG9yKSB7XHJcbiAgICAgIHRoaXMuX2VkaXRvci5zZXRWYWx1ZSh0aGlzLl92YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFByaXZhdGUgTWVtYmVyc1xyXG5cclxuICBwcml2YXRlIGlzVmlld0luaXQgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfZWRpdG9yPzogRmVlbEVkaXRvcjtcclxuXHJcbiAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcclxuXHJcbiAgcHJpdmF0ZSBfcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfbGluZU51bWJlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHByaXZhdGUgX2RpYWxlY3Q6IEZlZWxEaWFsZWN0ID0gXCJleHByZXNzaW9uXCI7XHJcblxyXG4gIHByaXZhdGUgX2J1aWx0aW5zOiBGZWVsQnVpbHRpbltdIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfdmFyaWFibGVzOiBGZWVsVmFyaWFibGVbXSB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcblxyXG4gIHB1YmxpYyBvblRvdWNoZWQgPSAoKSA9PiB7IH07XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRWRpdG9yKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzVmlld0luaXQgfHwgIXRoaXMuZWRpdG9yQ29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fZWRpdG9yID0gbmV3IEZlZWxFZGl0b3Ioe1xyXG4gICAgICBjb250YWluZXI6IHRoaXMuZWRpdG9yQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLl9wbGFjZWhvbGRlcixcclxuICAgICAgcmVhZE9ubHk6ICh0aGlzLl9yZWFkb25seSB8fCB0aGlzLl9kaXNhYmxlZCksXHJcbiAgICAgIGRpYWxlY3Q6IHRoaXMuZGlhbGVjdCxcclxuICAgICAgdmFsdWU6IHRoaXMuX3ZhbHVlLFxyXG4gICAgICBidWlsdGluczogdGhpcy5nZXRCdWlsdGlucygpID8/IHVuZGVmaW5lZCxcclxuICAgICAgdmFyaWFibGVzOiB0aGlzLl92YXJpYWJsZXMgPz8gdW5kZWZpbmVkLFxyXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgICB9LFxyXG4gICAgICBvbktleURvd246IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5rZXlkb3duLmVtaXQoZXZlbnQpLFxyXG4gICAgICBvbkxpbnQ6IChpc3N1ZXM6IGFueVtdKSA9PiB0aGlzLmxpbnQuZW1pdChpc3N1ZXMpLFxyXG4gICAgICBleHRlbnNpb25zOiBbLi4uKHRoaXMuX2xpbmVOdW1iZXJzID8gW2xpbmVOdW1iZXJzKCldIDogW10pLCBFZGl0b3JWaWV3LmxpbmVXcmFwcGluZ10sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyZUVkaXRvcih0aGlzLl9lZGl0b3IpO1xyXG5cclxuICAgIHRoaXMuZWRpdG9yQ29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoJ2Rpc2FibGVkJywgdGhpcy5fZGlzYWJsZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95RWRpdG9yKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2VkaXRvcikge1xyXG4gICAgICB0aGlzLl9lZGl0b3IgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuZWRpdG9yQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoRWRpdG9yKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95RWRpdG9yKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUVkaXRvcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVFZGl0b3IoZWRpdG9yOiBhbnkpIHtcclxuXHJcbiAgICBpZiAoIWVkaXRvci5fY21FZGl0b3IpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjdXN0b21LZXltYXAgPSBrZXltYXAub2YoW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlNoaWZ0LStcIixcclxuICAgICAgICBydW46IGluZGVudE1vcmVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJTaGlmdC0tXCIsXHJcbiAgICAgICAgcnVuOiBpbmRlbnRMZXNzXHJcbiAgICAgIH1cclxuICAgIF0pO1xyXG5cclxuICAgIGVkaXRvci5fY21FZGl0b3IuZGlzcGF0Y2goe1xyXG4gICAgICBlZmZlY3RzOiBzdGF0ZS5TdGF0ZUVmZmVjdC5hcHBlbmRDb25maWcub2YoW1xyXG4gICAgICAgIGhpc3RvcnkoKSxcclxuICAgICAgICBrZXltYXAub2YoaGlzdG9yeUtleW1hcCksXHJcbiAgICAgICAgY3VzdG9tS2V5bWFwXHJcbiAgICAgIF0pXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QnVpbHRpbnMoKVxyXG4gIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX2J1aWx0aW5zKSkge1xyXG4gICAgICByZXR1cm4gWy4uLmdldERlZmF1bHRCdWlsdGlucygpLCAuLi50aGlzLl9idWlsdGluc107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2J1aWx0aW5zO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPGRpdiAjZWRpdG9yQ29udGFpbmVyXHJcbiAgICAgY2xhc3M9XCJmZWVsLWVkaXRvci1jb250YWluZXJcIlxyXG4gICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcclxuICAgICBbbmdDbGFzc109XCJlbWJlZGRlZCA/ICdmZWVsLWVkaXRvci1lbWJlZGRlZCcgOiAnZmVlbC1lZGl0b3Itc3RhbmRhbG9uZSdcIlxyXG4gICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIm1pbkhlaWdodFwiXHJcbiAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCI+XHJcbjwvZGl2PlxyXG4iXX0=
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlbC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmVlbC1lZGl0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2ZlZWwtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZlZWwtZWRpdG9yL3NyYy9saWIvY29tcG9uZW50cy9mZWVsLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrREFBa0Q7QUFFbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sVUFBc0QsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBWXpGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxtQkFBbUI7SUFFMUQsaUJBQWlCO0lBRWpCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFDSSxPQUFPLENBQUMsS0FBa0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUs7WUFDekIsT0FBTztRQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsWUFBWTtJQUVaLGtCQUFrQjtJQUVsQixJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQ0ksUUFBUSxDQUFDLEtBQXVDO1FBQ2xELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO1lBQzFCLE9BQU87UUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxHQUFHLGtCQUFrQixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWTtJQUVaLG1CQUFtQjtJQUVuQixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQ0ksU0FBUyxDQUFDLEtBQXdDO1FBQ3BELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVk7SUFFWix5QkFBeUI7SUFFakIsV0FBVyxDQUFnQztJQUUzQyxRQUFRLEdBQWdCLFlBQVksQ0FBQztJQUVyQyxTQUFTLENBQW1DO0lBRTVDLFVBQVUsQ0FBb0M7SUFFN0MsZ0JBQWdCLENBQUMsU0FBYztRQUV0QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDO1lBQ2hDLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxTQUFTO1lBQ3pDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLFNBQVM7WUFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7U0FDakMsQ0FBQyxDQUFDO1FBRUgsT0FBUSxJQUFJLENBQUMsV0FBbUIsQ0FBRSxTQUFTLENBQUM7SUFDOUMsQ0FBQzt3R0FoRlUsbUJBQW1COzRGQUFuQixtQkFBbUIsd0lBSm5CO1lBQ1QsMkJBQTJCLENBQUMsbUJBQW1CLENBQUM7U0FDakQsaURDakJILGtSQU9BLGtSRE9ZLFlBQVksNEhBQUUsbUJBQW1COzs0RkFLaEMsbUJBQW1CO2tCQVYvQixTQUFTOytCQUNFLGFBQWEsY0FHWCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsYUFDakM7d0JBQ1QsMkJBQTJCLHFCQUFxQjtxQkFDakQ7OEJBV0csT0FBTztzQkFEVixLQUFLO2dCQWlCRixRQUFRO3NCQURYLEtBQUs7Z0JBeUJGLFNBQVM7c0JBRFosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi90eXBlcy9mZWVsLWVkaXRvci5kLnRzXCIgLz5cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IEZlZWxFZGl0b3IsIHsgRmVlbERpYWxlY3QsIEZlZWxCdWlsdGluLCBGZWVsVmFyaWFibGUgfSBmcm9tICdAYnBtbi1pby9mZWVsLWVkaXRvcic7XHJcbmltcG9ydCB7IGdldERlZmF1bHRCdWlsdGlucyB9IGZyb20gJy4uL3V0aWxzL3BhcnNlQnVpbHRpbnMnO1xyXG5pbXBvcnQgeyBDb2RlRWRpdG9yQ29tcG9uZW50LCBjcmVhdGVWYWx1ZUFjY2Vzc29yUHJvdmlkZXIgfSBmcm9tICdAd2VtYWtlNHUvY29kZS1lZGl0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmZWVsLWVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZlZWwtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mZWVsLWVkaXRvci5jb21wb25lbnQuY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIGNyZWF0ZVZhbHVlQWNjZXNzb3JQcm92aWRlcihGZWVsRWRpdG9yQ29tcG9uZW50KVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZlZWxFZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBDb2RlRWRpdG9yQ29tcG9uZW50IHtcclxuXHJcbiAgLy8jcmVnaW9uIGRpYWxlY3RcclxuXHJcbiAgZ2V0IGRpYWxlY3QoKTogRmVlbERpYWxlY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RpYWxlY3Q7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBkaWFsZWN0KHZhbHVlOiBGZWVsRGlhbGVjdCkge1xyXG4gICAgaWYgKHRoaXMuX2RpYWxlY3QgPT09IHZhbHVlKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLl9kaWFsZWN0ID0gdmFsdWU7XHJcbiAgICB0aGlzLnJlZnJlc2hFZGl0b3IoKTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gYnVpbHRpbnNcclxuXHJcbiAgZ2V0IGJ1aWx0aW5zKCk6IEZlZWxCdWlsdGluW10gfCBudWxsIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9idWlsdGlucztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGJ1aWx0aW5zKHZhbHVlOiBGZWVsQnVpbHRpbltdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX2J1aWx0aW5zID09PSB2YWx1ZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5fYnVpbHRpbnMgPSB2YWx1ZTtcclxuICAgIHRoaXMucmVmcmVzaEVkaXRvcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCdWlsdGlucygpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX2J1aWx0aW5zKSkge1xyXG4gICAgICByZXR1cm4gWy4uLmdldERlZmF1bHRCdWlsdGlucygpLCAuLi50aGlzLl9idWlsdGluc107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2J1aWx0aW5zO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiB2YXJpYWJsZXNcclxuXHJcbiAgZ2V0IHZhcmlhYmxlcygpOiBGZWVsVmFyaWFibGVbXSB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlcztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZhcmlhYmxlcyh2YWx1ZTogRmVlbFZhcmlhYmxlW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl92YXJpYWJsZXMgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9mZWVsRWRpdG9yKSB7XHJcbiAgICAgIHRoaXMuX2ZlZWxFZGl0b3Iuc2V0VmFyaWFibGVzKHZhbHVlIHx8IFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJpdmF0ZSBNZW1iZXJzXHJcblxyXG4gIHByaXZhdGUgX2ZlZWxFZGl0b3I6IEZlZWxFZGl0b3IgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF9kaWFsZWN0OiBGZWVsRGlhbGVjdCA9IFwiZXhwcmVzc2lvblwiO1xyXG5cclxuICBwcml2YXRlIF9idWlsdGluczogRmVlbEJ1aWx0aW5bXSB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX3ZhcmlhYmxlczogRmVlbFZhcmlhYmxlW10gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICBvdmVycmlkZSBjcmVhdGVFZGl0b3JWaWV3KGNvbnRhaW5lcjogYW55KSB7XHJcblxyXG4gICAgdGhpcy5fZmVlbEVkaXRvciA9IG5ldyBGZWVsRWRpdG9yKHtcclxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXHJcbiAgICAgIGRpYWxlY3Q6IHRoaXMuZGlhbGVjdCxcclxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgIGJ1aWx0aW5zOiB0aGlzLmdldEJ1aWx0aW5zKCkgPz8gdW5kZWZpbmVkLFxyXG4gICAgICB2YXJpYWJsZXM6IHRoaXMuX3ZhcmlhYmxlcyA/PyB1bmRlZmluZWQsXHJcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZ2V0RXh0ZW5zaW9ucygpXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gKHRoaXMuX2ZlZWxFZGl0b3IgYXMgYW55KSAuX2NtRWRpdG9yO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPGRpdiAjZWRpdG9yQ29udGFpbmVyXHJcbiAgICAgY2xhc3M9XCJmZWVsLWVkaXRvci1jb250YWluZXJcIlxyXG4gICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcclxuICAgICBbbmdDbGFzc109XCJlbWJlZGRlZCA/ICdmZWVsLWVkaXRvci1lbWJlZGRlZCcgOiAnZmVlbC1lZGl0b3Itc3RhbmRhbG9uZSdcIlxyXG4gICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIm1pbkhlaWdodFwiXHJcbiAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCI+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,13 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, forwardRef, Component, ViewChild, Output, Input } from '@angular/core';
2
+ import { Component, Input } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
- import { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
5
+ import { ReactiveFormsModule } from '@angular/forms';
6
6
  import FeelEditor from '@bpmn-io/feel-editor';
7
- import { lineNumbers, EditorView, keymap } from '@codemirror/view';
8
- import { indentMore, indentLess, history, historyKeymap } from '@codemirror/commands';
9
- import * as state from '@codemirror/state';
10
7
  import { domify } from 'min-dom';
8
+ import { CodeEditorComponent, createValueAccessorProvider } from '@wemake4u/code-editor';
11
9
 
12
10
  var defaultBuiltins = [
13
11
  {
@@ -540,56 +538,8 @@ function getDefaultBuiltins() {
540
538
  }
541
539
 
542
540
  /// <reference path="../types/feel-editor.d.ts" />
543
- class FeelEditorComponent {
544
- editorContainerRef;
545
- change = new EventEmitter();
546
- keydown = new EventEmitter();
547
- lint = new EventEmitter();
548
- embedded = false;
549
- minHeight;
550
- maxHeight;
551
- get disabled() {
552
- return this._disabled;
553
- }
554
- set disabled(value) {
555
- if (this._disabled === value)
556
- return;
557
- this._disabled = value;
558
- this.refreshEditor();
559
- }
560
- get readonly() {
561
- return this._readonly;
562
- }
563
- set readonly(value) {
564
- if (this._readonly === value)
565
- return;
566
- this._readonly = value;
567
- this.refreshEditor();
568
- }
569
- get lineNumbers() {
570
- return this._lineNumbers;
571
- }
572
- set lineNumbers(value) {
573
- if (this._lineNumbers === value)
574
- return;
575
- this._lineNumbers = value;
576
- this.refreshEditor();
577
- }
578
- get placeholder() {
579
- return this._placeholder;
580
- }
581
- set placeholder(value) {
582
- this._placeholder = value;
583
- if (this._editor) {
584
- this._editor.setPlaceholder(value);
585
- }
586
- }
587
- get value() {
588
- return this._value;
589
- }
590
- set value(value) {
591
- this.writeValue(value);
592
- }
541
+ class FeelEditorComponent extends CodeEditorComponent {
542
+ //#region dialect
593
543
  get dialect() {
594
544
  return this._dialect;
595
545
  }
@@ -599,6 +549,8 @@ class FeelEditorComponent {
599
549
  this._dialect = value;
600
550
  this.refreshEditor();
601
551
  }
552
+ //#endregion
553
+ //#region builtins
602
554
  get builtins() {
603
555
  return this._builtins;
604
556
  }
@@ -608,151 +560,51 @@ class FeelEditorComponent {
608
560
  this._builtins = value;
609
561
  this.refreshEditor();
610
562
  }
563
+ getBuiltins() {
564
+ if (Array.isArray(this._builtins)) {
565
+ return [...getDefaultBuiltins(), ...this._builtins];
566
+ }
567
+ return this._builtins;
568
+ }
569
+ //#endregion
570
+ //#region variables
611
571
  get variables() {
612
572
  return this._variables;
613
573
  }
614
574
  set variables(value) {
615
575
  this._variables = value;
616
- if (this._editor) {
617
- this._editor.setVariables(value || []);
618
- }
619
- }
620
- ngAfterViewInit() {
621
- this.isViewInit = true;
622
- this.createEditor();
623
- }
624
- writeValue(value) {
625
- this._value = value || '';
626
- if (this._editor) {
627
- this._editor.setValue(this._value);
576
+ if (this._feelEditor) {
577
+ this._feelEditor.setVariables(value || []);
628
578
  }
629
579
  }
630
- registerOnChange(fn) {
631
- this.onChange = fn;
632
- }
633
- registerOnTouched(fn) {
634
- this.onTouched = fn;
635
- }
636
- setDisabledState(isDisabled) {
637
- this.disabled = isDisabled;
638
- }
580
+ //#endregion
639
581
  //#region Private Members
640
- isViewInit = false;
641
- _editor;
642
- _value = '';
643
- _readonly = false;
644
- _disabled = false;
645
- _lineNumbers = false;
646
- _placeholder = "";
582
+ _feelEditor;
647
583
  _dialect = "expression";
648
584
  _builtins;
649
585
  _variables;
650
- onChange = (_) => { };
651
- onTouched = () => { };
652
- createEditor() {
653
- if (!this.isViewInit || !this.editorContainerRef?.nativeElement)
654
- return;
655
- this._editor = new FeelEditor({
656
- container: this.editorContainerRef.nativeElement,
657
- placeholder: this._placeholder,
658
- readOnly: (this._readonly || this._disabled),
586
+ createEditorView(container) {
587
+ this._feelEditor = new FeelEditor({
588
+ container: container,
659
589
  dialect: this.dialect,
660
- value: this._value,
590
+ value: this.value,
661
591
  builtins: this.getBuiltins() ?? undefined,
662
592
  variables: this._variables ?? undefined,
663
- onChange: (value) => {
664
- this._value = value;
665
- this.onChange(value);
666
- this.change.emit(value);
667
- },
668
- onKeyDown: (event) => this.keydown.emit(event),
669
- onLint: (issues) => this.lint.emit(issues),
670
- extensions: [...(this._lineNumbers ? [lineNumbers()] : []), EditorView.lineWrapping],
593
+ extensions: this.getExtensions()
671
594
  });
672
- this.configureEditor(this._editor);
673
- this.editorContainerRef?.nativeElement.classList.toggle('disabled', this._disabled);
674
- }
675
- destroyEditor() {
676
- if (this._editor) {
677
- this._editor = undefined;
678
- this.editorContainerRef.nativeElement.innerHTML = '';
679
- }
595
+ return this._feelEditor._cmEditor;
680
596
  }
681
- refreshEditor() {
682
- this.destroyEditor();
683
- this.createEditor();
684
- }
685
- configureEditor(editor) {
686
- if (!editor._cmEditor)
687
- return;
688
- const customKeymap = keymap.of([
689
- {
690
- key: "Shift-+",
691
- run: indentMore
692
- },
693
- {
694
- key: "Shift--",
695
- run: indentLess
696
- }
697
- ]);
698
- editor._cmEditor.dispatch({
699
- effects: state.StateEffect.appendConfig.of([
700
- history(),
701
- keymap.of(historyKeymap),
702
- customKeymap
703
- ])
704
- });
705
- }
706
- getBuiltins() {
707
- if (Array.isArray(this._builtins)) {
708
- return [...getDefaultBuiltins(), ...this._builtins];
709
- }
710
- return this._builtins;
711
- }
712
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
713
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FeelEditorComponent, isStandalone: true, selector: "feel-editor", inputs: { embedded: "embedded", minHeight: "minHeight", maxHeight: "maxHeight", disabled: "disabled", readonly: "readonly", lineNumbers: "lineNumbers", placeholder: "placeholder", value: "value", dialect: "dialect", builtins: "builtins", variables: "variables" }, outputs: { change: "change", keydown: "keydown", lint: "lint" }, providers: [
714
- {
715
- provide: NG_VALUE_ACCESSOR,
716
- useExisting: forwardRef(() => FeelEditorComponent),
717
- multi: true
718
- }
719
- ], viewQueries: [{ propertyName: "editorContainerRef", first: true, predicate: ["editorContainer"], descendants: true, static: true }], ngImport: i0, template: "<div #editorContainer\r\n class=\"feel-editor-container\"\r\n (blur)=\"onTouched()\"\r\n [ngClass]=\"embedded ? 'feel-editor-embedded' : 'feel-editor-standalone'\"\r\n [style.min-height]=\"minHeight\"\r\n [style.max-height]=\"maxHeight\">\r\n</div>\r\n", styles: [".feel-editor-container{height:100%;overflow-y:auto}.feel-editor-standalone{border:1px solid #ccc;padding:5px}.feel-editor-embedded{border:0px;padding:0}.feel-editor-container.disabled{pointer-events:none;opacity:.6}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
597
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelEditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
598
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FeelEditorComponent, isStandalone: true, selector: "feel-editor", inputs: { dialect: "dialect", builtins: "builtins", variables: "variables" }, providers: [
599
+ createValueAccessorProvider(FeelEditorComponent)
600
+ ], usesInheritance: true, ngImport: i0, template: "<div #editorContainer\r\n class=\"feel-editor-container\"\r\n (blur)=\"onTouched()\"\r\n [ngClass]=\"embedded ? 'feel-editor-embedded' : 'feel-editor-standalone'\"\r\n [style.min-height]=\"minHeight\"\r\n [style.max-height]=\"maxHeight\">\r\n</div>\r\n", styles: [".feel-editor-container{height:100%;overflow-y:auto}.feel-editor-standalone{border:1px solid #ccc;padding:5px}.feel-editor-embedded{border:0px;padding:0}.feel-editor-container.disabled{pointer-events:none;opacity:.6}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
720
601
  }
721
602
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelEditorComponent, decorators: [{
722
603
  type: Component,
723
604
  args: [{ selector: 'feel-editor', standalone: true, imports: [CommonModule, ReactiveFormsModule], providers: [
724
- {
725
- provide: NG_VALUE_ACCESSOR,
726
- useExisting: forwardRef(() => FeelEditorComponent),
727
- multi: true
728
- }
605
+ createValueAccessorProvider(FeelEditorComponent)
729
606
  ], template: "<div #editorContainer\r\n class=\"feel-editor-container\"\r\n (blur)=\"onTouched()\"\r\n [ngClass]=\"embedded ? 'feel-editor-embedded' : 'feel-editor-standalone'\"\r\n [style.min-height]=\"minHeight\"\r\n [style.max-height]=\"maxHeight\">\r\n</div>\r\n", styles: [".feel-editor-container{height:100%;overflow-y:auto}.feel-editor-standalone{border:1px solid #ccc;padding:5px}.feel-editor-embedded{border:0px;padding:0}.feel-editor-container.disabled{pointer-events:none;opacity:.6}\n"] }]
730
- }], propDecorators: { editorContainerRef: [{
731
- type: ViewChild,
732
- args: ['editorContainer', { static: true }]
733
- }], change: [{
734
- type: Output
735
- }], keydown: [{
736
- type: Output
737
- }], lint: [{
738
- type: Output
739
- }], embedded: [{
740
- type: Input
741
- }], minHeight: [{
742
- type: Input
743
- }], maxHeight: [{
744
- type: Input
745
- }], disabled: [{
746
- type: Input
747
- }], readonly: [{
748
- type: Input
749
- }], lineNumbers: [{
750
- type: Input
751
- }], placeholder: [{
752
- type: Input
753
- }], value: [{
754
- type: Input
755
- }], dialect: [{
607
+ }], propDecorators: { dialect: [{
756
608
  type: Input
757
609
  }], builtins: [{
758
610
  type: Input
@@ -1 +1 @@
1
- {"version":3,"file":"wemake4u-feel-editor.mjs","sources":["../../../projects/feel-editor/src/lib/utils/parseBuiltins.ts","../../../projects/feel-editor/src/lib/components/feel-editor.component.ts","../../../projects/feel-editor/src/lib/components/feel-editor.component.html","../../../projects/feel-editor/src/public-api.ts","../../../projects/feel-editor/src/wemake4u-feel-editor.ts"],"sourcesContent":["import { domify } from 'min-dom';\r\nimport { FeelBuiltin } from '@bpmn-io/feel-editor';\r\nimport defaultBuiltins from '../assets/builtins.json';\r\n\r\ninterface BuiltinInfo {\r\n name: string;\r\n description: string;\r\n}\r\n\r\nexport function parseBuiltins(builtins: BuiltinInfo[]): FeelBuiltin[] {\r\n return builtins.map(parseBuiltin);\r\n}\r\n\r\nexport function parseBuiltin(builtin: BuiltinInfo): FeelBuiltin {\r\n\r\n const {\r\n name,\r\n description\r\n } = builtin;\r\n\r\n const match = name.match(/^([\\w\\s]+)\\((.*)\\)$/);\r\n const functionName = match ? match[1] : \"\";\r\n const functionArguments = match ? match[2]: \"\";\r\n\r\n const params = functionArguments ? functionArguments.split(', ').map((name: string) => ({ name })) : [];\r\n\r\n return {\r\n name: functionName,\r\n type: 'function',\r\n params,\r\n info: () => {\r\n return domify(`<div class=\"description\">${description}<div>`);\r\n },\r\n boost: 0\r\n };\r\n}\r\n\r\nexport function getDefaultBuiltins(): FeelBuiltin[] {\r\n return parseBuiltins(defaultBuiltins);\r\n}\r\n","/// <reference path=\"../types/feel-editor.d.ts\" />\r\n\r\nimport {\r\n Component, forwardRef, Input, Output, AfterViewInit, ViewChild\r\n , ElementRef, EventEmitter\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport FeelEditor, { FeelDialect, FeelBuiltin, FeelVariable } from '@bpmn-io/feel-editor';\r\nimport { lineNumbers, EditorView } from '@codemirror/view';\r\nimport { keymap } from '@codemirror/view';\r\nimport { indentLess, indentMore, history, historyKeymap } from '@codemirror/commands'\r\nimport * as state from '@codemirror/state';\r\nimport { getDefaultBuiltins } from '../utils/parseBuiltins';\r\n\r\n@Component({\r\n selector: 'feel-editor',\r\n templateUrl: './feel-editor.component.html',\r\n styleUrls: ['./feel-editor.component.css'],\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FeelEditorComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class FeelEditorComponent implements ControlValueAccessor, AfterViewInit {\r\n @ViewChild('editorContainer', { static: true }) editorContainerRef!: ElementRef;\r\n\r\n @Output() change = new EventEmitter<string>();\r\n @Output() keydown = new EventEmitter<KeyboardEvent>();\r\n @Output() lint = new EventEmitter<any[]>();\r\n\r\n @Input() embedded: boolean = false;\r\n @Input() minHeight?: string;\r\n @Input() maxHeight?: string;\r\n\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n\r\n @Input()\r\n set disabled(value: boolean) {\r\n if (this._disabled === value)\r\n return;\r\n this._disabled = value;\r\n this.refreshEditor();\r\n }\r\n\r\n get readonly(): boolean {\r\n return this._readonly;\r\n }\r\n\r\n @Input()\r\n set readonly(value: boolean) {\r\n if (this._readonly === value)\r\n return;\r\n this._readonly = value;\r\n this.refreshEditor();\r\n }\r\n\r\n get lineNumbers(): boolean {\r\n return this._lineNumbers;\r\n }\r\n\r\n @Input()\r\n set lineNumbers(value: boolean) {\r\n if (this._lineNumbers === value)\r\n return;\r\n this._lineNumbers = value;\r\n this.refreshEditor();\r\n }\r\n\r\n get placeholder(): string {\r\n return this._placeholder;\r\n }\r\n\r\n @Input()\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n if (this._editor) {\r\n this._editor.setPlaceholder(value);\r\n }\r\n }\r\n\r\n get value(): string {\r\n return this._value;\r\n }\r\n\r\n @Input()\r\n set value(value: string) {\r\n this.writeValue(value);\r\n }\r\n\r\n get dialect(): FeelDialect {\r\n return this._dialect;\r\n }\r\n\r\n @Input()\r\n set dialect(value: FeelDialect) {\r\n if (this._dialect === value)\r\n return;\r\n this._dialect = value;\r\n this.refreshEditor();\r\n }\r\n\r\n get builtins(): FeelBuiltin[] | null | undefined {\r\n return this._builtins;\r\n }\r\n\r\n @Input()\r\n set builtins(value: FeelBuiltin[] | null | undefined) {\r\n if (this._builtins === value)\r\n return; \r\n this._builtins = value;\r\n this.refreshEditor();\r\n }\r\n\r\n get variables(): FeelVariable[] | null | undefined {\r\n return this._variables;\r\n }\r\n\r\n @Input()\r\n set variables(value: FeelVariable[] | null | undefined) {\r\n this._variables = value;\r\n if (this._editor) {\r\n this._editor.setVariables(value || []);\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.isViewInit = true;\r\n this.createEditor(); \r\n }\r\n\r\n writeValue(value: string): void {\r\n this._value = value || '';\r\n if (this._editor) {\r\n this._editor.setValue(this._value);\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n //#region Private Members\r\n\r\n private isViewInit = false;\r\n\r\n private _editor?: FeelEditor;\r\n\r\n private _value = '';\r\n\r\n private _readonly: boolean = false;\r\n\r\n private _disabled: boolean = false;\r\n\r\n private _lineNumbers: boolean = false;\r\n\r\n private _placeholder: string = \"\";\r\n\r\n private _dialect: FeelDialect = \"expression\";\r\n\r\n private _builtins: FeelBuiltin[] | null | undefined;\r\n\r\n private _variables: FeelVariable[] | null | undefined;\r\n\r\n private onChange = (_: any) => { };\r\n\r\n public onTouched = () => { };\r\n\r\n private createEditor(): void {\r\n if (!this.isViewInit || !this.editorContainerRef?.nativeElement)\r\n return;\r\n\r\n this._editor = new FeelEditor({\r\n container: this.editorContainerRef.nativeElement,\r\n placeholder: this._placeholder,\r\n readOnly: (this._readonly || this._disabled),\r\n dialect: this.dialect,\r\n value: this._value,\r\n builtins: this.getBuiltins() ?? undefined,\r\n variables: this._variables ?? undefined,\r\n onChange: (value: string) => {\r\n this._value = value;\r\n this.onChange(value);\r\n this.change.emit(value);\r\n },\r\n onKeyDown: (event: KeyboardEvent) => this.keydown.emit(event),\r\n onLint: (issues: any[]) => this.lint.emit(issues),\r\n extensions: [...(this._lineNumbers ? [lineNumbers()] : []), EditorView.lineWrapping],\r\n });\r\n\r\n this.configureEditor(this._editor);\r\n\r\n this.editorContainerRef?.nativeElement.classList.toggle('disabled', this._disabled);\r\n }\r\n\r\n private destroyEditor(): void {\r\n if (this._editor) {\r\n this._editor = undefined;\r\n this.editorContainerRef.nativeElement.innerHTML = '';\r\n } \r\n }\r\n\r\n private refreshEditor(): void {\r\n this.destroyEditor();\r\n this.createEditor();\r\n }\r\n\r\n private configureEditor(editor: any) {\r\n\r\n if (!editor._cmEditor)\r\n return;\r\n\r\n const customKeymap = keymap.of([\r\n {\r\n key: \"Shift-+\",\r\n run: indentMore\r\n },\r\n {\r\n key: \"Shift--\",\r\n run: indentLess\r\n }\r\n ]);\r\n\r\n editor._cmEditor.dispatch({\r\n effects: state.StateEffect.appendConfig.of([\r\n history(),\r\n keymap.of(historyKeymap),\r\n customKeymap\r\n ])\r\n });\r\n }\r\n\r\n private getBuiltins()\r\n {\r\n if (Array.isArray(this._builtins)) {\r\n return [...getDefaultBuiltins(), ...this._builtins];\r\n }\r\n\r\n return this._builtins;\r\n }\r\n\r\n //#endregion\r\n}\r\n","<div #editorContainer\r\n class=\"feel-editor-container\"\r\n (blur)=\"onTouched()\"\r\n [ngClass]=\"embedded ? 'feel-editor-embedded' : 'feel-editor-standalone'\"\r\n [style.min-height]=\"minHeight\"\r\n [style.max-height]=\"maxHeight\">\r\n</div>\r\n","/*\r\n * Public API Surface of feel-editor\r\n */\r\n\r\nexport * from './lib/components/feel-editor.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wemake4u-feel-editor.mjs","sources":["../../../projects/feel-editor/src/lib/utils/parseBuiltins.ts","../../../projects/feel-editor/src/lib/components/feel-editor.component.ts","../../../projects/feel-editor/src/lib/components/feel-editor.component.html","../../../projects/feel-editor/src/public-api.ts","../../../projects/feel-editor/src/wemake4u-feel-editor.ts"],"sourcesContent":["import { domify } from 'min-dom';\r\nimport { FeelBuiltin } from '@bpmn-io/feel-editor';\r\nimport defaultBuiltins from '../assets/builtins.json';\r\n\r\ninterface BuiltinInfo {\r\n name: string;\r\n description: string;\r\n}\r\n\r\nexport function parseBuiltins(builtins: BuiltinInfo[]): FeelBuiltin[] {\r\n return builtins.map(parseBuiltin);\r\n}\r\n\r\nexport function parseBuiltin(builtin: BuiltinInfo): FeelBuiltin {\r\n\r\n const {\r\n name,\r\n description\r\n } = builtin;\r\n\r\n const match = name.match(/^([\\w\\s]+)\\((.*)\\)$/);\r\n const functionName = match ? match[1] : \"\";\r\n const functionArguments = match ? match[2]: \"\";\r\n\r\n const params = functionArguments ? functionArguments.split(', ').map((name: string) => ({ name })) : [];\r\n\r\n return {\r\n name: functionName,\r\n type: 'function',\r\n params,\r\n info: () => {\r\n return domify(`<div class=\"description\">${description}<div>`);\r\n },\r\n boost: 0\r\n };\r\n}\r\n\r\nexport function getDefaultBuiltins(): FeelBuiltin[] {\r\n return parseBuiltins(defaultBuiltins);\r\n}\r\n","/// <reference path=\"../types/feel-editor.d.ts\" />\r\n\r\nimport { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport FeelEditor, { FeelDialect, FeelBuiltin, FeelVariable } from '@bpmn-io/feel-editor';\r\nimport { getDefaultBuiltins } from '../utils/parseBuiltins';\r\nimport { CodeEditorComponent, createValueAccessorProvider } from '@wemake4u/code-editor';\r\n\r\n@Component({\r\n selector: 'feel-editor',\r\n templateUrl: './feel-editor.component.html',\r\n styleUrls: ['./feel-editor.component.css'],\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n providers: [\r\n createValueAccessorProvider(FeelEditorComponent)\r\n ]\r\n})\r\nexport class FeelEditorComponent extends CodeEditorComponent {\r\n\r\n //#region dialect\r\n\r\n get dialect(): FeelDialect {\r\n return this._dialect;\r\n }\r\n\r\n @Input()\r\n set dialect(value: FeelDialect) {\r\n if (this._dialect === value)\r\n return;\r\n this._dialect = value;\r\n this.refreshEditor();\r\n }\r\n\r\n //#endregion\r\n\r\n //#region builtins\r\n\r\n get builtins(): FeelBuiltin[] | null | undefined {\r\n return this._builtins;\r\n }\r\n\r\n @Input()\r\n set builtins(value: FeelBuiltin[] | null | undefined) {\r\n if (this._builtins === value)\r\n return;\r\n this._builtins = value;\r\n this.refreshEditor();\r\n }\r\n\r\n private getBuiltins() {\r\n if (Array.isArray(this._builtins)) {\r\n return [...getDefaultBuiltins(), ...this._builtins];\r\n }\r\n\r\n return this._builtins;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region variables\r\n\r\n get variables(): FeelVariable[] | null | undefined {\r\n return this._variables;\r\n }\r\n\r\n @Input()\r\n set variables(value: FeelVariable[] | null | undefined) {\r\n this._variables = value;\r\n if (this._feelEditor) {\r\n this._feelEditor.setVariables(value || []);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Private Members\r\n\r\n private _feelEditor: FeelEditor | null | undefined;\r\n\r\n private _dialect: FeelDialect = \"expression\";\r\n\r\n private _builtins: FeelBuiltin[] | null | undefined;\r\n\r\n private _variables: FeelVariable[] | null | undefined;\r\n\r\n override createEditorView(container: any) {\r\n\r\n this._feelEditor = new FeelEditor({\r\n container: container,\r\n dialect: this.dialect,\r\n value: this.value,\r\n builtins: this.getBuiltins() ?? undefined,\r\n variables: this._variables ?? undefined,\r\n extensions: this.getExtensions()\r\n });\r\n\r\n return (this._feelEditor as any) ._cmEditor;\r\n }\r\n\r\n //#endregion\r\n}\r\n","<div #editorContainer\r\n class=\"feel-editor-container\"\r\n (blur)=\"onTouched()\"\r\n [ngClass]=\"embedded ? 'feel-editor-embedded' : 'feel-editor-standalone'\"\r\n [style.min-height]=\"minHeight\"\r\n [style.max-height]=\"maxHeight\">\r\n</div>\r\n","/*\r\n * Public API Surface of feel-editor\r\n */\r\n\r\nexport * from './lib/components/feel-editor.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASM,SAAU,aAAa,CAAC,QAAuB,EAAA;AACnD,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC;AAEK,SAAU,YAAY,CAAC,OAAoB,EAAA;AAE/C,IAAA,MAAM,EACJ,IAAI,EACJ,WAAW,EACZ,GAAG,OAAO,CAAC;IAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAChD,IAAA,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC3C,IAAA,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAE,EAAE,CAAC;AAE/C,IAAA,MAAM,MAAM,GAAG,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAY,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IAExG,OAAO;AACL,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE,UAAU;QAChB,MAAM;QACN,IAAI,EAAE,MAAK;AACT,YAAA,OAAO,MAAM,CAAC,CAAA,yBAAA,EAA4B,WAAW,CAAA,KAAA,CAAO,CAAC,CAAC;SAC/D;AACD,QAAA,KAAK,EAAE,CAAC;KACT,CAAC;AACJ,CAAC;SAEe,kBAAkB,GAAA;AAChC,IAAA,OAAO,aAAa,CAAC,eAAe,CAAC,CAAC;AACxC;;ACvCA;AAmBM,MAAO,mBAAoB,SAAQ,mBAAmB,CAAA;;AAI1D,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IACI,OAAO,CAAC,KAAkB,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;YACzB,OAAO;AACT,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;;;AAMD,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IACI,QAAQ,CAAC,KAAuC,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;YAC1B,OAAO;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,WAAW,GAAA;QACjB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACjC,OAAO,CAAC,GAAG,kBAAkB,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;SACrD;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;;;AAMD,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAED,IACI,SAAS,CAAC,KAAwC,EAAA;AACpD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;SAC5C;KACF;;;AAMO,IAAA,WAAW,CAAgC;IAE3C,QAAQ,GAAgB,YAAY,CAAC;AAErC,IAAA,SAAS,CAAmC;AAE5C,IAAA,UAAU,CAAoC;AAE7C,IAAA,gBAAgB,CAAC,SAAc,EAAA;AAEtC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,CAAC;AAChC,YAAA,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,SAAS;AACzC,YAAA,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,SAAS;AACvC,YAAA,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;AACjC,SAAA,CAAC,CAAC;AAEH,QAAA,OAAQ,IAAI,CAAC,WAAmB,CAAE,SAAS,CAAC;KAC7C;wGAhFU,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAJnB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAAA;YACT,2BAA2B,CAAC,mBAAmB,CAAC;AACjD,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBH,kRAOA,EAAA,MAAA,EAAA,CAAA,2NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDOY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKhC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,SAAS;+BACE,aAAa,EAAA,UAAA,EAGX,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,mBAAmB,CAAC,EACjC,SAAA,EAAA;AACT,wBAAA,2BAA2B,CAAqB,mBAAA,CAAA;AACjD,qBAAA,EAAA,QAAA,EAAA,kRAAA,EAAA,MAAA,EAAA,CAAA,2NAAA,CAAA,EAAA,CAAA;8BAWG,OAAO,EAAA,CAAA;sBADV,KAAK;gBAiBF,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAyBF,SAAS,EAAA,CAAA;sBADZ,KAAK;;;AEnER;;AAEG;;ACFH;;AAEG;;;;"}
@@ -1,53 +1,19 @@
1
- import { AfterViewInit, ElementRef, EventEmitter } from '@angular/core';
2
- import { ControlValueAccessor } from '@angular/forms';
3
1
  import { FeelDialect, FeelBuiltin, FeelVariable } from '@bpmn-io/feel-editor';
2
+ import { CodeEditorComponent } from '@wemake4u/code-editor';
4
3
  import * as i0 from "@angular/core";
5
- export declare class FeelEditorComponent implements ControlValueAccessor, AfterViewInit {
6
- editorContainerRef: ElementRef;
7
- change: EventEmitter<string>;
8
- keydown: EventEmitter<KeyboardEvent>;
9
- lint: EventEmitter<any[]>;
10
- embedded: boolean;
11
- minHeight?: string;
12
- maxHeight?: string;
13
- get disabled(): boolean;
14
- set disabled(value: boolean);
15
- get readonly(): boolean;
16
- set readonly(value: boolean);
17
- get lineNumbers(): boolean;
18
- set lineNumbers(value: boolean);
19
- get placeholder(): string;
20
- set placeholder(value: string);
21
- get value(): string;
22
- set value(value: string);
4
+ export declare class FeelEditorComponent extends CodeEditorComponent {
23
5
  get dialect(): FeelDialect;
24
6
  set dialect(value: FeelDialect);
25
7
  get builtins(): FeelBuiltin[] | null | undefined;
26
8
  set builtins(value: FeelBuiltin[] | null | undefined);
9
+ private getBuiltins;
27
10
  get variables(): FeelVariable[] | null | undefined;
28
11
  set variables(value: FeelVariable[] | null | undefined);
29
- ngAfterViewInit(): void;
30
- writeValue(value: string): void;
31
- registerOnChange(fn: any): void;
32
- registerOnTouched(fn: any): void;
33
- setDisabledState(isDisabled: boolean): void;
34
- private isViewInit;
35
- private _editor?;
36
- private _value;
37
- private _readonly;
38
- private _disabled;
39
- private _lineNumbers;
40
- private _placeholder;
12
+ private _feelEditor;
41
13
  private _dialect;
42
14
  private _builtins;
43
15
  private _variables;
44
- private onChange;
45
- onTouched: () => void;
46
- private createEditor;
47
- private destroyEditor;
48
- private refreshEditor;
49
- private configureEditor;
50
- private getBuiltins;
16
+ createEditorView(container: any): any;
51
17
  static ɵfac: i0.ɵɵFactoryDeclaration<FeelEditorComponent, never>;
52
- static ɵcmp: i0.ɵɵComponentDeclaration<FeelEditorComponent, "feel-editor", never, { "embedded": { "alias": "embedded"; "required": false; }; "minHeight": { "alias": "minHeight"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "lineNumbers": { "alias": "lineNumbers"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "value": { "alias": "value"; "required": false; }; "dialect": { "alias": "dialect"; "required": false; }; "builtins": { "alias": "builtins"; "required": false; }; "variables": { "alias": "variables"; "required": false; }; }, { "change": "change"; "keydown": "keydown"; "lint": "lint"; }, never, never, true, never>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<FeelEditorComponent, "feel-editor", never, { "dialect": { "alias": "dialect"; "required": false; }; "builtins": { "alias": "builtins"; "required": false; }; "variables": { "alias": "variables"; "required": false; }; }, {}, never, never, true, never>;
53
19
  }
package/package.json CHANGED
@@ -1,9 +1,11 @@
1
1
  {
2
2
  "name": "@wemake4u/feel-editor",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
+ "license": "MIT",
4
5
  "peerDependencies": {
5
6
  "@angular/common": "^18.2.0",
6
- "@angular/core": "^18.2.0"
7
+ "@angular/core": "^18.2.0",
8
+ "@wemake4u/code-editor": "^1.0.1"
7
9
  },
8
10
  "dependencies": {
9
11
  "tslib": "^2.3.0",