@skyux/text-editor 8.6.0 → 9.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/documentation.json +185 -105
  2. package/esm2022/lib/modules/rich-text-display/rich-text-display.component.mjs +42 -0
  3. package/{esm2020 → esm2022}/lib/modules/rich-text-display/rich-text-display.module.mjs +5 -5
  4. package/{esm2020 → esm2022}/lib/modules/shared/sky-text-editor-resources.module.mjs +11 -11
  5. package/esm2022/lib/modules/text-editor/menubar/text-editor-menubar.component.mjs +197 -0
  6. package/esm2022/lib/modules/text-editor/services/text-editor-adapter.service.mjs +431 -0
  7. package/{esm2020 → esm2022}/lib/modules/text-editor/services/text-editor-selection.service.mjs +4 -4
  8. package/esm2022/lib/modules/text-editor/services/text-editor.service.mjs +59 -0
  9. package/esm2022/lib/modules/text-editor/services/text-sanitization.service.mjs +38 -0
  10. package/esm2022/lib/modules/text-editor/text-editor.component.mjs +410 -0
  11. package/{esm2020 → esm2022}/lib/modules/text-editor/text-editor.module.mjs +41 -41
  12. package/esm2022/lib/modules/text-editor/toolbar/text-editor-toolbar.component.mjs +207 -0
  13. package/esm2022/lib/modules/text-editor/url-modal/text-editor-url-modal.component.mjs +119 -0
  14. package/fesm2022/skyux-text-editor.mjs +1828 -0
  15. package/fesm2022/skyux-text-editor.mjs.map +1 -0
  16. package/lib/modules/rich-text-display/rich-text-display.component.d.ts +1 -1
  17. package/lib/modules/text-editor/menubar/text-editor-menubar.component.d.ts +1 -1
  18. package/lib/modules/text-editor/text-editor.component.d.ts +4 -2
  19. package/lib/modules/text-editor/toolbar/text-editor-toolbar.component.d.ts +1 -1
  20. package/package.json +20 -26
  21. package/esm2020/lib/modules/rich-text-display/rich-text-display.component.mjs +0 -44
  22. package/esm2020/lib/modules/text-editor/menubar/text-editor-menubar.component.mjs +0 -197
  23. package/esm2020/lib/modules/text-editor/services/text-editor-adapter.service.mjs +0 -421
  24. package/esm2020/lib/modules/text-editor/services/text-editor.service.mjs +0 -64
  25. package/esm2020/lib/modules/text-editor/services/text-sanitization.service.mjs +0 -43
  26. package/esm2020/lib/modules/text-editor/text-editor.component.mjs +0 -382
  27. package/esm2020/lib/modules/text-editor/toolbar/text-editor-toolbar.component.mjs +0 -204
  28. package/esm2020/lib/modules/text-editor/url-modal/text-editor-url-modal.component.mjs +0 -118
  29. package/fesm2015/skyux-text-editor.mjs +0 -1781
  30. package/fesm2015/skyux-text-editor.mjs.map +0 -1
  31. package/fesm2020/skyux-text-editor.mjs +0 -1792
  32. package/fesm2020/skyux-text-editor.mjs.map +0 -1
  33. /package/{esm2020 → esm2022}/index.mjs +0 -0
  34. /package/{esm2020 → esm2022}/lib/modules/shared/forms-utility.mjs +0 -0
  35. /package/{esm2020 → esm2022}/lib/modules/text-editor/defaults/font-list-defaults.mjs +0 -0
  36. /package/{esm2020 → esm2022}/lib/modules/text-editor/defaults/font-size-list-defaults.mjs +0 -0
  37. /package/{esm2020 → esm2022}/lib/modules/text-editor/defaults/menu-defaults.mjs +0 -0
  38. /package/{esm2020 → esm2022}/lib/modules/text-editor/defaults/style-state-defaults.mjs +0 -0
  39. /package/{esm2020 → esm2022}/lib/modules/text-editor/defaults/toolbar-action-defaults.mjs +0 -0
  40. /package/{esm2020 → esm2022}/lib/modules/text-editor/types/editor-command.mjs +0 -0
  41. /package/{esm2020 → esm2022}/lib/modules/text-editor/types/editor-setting.mjs +0 -0
  42. /package/{esm2020 → esm2022}/lib/modules/text-editor/types/font-state.mjs +0 -0
  43. /package/{esm2020 → esm2022}/lib/modules/text-editor/types/menu-type.mjs +0 -0
  44. /package/{esm2020 → esm2022}/lib/modules/text-editor/types/style-state.mjs +0 -0
  45. /package/{esm2020 → esm2022}/lib/modules/text-editor/types/text-editor-merge-field.mjs +0 -0
  46. /package/{esm2020 → esm2022}/lib/modules/text-editor/types/toolbar-action-type.mjs +0 -0
  47. /package/{esm2020 → esm2022}/lib/modules/text-editor/url-modal/text-editor-url-modal-context.mjs +0 -0
  48. /package/{esm2020 → esm2022}/lib/modules/text-editor/url-modal/text-editor-url-modal-result.mjs +0 -0
  49. /package/{esm2020 → esm2022}/lib/modules/text-editor/url-modal/text-editor-url-target.mjs +0 -0
  50. /package/{esm2020 → esm2022}/skyux-text-editor.mjs +0 -0
