novo-elements 8.0.0-next.3 → 8.0.0-next.5

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.
Files changed (106) hide show
  1. package/{elements/ckeditor/novo-elements-elements-ckeditor.d.ts → addons/ace-editor/novo-elements-addons-ace-editor.d.ts} +1 -1
  2. package/addons/ace-editor/package.json +10 -0
  3. package/{elements/dragula/novo-elements-elements-dragula.d.ts → addons/ckeditor/novo-elements-addons-ckeditor.d.ts} +1 -1
  4. package/addons/ckeditor/package.json +10 -0
  5. package/{elements/ace-editor/novo-elements-elements-ace-editor.d.ts → addons/dragula/novo-elements-addons-dragula.d.ts} +1 -1
  6. package/addons/dragula/package.json +10 -0
  7. package/addons/index.d.ts +3 -0
  8. package/addons/novo-elements-addons.d.ts +5 -0
  9. package/addons/package.json +10 -0
  10. package/elements/data-table/data-table.module.d.ts +2 -1
  11. package/elements/form/Form.module.d.ts +3 -3
  12. package/elements/form/extras/FormExtras.module.d.ts +1 -1
  13. package/elements/form/extras/file/FileInput.d.ts +1 -1
  14. package/elements/index.d.ts +0 -3
  15. package/esm2020/addons/ace-editor/AceEditor.mjs +132 -0
  16. package/esm2020/{elements → addons}/ace-editor/AceEditor.module.mjs +1 -1
  17. package/esm2020/addons/ace-editor/index.mjs +3 -0
  18. package/esm2020/{elements/ckeditor/novo-elements-elements-ckeditor.mjs → addons/ace-editor/novo-elements-addons-ace-editor.mjs} +1 -1
  19. package/esm2020/addons/ckeditor/CKEditor.mjs +253 -0
  20. package/esm2020/{elements → addons}/ckeditor/CKEditor.module.mjs +1 -1
  21. package/esm2020/addons/ckeditor/index.mjs +3 -0
  22. package/esm2020/addons/ckeditor/novo-elements-addons-ckeditor.mjs +5 -0
  23. package/esm2020/addons/dragula/Dragula.mjs +77 -0
  24. package/esm2020/{elements → addons}/dragula/Dragula.module.mjs +1 -1
  25. package/esm2020/addons/dragula/DragulaService.mjs +127 -0
  26. package/esm2020/addons/dragula/index.mjs +4 -0
  27. package/esm2020/addons/dragula/novo-elements-addons-dragula.mjs +5 -0
  28. package/esm2020/addons/index.mjs +4 -0
  29. package/esm2020/addons/novo-elements-addons.mjs +5 -0
  30. package/esm2020/elements/data-table/data-table.component.mjs +10 -7
  31. package/esm2020/elements/data-table/data-table.module.mjs +6 -2
  32. package/esm2020/elements/form/ControlTemplates.mjs +2 -2
  33. package/esm2020/elements/form/Form.module.mjs +4 -4
  34. package/esm2020/elements/form/extras/FormExtras.module.mjs +2 -2
  35. package/esm2020/elements/form/extras/file/FileInput.mjs +3 -3
  36. package/esm2020/elements/index.mjs +1 -4
  37. package/esm2020/index.mjs +2 -1
  38. package/esm2020/novo-elements.module.mjs +3 -2
  39. package/esm2020/novo-elements.providers.mjs +3 -2
  40. package/{fesm2020/novo-elements-elements-ace-editor.mjs → fesm2015/novo-elements-addons-ace-editor.mjs} +1 -1
  41. package/fesm2015/novo-elements-addons-ace-editor.mjs.map +1 -0
  42. package/{fesm2020/novo-elements-elements-ckeditor.mjs → fesm2015/novo-elements-addons-ckeditor.mjs} +1 -1
  43. package/fesm2015/novo-elements-addons-ckeditor.mjs.map +1 -0
  44. package/fesm2015/{novo-elements-elements-dragula.mjs → novo-elements-addons-dragula.mjs} +1 -1
  45. package/fesm2015/novo-elements-addons-dragula.mjs.map +1 -0
  46. package/fesm2015/novo-elements-addons.mjs +632 -0
  47. package/fesm2015/novo-elements-addons.mjs.map +1 -0
  48. package/fesm2015/novo-elements-elements-data-table.mjs +9 -2
  49. package/fesm2015/novo-elements-elements-data-table.mjs.map +1 -1
  50. package/fesm2015/novo-elements-elements-form.mjs +6 -6
  51. package/fesm2015/novo-elements-elements-form.mjs.map +1 -1
  52. package/fesm2015/novo-elements-elements.mjs +0 -3
  53. package/fesm2015/novo-elements-elements.mjs.map +1 -1
  54. package/fesm2015/novo-elements.mjs +3 -1
  55. package/fesm2015/novo-elements.mjs.map +1 -1
  56. package/{fesm2015/novo-elements-elements-ace-editor.mjs → fesm2020/novo-elements-addons-ace-editor.mjs} +1 -1
  57. package/fesm2020/novo-elements-addons-ace-editor.mjs.map +1 -0
  58. package/{fesm2015/novo-elements-elements-ckeditor.mjs → fesm2020/novo-elements-addons-ckeditor.mjs} +1 -1
  59. package/fesm2020/novo-elements-addons-ckeditor.mjs.map +1 -0
  60. package/fesm2020/{novo-elements-elements-dragula.mjs → novo-elements-addons-dragula.mjs} +1 -1
  61. package/fesm2020/novo-elements-addons-dragula.mjs.map +1 -0
  62. package/fesm2020/novo-elements-addons.mjs +632 -0
  63. package/fesm2020/novo-elements-addons.mjs.map +1 -0
  64. package/fesm2020/novo-elements-elements-data-table.mjs +9 -2
  65. package/fesm2020/novo-elements-elements-data-table.mjs.map +1 -1
  66. package/fesm2020/novo-elements-elements-form.mjs +6 -6
  67. package/fesm2020/novo-elements-elements-form.mjs.map +1 -1
  68. package/fesm2020/novo-elements-elements.mjs +0 -3
  69. package/fesm2020/novo-elements-elements.mjs.map +1 -1
  70. package/fesm2020/novo-elements.mjs +3 -1
  71. package/fesm2020/novo-elements.mjs.map +1 -1
  72. package/index.d.ts +1 -0
  73. package/novo-elements.module.d.ts +3 -2
  74. package/novo-elements.scss +7 -3
  75. package/package.json +32 -24
  76. package/elements/ace-editor/package.json +0 -10
  77. package/elements/ckeditor/package.json +0 -10
  78. package/elements/dragula/package.json +0 -10
  79. package/esm2020/elements/ace-editor/AceEditor.mjs +0 -132
  80. package/esm2020/elements/ace-editor/index.mjs +0 -3
  81. package/esm2020/elements/ace-editor/novo-elements-elements-ace-editor.mjs +0 -5
  82. package/esm2020/elements/ckeditor/CKEditor.mjs +0 -253
  83. package/esm2020/elements/ckeditor/index.mjs +0 -3
  84. package/esm2020/elements/dragula/Dragula.mjs +0 -77
  85. package/esm2020/elements/dragula/DragulaService.mjs +0 -127
  86. package/esm2020/elements/dragula/index.mjs +0 -4
  87. package/esm2020/elements/dragula/novo-elements-elements-dragula.mjs +0 -5
  88. package/fesm2015/novo-elements-elements-ace-editor.mjs.map +0 -1
  89. package/fesm2015/novo-elements-elements-ckeditor.mjs.map +0 -1
  90. package/fesm2015/novo-elements-elements-dragula.mjs.map +0 -1
  91. package/fesm2020/novo-elements-elements-ace-editor.mjs.map +0 -1
  92. package/fesm2020/novo-elements-elements-ckeditor.mjs.map +0 -1
  93. package/fesm2020/novo-elements-elements-dragula.mjs.map +0 -1
  94. /package/{elements → addons}/ace-editor/AceEditor.d.ts +0 -0
  95. /package/{elements → addons}/ace-editor/AceEditor.module.d.ts +0 -0
  96. /package/{elements → addons}/ace-editor/AceEditor.scss +0 -0
  97. /package/{elements → addons}/ace-editor/index.d.ts +0 -0
  98. /package/{elements → addons}/ckeditor/CKEditor.d.ts +0 -0
  99. /package/{elements → addons}/ckeditor/CKEditor.module.d.ts +0 -0
  100. /package/{elements → addons}/ckeditor/CKEditor.scss +0 -0
  101. /package/{elements → addons}/ckeditor/index.d.ts +0 -0
  102. /package/{elements → addons}/dragula/Dragula.d.ts +0 -0
  103. /package/{elements → addons}/dragula/Dragula.module.d.ts +0 -0
  104. /package/{elements → addons}/dragula/Dragula.scss +0 -0
  105. /package/{elements → addons}/dragula/DragulaService.d.ts +0 -0
  106. /package/{elements → addons}/dragula/index.d.ts +0 -0
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
- /// <amd-module name="novo-elements/elements/ckeditor" />
4
+ /// <amd-module name="novo-elements/addons/ace-editor" />
5
5
  export * from './index';
