@apipass/inputs 1.0.147 → 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.147",
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,212 +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.setOptions(this._options || {});
39
- this.setTheme(this._theme);
40
- this.setMode(this._mode);
41
- this.setReadOnly(this._readOnly);
42
- this.createCustomCompletions(this._customCompletions);
43
- }
44
- createCustomCompletions(customCompletions) {
45
- this._editor.completers.push({
46
- getCompletions: function (editor, session, pos, prefix, callback) {
47
- callback(null, customCompletions);
48
- }
49
- });
50
- }
51
- set customCompletions(customCompletions) {
52
- this._customCompletions = customCompletions;
53
- }
54
- initEvents() {
55
- this._editor.on('change', () => {
56
- this.updateText();
57
- });
58
- this._editor.on('paste', () => {
59
- this.updateText();
60
- });
61
- }
62
- updateText() {
63
- const newVal = this._editor.getValue();
64
- if (newVal === this.oldText) {
65
- return;
66
- }
67
- if (!this._durationBeforeCallback) {
68
- this._text = newVal;
69
- this.zone.run(() => {
70
- this.textChange.emit(newVal);
71
- this.textChanged.emit(newVal);
72
- });
73
- this._onChange(newVal);
74
- }
75
- else {
76
- if (this.timeoutSaving) {
77
- clearTimeout(this.timeoutSaving);
78
- }
79
- this.timeoutSaving = setTimeout(() => {
80
- this._text = newVal;
81
- this.zone.run(() => {
82
- this.textChange.emit(newVal);
83
- this.textChanged.emit(newVal);
84
- });
85
- this.timeoutSaving = null;
86
- }, this._durationBeforeCallback);
87
- }
88
- this.oldText = newVal;
89
- }
90
- set options(options) {
91
- this.setOptions(options);
92
- }
93
- setOptions(options) {
94
- this._options = options;
95
- this._editor.setOptions(options || {});
96
- }
97
- set readOnly(readOnly) {
98
- this.setReadOnly(readOnly);
99
- }
100
- setReadOnly(readOnly) {
101
- this._readOnly = readOnly;
102
- this._editor.setReadOnly(readOnly);
103
- }
104
- set theme(theme) {
105
- this.setTheme(theme);
106
- }
107
- setTheme(theme) {
108
- this._theme = theme;
109
- this._editor.setTheme(`ace/theme/${theme}`);
110
- }
111
- set mode(mode) {
112
- this.setMode(mode);
113
- }
114
- setMode(mode) {
115
- this._mode = mode;
116
- if (typeof this._mode === 'object') {
117
- this._editor.getSession().setMode(this._mode);
118
- }
119
- else {
120
- this._editor.getSession().setMode(`ace/mode/${this._mode}`);
121
- }
122
- }
123
- get value() {
124
- return this.text;
125
- }
126
- set value(value) {
127
- this.setText(value);
128
- }
129
- writeValue(value) {
130
- this.setText(value);
131
- }
132
- _onChange = (_) => {
133
- };
134
- registerOnChange(fn) {
135
- this._onChange = fn;
136
- }
137
- _onTouched = () => {
138
- };
139
- registerOnTouched(fn) {
140
- this._onTouched = fn;
141
- }
142
- get text() {
143
- return this._text;
144
- }
145
- set text(text) {
146
- this.setText(text);
147
- }
148
- setText(text) {
149
- if (text === null || text === undefined) {
150
- text = '';
151
- }
152
- if (this._text !== text && this._autoUpdateContent) {
153
- this._text = text;
154
- this._editor.setValue(text);
155
- this._onChange(text);
156
- this._editor.clearSelection();
157
- }
158
- }
159
- set autoUpdateContent(status) {
160
- this.setAutoUpdateContent(status);
161
- }
162
- setAutoUpdateContent(status) {
163
- this._autoUpdateContent = status;
164
- }
165
- set durationBeforeCallback(num) {
166
- this.setDurationBeforeCallback(num);
167
- }
168
- setDurationBeforeCallback(num) {
169
- this._durationBeforeCallback = num;
170
- }
171
- getEditor() {
172
- return this._editor;
173
- }
174
- 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 });
175
- 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: [{
176
- provide: NG_VALUE_ACCESSOR,
177
- useExisting: forwardRef(() => AceEditorComponent),
178
- multi: true
179
- }], ngImport: i0, template: '', isInline: true, styles: [":host{display:block;width:100%}\n"] });
180
- }
181
- export { AceEditorComponent };
182
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: AceEditorComponent, decorators: [{
183
- type: Component,
184
- args: [{ selector: 'ace-editor', template: '', providers: [{
185
- provide: NG_VALUE_ACCESSOR,
186
- useExisting: forwardRef(() => AceEditorComponent),
187
- multi: true
188
- }], styles: [":host{display:block;width:100%}\n"] }]
189
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { textChanged: [{
190
- type: Output
191
- }], textChange: [{
192
- type: Output
193
- }], style: [{
194
- type: Input
195
- }], options: [{
196
- type: Input
197
- }], readOnly: [{
198
- type: Input
199
- }], theme: [{
200
- type: Input
201
- }], mode: [{
202
- type: Input
203
- }], value: [{
204
- type: Input
205
- }], text: [{
206
- type: Input
207
- }], autoUpdateContent: [{
208
- type: Input
209
- }], durationBeforeCallback: [{
210
- type: Input
211
- }] } });
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5wdXRzL3NyYy9hY2UtZWRpdG9yL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBR04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4RSxPQUFPLE9BQU8sQ0FBQTtBQUNkLE9BQU8scUJBQXFCLENBQUE7O0FBTTVCLE1BVWEsa0JBQWtCO0lBb0J5QjtJQWxCNUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7SUFDaEMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7SUFDaEMsS0FBSyxHQUFRLEVBQUUsQ0FBQTtJQUV4QixRQUFRLEdBQVEsRUFBRSxDQUFBO0lBQ2xCLFNBQVMsR0FBVSxLQUFLLENBQUE7SUFDeEIsTUFBTSxHQUFHLFNBQVMsQ0FBQTtJQUNsQixLQUFLLEdBQUcsTUFBTSxDQUFBO0lBQ2Qsa0JBQWtCLEdBQUcsSUFBSSxDQUFBO0lBQ3pCLE9BQU8sQ0FBSztJQUNaLHVCQUF1QixHQUFHLENBQUMsQ0FBQTtJQUMzQixLQUFLLEdBQUcsRUFBRSxDQUFBO0lBRVYsT0FBTyxDQUFLO0lBQ1osYUFBYSxDQUFLO0lBRVYsa0JBQWtCLEdBQWlCLEVBQUUsQ0FBQTtJQUU3QyxZQUFhLFVBQXNCLEVBQW1CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ2hFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUE7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxD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LElBQUk7eUJBQ1osQ0FBQztzSEFJUSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0UsS0FBSztzQkFBYixLQUFLO2dCQTJGTyxPQUFPO3NCQUFuQixLQUFLO2dCQVNPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBU08sS0FBSztzQkFBakIsS0FBSztnQkFTTyxJQUFJO3NCQUFoQixLQUFLO2dCQWtCRixLQUFLO3NCQURSLEtBQUs7Z0JBNEJGLElBQUk7c0JBRFAsS0FBSztnQkFpQk8saUJBQWlCO3NCQUE3QixLQUFLO2dCQVFPLHNCQUFzQjtzQkFBbEMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCAnYnJhY2UnXG5pbXBvcnQgJ2JyYWNlL3RoZW1lL21vbm9rYWknXG5pbXBvcnQgeyBBY2UgfSBmcm9tICdhY2UtYnVpbGRzJztcbmltcG9ydCBDb21wbGV0aW9uID0gQWNlLkNvbXBsZXRpb247XG5cbmRlY2xhcmUgbGV0IGFjZTogYW55XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjZS1lZGl0b3InLFxuICB0ZW1wbGF0ZTogJycsXG4gIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTsgfSddLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQWNlRWRpdG9yQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBBY2VFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBPdXRwdXQoKSB0ZXh0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgdGV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBASW5wdXQoKSBzdHlsZTogYW55ID0ge31cblxuICBfb3B0aW9uczogYW55ID0ge31cbiAgX3JlYWRPbmx5OiBmYWxzZSA9IGZhbHNlXG4gIF90aGVtZSA9ICdtb25va2FpJ1xuICBfbW9kZSA9ICdodG1sJ1xuICBfYXV0b1VwZGF0ZUNvbnRlbnQgPSB0cnVlXG4gIF9lZGl0b3I6IGFueVxuICBfZHVyYXRpb25CZWZvcmVDYWxsYmFjayA9IDBcbiAgX3RleHQgPSAnJ1xuXG4gIG9sZFRleHQ6IGFueVxuICB0aW1lb3V0U2F2aW5nOiBhbnlcblxuICBwcml2YXRlIF9jdXN0b21Db21wbGV0aW9uczogQ29tcGxldGlvbltdID0gW11cblxuICBjb25zdHJ1Y3RvciAoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUpIHtcbiAgICBjb25zdCBlbCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLl9lZGl0b3IgPSBhY2UuZWRpdChlbClcbiAgICB9KVxuICAgIHRoaXMuX2VkaXRvci4kYmxvY2tTY3JvbGxpbmcgPSBJbmZpbml0eVxuICB9XG5cbiAgbmdPbkluaXQgKCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdCgpXG4gICAgdGhpcy5pbml0RXZlbnRzKClcbiAgfVxuXG4gIG5nT25EZXN0cm95ICgpOiB2b2lkIHtcbiAgICB0aGlzLl9lZGl0b3IuZGVzdHJveSgpXG4gIH1cblxuICBpbml0ICgpOiB2b2lkIHtcbiAgICB0aGlzLnNldE9wdGlvbnModGhpcy5fb3B0aW9ucyB8fCB7fSlcbiAgICB0aGlzLnNldFRoZW1lKHRoaXMuX3RoZW1lKVxuICAgIHRoaXMuc2V0TW9kZSh0aGlzLl9tb2RlKVxuICAgIHRoaXMuc2V0UmVhZE9ubHkodGhpcy5fcmVhZE9ubHkpXG4gICAgdGhpcy5jcmVhdGVDdXN0b21Db21wbGV0aW9ucyh0aGlzLl9jdXN0b21Db21wbGV0aW9ucylcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ3VzdG9tQ29tcGxldGlvbnMoY3VzdG9tQ29tcGxldGlvbnM6IENvbXBsZXRpb25bXSk6IHZvaWQge1xuICAgIHRoaXMuX2VkaXRvci5jb21wbGV0ZXJzLnB1c2goe1xuICAgICAgZ2V0Q29tcGxldGlvbnM6IGZ1bmN0aW9uKGVkaXRvciwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGN1c3RvbUNvbXBsZXRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldCBjdXN0b21Db21wbGV0aW9ucyhjdXN0b21Db21wbGV0aW9uczogQ29tcGxldGlvbltdKSB7XG4gICAgdGhpcy5fY3VzdG9tQ29tcGxldGlvbnMgPSBjdXN0b21Db21wbGV0aW9uc1xuICB9XG5cbiAgaW5pdEV2ZW50cyAoKTogdm9pZCB7XG4gICAgdGhpcy5fZWRpdG9yLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVRleHQoKVxuICAgIH0pXG4gICAgdGhpcy5fZWRpdG9yLm9uKCdwYXN0ZScsICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVGV4dCgpXG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZVRleHQgKCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuX2VkaXRvci5nZXRWYWx1ZSgpXG4gICAgaWYgKG5ld1ZhbCA9PT0gdGhpcy5vbGRUZXh0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCF0aGlzLl9kdXJhdGlvbkJlZm9yZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLl90ZXh0ID0gbmV3VmFsXG4gICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy50ZXh0Q2hhbmdlLmVtaXQobmV3VmFsKVxuICAgICAgICB0aGlzLnRleHRDaGFuZ2VkLmVtaXQobmV3VmFsKVxuICAgICAgfSlcbiAgICAgIHRoaXMuX29uQ2hhbmdlKG5ld1ZhbClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMudGltZW91dFNhdmluZykge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0U2F2aW5nKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRpbWVvdXRTYXZpbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fdGV4dCA9IG5ld1ZhbFxuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnRleHRDaGFuZ2UuZW1pdChuZXdWYWwpXG4gICAgICAgICAgdGhpcy50ZXh0Q2hhbmdlZC5lbWl0KG5ld1ZhbClcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy50aW1lb3V0U2F2aW5nID0gbnVsbFxuICAgICAgfSwgdGhpcy5fZHVyYXRpb25CZWZvcmVDYWxsYmFjaylcbiAgICB9XG4gICAgdGhpcy5vbGRUZXh0ID0gbmV3VmFsXG4gIH1cblxuICBASW5wdXQoKSBzZXQgb3B0aW9ucyAob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpXG4gIH1cblxuICBzZXRPcHRpb25zIChvcHRpb25zOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuX2VkaXRvci5zZXRPcHRpb25zKG9wdGlvbnMgfHwge30pXG4gIH1cblxuICBASW5wdXQoKSBzZXQgcmVhZE9ubHkgKHJlYWRPbmx5OiBhbnkpIHtcbiAgICB0aGlzLnNldFJlYWRPbmx5KHJlYWRPbmx5KVxuICB9XG5cbiAgc2V0UmVhZE9ubHkgKHJlYWRPbmx5OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWFkT25seSA9IHJlYWRPbmx5XG4gICAgdGhpcy5fZWRpdG9yLnNldFJlYWRPbmx5KHJlYWRPbmx5KVxuICB9XG5cbiAgQElucHV0KCkgc2V0IHRoZW1lICh0aGVtZTogYW55KSB7XG4gICAgdGhpcy5zZXRUaGVtZSh0aGVtZSlcbiAgfVxuXG4gIHNldFRoZW1lICh0aGVtZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fdGhlbWUgPSB0aGVtZVxuICAgIHRoaXMuX2VkaXRvci5zZXRUaGVtZShgYWNlL3RoZW1lLyR7dGhlbWV9YClcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBtb2RlIChtb2RlOiBhbnkpIHtcbiAgICB0aGlzLnNldE1vZGUobW9kZSlcbiAgfVxuXG4gIHNldE1vZGUgKG1vZGU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9tb2RlID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5fZWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKHRoaXMuX21vZGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZShgYWNlL21vZGUvJHt0aGlzLl9tb2RlfWApXG4gICAgfVxuICB9XG5cbiAgZ2V0IHZhbHVlICgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRleHRcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSAodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0VGV4dCh2YWx1ZSlcbiAgfVxuXG4gIHdyaXRlVmFsdWUgKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNldFRleHQodmFsdWUpXG4gIH1cblxuICBwcml2YXRlIF9vbkNoYW5nZSA9IChfOiBhbnkpOiB2b2lkID0+IHtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UgKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuXG4gIH1cblxuICBwcml2YXRlIF9vblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZCAoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuXG4gIH1cblxuICBnZXQgdGV4dCAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGV4dFxuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHRleHQgKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2V0VGV4dCh0ZXh0KVxuICB9XG5cbiAgc2V0VGV4dCAodGV4dDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRleHQgPT09IG51bGwgfHwgdGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0ZXh0ID0gJydcbiAgICB9XG4gICAgaWYgKHRoaXMuX3RleHQgIT09IHRleHQgJiYgdGhpcy5fYXV0b1VwZGF0ZUNvbnRlbnQpIHtcbiAgICAgIHRoaXMuX3RleHQgPSB0ZXh0XG4gICAgICB0aGlzLl9lZGl0b3Iuc2V0VmFsdWUodGV4dClcbiAgICAgIHRoaXMuX29uQ2hhbmdlKHRleHQpXG4gICAgICB0aGlzLl9lZGl0b3IuY2xlYXJTZWxlY3Rpb24oKVxuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBhdXRvVXBkYXRlQ29udGVudCAoc3RhdHVzOiBhbnkpIHtcbiAgICB0aGlzLnNldEF1dG9VcGRhdGVDb250ZW50KHN0YXR1cylcbiAgfVxuXG4gIHNldEF1dG9VcGRhdGVDb250ZW50IChzdGF0dXM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9VcGRhdGVDb250ZW50ID0gc3RhdHVzXG4gIH1cblxuICBASW5wdXQoKSBzZXQgZHVyYXRpb25CZWZvcmVDYWxsYmFjayAobnVtOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldER1cmF0aW9uQmVmb3JlQ2FsbGJhY2sobnVtKVxuICB9XG5cbiAgc2V0RHVyYXRpb25CZWZvcmVDYWxsYmFjayAobnVtOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9kdXJhdGlvbkJlZm9yZUNhbGxiYWNrID0gbnVtXG4gIH1cblxuICBnZXRFZGl0b3IgKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRvclxuICB9XG5cbn1cbiJdfQ==
@@ -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==