@@ -0,0 +1,38 @@
1
+ import { Injectable } from '@angular/core';
2
+ import createDOMPurify from 'dompurify';
3
+ import * as i0 from "@angular/core";
4
+ const domPurify = createDOMPurify(window);
5
+ domPurify.addHook('afterSanitizeAttributes', (node) => {
6
+ // Set all elements owning target to target=_blank
7
+ // so we only allow the target attribute with that value.
8
+ if (node.getAttribute('target')) {
9
+ node.setAttribute('target', '_blank');
10
+ node.setAttribute('rel', 'noopener noreferrer');
11
+ }
12
+ });
13
+ /**
14
+ * The `SkyTextSanitizationService` user the `DOMPurify` library to sanitize strings for use
15
+ * in the DOM. `DOMPurify` allows more customization than Angular's internal `DomSanitizer` so we
16
+ * can preserve `<style>` tags and allow `target` attributes for new tab links.
17
+ * @internal
18
+ */
19
+ export class SkyTextSanitizationService {
20
+ #allowedAttributes = ['target'];
21
+ /**
22
+ * Returns a sanitized string, allowing target attribute for new tab links.
23
+ */
24
+ sanitize(htmlString) {
25
+ return domPurify.sanitize(htmlString, {
26
+ ADD_ATTR: this.#allowedAttributes,
27
+ });
28
+ }
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextSanitizationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
30
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextSanitizationService, providedIn: 'root' }); }
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextSanitizationService, decorators: [{
33
+ type: Injectable,
34
+ args: [{
35
+ providedIn: 'root',
36
+ }]
37
+ }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1zYW5pdGl6YXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3Ivc2VydmljZXMvdGV4dC1zYW5pdGl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sZUFBZSxNQUFNLFdBQVcsQ0FBQzs7QUFFeEMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFhLEVBQUUsRUFBRTtJQUM3RCxrREFBa0Q7SUFDbEQseURBQXlEO0lBQ3pELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0tBQ2pEO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUlILE1BQU0sT0FBTywwQkFBMEI7SUFDckMsa0JBQWtCLEdBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUUxQzs7T0FFRztJQUNJLFFBQVEsQ0FBQyxVQUFrQjtRQUNoQyxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQ3BDLFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBVlUsMEJBQTBCO2tIQUExQiwwQkFBMEIsY0FGekIsTUFBTTs7MkZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IGNyZWF0ZURPTVB1cmlmeSBmcm9tICdkb21wdXJpZnknO1xuXG5jb25zdCBkb21QdXJpZnkgPSBjcmVhdGVET01QdXJpZnkod2luZG93KTtcblxuZG9tUHVyaWZ5LmFkZEhvb2soJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJywgKG5vZGU6IEVsZW1lbnQpID0+IHtcbiAgLy8gU2V0IGFsbCBlbGVtZW50cyBvd25pbmcgdGFyZ2V0IHRvIHRhcmdldD1fYmxhbmtcbiAgLy8gc28gd2Ugb25seSBhbGxvdyB0aGUgdGFyZ2V0IGF0dHJpYnV0ZSB3aXRoIHRoYXQgdmFsdWUuXG4gIGlmIChub2RlLmdldEF0dHJpYnV0ZSgndGFyZ2V0JykpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKCdyZWwnLCAnbm9vcGVuZXIgbm9yZWZlcnJlcicpO1xuICB9XG59KTtcblxuLyoqXG4gKiBUaGUgYFNreVRleHRTYW5pdGl6YXRpb25TZXJ2aWNlYCB1c2VyIHRoZSBgRE9NUHVyaWZ5YCBsaWJyYXJ5IHRvIHNhbml0aXplIHN0cmluZ3MgZm9yIHVzZVxuICogaW4gdGhlIERPTS4gYERPTVB1cmlmeWAgYWxsb3dzIG1vcmUgY3VzdG9taXphdGlvbiB0aGFuIEFuZ3VsYXIncyBpbnRlcm5hbCBgRG9tU2FuaXRpemVyYCBzbyB3ZVxuICogY2FuIHByZXNlcnZlIGA8c3R5bGU+YCB0YWdzIGFuZCBhbGxvdyBgdGFyZ2V0YCBhdHRyaWJ1dGVzIGZvciBuZXcgdGFiIGxpbmtzLlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZSB7XG4gICNhbGxvd2VkQXR0cmlidXRlczogc3RyaW5nW10gPSBbJ3RhcmdldCddO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2FuaXRpemVkIHN0cmluZywgYWxsb3dpbmcgdGFyZ2V0IGF0dHJpYnV0ZSBmb3IgbmV3IHRhYiBsaW5rcy5cbiAgICovXG4gIHB1YmxpYyBzYW5pdGl6ZShodG1sU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBkb21QdXJpZnkuc2FuaXRpemUoaHRtbFN0cmluZywge1xuICAgICAgQUREX0FUVFI6IHRoaXMuI2FsbG93ZWRBdHRyaWJ1dGVzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,410 @@
1
+ import { ChangeDetectionStrategy, Component, HostBinding, Input, TemplateRef, ViewChild, ViewEncapsulation, inject, } from '@angular/core';
2
+ import { SkyInputBoxHostService } from '@skyux/forms';
3
+ import { Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import { SkyFormsUtility } from '../shared/forms-utility';
6
+ import { FONT_LIST_DEFAULTS } from './defaults/font-list-defaults';
7
+ import { FONT_SIZE_LIST_DEFAULTS } from './defaults/font-size-list-defaults';
8
+ import { MENU_DEFAULTS } from './defaults/menu-defaults';
9
+ import { STYLE_STATE_DEFAULTS } from './defaults/style-state-defaults';
10
+ import { TOOLBAR_ACTION_DEFAULTS } from './defaults/toolbar-action-defaults';
11
+ import { SkyTextEditorAdapterService } from './services/text-editor-adapter.service';
12
+ import { SkyTextEditorSelectionService } from './services/text-editor-selection.service';
13
+ import { SkyTextEditorService } from './services/text-editor.service';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@skyux/core";
16
+ import * as i2 from "./services/text-editor-adapter.service";
17
+ import * as i3 from "./services/text-editor.service";
18
+ import * as i4 from "./services/text-sanitization.service";
19
+ import * as i5 from "@angular/forms";
20
+ import * as i6 from "@angular/common";
21
+ import * as i7 from "@skyux/layout";
22
+ import * as i8 from "./toolbar/text-editor-toolbar.component";
23
+ import * as i9 from "./menubar/text-editor-menubar.component";
24
+ /**
25
+ * The text editor component lets users format and manipulate text.
26
+ */
27
+ export class SkyTextEditorComponent {
28
+ /**
29
+ * Whether to disable the text editor on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.
30
+ * To set the disabled state on reactive forms, use the `FormControl` instead.
31
+ * @default false
32
+ */
33
+ set disabled(value) {
34
+ const coercedValue = SkyFormsUtility.coerceBooleanProperty(value);
35
+ if (coercedValue !== this.disabled) {
36
+ this.#_disabled = coercedValue;
37
+ // Update focusableChildren inside the iframe.
38
+ let focusableChildren;
39
+ /* istanbul ignore else */
40
+ if (this.iframeRef) {
41
+ focusableChildren = this.#coreAdapterService.getFocusableChildren(this.iframeRef.nativeElement.contentDocument.body, {
42
+ ignoreVisibility: true,
43
+ ignoreTabIndex: true,
44
+ });
45
+ if (this.#_disabled) {
46
+ this.#adapterService.disableEditor(focusableChildren, this.iframeRef.nativeElement);
47
+ }
48
+ else {
49
+ this.#adapterService.enableEditor(focusableChildren, this.iframeRef.nativeElement);
50
+ }
51
+ this.#changeDetector.markForCheck();
52
+ }
53
+ }
54
+ }
55
+ get disabled() {
56
+ return this.#_disabled;
57
+ }
58
+ /**
59
+ * The fonts to include in the font picker.
60
+ * @default [{name: 'Blackbaud Sans', value: '"Blackbaud Sans", Arial, sans-serif'}, {name: 'Arial', value: 'Arial'}, {name: 'Arial Black', value: '"Arial Black"'}, {name: 'Courier New', value: '"Courier New"'}, {name: 'Georgia', value: 'Georgia, serif'}, {name: 'Tahoma', value: 'Tahoma, Geneva, sans-serif'}, {name: 'Times New Roman', value: '"Times New Roman"'}, {name: 'Trebuchet MS', value: '"Trebuchet MS", sans-serif'}, {name: 'Verdana', value: 'Verdana, Geneva, sans-serif'}]
61
+ */
62
+ set fontList(value) {
63
+ this.#_fontList = value || FONT_LIST_DEFAULTS;
64
+ }
65
+ get fontList() {
66
+ return this.#_fontList;
67
+ }
68
+ /**
69
+ * The font sizes to include in the font size picker.
70
+ * @default [6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 36, 48]
71
+ */
72
+ set fontSizeList(value) {
73
+ this.#_fontSizeList = value || FONT_SIZE_LIST_DEFAULTS;
74
+ }
75
+ get fontSizeList() {
76
+ return this.#_fontSizeList;
77
+ }
78
+ /**
79
+ * The unique ID attribute for the text editor.
80
+ * By default, the component generates a random ID.
81
+ */
82
+ set id(value) {
83
+ this.#id = value || this.#defaultId;
84
+ }
85
+ get id() {
86
+ return this.#id;
87
+ }
88
+ /**
89
+ * The initial styles for all content, including background color, font size, and link state.
90
+ */
91
+ set initialStyleState(state) {
92
+ // Do not update the state after initialization has taken place
93
+ /* istanbul ignore else */
94
+ if (!this.#initialized) {
95
+ this.#_initialStyleState = {
96
+ ...STYLE_STATE_DEFAULTS,
97
+ ...state,
98
+ };
99
+ }
100
+ }
101
+ get initialStyleState() {
102
+ return this.#_initialStyleState;
103
+ }
104
+ /**
105
+ * The menus to include in the menu bar.
106
+ * @default [ 'edit', 'format' ]
107
+ */
108
+ set menus(value) {
109
+ this.#_menus = value || MENU_DEFAULTS;
110
+ }
111
+ get menus() {
112
+ return this.#_menus;
113
+ }
114
+ /**
115
+ * The merge fields to include in the merge field menu.
116
+ */
117
+ set mergeFields(value) {
118
+ this.#_mergeFields = value || [];
119
+ }
120
+ get mergeFields() {
121
+ return this.#_mergeFields;
122
+ }
123
+ /**
124
+ * Placeholder text to display when the text entry area is empty.
125
+ */
126
+ set placeholder(value) {
127
+ /* istanbul ignore else */
128
+ if (value !== this.#_placeholder) {
129
+ this.#_placeholder = value || '';
130
+ if (this.#initialized) {
131
+ this.#adapterService.setPlaceholder(value);
132
+ }
133
+ }
134
+ }
135
+ get placeholder() {
136
+ return this.#_placeholder;
137
+ }
138
+ /**
139
+ * The actions to include in the toolbar and determines their order.
140
+ * @default [ 'font-family', 'font-size', 'font-style', 'color', 'list', 'link ]
141
+ */
142
+ set toolbarActions(value) {
143
+ this.#_toolbarActions = value || TOOLBAR_ACTION_DEFAULTS;
144
+ }
145
+ get toolbarActions() {
146
+ return this.#_toolbarActions;
147
+ }
148
+ /**
149
+ * The internal value of the control.
150
+ */
151
+ set value(value) {
152
+ // Normalize value and set any empty state to an empty string.
153
+ let normalizedValue;
154
+ const valueTrimmed = value?.trim();
155
+ if (!value ||
156
+ valueTrimmed === '<p></p>' ||
157
+ valueTrimmed === '<br>' ||
158
+ valueTrimmed === '<p><br></p>') {
159
+ normalizedValue = '';
160
+ }
161
+ else {
162
+ normalizedValue = value;
163
+ }
164
+ normalizedValue = this.#sanitizationService
165
+ .sanitize(normalizedValue)
166
+ .trim();
167
+ if (this.#_value !== normalizedValue) {
168
+ this.#_value = normalizedValue;
169
+ // Update angular form control if model has been normalized.
170
+ /* istanbul ignore else */
171
+ if (this.#ngControl?.control &&
172
+ normalizedValue !== this.#ngControl.control.value) {
173
+ this.#ngControl.control.setValue(normalizedValue, {
174
+ emitModelToViewChange: false,
175
+ });
176
+ }
177
+ // Autofocus isn't testable in Firefox and IE.
178
+ // Don't set focus on the editor now if the iframe isn't initialized.
179
+ // #initIframe() will do another check later to see if the editor should
180
+ // receive focus.
181
+ /* istanbul ignore next */
182
+ if (this.autofocus && this.#initialized && !this.#focusInitialized) {
183
+ this.#adapterService.focusEditor();
184
+ this.#focusInitialized = true;
185
+ }
186
+ }
187
+ }
188
+ get value() {
189
+ return this.#_value;
190
+ }
191
+ #defaultId;
192
+ #id;
193
+ #focusInitialized;
194
+ #initialized;
195
+ #ngUnsubscribe;
196
+ #changeDetector;
197
+ #coreAdapterService;
198
+ #adapterService;
199
+ #editorService;
200
+ #sanitizationService;
201
+ #ngControl;
202
+ #zone;
203
+ #_fontList;
204
+ #_fontSizeList;
205
+ #_mergeFields;
206
+ #_menus;
207
+ #_toolbarActions;
208
+ #_disabled;
209
+ #_initialStyleState;
210
+ #_placeholder;
211
+ #_value;
212
+ constructor(changeDetector, coreAdapterService, adapterService, editorService, sanitizationService, ngControl, zone, idSvc) {
213
+ /**
214
+ * Whether to put focus on the editor after it renders.
215
+ */
216
+ this.autofocus = false;
217
+ this.editorFocusStream = new Subject();
218
+ this.formControlClass = !!inject(SkyInputBoxHostService, {
219
+ optional: true,
220
+ });
221
+ this.#focusInitialized = false;
222
+ this.#initialized = false;
223
+ this.#ngUnsubscribe = new Subject();
224
+ this.#_fontList = FONT_LIST_DEFAULTS;
225
+ this.#_fontSizeList = FONT_SIZE_LIST_DEFAULTS;
226
+ this.#_mergeFields = [];
227
+ this.#_menus = MENU_DEFAULTS;
228
+ this.#_toolbarActions = TOOLBAR_ACTION_DEFAULTS;
229
+ this.#_disabled = false;
230
+ this.#_initialStyleState = Object.assign({}, STYLE_STATE_DEFAULTS);
231
+ this.#_placeholder = '';
232
+ this.#_value = '<p></p>';
233
+ /* istanbul ignore next */
234
+ this.#_onTouched = () => {
235
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
236
+ };
237
+ /* istanbul ignore next */
238
+ this.#_onChange = () => {
239
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
240
+ };
241
+ this.#changeDetector = changeDetector;
242
+ this.#coreAdapterService = coreAdapterService;
243
+ this.#adapterService = adapterService;
244
+ this.#editorService = editorService;
245
+ this.#sanitizationService = sanitizationService;
246
+ this.#ngControl = ngControl;
247
+ this.#zone = zone;
248
+ this.#id = this.#defaultId = idSvc.generateId();
249
+ ngControl.valueAccessor = this;
250
+ }
251
+ ngAfterViewInit() {
252
+ this.#initIframe();
253
+ }
254
+ ngOnDestroy() {
255
+ this.#adapterService.removeObservers(this.#editorService.editor);
256
+ this.#ngUnsubscribe.next();
257
+ this.#ngUnsubscribe.complete();
258
+ }
259
+ onIframeLoad() {
260
+ // Reinitialize the editor if it already exists to cover situations where the text editor might have been moved in the DOM.
261
+ if (this.#editorService.isInitialized) {
262
+ this.#initIframe();
263
+ }
264
+ }
265
+ /**
266
+ * Implemented as part of ControlValueAccessor.
267
+ */
268
+ writeValue(value) {
269
+ this.value = value;
270
+ // Update HTML if necessary.
271
+ if (this.#initialized) {
272
+ const editorValue = this.#adapterService.getEditorInnerHtml();
273
+ if (editorValue !== this.#_value) {
274
+ this.#adapterService.setEditorInnerHtml(this.#_value);
275
+ }
276
+ }
277
+ }
278
+ /**
279
+ * Implemented as part of ControlValueAccessor.
280
+ */
281
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
282
+ registerOnChange(fn) {
283
+ this.#_onChange = fn;
284
+ }
285
+ /**
286
+ * Implemented as part of ControlValueAccessor.
287
+ */
288
+ registerOnTouched(fn) {
289
+ this.#_onTouched = fn;
290
+ }
291
+ /**
292
+ * Implemented as part of ControlValueAccessor.
293
+ */
294
+ setDisabledState(isDisabled) {
295
+ this.disabled = isDisabled;
296
+ }
297
+ #updateStyle() {
298
+ this.#_initialStyleState = {
299
+ ...this.#_initialStyleState,
300
+ ...this.#adapterService.getStyleState(),
301
+ };
302
+ }
303
+ #initIframe() {
304
+ this.#adapterService.initEditor(this.id, this.iframeRef.nativeElement, this.initialStyleState, this.placeholder);
305
+ this.#editorService
306
+ .inputListener()
307
+ .pipe(takeUntil(this.#ngUnsubscribe))
308
+ .subscribe(() => {
309
+ // Angular doesn't run change detection for changes originating inside an iframe,
310
+ // so we have to call the onChange() event inside NgZone to force change propagation to consuming components.
311
+ this.#zone.run(() => {
312
+ this.#viewToModelUpdate();
313
+ });
314
+ });
315
+ this.#editorService
316
+ .selectionChangeListener()
317
+ .pipe(takeUntil(this.#ngUnsubscribe))
318
+ .subscribe(() => {
319
+ this.#updateStyle();
320
+ this.editorFocusStream.next();
321
+ });
322
+ this.#editorService
323
+ .clickListener()
324
+ .pipe(takeUntil(this.#ngUnsubscribe))
325
+ .subscribe(() => {
326
+ this.editorFocusStream.next();
327
+ });
328
+ this.#editorService
329
+ .blurListener()
330
+ .pipe(takeUntil(this.#ngUnsubscribe))
331
+ .subscribe(() => {
332
+ // Angular doesn't run change detection for changes originating inside an iframe,
333
+ // so we have to run markForCheck() inside the NgZone to force change propagation to consuming components.
334
+ this.#zone.run(() => {
335
+ this.#_onTouched();
336
+ });
337
+ });
338
+ this.#editorService
339
+ .commandChangeListener()
340
+ .pipe(takeUntil(this.#ngUnsubscribe))
341
+ .subscribe(() => {
342
+ this.#updateStyle();
343
+ this.#viewToModelUpdate();
344
+ });
345
+ this.#adapterService.setEditorInnerHtml(this.#_value);
346
+ /* istanbul ignore next */
347
+ if (this.autofocus) {
348
+ this.#adapterService.focusEditor();
349
+ }
350
+ this.#initialized = true;
351
+ }
352
+ #viewToModelUpdate(emitChange = true) {
353
+ this.value = this.#adapterService.getEditorInnerHtml();
354
+ /* istanbul ignore else */
355
+ if (emitChange) {
356
+ this.#_onChange(this.#_value);
357
+ }
358
+ }
359
+ /* istanbul ignore next */
360
+ #_onTouched;
361
+ /* istanbul ignore next */
362
+ #_onChange;
363
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyCoreAdapterService }, { token: i2.SkyTextEditorAdapterService }, { token: i3.SkyTextEditorService }, { token: i4.SkyTextSanitizationService }, { token: i5.NgControl }, { token: i0.NgZone }, { token: i1.SkyIdService }], target: i0.ɵɵFactoryTarget.Component }); }
364
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SkyTextEditorComponent, selector: "sky-text-editor", inputs: { autofocus: "autofocus", disabled: "disabled", fontList: "fontList", fontSizeList: "fontSizeList", id: "id", initialStyleState: "initialStyleState", menus: "menus", mergeFields: "mergeFields", placeholder: "placeholder", toolbarActions: "toolbarActions" }, host: { properties: { "class.sky-form-control": "this.formControlClass" } }, providers: [
365
+ SkyTextEditorService,
366
+ SkyTextEditorSelectionService,
367
+ SkyTextEditorAdapterService,
368
+ ], viewQueries: [{ propertyName: "iframeRef", first: true, predicate: ["iframe"], descendants: true }, { propertyName: "inputTemplateRef", first: true, predicate: ["inputTemplateRef"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<div class=\"sky-text-editor\">\n <sky-toolbar\n *ngIf=\"\n (menus && menus.length) > 0 ||\n (toolbarActions && toolbarActions.length > 0)\n \"\n class=\"sky-text-editor-toolbar\"\n >\n <sky-toolbar-section\n *ngIf=\"menus && menus.length > 0\"\n aria-label=\"Text formatting\"\n class=\"menubar\"\n role=\"toolbar\"\n >\n <sky-text-editor-menubar\n [disabled]=\"disabled\"\n [editorFocusStream]=\"editorFocusStream\"\n [menus]=\"menus\"\n [mergeFields]=\"mergeFields\"\n >\n </sky-text-editor-menubar>\n </sky-toolbar-section>\n <sky-toolbar-section\n *ngIf=\"toolbarActions && toolbarActions.length > 0\"\n aria-label=\"Text formatting\"\n class=\"toolbar\"\n role=\"toolbar\"\n >\n <sky-text-editor-toolbar\n [disabled]=\"disabled\"\n [editorFocusStream]=\"editorFocusStream\"\n [fontList]=\"fontList\"\n [fontSizeList]=\"fontSizeList\"\n [toolbarActions]=\"toolbarActions\"\n [styleState]=\"initialStyleState\"\n >\n </sky-text-editor-toolbar>\n </sky-toolbar-section>\n </sky-toolbar>\n <iframe\n class=\"sky-text-editor-wrapper\"\n src=\"about:blank\"\n title=\"Text Editor\"\n [ngClass]=\"{\n 'sky-text-editor-wrapper-disabled': disabled\n }\"\n (load)=\"onIframeLoad()\"\n #iframe\n >\n </iframe>\n</div>\n", styles: [".sky-text-editor .sky-text-editor-wrapper{display:flex;flex-wrap:wrap;background-color:#fff;width:100%;height:300px;padding:1rem;font-size:1.2rem;border:1px solid #c0c0c0;overflow-y:auto;outline:none}.sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:#ededee}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:1px solid #cdcfd2!important;border-right:1px solid #cdcfd2!important}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-dropdown-button{border:none}.sky-text-editor .sky-text-editor-toolbar sky-text-editor-menubar,.sky-text-editor .sky-text-editor-toolbar sky-text-editor-toolbar{display:flex;flex-wrap:wrap}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper{border:1px solid #d2d2d2}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:#ececed}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar{padding:10px 10px 0}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-top:1px solid #d2d2d2!important;border-left:1px solid #d2d2d2!important;border-right:1px solid #d2d2d2!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 0 0!important}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.λ37, selector: "sky-toolbar" }, { kind: "component", type: i7.λ38, selector: "sky-toolbar-section" }, { kind: "component", type: i8.SkyTextEditorToolbarComponent, selector: "sky-text-editor-toolbar", inputs: ["editorFocusStream", "fontList", "fontSizeList", "toolbarActions", "styleState", "disabled"] }, { kind: "component", type: i9.SkyTextEditorMenubarComponent, selector: "sky-text-editor-menubar", inputs: ["editorFocusStream", "menus", "mergeFields", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
369
+ }
370
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorComponent, decorators: [{
371
+ type: Component,
372
+ args: [{ selector: 'sky-text-editor', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
373
+ SkyTextEditorService,
374
+ SkyTextEditorSelectionService,
375
+ SkyTextEditorAdapterService,
376
+ ], template: "<div class=\"sky-text-editor\">\n <sky-toolbar\n *ngIf=\"\n (menus && menus.length) > 0 ||\n (toolbarActions && toolbarActions.length > 0)\n \"\n class=\"sky-text-editor-toolbar\"\n >\n <sky-toolbar-section\n *ngIf=\"menus && menus.length > 0\"\n aria-label=\"Text formatting\"\n class=\"menubar\"\n role=\"toolbar\"\n >\n <sky-text-editor-menubar\n [disabled]=\"disabled\"\n [editorFocusStream]=\"editorFocusStream\"\n [menus]=\"menus\"\n [mergeFields]=\"mergeFields\"\n >\n </sky-text-editor-menubar>\n </sky-toolbar-section>\n <sky-toolbar-section\n *ngIf=\"toolbarActions && toolbarActions.length > 0\"\n aria-label=\"Text formatting\"\n class=\"toolbar\"\n role=\"toolbar\"\n >\n <sky-text-editor-toolbar\n [disabled]=\"disabled\"\n [editorFocusStream]=\"editorFocusStream\"\n [fontList]=\"fontList\"\n [fontSizeList]=\"fontSizeList\"\n [toolbarActions]=\"toolbarActions\"\n [styleState]=\"initialStyleState\"\n >\n </sky-text-editor-toolbar>\n </sky-toolbar-section>\n </sky-toolbar>\n <iframe\n class=\"sky-text-editor-wrapper\"\n src=\"about:blank\"\n title=\"Text Editor\"\n [ngClass]=\"{\n 'sky-text-editor-wrapper-disabled': disabled\n }\"\n (load)=\"onIframeLoad()\"\n #iframe\n >\n </iframe>\n</div>\n", styles: [".sky-text-editor .sky-text-editor-wrapper{display:flex;flex-wrap:wrap;background-color:#fff;width:100%;height:300px;padding:1rem;font-size:1.2rem;border:1px solid #c0c0c0;overflow-y:auto;outline:none}.sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:#ededee}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:1px solid #cdcfd2!important;border-right:1px solid #cdcfd2!important}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-dropdown-button{border:none}.sky-text-editor .sky-text-editor-toolbar sky-text-editor-menubar,.sky-text-editor .sky-text-editor-toolbar sky-text-editor-toolbar{display:flex;flex-wrap:wrap}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper{border:1px solid #d2d2d2}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:#ececed}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar{padding:10px 10px 0}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-top:1px solid #d2d2d2!important;border-left:1px solid #d2d2d2!important;border-right:1px solid #d2d2d2!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 0 0!important}\n"] }]
377
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.SkyCoreAdapterService }, { type: i2.SkyTextEditorAdapterService }, { type: i3.SkyTextEditorService }, { type: i4.SkyTextSanitizationService }, { type: i5.NgControl }, { type: i0.NgZone }, { type: i1.SkyIdService }]; }, propDecorators: { autofocus: [{
378
+ type: Input
379
+ }], disabled: [{
380
+ type: Input
381
+ }], fontList: [{
382
+ type: Input
383
+ }], fontSizeList: [{
384
+ type: Input
385
+ }], id: [{
386
+ type: Input
387
+ }], initialStyleState: [{
388
+ type: Input
389
+ }], menus: [{
390
+ type: Input
391
+ }], mergeFields: [{
392
+ type: Input
393
+ }], placeholder: [{
394
+ type: Input
395
+ }], toolbarActions: [{
396
+ type: Input
397
+ }], iframeRef: [{
398
+ type: ViewChild,
399
+ args: ['iframe']
400
+ }], inputTemplateRef: [{
401
+ type: ViewChild,
402
+ args: ['inputTemplateRef', {
403
+ read: TemplateRef,
404
+ static: true,
405
+ }]
406
+ }], formControlClass: [{
407
+ type: HostBinding,
408
+ args: ['class.sky-form-control']
409
+ }] } });
410
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFdBQVcsRUFDWCxLQUFLLEVBR0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFN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QUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFNTSxnQkFBZ0I7c0JBRHRCLFdBQVc7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5Q29yZUFkYXB0ZXJTZXJ2aWNlLCBTa3lJZFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQgeyBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2Zvcm1zJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lGb3Jtc1V0aWxpdHkgfSBmcm9tICcuLi9zaGFyZWQvZm9ybXMtdXRpbGl0eSc7XG5cbmltcG9ydCB7IEZPTlRfTElTVF9ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvZm9udC1saXN0LWRlZmF1bHRzJztcbmltcG9ydCB7IEZPTlRfU0laRV9MSVNUX0RFRkFVTFRTIH0gZnJvbSAnLi9kZWZhdWx0cy9mb250LXNpemUtbGlzdC1kZWZhdWx0cyc7XG5pbXBvcnQgeyBNRU5VX0RFRkFVTFRTIH0gZnJvbSAnLi9kZWZhdWx0cy9tZW51LWRlZmF1bHRzJztcbmltcG9ydCB7IFNUWUxFX1NUQVRFX0RFRkFVTFRTIH0gZnJvbSAnLi9kZWZhdWx0cy9zdHlsZS1zdGF0ZS1kZWZhdWx0cyc7XG5pbXBvcnQgeyBUT09MQkFSX0FDVElPTl9ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvdG9vbGJhci1hY3Rpb24tZGVmYXVsdHMnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRTYW5pdGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LXNhbml0aXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JGb250IH0gZnJvbSAnLi90eXBlcy9mb250LXN0YXRlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JNZW51VHlwZSB9IGZyb20gJy4vdHlwZXMvbWVudS10eXBlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTdHlsZVN0YXRlIH0gZnJvbSAnLi90eXBlcy9zdHlsZS1zdGF0ZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZCB9IGZyb20gJy4vdHlwZXMvdGV4dC1lZGl0b3ItbWVyZ2UtZmllbGQnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclRvb2xiYXJBY3Rpb25UeXBlIH0gZnJvbSAnLi90eXBlcy90b29sYmFyLWFjdGlvbi10eXBlJztcblxuLyoqXG4gKiBUaGUgdGV4dCBlZGl0b3IgY29tcG9uZW50IGxldHMgdXNlcnMgZm9ybWF0IGFuZCBtYW5pcHVsYXRlIHRleHQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS10ZXh0LWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHQtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICBTa3lUZXh0RWRpdG9yU2VydmljZSxcbiAgICBTa3lUZXh0RWRpdG9yU2VsZWN0aW9uU2VydmljZSxcbiAgICBTa3lUZXh0RWRpdG9yQWRhcHRlclNlcnZpY2UsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogV2hldGhlciB0byBwdXQgZm9jdXMgb24gdGhlIGVkaXRvciBhZnRlciBpdCByZW5kZXJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9mb2N1czogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIHRleHQgZWRpdG9yIG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLlxuICAgKiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLCB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb2VyY2VkVmFsdWUgPSBTa3lGb3Jtc1V0aWxpdHkuY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICBpZiAoY29lcmNlZFZhbHVlICE9PSB0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLiNfZGlzYWJsZWQgPSBjb2VyY2VkVmFsdWU7XG5cbiAgICAgIC8vIFVwZGF0ZSBmb2N1c2FibGVDaGlsZHJlbiBpbnNpZGUgdGhlIGlmcmFtZS5cbiAgICAgIGxldCBmb2N1c2FibGVDaGlsZHJlbjogSFRNTEVsZW1lbnRbXTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy5pZnJhbWVSZWYpIHtcbiAgICAgICAgZm9jdXNhYmxlQ2hpbGRyZW4gPSB0aGlzLiNjb3JlQWRhcHRlclNlcnZpY2UuZ2V0Rm9jdXNhYmxlQ2hpbGRyZW4oXG4gICAgICAgICAgdGhpcy5pZnJhbWVSZWYubmF0aXZlRWxlbWVudC5jb250ZW50RG9jdW1lbnQuYm9keSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZ25vcmVWaXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICAgICAgaWdub3JlVGFiSW5kZXg6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLiNfZGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5kaXNhYmxlRWRpdG9yKFxuICAgICAgICAgICAgZm9jdXNhYmxlQ2hpbGRyZW4sXG4gICAgICAgICAgICB0aGlzLmlmcmFtZVJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5lbmFibGVFZGl0b3IoXG4gICAgICAgICAgICBmb2N1c2FibGVDaGlsZHJlbixcbiAgICAgICAgICAgIHRoaXMuaWZyYW1lUmVmLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9udHMgdG8gaW5jbHVkZSBpbiB0aGUgZm9udCBwaWNrZXIuXG4gICAqIEBkZWZhdWx0IFt7bmFtZTogJ0JsYWNrYmF1ZCBTYW5zJywgdmFsdWU6ICdcIkJsYWNrYmF1ZCBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmJ30sIHtuYW1lOiAnQXJpYWwnLCB2YWx1ZTogJ0FyaWFsJ30sIHtuYW1lOiAnQXJpYWwgQmxhY2snLCB2YWx1ZTogJ1wiQXJpYWwgQmxhY2tcIid9LCB7bmFtZTogJ0NvdXJpZXIgTmV3JywgdmFsdWU6ICdcIkNvdXJpZXIgTmV3XCInfSwge25hbWU6ICdHZW9yZ2lhJywgdmFsdWU6ICdHZW9yZ2lhLCBzZXJpZid9LCB7bmFtZTogJ1RhaG9tYScsIHZhbHVlOiAnVGFob21hLCBHZW5ldmEsIHNhbnMtc2VyaWYnfSwge25hbWU6ICdUaW1lcyBOZXcgUm9tYW4nLCB2YWx1ZTogJ1wiVGltZXMgTmV3IFJvbWFuXCInfSwge25hbWU6ICdUcmVidWNoZXQgTVMnLCB2YWx1ZTogJ1wiVHJlYnVjaGV0IE1TXCIsIHNhbnMtc2VyaWYnfSwge25hbWU6ICdWZXJkYW5hJywgdmFsdWU6ICdWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWYnfV1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZm9udExpc3QodmFsdWU6IFNreVRleHRFZGl0b3JGb250W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZm9udExpc3QgPSB2YWx1ZSB8fCBGT05UX0xJU1RfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvbnRMaXN0KCk6IFNreVRleHRFZGl0b3JGb250W10ge1xuICAgIHJldHVybiB0aGlzLiNfZm9udExpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbnQgc2l6ZXMgdG8gaW5jbHVkZSBpbiB0aGUgZm9udCBzaXplIHBpY2tlci5cbiAgICogQGRlZmF1bHQgWzYsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzNiwgNDhdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZvbnRTaXplTGlzdCh2YWx1ZTogbnVtYmVyW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZm9udFNpemVMaXN0ID0gdmFsdWUgfHwgRk9OVF9TSVpFX0xJU1RfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvbnRTaXplTGlzdCgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19mb250U2l6ZUxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBhdHRyaWJ1dGUgZm9yIHRoZSB0ZXh0IGVkaXRvci5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGNvbXBvbmVudCBnZW5lcmF0ZXMgYSByYW5kb20gSUQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNpZCA9IHZhbHVlIHx8IHRoaXMuI2RlZmF1bHRJZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jaWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGluaXRpYWwgc3R5bGVzIGZvciBhbGwgY29udGVudCwgaW5jbHVkaW5nIGJhY2tncm91bmQgY29sb3IsIGZvbnQgc2l6ZSwgYW5kIGxpbmsgc3RhdGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGluaXRpYWxTdHlsZVN0YXRlKHN0YXRlOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIC8vIERvIG5vdCB1cGRhdGUgdGhlIHN0YXRlIGFmdGVyIGluaXRpYWxpemF0aW9uIGhhcyB0YWtlbiBwbGFjZVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNpbml0aWFsaXplZCkge1xuICAgICAgdGhpcy4jX2luaXRpYWxTdHlsZVN0YXRlID0ge1xuICAgICAgICAuLi5TVFlMRV9TVEFURV9ERUZBVUxUUyxcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5pdGlhbFN0eWxlU3RhdGUoKTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUge1xuICAgIHJldHVybiB0aGlzLiNfaW5pdGlhbFN0eWxlU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1lbnVzIHRvIGluY2x1ZGUgaW4gdGhlIG1lbnUgYmFyLlxuICAgKiBAZGVmYXVsdCBbICdlZGl0JywgJ2Zvcm1hdCcgXVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtZW51cyh2YWx1ZTogU2t5VGV4dEVkaXRvck1lbnVUeXBlW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWVudXMgPSB2YWx1ZSB8fCBNRU5VX0RFRkFVTFRTO1xuICB9XG5cbiAgcHVibGljIGdldCBtZW51cygpOiBTa3lUZXh0RWRpdG9yTWVudVR5cGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19tZW51cztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWVyZ2UgZmllbGRzIHRvIGluY2x1ZGUgaW4gdGhlIG1lcmdlIGZpZWxkIG1lbnUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1lcmdlRmllbGRzKHZhbHVlOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZFtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21lcmdlRmllbGRzID0gdmFsdWUgfHwgW107XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lcmdlRmllbGRzKCk6IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkW10ge1xuICAgIHJldHVybiB0aGlzLiNfbWVyZ2VGaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogUGxhY2Vob2xkZXIgdGV4dCB0byBkaXNwbGF5IHdoZW4gdGhlIHRleHQgZW50cnkgYXJlYSBpcyBlbXB0eS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLiNfcGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuI19wbGFjZWhvbGRlciA9IHZhbHVlIHx8ICcnO1xuICAgICAgaWYgKHRoaXMuI2luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldFBsYWNlaG9sZGVyKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI19wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9ucyB0byBpbmNsdWRlIGluIHRoZSB0b29sYmFyIGFuZCBkZXRlcm1pbmVzIHRoZWlyIG9yZGVyLlxuICAgKiBAZGVmYXVsdCBbICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zdHlsZScsICdjb2xvcicsICdsaXN0JywgJ2xpbmsgXVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB0b29sYmFyQWN0aW9ucyhcbiAgICB2YWx1ZTogU2t5VGV4dEVkaXRvclRvb2xiYXJBY3Rpb25UeXBlW10gfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgdGhpcy4jX3Rvb2xiYXJBY3Rpb25zID0gdmFsdWUgfHwgVE9PTEJBUl9BQ1RJT05fREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRvb2xiYXJBY3Rpb25zKCk6IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jX3Rvb2xiYXJBY3Rpb25zO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnaWZyYW1lJylcbiAgcHVibGljIGlmcmFtZVJlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGludGVybmFsIHZhbHVlIG9mIHRoZSBjb250cm9sLlxuICAgKi9cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgLy8gTm9ybWFsaXplIHZhbHVlIGFuZCBzZXQgYW55IGVtcHR5IHN0YXRlIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAgICBsZXQgbm9ybWFsaXplZFZhbHVlOiBzdHJpbmc7XG4gICAgY29uc3QgdmFsdWVUcmltbWVkID0gdmFsdWU/LnRyaW0oKTtcblxuICAgIGlmIChcbiAgICAgICF2YWx1ZSB8fFxuICAgICAgdmFsdWVUcmltbWVkID09PSAnPHA+PC9wPicgfHxcbiAgICAgIHZhbHVlVHJpbW1lZCA9PT0gJzxicj4nIHx8XG4gICAgICB2YWx1ZVRyaW1tZWQgPT09ICc8cD48YnI+PC9wPidcbiAgICApIHtcbiAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3JtYWxpemVkVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVkVmFsdWUgPSB0aGlzLiNzYW5pdGl6YXRpb25TZXJ2aWNlXG4gICAgICAuc2FuaXRpemUobm9ybWFsaXplZFZhbHVlKVxuICAgICAgLnRyaW0oKTtcblxuICAgIGlmICh0aGlzLiNfdmFsdWUgIT09IG5vcm1hbGl6ZWRWYWx1ZSkge1xuICAgICAgdGhpcy4jX3ZhbHVlID0gbm9ybWFsaXplZFZhbHVlO1xuXG4gICAgICAvLyBVcGRhdGUgYW5ndWxhciBmb3JtIGNvbnRyb2wgaWYgbW9kZWwgaGFzIGJlZW4gbm9ybWFsaXplZC5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuI25nQ29udHJvbD8uY29udHJvbCAmJlxuICAgICAgICBub3JtYWxpemVkVmFsdWUgIT09IHRoaXMuI25nQ29udHJvbC5jb250cm9sLnZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy4jbmdDb250cm9sLmNvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplZFZhbHVlLCB7XG4gICAgICAgICAgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEF1dG9mb2N1cyBpc24ndCB0ZXN0YWJsZSBpbiBGaXJlZm94IGFuZCBJRS5cbiAgICAgIC8vIERvbid0IHNldCBmb2N1cyBvbiB0aGUgZWRpdG9yIG5vdyBpZiB0aGUgaWZyYW1lIGlzbid0IGluaXRpYWxpemVkLlxuICAgICAgLy8gI2luaXRJZnJhbWUoKSB3aWxsIGRvIGFub3RoZXIgY2hlY2sgbGF0ZXIgdG8gc2VlIGlmIHRoZSBlZGl0b3Igc2hvdWxkXG4gICAgICAvLyByZWNlaXZlIGZvY3VzLlxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmICh0aGlzLmF1dG9mb2N1cyAmJiB0aGlzLiNpbml0aWFsaXplZCAmJiAhdGhpcy4jZm9jdXNJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VkaXRvcigpO1xuICAgICAgICB0aGlzLiNmb2N1c0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI192YWx1ZTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0VGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwdWJsaWMgaW5wdXRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGVkaXRvckZvY3VzU3RyZWFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1mb3JtLWNvbnRyb2wnKVxuICBwdWJsaWMgZm9ybUNvbnRyb2xDbGFzcyA9ICEhaW5qZWN0KFNreUlucHV0Qm94SG9zdFNlcnZpY2UsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG5cbiAgI2RlZmF1bHRJZDogc3RyaW5nO1xuICAjaWQ6IHN0cmluZztcbiAgI2ZvY3VzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgI2luaXRpYWxpemVkID0gZmFsc2U7XG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgI2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgI2NvcmVBZGFwdGVyU2VydmljZTogU2t5Q29yZUFkYXB0ZXJTZXJ2aWNlO1xuICAjYWRhcHRlclNlcnZpY2U6IFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZTtcbiAgI2VkaXRvclNlcnZpY2U6IFNreVRleHRFZGl0b3JTZXJ2aWNlO1xuICAjc2FuaXRpemF0aW9uU2VydmljZTogU2t5VGV4dFNhbml0aXphdGlvblNlcnZpY2U7XG4gICNuZ0NvbnRyb2w6IE5nQ29udHJvbDtcbiAgI3pvbmU6IE5nWm9uZTtcblxuICAjX2ZvbnRMaXN0ID0gRk9OVF9MSVNUX0RFRkFVTFRTO1xuICAjX2ZvbnRTaXplTGlzdCA9IEZPTlRfU0laRV9MSVNUX0RFRkFVTFRTO1xuICAjX21lcmdlRmllbGRzOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZFtdID0gW107XG4gICNfbWVudXMgPSBNRU5VX0RFRkFVTFRTO1xuICAjX3Rvb2xiYXJBY3Rpb25zOiBTa3lUZXh0RWRpdG9yVG9vbGJhckFjdGlvblR5cGVbXSA9IFRPT0xCQVJfQUNUSU9OX0RFRkFVTFRTO1xuICAjX2Rpc2FibGVkID0gZmFsc2U7XG4gICNfaW5pdGlhbFN0eWxlU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBTVFlMRV9TVEFURV9ERUZBVUxUUyk7XG4gICNfcGxhY2Vob2xkZXIgPSAnJztcbiAgI192YWx1ZSA9ICc8cD48L3A+JztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgY29yZUFkYXB0ZXJTZXJ2aWNlOiBTa3lDb3JlQWRhcHRlclNlcnZpY2UsXG4gICAgYWRhcHRlclNlcnZpY2U6IFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSxcbiAgICBlZGl0b3JTZXJ2aWNlOiBTa3lUZXh0RWRpdG9yU2VydmljZSxcbiAgICBzYW5pdGl6YXRpb25TZXJ2aWNlOiBTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZSxcbiAgICBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICB6b25lOiBOZ1pvbmUsXG4gICAgaWRTdmM6IFNreUlkU2VydmljZVxuICApIHtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2NvcmVBZGFwdGVyU2VydmljZSA9IGNvcmVBZGFwdGVyU2VydmljZTtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZSA9IGFkYXB0ZXJTZXJ2aWNlO1xuICAgIHRoaXMuI2VkaXRvclNlcnZpY2UgPSBlZGl0b3JTZXJ2aWNlO1xuICAgIHRoaXMuI3Nhbml0aXphdGlvblNlcnZpY2UgPSBzYW5pdGl6YXRpb25TZXJ2aWNlO1xuICAgIHRoaXMuI25nQ29udHJvbCA9IG5nQ29udHJvbDtcbiAgICB0aGlzLiN6b25lID0gem9uZTtcblxuICAgIHRoaXMuI2lkID0gdGhpcy4jZGVmYXVsdElkID0gaWRTdmMuZ2VuZXJhdGVJZCgpO1xuXG4gICAgbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNpbml0SWZyYW1lKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UucmVtb3ZlT2JzZXJ2ZXJzKHRoaXMuI2VkaXRvclNlcnZpY2UuZWRpdG9yKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgb25JZnJhbWVMb2FkKCk6IHZvaWQge1xuICAgIC8vIFJlaW5pdGlhbGl6ZSB0aGUgZWRpdG9yIGlmIGl0IGFscmVhZHkgZXhpc3RzIHRvIGNvdmVyIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHRleHQgZWRpdG9yIG1pZ2h0IGhhdmUgYmVlbiBtb3ZlZCBpbiB0aGUgRE9NLlxuICAgIGlmICh0aGlzLiNlZGl0b3JTZXJ2aWNlLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuI2luaXRJZnJhbWUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgICAvLyBVcGRhdGUgSFRNTCBpZiBuZWNlc3NhcnkuXG4gICAgaWYgKHRoaXMuI2luaXRpYWxpemVkKSB7XG4gICAgICBjb25zdCBlZGl0b3JWYWx1ZSA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldEVkaXRvcklubmVySHRtbCgpO1xuICAgICAgaWYgKGVkaXRvclZhbHVlICE9PSB0aGlzLiNfdmFsdWUpIHtcbiAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0RWRpdG9ySW5uZXJIdG1sKHRoaXMuI192YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNfb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAjdXBkYXRlU3R5bGUoKTogdm9pZCB7XG4gICAgdGhpcy4jX2luaXRpYWxTdHlsZVN0YXRlID0ge1xuICAgICAgLi4udGhpcy4jX2luaXRpYWxTdHlsZVN0YXRlLFxuICAgICAgLi4udGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0U3R5bGVTdGF0ZSgpLFxuICAgIH07XG4gIH1cblxuICAjaW5pdElmcmFtZSgpOiB2b2lkIHtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5pbml0RWRpdG9yKFxuICAgICAgdGhpcy5pZCxcbiAgICAgICh0aGlzLmlmcmFtZVJlZiBhcyBFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5pbml0aWFsU3R5bGVTdGF0ZSxcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJcbiAgICApO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmlucHV0TGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIEFuZ3VsYXIgZG9lc24ndCBydW4gY2hhbmdlIGRldGVjdGlvbiBmb3IgY2hhbmdlcyBvcmlnaW5hdGluZyBpbnNpZGUgYW4gaWZyYW1lLFxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIGNhbGwgdGhlIG9uQ2hhbmdlKCkgZXZlbnQgaW5zaWRlIE5nWm9uZSB0byBmb3JjZSBjaGFuZ2UgcHJvcGFnYXRpb24gdG8gY29uc3VtaW5nIGNvbXBvbmVudHMuXG4gICAgICAgIHRoaXMuI3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiN2aWV3VG9Nb2RlbFVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLnNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiN1cGRhdGVTdHlsZSgpO1xuICAgICAgICB0aGlzLmVkaXRvckZvY3VzU3RyZWFtLm5leHQoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmNsaWNrTGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdG9yRm9jdXNTdHJlYW0ubmV4dCgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiNlZGl0b3JTZXJ2aWNlXG4gICAgICAuYmx1ckxpc3RlbmVyKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvLyBBbmd1bGFyIGRvZXNuJ3QgcnVuIGNoYW5nZSBkZXRlY3Rpb24gZm9yIGNoYW5nZXMgb3JpZ2luYXRpbmcgaW5zaWRlIGFuIGlmcmFtZSxcbiAgICAgICAgLy8gc28gd2UgaGF2ZSB0byBydW4gbWFya0ZvckNoZWNrKCkgaW5zaWRlIHRoZSBOZ1pvbmUgdG8gZm9yY2UgY2hhbmdlIHByb3BhZ2F0aW9uIHRvIGNvbnN1bWluZyBjb21wb25lbnRzLlxuICAgICAgICB0aGlzLiN6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jX29uVG91Y2hlZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmNvbW1hbmRDaGFuZ2VMaXN0ZW5lcigpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy4jdXBkYXRlU3R5bGUoKTtcbiAgICAgICAgdGhpcy4jdmlld1RvTW9kZWxVcGRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0RWRpdG9ySW5uZXJIdG1sKHRoaXMuI192YWx1ZSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZm9jdXNFZGl0b3IoKTtcbiAgICB9XG5cbiAgICB0aGlzLiNpbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICAjdmlld1RvTW9kZWxVcGRhdGUoZW1pdENoYW5nZSA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0RWRpdG9ySW5uZXJIdG1sKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZW1pdENoYW5nZSkge1xuICAgICAgdGhpcy4jX29uQ2hhbmdlKHRoaXMuI192YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgI19vblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICB9O1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICNfb25DaGFuZ2U6IChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHZhbHVlOiBhbnlcbiAgKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3JcIj5cbiAgPHNreS10b29sYmFyXG4gICAgKm5nSWY9XCJcbiAgICAgIChtZW51cyAmJiBtZW51cy5sZW5ndGgpID4gMCB8fFxuICAgICAgKHRvb2xiYXJBY3Rpb25zICYmIHRvb2xiYXJBY3Rpb25zLmxlbmd0aCA+IDApXG4gICAgXCJcbiAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci10b29sYmFyXCJcbiAgPlxuICAgIDxza3ktdG9vbGJhci1zZWN0aW9uXG4gICAgICAqbmdJZj1cIm1lbnVzICYmIG1lbnVzLmxlbmd0aCA+IDBcIlxuICAgICAgYXJpYS1sYWJlbD1cIlRleHQgZm9ybWF0dGluZ1wiXG4gICAgICBjbGFzcz1cIm1lbnViYXJcIlxuICAgICAgcm9sZT1cInRvb2xiYXJcIlxuICAgID5cbiAgICAgIDxza3ktdGV4dC1lZGl0b3ItbWVudWJhclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbZWRpdG9yRm9jdXNTdHJlYW1dPVwiZWRpdG9yRm9jdXNTdHJlYW1cIlxuICAgICAgICBbbWVudXNdPVwibWVudXNcIlxuICAgICAgICBbbWVyZ2VGaWVsZHNdPVwibWVyZ2VGaWVsZHNcIlxuICAgICAgPlxuICAgICAgPC9za3ktdGV4dC1lZGl0b3ItbWVudWJhcj5cbiAgICA8L3NreS10b29sYmFyLXNlY3Rpb24+XG4gICAgPHNreS10b29sYmFyLXNlY3Rpb25cbiAgICAgICpuZ0lmPVwidG9vbGJhckFjdGlvbnMgJiYgdG9vbGJhckFjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICBhcmlhLWxhYmVsPVwiVGV4dCBmb3JtYXR0aW5nXCJcbiAgICAgIGNsYXNzPVwidG9vbGJhclwiXG4gICAgICByb2xlPVwidG9vbGJhclwiXG4gICAgPlxuICAgICAgPHNreS10ZXh0LWVkaXRvci10b29sYmFyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtlZGl0b3JGb2N1c1N0cmVhbV09XCJlZGl0b3JGb2N1c1N0cmVhbVwiXG4gICAgICAgIFtmb250TGlzdF09XCJmb250TGlzdFwiXG4gICAgICAgIFtmb250U2l6ZUxpc3RdPVwiZm9udFNpemVMaXN0XCJcbiAgICAgICAgW3Rvb2xiYXJBY3Rpb25zXT1cInRvb2xiYXJBY3Rpb25zXCJcbiAgICAgICAgW3N0eWxlU3RhdGVdPVwiaW5pdGlhbFN0eWxlU3RhdGVcIlxuICAgICAgPlxuICAgICAgPC9za3ktdGV4dC1lZGl0b3ItdG9vbGJhcj5cbiAgICA8L3NreS10b29sYmFyLXNlY3Rpb24+XG4gIDwvc2t5LXRvb2xiYXI+XG4gIDxpZnJhbWVcbiAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci13cmFwcGVyXCJcbiAgICBzcmM9XCJhYm91dDpibGFua1wiXG4gICAgdGl0bGU9XCJUZXh0IEVkaXRvclwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3NreS10ZXh0LWVkaXRvci13cmFwcGVyLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICB9XCJcbiAgICAobG9hZCk9XCJvbklmcmFtZUxvYWQoKVwiXG4gICAgI2lmcmFtZVxuICA+XG4gIDwvaWZyYW1lPlxuPC9kaXY+XG4iXX0=
@@ -18,47 +18,47 @@ import { SkyTextEditorToolbarComponent } from './toolbar/text-editor-toolbar.com
18
18
  import { SkyTextEditorUrlModalComponent } from './url-modal/text-editor-url-modal.component';