@@ -0,0 +1,10 @@
1
+ {
2
+ "module": "../../fesm2015/novo-elements-addons-ace-editor.mjs",
3
+ "es2020": "../../fesm2020/novo-elements-addons-ace-editor.mjs",
4
+ "esm2020": "../../esm2020/addons/ace-editor/novo-elements-addons-ace-editor.mjs",
5
+ "fesm2020": "../../fesm2020/novo-elements-addons-ace-editor.mjs",
6
+ "fesm2015": "../../fesm2015/novo-elements-addons-ace-editor.mjs",
7
+ "typings": "novo-elements-addons-ace-editor.d.ts",
8
+ "sideEffects": false,
9
+ "name": "novo-elements/addons/ace-editor"
10
+ }
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
- /// <amd-module name="novo-elements/elements/dragula" />
4
+ /// <amd-module name="novo-elements/addons/ckeditor" />
5
5
  export * from './index';
@@ -0,0 +1,10 @@
1
+ {
2
+ "module": "../../fesm2015/novo-elements-addons-ckeditor.mjs",
3
+ "es2020": "../../fesm2020/novo-elements-addons-ckeditor.mjs",
4
+ "esm2020": "../../esm2020/addons/ckeditor/novo-elements-addons-ckeditor.mjs",
5
+ "fesm2020": "../../fesm2020/novo-elements-addons-ckeditor.mjs",
6
+ "fesm2015": "../../fesm2015/novo-elements-addons-ckeditor.mjs",
7
+ "typings": "novo-elements-addons-ckeditor.d.ts",
8
+ "sideEffects": false,
9
+ "name": "novo-elements/addons/ckeditor"
10
+ }
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
- /// <amd-module name="novo-elements/elements/ace-editor" />
4
+ /// <amd-module name="novo-elements/addons/dragula" />
5
5
  export * from './index';
@@ -0,0 +1,10 @@
1
+ {
2
+ "module": "../../fesm2015/novo-elements-addons-dragula.mjs",
3
+ "es2020": "../../fesm2020/novo-elements-addons-dragula.mjs",
4
+ "esm2020": "../../esm2020/addons/dragula/novo-elements-addons-dragula.mjs",
5
+ "fesm2020": "../../fesm2020/novo-elements-addons-dragula.mjs",
6
+ "fesm2015": "../../fesm2015/novo-elements-addons-dragula.mjs",
7
+ "typings": "novo-elements-addons-dragula.d.ts",
8
+ "sideEffects": false,
9
+ "name": "novo-elements/addons/dragula"
10
+ }
@@ -0,0 +1,3 @@
1
+ export * from './ace-editor';
2
+ export * from './ckeditor';
3
+ export * from './dragula';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="novo-elements/addons" />
5
+ export * from './index';
@@ -0,0 +1,10 @@
1
+ {
2
+ "module": "../fesm2015/novo-elements-addons.mjs",
3
+ "es2020": "../fesm2020/novo-elements-addons.mjs",
4
+ "esm2020": "../esm2020/addons/novo-elements-addons.mjs",
5
+ "fesm2020": "../fesm2020/novo-elements-addons.mjs",
6
+ "fesm2015": "../fesm2015/novo-elements-addons.mjs",
7
+ "typings": "novo-elements-addons.d.ts",
8
+ "sideEffects": false,
9
+ "name": "novo-elements/addons"
10
+ }
@@ -33,8 +33,9 @@ import * as i31 from "novo-elements/elements/tooltip";
33
33
  import * as i32 from "novo-elements/elements/checkbox";
34
34
  import * as i33 from "novo-elements/elements/flex";
35
35
  import * as i34 from "novo-elements/elements/field";
36
+ import * as i35 from "@angular/cdk/scrolling";
36
37
  export declare class NovoDataTableModule {
37
38
  static ɵfac: i0.ɵɵFactoryDeclaration<NovoDataTableModule, never>;
38
- static ɵmod: i0.ɵɵNgModuleDeclaration<NovoDataTableModule, [typeof i1.DataTableInterpolatePipe, typeof i1.DateTableDateRendererPipe, typeof i1.DateTableCurrencyRendererPipe, typeof i1.DateTableDateTimeRendererPipe, typeof i1.DateTableNumberRendererPipe, typeof i1.DateTableTimeRendererPipe, typeof i1.DataTableBigDecimalRendererPipe, typeof i2.NovoDataTableCellHeader, typeof i3.NovoDataTableSortFilter, typeof i4.NovoDataTableHeaderCell, typeof i5.NovoDataTableCellFilterHeader, typeof i6.NovoDataTableCell, typeof i7.NovoDataTableHeaderRow, typeof i8.NovoDataTableRow, typeof i9.NovoDataTablePagination, typeof i10.NovoDataTableCheckboxCell, typeof i11.NovoDataTableCheckboxHeaderCell, typeof i12.NovoDataTableExpandCell, typeof i13.NovoDataTableExpandHeaderCell, typeof i14.NovoDataTable, typeof i15.NovoDataTableExpandDirective, typeof i16.NovoDataTableClearButton, typeof i17.NovoDataTableSortButton], [typeof i18.NovoDatePickerModule, typeof i19.CdkTableModule, typeof i20.CommonModule, typeof i21.FormsModule, typeof i22.NovoIconModule, typeof i23.NovoButtonModule, typeof i24.NovoDropdownModule, typeof i25.NovoFormExtrasModule, typeof i26.NovoLoadingModule, typeof i27.NovoTilesModule, typeof i28.NovoSearchBoxModule, typeof i29.NovoOptionModule, typeof i29.NovoCommonModule, typeof i30.NovoSelectModule, typeof i31.NovoTooltipModule, typeof i32.NovoCheckboxModule, typeof i33.NovoFlexModule, typeof i34.NovoFieldModule], [typeof i14.NovoDataTable, typeof i1.DataTableInterpolatePipe, typeof i1.DateTableDateRendererPipe, typeof i1.DateTableCurrencyRendererPipe, typeof i1.DateTableDateTimeRendererPipe, typeof i1.DateTableNumberRendererPipe, typeof i1.DateTableTimeRendererPipe, typeof i1.DataTableBigDecimalRendererPipe, typeof i5.NovoDataTableCellFilterHeader, typeof i16.NovoDataTableClearButton, typeof i17.NovoDataTableSortButton]>;
39
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NovoDataTableModule, [typeof i1.DataTableInterpolatePipe, typeof i1.DateTableDateRendererPipe, typeof i1.DateTableCurrencyRendererPipe, typeof i1.DateTableDateTimeRendererPipe, typeof i1.DateTableNumberRendererPipe, typeof i1.DateTableTimeRendererPipe, typeof i1.DataTableBigDecimalRendererPipe, typeof i2.NovoDataTableCellHeader, typeof i3.NovoDataTableSortFilter, typeof i4.NovoDataTableHeaderCell, typeof i5.NovoDataTableCellFilterHeader, typeof i6.NovoDataTableCell, typeof i7.NovoDataTableHeaderRow, typeof i8.NovoDataTableRow, typeof i9.NovoDataTablePagination, typeof i10.NovoDataTableCheckboxCell, typeof i11.NovoDataTableCheckboxHeaderCell, typeof i12.NovoDataTableExpandCell, typeof i13.NovoDataTableExpandHeaderCell, typeof i14.NovoDataTable, typeof i15.NovoDataTableExpandDirective, typeof i16.NovoDataTableClearButton, typeof i17.NovoDataTableSortButton], [typeof i18.NovoDatePickerModule, typeof i19.CdkTableModule, typeof i20.CommonModule, typeof i21.FormsModule, typeof i22.NovoIconModule, typeof i23.NovoButtonModule, typeof i24.NovoDropdownModule, typeof i25.NovoFormExtrasModule, typeof i26.NovoLoadingModule, typeof i27.NovoTilesModule, typeof i28.NovoSearchBoxModule, typeof i29.NovoOptionModule, typeof i29.NovoCommonModule, typeof i30.NovoSelectModule, typeof i31.NovoTooltipModule, typeof i32.NovoCheckboxModule, typeof i33.NovoFlexModule, typeof i34.NovoFieldModule, typeof i35.ScrollingModule], [typeof i14.NovoDataTable, typeof i1.DataTableInterpolatePipe, typeof i1.DateTableDateRendererPipe, typeof i1.DateTableCurrencyRendererPipe, typeof i1.DateTableDateTimeRendererPipe, typeof i1.DateTableNumberRendererPipe, typeof i1.DateTableTimeRendererPipe, typeof i1.DataTableBigDecimalRendererPipe, typeof i5.NovoDataTableCellFilterHeader, typeof i16.NovoDataTableClearButton, typeof i17.NovoDataTableSortButton]>;
39
40
  static ɵinj: i0.ɵɵInjectorDeclaration<NovoDataTableModule>;
40
41
  }
