@apipass/inputs 1.0.148 → 1.0.149

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.
@@ -11,32 +11,30 @@ import * as i9 from "./input-file/input-file.component";
11
11
  import * as i10 from "./custom-select/custom-select.component";
12
12
  import * as i11 from "./select-interpolation/select-interpolation.component";
13
13
  import * as i12 from "./field/field.component";
14
- import * as i13 from "./ace-editor/component";
15
- import * as i14 from "./ace-editor/directive";
16
- import * as i15 from "./debounce-model-directive/debouceInput.directive";
17
- import * as i16 from "./input-date-time-interval/input-date-time-interval.component";
18
- import * as i17 from "./input-key-value/key-value-input.component";
19
- import * as i18 from "@angular/router";
20
- import * as i19 from "@angular/common";
21
- import * as i20 from "@angular/forms";
22
- import * as i21 from "@angular/material/form-field";
23
- import * as i22 from "@angular/material/input";
24
- import * as i23 from "@angular/material/select";
25
- import * as i24 from "@ng-select/ng-select";
26
- import * as i25 from "@apipass/pipes";
27
- import * as i26 from "@angular/material/icon";
28
- import * as i27 from "@apipass/icons";
29
- import * as i28 from "@angular/material/tooltip";
30
- import * as i29 from "ngx-drag-drop";
31
- import * as i30 from "@apipass/buttons";
32
- import * as i31 from "@angular/cdk/overlay";
33
- import * as i32 from "@angular/material/card";
34
- import * as i33 from "@angular/material/datepicker";
35
- import * as i34 from "@angular/material/core";
36
- import * as i35 from "ngx-scrollbar";
37
- import * as i36 from "ngx-mask";
14
+ import * as i13 from "./debounce-model-directive/debouceInput.directive";
15
+ import * as i14 from "./input-date-time-interval/input-date-time-interval.component";
16
+ import * as i15 from "./input-key-value/key-value-input.component";
17
+ import * as i16 from "@angular/router";
18
+ import * as i17 from "@angular/common";
19
+ import * as i18 from "@angular/forms";
20
+ import * as i19 from "@angular/material/form-field";
21
+ import * as i20 from "@angular/material/input";
22
+ import * as i21 from "@angular/material/select";
23
+ import * as i22 from "@ng-select/ng-select";
24
+ import * as i23 from "@apipass/pipes";
25
+ import * as i24 from "@angular/material/icon";
26
+ import * as i25 from "@apipass/icons";
27
+ import * as i26 from "@angular/material/tooltip";
28
+ import * as i27 from "ngx-drag-drop";
29
+ import * as i28 from "@apipass/buttons";
30
+ import * as i29 from "@angular/cdk/overlay";
31
+ import * as i30 from "@angular/material/card";
32
+ import * as i31 from "@angular/material/datepicker";
33
+ import * as i32 from "@angular/material/core";
34
+ import * as i33 from "ngx-scrollbar";
35
+ import * as i34 from "ngx-mask";
38
36
  export declare class InputsModule {
39
37
  static ɵfac: i0.ɵɵFactoryDeclaration<InputsModule, never>;
40
- static ɵmod: i0.ɵɵNgModuleDeclaration<InputsModule, [typeof i1.MatSelectInfiniteScrollDirective, typeof i2.SelectBoxComponent, typeof i3.SelectEnumComponent, typeof i4.InputTextComponent, typeof i5.InputNumberComponent, typeof i6.InputBooleanComponent, typeof i7.InputAvatarComponent, typeof i8.InputImageComponent, typeof i9.InputFileComponent, typeof i10.CustomSelectComponent, typeof i11.SelectInterpolationComponent, typeof i12.FieldComponent, typeof i13.AceEditorComponent, typeof i14.AceEditorDirective, typeof i15.DebouceInputDirective, typeof i16.InputDateTimeIntervalComponent, typeof i17.KeyValueInputComponent], [typeof i18.RouterModule, typeof i19.CommonModule, typeof i20.FormsModule, typeof i21.MatFormFieldModule, typeof i22.MatInputModule, typeof i23.MatSelectModule, typeof i24.NgSelectModule, typeof i25.PipeModule, typeof i26.MatIconModule, typeof i27.IconsModule, typeof i28.MatTooltipModule, typeof i29.DndModule, typeof i30.ButtonsModule, typeof i31.OverlayModule, typeof i32.MatCardModule, typeof i33.MatDatepickerModule, typeof i34.MatNativeDateModule, typeof i35.NgScrollbarModule, typeof i36.NgxMaskDirective, typeof i36.NgxMaskPipe, typeof i20.FormsModule], [typeof i2.SelectBoxComponent, typeof i3.SelectEnumComponent, typeof i4.InputTextComponent, typeof i5.InputNumberComponent, typeof i6.InputBooleanComponent, typeof i7.InputAvatarComponent, typeof i8.InputImageComponent, typeof i9.InputFileComponent, typeof i10.CustomSelectComponent, typeof i11.SelectInterpolationComponent, typeof i12.FieldComponent, typeof i13.AceEditorComponent, typeof i14.AceEditorDirective, typeof i15.DebouceInputDirective, typeof i16.InputDateTimeIntervalComponent, typeof i36.NgxMaskDirective, typeof i36.NgxMaskPipe, typeof i17.KeyValueInputComponent]>;
38
+ static ɵmod: i0.ɵɵNgModuleDeclaration<InputsModule, [typeof i1.MatSelectInfiniteScrollDirective, typeof i2.SelectBoxComponent, typeof i3.SelectEnumComponent, typeof i4.InputTextComponent, typeof i5.InputNumberComponent, typeof i6.InputBooleanComponent, typeof i7.InputAvatarComponent, typeof i8.InputImageComponent, typeof i9.InputFileComponent, typeof i10.CustomSelectComponent, typeof i11.SelectInterpolationComponent, typeof i12.FieldComponent, typeof i13.DebouceInputDirective, typeof i14.InputDateTimeIntervalComponent, typeof i15.KeyValueInputComponent], [typeof i16.RouterModule, typeof i17.CommonModule, typeof i18.FormsModule, typeof i19.MatFormFieldModule, typeof i20.MatInputModule, typeof i21.MatSelectModule, typeof i22.NgSelectModule, typeof i23.PipeModule, typeof i24.MatIconModule, typeof i25.IconsModule, typeof i26.MatTooltipModule, typeof i27.DndModule, typeof i28.ButtonsModule, typeof i29.OverlayModule, typeof i30.MatCardModule, typeof i31.MatDatepickerModule, typeof i32.MatNativeDateModule, typeof i33.NgScrollbarModule, typeof i34.NgxMaskDirective, typeof i34.NgxMaskPipe, typeof i18.FormsModule], [typeof i2.SelectBoxComponent, typeof i3.SelectEnumComponent, typeof i4.InputTextComponent, typeof i5.InputNumberComponent, typeof i6.InputBooleanComponent, typeof i7.InputAvatarComponent, typeof i8.InputImageComponent, typeof i9.InputFileComponent, typeof i10.CustomSelectComponent, typeof i11.SelectInterpolationComponent, typeof i12.FieldComponent, typeof i13.DebouceInputDirective, typeof i14.InputDateTimeIntervalComponent, typeof i34.NgxMaskDirective, typeof i34.NgxMaskPipe, typeof i15.KeyValueInputComponent]>;
41
39
  static ɵinj: i0.ɵɵInjectorDeclaration<InputsModule>;
42
40
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apipass/inputs",
3
- "version": "1.0.148",
3
+ "version": "1.0.149",
4
4
  "peerDependencies": {
5
5
  "@angular/animations": "16.0.2",
6
6
  "@angular/cdk": "16.0.1",
@@ -19,7 +19,6 @@
19
19
  "@ng-select/ng-select": "11.0.0",
20
20
  "@ngx-translate/core": "15.0.0",
21
21
  "@ngx-translate/http-loader": "8.0.0",
22
- "ace-builds": "1.4.14",
23
22
  "brace": "^0.11.1",
24
23
  "jquery": "^3.5.1",
25
24
  "lodash": "^4.17.14",
package/public-api.d.ts CHANGED
@@ -5,8 +5,6 @@ export * from './inputs.module';
5
5
  export * from './value-acessor-base';
6
6
  export * from './debounce-model-directive/debouceInput.directive';
7
7
  export * from './field/field.component';
8
- export * from './ace-editor/directive';
9
- export * from './ace-editor/component';
10
8
  export * from './select-box/select-box.component';
11
9
  export * from './select-enum/select-enum.component';
12
10
  export * from './select-interpolation/select-interpolation.component';
@@ -1,57 +0,0 @@
1
- import { ElementRef, EventEmitter, NgZone, OnDestroy, OnInit } from '@angular/core';
2
- import { ControlValueAccessor } from '@angular/forms';
3
- import 'brace';
4
- import 'brace/theme/monokai';
5
- import { Ace } from 'ace-builds';
6
- import Completion = Ace.Completion;
7
- import * as i0 from "@angular/core";
8
- export declare class AceEditorComponent implements ControlValueAccessor, OnInit, OnDestroy {
9
- private readonly zone;
10
- textChanged: EventEmitter<any>;
11
- textChange: EventEmitter<any>;
12
- style: any;
13
- _options: any;
14
- _readOnly: false;
15
- _theme: string;
16
- _mode: string;
17
- _autoUpdateContent: boolean;
18
- _editor: any;
19
- _durationBeforeCallback: number;
20
- _text: string;
21
- oldText: any;
22
- timeoutSaving: any;
23
- private _customCompletions;
24
- constructor(elementRef: ElementRef, zone: NgZone);
25
- ngOnInit(): void;
26
- ngOnDestroy(): void;
27
- init(): void;
28
- private createCustomCompletions;
29
- set customCompletions(customCompletions: Completion[]);
30
- initEvents(): void;
31
- updateText(): void;
32
- set options(options: any);
33
- setOptions(options: any): void;
34
- set readOnly(readOnly: any);
35
- setReadOnly(readOnly: any): void;
36
- set theme(theme: any);
37
- setTheme(theme: any): void;
38
- set mode(mode: any);
39
- setMode(mode: any): void;
40
- get value(): string;
41
- set value(value: string);
42
- writeValue(value: any): void;
43
- private _onChange;
44
- registerOnChange(fn: any): void;
45
- private _onTouched;
46
- registerOnTouched(fn: any): void;
47
- get text(): string;
48
- set text(text: string);
49
- setText(text: any): void;
50
- set autoUpdateContent(status: any);
51
- setAutoUpdateContent(status: any): void;
52
- set durationBeforeCallback(num: number);
53
- setDurationBeforeCallback(num: number): void;
54
- getEditor(): any;
55
- static ɵfac: i0.ɵɵFactoryDeclaration<AceEditorComponent, never>;
56
- static ɵcmp: i0.ɵɵComponentDeclaration<AceEditorComponent, "ace-editor", never, { "style": { "alias": "style"; "required": false; }; "options": { "alias": "options"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "value": { "alias": "value"; "required": false; }; "text": { "alias": "text"; "required": false; }; "autoUpdateContent": { "alias": "autoUpdateContent"; "required": false; }; "durationBeforeCallback": { "alias": "durationBeforeCallback"; "required": false; }; }, { "textChanged": "textChanged"; "textChange": "textChange"; }, never, never, false, never>;
57
- }
@@ -1,39 +0,0 @@
1
- import { ElementRef, EventEmitter, NgZone, OnDestroy, OnInit } from '@angular/core';
2
- import 'brace';
3
- import 'brace/theme/monokai';
4
- import * as i0 from "@angular/core";
5
- export declare class AceEditorDirective implements OnInit, OnDestroy {
6
- private readonly zone;
7
- textChanged: EventEmitter<any>;
8
- textChange: EventEmitter<any>;
9
- _options: any;
10
- _readOnly: boolean;
11
- _theme: string;
12
- _mode: string;
13
- _autoUpdateContent: boolean;
14
- _durationBeforeCallback: number;
15
- _text: string;
16
- editor: any;
17
- oldText: any;
18
- timeoutSaving: any;
19
- constructor(elementRef: ElementRef, zone: NgZone);
20
- ngOnInit(): void;
21
- ngOnDestroy(): void;
22
- init(): void;
23
- initEvents(): void;
24
- updateText(): void;
25
- set options(options: any);
26
- set readOnly(readOnly: any);
27
- set theme(theme: any);
28
- set mode(mode: any);
29
- setMode(mode: any): void;
30
- get text(): string;
31
- set text(text: string);
32
- setText(text: any): void;
33
- set autoUpdateContent(status: any);
34
- set durationBeforeCallback(num: number);
35
- setDurationBeforeCallback(num: number): void;
36
- get aceEditor(): any;
37
- static ɵfac: i0.ɵɵFactoryDeclaration<AceEditorDirective, never>;
38
- static ɵdir: i0.ɵɵDirectiveDeclaration<AceEditorDirective, "[ace-editor]", never, { "options": { "alias": "options"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "text": { "alias": "text"; "required": false; }; "autoUpdateContent": { "alias": "autoUpdateContent"; "required": false; }; "durationBeforeCallback": { "alias": "durationBeforeCallback"; "required": false; }; }, { "textChanged": "textChanged"; "textChange": "textChange"; }, never, never, false, never>;
39
- }
@@ -1,217 +0,0 @@
1
- import { Component, ElementRef, EventEmitter, forwardRef, Input, NgZone, Output } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import 'brace';
4
- import 'brace/theme/monokai';
5
- import * as i0 from "@angular/core";
6
- class AceEditorComponent {
7
- zone;
8
- textChanged = new EventEmitter();
9
- textChange = new EventEmitter();
10
- style = {};
11
- _options = {};
12
- _readOnly = false;
13
- _theme = 'monokai';
14
- _mode = 'html';
15
- _autoUpdateContent = true;
16
- _editor;
17
- _durationBeforeCallback = 0;
18
- _text = '';
19
- oldText;
20
- timeoutSaving;
21
- _customCompletions = [];
22
- constructor(elementRef, zone) {
23
- this.zone = zone;
24
- const el = elementRef.nativeElement;
25
- this.zone.runOutsideAngular(() => {
26
- this._editor = ace.edit(el);
27
- });
28
- this._editor.$blockScrolling = Infinity;
29
- }
30
- ngOnInit() {
31
- this.init();
32
- this.initEvents();
33
- }
34
- ngOnDestroy() {
35
- this._editor.destroy();
36
- }
37
- init() {
38
- this._editor.setKeyboardHandler('ace/keyboard/vscode');
39
- this.setOptions({
40
- enableBasicAutocompletion: true,
41
- autoScrollEditorIntoView: true,
42
- enableLiveAutocompletion: true
43
- });
44
- this.setTheme(this._theme);
45
- this.setMode(this._mode);
46
- this.setReadOnly(this._readOnly);
47
- this.createCustomCompletions(this._customCompletions);
48
- }
49
- createCustomCompletions(customCompletions) {
50
- this._editor.completers.push({
51
- getCompletions: function (editor, session, pos, prefix, callback) {
52
- callback(null, customCompletions);
53
- }
54
- });
55
- }
56
- set customCompletions(customCompletions) {
57
- this._customCompletions = customCompletions;
58
- }
59
- initEvents() {
60
- this._editor.on('change', () => {
61
- this.updateText();
62
- });
63
- this._editor.on('paste', () => {
64
- this.updateText();
65
- });
66
- }
67
- updateText() {
68
- const newVal = this._editor.getValue();
69
- if (newVal === this.oldText) {
70
- return;
71
- }
72
- if (!this._durationBeforeCallback) {
73
- this._text = newVal;
74
- this.zone.run(() => {
75
- this.textChange.emit(newVal);
76
- this.textChanged.emit(newVal);
77
- });
78
- this._onChange(newVal);
79
- }
80
- else {
81
- if (this.timeoutSaving) {
82
- clearTimeout(this.timeoutSaving);
83
- }
84
- this.timeoutSaving = setTimeout(() => {
85
- this._text = newVal;
86
- this.zone.run(() => {
87
- this.textChange.emit(newVal);
88
- this.textChanged.emit(newVal);
89
- });
90
- this.timeoutSaving = null;
91
- }, this._durationBeforeCallback);
92
- }
93
- this.oldText = newVal;
94
- }
95
- set options(options) {
96
- this.setOptions(options);
97
- }
98
- setOptions(options) {
99
- this._options = options;
100
- this._editor.setOptions(options || {});
101
- }
102
- set readOnly(readOnly) {
103
- this.setReadOnly(readOnly);
104
- }
105
- setReadOnly(readOnly) {
106
- this._readOnly = readOnly;
107
- this._editor.setReadOnly(readOnly);
108
- }
109
- set theme(theme) {
110
- this.setTheme(theme);
111
- }
112
- setTheme(theme) {
113
- this._theme = theme;
114
- this._editor.setTheme(`ace/theme/${theme}`);
115
- }
116
- set mode(mode) {
117
- this.setMode(mode);
118
- }
119
- setMode(mode) {
120
- this._mode = mode;
121
- if (typeof this._mode === 'object') {
122
- this._editor.getSession().setMode(this._mode);
123
- }
124
- else {
125
- this._editor.getSession().setMode(`ace/mode/${this._mode}`);
126
- }
127
- }
128
- get value() {
129
- return this.text;
130
- }
131
- set value(value) {
132
- this.setText(value);
133
- }
134
- writeValue(value) {
135
- this.setText(value);
136
- }
137
- _onChange = (_) => {
138
- };
139
- registerOnChange(fn) {
140
- this._onChange = fn;
141
- }
142
- _onTouched = () => {
143
- };
144
- registerOnTouched(fn) {
145
- this._onTouched = fn;
146
- }
147
- get text() {
148
- return this._text;
149
- }
150
- set text(text) {
151
- this.setText(text);
152
- }
153
- setText(text) {
154
- if (text === null || text === undefined) {
155
- text = '';
156
- }
157
- if (this._text !== text && this._autoUpdateContent) {
158
- this._text = text;
159
- this._editor.setValue(text);
160
- this._onChange(text);
161
- this._editor.clearSelection();
162
- }
163
- }
164
- set autoUpdateContent(status) {
165
- this.setAutoUpdateContent(status);
166
- }
167
- setAutoUpdateContent(status) {
168
- this._autoUpdateContent = status;
169
- }
170
- set durationBeforeCallback(num) {
171
- this.setDurationBeforeCallback(num);
172
- }
173
- setDurationBeforeCallback(num) {
174
- this._durationBeforeCallback = num;
175
- }
176
- getEditor() {
177
- return this._editor;
178
- }
179
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: AceEditorComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
180
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: AceEditorComponent, selector: "ace-editor", inputs: { style: "style", options: "options", readOnly: "readOnly", theme: "theme", mode: "mode", value: "value", text: "text", autoUpdateContent: "autoUpdateContent", durationBeforeCallback: "durationBeforeCallback" }, outputs: { textChanged: "textChanged", textChange: "textChange" }, providers: [{
181
- provide: NG_VALUE_ACCESSOR,
182
- useExisting: forwardRef(() => AceEditorComponent),
183
- multi: true
184
- }], ngImport: i0, template: '', isInline: true, styles: [":host{display:block;width:100%}\n"] });
185
- }
186
- export { AceEditorComponent };
187
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: AceEditorComponent, decorators: [{
188
- type: Component,
189
- args: [{ selector: 'ace-editor', template: '', providers: [{
190
- provide: NG_VALUE_ACCESSOR,
191
- useExisting: forwardRef(() => AceEditorComponent),
192
- multi: true
193
- }], styles: [":host{display:block;width:100%}\n"] }]
194
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { textChanged: [{
195
- type: Output
196
- }], textChange: [{
197
- type: Output
198
- }], style: [{
199
- type: Input
200
- }], options: [{
201
- type: Input
202
- }], readOnly: [{
203
- type: Input
204
- }], theme: [{
205
- type: Input
206
- }], mode: [{
207
- type: Input
208
- }], value: [{
209
- type: Input
210
- }], text: [{
211
- type: Input
212
- }], autoUpdateContent: [{
213
- type: Input
214
- }], durationBeforeCallback: [{
215
- type: Input
216
- }] } });
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5wdXRzL3NyYy9hY2UtZWRpdG9yL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBR04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4RSxPQUFPLE9BQU8sQ0FBQTtBQUNkLE9BQU8scUJBQXFCLENBQUE7O0FBTTVCLE1BVWEsa0JBQWtCO0lBb0J5QjtJQWxCNUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7SUFDaEMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7SUFDaEMsS0FBSyxHQUFRLEVBQUUsQ0FBQTtJQUV4QixRQUFRLEdBQVEsRUFBRSxDQUFBO0lBQ2xCLFNBQVMsR0FBVSxLQUFLLENBQUE7SUFDeEIsTUFBTSxHQUFHLFNBQVMsQ0FBQTtJQUNsQixLQUFLLEdBQUcsTUFBTSxDQUFBO0lBQ2Qsa0JBQWtCLEdBQUcsSUFBSSxDQUFBO0lBQ3pCLE9BQU8sQ0FBSztJQUNaLHVCQUF1QixHQUFHLENBQUMsQ0FBQTtJQUMzQixLQUFLLEdBQUcsRUFBRSxDQUFBO0lBRVYsT0FBTyxDQUFLO0lBQ1osYUFBYSxDQUFLO0lBRVYsa0JBQWtCLEdBQWlCLEVBQUUsQ0FBQTtJQUU3QyxZQUFhLFVBQXNCLEVBQW1CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ2hFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUE7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxD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RUFBRSxhQUVELENBQUM7NEJBQ1YsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUM7NEJBQ2pELEtBQUssRUFBRSxJQUFJO3lCQUNaLENBQUM7c0hBSVEsV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNFLEtBQUs7c0JBQWIsS0FBSztnQkFnR08sT0FBTztzQkFBbkIsS0FBSztnQkFTTyxRQUFRO3NCQUFwQixLQUFLO2dCQVNPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBU08sSUFBSTtzQkFBaEIsS0FBSztnQkFrQkYsS0FBSztzQkFEUixLQUFLO2dCQTRCRixJQUFJO3NCQURQLEtBQUs7Z0JBaUJPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFRTyxzQkFBc0I7c0JBQWxDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgJ2JyYWNlJ1xuaW1wb3J0ICdicmFjZS90aGVtZS9tb25va2FpJ1xuaW1wb3J0IHsgQWNlIH0gZnJvbSAnYWNlLWJ1aWxkcyc7XG5pbXBvcnQgQ29tcGxldGlvbiA9IEFjZS5Db21wbGV0aW9uO1xuXG5kZWNsYXJlIGxldCBhY2U6IGFueVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2UtZWRpdG9yJyxcbiAgdGVtcGxhdGU6ICcnLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7IH0nXSxcbiAgcHJvdmlkZXJzOiBbe1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFjZUVkaXRvckNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfV1cbn0pXG5leHBvcnQgY2xhc3MgQWNlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAT3V0cHV0KCkgdGV4dENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHRleHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQElucHV0KCkgc3R5bGU6IGFueSA9IHt9XG5cbiAgX29wdGlvbnM6IGFueSA9IHt9XG4gIF9yZWFkT25seTogZmFsc2UgPSBmYWxzZVxuICBfdGhlbWUgPSAnbW9ub2thaSdcbiAgX21vZGUgPSAnaHRtbCdcbiAgX2F1dG9VcGRhdGVDb250ZW50ID0gdHJ1ZVxuICBfZWRpdG9yOiBhbnlcbiAgX2R1cmF0aW9uQmVmb3JlQ2FsbGJhY2sgPSAwXG4gIF90ZXh0ID0gJydcblxuICBvbGRUZXh0OiBhbnlcbiAgdGltZW91dFNhdmluZzogYW55XG5cbiAgcHJpdmF0ZSBfY3VzdG9tQ29tcGxldGlvbnM6IENvbXBsZXRpb25bXSA9IFtdXG5cbiAgY29uc3RydWN0b3IgKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVhZG9ubHkgem9uZTogTmdab25lKSB7XG4gICAgY29uc3QgZWwgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5fZWRpdG9yID0gYWNlLmVkaXQoZWwpXG4gICAgfSlcbiAgICB0aGlzLl9lZGl0b3IuJGJsb2NrU2Nyb2xsaW5nID0gSW5maW5pdHlcbiAgfVxuXG4gIG5nT25Jbml0ICgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXQoKVxuICAgIHRoaXMuaW5pdEV2ZW50cygpXG4gIH1cblxuICBuZ09uRGVzdHJveSAoKTogdm9pZCB7XG4gICAgdGhpcy5fZWRpdG9yLmRlc3Ryb3koKVxuICB9XG5cbiAgaW5pdCAoKTogdm9pZCB7XG4gICAgdGhpcy5fZWRpdG9yLnNldEtleWJvYXJkSGFuZGxlcignYWNlL2tleWJvYXJkL3ZzY29kZScpXG4gICAgdGhpcy5zZXRPcHRpb25zKHtcbiAgICAgIGVuYWJsZUJhc2ljQXV0b2NvbXBsZXRpb246IHRydWUsXG4gICAgICBhdXRvU2Nyb2xsRWRpdG9ySW50b1ZpZXc6IHRydWUsXG4gICAgICBlbmFibGVMaXZlQXV0b2NvbXBsZXRpb246IHRydWVcbiAgICB9KVxuICAgIHRoaXMuc2V0VGhlbWUodGhpcy5fdGhlbWUpXG4gICAgdGhpcy5zZXRNb2RlKHRoaXMuX21vZGUpXG4gICAgdGhpcy5zZXRSZWFkT25seSh0aGlzLl9yZWFkT25seSlcbiAgICB0aGlzLmNyZWF0ZUN1c3RvbUNvbXBsZXRpb25zKHRoaXMuX2N1c3RvbUNvbXBsZXRpb25zKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDdXN0b21Db21wbGV0aW9ucyhjdXN0b21Db21wbGV0aW9uczogQ29tcGxldGlvbltdKTogdm9pZCB7XG4gICAgdGhpcy5fZWRpdG9yLmNvbXBsZXRlcnMucHVzaCh7XG4gICAgICBnZXRDb21wbGV0aW9uczogZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBwb3MsIHByZWZpeCwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgY3VzdG9tQ29tcGxldGlvbnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0IGN1c3RvbUNvbXBsZXRpb25zKGN1c3RvbUNvbXBsZXRpb25zOiBDb21wbGV0aW9uW10pIHtcbiAgICB0aGlzLl9jdXN0b21Db21wbGV0aW9ucyA9IGN1c3RvbUNvbXBsZXRpb25zXG4gIH1cblxuICBpbml0RXZlbnRzICgpOiB2b2lkIHtcbiAgICB0aGlzLl9lZGl0b3Iub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVGV4dCgpXG4gICAgfSlcbiAgICB0aGlzLl9lZGl0b3Iub24oJ3Bhc3RlJywgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVUZXh0KClcbiAgICB9KVxuICB9XG5cbiAgdXBkYXRlVGV4dCAoKTogdm9pZCB7XG4gICAgY29uc3QgbmV3VmFsID0gdGhpcy5fZWRpdG9yLmdldFZhbHVlKClcbiAgICBpZiAobmV3VmFsID09PSB0aGlzLm9sZFRleHQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIXRoaXMuX2R1cmF0aW9uQmVmb3JlQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX3RleHQgPSBuZXdWYWxcbiAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRDaGFuZ2UuZW1pdChuZXdWYWwpXG4gICAgICAgIHRoaXMudGV4dENoYW5nZWQuZW1pdChuZXdWYWwpXG4gICAgICB9KVxuICAgICAgdGhpcy5fb25DaGFuZ2UobmV3VmFsKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy50aW1lb3V0U2F2aW5nKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRTYXZpbmcpXG4gICAgICB9XG5cbiAgICAgIHRoaXMudGltZW91dFNhdmluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl90ZXh0ID0gbmV3VmFsXG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMudGV4dENoYW5nZS5lbWl0KG5ld1ZhbClcbiAgICAgICAgICB0aGlzLnRleHRDaGFuZ2VkLmVtaXQobmV3VmFsKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnRpbWVvdXRTYXZpbmcgPSBudWxsXG4gICAgICB9LCB0aGlzLl9kdXJhdGlvbkJlZm9yZUNhbGxiYWNrKVxuICAgIH1cbiAgICB0aGlzLm9sZFRleHQgPSBuZXdWYWxcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBvcHRpb25zIChvcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucylcbiAgfVxuXG4gIHNldE9wdGlvbnMgKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5fZWRpdG9yLnNldE9wdGlvbnMob3B0aW9ucyB8fCB7fSlcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByZWFkT25seSAocmVhZE9ubHk6IGFueSkge1xuICAgIHRoaXMuc2V0UmVhZE9ubHkocmVhZE9ubHkpXG4gIH1cblxuICBzZXRSZWFkT25seSAocmVhZE9ubHk6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3JlYWRPbmx5ID0gcmVhZE9ubHlcbiAgICB0aGlzLl9lZGl0b3Iuc2V0UmVhZE9ubHkocmVhZE9ubHkpXG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGhlbWUgKHRoZW1lOiBhbnkpIHtcbiAgICB0aGlzLnNldFRoZW1lKHRoZW1lKVxuICB9XG5cbiAgc2V0VGhlbWUgKHRoZW1lOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl90aGVtZSA9IHRoZW1lXG4gICAgdGhpcy5fZWRpdG9yLnNldFRoZW1lKGBhY2UvdGhlbWUvJHt0aGVtZX1gKVxuICB9XG5cbiAgQElucHV0KCkgc2V0IG1vZGUgKG1vZGU6IGFueSkge1xuICAgIHRoaXMuc2V0TW9kZShtb2RlKVxuICB9XG5cbiAgc2V0TW9kZSAobW9kZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fbW9kZSA9IG1vZGVcbiAgICBpZiAodHlwZW9mIHRoaXMuX21vZGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLl9lZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUodGhpcy5fbW9kZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKGBhY2UvbW9kZS8ke3RoaXMuX21vZGV9YClcbiAgICB9XG4gIH1cblxuICBnZXQgdmFsdWUgKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFxuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlICh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRUZXh0KHZhbHVlKVxuICB9XG5cbiAgd3JpdGVWYWx1ZSAodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2V0VGV4dCh2YWx1ZSlcbiAgfVxuXG4gIHByaXZhdGUgX29uQ2hhbmdlID0gKF86IGFueSk6IHZvaWQgPT4ge1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZSAoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm5cbiAgfVxuXG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkIChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm5cbiAgfVxuXG4gIGdldCB0ZXh0ICgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZXh0XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdGV4dCAodGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRUZXh0KHRleHQpXG4gIH1cblxuICBzZXRUZXh0ICh0ZXh0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGV4dCA9PT0gbnVsbCB8fCB0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRleHQgPSAnJ1xuICAgIH1cbiAgICBpZiAodGhpcy5fdGV4dCAhPT0gdGV4dCAmJiB0aGlzLl9hdXRvVXBkYXRlQ29udGVudCkge1xuICAgICAgdGhpcy5fdGV4dCA9IHRleHRcbiAgICAgIHRoaXMuX2VkaXRvci5zZXRWYWx1ZSh0ZXh0KVxuICAgICAgdGhpcy5fb25DaGFuZ2UodGV4dClcbiAgICAgIHRoaXMuX2VkaXRvci5jbGVhclNlbGVjdGlvbigpXG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgc2V0IGF1dG9VcGRhdGVDb250ZW50IChzdGF0dXM6IGFueSkge1xuICAgIHRoaXMuc2V0QXV0b1VwZGF0ZUNvbnRlbnQoc3RhdHVzKVxuICB9XG5cbiAgc2V0QXV0b1VwZGF0ZUNvbnRlbnQgKHN0YXR1czogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b1VwZGF0ZUNvbnRlbnQgPSBzdGF0dXNcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkdXJhdGlvbkJlZm9yZUNhbGxiYWNrIChudW06IG51bWJlcikge1xuICAgIHRoaXMuc2V0RHVyYXRpb25CZWZvcmVDYWxsYmFjayhudW0pXG4gIH1cblxuICBzZXREdXJhdGlvbkJlZm9yZUNhbGxiYWNrIChudW06IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2R1cmF0aW9uQmVmb3JlQ2FsbGJhY2sgPSBudW1cbiAgfVxuXG4gIGdldEVkaXRvciAoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdG9yXG4gIH1cblxufVxuIl19
@@ -1,153 +0,0 @@
1
- import { Directive, ElementRef, EventEmitter, Input, NgZone, Output } from '@angular/core';
2
- import 'brace';
3
- import 'brace/theme/monokai';
4
- import * as i0 from "@angular/core";
5
- class AceEditorDirective {
6
- zone;
7
- textChanged = new EventEmitter();
8
- textChange = new EventEmitter();
9
- _options = {};
10
- _readOnly = false;
11
- _theme = 'monokai';
12
- _mode = 'html';
13
- _autoUpdateContent = true;
14
- _durationBeforeCallback = 0;
15
- _text = '';
16
- editor;
17
- oldText;
18
- timeoutSaving;
19
- constructor(elementRef, zone) {
20
- this.zone = zone;
21
- const el = elementRef.nativeElement;
22
- this.zone.runOutsideAngular(() => {
23
- this.editor = ace.edit(el);
24
- });
25
- this.editor.$blockScrolling = Infinity;
26
- }
27
- ngOnInit() {
28
- this.init();
29
- this.initEvents();
30
- }
31
- ngOnDestroy() {
32
- this.editor.destroy();
33
- }
34
- init() {
35
- this.editor.setOptions(this._options || {});
36
- this.editor.setTheme(`ace/theme/${this._theme}`);
37
- this.setMode(this._mode);
38
- this.editor.setReadOnly(this._readOnly);
39
- }
40
- initEvents() {
41
- this.editor.on('change', () => { this.updateText(); });
42
- this.editor.on('paste', () => { this.updateText(); });
43
- }
44
- updateText() {
45
- const newVal = this.editor.getValue();
46
- if (newVal === this.oldText) {
47
- return;
48
- }
49
- if (!this._durationBeforeCallback) {
50
- this._text = newVal;
51
- this.zone.run(() => {
52
- this.textChange.emit(newVal);
53
- this.textChanged.emit(newVal);
54
- });
55
- }
56
- else {
57
- if (this.timeoutSaving != null) {
58
- clearTimeout(this.timeoutSaving);
59
- }
60
- this.timeoutSaving = setTimeout(() => {
61
- this._text = newVal;
62
- this.zone.run(() => {
63
- this.textChange.emit(newVal);
64
- this.textChanged.emit(newVal);
65
- });
66
- this.timeoutSaving = null;
67
- }, this._durationBeforeCallback);
68
- }
69
- this.oldText = newVal;
70
- }
71
- set options(options) {
72
- this._options = options;
73
- this.editor.setOptions(options || {});
74
- }
75
- set readOnly(readOnly) {
76
- this._readOnly = readOnly;
77
- this.editor.setReadOnly(readOnly);
78
- }
79
- set theme(theme) {
80
- this._theme = theme;
81
- this.editor.setTheme(`ace/theme/${theme}`);
82
- }
83
- set mode(mode) {
84
- this.setMode(mode);
85
- }
86
- setMode(mode) {
87
- this._mode = mode;
88
- if (typeof this._mode === 'object') {
89
- this.editor.getSession().setMode(this._mode);
90
- }
91
- else {
92
- this.editor.getSession().setMode(`ace/mode/${this._mode}`);
93
- }
94
- }
95
- get text() {
96
- return this._text;
97
- }
98
- set text(text) {
99
- this.setText(text);
100
- }
101
- setText(text) {
102
- if (this._text !== text) {
103
- if (text === null || text === undefined) {
104
- text = '';
105
- }
106
- if (this._autoUpdateContent) {
107
- this._text = text;
108
- this.editor.setValue(text);
109
- this.editor.clearSelection();
110
- }
111
- }
112
- }
113
- set autoUpdateContent(status) {
114
- this._autoUpdateContent = status;
115
- }
116
- set durationBeforeCallback(num) {
117
- this.setDurationBeforeCallback(num);
118
- }
119
- setDurationBeforeCallback(num) {
120
- this._durationBeforeCallback = num;
121
- }
122
- get aceEditor() {
123
- return this.editor;
124
- }
125
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: AceEditorDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
126
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: AceEditorDirective, selector: "[ace-editor]", inputs: { options: "options", readOnly: "readOnly", theme: "theme", mode: "mode", text: "text", autoUpdateContent: "autoUpdateContent", durationBeforeCallback: "durationBeforeCallback" }, outputs: { textChanged: "textChanged", textChange: "textChange" }, ngImport: i0 });
127
- }
128
- export { AceEditorDirective };
129
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: AceEditorDirective, decorators: [{
130
- type: Directive,
131
- args: [{
132
- selector: '[ace-editor]'
133
- }]
134
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { textChanged: [{
135
- type: Output
136
- }], textChange: [{
137
- type: Output
138
- }], options: [{
139
- type: Input
140
- }], readOnly: [{
141
- type: Input
142
- }], theme: [{
143
- type: Input
144
- }], mode: [{
145
- type: Input
146
- }], text: [{
147
- type: Input
148
- }], autoUpdateContent: [{
149
- type: Input
150
- }], durationBeforeCallback: [{
151
- type: Input
152
- }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5wdXRzL3NyYy9hY2UtZWRpdG9yL2RpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzdHLE9BQU8sT0FBTyxDQUFBO0FBQ2QsT0FBTyxxQkFBcUIsQ0FBQTs7QUFJNUIsTUFHYSxrQkFBa0I7SUFleUI7SUFiNUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7SUFDaEMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7SUFDekMsUUFBUSxHQUFRLEVBQUUsQ0FBQTtJQUNsQixTQUFTLEdBQUcsS0FBSyxDQUFBO0lBQ2pCLE1BQU0sR0FBRyxTQUFTLENBQUE7SUFDbEIsS0FBSyxHQUFHLE1BQU0sQ0FBQTtJQUNkLGtCQUFrQixHQUFHLElBQUksQ0FBQTtJQUN6Qix1QkFBdUIsR0FBRyxDQUFDLENBQUE7SUFDM0IsS0FBSyxHQUFHLEVBQUUsQ0FBQTtJQUNWLE1BQU0sQ0FBSztJQUNYLE9BQU8sQ0FBSztJQUNaLGFBQWEsQ0FBSztJQUVsQixZQUFhLFVBQXNCLEVBQW1CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ2hFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUE7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFBO0lBQ3hDLENBQUM7SUFFRCxRQUFRO1FBQ04s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SUFFRCxJQUFhLGlCQUFpQixDQUFFLE1BQVc7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQTtJQUNsQyxDQUFDO0lBRUQsSUFBYSxzQkFBc0IsQ0FBRSxHQUFXO1FBQzlDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQseUJBQXlCLENBQUUsR0FBVztRQUNwQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsR0FBRyxDQUFBO0lBQ3BDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDcEIsQ0FBQzt1R0F6SVUsa0JBQWtCOzJGQUFsQixrQkFBa0I7O1NBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUg5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO2lCQUN6QjtzSEFHVyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBcUVNLE9BQU87c0JBQW5CLEtBQUs7Z0JBS08sUUFBUTtzQkFBcEIsS0FBSztnQkFLTyxLQUFLO3NCQUFqQixLQUFLO2dCQUtPLElBQUk7c0JBQWhCLEtBQUs7Z0JBY0YsSUFBSTtzQkFEUCxLQUFLO2dCQXVCTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8sc0JBQXNCO3NCQUFsQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgJ2JyYWNlJ1xuaW1wb3J0ICdicmFjZS90aGVtZS9tb25va2FpJ1xuXG5kZWNsYXJlIGxldCBhY2U6IGFueVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYWNlLWVkaXRvcl0nXG59KVxuZXhwb3J0IGNsYXNzIEFjZUVkaXRvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAT3V0cHV0KCkgdGV4dENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHRleHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgX29wdGlvbnM6IGFueSA9IHt9XG4gIF9yZWFkT25seSA9IGZhbHNlXG4gIF90aGVtZSA9ICdtb25va2FpJ1xuICBfbW9kZSA9ICdodG1sJ1xuICBfYXV0b1VwZGF0ZUNvbnRlbnQgPSB0cnVlXG4gIF9kdXJhdGlvbkJlZm9yZUNhbGxiYWNrID0gMFxuICBfdGV4dCA9ICcnXG4gIGVkaXRvcjogYW55XG4gIG9sZFRleHQ6IGFueVxuICB0aW1lb3V0U2F2aW5nOiBhbnlcblxuICBjb25zdHJ1Y3RvciAoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUpIHtcbiAgICBjb25zdCBlbCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KGVsKVxuICAgIH0pXG4gICAgdGhpcy5lZGl0b3IuJGJsb2NrU2Nyb2xsaW5nID0gSW5maW5pdHlcbiAgfVxuXG4gIG5nT25Jbml0ICgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXQoKVxuICAgIHRoaXMuaW5pdEV2ZW50cygpXG4gIH1cblxuICBuZ09uRGVzdHJveSAoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH1cblxuICBpbml0ICgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvci5zZXRPcHRpb25zKHRoaXMuX29wdGlvbnMgfHwge30pXG4gICAgdGhpcy5lZGl0b3Iuc2V0VGhlbWUoYGFjZS90aGVtZS8ke3RoaXMuX3RoZW1lfWApXG4gICAgdGhpcy5zZXRNb2RlKHRoaXMuX21vZGUpXG4gICAgdGhpcy5lZGl0b3Iuc2V0UmVhZE9ubHkodGhpcy5fcmVhZE9ubHkpXG4gIH1cblxuICBpbml0RXZlbnRzICgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvci5vbignY2hhbmdlJywgKCkgPT4geyB0aGlzLnVwZGF0ZVRleHQoKSB9KVxuICAgIHRoaXMuZWRpdG9yLm9uKCdwYXN0ZScsICgpID0+IHsgdGhpcy51cGRhdGVUZXh0KCkgfSlcbiAgfVxuXG4gIHVwZGF0ZVRleHQgKCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuZWRpdG9yLmdldFZhbHVlKClcbiAgICBpZiAobmV3VmFsID09PSB0aGlzLm9sZFRleHQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIXRoaXMuX2R1cmF0aW9uQmVmb3JlQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX3RleHQgPSBuZXdWYWxcbiAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRDaGFuZ2UuZW1pdChuZXdWYWwpXG4gICAgICAgIHRoaXMudGV4dENoYW5nZWQuZW1pdChuZXdWYWwpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy50aW1lb3V0U2F2aW5nICE9IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFNhdmluZylcbiAgICAgIH1cblxuICAgICAgdGhpcy50aW1lb3V0U2F2aW5nID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3RleHQgPSBuZXdWYWxcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy50ZXh0Q2hhbmdlLmVtaXQobmV3VmFsKVxuICAgICAgICAgIHRoaXMudGV4dENoYW5nZWQuZW1pdChuZXdWYWwpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMudGltZW91dFNhdmluZyA9IG51bGxcbiAgICAgIH0sIHRoaXMuX2R1cmF0aW9uQmVmb3JlQ2FsbGJhY2spXG4gICAgfVxuICAgIHRoaXMub2xkVGV4dCA9IG5ld1ZhbFxuICB9XG5cbiAgQElucHV0KCkgc2V0IG9wdGlvbnMgKG9wdGlvbnM6IGFueSkge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyhvcHRpb25zIHx8IHt9KVxuICB9XG5cbiAgQElucHV0KCkgc2V0IHJlYWRPbmx5IChyZWFkT25seTogYW55KSB7XG4gICAgdGhpcy5fcmVhZE9ubHkgPSByZWFkT25seVxuICAgIHRoaXMuZWRpdG9yLnNldFJlYWRPbmx5KHJlYWRPbmx5KVxuICB9XG5cbiAgQElucHV0KCkgc2V0IHRoZW1lICh0aGVtZTogYW55KSB7XG4gICAgdGhpcy5fdGhlbWUgPSB0aGVtZVxuICAgIHRoaXMuZWRpdG9yLnNldFRoZW1lKGBhY2UvdGhlbWUvJHt0aGVtZX1gKVxuICB9XG5cbiAgQElucHV0KCkgc2V0IG1vZGUgKG1vZGU6IGFueSkge1xuICAgIHRoaXMuc2V0TW9kZShtb2RlKVxuICB9XG5cbiAgc2V0TW9kZSAobW9kZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fbW9kZSA9IG1vZGVcbiAgICBpZiAodHlwZW9mIHRoaXMuX21vZGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLmVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh0aGlzLl9tb2RlKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZShgYWNlL21vZGUvJHt0aGlzLl9tb2RlfWApXG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHRleHQgKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RleHRcbiAgfVxuXG4gIHNldCB0ZXh0ICh0ZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFRleHQodGV4dClcbiAgfVxuXG4gIHNldFRleHQgKHRleHQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90ZXh0ICE9PSB0ZXh0KSB7XG4gICAgICBpZiAodGV4dCA9PT0gbnVsbCB8fCB0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dCA9ICcnXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9hdXRvVXBkYXRlQ29udGVudCkge1xuICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dFxuICAgICAgICB0aGlzLmVkaXRvci5zZXRWYWx1ZSh0ZXh0KVxuICAgICAgICB0aGlzLmVkaXRvci5jbGVhclNlbGVjdGlvbigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgc2V0IGF1dG9VcGRhdGVDb250ZW50IChzdGF0dXM6IGFueSkge1xuICAgIHRoaXMuX2F1dG9VcGRhdGVDb250ZW50ID0gc3RhdHVzXG4gIH1cblxuICBASW5wdXQoKSBzZXQgZHVyYXRpb25CZWZvcmVDYWxsYmFjayAobnVtOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldER1cmF0aW9uQmVmb3JlQ2FsbGJhY2sobnVtKVxuICB9XG5cbiAgc2V0RHVyYXRpb25CZWZvcmVDYWxsYmFjayAobnVtOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9kdXJhdGlvbkJlZm9yZUNhbGxiYWNrID0gbnVtXG4gIH1cblxuICBnZXQgYWNlRWRpdG9yICgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVkaXRvclxuICB9XG5cbn1cbiJdfQ==