19
19
  import * as i0 from "@angular/core";
20
20
  export class SkyTextEditorModule {
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
22
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorModule, declarations: [SkyTextEditorComponent,
23
+ SkyTextEditorUrlModalComponent,
24
+ SkyTextEditorToolbarComponent,
25
+ SkyTextEditorMenubarComponent], imports: [CommonModule,
26
+ FormsModule,
27
+ ReactiveFormsModule,
28
+ SkyCoreAdapterModule,
29
+ SkyTextEditorResourcesModule,
30
+ SkyI18nModule,
31
+ SkyIconModule,
32
+ SkyIdModule,
33
+ SkyInputBoxModule,
34
+ SkyColorpickerModule,
35
+ SkyCheckboxModule,
36
+ SkyDropdownModule,
37
+ SkyModalModule,
38
+ SkyTabsModule,
39
+ SkyThemeModule,
40
+ SkyToolbarModule], exports: [SkyTextEditorComponent,
41
+ SkyTextEditorUrlModalComponent,
42
+ SkyTextEditorToolbarComponent,
43
+ SkyTextEditorMenubarComponent] }); }
44
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorModule, imports: [CommonModule,
45
+ FormsModule,
46
+ ReactiveFormsModule,
47
+ SkyCoreAdapterModule,
48
+ SkyTextEditorResourcesModule,
49
+ SkyI18nModule,
50
+ SkyIconModule,
51
+ SkyIdModule,
52
+ SkyInputBoxModule,
53
+ SkyColorpickerModule,
54
+ SkyCheckboxModule,
55
+ SkyDropdownModule,
56
+ SkyModalModule,
57
+ SkyTabsModule,
58
+ SkyThemeModule,
59
+ SkyToolbarModule] }); }
21
60
  }