@@ -16,19 +16,19 @@ import * as i14 from "novo-elements/elements/chips";
16
16
  import * as i15 from "novo-elements/elements/date-picker";
17
17
  import * as i16 from "novo-elements/elements/time-picker";
18
18
  import * as i17 from "novo-elements/elements/date-time-picker";
19
- import * as i18 from "novo-elements/elements/ckeditor";
19
+ import * as i18 from "novo-elements/addons/ckeditor";
20
20
  import * as i19 from "./extras/FormExtras.module";
21
21
  import * as i20 from "novo-elements/elements/quick-note";
22
22
  import * as i21 from "novo-elements/elements/header";
23
23
  import * as i22 from "novo-elements/elements/tooltip";
24
24
  import * as i23 from "novo-elements/elements/popover";
25
- import * as i24 from "novo-elements/elements/dragula";
25
+ import * as i24 from "novo-elements/addons/dragula";
26
26
  import * as i25 from "angular-imask";
27
27
  import * as i26 from "angular2-text-mask";
28
28
  import * as i27 from "novo-elements/elements/tip-well";
29
29
  import * as i28 from "novo-elements/elements/modal";
30
30
  import * as i29 from "novo-elements/elements/button";
31
- import * as i30 from "novo-elements/elements/ace-editor";
31
+ import * as i30 from "novo-elements/addons/ace-editor";
32
32
  import * as i31 from "novo-elements/elements/common";
33
33
  import * as i32 from "novo-elements/elements/checkbox";
34
34
  import * as i33 from "novo-elements/elements/icon";
@@ -8,7 +8,7 @@ import * as i6 from "novo-elements/elements/button";
8
8
  import * as i7 from "novo-elements/elements/select";
9
9
  import * as i8 from "novo-elements/elements/picker";
10
10
  import * as i9 from "novo-elements/elements/loading";
11
- import * as i10 from "novo-elements/elements/dragula";
11
+ import * as i10 from "novo-elements/addons/dragula";
12
12
  import * as i11 from "novo-elements/elements/tooltip";
13
13
  import * as i12 from "novo-elements/elements/checkbox";
14
14
  export declare class NovoFormExtrasModule {
@@ -1,7 +1,7 @@
1
1
  import { FocusKeyManager } from '@angular/cdk/a11y';
2
2
  import { ElementRef, EventEmitter, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';
3
3
  import { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';
4
- import { NovoDragulaService } from 'novo-elements/elements/dragula';
4
+ import { NovoDragulaService } from 'novo-elements/addons/dragula';
5
5
  import { NovoLabelService } from 'novo-elements/services';
6
6
  import { CanUpdateErrorStateCtor, ErrorStateMatcher } from 'novo-elements/elements/common';
7
7
  import { NovoFieldControl } from 'novo-elements/elements/field';
@@ -1,4 +1,3 @@
1
- export * from 'novo-elements/elements/ace-editor';
2
1
  export * from 'novo-elements/elements/agenda';
3
2
  export * from 'novo-elements/elements/aside';
4
3
  export * from 'novo-elements/elements/autocomplete';
@@ -10,14 +9,12 @@ export * from 'novo-elements/elements/card';
10
9
  export * from 'novo-elements/elements/category-dropdown';
11
10
  export * from 'novo-elements/elements/checkbox';
12
11
  export * from 'novo-elements/elements/chips';
13
- export * from 'novo-elements/elements/ckeditor';
14
12
  export * from 'novo-elements/elements/color-picker';
15
13
  export * from 'novo-elements/elements/common';
16
14
  export * from 'novo-elements/elements/data-table';
17
15
  export * from 'novo-elements/elements/date-picker';
18
16
  export * from 'novo-elements/elements/date-time-picker';
19
17
  export * from 'novo-elements/elements/divider';
20
- export * from 'novo-elements/elements/dragula';
21
18
  export * from 'novo-elements/elements/dropdown';
22
19
  export * from 'novo-elements/elements/expansion';
23
20
  export * from 'novo-elements/elements/field';
@@ -0,0 +1,132 @@
1
+ // NG2
2
+ import { Component, ElementRef, EventEmitter, forwardRef, Input, Output } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ // Vendor
5
+ // organize-imports-ignore
6
+ import 'brace/index';
7
+ import 'brace/mode/javascript';
8
+ import 'brace/theme/chrome';
9
+ import 'brace/ext/language_tools.js';
10
+ // APP
11
+ import { Helpers } from 'novo-elements/utils';
12
+ import * as i0 from "@angular/core";
13
+ const ACE_VALUE_ACCESSOR = {
14
+ provide: NG_VALUE_ACCESSOR,
15
+ useExisting: forwardRef(() => NovoAceEditor),
16
+ multi: true,
17
+ };
18
+ export class NovoAceEditor {
19
+ constructor(elementRef) {
20
+ this.elementRef = elementRef;
21
+ this.blur = new EventEmitter();
22
+ this.focus = new EventEmitter();
23
+ this._options = {
24
+ showPrintMargin: false,
25
+ displayIndentGuides: true,
26
+ };
27
+ this._theme = 'chrome';
28
+ this._mode = 'javascript';
29
+ this.text = '';
30
+ this.onChange = (_) => { };
31
+ this.onTouched = () => { };
32
+ }
33
+ set theme(theme) {
34
+ this.setTheme(theme);
35
+ }
36
+ set options(options) {
37
+ this.setOptions(options);
38
+ }
39
+ set mode(mode) {
40
+ this.setMode(mode);
41
+ }
42
+ ngOnDestroy() {
43
+ if (this.editor) {
44
+ this.editor.destroy();
45
+ }
46
+ }
47
+ ngOnInit() {
48
+ this.initializeEditor();
49
+ this.initializeOptions();
50
+ this.initializeEvents();
51
+ }
52
+ initializeEditor() {
53
+ const el = this.elementRef.nativeElement;
54
+ this.editor = ace.edit(el);
55
+ this.editor.$blockScrolling = Infinity;
56
+ }
57
+ initializeOptions() {
58
+ this.setOptions(this._options || {});
59
+ this.setTheme(this._theme);
60
+ this.setMode(this._mode);
61
+ }
62
+ initializeEvents() {
63
+ this.editor.on('focus', (event) => this.focus.emit(event));
64
+ this.editor.on('blur', (event) => this.focus.emit(event));
65
+ this.editor.on('change', () => this.updateText());
66
+ this.editor.on('paste', () => this.updateText());
67
+ }
68
+ updateText() {
69
+ const newVal = this.editor.getValue();
70
+ if (newVal === this.oldText) {
71
+ return;
72
+ }
73
+ this.text = newVal;
74
+ this.onChange(newVal);
75
+ this.oldText = newVal;
76
+ }
77
+ setText(text) {
78
+ if (Helpers.isBlank(text)) {
79
+ text = '';
80
+ }
81
+ if (this.text !== text) {
82
+ this.text = text;
83
+ this.editor.setValue(text);
84
+ this.onChange(text);
85
+ this.editor.clearSelection();
86
+ }
87
+ }
88
+ setOptions(options) {
89
+ this._options = options;
90
+ this.editor.setOptions(options || {});
91
+ }
92
+ setTheme(theme) {
93
+ this._theme = theme;
94
+ this.editor.setTheme(`ace/theme/${theme}`);
95
+ }
96
+ setMode(mode) {
97
+ this._mode = mode;
98
+ this.editor.getSession().setMode(`ace/mode/${this._mode}`);
99
+ }
100
+ writeValue(value) {
101
+ this.setText(value);
102
+ }
103
+ registerOnChange(fn) {
104
+ this.onChange = fn;
105
+ }
106
+ registerOnTouched(fn) {
107
+ this.onTouched = fn;
108
+ }
109
+ }
110
+ NovoAceEditor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoAceEditor, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
111
+ NovoAceEditor.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NovoAceEditor, selector: "novo-ace-editor", inputs: { theme: "theme", options: "options", mode: "mode", name: "name" }, outputs: { blur: "blur", focus: "focus" }, providers: [ACE_VALUE_ACCESSOR], ngImport: i0, template: '', isInline: true });
112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoAceEditor, decorators: [{
113
+ type: Component,
114
+ args: [{
115
+ selector: 'novo-ace-editor',
116
+ template: '',
117
+ providers: [ACE_VALUE_ACCESSOR],
118
+ }]
119
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { theme: [{
120
+ type: Input
121
+ }], options: [{
122
+ type: Input
123
+ }], mode: [{
124
+ type: Input
125
+ }], name: [{
126
+ type: Input
127
+ }], blur: [{
128
+ type: Output
129
+ }], focus: [{
130
+ type: Output
131
+ }] } });
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNlRWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvYWRkb25zL2FjZS1lZGl0b3IvQWNlRWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU07QUFDTixPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxTQUFTO0FBQ1QsMEJBQTBCO0FBQzFCLE9BQU8sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLDZCQUE2QixDQUFDO0FBQ3JDLE1BQU07QUFDTixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBSTlDLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUM1QyxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFPRixNQUFNLE9BQU8sYUFBYTtJQXFDeEIsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWxCMUMsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUIsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbkIsYUFBUSxHQUFRO1lBQ3RCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLG1CQUFtQixFQUFFLElBQUk7U0FDMUIsQ0FBQztRQUNNLFdBQU0sR0FBVyxRQUFRLENBQUM7UUFDMUIsVUFBSyxHQUFXLFlBQVksQ0FBQztRQUU3QixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBSWxCLGFBQVEs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a0IsQ0FBQztpQkFDaEM7aUdBR0ssS0FBSztzQkFEUixLQUFLO2dCQU1GLE9BQU87c0JBRFYsS0FBSztnQkFNRixJQUFJO3NCQURQLEtBQUs7Z0JBTU4sSUFBSTtzQkFESCxLQUFLO2dCQUdOLElBQUk7c0JBREgsTUFBTTtnQkFHUCxLQUFLO3NCQURKLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBORzJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuLy8gVmVuZG9yXG4vLyBvcmdhbml6ZS1pbXBvcnRzLWlnbm9yZVxuaW1wb3J0ICdicmFjZS9pbmRleCc7XG5pbXBvcnQgJ2JyYWNlL21vZGUvamF2YXNjcmlwdCc7XG5pbXBvcnQgJ2JyYWNlL3RoZW1lL2Nocm9tZSc7XG5pbXBvcnQgJ2JyYWNlL2V4dC9sYW5ndWFnZV90b29scy5qcyc7XG4vLyBBUFBcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tICdub3ZvLWVsZW1lbnRzL3V0aWxzJztcblxuZGVjbGFyZSB2YXIgYWNlOiBhbnk7XG5cbmNvbnN0IEFDRV9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5vdm9BY2VFZGl0b3IpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdm8tYWNlLWVkaXRvcicsXG4gIHRlbXBsYXRlOiAnJyxcbiAgcHJvdmlkZXJzOiBbQUNFX1ZBTFVFX0FDQ0VTU09SXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92b0FjZUVkaXRvciBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpXG4gIHNldCB0aGVtZSh0aGVtZTogYW55KSB7XG4gICAgdGhpcy5zZXRUaGVtZSh0aGVtZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgb3B0aW9ucyhvcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbW9kZShtb2RlOiBhbnkpIHtcbiAgICB0aGlzLnNldE1vZGUobW9kZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmc7XG4gIEBPdXRwdXQoKVxuICBibHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KClcbiAgZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBfb3B0aW9uczogYW55ID0ge1xuICAgIHNob3dQcmludE1hcmdpbjogZmFsc2UsXG4gICAgZGlzcGxheUluZGVudEd1aWRlczogdHJ1ZSxcbiAgfTtcbiAgcHJpdmF0ZSBfdGhlbWU6IHN0cmluZyA9ICdjaHJvbWUnO1xuICBwcml2YXRlIF9tb2RlOiBzdHJpbmcgPSAnamF2YXNjcmlwdCc7XG5cbiAgcHJpdmF0ZSB0ZXh0OiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBvbGRUZXh0OiBzdHJpbmc7XG4gIHByaXZhdGUgZWRpdG9yOiBhbnk7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVFZGl0b3IoKTtcbiAgICB0aGlzLmluaXRpYWxpemVPcHRpb25zKCk7XG4gICAgdGhpcy5pbml0aWFsaXplRXZlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVFZGl0b3IoKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KGVsKTtcbiAgICB0aGlzLmVkaXRvci4kYmxvY2tTY3JvbGxpbmcgPSBJbmZpbml0eTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU9wdGlvbnMoKSB7XG4gICAgdGhpcy5zZXRPcHRpb25zKHRoaXMuX29wdGlvbnMgfHwge30pO1xuICAgIHRoaXMuc2V0VGhlbWUodGhpcy5fdGhlbWUpO1xuICAgIHRoaXMuc2V0TW9kZSh0aGlzLl9tb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUV2ZW50cygpIHtcbiAgICB0aGlzLmVkaXRvci5vbignZm9jdXMnLCAoZXZlbnQpID0+IHRoaXMuZm9jdXMuZW1pdChldmVudCkpO1xuICAgIHRoaXMuZWRpdG9yLm9uKCdibHVyJywgKGV2ZW50KSA9PiB0aGlzLmZvY3VzLmVtaXQoZXZlbnQpKTtcbiAgICB0aGlzLmVkaXRvci5vbignY2hhbmdlJywgKCkgPT4gdGhpcy51cGRhdGVUZXh0KCkpO1xuICAgIHRoaXMuZWRpdG9yLm9uKCdwYXN0ZScsICgpID0+IHRoaXMudXBkYXRlVGV4dCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGV4dCgpIHtcbiAgICBjb25zdCBuZXdWYWwgPSB0aGlzLmVkaXRvci5nZXRWYWx1ZSgpO1xuXG4gICAgaWYgKG5ld1ZhbCA9PT0gdGhpcy5vbGRUZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0ID0gbmV3VmFsO1xuICAgIHRoaXMub25DaGFuZ2UobmV3VmFsKTtcbiAgICB0aGlzLm9sZFRleHQgPSBuZXdWYWw7XG4gIH1cblxuICBwcml2YXRlIHNldFRleHQodGV4dDogc3RyaW5nKSB7XG4gICAgaWYgKEhlbHBlcnMuaXNCbGFuayh0ZXh0KSkge1xuICAgICAgdGV4dCA9ICcnO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXh0ICE9PSB0ZXh0KSB7XG4gICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0VmFsdWUodGV4dCk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRleHQpO1xuICAgICAgdGhpcy5lZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE9wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyhvcHRpb25zIHx8IHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGhlbWUodGhlbWU6IHN0cmluZykge1xuICAgIHRoaXMuX3RoZW1lID0gdGhlbWU7XG4gICAgdGhpcy5lZGl0b3Iuc2V0VGhlbWUoYGFjZS90aGVtZS8ke3RoZW1lfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNb2RlKG1vZGU6IGFueSkge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMuZWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKGBhY2UvbW9kZS8ke3RoaXMuX21vZGV9YCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNldFRleHQodmFsdWUpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cbn1cbiJdfQ==
@@ -17,4 +17,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
17
17
  exports: [NovoAceEditor],
18
18
  }]