22
- SkyTextEditorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTextEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23
- SkyTextEditorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SkyTextEditorModule, declarations: [SkyTextEditorComponent,
24
- SkyTextEditorUrlModalComponent,
25
- SkyTextEditorToolbarComponent,
26
- SkyTextEditorMenubarComponent], imports: [CommonModule,
27
- FormsModule,
28
- ReactiveFormsModule,
29
- SkyCoreAdapterModule,
30
- SkyTextEditorResourcesModule,
31
- SkyI18nModule,
32
- SkyIconModule,
33
- SkyIdModule,
34
- SkyInputBoxModule,
35
- SkyColorpickerModule,
36
- SkyCheckboxModule,
37
- SkyDropdownModule,
38
- SkyModalModule,
39
- SkyTabsModule,
40
- SkyThemeModule,
41
- SkyToolbarModule], exports: [SkyTextEditorComponent,
42
- SkyTextEditorUrlModalComponent,
43
- SkyTextEditorToolbarComponent,
44
- SkyTextEditorMenubarComponent] });
45
- SkyTextEditorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTextEditorModule, imports: [CommonModule,
46
- FormsModule,
47
- ReactiveFormsModule,
48
- SkyCoreAdapterModule,
49
- SkyTextEditorResourcesModule,
50
- SkyI18nModule,
51
- SkyIconModule,
52
- SkyIdModule,
53
- SkyInputBoxModule,
54
- SkyColorpickerModule,
55
- SkyCheckboxModule,
56
- SkyDropdownModule,
57
- SkyModalModule,
58
- SkyTabsModule,
59
- SkyThemeModule,
60
- SkyToolbarModule] });
61
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTextEditorModule, decorators: [{
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyTextEditorModule, decorators: [{
62
62
  type: NgModule,
63
63
  args: [{
64
64
  imports: [
@@ -93,4 +93,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
93
93
  ],
94
94
  }]
95
95
  }] });
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU5QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVyRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFrQzdGLE1BQU0sT0FBTyxtQkFBbUI7O2dIQUFuQixtQkFBbUI7aUhBQW5CLG1CQUFtQixpQkFONUIsc0JBQXNCO1FBQ3RCLDhCQUE4QjtRQUM5Qiw2QkFBNkI7UUFDN0IsNkJBQTZCLGFBM0I3QixZQUFZO1FBQ1osV0FBVztRQUNYLG1CQUFtQjtRQUNuQixvQkFBb0I7UUFDcEIsNEJBQTRCO1FBQzVCLGFBQWE7UUFDYixhQUFhO1FBQ2IsV0FBVztRQUNYLGlCQUFpQjtRQUNqQixvQkFBb0I7UUFDcEIsaUJBQWlCO1FBQ2pCLGlCQUFpQjtRQUNqQixjQUFjO1FBQ2QsYUFBYTtRQUNiLGNBQWM7UUFDZCxnQkFBZ0IsYUFHaEIsc0JBQXNCO1FBQ3RCLDhCQUE4QjtRQUM5Qiw2QkFBNkI7UUFDN0IsNkJBQTZCO2lIQVNwQixtQkFBbUIsWUE5QjVCLFlBQVk7UUFDWixXQUFXO1FBQ1gsbUJBQW1CO1FBQ25CLG9CQUFvQjtRQUNwQiw0QkFBNEI7UUFDNUIsYUFBYTtRQUNiLGFBQWE7UUFDYixXQUFXO1FBQ1gsaUJBQWlCO1FBQ2pCLG9CQUFvQjtRQUNwQixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLGNBQWM7UUFDZCxhQUFhO1FBQ2IsY0FBYztRQUNkLGdCQUFnQjsyRkFlUCxtQkFBbUI7a0JBaEMvQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLDRCQUE0Qjt3QkFDNUIsYUFBYTt3QkFDYixhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsaUJBQWlCO3dCQUNqQixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIsaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxnQkFBZ0I7cUJBQ2pCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxzQkFBc0I7d0JBQ3RCLDhCQUE4Qjt3QkFDOUIsNkJBQTZCO3dCQUM3Qiw2QkFBNkI7cUJBQzlCO29CQUNELFlBQVksRUFBRTt3QkFDWixzQkFBc0I7d0JBQ3RCLDhCQUE4Qjt3QkFDOUIsNkJBQTZCO3dCQUM3Qiw2QkFBNkI7cUJBQzlCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUNvbG9ycGlja2VyTW9kdWxlIH0gZnJvbSAnQHNreXV4L2NvbG9ycGlja2VyJztcbmltcG9ydCB7IFNreUNvcmVBZGFwdGVyTW9kdWxlLCBTa3lJZE1vZHVsZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUNoZWNrYm94TW9kdWxlLCBTa3lJbnB1dEJveE1vZHVsZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lJMThuTW9kdWxlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuaW1wb3J0IHsgU2t5SWNvbk1vZHVsZSB9IGZyb20gJ0Bza3l1eC9pbmRpY2F0b3JzJztcbmltcG9ydCB7IFNreVRvb2xiYXJNb2R1bGUgfSBmcm9tICdAc2t5dXgvbGF5b3V0JztcbmltcG9ydCB7IFNreU1vZGFsTW9kdWxlIH0gZnJvbSAnQHNreXV4L21vZGFscyc7XG5pbXBvcnQgeyBTa3lEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0Bza3l1eC9wb3BvdmVycyc7XG5pbXBvcnQgeyBTa3lUYWJzTW9kdWxlIH0gZnJvbSAnQHNreXV4L3RhYnMnO1xuaW1wb3J0IHsgU2t5VGhlbWVNb2R1bGUgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2t5LXRleHQtZWRpdG9yLXJlc291cmNlcy5tb2R1bGUnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yTWVudWJhckNvbXBvbmVudCB9IGZyb20gJy4vbWVudWJhci90ZXh0LWVkaXRvci1tZW51YmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi90ZXh0LWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvdGV4dC1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclVybE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi91cmwtbW9kYWwvdGV4dC1lZGl0b3ItdXJsLW1vZGFsLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBTa3lDb3JlQWRhcHRlck1vZHVsZSxcbiAgICBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlLFxuICAgIFNreUkxOG5Nb2R1bGUsXG4gICAgU2t5SWNvbk1vZHVsZSxcbiAgICBTa3lJZE1vZHVsZSxcbiAgICBTa3lJbnB1dEJveE1vZHVsZSxcbiAgICBTa3lDb2xvcnBpY2tlck1vZHVsZSxcbiAgICBTa3lDaGVja2JveE1vZHVsZSxcbiAgICBTa3lEcm9wZG93bk1vZHVsZSxcbiAgICBTa3lNb2RhbE1vZHVsZSxcbiAgICBTa3lUYWJzTW9kdWxlLFxuICAgIFNreVRoZW1lTW9kdWxlLFxuICAgIFNreVRvb2xiYXJNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBTa3lUZXh0RWRpdG9yQ29tcG9uZW50LFxuICAgIFNreVRleHRFZGl0b3JVcmxNb2RhbENvbXBvbmVudCxcbiAgICBTa3lUZXh0RWRpdG9yVG9vbGJhckNvbXBvbmVudCxcbiAgICBTa3lUZXh0RWRpdG9yTWVudWJhckNvbXBvbmVudCxcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgU2t5VGV4dEVkaXRvckNvbXBvbmVudCxcbiAgICBTa3lUZXh0RWRpdG9yVXJsTW9kYWxDb21wb25lbnQsXG4gICAgU2t5VGV4dEVkaXRvclRvb2xiYXJDb21wb25lbnQsXG4gICAgU2t5VGV4dEVkaXRvck1lbnViYXJDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JNb2R1bGUge31cbiJdfQ==
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU5QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVyRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFrQzdGLE1BQU0sT0FBTyxtQkFBbUI7OEdBQW5CLG1CQUFtQjsrR0FBbkIsbUJBQW1CLGlCQU41QixzQkFBc0I7WUFDdEIsOEJBQThCO1lBQzlCLDZCQUE2QjtZQUM3Qiw2QkFBNkIsYUEzQjdCLFlBQVk7WUFDWixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQiw0QkFBNEI7WUFDNUIsYUFBYTtZQUNiLGFBQWE7WUFDYixXQUFXO1lBQ1gsaUJBQWlCO1lBQ2pCLG9CQUFvQjtZQUNwQixpQkFBaUI7WUFDakIsaUJBQWlCO1lBQ2pCLGNBQWM7WUFDZCxhQUFhO1lBQ2IsY0FBYztZQUNkLGdCQUFnQixhQUdoQixzQkFBc0I7WUFDdEIsOEJBQThCO1lBQzlCLDZCQUE2QjtZQUM3Qiw2QkFBNkI7K0dBU3BCLG1CQUFtQixZQTlCNUIsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsb0JBQW9CO1lBQ3BCLDRCQUE0QjtZQUM1QixhQUFhO1lBQ2IsYUFBYTtZQUNiLFdBQVc7WUFDWCxpQkFBaUI7WUFDakIsb0JBQW9CO1lBQ3BCLGlCQUFpQjtZQUNqQixpQkFBaUI7WUFDakIsY0FBYztZQUNkLGFBQWE7WUFDYixjQUFjO1lBQ2QsZ0JBQWdCOzsyRkFlUCxtQkFBbUI7a0JBaEMvQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLDRCQUE0Qjt3QkFDNUIsYUFBYTt3QkFDYixhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsaUJBQWlCO3dCQUNqQixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIsaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxnQkFBZ0I7cUJBQ2pCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxzQkFBc0I7d0JBQ3RCLDhCQUE4Qjt3QkFDOUIsNkJBQTZCO3dCQUM3Qiw2QkFBNkI7cUJBQzlCO29CQUNELFlBQVksRUFBRTt3QkFDWixzQkFBc0I7d0JBQ3RCLDhCQUE4Qjt3QkFDOUIsNkJBQTZCO3dCQUM3Qiw2QkFBNkI7cUJBQzlCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUNvbG9ycGlja2VyTW9kdWxlIH0gZnJvbSAnQHNreXV4L2NvbG9ycGlja2VyJztcbmltcG9ydCB7IFNreUNvcmVBZGFwdGVyTW9kdWxlLCBTa3lJZE1vZHVsZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUNoZWNrYm94TW9kdWxlLCBTa3lJbnB1dEJveE1vZHVsZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lJMThuTW9kdWxlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuaW1wb3J0IHsgU2t5SWNvbk1vZHVsZSB9IGZyb20gJ0Bza3l1eC9pbmRpY2F0b3JzJztcbmltcG9ydCB7IFNreVRvb2xiYXJNb2R1bGUgfSBmcm9tICdAc2t5dXgvbGF5b3V0JztcbmltcG9ydCB7IFNreU1vZGFsTW9kdWxlIH0gZnJvbSAnQHNreXV4L21vZGFscyc7XG5pbXBvcnQgeyBTa3lEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0Bza3l1eC9wb3BvdmVycyc7XG5pbXBvcnQgeyBTa3lUYWJzTW9kdWxlIH0gZnJvbSAnQHNreXV4L3RhYnMnO1xuaW1wb3J0IHsgU2t5VGhlbWVNb2R1bGUgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2t5LXRleHQtZWRpdG9yLXJlc291cmNlcy5tb2R1bGUnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yTWVudWJhckNvbXBvbmVudCB9IGZyb20gJy4vbWVudWJhci90ZXh0LWVkaXRvci1tZW51YmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi90ZXh0LWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvdGV4dC1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclVybE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi91cmwtbW9kYWwvdGV4dC1lZGl0b3ItdXJsLW1vZGFsLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBTa3lDb3JlQWRhcHRlck1vZHVsZSxcbiAgICBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlLFxuICAgIFNreUkxOG5Nb2R1bGUsXG4gICAgU2t5SWNvbk1vZHVsZSxcbiAgICBTa3lJZE1vZHVsZSxcbiAgICBTa3lJbnB1dEJveE1vZHVsZSxcbiAgICBTa3lDb2xvcnBpY2tlck1vZHVsZSxcbiAgICBTa3lDaGVja2JveE1vZHVsZSxcbiAgICBTa3lEcm9wZG93bk1vZHVsZSxcbiAgICBTa3lNb2RhbE1vZHVsZSxcbiAgICBTa3lUYWJzTW9kdWxlLFxuICAgIFNreVRoZW1lTW9kdWxlLFxuICAgIFNreVRvb2xiYXJNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBTa3lUZXh0RWRpdG9yQ29tcG9uZW50LFxuICAgIFNreVRleHRFZGl0b3JVcmxNb2RhbENvbXBvbmVudCxcbiAgICBTa3lUZXh0RWRpdG9yVG9vbGJhckNvbXBvbmVudCxcbiAgICBTa3lUZXh0RWRpdG9yTWVudWJhckNvbXBvbmVudCxcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgU2t5VGV4dEVkaXRvckNvbXBvbmVudCxcbiAgICBTa3lUZXh0RWRpdG9yVXJsTW9kYWxDb21wb25lbnQsXG4gICAgU2t5VGV4dEVkaXRvclRvb2xiYXJDb21wb25lbnQsXG4gICAgU2t5VGV4dEVkaXRvck1lbnViYXJDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JNb2R1bGUge31cbiJdfQ==