19
19
  }] });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNlRWRpdG9yLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2VsZW1lbnRzL2FjZS1lZGl0b3IvQWNlRWRpdG9yLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNO0FBQ04sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsTUFBTTtBQUNOLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTzVDLE1BQU0sT0FBTyxtQkFBbUI7O2lIQUFuQixtQkFBbUI7a0hBQW5CLG1CQUFtQixpQkFIZixhQUFhLGFBRGxCLFlBQVksYUFFWixhQUFhO2tIQUVaLG1CQUFtQixZQUpyQixDQUFDLFlBQVksQ0FBQzs0RkFJWixtQkFBbUI7a0JBTC9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQztpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBORzJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuLy8gQVBQXG5pbXBvcnQgeyBOb3ZvQWNlRWRpdG9yIH0gZnJvbSAnLi9BY2VFZGl0b3InO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbTm92b0FjZUVkaXRvcl0sXG4gIGV4cG9ydHM6IFtOb3ZvQWNlRWRpdG9yXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92b0FjZUVkaXRvck1vZHVsZSB7fVxuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNlRWRpdG9yLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2FkZG9ucy9hY2UtZWRpdG9yL0FjZUVkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTTtBQUNOLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE1BQU07QUFDTixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQU81QyxNQUFNLE9BQU8sbUJBQW1COztpSEFBbkIsbUJBQW1CO2tIQUFuQixtQkFBbUIsaUJBSGYsYUFBYSxhQURsQixZQUFZLGFBRVosYUFBYTtrSEFFWixtQkFBbUIsWUFKckIsQ0FBQyxZQUFZLENBQUM7NEZBSVosbUJBQW1CO2tCQUwvQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsWUFBWSxFQUFFLENBQUMsYUFBYSxDQUFDO29CQUM3QixPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTkcyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbi8vIEFQUFxuaW1wb3J0IHsgTm92b0FjZUVkaXRvciB9IGZyb20gJy4vQWNlRWRpdG9yJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW05vdm9BY2VFZGl0b3JdLFxuICBleHBvcnRzOiBbTm92b0FjZUVkaXRvcl0sXG59KVxuZXhwb3J0IGNsYXNzIE5vdm9BY2VFZGl0b3JNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './AceEditor';
2
+ export * from './AceEditor.module';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9hZGRvbnMvYWNlLWVkaXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9BY2VFZGl0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9BY2VFZGl0b3IubW9kdWxlJztcbiJdfQ==
@@ -2,4 +2,4 @@
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
4
  export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92by1lbGVtZW50cy1lbGVtZW50cy1ja2VkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2VsZW1lbnRzL2NrZWRpdG9yL25vdm8tZWxlbWVudHMtZWxlbWVudHMtY2tlZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92by1lbGVtZW50cy1hZGRvbnMtYWNlLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2FkZG9ucy9hY2UtZWRpdG9yL25vdm8tZWxlbWVudHMtYWRkb25zLWFjZS1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,253 @@
1
+ // NG2
2
+ import { Component, EventEmitter, forwardRef, Input, NgZone, Output, ViewChild } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ // Value accessor for the component (supports ngModel)
6
+ const CKEDITOR_CONTROL_VALUE_ACCESSOR = {
7
+ provide: NG_VALUE_ACCESSOR,
8
+ useExisting: forwardRef(() => NovoCKEditorElement),
9
+ multi: true,
10
+ };
11
+ /**
12
+ * CKEditor component
13
+ * Usage :
14
+ * <novo-editor [(ngModel)]="data" [config]="{...}" debounce="500"></novo-editor>
15
+ */
16
+ export class NovoCKEditorElement {
17
+ constructor(zone) {
18
+ this.zone = zone;
19
+ this.startupFocus = false;
20
+ this.fileBrowserImageUploadUrl = '';
21
+ this.disabled = false;
22
+ this.change = new EventEmitter();
23
+ this.ready = new EventEmitter();
24
+ this.blur = new EventEmitter();
25
+ this.focus = new EventEmitter();
26
+ this.paste = new EventEmitter();
27
+ this.loaded = new EventEmitter();
28
+ this._value = '';
29
+ }
30
+ get value() {
31
+ return this._value;
32
+ }
33
+ set value(v) {
34
+ if (v !== this._value) {
35
+ this._value = v;
36
+ this.onChange(v);
37
+ }
38
+ }
39
+ ngOnDestroy() {
40
+ if (this.instance) {
41
+ this.instance.focusManager.blur(true); // Remove focus from editor
42
+ setTimeout(() => {
43
+ this.instance.removeAllListeners();
44
+ const aInstance = CKEDITOR.instances[this.instance.name];
45
+ if (aInstance) {
46
+ aInstance.destroy();
47
+ }
48
+ this.instance.destroy();
49
+ this.instance = null;
50
+ });
51
+ }
52
+ }
53
+ ngAfterViewInit() {
54
+ const config = Object.assign(this.getBaseConfig(), this.config);
55
+ if (this.startupFocus) {
56
+ config.startupFocus = true;
57
+ }
58
+ if (this.disabled) {
59
+ config.readOnly = true;
60
+ }
61
+ this.ckeditorInit(config);
62
+ }
63
+ updateValue(value) {
64
+ this.zone.run(() => {
65
+ this.value = value;
66
+ this.onChange(value);
67
+ this.onTouched();
68
+ this.change.emit(value);
69
+ });
70
+ }
71
+ ckeditorInit(config) {
72
+ if (!CKEDITOR) {
73
+ console.error('Make sure to include CKEditor sources in your dependencies!');
74
+ return;
75
+ }
76
+ // CKEditor replace textarea
77
+ this.instance = CKEDITOR.replace(this.host.nativeElement, config);
78
+ // Set initial value
79
+ this.instance.setData(this.value);
80
+ // listen for instanceReady event
81
+ this.instance.on('instanceReady', (evt) => {
82
+ // send the evt to the EventEmitter
83
+ this.ready.emit(evt);
84
+ });
85
+ // CKEditor change event
86
+ this.instance.on('change', () => {
87
+ this.onTouched();
88
+ const value = this.instance.getData();
89
+ // Debounce update
90
+ if (this.debounce) {
91
+ if (this.debounceTimeout) {
92
+ clearTimeout(this.debounceTimeout);
93
+ }
94
+ this.debounceTimeout = setTimeout(() => {
95
+ this.updateValue(value);
96
+ this.debounceTimeout = null;
97
+ }, parseInt(this.debounce, 10));
98
+ }
99
+ else {
100
+ this.updateValue(value);
101
+ }
102
+ });
103
+ this.instance.on('blur', (event) => {
104
+ this.blur.emit(event);
105
+ });
106
+ this.instance.on('focus', (event) => {
107
+ this.focus.emit(event);
108
+ });
109
+ this.instance.on('paste', (event) => {
110
+ this.paste.emit(event);
111
+ });
112
+ this.instance.on('loaded', (event) => {
113
+ this.loaded.emit(event);
114
+ });
115
+ }
116
+ getBaseConfig() {
117
+ const baseConfig = {
118
+ enterMode: CKEDITOR.ENTER_BR,
119
+ entities: false,
120
+ shiftEnterMode: CKEDITOR.ENTER_P,
121
+ disableNativeSpellChecker: false,
122
+ removePlugins: 'liststyle,tabletools,contextmenu,tableselection',
123
+ extraAllowedContent: '*(*){*};table tbody tr td th[*];',
124
+ font_names: 'Arial/Arial, Helvetica, sans-serif;' +
125
+ 'Calibri/Calibri, Verdana, Geneva, sans-serif;' +
126
+ 'Comic Sans MS/Comic Sans MS, cursive;' +
127
+ 'Courier New/Courier New, Courier, monospace;' +
128
+ 'Georgia/Georgia, serif;' +
129
+ 'Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;' +
130
+ 'Tahoma/Tahoma, Geneva, sans-serif;' +
131
+ 'Times New Roman/Times New Roman, Times, serif;' +
132
+ 'Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;' +
133
+ 'Verdana/Verdana, Geneva, sans-serif',
134
+ };
135
+ const minimalConfig = {
136
+ toolbar: [
137
+ {
138
+ name: 'basicstyles',
139
+ items: [
140
+ 'Styles',
141
+ 'FontSize',
142
+ 'Bold',
143
+ 'Italic',
144
+ 'Underline',
145
+ 'TextColor',
146
+ '-',
147
+ 'NumberedList',
148
+ 'BulletedList',
149
+ 'Outdent',
150
+ 'Indent',
151
+ 'Link',
152
+ ],
153
+ },
154
+ ],
155
+ };
156
+ const extendedConfig = {
157
+ toolbar: [
158
+ { name: 'clipboard', items: ['Paste', 'PasteText', 'PasteFromWord', 'Undo', 'Redo'] },
159
+ {
160
+ name: 'paragraph',
161
+ items: [
162
+ 'NumberedList',
163
+ 'BulletedList',
164
+ 'Outdent',
165
+ 'Indent',
166
+ 'Blockquote',
167
+ 'JustifyLeft',
168
+ 'JustifyCenter',
169
+ 'JustifyRight',
170
+ 'JustifyBlock',
171
+ 'BidiLtr',
172
+ 'BidiRtl',
173
+ ],
174
+ },
175
+ { name: 'links', items: ['Link'] },
176
+ { name: 'insert', items: ['Image', 'Table', 'HorizontalRule'] },
177
+ { name: 'tools', items: ['Maximize', 'Source'] },
178
+ '/',
179
+ { name: 'basicstyles', items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript'] },
180
+ { name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize'] },
181
+ { name: 'colors', items: ['TextColor', 'BGColor'] },
182
+ ],
183
+ filebrowserImageUploadUrl: this.fileBrowserImageUploadUrl,
184
+ };
185
+ return Object.assign(baseConfig, this.minimal ? minimalConfig : extendedConfig);
186
+ }
187
+ writeValue(value) {
188
+ this._value = value;
189
+ if (this.instance) {
190
+ this.instance.setData(value);
191
+ }
192
+ }
193
+ onChange(value) { }
194
+ onTouched(event) { }
195
+ registerOnChange(fn) {
196
+ this.onChange = fn;
197
+ }
198
+ registerOnTouched(fn) {
199
+ this.onTouched = fn;
200
+ }
201
+ setDisabledState(disabled) {
202
+ this.disabled = disabled;
203
+ if (this.instance) {
204
+ CKEDITOR.instances[this.instance.name].setReadOnly(disabled);
205
+ }
206
+ }
207
+ insertText(text) {
208
+ const trimmedText = text.trim();
209
+ this.instance.insertText(trimmedText);
210
+ }
211
+ }
212
+ NovoCKEditorElement.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoCKEditorElement, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
213
+ NovoCKEditorElement.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NovoCKEditorElement, selector: "novo-editor", inputs: { config: "config", debounce: "debounce", name: "name", minimal: "minimal", startupFocus: "startupFocus", fileBrowserImageUploadUrl: "fileBrowserImageUploadUrl", disabled: "disabled", value: "value" }, outputs: { change: "change", ready: "ready", blur: "blur", focus: "focus", paste: "paste", loaded: "loaded" }, providers: [CKEDITOR_CONTROL_VALUE_ACCESSOR], viewQueries: [{ propertyName: "host", first: true, predicate: ["host"], descendants: true }], ngImport: i0, template: '<textarea [name]="name" [id]="name" #host></textarea>', isInline: true });
214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoCKEditorElement, decorators: [{
215
+ type: Component,
216
+ args: [{
217
+ selector: 'novo-editor',
218
+ providers: [CKEDITOR_CONTROL_VALUE_ACCESSOR],
219
+ template: '<textarea [name]="name" [id]="name" #host></textarea>',
220
+ }]
221
+ }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { config: [{
222
+ type: Input
223
+ }], debounce: [{
224
+ type: Input
225
+ }], name: [{
226
+ type: Input
227
+ }], minimal: [{
228
+ type: Input
229
+ }], startupFocus: [{
230
+ type: Input
231
+ }], fileBrowserImageUploadUrl: [{
232
+ type: Input
233
+ }], disabled: [{
234
+ type: Input
235
+ }], change: [{
236
+ type: Output
237
+ }], ready: [{
238
+ type: Output
239
+ }], blur: [{
240
+ type: Output
241
+ }], focus: [{
242
+ type: Output
243
+ }], paste: [{
244
+ type: Output
245
+ }], loaded: [{
246
+ type: Output
247
+ }], host: [{
248
+ type: ViewChild,
249
+ args: ['host']
250
+ }], value: [{
251
+ type: Input
252
+ }] } });
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ0tFZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9hZGRvbnMvY2tlZGl0b3IvQ0tFZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTTtBQUNOLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBYSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hJLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFekUsc0RBQXNEO0FBQ3RELE1BQU0sK0JBQStCLEdBQUc7SUFDdEMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQVNGOzs7O0dBSUc7QUFNSCxNQUFNLE9BQU8sbUJBQW1CO0lBbUM5QixZQUFvQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQXpCaEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFFOUIsOEJBQXlCLEdBQVcsRUFBRSxDQUFDO1FBRXZDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFHMUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUIsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFM0IsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUIsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFM0IsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFM0IsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJNUIsV0FBTSxHQUFXLEVBQUUsQ0FBQztJQUllLENBQUM7SUFFcEMsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUNJLEtBQUssQ0FBQyxDQUFDO1FBQ1QsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsMkJBQTJCO1lBQ2xFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pELElBQUksU0FBUyxFQUFFO29CQUNiLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDckI7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixNQUFNLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUM1QjtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUN4QjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFNO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7WUFDN0UsT0FBTztTQUNSO1FBRUQsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVsRSxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLGlDQUFpQztRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN4QyxtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUM5QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUV0QyxrQkFBa0I7WUFDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7aUJBQ3BDO2dCQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQzlCLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDekI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLFVBQVUsR0FBRztZQUNqQixTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVE7WUFDNUIsUUFBUSxFQUFFLEtBQUs7WUFDZixjQUFjLEVBQUUsUUFBUSxDQUFDLE9BQU87WUFDaEMseUJBQXlCLEVBQUUsS0FBSztZQUNoQyxhQUFhLEVBQUUsaURBQWlEO1lBQ2hFLG1CQUFtQixFQUFFLGtDQUFrQztZQUN2RCxVQUFVLEVBQ1IscUNBQXFDO2dCQUNyQywrQ0FBK0M7Z0JBQy9DLHVDQUF1QztnQkFDdkMsOENBQThDO2dCQUM5Qyx5QkFBeUI7Z0JBQ3pCLHFFQUFxRTtnQkFDckUsb0NBQW9DO2dCQUNwQyxnREFBZ0Q7Z0JBQ2hELG1EQUFtRDtnQkFDbkQscUNBQXFDO1NBQ3hDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRztZQUNwQixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLEtBQUssRUFBRTt3QkFDTCxRQUFRO3dCQUNSLFVBQVU7d0JBQ1YsTUFBTTt3QkFDTixRQUFRO3dCQUNSLFdBQVc7d0JBQ1gsV0FBVzt3QkFDWCxHQUFHO3dCQUNILGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxTQUFTO3dCQUNULFFBQVE7d0JBQ1IsTUFBTTtxQkFDUDtpQkFDRjthQUNGO1NBQ0YsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHO1lBQ3JCLE9BQU8sRUFBRTtnQkFDUCxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNyRjtvQkFDRSxJQUFJLEVBQUUsV0FBVztvQkFDakIsS0FBSyxFQUFFO3dCQUNMLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxTQUFTO3dCQUNULFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLFNBQVM7d0JBQ1QsU0FBUztxQkFDVjtpQkFDRjtnQkFDRCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2xDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLEVBQUU7Z0JBQy9ELEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ2hELEdBQUc7Z0JBQ0gsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLEVBQUU7Z0JBQ3JHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtnQkFDbkUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTthQUNwRDtZQUNELHlCQUF5QixFQUFFLElBQUksQ0FBQyx5QkFBeUI7U0FDMUQsQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQUs7UUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVcsSUFBRyxDQUFDO0lBRXhCLFNBQVMsQ0FBQyxLQUFNLElBQUcsQ0FBQztJQUVwQixnQkFBZ0IsQ0FBQyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFFO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFpQjtRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM5RDtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBSTtRQUNiLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDOztpSEEvT1UsbUJBQW1CO3FHQUFuQixtQkFBbUIsdVdBSG5CLENBQUMsK0JBQStCLENBQUMsd0hBQ2xDLHVEQUF1RDs0RkFFdEQsbUJBQW1CO2tCQUwvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixTQUFTLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztvQkFDNUMsUUFBUSxFQUFFLHVEQUF1RDtpQkFDbEU7NkZBR0MsTUFBTTtzQkFETCxLQUFLO2dCQUdOLFFBQVE7c0JBRFAsS0FBSztnQkFHTixJQUFJO3NCQURILEtBQUs7Z0JBR04sT0FBTztzQkFETixLQUFLO2dCQUdOLFlBQVk7c0JBRFgsS0FBSztnQkFHTix5QkFBeUI7c0JBRHhCLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLE1BQU07c0JBREwsTUFBTTtnQkFHUCxLQUFLO3NCQURKLE1BQU07Z0JBR1AsSUFBSTtzQkFESCxNQUFNO2dCQUdQLEtBQUs7c0JBREosTUFBTTtnQkFHUCxLQUFLO3NCQURKLE1BQU07Z0JBR1AsTUFBTTtzQkFETCxNQUFNO2dCQUdQLElBQUk7c0JBREgsU0FBUzt1QkFBQyxNQUFNO2dCQWNiLEtBQUs7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIE5HMlxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuLy8gVmFsdWUgYWNjZXNzb3IgZm9yIHRoZSBjb21wb25lbnQgKHN1cHBvcnRzIG5nTW9kZWwpXG5jb25zdCBDS0VESVRPUl9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTm92b0NLRWRpdG9yRWxlbWVudCksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuZGVjbGFyZSB2YXIgQ0tFRElUT1I6IGFueTtcbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgQ0tFRElUT1I6IGFueTtcbiAgfVxufVxuXG4vKipcbiAqIENLRWRpdG9yIGNvbXBvbmVudFxuICogVXNhZ2UgOlxuICogIDxub3ZvLWVkaXRvciBbKG5nTW9kZWwpXT1cImRhdGFcIiBbY29uZmlnXT1cInsuLi59XCIgZGVib3VuY2U9XCI1MDBcIj48L25vdm8tZWRpdG9yPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdub3ZvLWVkaXRvcicsXG4gIHByb3ZpZGVyczogW0NLRURJVE9SX0NPTlRST0xfVkFMVUVfQUNDRVNTT1JdLFxuICB0ZW1wbGF0ZTogJzx0ZXh0YXJlYSBbbmFtZV09XCJuYW1lXCIgW2lkXT1cIm5hbWVcIiAjaG9zdD48L3RleHRhcmVhPicsXG59KVxuZXhwb3J0IGNsYXNzIE5vdm9DS0VkaXRvckVsZW1lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KClcbiAgY29uZmlnO1xuICBASW5wdXQoKVxuICBkZWJvdW5jZTtcbiAgQElucHV0KClcbiAgbmFtZTtcbiAgQElucHV0KClcbiAgbWluaW1hbDtcbiAgQElucHV0KClcbiAgc3RhcnR1cEZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGZpbGVCcm93c2VySW1hZ2VVcGxvYWRVcmw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKVxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKVxuICBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKVxuICByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpXG4gIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKVxuICBmb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpXG4gIHBhc3RlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KClcbiAgbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkKCdob3N0JylcbiAgaG9zdDtcblxuICBfdmFsdWU6IHN0cmluZyA9ICcnO1xuICBpbnN0YW5jZTtcbiAgZGVib3VuY2VUaW1lb3V0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgem9uZTogTmdab25lKSB7fVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICh2ICE9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgdGhpcy5vbkNoYW5nZSh2KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgdGhpcy5pbnN0YW5jZS5mb2N1c01hbmFnZXIuYmx1cih0cnVlKTsgLy8gUmVtb3ZlIGZvY3VzIGZyb20gZWRpdG9yXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgY29uc3QgYUluc3RhbmNlID0gQ0tFRElUT1IuaW5zdGFuY2VzW3RoaXMuaW5zdGFuY2UubmFtZV07XG4gICAgICAgIGlmIChhSW5zdGFuY2UpIHtcbiAgICAgICAgICBhSW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluc3RhbmNlID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHRoaXMuZ2V0QmFzZUNvbmZpZygpLCB0aGlzLmNvbmZpZyk7XG4gICAgaWYgKHRoaXMuc3RhcnR1cEZvY3VzKSB7XG4gICAgICBjb25maWcuc3RhcnR1cEZvY3VzID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGNvbmZpZy5yZWFkT25seSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuY2tlZGl0b3JJbml0KGNvbmZpZyk7XG4gIH1cblxuICB1cGRhdGVWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNrZWRpdG9ySW5pdChjb25maWcpIHtcbiAgICBpZiAoIUNLRURJVE9SKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNYWtlIHN1cmUgdG8gaW5jbHVkZSBDS0VkaXRvciBzb3VyY2VzIGluIHlvdXIgZGVwZW5kZW5jaWVzIScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENLRWRpdG9yIHJlcGxhY2UgdGV4dGFyZWFcbiAgICB0aGlzLmluc3RhbmNlID0gQ0tFRElUT1IucmVwbGFjZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgY29uZmlnKTtcblxuICAgIC8vIFNldCBpbml0aWFsIHZhbHVlXG4gICAgdGhpcy5pbnN0YW5jZS5zZXREYXRhKHRoaXMudmFsdWUpO1xuXG4gICAgLy8gbGlzdGVuIGZvciBpbnN0YW5jZVJlYWR5IGV2ZW50XG4gICAgdGhpcy5pbnN0YW5jZS5vbignaW5zdGFuY2VSZWFkeScsIChldnQpID0+IHtcbiAgICAgIC8vIHNlbmQgdGhlIGV2dCB0byB0aGUgRXZlbnRFbWl0dGVyXG4gICAgICB0aGlzLnJlYWR5LmVtaXQoZXZ0KTtcbiAgICB9KTtcblxuICAgIC8vIENLRWRpdG9yIGNoYW5nZSBldmVudFxuICAgIHRoaXMuaW5zdGFuY2Uub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5zdGFuY2UuZ2V0RGF0YSgpO1xuXG4gICAgICAvLyBEZWJvdW5jZSB1cGRhdGVcbiAgICAgIGlmICh0aGlzLmRlYm91bmNlKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYm91bmNlVGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IG51bGw7XG4gICAgICAgIH0sIHBhcnNlSW50KHRoaXMuZGVib3VuY2UsIDEwKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmluc3RhbmNlLm9uKCdibHVyJywgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJsdXIuZW1pdChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5pbnN0YW5jZS5vbignZm9jdXMnLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuZm9jdXMuZW1pdChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5pbnN0YW5jZS5vbigncGFzdGUnLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMucGFzdGUuZW1pdChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5pbnN0YW5jZS5vbignbG9hZGVkJywgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmxvYWRlZC5lbWl0KGV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEJhc2VDb25maWcoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3QgYmFzZUNvbmZpZyA9IHtcbiAgICAgIGVudGVyTW9kZTogQ0tFRElUT1IuRU5URVJfQlIsXG4gICAgICBlbnRpdGllczogZmFsc2UsXG4gICAgICBzaGlmdEVudGVyTW9kZTogQ0tFRElUT1IuRU5URVJfUCxcbiAgICAgIGRpc2FibGVOYXRpdmVTcGVsbENoZWNrZXI6IGZhbHNlLFxuICAgICAgcmVtb3ZlUGx1Z2luczogJ2xpc3RzdHlsZSx0YWJsZXRvb2xzLGNvbnRleHRtZW51LHRhYmxlc2VsZWN0aW9uJywgLy8gYWxsb3dzIGJyb3dzZXIgYmFzZWQgc3BlbGwgY2hlY2tpbmdcbiAgICAgIGV4dHJhQWxsb3dlZENvbnRlbnQ6ICcqKCopeyp9O3RhYmxlIHRib2R5IHRyIHRkIHRoWypdOycsIC8vIGFsbG93cyBjbGFzcyBuYW1lcyAoKikgYW5kIGlubGluZSBzdHlsZXMgeyp9IGZvciBhbGwgYW5kIGF0dHJpYnV0ZXMgWypdIG9uIHRhYmxlc1xuICAgICAgZm9udF9uYW1lczpcbiAgICAgICAgJ0FyaWFsL0FyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7JyArXG4gICAgICAgICdDYWxpYnJpL0NhbGlicmksIFZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZjsnICtcbiAgICAgICAgJ0NvbWljIFNhbnMgTVMvQ29taWMgU2FucyBNUywgY3Vyc2l2ZTsnICtcbiAgICAgICAgJ0NvdXJpZXIgTmV3L0NvdXJpZXIgTmV3LCBDb3VyaWVyLCBtb25vc3BhY2U7JyArXG4gICAgICAgICdHZW9yZ2lhL0dlb3JnaWEsIHNlcmlmOycgK1xuICAgICAgICAnTHVjaWRhIFNhbnMgVW5pY29kZS9MdWNpZGEgU2FucyBVbmljb2RlLCBMdWNpZGEgR3JhbmRlLCBzYW5zLXNlcmlmOycgK1xuICAgICAgICAnVGFob21hL1RhaG9tYSwgR2VuZXZhLCBzYW5zLXNlcmlmOycgK1xuICAgICAgICAnVGltZXMgTmV3IFJvbWFuL1RpbWVzIE5ldyBSb21hbiwgVGltZXMsIHNlcmlmOycgK1xuICAgICAgICAnVHJlYnVjaGV0IE1TL1RyZWJ1Y2hldCBNUywgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOycgK1xuICAgICAgICAnVmVyZGFuYS9WZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWYnLFxuICAgIH07XG5cbiAgICBjb25zdCBtaW5pbWFsQ29uZmlnID0ge1xuICAgICAgdG9vbGJhcjogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2Jhc2ljc3R5bGVzJyxcbiAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgJ1N0eWxlcycsXG4gICAgICAgICAgICAnRm9udFNpemUnLFxuICAgICAgICAgICAgJ0JvbGQnLFxuICAgICAgICAgICAgJ0l0YWxpYycsXG4gICAgICAgICAgICAnVW5kZXJsaW5lJyxcbiAgICAgICAgICAgICdUZXh0Q29sb3InLFxuICAgICAgICAgICAgJy0nLFxuICAgICAgICAgICAgJ051bWJlcmVkTGlzdCcsXG4gICAgICAgICAgICAnQnVsbGV0ZWRMaXN0JyxcbiAgICAgICAgICAgICdPdXRkZW50JyxcbiAgICAgICAgICAgICdJbmRlbnQnLFxuICAgICAgICAgICAgJ0xpbmsnLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBjb25zdCBleHRlbmRlZENvbmZpZyA9IHtcbiAgICAgIHRvb2xiYXI6IFtcbiAgICAgICAgeyBuYW1lOiAnY2xpcGJvYXJkJywgaXRlbXM6IFsnUGFzdGUnLCAnUGFzdGVUZXh0JywgJ1Bhc3RlRnJvbVdvcmQnLCAnVW5kbycsICdSZWRvJ10gfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwYXJhZ3JhcGgnLFxuICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAnTnVtYmVyZWRMaXN0JyxcbiAgICAgICAgICAgICdCdWxsZXRlZExpc3QnLFxuICAgICAgICAgICAgJ091dGRlbnQnLFxuICAgICAgICAgICAgJ0luZGVudCcsXG4gICAgICAgICAgICAnQmxvY2txdW90ZScsXG4gICAgICAgICAgICAnSnVzdGlmeUxlZnQnLFxuICAgICAgICAgICAgJ0p1c3RpZnlDZW50ZXInLFxuICAgICAgICAgICAgJ0p1c3RpZnlSaWdodCcsXG4gICAgICAgICAgICAnSnVzdGlmeUJsb2NrJyxcbiAgICAgICAgICAgICdCaWRpTHRyJyxcbiAgICAgICAgICAgICdCaWRpUnRsJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7IG5hbWU6ICdsaW5rcycsIGl0ZW1zOiBbJ0xpbmsnXSB9LFxuICAgICAgICB7IG5hbWU6ICdpbnNlcnQnLCBpdGVtczogWydJbWFnZScsICdUYWJsZScsICdIb3Jpem9udGFsUnVsZSddIH0sXG4gICAgICAgIHsgbmFtZTogJ3Rvb2xzJywgaXRlbXM6IFsnTWF4aW1pemUnLCAnU291cmNlJ10gfSxcbiAgICAgICAgJy8nLCAvLyBsaW5lIGJyZWFrXG4gICAgICAgIHsgbmFtZTogJ2Jhc2ljc3R5bGVzJywgaXRlbXM6IFsnQm9sZCcsICdJdGFsaWMnLCAnVW5kZXJsaW5lJywgJ1N0cmlrZScsICdTdWJzY3JpcHQnLCAnU3VwZXJzY3JpcHQnXSB9LFxuICAgICAgICB7IG5hbWU6ICdzdHlsZXMnLCBpdGVtczogWydTdHlsZXMnLCAnRm9ybWF0JywgJ0ZvbnQnLCAnRm9udFNpemUnXSB9LFxuICAgICAgICB7IG5hbWU6ICdjb2xvcnMnLCBpdGVtczogWydUZXh0Q29sb3InLCAnQkdDb2xvciddIH0sXG4gICAgICBdLFxuICAgICAgZmlsZWJyb3dzZXJJbWFnZVVwbG9hZFVybDogdGhpcy5maWxlQnJvd3NlckltYWdlVXBsb2FkVXJsLFxuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihiYXNlQ29uZmlnLCB0aGlzLm1pbmltYWwgPyBtaW5pbWFsQ29uZmlnIDogZXh0ZW5kZWRDb25maWcpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2Uuc2V0RGF0YSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2UodmFsdWU/OiBhbnkpIHt9XG5cbiAgb25Ub3VjaGVkKGV2ZW50Pykge31cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuKSB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgQ0tFRElUT1IuaW5zdGFuY2VzW3RoaXMuaW5zdGFuY2UubmFtZV0uc2V0UmVhZE9ubHkoZGlzYWJsZWQpO1xuICAgIH1cbiAgfVxuXG4gIGluc2VydFRleHQodGV4dCkge1xuICAgIGNvbnN0IHRyaW1tZWRUZXh0ID0gdGV4dC50cmltKCk7XG4gICAgdGhpcy5pbnN0YW5jZS5pbnNlcnRUZXh0KHRyaW1tZWRUZXh0KTtcbiAgfVxufVxuIl19