@skyux/text-editor 13.0.0-beta.0 → 13.0.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skyux-text-editor.mjs","sources":["../tmp-esm2022/lib/modules/text-editor/services/text-sanitization.service.js","../tmp-esm2022/lib/modules/rich-text-display/rich-text-display.component.js","../tmp-esm2022/lib/modules/rich-text-display/rich-text-display.module.js","../tmp-esm2022/lib/modules/shared/sky-text-editor-resources.module.js","../tmp-esm2022/lib/modules/text-editor/defaults/font-list-defaults.js","../tmp-esm2022/lib/modules/text-editor/defaults/font-size-list-defaults.js","../tmp-esm2022/lib/modules/text-editor/defaults/link-window-options-defaults.js","../tmp-esm2022/lib/modules/text-editor/defaults/menu-defaults.js","../tmp-esm2022/lib/modules/text-editor/defaults/style-state-defaults.js","../tmp-esm2022/lib/modules/text-editor/defaults/toolbar-action-defaults.js","../tmp-esm2022/lib/modules/text-editor/url-modal/text-editor-url-target.js","../tmp-esm2022/lib/modules/text-editor/services/text-editor-selection.service.js","../tmp-esm2022/lib/modules/text-editor/services/text-editor.service.js","../tmp-esm2022/lib/modules/text-editor/services/text-editor-adapter.service.js","../tmp-esm2022/lib/modules/text-editor/menubar/text-editor-menubar.component.js","../tmp-esm2022/lib/modules/text-editor/url-modal/text-editor-url-modal-context.js","../tmp-esm2022/lib/modules/text-editor/url-modal/text-editor-url-modal.component.js","../tmp-esm2022/lib/modules/text-editor/toolbar/text-editor-toolbar.component.js","../tmp-esm2022/lib/modules/text-editor/text-editor.component.js","../tmp-esm2022/lib/modules/text-editor/text-editor.module.js","../tmp-esm2022/skyux-text-editor.js"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport createDOMPurify from 'dompurify';\nimport * as i0 from \"@angular/core\";\nconst domPurify = createDOMPurify(window);\ndomPurify.addHook('afterSanitizeAttributes', (node) => {\n // Set all elements owning target to target=_blank\n // so we only allow the target attribute with that value.\n if (node.getAttribute('target')) {\n node.setAttribute('target', '_blank');\n node.setAttribute('rel', 'noopener noreferrer');\n }\n});\n/**\n * The `SkyTextSanitizationService` user the `DOMPurify` library to sanitize strings for use\n * in the DOM. `DOMPurify` allows more customization than Angular's internal `DomSanitizer` so we\n * can preserve `<style>` tags and allow `target` attributes for new tab links.\n * @internal\n */\nexport class SkyTextSanitizationService {\n #allowedAttributes = ['target'];\n /**\n * Returns a sanitized string, allowing target attribute for new tab links.\n */\n sanitize(htmlString) {\n return domPurify.sanitize(htmlString, {\n ADD_ATTR: this.#allowedAttributes,\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextSanitizationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextSanitizationService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextSanitizationService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1zYW5pdGl6YXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3Ivc2VydmljZXMvdGV4dC1zYW5pdGl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sZUFBZSxNQUFNLFdBQVcsQ0FBQzs7QUFFeEMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFhLEVBQUUsRUFBRTtJQUM3RCxrREFBa0Q7SUFDbEQseURBQXlEO0lBQ3pELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDbEQsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUg7Ozs7O0dBS0c7QUFJSCxNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDLGtCQUFrQixHQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFMUM7O09BRUc7SUFDSSxRQUFRLENBQUMsVUFBa0I7UUFDaEMsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUNwQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQVZVLDBCQUEwQjtrSEFBMUIsMEJBQTBCLGNBRnpCLE1BQU07OzJGQUVQLDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCBjcmVhdGVET01QdXJpZnkgZnJvbSAnZG9tcHVyaWZ5JztcblxuY29uc3QgZG9tUHVyaWZ5ID0gY3JlYXRlRE9NUHVyaWZ5KHdpbmRvdyk7XG5cbmRvbVB1cmlmeS5hZGRIb29rKCdhZnRlclNhbml0aXplQXR0cmlidXRlcycsIChub2RlOiBFbGVtZW50KSA9PiB7XG4gIC8vIFNldCBhbGwgZWxlbWVudHMgb3duaW5nIHRhcmdldCB0byB0YXJnZXQ9X2JsYW5rXG4gIC8vIHNvIHdlIG9ubHkgYWxsb3cgdGhlIHRhcmdldCBhdHRyaWJ1dGUgd2l0aCB0aGF0IHZhbHVlLlxuICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZSgncmVsJywgJ25vb3BlbmVyIG5vcmVmZXJyZXInKTtcbiAgfVxufSk7XG5cbi8qKlxuICogVGhlIGBTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZWAgdXNlciB0aGUgYERPTVB1cmlmeWAgbGlicmFyeSB0byBzYW5pdGl6ZSBzdHJpbmdzIGZvciB1c2VcbiAqIGluIHRoZSBET00uIGBET01QdXJpZnlgIGFsbG93cyBtb3JlIGN1c3RvbWl6YXRpb24gdGhhbiBBbmd1bGFyJ3MgaW50ZXJuYWwgYERvbVNhbml0aXplcmAgc28gd2VcbiAqIGNhbiBwcmVzZXJ2ZSBgPHN0eWxlPmAgdGFncyBhbmQgYWxsb3cgYHRhcmdldGAgYXR0cmlidXRlcyBmb3IgbmV3IHRhYiBsaW5rcy5cbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5VGV4dFNhbml0aXphdGlvblNlcnZpY2Uge1xuICAjYWxsb3dlZEF0dHJpYnV0ZXM6IHN0cmluZ1tdID0gWyd0YXJnZXQnXTtcblxuICAvKipcbiAgICogUmV0dXJucyBhIHNhbml0aXplZCBzdHJpbmcsIGFsbG93aW5nIHRhcmdldCBhdHRyaWJ1dGUgZm9yIG5ldyB0YWIgbGlua3MuXG4gICAqL1xuICBwdWJsaWMgc2FuaXRpemUoaHRtbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZG9tUHVyaWZ5LnNhbml0aXplKGh0bWxTdHJpbmcsIHtcbiAgICAgIEFERF9BVFRSOiB0aGlzLiNhbGxvd2VkQXR0cmlidXRlcyxcbiAgICB9KTtcbiAgfVxufVxuIl19","import { Component, Input } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/platform-browser\";\nimport * as i2 from \"../text-editor/services/text-sanitization.service\";\nexport class SkyRichTextDisplayComponent {\n /**\n * The rich text to display.\n */\n set richText(value) {\n if (value) {\n const cleaned = this.#sanitizationService.sanitize(value);\n /* istanbul ignore else */\n if (cleaned !== this.#_richText) {\n this.#_richText = cleaned;\n // Text has already been sanitized with DOMPurifier.\n // Tell Angular to bypass its own internal sanitization.\n this.sanitizedText = this.#sanitizer.bypassSecurityTrustHtml(cleaned);\n }\n }\n else {\n this.#_richText = '';\n this.sanitizedText = '';\n }\n }\n #_richText;\n #sanitizer;\n #sanitizationService;\n constructor(sanitizer, sanitizationService) {\n this.sanitizedText = '';\n this.#_richText = '';\n this.#sanitizer = sanitizer;\n this.#sanitizationService = sanitizationService;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyRichTextDisplayComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.SkyTextSanitizationService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.0.5\", type: SkyRichTextDisplayComponent, isStandalone: false, selector: \"sky-rich-text-display\", inputs: { richText: \"richText\" }, ngImport: i0, template: \"<span class=\\\"sky-rich-text-display-text\\\" [innerHTML]=\\\"sanitizedText\\\"></span>\\n\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyRichTextDisplayComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-rich-text-display', standalone: false, template: \"<span class=\\\"sky-rich-text-display-text\\\" [innerHTML]=\\\"sanitizedText\\\"></span>\\n\" }]\n }], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i2.SkyTextSanitizationService }], propDecorators: { richText: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LWRpc3BsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy9yaWNoLXRleHQtZGlzcGxheS9yaWNoLXRleHQtZGlzcGxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3JpY2gtdGV4dC1kaXNwbGF5L3JpY2gtdGV4dC1kaXNwbGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBVWpELE1BQU0sT0FBTywyQkFBMkI7SUFDdEM7O09BRUc7SUFDSCxJQUNXLFFBQVEsQ0FBQyxLQUF5QjtRQUMzQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCwwQkFBMEI7WUFDMUIsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztnQkFFMUIsb0RBQW9EO2dCQUNwRCx3REFBd0Q7Z0JBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RSxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUlELFVBQVUsQ0FBTTtJQUVoQixVQUFVLENBQWU7SUFDekIsb0JBQW9CLENBQTZCO0lBRWpELFlBQ0UsU0FBdUIsRUFDdkIsbUJBQStDO1FBVDFDLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBRXBDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFTZCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7SUFDbEQsQ0FBQzs4R0FuQ1UsMkJBQTJCO2tHQUEzQiwyQkFBMkIsb0hDVnhDLG9GQUNBOzsyRkRTYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBRXJCLEtBQUs7MEhBT04sUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgU2t5VGV4dFNhbml0aXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi90ZXh0LWVkaXRvci9zZXJ2aWNlcy90ZXh0LXNhbml0aXphdGlvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXJpY2gtdGV4dC1kaXNwbGF5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JpY2gtdGV4dC1kaXNwbGF5LmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFNreVJpY2hUZXh0RGlzcGxheUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgcmljaCB0ZXh0IHRvIGRpc3BsYXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHJpY2hUZXh0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnN0IGNsZWFuZWQgPSB0aGlzLiNzYW5pdGl6YXRpb25TZXJ2aWNlLnNhbml0aXplKHZhbHVlKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoY2xlYW5lZCAhPT0gdGhpcy4jX3JpY2hUZXh0KSB7XG4gICAgICAgIHRoaXMuI19yaWNoVGV4dCA9IGNsZWFuZWQ7XG5cbiAgICAgICAgLy8gVGV4dCBoYXMgYWxyZWFkeSBiZWVuIHNhbml0aXplZCB3aXRoIERPTVB1cmlmaWVyLlxuICAgICAgICAvLyBUZWxsIEFuZ3VsYXIgdG8gYnlwYXNzIGl0cyBvd24gaW50ZXJuYWwgc2FuaXRpemF0aW9uLlxuICAgICAgICB0aGlzLnNhbml0aXplZFRleHQgPSB0aGlzLiNzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoY2xlYW5lZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI19yaWNoVGV4dCA9ICcnO1xuICAgICAgdGhpcy5zYW5pdGl6ZWRUZXh0ID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhbml0aXplZFRleHQ6IFNhZmVIdG1sID0gJyc7XG5cbiAgI19yaWNoVGV4dCA9ICcnO1xuXG4gICNzYW5pdGl6ZXI6IERvbVNhbml0aXplcjtcbiAgI3Nhbml0aXphdGlvblNlcnZpY2U6IFNreVRleHRTYW5pdGl6YXRpb25TZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHNhbml0aXphdGlvblNlcnZpY2U6IFNreVRleHRTYW5pdGl6YXRpb25TZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLiNzYW5pdGl6ZXIgPSBzYW5pdGl6ZXI7XG4gICAgdGhpcy4jc2FuaXRpemF0aW9uU2VydmljZSA9IHNhbml0aXphdGlvblNlcnZpY2U7XG4gIH1cbn1cbiIsIjxzcGFuIGNsYXNzPVwic2t5LXJpY2gtdGV4dC1kaXNwbGF5LXRleHRcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZFRleHRcIj48L3NwYW4+XG4iXX0=","import { NgModule } from '@angular/core';\nimport { SkyRichTextDisplayComponent } from './rich-text-display.component';\nimport * as i0 from \"@angular/core\";\nexport class SkyRichTextDisplayModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyRichTextDisplayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyRichTextDisplayModule, declarations: [SkyRichTextDisplayComponent], exports: [SkyRichTextDisplayComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyRichTextDisplayModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyRichTextDisplayModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [SkyRichTextDisplayComponent],\n declarations: [SkyRichTextDisplayComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LWRpc3BsYXkubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy9yaWNoLXRleHQtZGlzcGxheS9yaWNoLXRleHQtZGlzcGxheS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFNNUUsTUFBTSxPQUFPLHdCQUF3Qjs4R0FBeEIsd0JBQXdCOytHQUF4Qix3QkFBd0IsaUJBRnBCLDJCQUEyQixhQURoQywyQkFBMkI7K0dBRzFCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFKcEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztvQkFDdEMsWUFBWSxFQUFFLENBQUMsMkJBQTJCLENBQUM7aUJBQzVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5UmljaFRleHREaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi9yaWNoLXRleHQtZGlzcGxheS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbU2t5UmljaFRleHREaXNwbGF5Q29tcG9uZW50XSxcbiAgZGVjbGFyYXRpb25zOiBbU2t5UmljaFRleHREaXNwbGF5Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UmljaFRleHREaXNwbGF5TW9kdWxlIHt9XG4iXX0=","/* istanbul ignore file */\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-text-editor' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport { SkyI18nModule, SkyLibResourcesService, } from '@skyux/i18n';\nimport * as i0 from \"@angular/core\";\nconst RESOURCES = {\n 'EN-US': {\n skyux_text_editor_format_menu_action_bold_label: { message: 'Bold' },\n skyux_text_editor_format_menu_action_bold_key_shortcut: {\n message: 'Ctrl+B',\n },\n skyux_text_editor_format_menu_action_italic_label: { message: 'Italic' },\n skyux_text_editor_format_menu_action_italic_key_shortcut: {\n message: 'Ctrl+I',\n },\n skyux_text_editor_format_menu_action_underline_label: {\n message: 'Underline',\n },\n skyux_text_editor_format_menu_action_underline_key_shortcut: {\n message: 'Ctrl+U',\n },\n skyux_text_editor_format_menu_action_strikethrough_label: {\n message: 'Strikethrough',\n },\n skyux_text_editor_format_menu_action_clear_formatting_label: {\n message: 'Clear formatting',\n },\n skyux_text_editor_edit_menu_action_undo_label: { message: 'Undo' },\n skyux_text_editor_edit_menu_action_undo_key_shortcut: { message: 'Ctrl+Z' },\n skyux_text_editor_edit_menu_action_redo_label: { message: 'Redo' },\n skyux_text_editor_edit_menu_action_redo_key_shortcut: { message: 'Ctrl+Y' },\n skyux_text_editor_edit_menu_action_cut_label: { message: 'Cut' },\n skyux_text_editor_edit_menu_action_cut_key_shortcut: { message: 'Ctrl+X' },\n skyux_text_editor_edit_menu_action_copy_label: { message: 'Copy' },\n skyux_text_editor_edit_menu_action_copy_key_shortcut: { message: 'Ctrl+C' },\n skyux_text_editor_edit_menu_action_paste_label: { message: 'Paste' },\n skyux_text_editor_edit_menu_action_paste_key_shortcut: {\n message: 'Ctrl+V',\n },\n skyux_text_editor_edit_menu_action_select_all_label: {\n message: 'Select all',\n },\n skyux_text_editor_edit_menu_action_select_all_key_shortcut: {\n message: 'Ctrl+A',\n },\n skyux_text_editor_iframe_title_default: { message: 'Text editor' },\n skyux_text_editor_menubar_dropdown_button_edit_label: { message: 'Edit' },\n skyux_text_editor_menubar_dropdown_button_format_label: {\n message: 'Format',\n },\n skyux_text_editor_menubar_dropdown_button_insert_label: {\n message: 'Insert merge field',\n },\n skyux_text_editor_paste_incompatibility_error: {\n message: 'Direct clipboard access is not supported by this browser. Use the Ctrl+X/C/V keyboard shortcuts instead.',\n },\n skyux_text_editor_url_modal_header_label: { message: 'Create link' },\n skyux_text_editor_url_modal_url_label: {\n message: 'Enter a URL to link to:',\n },\n skyux_text_editor_url_modal_open_label: {\n message: 'Where should it open?',\n },\n skyux_text_editor_url_modal_current_option_label: {\n message: 'Current window',\n },\n skyux_text_editor_url_modal_open_in_new_window_label: {\n message: 'This link will open in a new window.',\n },\n skyux_text_editor_url_modal_new_option_label: { message: 'New window' },\n skyux_text_editor_url_modal_email_label: { message: 'Email address' },\n skyux_text_editor_url_modal_subject_label: { message: 'Subject line' },\n skyux_text_editor_url_modal_save_button_label: { message: 'Save' },\n skyux_text_editor_url_modal_cancel_button_label: { message: 'Cancel' },\n },\n 'FR-CA': {\n skyux_text_editor_format_menu_action_bold_label: { message: 'Gras' },\n skyux_text_editor_format_menu_action_bold_key_shortcut: {\n message: 'Ctrl+B',\n },\n skyux_text_editor_format_menu_action_italic_label: { message: 'Italique' },\n skyux_text_editor_format_menu_action_italic_key_shortcut: {\n message: 'Ctrl+I',\n },\n skyux_text_editor_format_menu_action_underline_label: {\n message: 'Souligner',\n },\n skyux_text_editor_format_menu_action_underline_key_shortcut: {\n message: 'Ctrl+U',\n },\n skyux_text_editor_format_menu_action_strikethrough_label: {\n message: 'Barrer',\n },\n skyux_text_editor_format_menu_action_clear_formatting_label: {\n message: 'Supprimer la mise en forme',\n },\n skyux_text_editor_edit_menu_action_undo_label: { message: 'Annuler' },\n skyux_text_editor_edit_menu_action_undo_key_shortcut: { message: 'Ctrl+Z' },\n skyux_text_editor_edit_menu_action_redo_label: { message: 'Rétablir' },\n skyux_text_editor_edit_menu_action_redo_key_shortcut: { message: 'Ctrl+Y' },\n skyux_text_editor_edit_menu_action_cut_label: { message: 'Couper' },\n skyux_text_editor_edit_menu_action_cut_key_shortcut: { message: 'Ctrl+X' },\n skyux_text_editor_edit_menu_action_copy_label: { message: 'Copier' },\n skyux_text_editor_edit_menu_action_copy_key_shortcut: { message: 'Ctrl+C' },\n skyux_text_editor_edit_menu_action_paste_label: { message: 'Coller' },\n skyux_text_editor_edit_menu_action_paste_key_shortcut: {\n message: 'Ctrl+V',\n },\n skyux_text_editor_edit_menu_action_select_all_label: {\n message: 'Sélectionner tout',\n },\n skyux_text_editor_edit_menu_action_select_all_key_shortcut: {\n message: 'Ctrl+A',\n },\n skyux_text_editor_iframe_title_default: { message: 'Éditeur de texte' },\n skyux_text_editor_menubar_dropdown_button_edit_label: {\n message: 'Modifier',\n },\n skyux_text_editor_menubar_dropdown_button_format_label: {\n message: 'Format',\n },\n skyux_text_editor_menubar_dropdown_button_insert_label: {\n message: 'Insérer un champ de fusion',\n },\n skyux_text_editor_paste_incompatibility_error: {\n message: 'L’accès direct au presse-papiers n’est pas pris en charge par ce navigateur. Utilisez plutôt les raccourcis-clavier Ctrl+X/C/V.',\n },\n skyux_text_editor_url_modal_header_label: { message: 'Créer le lien' },\n skyux_text_editor_url_modal_url_label: {\n message: 'Saisir une URL à lier à :',\n },\n skyux_text_editor_url_modal_open_label: {\n message: 'Où devrait-elle s’ouvrir?',\n },\n skyux_text_editor_url_modal_current_option_label: {\n message: 'Fenêtre actuelle',\n },\n skyux_text_editor_url_modal_open_in_new_window_label: {\n message: 'Ce lien s’ouvrira dans une nouvelle fenêtre',\n },\n skyux_text_editor_url_modal_new_option_label: {\n message: 'Nouvelle fenêtre',\n },\n skyux_text_editor_url_modal_email_label: { message: 'Adresse de courriel' },\n skyux_text_editor_url_modal_subject_label: {\n message: 'Ligne de mention objet',\n },\n skyux_text_editor_url_modal_save_button_label: { message: 'Sauvegarder' },\n skyux_text_editor_url_modal_cancel_button_label: { message: 'Annuler' },\n },\n};\nSkyLibResourcesService.addResources(RESOURCES);\n/**\n * Import into any component library module that needs to use resource strings.\n */\nexport class SkyTextEditorResourcesModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorResourcesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorResourcesModule, exports: [SkyI18nModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorResourcesModule, imports: [SkyI18nModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorResourcesModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [SkyI18nModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5LXRleHQtZWRpdG9yLXJlc291cmNlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3NoYXJlZC9za3ktdGV4dC1lZGl0b3ItcmVzb3VyY2VzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxhQUFhLEVBRWIsc0JBQXNCLEdBQ3ZCLE1BQU0sYUFBYSxDQUFDOztBQUVyQixNQUFNLFNBQVMsR0FBb0M7SUFDakQsT0FBTyxFQUFFO1FBQ1AsK0NBQStDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQ3BFLHNEQUFzRCxFQUFFO1lBQ3RELE9BQU8sRUFBRSxRQUFRO1NBQ2xCO1FBQ0QsaURBQWlELEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO1FBQ3hFLHdEQUF3RCxFQUFFO1lBQ3hELE9BQU8sRUFBRSxRQUFRO1NBQ2xCO1FBQ0Qsb0RBQW9ELEVBQUU7WUFDcEQsT0FBTyxFQUFFLFdBQVc7U0FDckI7UUFDRCwyREFBMkQsRUFBRTtZQUMzRCxPQUFPLEVBQUUsUUFBUTtTQUNsQjtRQUNELHdEQUF3RCxFQUFFO1lBQ3hELE9BQU8sRUFBRSxlQUFlO1NBQ3pCO1FBQ0QsMkRBQTJELEVBQUU7WUFDM0QsT0FBTyxFQUFFLGtCQUFrQjtTQUM1QjtRQUNELDZDQUE2QyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtRQUNsRSxvREFBb0QsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7UUFDM0UsNkNBQTZDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQ2xFLG9EQUFvRCxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEs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QTRCLFlBRjdCLGFBQWE7K0dBRVosNEJBQTRCLFlBRjdCLGFBQWE7OzJGQUVaLDRCQUE0QjtrQkFIeEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbi8qKlxuICogTk9USUNFOiBETyBOT1QgTU9ESUZZIFRISVMgRklMRSFcbiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgd2VyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieVxuICogdGhlICduZyBnZW5lcmF0ZSBAc2t5dXgvaTE4bjpsaWItcmVzb3VyY2VzLW1vZHVsZSBsaWIvbW9kdWxlcy9zaGFyZWQvc2t5LXRleHQtZWRpdG9yJyBzY2hlbWF0aWMuXG4gKiBUbyB1cGRhdGUgdGhpcyBmaWxlLCBzaW1wbHkgcmVydW4gdGhlIGNvbW1hbmQuXG4gKi9cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTa3lJMThuTW9kdWxlLFxuICBTa3lMaWJSZXNvdXJjZXMsXG4gIFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG59IGZyb20gJ0Bza3l1eC9pMThuJztcblxuY29uc3QgUkVTT1VSQ0VTOiBSZWNvcmQ8c3RyaW5nLCBTa3lMaWJSZXNvdXJjZXM+ID0ge1xuICAnRU4tVVMnOiB7XG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZm9ybWF0X21lbnVfYWN0aW9uX2JvbGRfbGFiZWw6IHsgbWVzc2FnZTogJ0JvbGQnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZm9ybWF0X21lbnVfYWN0aW9uX2JvbGRfa2V5X3Nob3J0Y3V0OiB7XG4gICAgICBtZXNzYWdlOiAnQ3RybCtCJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9pdGFsaWNfbGFiZWw6IHsgbWVzc2FnZTogJ0l0YWxpYycgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25faXRhbGljX2tleV9zaG9ydGN1dDoge1xuICAgICAgbWVzc2FnZTogJ0N0cmwrSScsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25fdW5kZXJsaW5lX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnVW5kZXJsaW5lJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl91bmRlcmxpbmVfa2V5X3Nob3J0Y3V0OiB7XG4gICAgICBtZXNzYWdlOiAnQ3RybCtVJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9zdHJpa2V0aHJvdWdoX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnU3RyaWtldGhyb3VnaCcsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25fY2xlYXJfZm9ybWF0dGluZ19sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ0NsZWFyIGZvcm1hdHRpbmcnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl91bmRvX2xhYmVsOiB7IG1lc3NhZ2U6ICdVbmRvJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fdW5kb19rZXlfc2hvcnRjdXQ6IHsgbWVzc2FnZTogJ0N0cmwrWicgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3JlZG9fbGFiZWw6IHsgbWVzc2FnZTogJ1JlZG8nIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9yZWRvX2tleV9zaG9ydGN1dDogeyBtZXNzYWdlOiAnQ3RybCtZJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fY3V0X2xhYmVsOiB7IG1lc3NhZ2U6ICdDdXQnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9jdXRfa2V5X3Nob3J0Y3V0OiB7IG1lc3NhZ2U6ICdDdHJsK1gnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9jb3B5X2xhYmVsOiB7IG1lc3NhZ2U6ICdDb3B5JyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fY29weV9rZXlfc2hvcnRjdXQ6IHsgbWVzc2FnZTogJ0N0cmwrQycgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3Bhc3RlX2xhYmVsOiB7IG1lc3NhZ2U6ICdQYXN0ZScgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3Bhc3RlX2tleV9zaG9ydGN1dDoge1xuICAgICAgbWVzc2FnZTogJ0N0cmwrVicsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3NlbGVjdF9hbGxfbGFiZWw6IHtcbiAgICAgIG1lc3NhZ2U6ICdTZWxlY3QgYWxsJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fc2VsZWN0X2FsbF9rZXlfc2hvcnRjdXQ6IHtcbiAgICAgIG1lc3NhZ2U6ICdDdHJsK0EnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfaWZyYW1lX3RpdGxlX2RlZmF1bHQ6IHsgbWVzc2FnZTogJ1RleHQgZWRpdG9yJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX21lbnViYXJfZHJvcGRvd25fYnV0dG9uX2VkaXRfbGFiZWw6IHsgbWVzc2FnZTogJ0VkaXQnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfbWVudWJhcl9kcm9wZG93bl9idXR0b25fZm9ybWF0X2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnRm9ybWF0JyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX21lbnViYXJfZHJvcGRvd25fYnV0dG9uX2luc2VydF9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ0luc2VydCBtZXJnZSBmaWVsZCcsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9wYXN0ZV9pbmNvbXBhdGliaWxpdHlfZXJyb3I6IHtcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgICdEaXJlY3QgY2xpcGJvYXJkIGFjY2VzcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci4gVXNlIHRoZSBDdHJsK1gvQy9WIGtleWJvYXJkIHNob3J0Y3V0cyBpbnN0ZWFkLicsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfaGVhZGVyX2xhYmVsOiB7IG1lc3NhZ2U6ICdDcmVhdGUgbGluaycgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfdXJsX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnRW50ZXIgYSBVUkwgdG8gbGluayB0bzonLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX29wZW5fbGFiZWw6IHtcbiAgICAgIG1lc3NhZ2U6ICdXaGVyZSBzaG91bGQgaXQgb3Blbj8nLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX2N1cnJlbnRfb3B0aW9uX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnQ3VycmVudCB3aW5kb3cnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX29wZW5faW5fbmV3X3dpbmRvd19sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ1RoaXMgbGluayB3aWxsIG9wZW4gaW4gYSBuZXcgd2luZG93LicsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfbmV3X29wdGlvbl9sYWJlbDogeyBtZXNzYWdlOiAnTmV3IHdpbmRvdycgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfZW1haWxfbGFiZWw6IHsgbWVzc2FnZTogJ0VtYWlsIGFkZHJlc3MnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX3N1YmplY3RfbGFiZWw6IHsgbWVzc2FnZTogJ1N1YmplY3QgbGluZScgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfc2F2ZV9idXR0b25fbGFiZWw6IHsgbWVzc2FnZTogJ1NhdmUnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX2NhbmNlbF9idXR0b25fbGFiZWw6IHsgbWVzc2FnZTogJ0NhbmNlbCcgfSxcbiAgfSxcbiAgJ0ZSLUNBJzoge1xuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9ib2xkX2xhYmVsOiB7IG1lc3NhZ2U6ICdHcmFzJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9ib2xkX2tleV9zaG9ydGN1dDoge1xuICAgICAgbWVzc2FnZTogJ0N0cmwrQicsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25faXRhbGljX2xhYmVsOiB7IG1lc3NhZ2U6ICdJdGFsaXF1ZScgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25faXRhbGljX2tleV9zaG9ydGN1dDoge1xuICAgICAgbWVzc2FnZTogJ0N0cmwrSScsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25fdW5kZXJsaW5lX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnU291bGlnbmVyJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl91bmRlcmxpbmVfa2V5X3Nob3J0Y3V0OiB7XG4gICAgICBtZXNzYWdlOiAnQ3RybCtVJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9zdHJpa2V0aHJvdWdoX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnQmFycmVyJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9jbGVhcl9mb3JtYXR0aW5nX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnU3VwcHJpbWVyIGxhIG1pc2UgZW4gZm9ybWUnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl91bmRvX2xhYmVsOiB7IG1lc3NhZ2U6ICdBbm51bGVyJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fdW5kb19rZXlfc2hvcnRjdXQ6IHsgbWVzc2FnZTogJ0N0cmwrWicgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3JlZG9fbGFiZWw6IHsgbWVzc2FnZTogJ1LDqXRhYmxpcicgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3JlZG9fa2V5X3Nob3J0Y3V0OiB7IG1lc3NhZ2U6ICdDdHJsK1knIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9jdXRfbGFiZWw6IHsgbWVzc2FnZTogJ0NvdXBlcicgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX2N1dF9rZXlfc2hvcnRjdXQ6IHsgbWVzc2FnZTogJ0N0cmwrWCcgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX2NvcHlfbGFiZWw6IHsgbWVzc2FnZTogJ0NvcGllcicgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX2NvcHlfa2V5X3Nob3J0Y3V0OiB7IG1lc3NhZ2U6ICdDdHJsK0MnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9wYXN0ZV9sYWJlbDogeyBtZXNzYWdlOiAnQ29sbGVyJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fcGFzdGVfa2V5X3Nob3J0Y3V0OiB7XG4gICAgICBtZXNzYWdlOiAnQ3RybCtWJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fc2VsZWN0X2FsbF9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ1PDqWxlY3Rpb25uZXIgdG91dCcsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3NlbGVjdF9hbGxfa2V5X3Nob3J0Y3V0OiB7XG4gICAgICBtZXNzYWdlOiAnQ3RybCtBJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2lmcmFtZV90aXRsZV9kZWZhdWx0OiB7IG1lc3NhZ2U6ICfDiWRpdGV1ciBkZSB0ZXh0ZScgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9tZW51YmFyX2Ryb3Bkb3duX2J1dHRvbl9lZGl0X2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnTW9kaWZpZXInLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfbWVudWJhcl9kcm9wZG93bl9idXR0b25fZm9ybWF0X2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnRm9ybWF0JyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX21lbnViYXJfZHJvcGRvd25fYnV0dG9uX2luc2VydF9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ0luc8OpcmVyIHVuIGNoYW1wIGRlIGZ1c2lvbicsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9wYXN0ZV9pbmNvbXBhdGliaWxpdHlfZXJyb3I6IHtcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgICdM4oCZYWNjw6hzIGRpcmVjdCBhdSBwcmVzc2UtcGFwaWVycyBu4oCZZXN0IHBhcyBwcmlzIGVuIGNoYXJnZSBwYXIgY2UgbmF2aWdhdGV1ci4gVXRpbGlzZXogcGx1dMO0dCBsZXMgcmFjY291cmNpcy1jbGF2aWVyIEN0cmwrWC9DL1YuJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9oZWFkZXJfbGFiZWw6IHsgbWVzc2FnZTogJ0Nyw6llciBsZSBsaWVuJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF91cmxfbGFiZWw6IHtcbiAgICAgIG1lc3NhZ2U6ICdTYWlzaXIgdW5lIFVSTCDDoCBsaWVyIMOgwqA6JyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9vcGVuX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnT8O5IGRldnJhaXQtZWxsZSBz4oCZb3V2cmlyPycsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfY3VycmVudF9vcHRpb25fbGFiZWw6IHtcbiAgICAgIG1lc3NhZ2U6ICdGZW7DqnRyZSBhY3R1ZWxsZScsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfb3Blbl9pbl9uZXdfd2luZG93X2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnQ2UgbGllbiBz4oCZb3V2cmlyYSBkYW5zIHVuZSBub3V2ZWxsZSBmZW7DqnRyZScsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfbmV3X29wdGlvbl9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ05vdXZlbGxlIGZlbsOqdHJlJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9lbWFpbF9sYWJlbDogeyBtZXNzYWdlOiAnQWRyZXNzZSBkZSBjb3VycmllbCcgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfc3ViamVjdF9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ0xpZ25lIGRlIG1lbnRpb24gb2JqZXQnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX3NhdmVfYnV0dG9uX2xhYmVsOiB7IG1lc3NhZ2U6ICdTYXV2ZWdhcmRlcicgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfY2FuY2VsX2J1dHRvbl9sYWJlbDogeyBtZXNzYWdlOiAnQW5udWxlcicgfSxcbiAgfSxcbn07XG5cblNreUxpYlJlc291cmNlc1NlcnZpY2UuYWRkUmVzb3VyY2VzKFJFU09VUkNFUyk7XG5cbi8qKlxuICogSW1wb3J0IGludG8gYW55IGNvbXBvbmVudCBsaWJyYXJ5IG1vZHVsZSB0aGF0IG5lZWRzIHRvIHVzZSByZXNvdXJjZSBzdHJpbmdzLlxuICovXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbU2t5STE4bk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JSZXNvdXJjZXNNb2R1bGUge31cbiJdfQ==","/**\n * @internal\n */\nexport const FONT_LIST_DEFAULTS = [\n {\n name: 'Blackbaud Sans',\n value: '\"Blackbaud Sans\", Arial, sans-serif',\n },\n {\n name: 'Arial',\n value: 'Arial',\n },\n {\n name: 'Arial Black',\n value: '\"Arial Black\"',\n },\n {\n name: 'Courier New',\n value: '\"Courier New\"',\n },\n {\n name: 'Georgia',\n value: 'Georgia, serif',\n },\n {\n name: 'Tahoma',\n value: 'Tahoma, Geneva, sans-serif',\n },\n {\n name: 'Times New Roman',\n value: '\"Times New Roman\"',\n },\n {\n name: 'Trebuchet MS',\n value: '\"Trebuchet MS\", sans-serif',\n },\n {\n name: 'Verdana',\n value: 'Verdana, Geneva, sans-serif',\n },\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9udC1saXN0LWRlZmF1bHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci9kZWZhdWx0cy9mb250LWxpc3QtZGVmYXVsdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBd0I7SUFDckQ7UUFDRSxJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLEtBQUssRUFBRSxxQ0FBcUM7S0FDN0M7SUFDRDtRQUNFLElBQUksRUFBRSxPQUFPO1FBQ2IsS0FBSyxFQUFFLE9BQU87S0FDZjtJQUNEO1FBQ0UsSUFBSSxFQUFFLGFBQWE7UUFDbkIsS0FBSyxFQUFFLGVBQWU7S0FDdkI7SUFDRDtRQUNFLElBQUksRUFBRSxhQUFhO1FBQ25CLEtBQUssRUFBRSxlQUFlO0tBQ3ZCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEtBQUssRUFBRSxnQkFBZ0I7S0FDeEI7SUFDRDtRQUNFLElBQUksRUFBRSxRQUFRO1FBQ2QsS0FBSyxFQUFFLDRCQUE0QjtLQUNwQztJQUNEO1FBQ0UsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixLQUFLLEVBQUUsbUJBQW1CO0tBQzNCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsY0FBYztRQUNwQixLQUFLLEVBQUUsNEJBQTRCO0tBQ3BDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEtBQUssRUFBRSw2QkFBNkI7S0FDckM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2t5VGV4dEVkaXRvckZvbnQgfSBmcm9tICcuLi90eXBlcy9mb250LXN0YXRlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEZPTlRfTElTVF9ERUZBVUxUUzogU2t5VGV4dEVkaXRvckZvbnRbXSA9IFtcbiAge1xuICAgIG5hbWU6ICdCbGFja2JhdWQgU2FucycsXG4gICAgdmFsdWU6ICdcIkJsYWNrYmF1ZCBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdBcmlhbCcsXG4gICAgdmFsdWU6ICdBcmlhbCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQXJpYWwgQmxhY2snLFxuICAgIHZhbHVlOiAnXCJBcmlhbCBCbGFja1wiJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdDb3VyaWVyIE5ldycsXG4gICAgdmFsdWU6ICdcIkNvdXJpZXIgTmV3XCInLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0dlb3JnaWEnLFxuICAgIHZhbHVlOiAnR2VvcmdpYSwgc2VyaWYnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1RhaG9tYScsXG4gICAgdmFsdWU6ICdUYWhvbWEsIEdlbmV2YSwgc2Fucy1zZXJpZicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnVGltZXMgTmV3IFJvbWFuJyxcbiAgICB2YWx1ZTogJ1wiVGltZXMgTmV3IFJvbWFuXCInLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1RyZWJ1Y2hldCBNUycsXG4gICAgdmFsdWU6ICdcIlRyZWJ1Y2hldCBNU1wiLCBzYW5zLXNlcmlmJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdWZXJkYW5hJyxcbiAgICB2YWx1ZTogJ1ZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZicsXG4gIH0sXG5dO1xuIl19","/**\n * @internal\n */\nexport const FONT_SIZE_LIST_DEFAULTS = [\n 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 36, 48,\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9udC1zaXplLWxpc3QtZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL2RlZmF1bHRzL2ZvbnQtc2l6ZS1saXN0LWRlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQWE7SUFDL0MsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0NBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgRk9OVF9TSVpFX0xJU1RfREVGQVVMVFM6IG51bWJlcltdID0gW1xuICA2LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTgsIDIwLCAyMiwgMjQsIDI2LCAyOCwgMzYsIDQ4LFxuXTtcbiJdfQ==","export const LINK_WINDOW_OPTIONS_DEFAULTS = ['new', 'existing'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay13aW5kb3ctb3B0aW9ucy1kZWZhdWx0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3IvZGVmYXVsdHMvbGluay13aW5kb3ctb3B0aW9ucy1kZWZhdWx0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FDdkMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lUZXh0RWRpdG9yTGlua1dpbmRvd09wdGlvbnNUeXBlIH0gZnJvbSAnLi4vdHlwZXMvbGluay13aW5kb3ctb3B0aW9ucy10eXBlJztcblxuZXhwb3J0IGNvbnN0IExJTktfV0lORE9XX09QVElPTlNfREVGQVVMVFM6IFNreVRleHRFZGl0b3JMaW5rV2luZG93T3B0aW9uc1R5cGVbXSA9XG4gIFsnbmV3JywgJ2V4aXN0aW5nJ107XG4iXX0=","/**\n * @internal\n */\nexport const MENU_DEFAULTS = ['edit', 'format'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1kZWZhdWx0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3IvZGVmYXVsdHMvbWVudS1kZWZhdWx0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBNEIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lUZXh0RWRpdG9yTWVudVR5cGUgfSBmcm9tICcuLi90eXBlcy9tZW51LXR5cGUnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTUVOVV9ERUZBVUxUUzogU2t5VGV4dEVkaXRvck1lbnVUeXBlW10gPSBbJ2VkaXQnLCAnZm9ybWF0J107XG4iXX0=","import { FONT_LIST_DEFAULTS } from './font-list-defaults';\n/**\n * @internal\n */\nexport const STYLE_STATE_DEFAULTS = {\n backColor: 'rgba(0, 0, 0, 0)',\n fontColor: '#000',\n fontSize: 14,\n font: FONT_LIST_DEFAULTS[0].value,\n boldState: false,\n italicState: false,\n underlineState: false,\n linkState: false,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUtc3RhdGUtZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL2RlZmF1bHRzL3N0eWxlLXN0YXRlLWRlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQTRCO0lBQzNELFNBQVMsRUFBRSxrQkFBa0I7SUFDN0IsU0FBUyxFQUFFLE1BQU07SUFDakIsUUFBUSxFQUFFLEVBQUU7SUFDWixJQUFJLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztJQUNqQyxTQUFTLEVBQUUsS0FBSztJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixjQUFjLEVBQUUsS0FBSztJQUNyQixTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUgfSBmcm9tICcuLi90eXBlcy9zdHlsZS1zdGF0ZSc7XG5cbmltcG9ydCB7IEZPTlRfTElTVF9ERUZBVUxUUyB9IGZyb20gJy4vZm9udC1saXN0LWRlZmF1bHRzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFNUWUxFX1NUQVRFX0RFRkFVTFRTOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSA9IHtcbiAgYmFja0NvbG9yOiAncmdiYSgwLCAwLCAwLCAwKScsXG4gIGZvbnRDb2xvcjogJyMwMDAnLFxuICBmb250U2l6ZTogMTQsXG4gIGZvbnQ6IEZPTlRfTElTVF9ERUZBVUxUU1swXS52YWx1ZSxcbiAgYm9sZFN0YXRlOiBmYWxzZSxcbiAgaXRhbGljU3RhdGU6IGZhbHNlLFxuICB1bmRlcmxpbmVTdGF0ZTogZmFsc2UsXG4gIGxpbmtTdGF0ZTogZmFsc2UsXG59O1xuIl19","/**\n * @internal\n */\nexport const TOOLBAR_ACTION_DEFAULTS = [\n 'font-family',\n 'font-size',\n 'font-style',\n 'color',\n 'list',\n 'link',\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci1hY3Rpb24tZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL2RlZmF1bHRzL3Rvb2xiYXItYWN0aW9uLWRlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQXFDO0lBQ3ZFLGFBQWE7SUFDYixXQUFXO0lBQ1gsWUFBWTtJQUNaLE9BQU87SUFDUCxNQUFNO0lBQ04sTUFBTTtDQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lUZXh0RWRpdG9yVG9vbGJhckFjdGlvblR5cGUgfSBmcm9tICcuLi90eXBlcy90b29sYmFyLWFjdGlvbi10eXBlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFRPT0xCQVJfQUNUSU9OX0RFRkFVTFRTOiBTa3lUZXh0RWRpdG9yVG9vbGJhckFjdGlvblR5cGVbXSA9IFtcbiAgJ2ZvbnQtZmFtaWx5JyxcbiAgJ2ZvbnQtc2l6ZScsXG4gICdmb250LXN0eWxlJyxcbiAgJ2NvbG9yJyxcbiAgJ2xpc3QnLFxuICAnbGluaycsXG5dO1xuIl19","/**\n * @internal\n */\nexport var UrlTarget;\n(function (UrlTarget) {\n UrlTarget[UrlTarget[\"None\"] = 0] = \"None\";\n UrlTarget[UrlTarget[\"NewWindow\"] = 1] = \"NewWindow\";\n})(UrlTarget || (UrlTarget = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItdXJsLXRhcmdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3IvdXJsLW1vZGFsL3RleHQtZWRpdG9yLXVybC10YXJnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ25CLHlDQUFRLENBQUE7SUFDUixtREFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUhXLFNBQVMsS0FBVCxTQUFTLFFBR3BCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGVudW0gVXJsVGFyZ2V0IHtcbiAgTm9uZSA9IDAsXG4gIE5ld1dpbmRvdyA9IDEsXG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * @internal\n */\nexport class SkyTextEditorSelectionService {\n isElementSelected(documentEl, element) {\n const selectedNode = this.getCurrentSelection(documentEl)?.anchorNode;\n /* istanbul ignore next */\n return !!(selectedNode &&\n (element.contains(selectedNode) ||\n (selectedNode.parentNode && element.contains(selectedNode.parentNode))));\n }\n getCurrentSelection(documentEl) {\n return documentEl.getSelection();\n }\n getCurrentSelectionParentElement(documentEl) {\n const selection = this.getCurrentSelection(documentEl);\n let selectedEl;\n /* istanbul ignore else */\n if (selection &&\n selection.getRangeAt &&\n selection.getRangeAt(0).commonAncestorContainer) {\n selectedEl = selection.getRangeAt(0).commonAncestorContainer;\n selectedEl =\n selectedEl.nodeType !== 1 ? selectedEl.parentElement : selectedEl;\n }\n else {\n return undefined;\n }\n return selectedEl;\n }\n getCurrentSelectionRange(documentEl, windowEl) {\n /* istanbul ignore else */\n if (windowEl.getSelection) {\n const sel = windowEl.getSelection();\n /* istanbul ignore else */\n if (sel && sel.getRangeAt && sel.rangeCount) {\n return sel.getRangeAt(0);\n }\n }\n else if (documentEl.getSelection()?.getRangeAt) {\n return documentEl.getSelection()?.getRangeAt(0);\n }\n /* istanbul ignore next */\n return undefined;\n }\n selectElement(documentEl, windowEl, element) {\n /* istanbul ignore else */\n if (element) {\n /* istanbul ignore else */\n if (windowEl.getSelection) {\n const sel = windowEl.getSelection();\n sel?.removeAllRanges();\n const range = documentEl.createRange();\n range.selectNodeContents(element);\n sel?.addRange(range);\n }\n else if (documentEl.getSelection) {\n const sel = documentEl.getSelection();\n sel?.removeAllRanges();\n const range = documentEl.createRange();\n range.selectNodeContents(element);\n sel?.addRange(range);\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorSelectionService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorSelectionService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3Itc2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3NlcnZpY2VzL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOztHQUVHO0FBRUgsTUFBTSxPQUFPLDZCQUE2QjtJQUNqQyxpQkFBaUIsQ0FDdEIsVUFBb0IsRUFDcEIsT0FBb0I7UUFFcEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsQ0FBQztRQUN0RSwwQkFBMEI7UUFDMUIsT0FBTyxDQUFDLENBQUMsQ0FDUCxZQUFZO1lBQ1osQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztnQkFDN0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxVQUFvQjtRQUM3QyxPQUFPLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU0sZ0NBQWdDLENBQ3JDLFVBQW9CO1FBRXBCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLFVBQTBCLENBQUM7UUFDL0IsMEJBQTBCO1FBQzFCLElBQ0UsU0FBUztZQUNULFNBQVMsQ0FBQyxVQUFVO1lBQ3BCLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEVBQy9DLENBQUM7WUFDRCxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBa0MsQ0FBQztZQUN4RSxVQUFVO2dCQUNSLFVBQVUsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDdEUsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVNLHdCQUF3QixDQUM3QixVQUFvQixFQUNwQixRQUFnQjtRQUVoQiwwQkFBMEI7UUFDMUIsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BDLDBCQUEwQjtZQUMxQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDakQsT0FBTyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVNLGFBQWEsQ0FDbEIsVUFBb0IsRUFDcEIsUUFBZ0IsRUFDaEIsT0FBb0I7UUFFcEIsMEJBQTBCO1FBQzFCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWiwwQkFBMEI7WUFDMUIsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDcEMsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixDQUFDO2lCQUFNLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNuQyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RDLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN2QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xDLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOzhHQS9FVSw2QkFBNkI7a0hBQTdCLDZCQUE2Qjs7MkZBQTdCLDZCQUE2QjtrQkFEekMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgcHVibGljIGlzRWxlbWVudFNlbGVjdGVkKFxuICAgIGRvY3VtZW50RWw6IERvY3VtZW50LFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oZG9jdW1lbnRFbCk/LmFuY2hvck5vZGU7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gISEoXG4gICAgICBzZWxlY3RlZE5vZGUgJiZcbiAgICAgIChlbGVtZW50LmNvbnRhaW5zKHNlbGVjdGVkTm9kZSkgfHxcbiAgICAgICAgKHNlbGVjdGVkTm9kZS5wYXJlbnROb2RlICYmIGVsZW1lbnQuY29udGFpbnMoc2VsZWN0ZWROb2RlLnBhcmVudE5vZGUpKSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRTZWxlY3Rpb24oZG9jdW1lbnRFbDogRG9jdW1lbnQpOiBTZWxlY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gZG9jdW1lbnRFbC5nZXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXJyZW50U2VsZWN0aW9uUGFyZW50RWxlbWVudChcbiAgICBkb2N1bWVudEVsOiBEb2N1bWVudCxcbiAgKTogRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbihkb2N1bWVudEVsKTtcbiAgICBsZXQgc2VsZWN0ZWRFbDogRWxlbWVudCB8IG51bGw7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoXG4gICAgICBzZWxlY3Rpb24gJiZcbiAgICAgIHNlbGVjdGlvbi5nZXRSYW5nZUF0ICYmXG4gICAgICBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5jb21tb25BbmNlc3RvckNvbnRhaW5lclxuICAgICkge1xuICAgICAgc2VsZWN0ZWRFbCA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIGFzIEVsZW1lbnQ7XG4gICAgICBzZWxlY3RlZEVsID1cbiAgICAgICAgc2VsZWN0ZWRFbC5ub2RlVHlwZSAhPT0gMSA/IHNlbGVjdGVkRWwucGFyZW50RWxlbWVudCA6IHNlbGVjdGVkRWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZEVsO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRTZWxlY3Rpb25SYW5nZShcbiAgICBkb2N1bWVudEVsOiBEb2N1bWVudCxcbiAgICB3aW5kb3dFbDogV2luZG93LFxuICApOiBSYW5nZSB8IHVuZGVmaW5lZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAod2luZG93RWwuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3dFbC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoc2VsICYmIHNlbC5nZXRSYW5nZUF0ICYmIHNlbC5yYW5nZUNvdW50KSB7XG4gICAgICAgIHJldHVybiBzZWwuZ2V0UmFuZ2VBdCgwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWwuZ2V0U2VsZWN0aW9uKCk/LmdldFJhbmdlQXQpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudEVsLmdldFNlbGVjdGlvbigpPy5nZXRSYW5nZUF0KDApO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RFbGVtZW50KFxuICAgIGRvY3VtZW50RWw6IERvY3VtZW50LFxuICAgIHdpbmRvd0VsOiBXaW5kb3csXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAod2luZG93RWwuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvd0VsLmdldFNlbGVjdGlvbigpO1xuICAgICAgICBzZWw/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50RWwuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgICBzZWw/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbC5nZXRTZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc2VsID0gZG9jdW1lbnRFbC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgc2VsPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudEVsLmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICAgICAgc2VsPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * @internal\n */\nexport class SkyTextEditorService {\n /**\n * A dictionary representing all active text editors and their settings.\n */\n set editor(value) {\n this.#editor = value;\n }\n get editor() {\n if (!this.#editor) {\n throw new Error('Editor has not been initialized.');\n }\n return this.#editor;\n }\n get isInitialized() {\n return this.#editor !== undefined;\n }\n #editor;\n /**\n * Returns the blur observable from the editor with the corresponding id.\n */\n blurListener() {\n return this.editor.blurObservable;\n }\n /**\n * Returns the click observable from the editor with the corresponding id.\n */\n clickListener() {\n return this.editor.clickObservable;\n }\n /**\n * Returns the command change observable from the editor with the corresponding id.\n */\n commandChangeListener() {\n return this.editor.commandChangeObservable;\n }\n /**\n * Returns the focus observable from the editor with the corresponding id.\n */\n focusListener() {\n return this.editor.focusObservable;\n }\n /**\n * Returns the input change observable from the editor with the corresponding id.\n */\n inputListener() {\n return this.editor.inputObservable;\n }\n /**\n * Returns the selection change observable from the editor with the corresponding id.\n */\n selectionChangeListener() {\n return this.editor.selectionChangeObservable;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3Ivc2VydmljZXMvdGV4dC1lZGl0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0zQzs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFDL0I7O09BRUc7SUFDSCxJQUFXLE1BQU0sQ0FBQyxLQUFvQjtRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU8sQ0FBNEI7SUFFbkM7O09BRUc7SUFDSSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSx1QkFBdUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDO0lBQy9DLENBQUM7OEdBOURVLG9CQUFvQjtrSEFBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEVkaXRvclNldHRpbmcgfSBmcm9tICcuLi90eXBlcy9lZGl0b3Itc2V0dGluZyc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yU2VydmljZSB7XG4gIC8qKlxuICAgKiBBIGRpY3Rpb25hcnkgcmVwcmVzZW50aW5nIGFsbCBhY3RpdmUgdGV4dCBlZGl0b3JzIGFuZCB0aGVpciBzZXR0aW5ncy5cbiAgICovXG4gIHB1YmxpYyBzZXQgZWRpdG9yKHZhbHVlOiBFZGl0b3JTZXR0aW5nKSB7XG4gICAgdGhpcy4jZWRpdG9yID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVkaXRvcigpOiBFZGl0b3JTZXR0aW5nIHtcbiAgICBpZiAoIXRoaXMuI2VkaXRvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFZGl0b3IgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNlZGl0b3I7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2VkaXRvciAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgI2VkaXRvcjogRWRpdG9yU2V0dGluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYmx1ciBvYnNlcnZhYmxlIGZyb20gdGhlIGVkaXRvciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGlkLlxuICAgKi9cbiAgcHVibGljIGJsdXJMaXN0ZW5lcigpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuYmx1ck9ic2VydmFibGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2xpY2sgb2JzZXJ2YWJsZSBmcm9tIHRoZSBlZGl0b3Igd2l0aCB0aGUgY29ycmVzcG9uZGluZyBpZC5cbiAgICovXG4gIHB1YmxpYyBjbGlja0xpc3RlbmVyKCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5jbGlja09ic2VydmFibGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29tbWFuZCBjaGFuZ2Ugb2JzZXJ2YWJsZSBmcm9tIHRoZSBlZGl0b3Igd2l0aCB0aGUgY29ycmVzcG9uZGluZyBpZC5cbiAgICovXG4gIHB1YmxpYyBjb21tYW5kQ2hhbmdlTGlzdGVuZXIoKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmNvbW1hbmRDaGFuZ2VPYnNlcnZhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZvY3VzIG9ic2VydmFibGUgZnJvbSB0aGUgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgZm9jdXNMaXN0ZW5lcigpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuZm9jdXNPYnNlcnZhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGlucHV0IGNoYW5nZSBvYnNlcnZhYmxlIGZyb20gdGhlIGVkaXRvciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGlkLlxuICAgKi9cbiAgcHVibGljIGlucHV0TGlzdGVuZXIoKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmlucHV0T2JzZXJ2YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZWxlY3Rpb24gY2hhbmdlIG9ic2VydmFibGUgZnJvbSB0aGUgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlTGlzdGVuZXIoKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLnNlbGVjdGlvbkNoYW5nZU9ic2VydmFibGU7XG4gIH1cbn1cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { Subject, take } from 'rxjs';\nimport { STYLE_STATE_DEFAULTS } from '../defaults/style-state-defaults';\nimport { UrlTarget } from '../url-modal/text-editor-url-target';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./text-editor-selection.service\";\nimport * as i2 from \"./text-editor.service\";\nimport * as i3 from \"@skyux/core\";\n/**\n * @internal\n */\nexport class SkyTextEditorAdapterService {\n #resourceSvc = inject(SkyLibResourcesService);\n #selectionService;\n #textEditorService;\n #windowRef;\n constructor(selectionService, textEditorService, windowService) {\n this.#selectionService = selectionService;\n this.#textEditorService = textEditorService;\n this.#windowRef = windowService;\n }\n /**\n * Creates a text editor inside the supplied iframe element.\n */\n initEditor(id, iframeElement, styleState, placeholder) {\n this.#textEditorService.editor = this.#createObservers(iframeElement);\n const documentEl = this.#getIframeDocumentEl();\n if (!documentEl) {\n return;\n }\n const styleEl = documentEl.createElement('style');\n styleEl.innerHTML = `.editor:empty:before {\n content: attr(data-placeholder);\n font-family: \"Blackbaud Sans\", Arial, sans-serif;\n color: #686c73;\n font-weight: 400;\n font-size: 15px;\n font-style: italic;\n }`;\n documentEl.head.appendChild(styleEl);\n const style = {\n ...STYLE_STATE_DEFAULTS,\n ...styleState,\n };\n const bodyStyle = `background-color: ${style.backColor};\n color: ${style.fontColor};\n font-family: ${style.font};\n font-size: ${style.fontSize}px`;\n documentEl.querySelector('html')?.setAttribute('lang', 'en');\n documentEl.body.setAttribute('contenteditable', 'true');\n documentEl.body.setAttribute('id', id);\n documentEl.body.setAttribute('role', 'main');\n documentEl.body.setAttribute('class', 'editor');\n documentEl.body.setAttribute('style', bodyStyle);\n documentEl.body.setAttribute('data-placeholder', placeholder || '');\n }\n disableEditor(focusableChildren, textEditorNativeElement) {\n this.#setEditorDisabled(focusableChildren, textEditorNativeElement, true);\n }\n enableEditor(focusableChildren, textEditorNativeElement) {\n this.#setEditorDisabled(focusableChildren, textEditorNativeElement, false);\n }\n /**\n * Executes a command on the text editor with the corresponding id.\n */\n async execCommand(editorCommand) {\n /* istanbul ignore else */\n if (this.#textEditorService.editor) {\n const documentEl = this.#getIframeDocumentEl();\n if (editorCommand.command === 'paste') {\n // Firefox does not support the clipboard API's `readText` as of 3/24. We are ok with just firing an alert when the paste button is used in Firefox.\n if (!navigator.clipboard.readText) {\n this.#resourceSvc\n .getString('skyux_text_editor_paste_incompatibility_error')\n .pipe(take(1))\n .subscribe((errorString) => alert(errorString));\n }\n else {\n await navigator.clipboard.readText().then((clipText) => {\n /* istanbul ignore else */\n if (this.editorSelected()) {\n documentEl?.execCommand('insertHTML', false, clipText);\n this.focusEditor();\n this.#textEditorService.editor.commandChangeObservable.next();\n }\n });\n }\n }\n else {\n /* istanbul ignore else */\n if (this.editorSelected()) {\n documentEl?.execCommand(editorCommand.command, false, editorCommand.value);\n this.focusEditor();\n this.#textEditorService.editor.commandChangeObservable.next();\n }\n }\n }\n }\n getCurrentSelection() {\n const documentEl = this.#getIframeDocumentEl();\n if (documentEl) {\n return this.#selectionService.getCurrentSelection(documentEl);\n }\n return null;\n }\n /**\n * Returns a data URI using the provided text string.\n * Used to display a merge field inside a string of text.\n */\n getMergeFieldDataURI(text) {\n const documentEl = this.#windowRef.nativeWindow.document;\n let textToUse = text;\n if (text.length > 18) {\n textToUse = text.substr(0, 15) + '...';\n }\n const canvasElement = documentEl.createElement('canvas');\n canvasElement.setAttribute('height', '20');\n canvasElement.setAttribute('width', '100');\n canvasElement.style.backgroundColor = 'tan';\n canvasElement.style.border = '1px solid #000000';\n canvasElement.style.borderRadius = '5px';\n const context = canvasElement.getContext('2d');\n context.font = '12px Arial';\n context.textAlign = 'center';\n context.fillText(textToUse, 50, 15);\n context.globalCompositeOperation = 'destination-over';\n context.fillStyle = '#00FFFF';\n context.fillRect(0, 0, 100, 20);\n context.globalCompositeOperation = 'source-over';\n context.lineWidth = 2;\n context.strokeStyle = '#FF0000';\n context.strokeRect(0, 0, 100, 20);\n const result = canvasElement.toDataURL('image/png', 1.0);\n return result;\n }\n getStyleState() {\n const documentEl = this.#getIframeDocumentEl();\n /* istanbul ignore else */\n if (documentEl && this.editorSelected()) {\n return {\n backColor: this.#getColor(documentEl, 'BackColor'),\n fontColor: this.#getColor(documentEl, 'ForeColor'),\n fontSize: parseInt(this.#getFontSize(), undefined),\n font: documentEl.queryCommandValue('fontname'),\n boldState: documentEl.queryCommandState('Bold'),\n italicState: documentEl.queryCommandState('Italic'),\n underlineState: documentEl.queryCommandState('Underline'),\n linkState: this.#hasLink(),\n };\n }\n /* istanbul ignore next */\n return {};\n }\n getEditorInnerHtml() {\n const documentEl = this.#getIframeDocumentEl();\n if (documentEl) {\n return this.#replaceHtmlCodes(documentEl.body.innerHTML);\n }\n return '';\n }\n setEditorInnerHtml(value) {\n const documentEl = this.#getIframeDocumentEl();\n const editorContent = documentEl?.body;\n /* istanbul ignore else */\n if (editorContent && editorContent.innerHTML !== value) {\n editorContent.innerHTML = value;\n }\n }\n focusEditor() {\n /* istanbul ignore else */\n if (this.#textEditorService.editor) {\n const windowEl = this.#getContentWindowEl();\n const iframeDocumentEl = this.#getIframeDocumentEl();\n if (windowEl && iframeDocumentEl) {\n const currentSelection = this.#selectionService.getCurrentSelectionRange(iframeDocumentEl, windowEl);\n const cursorIsNotActiveAndHasReset = currentSelection &&\n currentSelection.startOffset === 0 &&\n currentSelection.endOffset === 0;\n if (!this.editorSelected() || cursorIsNotActiveAndHasReset) {\n // focus the end of the editor\n const documentEl = this.#windowRef.nativeWindow.document;\n const editor = iframeDocumentEl.body;\n const range = documentEl.createRange();\n this.#textEditorService.editor.iframeElementRef.focus();\n editor.focus();\n if (windowEl.getSelection && documentEl.createRange) {\n range.selectNodeContents(editor);\n range.collapse(false);\n const sel = windowEl.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n }\n }\n else {\n // Cursor may not be active, restore it\n this.#textEditorService.editor.iframeElementRef.focus();\n iframeDocumentEl.body.focus();\n }\n }\n }\n }\n getLink() {\n let link;\n const anchorEl = this.getSelectedAnchorTag();\n if (anchorEl && anchorEl.href) {\n link = {\n target: anchorEl.getAttribute('target') === '_blank'\n ? UrlTarget.NewWindow\n : UrlTarget.None,\n url: anchorEl.href,\n };\n }\n return link;\n }\n getSelectedAnchorTag() {\n const selectedEl = this.#getCurrentSelectionParentElement();\n if (selectedEl) {\n return this.#getParent(selectedEl, 'a');\n }\n return undefined;\n }\n saveSelection() {\n const documentEl = this.#getIframeDocumentEl();\n const windowEl = this.#getContentWindowEl();\n if (documentEl && windowEl) {\n return this.#selectionService.getCurrentSelectionRange(documentEl, windowEl);\n }\n return undefined;\n }\n selectElement(element) {\n const documentEl = this.#getIframeDocumentEl();\n const windowEl = this.#getContentWindowEl();\n if (documentEl && windowEl) {\n this.#selectionService.selectElement(documentEl, windowEl, element);\n }\n }\n setErrorAttributes(errorId, errors) {\n const documentEl = this.#getIframeDocumentEl();\n documentEl?.body.setAttribute('aria-invalid', (!!errors).toString());\n if (errors && errorId) {\n documentEl?.body.setAttribute('aria-errormessage', errorId);\n }\n else {\n documentEl?.body.removeAttribute('aria-errormessage');\n }\n }\n setLabelAttribute(label) {\n if (label) {\n const documentEl = this.#getIframeDocumentEl();\n documentEl?.body.setAttribute('aria-label', label);\n }\n }\n setPlaceholder(placeholder) {\n const documentEl = this.#getIframeDocumentEl();\n documentEl?.body.setAttribute('data-placeholder', placeholder || '');\n }\n setRequiredAttribute(required) {\n const documentEl = this.#getIframeDocumentEl();\n documentEl?.body.setAttribute('aria-required', required.toString());\n }\n async setFontSize(fontSize) {\n const doc = this.#getIframeDocumentEl();\n await this.execCommand({ command: 'fontSize', value: '1' });\n if (doc) {\n const fontElements = Array.from(doc.querySelectorAll('font[size=\"1\"]'));\n for (const element of fontElements) {\n element.removeAttribute('size');\n element.style.fontSize = fontSize + 'px';\n }\n this.#cleanUpBlankStyleTags(doc);\n }\n this.focusEditor();\n this.#textEditorService.editor.commandChangeObservable.next();\n }\n removeObservers(setting) {\n /* istanbul ignore next */\n const documentEl = setting.iframeElementRef.contentWindow\n ? setting.iframeElementRef.contentWindow.document\n : setting.iframeElementRef.contentDocument;\n setting.selectionChangeObservable.complete();\n setting.clickObservable.complete();\n setting.commandChangeObservable.complete();\n if (documentEl) {\n documentEl.removeEventListener('selectionchange', setting.selectionListener);\n documentEl.removeEventListener('input', setting.selectionListener);\n documentEl.removeEventListener('mousedown', setting.clickListener);\n documentEl.body.removeEventListener('paste', setting.pasteListener);\n }\n }\n #getContentWindowEl() {\n return this.#textEditorService.editor.iframeElementRef\n .contentWindow;\n }\n #getChildSelectedAnchorTags() {\n const selectedRange = this.getCurrentSelection()?.getRangeAt(0);\n if (selectedRange && selectedRange.toString().length <= 0) {\n return [];\n }\n const parentElement = this.#getCurrentSelectionParentElement();\n let childElements = [];\n /* istanbul ignore else */\n if (parentElement) {\n childElements = Array.from(parentElement.querySelectorAll('a'));\n }\n /* istanbul ignore next */\n return childElements.filter((element) => {\n // IE specific\n if (selectedRange) {\n if (!selectedRange.intersectsNode) {\n if (!element || !element.href) {\n return false;\n }\n const tempRange = document.createRange();\n tempRange.selectNodeContents(element);\n return ((selectedRange.compareBoundaryPoints(Range.START_TO_START, tempRange) !== -1 &&\n selectedRange.compareBoundaryPoints(Range.START_TO_END, tempRange) !== 1) ||\n (selectedRange.compareBoundaryPoints(Range.END_TO_START, tempRange) !== -1 &&\n selectedRange.compareBoundaryPoints(Range.END_TO_END, tempRange) !== 1));\n }\n }\n // Normal non-IE\n return (!!element && !!element.href && selectedRange?.intersectsNode(element));\n });\n }\n #getIframeDocumentEl() {\n const contentWindowEl = this.#getContentWindowEl();\n /* istanbul ignore else */\n if (contentWindowEl) {\n return contentWindowEl.document;\n }\n /* istanbul ignore next */\n return this.#textEditorService.editor.iframeElementRef\n .contentDocument;\n }\n #getFontSize() {\n let fontSize = STYLE_STATE_DEFAULTS.fontSize.toString();\n const selection = this.getCurrentSelection();\n /* istanbul ignore else */\n if (selection &&\n selection.anchorNode &&\n selection.anchorNode.parentElement) {\n let element = selection.anchorNode;\n if (element?.nodeType !== 1) {\n element = element?.parentElement;\n }\n const computedStyle = window.getComputedStyle(element);\n /* istanbul ignore else */\n if (computedStyle) {\n fontSize = computedStyle.getPropertyValue('font-size');\n }\n }\n return fontSize;\n }\n #createObservers(element) {\n /* istanbul ignore next */\n const documentEl = element.contentWindow\n ? element.contentWindow.document\n : element.contentDocument;\n // Firefox bug where we need to open/close to cancel load so it doesn't overwrite attrs\n documentEl?.open();\n documentEl?.close();\n const selectionObservable = new Subject();\n const selectionListener = () => selectionObservable.next();\n const clickObservable = new Subject();\n const clickListener = () => clickObservable.next();\n const pasteListener = this.#getPasteOverride();\n const blurObservable = new Subject();\n const blurListener = () => blurObservable.next();\n const focusObservable = new Subject();\n const focusListener = () => focusObservable.next();\n const inputObservable = new Subject();\n const inputListener = () => inputObservable.next();\n documentEl?.addEventListener('selectionchange', selectionListener);\n documentEl?.addEventListener('input', inputListener);\n documentEl?.addEventListener('mousedown', clickListener);\n documentEl?.body.addEventListener('paste', pasteListener);\n documentEl?.body.addEventListener('blur', blurListener);\n documentEl?.body.addEventListener('focusin', focusListener);\n return {\n blurObservable,\n clickObservable,\n focusObservable,\n commandChangeObservable: new Subject(),\n iframeElementRef: element,\n inputObservable,\n selectionChangeObservable: selectionObservable,\n blurListener,\n focusListener,\n clickListener,\n inputListener,\n pasteListener,\n selectionListener,\n };\n }\n #getPasteOverride() {\n /* istanbul ignore next */\n return (e) => {\n e.preventDefault();\n const text = e.clipboardData?.getData('text/plain');\n if (text !== undefined) {\n void this.execCommand({\n command: 'insertHTML',\n value: text.toString(),\n });\n }\n };\n }\n #getCurrentSelectionParentElement() {\n const documentEl = this.#getIframeDocumentEl();\n if (documentEl) {\n return this.#selectionService.getCurrentSelectionParentElement(documentEl);\n }\n return undefined;\n }\n #getColor(documentEl, selector) {\n const commandValue = documentEl.queryCommandValue(selector);\n // Edge is weird and returns numbers\n /* istanbul ignore if */\n if (typeof commandValue === 'number') {\n /* istanbul ignore next */\n return ('rgb(' +\n (commandValue & 0xff) +\n ', ' +\n ((commandValue & 0xff00) >> 8) +\n ', ' +\n ((commandValue & 0xff0000) >> 16) +\n ')');\n }\n // Firefox uses 'Transparent' instead of a color value\n /* istanbul ignore next */\n if (commandValue.toString().toLowerCase() === 'transparent') {\n return STYLE_STATE_DEFAULTS.backColor;\n }\n return commandValue;\n }\n #hasLink() {\n const anchorEl = this.getSelectedAnchorTag();\n const childAnchorEls = this.#getChildSelectedAnchorTags();\n /* istanbul ignore next */\n return childAnchorEls.length > 0 || (!!anchorEl && !!anchorEl.href);\n }\n #getParent(element, tag) {\n let currentNode = element;\n while (currentNode && currentNode.tagName.toUpperCase() !== 'BODY') {\n if (currentNode.tagName.toUpperCase() === tag.toUpperCase()) {\n return currentNode;\n }\n currentNode = currentNode.parentElement;\n }\n return undefined;\n }\n editorSelected() {\n const documentEl = this.#getIframeDocumentEl();\n if (documentEl) {\n return this.#selectionService.isElementSelected(documentEl, documentEl.body);\n }\n return false;\n }\n #cleanUpBlankStyleTags(doc) {\n const orphanElements = Array.from(doc.querySelectorAll('font,span,*[style=\"\"]'));\n for (const element of orphanElements) {\n if (!element.getAttribute('style')) {\n element.removeAttribute('style');\n }\n }\n const removableElements = orphanElements.filter((element) => {\n const tagName = element.tagName.toUpperCase();\n return ((tagName === 'FONT' || tagName === 'SPAN') &&\n (element.attributes.length === 0 || !element.hasChildNodes));\n });\n for (const element of removableElements) {\n const parent = element.parentNode;\n /* istanbul ignore else */\n if (parent) {\n while (element.firstChild) {\n parent.insertBefore(element.firstChild, element);\n }\n parent.removeChild(element);\n }\n }\n }\n // Certain values are encoded in html and need to be decoded\n #replaceHtmlCodes(str) {\n return str\n .replace(/ /, String.fromCharCode(160))\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n }\n #setEditorDisabled(focusableChildren, textEditorNativeElement, disabled) {\n textEditorNativeElement.style.pointerEvents = disabled ? 'none' : 'auto';\n textEditorNativeElement.setAttribute('aria-disabled', disabled ? 'true' : 'false');\n /* istanbul ignore else */\n if (focusableChildren.length > 0) {\n focusableChildren.forEach((aFocusableChild) => {\n aFocusableChild.tabIndex = disabled ? -1 : 0;\n });\n }\n this.#getIframeDocumentEl()?.body.setAttribute('contenteditable', disabled ? 'false' : 'true');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorAdapterService, deps: [{ token: i1.SkyTextEditorSelectionService }, { token: i2.SkyTextEditorService }, { token: i3.SkyAppWindowRef }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorAdapterService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorAdapterService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i1.SkyTextEditorSelectionService }, { type: i2.SkyTextEditorService }, { type: i3.SkyAppWindowRef }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXJELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBS3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFLaEU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sMkJBQTJCO0lBQzdCLFlBQVksR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN2RCxpQkFBaUIsQ0FBZ0M7SUFDakQsa0JBQWtCLENBQXVCO0lBQ3pDLFVBQVUsQ0FBa0I7SUFFNUIsWUFDRSxnQkFBK0MsRUFDL0MsaUJBQXVDLEVBQ3ZDLGFBQThCO1FBRTlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUMxQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVSxDQUNmLEVBQVUsRUFDVixhQUFnQyxFQUNoQyxVQUFtQyxFQUNuQyxXQUFvQjtRQUVwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENB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dUJBQXVCLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3pFLHVCQUF1QixDQUFDLFlBQVksQ0FDbEMsZUFBZSxFQUNmLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzVCLENBQUM7UUFDRiwwQkFBMEI7UUFDMUIsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7Z0JBQzVDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQzVDLGlCQUFpQixFQUNqQixRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUM1QixDQUFDO0lBQ0osQ0FBQzs4R0FqbkJVLDJCQUEyQjtrSEFBM0IsMkJBQTJCOzsyRkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5QXBwV2luZG93UmVmIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTVFlMRV9TVEFURV9ERUZBVUxUUyB9IGZyb20gJy4uL2RlZmF1bHRzL3N0eWxlLXN0YXRlLWRlZmF1bHRzJztcbmltcG9ydCB7IEVkaXRvckNvbW1hbmQgfSBmcm9tICcuLi90eXBlcy9lZGl0b3ItY29tbWFuZCc7XG5pbXBvcnQgeyBFZGl0b3JTZXR0aW5nIH0gZnJvbSAnLi4vdHlwZXMvZWRpdG9yLXNldHRpbmcnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUgfSBmcm9tICcuLi90eXBlcy9zdHlsZS1zdGF0ZSc7XG5pbXBvcnQgeyBVcmxNb2RhbFJlc3VsdCB9IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwtcmVzdWx0JztcbmltcG9ydCB7IFVybFRhcmdldCB9IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtdGFyZ2V0JztcblxuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi90ZXh0LWVkaXRvci5zZXJ2aWNlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSB7XG4gIHJlYWRvbmx5ICNyZXNvdXJjZVN2YyA9IGluamVjdChTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlKTtcbiAgI3NlbGVjdGlvblNlcnZpY2U6IFNreVRleHRFZGl0b3JTZWxlY3Rpb25TZXJ2aWNlO1xuICAjdGV4dEVkaXRvclNlcnZpY2U6IFNreVRleHRFZGl0b3JTZXJ2aWNlO1xuICAjd2luZG93UmVmOiBTa3lBcHBXaW5kb3dSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2VsZWN0aW9uU2VydmljZTogU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UsXG4gICAgdGV4dEVkaXRvclNlcnZpY2U6IFNreVRleHRFZGl0b3JTZXJ2aWNlLFxuICAgIHdpbmRvd1NlcnZpY2U6IFNreUFwcFdpbmRvd1JlZixcbiAgKSB7XG4gICAgdGhpcy4jc2VsZWN0aW9uU2VydmljZSA9IHNlbGVjdGlvblNlcnZpY2U7XG4gICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UgPSB0ZXh0RWRpdG9yU2VydmljZTtcbiAgICB0aGlzLiN3aW5kb3dSZWYgPSB3aW5kb3dTZXJ2aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZXh0IGVkaXRvciBpbnNpZGUgdGhlIHN1cHBsaWVkIGlmcmFtZSBlbGVtZW50LlxuICAgKi9cbiAgcHVibGljIGluaXRFZGl0b3IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBpZnJhbWVFbGVtZW50OiBIVE1MSUZyYW1lRWxlbWVudCxcbiAgICBzdHlsZVN0YXRlOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSxcbiAgICBwbGFjZWhvbGRlcj86IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yID0gdGhpcy4jY3JlYXRlT2JzZXJ2ZXJzKGlmcmFtZUVsZW1lbnQpO1xuXG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBpZiAoIWRvY3VtZW50RWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZUVsID0gZG9jdW1lbnRFbC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWwuaW5uZXJIVE1MID0gYC5lZGl0b3I6ZW1wdHk6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1wbGFjZWhvbGRlcik7XG4gICAgICBmb250LWZhbWlseTogXCJCbGFja2JhdWQgU2Fuc1wiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgIGNvbG9yOiAjNjg2YzczO1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9YDtcbiAgICBkb2N1bWVudEVsLmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbCk7XG5cbiAgICBjb25zdCBzdHlsZTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUgPSB7XG4gICAgICAuLi5TVFlMRV9TVEFURV9ERUZBVUxUUyxcbiAgICAgIC4uLnN0eWxlU3RhdGUsXG4gICAgfTtcbiAgICBjb25zdCBib2R5U3R5bGUgPSBgYmFja2dyb3VuZC1jb2xvcjogJHtzdHlsZS5iYWNrQ29sb3J9O1xuICAgICAgY29sb3I6ICR7c3R5bGUuZm9udENvbG9yfTtcbiAgICAgIGZvbnQtZmFtaWx5OiAke3N0eWxlLmZvbnR9O1xuICAgICAgZm9udC1zaXplOiAke3N0eWxlLmZvbnRTaXplfXB4YDtcbiAgICBkb2N1bWVudEVsLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKT8uc2V0QXR0cmlidXRlKCdsYW5nJywgJ2VuJyk7XG4gICAgZG9jdW1lbnRFbC5ib2R5LnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ3RydWUnKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdpZCcsIGlkKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdyb2xlJywgJ21haW4nKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdjbGFzcycsICdlZGl0b3InKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdzdHlsZScsIGJvZHlTdHlsZSk7XG4gICAgZG9jdW1lbnRFbC5ib2R5LnNldEF0dHJpYnV0ZSgnZGF0YS1wbGFjZWhvbGRlcicsIHBsYWNlaG9sZGVyIHx8ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlRWRpdG9yKFxuICAgIGZvY3VzYWJsZUNoaWxkcmVuOiBIVE1MRWxlbWVudFtdLFxuICAgIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy4jc2V0RWRpdG9yRGlzYWJsZWQoZm9jdXNhYmxlQ2hpbGRyZW4sIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50LCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmFibGVFZGl0b3IoXG4gICAgZm9jdXNhYmxlQ2hpbGRyZW46IEhUTUxFbGVtZW50W10sXG4gICAgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICApOiB2b2lkIHtcbiAgICB0aGlzLiNzZXRFZGl0b3JEaXNhYmxlZChmb2N1c2FibGVDaGlsZHJlbiwgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIGNvbW1hbmQgb24gdGhlIHRleHQgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhlY0NvbW1hbmQoZWRpdG9yQ29tbWFuZDogRWRpdG9yQ29tbWFuZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvcikge1xuICAgICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcblxuICAgICAgaWYgKGVkaXRvckNvbW1hbmQuY29tbWFuZCA9PT0gJ3Bhc3RlJykge1xuICAgICAgICAvLyBGaXJlZm94IGRvZXMgbm90IHN1cHBvcnQgdGhlIGNsaXBib2FyZCBBUEkncyBgcmVhZFRleHRgIGFzIG9mIDMvMjQuIFdlIGFyZSBvayB3aXRoIGp1c3QgZmlyaW5nIGFuIGFsZXJ0IHdoZW4gdGhlIHBhc3RlIGJ1dHRvbiBpcyB1c2VkIGluIEZpcmVmb3guXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmNsaXBib2FyZC5yZWFkVGV4dCkge1xuICAgICAgICAgIHRoaXMuI3Jlc291cmNlU3ZjXG4gICAgICAgICAgICAuZ2V0U3RyaW5nKCdza3l1eF90ZXh0X2VkaXRvcl9wYXN0ZV9pbmNvbXBhdGliaWxpdHlfZXJyb3InKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGVycm9yU3RyaW5nKSA9PiBhbGVydChlcnJvclN0cmluZykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQucmVhZFRleHQoKS50aGVuKChjbGlwVGV4dCkgPT4ge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvclNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgZG9jdW1lbnRFbD8uZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgY2xpcFRleHQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNFZGl0b3IoKTtcbiAgICAgICAgICAgICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yLmNvbW1hbmRDaGFuZ2VPYnNlcnZhYmxlLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yU2VsZWN0ZWQoKSkge1xuICAgICAgICAgIGRvY3VtZW50RWw/LmV4ZWNDb21tYW5kKFxuICAgICAgICAgICAgZWRpdG9yQ29tbWFuZC5jb21tYW5kLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBlZGl0b3JDb21tYW5kLnZhbHVlLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLmZvY3VzRWRpdG9yKCk7XG4gICAgICAgICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yLmNvbW1hbmRDaGFuZ2VPYnNlcnZhYmxlLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXJyZW50U2VsZWN0aW9uKCk6IFNlbGVjdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCk7XG4gICAgaWYgKGRvY3VtZW50RWwpIHtcbiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3Rpb25TZXJ2aWNlLmdldEN1cnJlbnRTZWxlY3Rpb24oZG9jdW1lbnRFbCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBkYXRhIFVSSSB1c2luZyB0aGUgcHJvdmlkZWQgdGV4dCBzdHJpbmcuXG4gICAqIFVzZWQgdG8gZGlzcGxheSBhIG1lcmdlIGZpZWxkIGluc2lkZSBhIHN0cmluZyBvZiB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldE1lcmdlRmllbGREYXRhVVJJKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI3dpbmRvd1JlZi5uYXRpdmVXaW5kb3cuZG9jdW1lbnQ7XG4gICAgbGV0IHRleHRUb1VzZSA9IHRleHQ7XG4gICAgaWYgKHRleHQubGVuZ3RoID4gMTgpIHtcbiAgICAgIHRleHRUb1VzZSA9IHRleHQuc3Vic3RyKDAsIDE1KSArICcuLi4nO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSBkb2N1bWVudEVsLmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhc0VsZW1lbnQuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMjAnKTtcbiAgICBjYW52YXNFbGVtZW50LnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJyk7XG4gICAgY2FudmFzRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndGFuJztcbiAgICBjYW52YXNFbGVtZW50LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgIzAwMDAwMCc7XG4gICAgY2FudmFzRWxlbWVudC5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNXB4JztcblxuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXNFbGVtZW50LmdldENvbnRleHQoJzJkJyk7XG4gICAgY29udGV4dC5mb250ID0gJzEycHggQXJpYWwnO1xuICAgIGNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgY29udGV4dC5maWxsVGV4dCh0ZXh0VG9Vc2UsIDUwLCAxNSk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1vdmVyJztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDBGRkZGJztcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDEwMCwgMjApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInO1xuICAgIGNvbnRleHQubGluZVdpZHRoID0gMjtcbiAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuc3Ryb2tlUmVjdCgwLCAwLCAxMDAsIDIwKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbnZhc0VsZW1lbnQudG9EYXRhVVJMKCdpbWFnZS9wbmcnLCAxLjApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3R5bGVTdGF0ZSgpOiBQYXJ0aWFsPFNreVRleHRFZGl0b3JTdHlsZVN0YXRlPiB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGRvY3VtZW50RWwgJiYgdGhpcy5lZGl0b3JTZWxlY3RlZCgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYWNrQ29sb3I6IHRoaXMuI2dldENvbG9yKGRvY3VtZW50RWwsICdCYWNrQ29sb3InKSxcbiAgICAgICAgZm9udENvbG9yOiB0aGlzLiNnZXRDb2xvcihkb2N1bWVudEVsLCAnRm9yZUNvbG9yJyksXG4gICAgICAgIGZvbnRTaXplOiBwYXJzZUludCh0aGlzLiNnZXRGb250U2l6ZSgpLCB1bmRlZmluZWQpLFxuICAgICAgICBmb250OiBkb2N1bWVudEVsLnF1ZXJ5Q29tbWFuZFZhbHVlKCdmb250bmFtZScpLFxuICAgICAgICBib2xkU3RhdGU6IGRvY3VtZW50RWwucXVlcnlDb21tYW5kU3RhdGUoJ0JvbGQnKSxcbiAgICAgICAgaXRhbGljU3RhdGU6IGRvY3VtZW50RWwucXVlcnlDb21tYW5kU3RhdGUoJ0l0YWxpYycpLFxuICAgICAgICB1bmRlcmxpbmVTdGF0ZTogZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRTdGF0ZSgnVW5kZXJsaW5lJyksXG4gICAgICAgIGxpbmtTdGF0ZTogdGhpcy4jaGFzTGluaygpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFZGl0b3JJbm5lckh0bWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGlmIChkb2N1bWVudEVsKSB7XG4gICAgICByZXR1cm4gdGhpcy4jcmVwbGFjZUh0bWxDb2Rlcyhkb2N1bWVudEVsLmJvZHkuaW5uZXJIVE1MKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcklubmVySHRtbCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBjb25zdCBlZGl0b3JDb250ZW50ID0gZG9jdW1lbnRFbD8uYm9keTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChlZGl0b3JDb250ZW50ICYmIGVkaXRvckNvbnRlbnQuaW5uZXJIVE1MICE9PSB2YWx1ZSkge1xuICAgICAgZWRpdG9yQ29udGVudC5pbm5lckhUTUwgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9jdXNFZGl0b3IoKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yKSB7XG4gICAgICBjb25zdCB3aW5kb3dFbCA9IHRoaXMuI2dldENvbnRlbnRXaW5kb3dFbCgpO1xuICAgICAgY29uc3QgaWZyYW1lRG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICAgIGlmICh3aW5kb3dFbCAmJiBpZnJhbWVEb2N1bWVudEVsKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPVxuICAgICAgICAgIHRoaXMuI3NlbGVjdGlvblNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvblJhbmdlKFxuICAgICAgICAgICAgaWZyYW1lRG9jdW1lbnRFbCxcbiAgICAgICAgICAgIHdpbmRvd0VsLFxuICAgICAgICAgICk7XG4gICAgICAgIGNvbnN0IGN1cnNvcklzTm90QWN0aXZlQW5kSGFzUmVzZXQgPVxuICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24gJiZcbiAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0T2Zmc2V0ID09PSAwICYmXG4gICAgICAgICAgY3VycmVudFNlbGVjdGlvbi5lbmRPZmZzZXQgPT09IDA7XG5cbiAgICAgICAgaWYgKCF0aGlzLmVkaXRvclNlbGVjdGVkKCkgfHwgY3Vyc29ySXNOb3RBY3RpdmVBbmRIYXNSZXNldCkge1xuICAgICAgICAgIC8vIGZvY3VzIHRoZSBlbmQgb2YgdGhlIGVkaXRvclxuICAgICAgICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiN3aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50O1xuICAgICAgICAgIGNvbnN0IGVkaXRvciA9IGlmcmFtZURvY3VtZW50RWwuYm9keSBhcyBIVE1MQm9keUVsZW1lbnQ7XG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudEVsLmNyZWF0ZVJhbmdlKCk7XG5cbiAgICAgICAgICB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuaWZyYW1lRWxlbWVudFJlZi5mb2N1cygpO1xuICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuXG4gICAgICAgICAgaWYgKHdpbmRvd0VsLmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudEVsLmNyZWF0ZVJhbmdlKSB7XG4gICAgICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTtcbiAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvd0VsLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgc2VsPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgIHNlbD8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDdXJzb3IgbWF5IG5vdCBiZSBhY3RpdmUsIHJlc3RvcmUgaXRcbiAgICAgICAgICB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuaWZyYW1lRWxlbWVudFJlZi5mb2N1cygpO1xuICAgICAgICAgIGlmcmFtZURvY3VtZW50RWwuYm9keS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldExpbmsoKTogVXJsTW9kYWxSZXN1bHQgfCB1bmRlZmluZWQge1xuICAgIGxldCBsaW5rOiBVcmxNb2RhbFJlc3VsdCB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhbmNob3JFbCA9IHRoaXMuZ2V0U2VsZWN0ZWRBbmNob3JUYWcoKTtcbiAgICBpZiAoYW5jaG9yRWwgJiYgYW5jaG9yRWwuaHJlZikge1xuICAgICAgbGluayA9IHtcbiAgICAgICAgdGFyZ2V0OlxuICAgICAgICAgIGFuY2hvckVsLmdldEF0dHJpYnV0ZSgndGFyZ2V0JykgPT09ICdfYmxhbmsnXG4gICAgICAgICAgICA/IFVybFRhcmdldC5OZXdXaW5kb3dcbiAgICAgICAgICAgIDogVXJsVGFyZ2V0Lk5vbmUsXG4gICAgICAgIHVybDogYW5jaG9yRWwuaHJlZixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRBbmNob3JUYWcoKTogSFRNTEFuY2hvckVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzZWxlY3RlZEVsID0gdGhpcy4jZ2V0Q3VycmVudFNlbGVjdGlvblBhcmVudEVsZW1lbnQoKTtcblxuICAgIGlmIChzZWxlY3RlZEVsKSB7XG4gICAgICByZXR1cm4gdGhpcy4jZ2V0UGFyZW50KHNlbGVjdGVkRWwsICdhJykgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlU2VsZWN0aW9uKCk6IFJhbmdlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGNvbnN0IHdpbmRvd0VsID0gdGhpcy4jZ2V0Q29udGVudFdpbmRvd0VsKCk7XG4gICAgaWYgKGRvY3VtZW50RWwgJiYgd2luZG93RWwpIHtcbiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3Rpb25TZXJ2aWNlLmdldEN1cnJlbnRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgZG9jdW1lbnRFbCxcbiAgICAgICAgd2luZG93RWwsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdEVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGNvbnN0IHdpbmRvd0VsID0gdGhpcy4jZ2V0Q29udGVudFdpbmRvd0VsKCk7XG4gICAgaWYgKGRvY3VtZW50RWwgJiYgd2luZG93RWwpIHtcbiAgICAgIHRoaXMuI3NlbGVjdGlvblNlcnZpY2Uuc2VsZWN0RWxlbWVudChkb2N1bWVudEVsLCB3aW5kb3dFbCwgZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEVycm9yQXR0cmlidXRlcyhcbiAgICBlcnJvcklkOiBzdHJpbmcsXG4gICAgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBkb2N1bWVudEVsPy5ib2R5LnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgKCEhZXJyb3JzKS50b1N0cmluZygpKTtcbiAgICBpZiAoZXJyb3JzICYmIGVycm9ySWQpIHtcbiAgICAgIGRvY3VtZW50RWw/LmJvZHkuc2V0QXR0cmlidXRlKCdhcmlhLWVycm9ybWVzc2FnZScsIGVycm9ySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudEVsPy5ib2R5LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1lcnJvcm1lc3NhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0TGFiZWxBdHRyaWJ1dGUobGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmIChsYWJlbCkge1xuICAgICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICAgIGRvY3VtZW50RWw/LmJvZHkuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgbGFiZWwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRQbGFjZWhvbGRlcihwbGFjZWhvbGRlcj86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCk7XG4gICAgZG9jdW1lbnRFbD8uYm9keS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcGxhY2Vob2xkZXInLCBwbGFjZWhvbGRlciB8fCAnJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0UmVxdWlyZWRBdHRyaWJ1dGUocmVxdWlyZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGRvY3VtZW50RWw/LmJvZHkuc2V0QXR0cmlidXRlKCdhcmlhLXJlcXVpcmVkJywgcmVxdWlyZWQudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0Rm9udFNpemUoZm9udFNpemU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKHsgY29tbWFuZDogJ2ZvbnRTaXplJywgdmFsdWU6ICcxJyB9KTtcbiAgICBpZiAoZG9jKSB7XG4gICAgICBjb25zdCBmb250RWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBBcnJheS5mcm9tKFxuICAgICAgICBkb2MucXVlcnlTZWxlY3RvckFsbCgnZm9udFtzaXplPVwiMVwiXScpLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBmb250RWxlbWVudHMpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3NpemUnKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5mb250U2l6ZSA9IGZvbnRTaXplICsgJ3B4JztcbiAgICAgIH1cbiAgICAgIHRoaXMuI2NsZWFuVXBCbGFua1N0eWxlVGFncyhkb2MpO1xuICAgIH1cblxuICAgIHRoaXMuZm9jdXNFZGl0b3IoKTtcbiAgICB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuY29tbWFuZENoYW5nZU9ic2VydmFibGUubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZU9ic2VydmVycyhzZXR0aW5nOiBFZGl0b3JTZXR0aW5nKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBjb25zdCBkb2N1bWVudEVsID0gc2V0dGluZy5pZnJhbWVFbGVtZW50UmVmLmNvbnRlbnRXaW5kb3dcbiAgICAgID8gc2V0dGluZy5pZnJhbWVFbGVtZW50UmVmLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnRcbiAgICAgIDogc2V0dGluZy5pZnJhbWVFbGVtZW50UmVmLmNvbnRlbnREb2N1bWVudDtcbiAgICBzZXR0aW5nLnNlbGVjdGlvbkNoYW5nZU9ic2VydmFibGUuY29tcGxldGUoKTtcbiAgICBzZXR0aW5nLmNsaWNrT2JzZXJ2YWJsZS5jb21wbGV0ZSgpO1xuICAgIHNldHRpbmcuY29tbWFuZENoYW5nZU9ic2VydmFibGUuY29tcGxldGUoKTtcbiAgICBpZiAoZG9jdW1lbnRFbCkge1xuICAgICAgZG9jdW1lbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2VsZWN0aW9uY2hhbmdlJyxcbiAgICAgICAgc2V0dGluZy5zZWxlY3Rpb25MaXN0ZW5lcixcbiAgICAgICk7XG4gICAgICBkb2N1bWVudEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0Jywgc2V0dGluZy5zZWxlY3Rpb25MaXN0ZW5lcik7XG4gICAgICBkb2N1bWVudEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHNldHRpbmcuY2xpY2tMaXN0ZW5lcik7XG4gICAgICBkb2N1bWVudEVsLmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBzZXR0aW5nLnBhc3RlTGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gICNnZXRDb250ZW50V2luZG93RWwoKTogV2luZG93IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yLmlmcmFtZUVsZW1lbnRSZWZcbiAgICAgIC5jb250ZW50V2luZG93IGFzIFdpbmRvdztcbiAgfVxuXG4gICNnZXRDaGlsZFNlbGVjdGVkQW5jaG9yVGFncygpOiBFbGVtZW50W10ge1xuICAgIGNvbnN0IHNlbGVjdGVkUmFuZ2UgPSB0aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAoc2VsZWN0ZWRSYW5nZSAmJiBzZWxlY3RlZFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGhpcy4jZ2V0Q3VycmVudFNlbGVjdGlvblBhcmVudEVsZW1lbnQoKTtcblxuICAgIGxldCBjaGlsZEVsZW1lbnRzOiBIVE1MQW5jaG9yRWxlbWVudFtdID0gW107XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgY2hpbGRFbGVtZW50cyA9IEFycmF5LmZyb20ocGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhJykpO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIGNoaWxkRWxlbWVudHMuZmlsdGVyKChlbGVtZW50KSA9PiB7XG4gICAgICAvLyBJRSBzcGVjaWZpY1xuICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UpIHtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlLmludGVyc2VjdHNOb2RlKSB7XG4gICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmhyZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdGVtcFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICB0ZW1wUmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2VsZWN0ZWRSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoXG4gICAgICAgICAgICAgIFJhbmdlLlNUQVJUX1RPX1NUQVJULFxuICAgICAgICAgICAgICB0ZW1wUmFuZ2UsXG4gICAgICAgICAgICApICE9PSAtMSAmJlxuICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhcbiAgICAgICAgICAgICAgICBSYW5nZS5TVEFSVF9UT19FTkQsXG4gICAgICAgICAgICAgICAgdGVtcFJhbmdlLFxuICAgICAgICAgICAgICApICE9PSAxKSB8fFxuICAgICAgICAgICAgKHNlbGVjdGVkUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFxuICAgICAgICAgICAgICBSYW5nZS5FTkRfVE9fU1RBUlQsXG4gICAgICAgICAgICAgIHRlbXBSYW5nZSxcbiAgICAgICAgICAgICkgIT09IC0xICYmXG4gICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFxuICAgICAgICAgICAgICAgIFJhbmdlLkVORF9UT19FTkQsXG4gICAgICAgICAgICAgICAgdGVtcFJhbmdlLFxuICAgICAgICAgICAgICApICE9PSAxKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm9ybWFsIG5vbi1JRVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgISFlbGVtZW50ICYmICEhZWxlbWVudC5ocmVmICYmIHNlbGVjdGVkUmFuZ2U/LmludGVyc2VjdHNOb2RlKGVsZW1lbnQpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgI2dldElmcmFtZURvY3VtZW50RWwoKTogRG9jdW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbnRlbnRXaW5kb3dFbCA9IHRoaXMuI2dldENvbnRlbnRXaW5kb3dFbCgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGNvbnRlbnRXaW5kb3dFbCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRXaW5kb3dFbC5kb2N1bWVudDtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuaWZyYW1lRWxlbWVudFJlZlxuICAgICAgLmNvbnRlbnREb2N1bWVudCBhcyBEb2N1bWVudDtcbiAgfVxuXG4gICNnZXRGb250U2l6ZSgpOiBzdHJpbmcge1xuICAgIGxldCBmb250U2l6ZSA9IFNUWUxFX1NUQVRFX0RFRkFVTFRTLmZvbnRTaXplLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoXG4gICAgICBzZWxlY3Rpb24gJiZcbiAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlICYmXG4gICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50XG4gICAgKSB7XG4gICAgICBsZXQgZWxlbWVudCA9IHNlbGVjdGlvbi5hbmNob3JOb2RlIGFzIEhUTUxFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlbGVtZW50Py5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudD8ucGFyZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50IGFzIEVsZW1lbnQpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChjb21wdXRlZFN0eWxlKSB7XG4gICAgICAgIGZvbnRTaXplID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdmb250LXNpemUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvbnRTaXplO1xuICB9XG5cbiAgI2NyZWF0ZU9ic2VydmVycyhlbGVtZW50OiBIVE1MSUZyYW1lRWxlbWVudCk6IEVkaXRvclNldHRpbmcge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IGVsZW1lbnQuY29udGVudFdpbmRvd1xuICAgICAgPyBlbGVtZW50LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnRcbiAgICAgIDogZWxlbWVudC5jb250ZW50RG9jdW1lbnQ7XG5cbiAgICAvLyBGaXJlZm94IGJ1ZyB3aGVyZSB3ZSBuZWVkIHRvIG9wZW4vY2xvc2UgdG8gY2FuY2VsIGxvYWQgc28gaXQgZG9lc24ndCBvdmVyd3JpdGUgYXR0cnNcbiAgICBkb2N1bWVudEVsPy5vcGVuKCk7XG4gICAgZG9jdW1lbnRFbD8uY2xvc2UoKTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbk9ic2VydmFibGUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGNvbnN0IHNlbGVjdGlvbkxpc3RlbmVyID0gKCk6IHZvaWQgPT4gc2VsZWN0aW9uT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgY29uc3QgY2xpY2tPYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBjbGlja0xpc3RlbmVyID0gKCk6IHZvaWQgPT4gY2xpY2tPYnNlcnZhYmxlLm5leHQoKTtcbiAgICBjb25zdCBwYXN0ZUxpc3RlbmVyID0gdGhpcy4jZ2V0UGFzdGVPdmVycmlkZSgpO1xuICAgIGNvbnN0IGJsdXJPYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBibHVyTGlzdGVuZXIgPSAoKTogdm9pZCA9PiBibHVyT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgY29uc3QgZm9jdXNPYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBmb2N1c0xpc3RlbmVyID0gKCk6IHZvaWQgPT4gZm9jdXNPYnNlcnZhYmxlLm5leHQoKTtcbiAgICBjb25zdCBpbnB1dE9ic2VydmFibGUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGNvbnN0IGlucHV0TGlzdGVuZXIgPSAoKTogdm9pZCA9PiBpbnB1dE9ic2VydmFibGUubmV4dCgpO1xuXG4gICAgZG9jdW1lbnRFbD8uYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgc2VsZWN0aW9uTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgaW5wdXRMaXN0ZW5lcik7XG4gICAgZG9jdW1lbnRFbD8uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgY2xpY2tMaXN0ZW5lcik7XG4gICAgZG9jdW1lbnRFbD8uYm9keS5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIHBhc3RlTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWw/LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIGJsdXJMaXN0ZW5lcik7XG4gICAgZG9jdW1lbnRFbD8uYm9keS5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgZm9jdXNMaXN0ZW5lcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJsdXJPYnNlcnZhYmxlLFxuICAgICAgY2xpY2tPYnNlcnZhYmxlLFxuICAgICAgZm9jdXNPYnNlcnZhYmxlLFxuICAgICAgY29tbWFuZENoYW5nZU9ic2VydmFibGU6IG5ldyBTdWJqZWN0KCksXG4gICAgICBpZnJhbWVFbGVtZW50UmVmOiBlbGVtZW50LFxuICAgICAgaW5wdXRPYnNlcnZhYmxlLFxuICAgICAgc2VsZWN0aW9uQ2hhbmdlT2JzZXJ2YWJsZTogc2VsZWN0aW9uT2JzZXJ2YWJsZSxcbiAgICAgIGJsdXJMaXN0ZW5lcixcbiAgICAgIGZvY3VzTGlzdGVuZXIsXG4gICAgICBjbGlja0xpc3RlbmVyLFxuICAgICAgaW5wdXRMaXN0ZW5lcixcbiAgICAgIHBhc3RlTGlzdGVuZXIsXG4gICAgICBzZWxlY3Rpb25MaXN0ZW5lcixcbiAgICB9O1xuICB9XG5cbiAgI2dldFBhc3RlT3ZlcnJpZGUoKTogKGU6IENsaXBib2FyZEV2ZW50KSA9PiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiAoZTogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IHRleHQgPSBlLmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQvcGxhaW4nKTtcblxuICAgICAgaWYgKHRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2b2lkIHRoaXMuZXhlY0NvbW1hbmQoe1xuICAgICAgICAgIGNvbW1hbmQ6ICdpbnNlcnRIVE1MJyxcbiAgICAgICAgICB2YWx1ZTogdGV4dC50b1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgI2dldEN1cnJlbnRTZWxlY3Rpb25QYXJlbnRFbGVtZW50KCk6IEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGlmIChkb2N1bWVudEVsKSB7XG4gICAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uUGFyZW50RWxlbWVudChcbiAgICAgICAgZG9jdW1lbnRFbCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAjZ2V0Q29sb3IoZG9jdW1lbnRFbDogRG9jdW1lbnQsIHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbW1hbmRWYWx1ZSA9IGRvY3VtZW50RWwucXVlcnlDb21tYW5kVmFsdWUoc2VsZWN0b3IpO1xuXG4gICAgLy8gRWRnZSBpcyB3ZWlyZCBhbmQgcmV0dXJucyBudW1iZXJzXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHR5cGVvZiBjb21tYW5kVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJ3JnYignICtcbiAgICAgICAgKGNvbW1hbmRWYWx1ZSAmIDB4ZmYpICtcbiAgICAgICAgJywgJyArXG4gICAgICAgICgoY29tbWFuZFZhbHVlICYgMHhmZjAwKSA+PiA4KSArXG4gICAgICAgICcsICcgK1xuICAgICAgICAoKGNvbW1hbmRWYWx1ZSAmIDB4ZmYwMDAwKSA+PiAxNikgK1xuICAgICAgICAnKSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmlyZWZveCB1c2VzICdUcmFuc3BhcmVudCcgaW5zdGVhZCBvZiBhIGNvbG9yIHZhbHVlXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoY29tbWFuZFZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zcGFyZW50Jykge1xuICAgICAgcmV0dXJuIFNUWUxFX1NUQVRFX0RFRkFVTFRTLmJhY2tDb2xvcjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRWYWx1ZTtcbiAgfVxuXG4gICNoYXNMaW5rKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFuY2hvckVsID0gdGhpcy5nZXRTZWxlY3RlZEFuY2hvclRhZygpO1xuICAgIGNvbnN0IGNoaWxkQW5jaG9yRWxzID0gdGhpcy4jZ2V0Q2hpbGRTZWxlY3RlZEFuY2hvclRhZ3MoKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBjaGlsZEFuY2hvckVscy5sZW5ndGggPiAwIHx8ICghIWFuY2hvckVsICYmICEhYW5jaG9yRWwuaHJlZik7XG4gIH1cblxuICAjZ2V0UGFyZW50KGVsZW1lbnQ6IEVsZW1lbnQsIHRhZzogc3RyaW5nKTogRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGN1cnJlbnROb2RlOiBFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG4gICAgd2hpbGUgKGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2RlLnRhZ05hbWUudG9VcHBlckNhc2UoKSAhPT0gJ0JPRFknKSB7XG4gICAgICBpZiAoY3VycmVudE5vZGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSB0YWcudG9VcHBlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgICB9XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZWRpdG9yU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBpZiAoZG9jdW1lbnRFbCkge1xuICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvblNlcnZpY2UuaXNFbGVtZW50U2VsZWN0ZWQoXG4gICAgICAgIGRvY3VtZW50RWwsXG4gICAgICAgIGRvY3VtZW50RWwuYm9keSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gICNjbGVhblVwQmxhbmtTdHlsZVRhZ3MoZG9jOiBEb2N1bWVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9ycGhhbkVsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gQXJyYXkuZnJvbShcbiAgICAgIGRvYy5xdWVyeVNlbGVjdG9yQWxsKCdmb250LHNwYW4sKltzdHlsZT1cIlwiXScpLFxuICAgICk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG9ycGhhbkVsZW1lbnRzKSB7XG4gICAgICBpZiAoIWVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZW1vdmFibGVFbGVtZW50cyA9IG9ycGhhbkVsZW1lbnRzLmZpbHRlcigoZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRhZ05hbWUgPT09ICdGT05UJyB8fCB0YWdOYW1lID09PSAnU1BBTicpICYmXG4gICAgICAgIChlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoID09PSAwIHx8ICFlbGVtZW50Lmhhc0NoaWxkTm9kZXMpXG4gICAgICApO1xuICAgIH0pO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiByZW1vdmFibGVFbGVtZW50cykge1xuICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudC5maXJzdENoaWxkLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2VydGFpbiB2YWx1ZXMgYXJlIGVuY29kZWQgaW4gaHRtbCBhbmQgbmVlZCB0byBiZSBkZWNvZGVkXG4gICNyZXBsYWNlSHRtbENvZGVzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAucmVwbGFjZSgvJm5ic3A7LywgU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApKVxuICAgICAgLnJlcGxhY2UoLyZsdDsvZywgJzwnKVxuICAgICAgLnJlcGxhY2UoLyZndDsvZywgJz4nKVxuICAgICAgLnJlcGxhY2UoLyZhbXA7L2csICcmJyk7XG4gIH1cblxuICAjc2V0RWRpdG9yRGlzYWJsZWQoXG4gICAgZm9jdXNhYmxlQ2hpbGRyZW46IEhUTUxFbGVtZW50W10sXG4gICAgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIGRpc2FibGVkOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gZGlzYWJsZWQgPyAnbm9uZScgOiAnYXV0byc7XG4gICAgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgICAgJ2FyaWEtZGlzYWJsZWQnLFxuICAgICAgZGlzYWJsZWQgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm9jdXNhYmxlQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgZm9jdXNhYmxlQ2hpbGRyZW4uZm9yRWFjaCgoYUZvY3VzYWJsZUNoaWxkKSA9PiB7XG4gICAgICAgIGFGb2N1c2FibGVDaGlsZC50YWJJbmRleCA9IGRpc2FibGVkID8gLTEgOiAwO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKT8uYm9keS5zZXRBdHRyaWJ1dGUoXG4gICAgICAnY29udGVudGVkaXRhYmxlJyxcbiAgICAgIGRpc2FibGVkID8gJ2ZhbHNlJyA6ICd0cnVlJyxcbiAgICApO1xuICB9XG59XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, booleanAttribute, inject, } from '@angular/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyDropdownMessageType, SkyDropdownModule, } from '@skyux/popovers';\nimport { SkyThemeModule } from '@skyux/theme';\nimport he from 'he';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { SkyTextEditorResourcesModule } from '../../shared/sky-text-editor-resources.module';\nimport { SkyTextEditorAdapterService } from '../services/text-editor-adapter.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@skyux/popovers\";\nimport * as i3 from \"@skyux/i18n\";\nimport * as i4 from \"@skyux/theme\";\nimport * as i5 from \"@skyux/layout\";\nconst FORMAT_MENU_ACTION = 'skyux_text_editor_format_menu_action_';\nconst EDIT_MENU_ACTION = 'skyux_text_editor_edit_menu_action_';\n/**\n * @internal\n */\nexport class SkyTextEditorMenubarComponent {\n constructor() {\n this.editorFocusStream = new Subject();\n this.menus = [];\n this.mergeFields = [];\n this.disabled = false;\n this.editDropdownStream = new Subject();\n this.formatDropdownStream = new Subject();\n this.mergeFieldDropdownStream = new Subject();\n this.#ngUnsubscribe = new Subject();\n this.#adapterService = inject(SkyTextEditorAdapterService);\n this.#resources = inject(SkyLibResourcesService);\n }\n #ngUnsubscribe;\n #adapterService;\n #resources;\n ngOnInit() {\n this.editorFocusStream\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#closeDropdowns();\n });\n this.#resources\n .getStrings({\n bold: FORMAT_MENU_ACTION + 'bold_label',\n boldShort: FORMAT_MENU_ACTION + 'bold_key_shortcut',\n italic: FORMAT_MENU_ACTION + 'italic_label',\n italicShort: FORMAT_MENU_ACTION + 'italic_key_shortcut',\n underline: FORMAT_MENU_ACTION + 'underline_label',\n underlineShort: FORMAT_MENU_ACTION + 'underline_key_shortcut',\n strikethrough: FORMAT_MENU_ACTION + 'strikethrough_label',\n clearFormatting: FORMAT_MENU_ACTION + 'clear_formatting_label',\n undo: EDIT_MENU_ACTION + 'undo_label',\n undoShort: EDIT_MENU_ACTION + 'undo_key_shortcut',\n redo: EDIT_MENU_ACTION + 'redo_label',\n redoShort: EDIT_MENU_ACTION + 'redo_key_shortcut',\n cut: EDIT_MENU_ACTION + 'cut_label',\n cutShort: EDIT_MENU_ACTION + 'cut_key_shortcut',\n copy: EDIT_MENU_ACTION + 'copy_label',\n copyShort: EDIT_MENU_ACTION + 'copy_key_shortcut',\n paste: EDIT_MENU_ACTION + 'paste_label',\n pasteShort: EDIT_MENU_ACTION + 'paste_key_shortcut',\n selectAll: EDIT_MENU_ACTION + 'select_all_label',\n selectAllShort: EDIT_MENU_ACTION + 'select_all_key_shortcut',\n })\n .pipe(take(1), takeUntil(this.#ngUnsubscribe))\n .subscribe((resources) => {\n this.formatItems = [\n {\n function: () => this.execCommand('bold'),\n label: resources.bold,\n keyShortcut: resources.boldShort,\n },\n {\n function: () => this.execCommand('italic'),\n label: resources.italic,\n keyShortcut: resources.italicShort,\n },\n {\n function: () => this.execCommand('underline'),\n label: resources.underline,\n keyShortcut: resources.underlineShort,\n },\n {\n function: () => this.execCommand('strikethrough'),\n label: resources.strikethrough,\n },\n {\n isDivider: true,\n },\n {\n function: () => this.#clearFormat(),\n label: resources.clearFormatting,\n },\n ];\n this.editItems = [\n {\n function: () => this.execCommand('undo'),\n label: resources.undo,\n keyShortcut: resources.undoShort,\n },\n {\n function: () => this.execCommand('redo'),\n label: resources.redo,\n keyShortcut: resources.redoShort,\n },\n {\n isDivider: true,\n },\n {\n function: () => this.execCommand('cut'),\n label: resources.cut,\n keyShortcut: resources.cutShort,\n },\n {\n function: () => this.execCommand('copy'),\n label: resources.copy,\n keyShortcut: resources.copyShort,\n },\n {\n function: () => this.execCommand('paste'),\n label: resources.paste,\n keyShortcut: resources.pasteShort,\n },\n {\n isDivider: true,\n },\n {\n function: () => this.execCommand('selectAll'),\n label: resources.selectAll,\n keyShortcut: resources.selectAllShort,\n },\n ];\n });\n }\n ngOnDestroy() {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n execCommand(command, value = '') {\n void this.#adapterService.execCommand({\n command: command,\n value: value,\n });\n }\n insertMergeField(field) {\n this.execCommand('insertHTML', '<img style=\"display: inline; cursor: grab;\" data-fieldid=\"' +\n he.escape(field.id) +\n '\" data-fielddisplay=\"' +\n he.escape(field.name) +\n '\" src=\"' +\n (field.previewImageUrl ||\n this.#adapterService.getMergeFieldDataURI(field.name)) +\n '\">');\n }\n #closeDropdowns() {\n this.editDropdownStream.next({ type: SkyDropdownMessageType.Close });\n this.formatDropdownStream.next({ type: SkyDropdownMessageType.Close });\n this.mergeFieldDropdownStream.next({ type: SkyDropdownMessageType.Close });\n }\n #clearFormat() {\n const currentSelection = this.#adapterService.getCurrentSelection();\n /* istanbul ignore else */\n if (currentSelection &&\n currentSelection.rangeCount > 0 &&\n currentSelection.getRangeAt(0).toString().length <= 0) {\n this.execCommand('selectAll');\n }\n this.execCommand('removeFormat');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorMenubarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.5\", type: SkyTextEditorMenubarComponent, isStandalone: true, selector: \"sky-text-editor-menubar\", inputs: { editorFocusStream: \"editorFocusStream\", menus: \"menus\", mergeFields: \"mergeFields\", disabled: [\"disabled\", \"disabled\", booleanAttribute] }, ngImport: i0, template: \"@for (menu of menus; track menu) {\\n <sky-toolbar-item\\n class=\\\"sky-text-editor-menu\\\"\\n [ngClass]=\\\"'sky-text-editor-menu-' + menu\\\"\\n >\\n @switch (menu) {\\n @case ('edit') {\\n <sky-dropdown\\n label=\\\"Edit menu\\\"\\n [disabled]=\\\"disabled\\\"\\n [messageStream]=\\\"editDropdownStream\\\"\\n >\\n <sky-dropdown-button>\\n {{\\n 'skyux_text_editor_menubar_dropdown_button_edit_label'\\n | skyLibResources\\n }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (editItem of editItems; track editItem) {\\n <sky-dropdown-item>\\n @if (!editItem.isDivider) {\\n <button type=\\\"button\\\" (click)=\\\"editItem?.function?.()\\\">\\n {{ editItem.label }}\\n @if (editItem.keyShortcut) {\\n <div\\n class=\\\"sky-text-editor-menu-key-shortcut\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-font-deemphasized': 'modern',\\n 'sky-deemphasized': 'default'\\n }\\\"\\n >\\n {{ editItem.keyShortcut }}\\n </div>\\n }\\n </button>\\n } @else {\\n <div\\n class=\\\"sky-text-editor-dropdown-item-divider\\\"\\n role=\\\"divider\\\"\\n ></div>\\n }\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('format') {\\n <sky-dropdown\\n label=\\\"Format menu\\\"\\n [disabled]=\\\"disabled\\\"\\n [messageStream]=\\\"formatDropdownStream\\\"\\n >\\n <sky-dropdown-button>\\n {{\\n 'skyux_text_editor_menubar_dropdown_button_format_label'\\n | skyLibResources\\n }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (formatItem of formatItems; track formatItem) {\\n <sky-dropdown-item>\\n @if (!formatItem.isDivider) {\\n <button type=\\\"button\\\" (click)=\\\"formatItem?.function?.()\\\">\\n {{ formatItem.label }}\\n @if (formatItem.keyShortcut) {\\n <div\\n class=\\\"sky-text-editor-menu-key-shortcut\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-font-deemphasized': 'modern',\\n 'sky-deemphasized': 'default'\\n }\\\"\\n >\\n {{ formatItem.keyShortcut }}\\n </div>\\n }\\n </button>\\n } @else {\\n <div\\n class=\\\"sky-text-editor-dropdown-item-divider\\\"\\n role=\\\"divider\\\"\\n ></div>\\n }\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('merge-field') {\\n @if (mergeFields && mergeFields.length > 0) {\\n <sky-dropdown\\n label=\\\"Insert merge field\\\"\\n [disabled]=\\\"disabled\\\"\\n [messageStream]=\\\"mergeFieldDropdownStream\\\"\\n >\\n <sky-dropdown-button>\\n {{\\n 'skyux_text_editor_menubar_dropdown_button_insert_label'\\n | skyLibResources\\n }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (mergeField of mergeFields; track mergeField.name) {\\n <sky-dropdown-item>\\n <button type=\\\"button\\\" (click)=\\\"insertMergeField(mergeField)\\\">\\n {{ mergeField.name }}\\n </button>\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n }\\n }\\n </sky-toolbar-item>\\n}\\n\", styles: [\".sky-text-editor-dropdown-item-divider{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,.1);cursor:default;filter:none}.sky-text-editor-menu-key-shortcut{float:right;margin-left:15px}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"ngmodule\", type: SkyDropdownModule }, { kind: \"component\", type: i2.λ2, selector: \"sky-dropdown-button\" }, { kind: \"component\", type: i2.λ3, selector: \"sky-dropdown\", inputs: [\"buttonStyle\", \"buttonType\", \"disabled\", \"label\", \"horizontalAlignment\", \"messageStream\", \"title\", \"trigger\"] }, { kind: \"component\", type: i2.λ1, selector: \"sky-dropdown-item\", inputs: [\"ariaRole\"] }, { kind: \"component\", type: i2.λ4, selector: \"sky-dropdown-menu\", inputs: [\"ariaLabelledBy\", \"ariaRole\", \"useNativeFocus\"], outputs: [\"menuChanges\"] }, { kind: \"ngmodule\", type: SkyTextEditorResourcesModule }, { kind: \"pipe\", type: i3.SkyLibResourcesPipe, name: \"skyLibResources\" }, { kind: \"ngmodule\", type: SkyThemeModule }, { kind: \"directive\", type: i4.λ2, selector: \"[skyThemeClass]\", inputs: [\"class\", \"skyThemeClass\"] }, { kind: \"ngmodule\", type: SkyToolbarModule }, { kind: \"component\", type: i5.λ39, selector: \"sky-toolbar-item\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorMenubarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-text-editor-menubar', changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n CommonModule,\n SkyDropdownModule,\n SkyTextEditorResourcesModule,\n SkyThemeModule,\n SkyToolbarModule,\n ], template: \"@for (menu of menus; track menu) {\\n <sky-toolbar-item\\n class=\\\"sky-text-editor-menu\\\"\\n [ngClass]=\\\"'sky-text-editor-menu-' + menu\\\"\\n >\\n @switch (menu) {\\n @case ('edit') {\\n <sky-dropdown\\n label=\\\"Edit menu\\\"\\n [disabled]=\\\"disabled\\\"\\n [messageStream]=\\\"editDropdownStream\\\"\\n >\\n <sky-dropdown-button>\\n {{\\n 'skyux_text_editor_menubar_dropdown_button_edit_label'\\n | skyLibResources\\n }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (editItem of editItems; track editItem) {\\n <sky-dropdown-item>\\n @if (!editItem.isDivider) {\\n <button type=\\\"button\\\" (click)=\\\"editItem?.function?.()\\\">\\n {{ editItem.label }}\\n @if (editItem.keyShortcut) {\\n <div\\n class=\\\"sky-text-editor-menu-key-shortcut\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-font-deemphasized': 'modern',\\n 'sky-deemphasized': 'default'\\n }\\\"\\n >\\n {{ editItem.keyShortcut }}\\n </div>\\n }\\n </button>\\n } @else {\\n <div\\n class=\\\"sky-text-editor-dropdown-item-divider\\\"\\n role=\\\"divider\\\"\\n ></div>\\n }\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('format') {\\n <sky-dropdown\\n label=\\\"Format menu\\\"\\n [disabled]=\\\"disabled\\\"\\n [messageStream]=\\\"formatDropdownStream\\\"\\n >\\n <sky-dropdown-button>\\n {{\\n 'skyux_text_editor_menubar_dropdown_button_format_label'\\n | skyLibResources\\n }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (formatItem of formatItems; track formatItem) {\\n <sky-dropdown-item>\\n @if (!formatItem.isDivider) {\\n <button type=\\\"button\\\" (click)=\\\"formatItem?.function?.()\\\">\\n {{ formatItem.label }}\\n @if (formatItem.keyShortcut) {\\n <div\\n class=\\\"sky-text-editor-menu-key-shortcut\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-font-deemphasized': 'modern',\\n 'sky-deemphasized': 'default'\\n }\\\"\\n >\\n {{ formatItem.keyShortcut }}\\n </div>\\n }\\n </button>\\n } @else {\\n <div\\n class=\\\"sky-text-editor-dropdown-item-divider\\\"\\n role=\\\"divider\\\"\\n ></div>\\n }\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('merge-field') {\\n @if (mergeFields && mergeFields.length > 0) {\\n <sky-dropdown\\n label=\\\"Insert merge field\\\"\\n [disabled]=\\\"disabled\\\"\\n [messageStream]=\\\"mergeFieldDropdownStream\\\"\\n >\\n <sky-dropdown-button>\\n {{\\n 'skyux_text_editor_menubar_dropdown_button_insert_label'\\n | skyLibResources\\n }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (mergeField of mergeFields; track mergeField.name) {\\n <sky-dropdown-item>\\n <button type=\\\"button\\\" (click)=\\\"insertMergeField(mergeField)\\\">\\n {{ mergeField.name }}\\n </button>\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n }\\n }\\n </sky-toolbar-item>\\n}\\n\", styles: [\".sky-text-editor-dropdown-item-divider{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,.1);cursor:default;filter:none}.sky-text-editor-menu-key-shortcut{float:right;margin-left:15px}\\n\"] }]\n }], propDecorators: { editorFocusStream: [{\n type: Input\n }], menus: [{\n type: Input\n }], mergeFields: [{\n type: Input\n }], disabled: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL21lbnViYXIvdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL21lbnViYXIvdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLGdCQUFnQixFQUNoQixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM3RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7OztBQUl0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QyxNQUFNLFdBQ3RDO3dCQUNQLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQiw0QkFBNEI7d0JBQzVCLGNBQWM7d0JBQ2QsZ0JBQWdCO3FCQUNqQjs4QkFJTSxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBSUMsS0FBSztzQkFEWCxLQUFLO2dCQUlDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5pbXBvcnQgeyBTa3lUb29sYmFyTW9kdWxlIH0gZnJvbSAnQHNreXV4L2xheW91dCc7XG5pbXBvcnQge1xuICBTa3lEcm9wZG93bk1lc3NhZ2UsXG4gIFNreURyb3Bkb3duTWVzc2FnZVR5cGUsXG4gIFNreURyb3Bkb3duTW9kdWxlLFxufSBmcm9tICdAc2t5dXgvcG9wb3ZlcnMnO1xuaW1wb3J0IHsgU2t5VGhlbWVNb2R1bGUgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgaGUgZnJvbSAnaGUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NreS10ZXh0LWVkaXRvci1yZXNvdXJjZXMubW9kdWxlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RleHQtZWRpdG9yLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yTWVudVR5cGUgfSBmcm9tICcuLi90eXBlcy9tZW51LXR5cGUnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lcmdlRmllbGQgfSBmcm9tICcuLi90eXBlcy90ZXh0LWVkaXRvci1tZXJnZS1maWVsZCc7XG5cbmNvbnN0IEZPUk1BVF9NRU5VX0FDVElPTiA9ICdza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25fJztcbmNvbnN0IEVESVRfTUVOVV9BQ1RJT04gPSAnc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl8nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktdGV4dC1lZGl0b3ItbWVudWJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LWVkaXRvci1tZW51YmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTa3lEcm9wZG93bk1vZHVsZSxcbiAgICBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlLFxuICAgIFNreVRoZW1lTW9kdWxlLFxuICAgIFNreVRvb2xiYXJNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JNZW51YmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBASW5wdXQoKVxuICBwdWJsaWMgZWRpdG9yRm9jdXNTdHJlYW0gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtZW51czogU2t5VGV4dEVkaXRvck1lbnVUeXBlW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWVyZ2VGaWVsZHM6IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkW10gPSBbXTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgcHVibGljIGVkaXREcm9wZG93blN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreURyb3Bkb3duTWVzc2FnZT4oKTtcblxuICBwdWJsaWMgZWRpdEl0ZW1zOlxuICAgIHwge1xuICAgICAgICBmdW5jdGlvbj86ICgpID0+IHZvaWQ7XG4gICAgICAgIGlzRGl2aWRlcj86IGJvb2xlYW47XG4gICAgICAgIGxhYmVsPzogc3RyaW5nO1xuICAgICAgICBrZXlTaG9ydGN1dD86IHN0cmluZztcbiAgICAgIH1bXVxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBmb3JtYXREcm9wZG93blN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreURyb3Bkb3duTWVzc2FnZT4oKTtcblxuICBwdWJsaWMgZm9ybWF0SXRlbXM6XG4gICAgfCB7XG4gICAgICAgIGZ1bmN0aW9uPzogKCkgPT4gdm9pZDtcbiAgICAgICAgaXNEaXZpZGVyPzogYm9vbGVhbjtcbiAgICAgICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgICAgIGtleVNob3J0Y3V0Pzogc3RyaW5nO1xuICAgICAgfVtdXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIG1lcmdlRmllbGREcm9wZG93blN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreURyb3Bkb3duTWVzc2FnZT4oKTtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgI2FkYXB0ZXJTZXJ2aWNlID0gaW5qZWN0KFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSk7XG4gIHJlYWRvbmx5ICNyZXNvdXJjZXMgPSBpbmplY3QoU2t5TGliUmVzb3VyY2VzU2VydmljZSk7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yRm9jdXNTdHJlYW1cbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3ducygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiNyZXNvdXJjZXNcbiAgICAgIC5nZXRTdHJpbmdzKHtcbiAgICAgICAgYm9sZDogRk9STUFUX01FTlVfQUNUSU9OICsgJ2JvbGRfbGFiZWwnLFxuICAgICAgICBib2xkU2hvcnQ6IEZPUk1BVF9NRU5VX0FDVElPTiArICdib2xkX2tleV9zaG9ydGN1dCcsXG4gICAgICAgIGl0YWxpYzogRk9STUFUX01FTlVfQUNUSU9OICsgJ2l0YWxpY19sYWJlbCcsXG4gICAgICAgIGl0YWxpY1Nob3J0OiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAnaXRhbGljX2tleV9zaG9ydGN1dCcsXG4gICAgICAgIHVuZGVybGluZTogRk9STUFUX01FTlVfQUNUSU9OICsgJ3VuZGVybGluZV9sYWJlbCcsXG4gICAgICAgIHVuZGVybGluZVNob3J0OiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAndW5kZXJsaW5lX2tleV9zaG9ydGN1dCcsXG4gICAgICAgIHN0cmlrZXRocm91Z2g6IEZPUk1BVF9NRU5VX0FDVElPTiArICdzdHJpa2V0aHJvdWdoX2xhYmVsJyxcbiAgICAgICAgY2xlYXJGb3JtYXR0aW5nOiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAnY2xlYXJfZm9ybWF0dGluZ19sYWJlbCcsXG4gICAgICAgIHVuZG86IEVESVRfTUVOVV9BQ1RJT04gKyAndW5kb19sYWJlbCcsXG4gICAgICAgIHVuZG9TaG9ydDogRURJVF9NRU5VX0FDVElPTiArICd1bmRvX2tleV9zaG9ydGN1dCcsXG4gICAgICAgIHJlZG86IEVESVRfTUVOVV9BQ1RJT04gKyAncmVkb19sYWJlbCcsXG4gICAgICAgIHJlZG9TaG9ydDogRURJVF9NRU5VX0FDVElPTiArICdyZWRvX2tleV9zaG9ydGN1dCcsXG4gICAgICAgIGN1dDogRURJVF9NRU5VX0FDVElPTiArICdjdXRfbGFiZWwnLFxuICAgICAgICBjdXRTaG9ydDogRURJVF9NRU5VX0FDVElPTiArICdjdXRfa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgY29weTogRURJVF9NRU5VX0FDVElPTiArICdjb3B5X2xhYmVsJyxcbiAgICAgICAgY29weVNob3J0OiBFRElUX01FTlVfQUNUSU9OICsgJ2NvcHlfa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgcGFzdGU6IEVESVRfTUVOVV9BQ1RJT04gKyAncGFzdGVfbGFiZWwnLFxuICAgICAgICBwYXN0ZVNob3J0OiBFRElUX01FTlVfQUNUSU9OICsgJ3Bhc3RlX2tleV9zaG9ydGN1dCcsXG4gICAgICAgIHNlbGVjdEFsbDogRURJVF9NRU5VX0FDVElPTiArICdzZWxlY3RfYWxsX2xhYmVsJyxcbiAgICAgICAgc2VsZWN0QWxsU2hvcnQ6IEVESVRfTUVOVV9BQ1RJT04gKyAnc2VsZWN0X2FsbF9rZXlfc2hvcnRjdXQnLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRha2UoMSksIHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc291cmNlcykgPT4ge1xuICAgICAgICB0aGlzLmZvcm1hdEl0ZW1zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdib2xkJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLmJvbGQsXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLmJvbGRTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdpdGFsaWMnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuaXRhbGljLFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy5pdGFsaWNTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCd1bmRlcmxpbmUnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMudW5kZXJsaW5lLFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy51bmRlcmxpbmVTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdzdHJpa2V0aHJvdWdoJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLnN0cmlrZXRocm91Z2gsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpc0RpdmlkZXI6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogKCk6IHZvaWQgPT4gdGhpcy4jY2xlYXJGb3JtYXQoKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuY2xlYXJGb3JtYXR0aW5nLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuZWRpdEl0ZW1zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCd1bmRvJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLnVuZG8sXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLnVuZG9TaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdyZWRvJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLnJlZG8sXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLnJlZG9TaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlzRGl2aWRlcjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdjdXQnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuY3V0LFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy5jdXRTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdjb3B5JyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLmNvcHksXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLmNvcHlTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdwYXN0ZScpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5wYXN0ZSxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMucGFzdGVTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlzRGl2aWRlcjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuc2VsZWN0QWxsLFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy5zZWxlY3RBbGxTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGV4ZWNDb21tYW5kKGNvbW1hbmQ6IHN0cmluZywgdmFsdWUgPSAnJyk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy4jYWRhcHRlclNlcnZpY2UuZXhlY0NvbW1hbmQoe1xuICAgICAgY29tbWFuZDogY29tbWFuZCxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnRNZXJnZUZpZWxkKGZpZWxkOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZCk6IHZvaWQge1xuICAgIHRoaXMuZXhlY0NvbW1hbmQoXG4gICAgICAnaW5zZXJ0SFRNTCcsXG4gICAgICAnPGltZyBzdHlsZT1cImRpc3BsYXk6IGlubGluZTsgY3Vyc29yOiBncmFiO1wiIGRhdGEtZmllbGRpZD1cIicgK1xuICAgICAgICBoZS5lc2NhcGUoZmllbGQuaWQpICtcbiAgICAgICAgJ1wiIGRhdGEtZmllbGRkaXNwbGF5PVwiJyArXG4gICAgICAgIGhlLmVzY2FwZShmaWVsZC5uYW1lKSArXG4gICAgICAgICdcIiBzcmM9XCInICtcbiAgICAgICAgKGZpZWxkLnByZXZpZXdJbWFnZVVybCB8fFxuICAgICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldE1lcmdlRmllbGREYXRhVVJJKGZpZWxkLm5hbWUpKSArXG4gICAgICAgICdcIj4nLFxuICAgICk7XG4gIH1cblxuICAjY2xvc2VEcm9wZG93bnMoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0RHJvcGRvd25TdHJlYW0ubmV4dCh7IHR5cGU6IFNreURyb3Bkb3duTWVzc2FnZVR5cGUuQ2xvc2UgfSk7XG4gICAgdGhpcy5mb3JtYXREcm9wZG93blN0cmVhbS5uZXh0KHsgdHlwZTogU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSB9KTtcbiAgICB0aGlzLm1lcmdlRmllbGREcm9wZG93blN0cmVhbS5uZXh0KHsgdHlwZTogU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSB9KTtcbiAgfVxuXG4gICNjbGVhckZvcm1hdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvbigpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKFxuICAgICAgY3VycmVudFNlbGVjdGlvbiAmJlxuICAgICAgY3VycmVudFNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCAmJlxuICAgICAgY3VycmVudFNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLnRvU3RyaW5nKCkubGVuZ3RoIDw9IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZXhlY0NvbW1hbmQoJ3NlbGVjdEFsbCcpO1xuICAgIH1cbiAgICB0aGlzLmV4ZWNDb21tYW5kKCdyZW1vdmVGb3JtYXQnKTtcbiAgfVxufVxuIiwiQGZvciAobWVudSBvZiBtZW51czsgdHJhY2sgbWVudSkge1xuICA8c2t5LXRvb2xiYXItaXRlbVxuICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLW1lbnVcIlxuICAgIFtuZ0NsYXNzXT1cIidza3ktdGV4dC1lZGl0b3ItbWVudS0nICsgbWVudVwiXG4gID5cbiAgICBAc3dpdGNoIChtZW51KSB7XG4gICAgICBAY2FzZSAoJ2VkaXQnKSB7XG4gICAgICAgIDxza3ktZHJvcGRvd25cbiAgICAgICAgICBsYWJlbD1cIkVkaXQgbWVudVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbbWVzc2FnZVN0cmVhbV09XCJlZGl0RHJvcGRvd25TdHJlYW1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnc2t5dXhfdGV4dF9lZGl0b3JfbWVudWJhcl9kcm9wZG93bl9idXR0b25fZWRpdF9sYWJlbCdcbiAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAgPHNreS1kcm9wZG93bi1tZW51PlxuICAgICAgICAgICAgQGZvciAoZWRpdEl0ZW0gb2YgZWRpdEl0ZW1zOyB0cmFjayBlZGl0SXRlbSkge1xuICAgICAgICAgICAgICA8c2t5LWRyb3Bkb3duLWl0ZW0+XG4gICAgICAgICAgICAgICAgQGlmICghZWRpdEl0ZW0uaXNEaXZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZWRpdEl0ZW0/LmZ1bmN0aW9uPy4oKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBlZGl0SXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGVkaXRJdGVtLmtleVNob3J0Y3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItbWVudS1rZXktc2hvcnRjdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnc2t5LWZvbnQtZGVlbXBoYXNpemVkJzogJ21vZGVybicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdza3ktZGVlbXBoYXNpemVkJzogJ2RlZmF1bHQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBlZGl0SXRlbS5rZXlTaG9ydGN1dCB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItZHJvcGRvd24taXRlbS1kaXZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImRpdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9za3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgICAgICA8L3NreS1kcm9wZG93bj5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnZm9ybWF0Jykge1xuICAgICAgICA8c2t5LWRyb3Bkb3duXG4gICAgICAgICAgbGFiZWw9XCJGb3JtYXQgbWVudVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbbWVzc2FnZVN0cmVhbV09XCJmb3JtYXREcm9wZG93blN0cmVhbVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c2t5LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICdza3l1eF90ZXh0X2VkaXRvcl9tZW51YmFyX2Ryb3Bkb3duX2J1dHRvbl9mb3JtYXRfbGFiZWwnXG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9za3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICAgIDxza3ktZHJvcGRvd24tbWVudT5cbiAgICAgICAgICAgIEBmb3IgKGZvcm1hdEl0ZW0gb2YgZm9ybWF0SXRlbXM7IHRyYWNrIGZvcm1hdEl0ZW0pIHtcbiAgICAgICAgICAgICAgPHNreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICAgICAgICAgIEBpZiAoIWZvcm1hdEl0ZW0uaXNEaXZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0SXRlbT8uZnVuY3Rpb24/LigpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdEl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmb3JtYXRJdGVtLmtleVNob3J0Y3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItbWVudS1rZXktc2hvcnRjdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnc2t5LWZvbnQtZGVlbXBoYXNpemVkJzogJ21vZGVybicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdza3ktZGVlbXBoYXNpemVkJzogJ2RlZmF1bHQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXRJdGVtLmtleVNob3J0Y3V0IH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci1kcm9wZG93bi1pdGVtLWRpdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiZGl2aWRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgIDwvc2t5LWRyb3Bkb3duPlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdtZXJnZS1maWVsZCcpIHtcbiAgICAgICAgQGlmIChtZXJnZUZpZWxkcyAmJiBtZXJnZUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgPHNreS1kcm9wZG93blxuICAgICAgICAgICAgbGFiZWw9XCJJbnNlcnQgbWVyZ2UgZmllbGRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFttZXNzYWdlU3RyZWFtXT1cIm1lcmdlRmllbGREcm9wZG93blN0cmVhbVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgJ3NreXV4X3RleHRfZWRpdG9yX21lbnViYXJfZHJvcGRvd25fYnV0dG9uX2luc2VydF9sYWJlbCdcbiAgICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L3NreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAgICA8c2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgICAgIEBmb3IgKG1lcmdlRmllbGQgb2YgbWVyZ2VGaWVsZHM7IHRyYWNrIG1lcmdlRmllbGQubmFtZSkge1xuICAgICAgICAgICAgICAgIDxza3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJpbnNlcnRNZXJnZUZpZWxkKG1lcmdlRmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG1lcmdlRmllbGQubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9za3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9za3ktZHJvcGRvd24tbWVudT5cbiAgICAgICAgICA8L3NreS1kcm9wZG93bj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgPC9za3ktdG9vbGJhci1pdGVtPlxufVxuIl19","/**\n * @internal\n */\nexport class SkyUrlModalContext {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItdXJsLW1vZGFsLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwtY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7Q0FHOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lUZXh0RWRpdG9yTGlua1dpbmRvd09wdGlvbnNUeXBlIH0gZnJvbSAnLi4vdHlwZXMvbGluay13aW5kb3ctb3B0aW9ucy10eXBlJztcblxuaW1wb3J0IHsgVXJsTW9kYWxSZXN1bHQgfSBmcm9tICcuL3RleHQtZWRpdG9yLXVybC1tb2RhbC1yZXN1bHQnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgU2t5VXJsTW9kYWxDb250ZXh0IHtcbiAgcHVibGljIHVybFJlc3VsdDogVXJsTW9kYWxSZXN1bHQgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBsaW5rV2luZG93T3B0aW9uczogU2t5VGV4dEVkaXRvckxpbmtXaW5kb3dPcHRpb25zVHlwZVtdIHwgdW5kZWZpbmVkO1xufVxuIl19","import { Component, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyIdModule } from '@skyux/core';\nimport { SkyInputBoxModule } from '@skyux/forms';\nimport { SkyModalInstance, SkyModalModule } from '@skyux/modals';\nimport { SkyTabsModule } from '@skyux/tabs';\nimport { SkyValidation } from '@skyux/validation';\nimport { SkyTextEditorResourcesModule } from '../../shared/sky-text-editor-resources.module';\nimport { SkyUrlModalContext } from './text-editor-url-modal-context';\nimport { UrlTarget } from './text-editor-url-target';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@skyux/modals\";\nimport * as i3 from \"@skyux/core\";\nimport * as i4 from \"@skyux/forms\";\nimport * as i5 from \"@skyux/tabs\";\nimport * as i6 from \"@skyux/i18n\";\nconst emailKey = 'mailto:';\nconst queryStringParamKey = '?Subject=';\n/**\n * @internal\n */\nexport class SkyTextEditorUrlModalComponent {\n set activeTab(value) {\n this.#_activeTab = value;\n this.valid = this.#isValid();\n }\n get activeTab() {\n return this.#_activeTab;\n }\n set emailAddress(value) {\n this.#_emailAddress = value;\n this.valid = this.#isValid();\n }\n get emailAddress() {\n return this.#_emailAddress;\n }\n set url(value) {\n this.#_url = value;\n this.valid = this.#isValid();\n }\n get url() {\n return this.#_url;\n }\n #_activeTab;\n #_emailAddress;\n #_url;\n #modalContext;\n #modalInstance;\n constructor() {\n this.emailAddressValid = false;\n this.allowAllOpenLinkOptions = true;\n this.openLinksInNewWindowOnly = false;\n this.subject = '';\n this.target = 0;\n this.valid = false;\n this.#_activeTab = 0;\n this.#_emailAddress = '';\n this.#_url = 'https://';\n this.#modalContext = inject(SkyUrlModalContext);\n this.#modalInstance = inject(SkyModalInstance);\n const linkWindowOptions = this.#modalContext.linkWindowOptions;\n if (linkWindowOptions?.length === 1) {\n this.allowAllOpenLinkOptions = false;\n if (linkWindowOptions[0] === 'new') {\n this.openLinksInNewWindowOnly = true;\n this.target = 1;\n }\n else {\n this.target = 0;\n }\n }\n if (this.#modalContext.urlResult) {\n if (this.#modalContext.urlResult.url.startsWith(emailKey)) {\n this.emailAddress = this.#modalContext.urlResult.url.replace(emailKey, '');\n let queryStringIndex = this.emailAddress.indexOf(queryStringParamKey);\n queryStringIndex =\n queryStringIndex > -1\n ? queryStringIndex\n : this.emailAddress.indexOf(queryStringParamKey.toLowerCase());\n /* istanbul ignore else */\n if (queryStringIndex > -1) {\n this.subject = decodeURI(this.emailAddress).slice(queryStringIndex + queryStringParamKey.length);\n this.emailAddress = this.emailAddress.slice(0, queryStringIndex);\n }\n // Set active tab to email\n this.activeTab = 1;\n }\n else {\n this.url = this.#modalContext.urlResult.url;\n this.target = this.#modalContext.urlResult.target;\n // set active tab to web page\n this.activeTab = 0;\n }\n }\n }\n activeTabChanged(value) {\n this.activeTab = Number(value);\n }\n save() {\n /* istanbul ignore else */\n if (this.#isValid()) {\n if (this.activeTab === 0) {\n this.#modalInstance.save({\n url: this.url,\n target: this.target\n ? parseInt(this.target, undefined)\n : UrlTarget.None,\n });\n }\n else {\n this.#modalInstance.save({\n url: this.#getEmailUrl(),\n target: UrlTarget.None,\n });\n }\n }\n }\n cancel() {\n this.#modalInstance.cancel();\n }\n #getEmailUrl() {\n return (emailKey +\n this.emailAddress +\n (this.subject ? '?Subject=' + encodeURI(this.subject) : ''));\n }\n #isValid() {\n if (this.activeTab === 0) {\n return !!this.url && SkyValidation.isUrl(this.url);\n }\n return !!this.emailAddress && SkyValidation.isEmail(this.emailAddress);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorUrlModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.5\", type: SkyTextEditorUrlModalComponent, isStandalone: true, selector: \"sky-text-editor-url-modal\", ngImport: i0, template: \"<sky-modal>\\n <sky-modal-header>\\n {{ 'skyux_text_editor_url_modal_header_label' | skyLibResources }}\\n </sky-modal-header>\\n <sky-modal-content>\\n <sky-tabset\\n data-sky-id=\\\"test-tabset\\\"\\n [active]=\\\"activeTab\\\"\\n (activeChange)=\\\"activeTabChanged($event)\\\"\\n >\\n <sky-tab tabHeading=\\\"Web page\\\">\\n <div class=\\\"sky-form-group sky-text-editor-url-modal-first-field\\\">\\n <sky-input-box\\n class=\\\"sky-text-editor-url-input\\\"\\n stacked=\\\"true\\\"\\n [hintText]=\\\"\\n openLinksInNewWindowOnly\\n ? ('skyux_text_editor_url_modal_open_in_new_window_label'\\n | skyLibResources)\\n : undefined\\n \\\"\\n >\\n <label\\n class=\\\"sky-control-label sky-control-label-required\\\"\\n [for]=\\\"urlInput.id\\\"\\n >\\n {{ 'skyux_text_editor_url_modal_url_label' | skyLibResources }}\\n </label>\\n <input\\n #urlInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n type=\\\"text\\\"\\n skyId\\n [(ngModel)]=\\\"url\\\"\\n />\\n </sky-input-box>\\n </div>\\n @if (allowAllOpenLinkOptions) {\\n <sky-input-box stacked=\\\"true\\\" class=\\\"sky-form-group\\\">\\n <label class=\\\"sky-control-label\\\" [for]=\\\"targetInput.id\\\">\\n {{ 'skyux_text_editor_url_modal_open_label' | skyLibResources }}\\n </label>\\n <select\\n #targetInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n skyId\\n [(ngModel)]=\\\"target\\\"\\n >\\n <option value=\\\"0\\\">\\n {{\\n 'skyux_text_editor_url_modal_current_option_label'\\n | skyLibResources\\n }}\\n </option>\\n <option value=\\\"1\\\">\\n {{\\n 'skyux_text_editor_url_modal_new_option_label'\\n | skyLibResources\\n }}\\n </option>\\n </select>\\n </sky-input-box>\\n }\\n </sky-tab>\\n <sky-tab tabHeading=\\\"Email address\\\">\\n <div class=\\\"sky-form-group first-field\\\">\\n <sky-input-box stacked=\\\"true\\\">\\n <label\\n class=\\\"sky-control-label sky-control-label-required\\\"\\n [for]=\\\"emailAddressInput.id\\\"\\n >\\n {{ 'skyux_text_editor_url_modal_email_label' | skyLibResources }}\\n </label>\\n <input\\n #emailAddressInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n type=\\\"text\\\"\\n skyId\\n [(ngModel)]=\\\"emailAddress\\\"\\n />\\n </sky-input-box>\\n </div>\\n <sky-input-box stacked=\\\"true\\\" class=\\\"sky-form-group\\\">\\n <label class=\\\"sky-control-label\\\" [for]=\\\"subjectInput.id\\\">\\n {{ 'skyux_text_editor_url_modal_subject_label' | skyLibResources }}\\n </label>\\n <input\\n #subjectInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n type=\\\"text\\\"\\n skyId\\n [(ngModel)]=\\\"subject\\\"\\n />\\n </sky-input-box>\\n </sky-tab>\\n </sky-tabset>\\n </sky-modal-content>\\n <sky-modal-footer>\\n <button\\n type=\\\"submit\\\"\\n class=\\\"sky-btn sky-btn-primary\\\"\\n [disabled]=\\\"!valid\\\"\\n (click)=\\\"save()\\\"\\n >\\n {{ 'skyux_text_editor_url_modal_save_button_label' | skyLibResources }}\\n </button>\\n <button type=\\\"button\\\" class=\\\"sky-btn sky-btn-link\\\" (click)=\\\"cancel()\\\">\\n {{ 'skyux_text_editor_url_modal_cancel_button_label' | skyLibResources }}\\n </button>\\n </sky-modal-footer>\\n</sky-modal>\\n\", styles: [\".sky-text-editor-url-modal-first-field{margin-top:15px}\\n\"], dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgSelectOption, selector: \"option\", inputs: [\"ngValue\", \"value\"] }, { kind: \"directive\", type: i1.ɵNgSelectMultipleOption, selector: \"option\", inputs: [\"ngValue\", \"value\"] }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.SelectControlValueAccessor, selector: \"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]\", inputs: [\"compareWith\"] }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: SkyModalModule }, { kind: \"component\", type: i2.λ5, selector: \"sky-modal\", inputs: [\"formErrors\", \"headingText\", \"helpKey\", \"helpPopoverContent\", \"helpPopoverTitle\", \"ariaRole\", \"tiledBody\", \"ariaDescribedBy\", \"ariaLabelledBy\", \"layout\"] }, { kind: \"component\", type: i2.λ2, selector: \"sky-modal-content\" }, { kind: \"component\", type: i2.λ3, selector: \"sky-modal-footer\" }, { kind: \"component\", type: i2.λ4, selector: \"sky-modal-header\" }, { kind: \"ngmodule\", type: SkyIdModule }, { kind: \"directive\", type: i3.λ2, selector: \"[skyId]\", exportAs: [\"skyId\"] }, { kind: \"ngmodule\", type: SkyInputBoxModule }, { kind: \"component\", type: i4.λ10, selector: \"sky-input-box\", inputs: [\"hasErrors\", \"disabled\", \"labelText\", \"characterLimit\", \"stacked\", \"helpPopoverTitle\", \"helpPopoverContent\", \"helpKey\", \"hintText\"] }, { kind: \"ngmodule\", type: SkyTabsModule }, { kind: \"component\", type: i5.λ1, selector: \"sky-tab\", inputs: [\"active\", \"disabled\", \"permalinkValue\", \"tabHeaderCount\", \"tabHeading\", \"tabIndexValue\", \"layout\"], outputs: [\"close\"] }, { kind: \"component\", type: i5.λ2, selector: \"sky-tabset\", inputs: [\"active\", \"ariaLabel\", \"ariaLabelledBy\", \"permalinkId\", \"tabStyle\"], outputs: [\"activeChange\", \"newTab\", \"openTab\", \"tabIndexesChange\"] }, { kind: \"ngmodule\", type: SkyTextEditorResourcesModule }, { kind: \"pipe\", type: i6.SkyLibResourcesPipe, name: \"skyLibResources\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorUrlModalComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-text-editor-url-modal', imports: [\n FormsModule,\n SkyModalModule,\n SkyIdModule,\n SkyInputBoxModule,\n SkyTabsModule,\n SkyTextEditorResourcesModule,\n ], template: \"<sky-modal>\\n <sky-modal-header>\\n {{ 'skyux_text_editor_url_modal_header_label' | skyLibResources }}\\n </sky-modal-header>\\n <sky-modal-content>\\n <sky-tabset\\n data-sky-id=\\\"test-tabset\\\"\\n [active]=\\\"activeTab\\\"\\n (activeChange)=\\\"activeTabChanged($event)\\\"\\n >\\n <sky-tab tabHeading=\\\"Web page\\\">\\n <div class=\\\"sky-form-group sky-text-editor-url-modal-first-field\\\">\\n <sky-input-box\\n class=\\\"sky-text-editor-url-input\\\"\\n stacked=\\\"true\\\"\\n [hintText]=\\\"\\n openLinksInNewWindowOnly\\n ? ('skyux_text_editor_url_modal_open_in_new_window_label'\\n | skyLibResources)\\n : undefined\\n \\\"\\n >\\n <label\\n class=\\\"sky-control-label sky-control-label-required\\\"\\n [for]=\\\"urlInput.id\\\"\\n >\\n {{ 'skyux_text_editor_url_modal_url_label' | skyLibResources }}\\n </label>\\n <input\\n #urlInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n type=\\\"text\\\"\\n skyId\\n [(ngModel)]=\\\"url\\\"\\n />\\n </sky-input-box>\\n </div>\\n @if (allowAllOpenLinkOptions) {\\n <sky-input-box stacked=\\\"true\\\" class=\\\"sky-form-group\\\">\\n <label class=\\\"sky-control-label\\\" [for]=\\\"targetInput.id\\\">\\n {{ 'skyux_text_editor_url_modal_open_label' | skyLibResources }}\\n </label>\\n <select\\n #targetInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n skyId\\n [(ngModel)]=\\\"target\\\"\\n >\\n <option value=\\\"0\\\">\\n {{\\n 'skyux_text_editor_url_modal_current_option_label'\\n | skyLibResources\\n }}\\n </option>\\n <option value=\\\"1\\\">\\n {{\\n 'skyux_text_editor_url_modal_new_option_label'\\n | skyLibResources\\n }}\\n </option>\\n </select>\\n </sky-input-box>\\n }\\n </sky-tab>\\n <sky-tab tabHeading=\\\"Email address\\\">\\n <div class=\\\"sky-form-group first-field\\\">\\n <sky-input-box stacked=\\\"true\\\">\\n <label\\n class=\\\"sky-control-label sky-control-label-required\\\"\\n [for]=\\\"emailAddressInput.id\\\"\\n >\\n {{ 'skyux_text_editor_url_modal_email_label' | skyLibResources }}\\n </label>\\n <input\\n #emailAddressInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n type=\\\"text\\\"\\n skyId\\n [(ngModel)]=\\\"emailAddress\\\"\\n />\\n </sky-input-box>\\n </div>\\n <sky-input-box stacked=\\\"true\\\" class=\\\"sky-form-group\\\">\\n <label class=\\\"sky-control-label\\\" [for]=\\\"subjectInput.id\\\">\\n {{ 'skyux_text_editor_url_modal_subject_label' | skyLibResources }}\\n </label>\\n <input\\n #subjectInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n type=\\\"text\\\"\\n skyId\\n [(ngModel)]=\\\"subject\\\"\\n />\\n </sky-input-box>\\n </sky-tab>\\n </sky-tabset>\\n </sky-modal-content>\\n <sky-modal-footer>\\n <button\\n type=\\\"submit\\\"\\n class=\\\"sky-btn sky-btn-primary\\\"\\n [disabled]=\\\"!valid\\\"\\n (click)=\\\"save()\\\"\\n >\\n {{ 'skyux_text_editor_url_modal_save_button_label' | skyLibResources }}\\n </button>\\n <button type=\\\"button\\\" class=\\\"sky-btn sky-btn-link\\\" (click)=\\\"cancel()\\\">\\n {{ 'skyux_text_editor_url_modal_cancel_button_label' | skyLibResources }}\\n </button>\\n </sky-modal-footer>\\n</sky-modal>\\n\", styles: [\".sky-text-editor-url-modal-first-field{margin-top:15px}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItdXJsLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3IvdXJsLW1vZGFsL3RleHQtZWRpdG9yLXVybC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFlLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7OztBQUVyRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFDM0IsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUM7QUFFeEM7O0dBRUc7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QWE7d0JBQ2IsNEJBQTRCO3FCQUM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUlkTW9kdWxlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5SW5wdXRCb3hNb2R1bGUgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuaW1wb3J0IHsgU2t5TW9kYWxJbnN0YW5jZSwgU2t5TW9kYWxNb2R1bGUgfSBmcm9tICdAc2t5dXgvbW9kYWxzJztcbmltcG9ydCB7IFNreVRhYkluZGV4LCBTa3lUYWJzTW9kdWxlIH0gZnJvbSAnQHNreXV4L3RhYnMnO1xuaW1wb3J0IHsgU2t5VmFsaWRhdGlvbiB9IGZyb20gJ0Bza3l1eC92YWxpZGF0aW9uJztcblxuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclJlc291cmNlc01vZHVsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9za3ktdGV4dC1lZGl0b3ItcmVzb3VyY2VzLm1vZHVsZSc7XG5cbmltcG9ydCB7IFNreVVybE1vZGFsQ29udGV4dCB9IGZyb20gJy4vdGV4dC1lZGl0b3ItdXJsLW1vZGFsLWNvbnRleHQnO1xuaW1wb3J0IHsgVXJsTW9kYWxSZXN1bHQgfSBmcm9tICcuL3RleHQtZWRpdG9yLXVybC1tb2RhbC1yZXN1bHQnO1xuaW1wb3J0IHsgVXJsVGFyZ2V0IH0gZnJvbSAnLi90ZXh0LWVkaXRvci11cmwtdGFyZ2V0JztcblxuY29uc3QgZW1haWxLZXkgPSAnbWFpbHRvOic7XG5jb25zdCBxdWVyeVN0cmluZ1BhcmFtS2V5ID0gJz9TdWJqZWN0PSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS10ZXh0LWVkaXRvci11cmwtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3ItdXJsLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1lZGl0b3ItdXJsLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBTa3lNb2RhbE1vZHVsZSxcbiAgICBTa3lJZE1vZHVsZSxcbiAgICBTa3lJbnB1dEJveE1vZHVsZSxcbiAgICBTa3lUYWJzTW9kdWxlLFxuICAgIFNreVRleHRFZGl0b3JSZXNvdXJjZXNNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JVcmxNb2RhbENvbXBvbmVudCB7XG4gIHB1YmxpYyBzZXQgYWN0aXZlVGFiKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLiNfYWN0aXZlVGFiID0gdmFsdWU7XG4gICAgdGhpcy52YWxpZCA9IHRoaXMuI2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aXZlVGFiKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19hY3RpdmVUYWI7XG4gIH1cblxuICBwdWJsaWMgc2V0IGVtYWlsQWRkcmVzcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy4jX2VtYWlsQWRkcmVzcyA9IHZhbHVlO1xuICAgIHRoaXMudmFsaWQgPSB0aGlzLiNpc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVtYWlsQWRkcmVzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNfZW1haWxBZGRyZXNzO1xuICB9XG5cbiAgcHVibGljIHNldCB1cmwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuI191cmwgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbGlkID0gdGhpcy4jaXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX3VybDtcbiAgfVxuXG4gIHB1YmxpYyBlbWFpbEFkZHJlc3NWYWxpZCA9IGZhbHNlO1xuICBwdWJsaWMgYWxsb3dBbGxPcGVuTGlua09wdGlvbnMgPSB0cnVlO1xuICBwdWJsaWMgb3BlbkxpbmtzSW5OZXdXaW5kb3dPbmx5ID0gZmFsc2U7XG4gIHB1YmxpYyBzdWJqZWN0ID0gJyc7XG4gIHB1YmxpYyB0YXJnZXQ6IG51bWJlciB8IHN0cmluZyA9IDA7XG4gIHB1YmxpYyB2YWxpZCA9IGZhbHNlO1xuXG4gICNfYWN0aXZlVGFiID0gMDtcbiAgI19lbWFpbEFkZHJlc3MgPSAnJztcbiAgI191cmwgPSAnaHR0cHM6Ly8nO1xuXG4gIHJlYWRvbmx5ICNtb2RhbENvbnRleHQgPSBpbmplY3QoU2t5VXJsTW9kYWxDb250ZXh0KTtcbiAgcmVhZG9ubHkgI21vZGFsSW5zdGFuY2UgPSBpbmplY3QoU2t5TW9kYWxJbnN0YW5jZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbGlua1dpbmRvd09wdGlvbnMgPSB0aGlzLiNtb2RhbENvbnRleHQubGlua1dpbmRvd09wdGlvbnM7XG5cbiAgICBpZiAobGlua1dpbmRvd09wdGlvbnM/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5hbGxvd0FsbE9wZW5MaW5rT3B0aW9ucyA9IGZhbHNlO1xuICAgICAgaWYgKGxpbmtXaW5kb3dPcHRpb25zWzBdID09PSAnbmV3Jykge1xuICAgICAgICB0aGlzLm9wZW5MaW5rc0luTmV3V2luZG93T25seSA9IHRydWU7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy4jbW9kYWxDb250ZXh0LnVybFJlc3VsdCkge1xuICAgICAgaWYgKHRoaXMuI21vZGFsQ29udGV4dC51cmxSZXN1bHQudXJsLnN0YXJ0c1dpdGgoZW1haWxLZXkpKSB7XG4gICAgICAgIHRoaXMuZW1haWxBZGRyZXNzID0gdGhpcy4jbW9kYWxDb250ZXh0LnVybFJlc3VsdC51cmwucmVwbGFjZShcbiAgICAgICAgICBlbWFpbEtleSxcbiAgICAgICAgICAnJyxcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgcXVlcnlTdHJpbmdJbmRleCA9IHRoaXMuZW1haWxBZGRyZXNzLmluZGV4T2YocXVlcnlTdHJpbmdQYXJhbUtleSk7XG4gICAgICAgIHF1ZXJ5U3RyaW5nSW5kZXggPVxuICAgICAgICAgIHF1ZXJ5U3RyaW5nSW5kZXggPiAtMVxuICAgICAgICAgICAgPyBxdWVyeVN0cmluZ0luZGV4XG4gICAgICAgICAgICA6IHRoaXMuZW1haWxBZGRyZXNzLmluZGV4T2YocXVlcnlTdHJpbmdQYXJhbUtleS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAocXVlcnlTdHJpbmdJbmRleCA+IC0xKSB7XG4gICAgICAgICAgdGhpcy5zdWJqZWN0ID0gZGVjb2RlVVJJKHRoaXMuZW1haWxBZGRyZXNzKS5zbGljZShcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nSW5kZXggKyBxdWVyeVN0cmluZ1BhcmFtS2V5Lmxlbmd0aCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuZW1haWxBZGRyZXNzID0gdGhpcy5lbWFpbEFkZHJlc3Muc2xpY2UoMCwgcXVlcnlTdHJpbmdJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgYWN0aXZlIHRhYiB0byBlbWFpbFxuICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVybCA9IHRoaXMuI21vZGFsQ29udGV4dC51cmxSZXN1bHQudXJsO1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRoaXMuI21vZGFsQ29udGV4dC51cmxSZXN1bHQudGFyZ2V0IGFzIGFueTtcblxuICAgICAgICAvLyBzZXQgYWN0aXZlIHRhYiB0byB3ZWIgcGFnZVxuICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFjdGl2ZVRhYkNoYW5nZWQodmFsdWU6IFNreVRhYkluZGV4KTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVUYWIgPSBOdW1iZXIodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy4jaXNWYWxpZCgpKSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVUYWIgPT09IDApIHtcbiAgICAgICAgdGhpcy4jbW9kYWxJbnN0YW5jZS5zYXZlKHtcbiAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgIHRhcmdldDogdGhpcy50YXJnZXRcbiAgICAgICAgICAgID8gcGFyc2VJbnQodGhpcy50YXJnZXQgYXMgc3RyaW5nLCB1bmRlZmluZWQpXG4gICAgICAgICAgICA6IFVybFRhcmdldC5Ob25lLFxuICAgICAgICB9IGFzIFVybE1vZGFsUmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI21vZGFsSW5zdGFuY2Uuc2F2ZSh7XG4gICAgICAgICAgdXJsOiB0aGlzLiNnZXRFbWFpbFVybCgpLFxuICAgICAgICAgIHRhcmdldDogVXJsVGFyZ2V0Lk5vbmUsXG4gICAgICAgIH0gYXMgVXJsTW9kYWxSZXN1bHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy4jbW9kYWxJbnN0YW5jZS5jYW5jZWwoKTtcbiAgfVxuXG4gICNnZXRFbWFpbFVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICBlbWFpbEtleSArXG4gICAgICB0aGlzLmVtYWlsQWRkcmVzcyArXG4gICAgICAodGhpcy5zdWJqZWN0ID8gJz9TdWJqZWN0PScgKyBlbmNvZGVVUkkodGhpcy5zdWJqZWN0KSA6ICcnKVxuICAgICk7XG4gIH1cblxuICAjaXNWYWxpZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hY3RpdmVUYWIgPT09IDApIHtcbiAgICAgIHJldHVybiAhIXRoaXMudXJsICYmIFNreVZhbGlkYXRpb24uaXNVcmwodGhpcy51cmwpO1xuICAgIH1cbiAgICByZXR1cm4gISF0aGlzLmVtYWlsQWRkcmVzcyAmJiBTa3lWYWxpZGF0aW9uLmlzRW1haWwodGhpcy5lbWFpbEFkZHJlc3MpO1xuICB9XG59XG4iLCI8c2t5LW1vZGFsPlxuICA8c2t5LW1vZGFsLWhlYWRlcj5cbiAgICB7eyAnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX2hlYWRlcl9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgPC9za3ktbW9kYWwtaGVhZGVyPlxuICA8c2t5LW1vZGFsLWNvbnRlbnQ+XG4gICAgPHNreS10YWJzZXRcbiAgICAgIGRhdGEtc2t5LWlkPVwidGVzdC10YWJzZXRcIlxuICAgICAgW2FjdGl2ZV09XCJhY3RpdmVUYWJcIlxuICAgICAgKGFjdGl2ZUNoYW5nZSk9XCJhY3RpdmVUYWJDaGFuZ2VkKCRldmVudClcIlxuICAgID5cbiAgICAgIDxza3ktdGFiIHRhYkhlYWRpbmc9XCJXZWIgcGFnZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LWZvcm0tZ3JvdXAgc2t5LXRleHQtZWRpdG9yLXVybC1tb2RhbC1maXJzdC1maWVsZFwiPlxuICAgICAgICAgIDxza3ktaW5wdXQtYm94XG4gICAgICAgICAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci11cmwtaW5wdXRcIlxuICAgICAgICAgICAgc3RhY2tlZD1cInRydWVcIlxuICAgICAgICAgICAgW2hpbnRUZXh0XT1cIlxuICAgICAgICAgICAgICBvcGVuTGlua3NJbk5ld1dpbmRvd09ubHlcbiAgICAgICAgICAgICAgICA/ICgnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX29wZW5faW5fbmV3X3dpbmRvd19sYWJlbCdcbiAgICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1jb250cm9sLWxhYmVsIHNreS1jb250cm9sLWxhYmVsLXJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgW2Zvcl09XCJ1cmxJbnB1dC5pZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfdXJsX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAjdXJsSW5wdXQ9XCJza3lJZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2t5LWZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgc2t5SWRcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ1cmxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NreS1pbnB1dC1ib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKGFsbG93QWxsT3BlbkxpbmtPcHRpb25zKSB7XG4gICAgICAgICAgPHNreS1pbnB1dC1ib3ggc3RhY2tlZD1cInRydWVcIiBjbGFzcz1cInNreS1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJza3ktY29udHJvbC1sYWJlbFwiIFtmb3JdPVwidGFyZ2V0SW5wdXQuaWRcIj5cbiAgICAgICAgICAgICAge3sgJ3NreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9vcGVuX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgI3RhcmdldElucHV0PVwic2t5SWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1mb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBza3lJZFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRhcmdldFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIwXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfY3VycmVudF9vcHRpb25fbGFiZWwnXG4gICAgICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfbmV3X29wdGlvbl9sYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvc2t5LWlucHV0LWJveD5cbiAgICAgICAgfVxuICAgICAgPC9za3ktdGFiPlxuICAgICAgPHNreS10YWIgdGFiSGVhZGluZz1cIkVtYWlsIGFkZHJlc3NcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNreS1mb3JtLWdyb3VwIGZpcnN0LWZpZWxkXCI+XG4gICAgICAgICAgPHNreS1pbnB1dC1ib3ggc3RhY2tlZD1cInRydWVcIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1jb250cm9sLWxhYmVsIHNreS1jb250cm9sLWxhYmVsLXJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgW2Zvcl09XCJlbWFpbEFkZHJlc3NJbnB1dC5pZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfZW1haWxfbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICNlbWFpbEFkZHJlc3NJbnB1dD1cInNreUlkXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBza3lJZFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVtYWlsQWRkcmVzc1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc2t5LWlucHV0LWJveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxza3ktaW5wdXQtYm94IHN0YWNrZWQ9XCJ0cnVlXCIgY2xhc3M9XCJza3ktZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNreS1jb250cm9sLWxhYmVsXCIgW2Zvcl09XCJzdWJqZWN0SW5wdXQuaWRcIj5cbiAgICAgICAgICAgIHt7ICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfc3ViamVjdF9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3N1YmplY3RJbnB1dD1cInNreUlkXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBza3lJZFxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdWJqZWN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3NreS1pbnB1dC1ib3g+XG4gICAgICA8L3NreS10YWI+XG4gICAgPC9za3ktdGFic2V0PlxuICA8L3NreS1tb2RhbC1jb250ZW50PlxuICA8c2t5LW1vZGFsLWZvb3Rlcj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLXByaW1hcnlcIlxuICAgICAgW2Rpc2FibGVkXT1cIiF2YWxpZFwiXG4gICAgICAoY2xpY2spPVwic2F2ZSgpXCJcbiAgICA+XG4gICAgICB7eyAnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX3NhdmVfYnV0dG9uX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWxpbmtcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5cbiAgICAgIHt7ICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfY2FuY2VsX2J1dHRvbl9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9za3ktbW9kYWwtZm9vdGVyPlxuPC9za3ktbW9kYWw+XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, booleanAttribute, inject, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyColorpickerMessageType, SkyColorpickerModule, } from '@skyux/colorpicker';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyModalService } from '@skyux/modals';\nimport { SkyDropdownMessageType, SkyDropdownModule, } from '@skyux/popovers';\nimport { SkyThemeModule } from '@skyux/theme';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { STYLE_STATE_DEFAULTS } from '../defaults/style-state-defaults';\nimport { SkyTextEditorAdapterService } from '../services/text-editor-adapter.service';\nimport { SkyUrlModalContext } from '../url-modal/text-editor-url-modal-context';\nimport { SkyTextEditorUrlModalComponent } from '../url-modal/text-editor-url-modal.component';\nimport { UrlTarget } from '../url-modal/text-editor-url-target';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"@skyux/forms\";\nimport * as i4 from \"@skyux/colorpicker\";\nimport * as i5 from \"@skyux/popovers\";\nimport * as i6 from \"@skyux/icon\";\nimport * as i7 from \"@skyux/layout\";\n/**\n * @internal\n */\nexport class SkyTextEditorToolbarComponent {\n constructor() {\n this.fontList = [];\n this.fontSizeList = [];\n this.toolbarActions = [];\n this.linkWindowOptions = [];\n this.disabled = false;\n this.backColorpickerStream = new Subject();\n this.colorpickerStream = new Subject();\n this.fontPickerStream = new Subject();\n this.fontSizeStream = new Subject();\n this.#ngUnsubscribe = new Subject();\n this.#_editorFocusStream = new Subject();\n this.#_styleState = STYLE_STATE_DEFAULTS;\n this.#adapterService = inject(SkyTextEditorAdapterService);\n this.#changeDetector = inject(ChangeDetectorRef);\n this.#modalService = inject(SkyModalService);\n }\n set editorFocusStream(value) {\n this.#_editorFocusStream = value;\n this.#subscribeEditorFocus();\n }\n get editorFocusStream() {\n return this.#_editorFocusStream;\n }\n set styleState(value) {\n this.#_styleState = value;\n if (value.font !== this.styleStateFontName) {\n if (value.font === '\"Blackbaud Sans\", Arial, sans-serif') {\n this.styleStateFontName = this.#getFontName('Blackbaud Sans');\n }\n else {\n this.styleStateFontName = this.#getFontName(value.font);\n }\n }\n }\n get styleState() {\n return this.#_styleState;\n }\n #editorFocusStreamSub;\n #ngUnsubscribe;\n #_editorFocusStream;\n #_styleState;\n #adapterService;\n #changeDetector;\n #modalService;\n ngOnInit() {\n this.#subscribeEditorFocus();\n }\n execCommand(command, value = '') {\n void this.#adapterService.execCommand({\n command: command,\n value: value,\n });\n this.styleState = {\n ...this.styleState,\n ...this.#adapterService.getStyleState(),\n };\n }\n toggleFontStyle(currentState, newState, command) {\n if (currentState !== newState) {\n this.execCommand(command);\n }\n // Force sky-checkbox to show changes on user's initial click.\n this.#changeDetector.detectChanges();\n }\n link() {\n const priorSelection = this.#adapterService.saveSelection();\n const currentLink = this.#adapterService.getLink();\n const inputModal = this.#modalService.open(SkyTextEditorUrlModalComponent, [\n {\n provide: SkyUrlModalContext,\n useFactory: () => {\n const context = new SkyUrlModalContext();\n context.urlResult = currentLink;\n context.linkWindowOptions = this.linkWindowOptions;\n return context;\n },\n },\n ]);\n inputModal.closed.subscribe((result) => {\n if (result.reason === 'save' && priorSelection) {\n if (currentLink) {\n const anchor = this.#adapterService.getSelectedAnchorTag();\n if (anchor) {\n this.#adapterService.selectElement(anchor);\n }\n }\n this.execCommand('unlink');\n if (result.data.target === UrlTarget.None) {\n // Current window\n this.execCommand('createLink', result.data.url);\n }\n else {\n // New Window\n const sText = this.#adapterService.getCurrentSelection();\n this.execCommand('insertHTML', '<a href=\"' +\n result.data.url +\n '\" rel=\"noopener noreferrer\" target=\"_blank\">' +\n sText +\n '</a>');\n }\n }\n });\n }\n unlink() {\n const currentSelectionRange = this.#adapterService\n .getCurrentSelection()\n ?.getRangeAt(0);\n if (currentSelectionRange && currentSelectionRange.toString().length <= 0) {\n const anchorTag = this.#adapterService.getSelectedAnchorTag();\n if (anchorTag) {\n this.#adapterService.selectElement(anchorTag);\n }\n }\n this.execCommand('unlink');\n }\n changeFontSize(size) {\n void this.#adapterService.setFontSize(size);\n this.styleState = {\n ...this.styleState,\n ...this.#adapterService.getStyleState(),\n };\n }\n onColorpickerColorChanged(color, isBackground = false) {\n if (isBackground) {\n this.execCommand('backColor', color.rgbaText);\n }\n else {\n this.execCommand('foreColor', color.hex);\n }\n }\n #subscribeEditorFocus() {\n this.#editorFocusStreamSub?.unsubscribe();\n this.#editorFocusStreamSub = this.editorFocusStream\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.styleState = {\n ...this.styleState,\n ...this.#adapterService.getStyleState(),\n };\n this.#closeDropdowns();\n this.#changeDetector.detectChanges();\n });\n }\n #closeDropdowns() {\n const message = {\n type: SkyColorpickerMessageType.Close,\n };\n this.colorpickerStream.next(message);\n this.backColorpickerStream.next(message);\n this.fontPickerStream.next({ type: SkyDropdownMessageType.Close });\n this.fontSizeStream.next({ type: SkyDropdownMessageType.Close });\n }\n #getFontName(fontName) {\n for (const skyTextEditorFont of this.fontList) {\n if (fontName.replace(/['\"]+/g, '') === skyTextEditorFont.name) {\n return skyTextEditorFont.name;\n }\n }\n /* istanbul ignore next */\n return undefined;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.5\", type: SkyTextEditorToolbarComponent, isStandalone: true, selector: \"sky-text-editor-toolbar\", inputs: { editorFocusStream: \"editorFocusStream\", fontList: \"fontList\", fontSizeList: \"fontSizeList\", toolbarActions: \"toolbarActions\", linkWindowOptions: \"linkWindowOptions\", styleState: \"styleState\", disabled: [\"disabled\", \"disabled\", booleanAttribute] }, ngImport: i0, template: \"@for (action of toolbarActions; track action) {\\n <sky-toolbar-item\\n class=\\\"sky-text-editor-toolbar-action\\\"\\n [ngClass]=\\\"'sky-text-editor-toolbar-action-' + action\\\"\\n >\\n @switch (action) {\\n @case ('font-family') {\\n <sky-dropdown\\n class=\\\"sky-text-editor-font-picker\\\"\\n [disabled]=\\\"disabled\\\"\\n [label]=\\\"'Font: ' + styleStateFontName\\\"\\n [messageStream]=\\\"fontPickerStream\\\"\\n >\\n <sky-dropdown-button\\n [ngStyle]=\\\"{\\n 'font-family': styleState.font\\n }\\\"\\n >\\n {{ styleStateFontName }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (fontModel of fontList; track fontModel.name) {\\n <sky-dropdown-item>\\n <button\\n type=\\\"button\\\"\\n [ngStyle]=\\\"{\\n 'font-family': fontModel.value\\n }\\\"\\n (click)=\\\"execCommand('fontname', fontModel.name)\\\"\\n >\\n {{ fontModel.name }}\\n </button>\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('font-size') {\\n <sky-dropdown\\n class=\\\"sky-text-editor-font-size-picker\\\"\\n [disabled]=\\\"disabled\\\"\\n [label]=\\\"'Font size: ' + styleState.fontSize + 'px'\\\"\\n [messageStream]=\\\"fontSizeStream\\\"\\n >\\n <sky-dropdown-button\\n [ngStyle]=\\\"{\\n 'font-family': styleState.fontSize\\n }\\\"\\n >\\n {{ styleState.fontSize + 'px' }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (size of fontSizeList; track size) {\\n <sky-dropdown-item>\\n <button type=\\\"button\\\" (click)=\\\"changeFontSize(size)\\\">\\n {{ size + 'px' }}\\n </button>\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('font-style') {\\n <div class=\\\"sky-switch-icon-group sky-text-editor-font-style-picker\\\">\\n <sky-checkbox\\n iconName=\\\"text-bold\\\"\\n label=\\\"Bold\\\"\\n title=\\\"Bold\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.boldState\\\"\\n (ngModelChange)=\\\"\\n toggleFontStyle(styleState.boldState, $event, 'bold')\\n \\\"\\n />\\n <sky-checkbox\\n iconName=\\\"text-italic\\\"\\n label=\\\"Italicized\\\"\\n title=\\\"Italicized\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.italicState\\\"\\n (ngModelChange)=\\\"\\n toggleFontStyle(styleState.italicState, $event, 'italic')\\n \\\"\\n />\\n <sky-checkbox\\n iconName=\\\"text-underline\\\"\\n label=\\\"Underline\\\"\\n title=\\\"Underline\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.underlineState\\\"\\n (ngModelChange)=\\\"\\n toggleFontStyle(styleState.underlineState, $event, 'underline')\\n \\\"\\n />\\n </div>\\n }\\n @case ('color') {\\n <div class=\\\"sky-text-editor-colorpicker-group\\\">\\n <div class=\\\"sky-text-editor-colorpicker-container\\\">\\n <sky-colorpicker\\n #colorPicker\\n class=\\\"sky-text-editor-font-color-picker\\\"\\n label=\\\"Font color\\\"\\n pickerButtonIcon=\\\"color-line\\\"\\n [messageStream]=\\\"colorpickerStream\\\"\\n [showResetButton]=\\\"false\\\"\\n (selectedColorChanged)=\\\"onColorpickerColorChanged($event)\\\"\\n >\\n <input\\n outputFormat=\\\"hex\\\"\\n type=\\\"text\\\"\\n [allowTransparency]=\\\"false\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.fontColor\\\"\\n [skyColorpickerInput]=\\\"colorPicker\\\"\\n />\\n </sky-colorpicker>\\n </div>\\n <div class=\\\"sky-text-editor-colorpicker-container\\\">\\n <sky-colorpicker\\n #backColorPicker\\n class=\\\"sky-text-editor-background-color-picker\\\"\\n label=\\\"Background color\\\"\\n pickerButtonIcon=\\\"text-color\\\"\\n [messageStream]=\\\"backColorpickerStream\\\"\\n [showResetButton]=\\\"false\\\"\\n (selectedColorChanged)=\\\"onColorpickerColorChanged($event, true)\\\"\\n >\\n <input\\n outputFormat=\\\"rgba\\\"\\n type=\\\"text\\\"\\n [allowTransparency]=\\\"true\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.backColor\\\"\\n [skyColorpickerInput]=\\\"backColorPicker\\\"\\n />\\n </sky-colorpicker>\\n </div>\\n </div>\\n }\\n @case ('list') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Bulleted list\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Bulleted list\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('insertUnorderedList')\\\"\\n >\\n <sky-icon iconName=\\\"text-bullet-list\\\" />\\n </button>\\n <button\\n aria-label=\\\"Numbered list\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Numbered list\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('insertOrderedList')\\\"\\n >\\n <sky-icon iconName=\\\"text-number-list-ltr\\\" />\\n </button>\\n </div>\\n }\\n @case ('alignment') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Align left\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Align left\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('justifyLeft')\\\"\\n >\\n <sky-icon iconName=\\\"text-align-left\\\" />\\n </button>\\n <button\\n aria-label=\\\"Align center\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Align center\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('justifyCenter')\\\"\\n >\\n <sky-icon iconName=\\\"text-align-center\\\" />\\n </button>\\n <button\\n aria-label=\\\"Align right\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Align right\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('justifyRight')\\\"\\n >\\n <sky-icon iconName=\\\"text-align-right\\\" />\\n </button>\\n </div>\\n }\\n @case ('indentation') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Outdent\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Outdent\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('outdent')\\\"\\n >\\n <sky-icon iconName=\\\"text-indent-decrease\\\" />\\n </button>\\n <button\\n aria-label=\\\"Indent\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Indent\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('indent')\\\"\\n >\\n <sky-icon iconName=\\\"text-indent-increase\\\" />\\n </button>\\n </div>\\n }\\n @case ('undo-redo') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Undo\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Undo\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('undo')\\\"\\n >\\n <sky-icon iconName=\\\"arrow-undo\\\" />\\n </button>\\n <button\\n aria-label=\\\"Redo\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Redo\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('redo')\\\"\\n >\\n <sky-icon iconName=\\\"arrow-redo\\\" />\\n </button>\\n </div>\\n }\\n @case ('link') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Link\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Link\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngClass]=\\\"{\\n 'icon-btn-active': styleState.linkState\\n }\\\"\\n (click)=\\\"link()\\\"\\n >\\n <sky-icon iconName=\\\"link\\\" />\\n </button>\\n <button\\n aria-label=\\\"Unlink\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Unlink\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"!styleState.linkState || disabled\\\"\\n (click)=\\\"unlink()\\\"\\n >\\n <sky-icon iconName=\\\"link-dismiss\\\" />\\n </button>\\n </div>\\n }\\n }\\n </sky-toolbar-item>\\n}\\n\", styles: [\".sky-text-editor-toolbar-action:not(.sky-theme-modern *){--sky-override-text-editor-border-radius: 0;--sky-override-text-editor-button-border-outer-radius: 3px;--sky-override-text-editor-button-border: 1px solid #cdcfd2;--sky-override-text-editor-colorpicker-spacing: 10px;--sky-override-text-editor-colorpicker-top: 3px}.sky-text-editor-toolbar-action .sky-text-editor-font-picker ::ng-deep .sky-dropdown-button-content-container{width:140px;height:20px;text-align:left}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group{display:flex}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container{position:relative;top:var(--sky-override-text-editor-colorpicker-top, -2px);margin-right:var(--sky-override-text-editor-colorpicker-spacing, var(--sky-space-gap-action_group-m))}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container:last-child{margin-right:0}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn{margin-left:0;margin-right:0;border-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));border-right:none}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn:first-of-type{border-top-left-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s));border-bottom-left-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s))}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn:last-of-type{border-top-right-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s));border-bottom-right-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s));border-right:var(--sky-override-text-editor-button-border, none)}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: SkyCheckboxModule }, { kind: \"component\", type: i3.λ3, selector: \"sky-checkbox\", inputs: [\"label\", \"labelledBy\", \"id\", \"disabled\", \"tabindex\", \"name\", \"helpPopoverContent\", \"helpPopoverTitle\", \"iconName\", \"checkboxType\", \"checked\", \"indeterminate\", \"required\", \"labelText\", \"labelHidden\", \"hintText\", \"stacked\", \"helpKey\"], outputs: [\"change\", \"checkedChange\", \"disabledChange\", \"indeterminateChange\"] }, { kind: \"ngmodule\", type: SkyColorpickerModule }, { kind: \"component\", type: i4.λ1, selector: \"sky-colorpicker\", inputs: [\"pickerButtonIcon\", \"label\", \"labelledBy\", \"labelText\", \"labelHidden\", \"helpKey\", \"helpPopoverContent\", \"helpPopoverTitle\", \"hintText\", \"stacked\", \"messageStream\", \"showResetButton\"], outputs: [\"selectedColorChanged\", \"selectedColorApplied\"] }, { kind: \"directive\", type: i4.λ2, selector: \"[skyColorpickerInput]\", inputs: [\"skyColorpickerInput\", \"initialColor\", \"id\", \"returnFormat\", \"outputFormat\", \"presetColors\", \"alphaChannel\", \"allowTransparency\"] }, { kind: \"ngmodule\", type: SkyDropdownModule }, { kind: \"component\", type: i5.λ2, selector: \"sky-dropdown-button\" }, { kind: \"component\", type: i5.λ3, selector: \"sky-dropdown\", inputs: [\"buttonStyle\", \"buttonType\", \"disabled\", \"label\", \"horizontalAlignment\", \"messageStream\", \"title\", \"trigger\"] }, { kind: \"component\", type: i5.λ1, selector: \"sky-dropdown-item\", inputs: [\"ariaRole\"] }, { kind: \"component\", type: i5.λ4, selector: \"sky-dropdown-menu\", inputs: [\"ariaLabelledBy\", \"ariaRole\", \"useNativeFocus\"], outputs: [\"menuChanges\"] }, { kind: \"ngmodule\", type: SkyIconModule }, { kind: \"component\", type: i6.λ1, selector: \"sky-icon\", inputs: [\"iconName\", \"variant\", \"iconSize\"] }, { kind: \"ngmodule\", type: SkyThemeModule }, { kind: \"ngmodule\", type: SkyToolbarModule }, { kind: \"component\", type: i7.λ39, selector: \"sky-toolbar-item\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorToolbarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-text-editor-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n CommonModule,\n FormsModule,\n SkyCheckboxModule,\n SkyColorpickerModule,\n SkyDropdownModule,\n SkyIconModule,\n SkyThemeModule,\n SkyToolbarModule,\n ], template: \"@for (action of toolbarActions; track action) {\\n <sky-toolbar-item\\n class=\\\"sky-text-editor-toolbar-action\\\"\\n [ngClass]=\\\"'sky-text-editor-toolbar-action-' + action\\\"\\n >\\n @switch (action) {\\n @case ('font-family') {\\n <sky-dropdown\\n class=\\\"sky-text-editor-font-picker\\\"\\n [disabled]=\\\"disabled\\\"\\n [label]=\\\"'Font: ' + styleStateFontName\\\"\\n [messageStream]=\\\"fontPickerStream\\\"\\n >\\n <sky-dropdown-button\\n [ngStyle]=\\\"{\\n 'font-family': styleState.font\\n }\\\"\\n >\\n {{ styleStateFontName }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (fontModel of fontList; track fontModel.name) {\\n <sky-dropdown-item>\\n <button\\n type=\\\"button\\\"\\n [ngStyle]=\\\"{\\n 'font-family': fontModel.value\\n }\\\"\\n (click)=\\\"execCommand('fontname', fontModel.name)\\\"\\n >\\n {{ fontModel.name }}\\n </button>\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('font-size') {\\n <sky-dropdown\\n class=\\\"sky-text-editor-font-size-picker\\\"\\n [disabled]=\\\"disabled\\\"\\n [label]=\\\"'Font size: ' + styleState.fontSize + 'px'\\\"\\n [messageStream]=\\\"fontSizeStream\\\"\\n >\\n <sky-dropdown-button\\n [ngStyle]=\\\"{\\n 'font-family': styleState.fontSize\\n }\\\"\\n >\\n {{ styleState.fontSize + 'px' }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (size of fontSizeList; track size) {\\n <sky-dropdown-item>\\n <button type=\\\"button\\\" (click)=\\\"changeFontSize(size)\\\">\\n {{ size + 'px' }}\\n </button>\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('font-style') {\\n <div class=\\\"sky-switch-icon-group sky-text-editor-font-style-picker\\\">\\n <sky-checkbox\\n iconName=\\\"text-bold\\\"\\n label=\\\"Bold\\\"\\n title=\\\"Bold\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.boldState\\\"\\n (ngModelChange)=\\\"\\n toggleFontStyle(styleState.boldState, $event, 'bold')\\n \\\"\\n />\\n <sky-checkbox\\n iconName=\\\"text-italic\\\"\\n label=\\\"Italicized\\\"\\n title=\\\"Italicized\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.italicState\\\"\\n (ngModelChange)=\\\"\\n toggleFontStyle(styleState.italicState, $event, 'italic')\\n \\\"\\n />\\n <sky-checkbox\\n iconName=\\\"text-underline\\\"\\n label=\\\"Underline\\\"\\n title=\\\"Underline\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.underlineState\\\"\\n (ngModelChange)=\\\"\\n toggleFontStyle(styleState.underlineState, $event, 'underline')\\n \\\"\\n />\\n </div>\\n }\\n @case ('color') {\\n <div class=\\\"sky-text-editor-colorpicker-group\\\">\\n <div class=\\\"sky-text-editor-colorpicker-container\\\">\\n <sky-colorpicker\\n #colorPicker\\n class=\\\"sky-text-editor-font-color-picker\\\"\\n label=\\\"Font color\\\"\\n pickerButtonIcon=\\\"color-line\\\"\\n [messageStream]=\\\"colorpickerStream\\\"\\n [showResetButton]=\\\"false\\\"\\n (selectedColorChanged)=\\\"onColorpickerColorChanged($event)\\\"\\n >\\n <input\\n outputFormat=\\\"hex\\\"\\n type=\\\"text\\\"\\n [allowTransparency]=\\\"false\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.fontColor\\\"\\n [skyColorpickerInput]=\\\"colorPicker\\\"\\n />\\n </sky-colorpicker>\\n </div>\\n <div class=\\\"sky-text-editor-colorpicker-container\\\">\\n <sky-colorpicker\\n #backColorPicker\\n class=\\\"sky-text-editor-background-color-picker\\\"\\n label=\\\"Background color\\\"\\n pickerButtonIcon=\\\"text-color\\\"\\n [messageStream]=\\\"backColorpickerStream\\\"\\n [showResetButton]=\\\"false\\\"\\n (selectedColorChanged)=\\\"onColorpickerColorChanged($event, true)\\\"\\n >\\n <input\\n outputFormat=\\\"rgba\\\"\\n type=\\\"text\\\"\\n [allowTransparency]=\\\"true\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.backColor\\\"\\n [skyColorpickerInput]=\\\"backColorPicker\\\"\\n />\\n </sky-colorpicker>\\n </div>\\n </div>\\n }\\n @case ('list') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Bulleted list\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Bulleted list\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('insertUnorderedList')\\\"\\n >\\n <sky-icon iconName=\\\"text-bullet-list\\\" />\\n </button>\\n <button\\n aria-label=\\\"Numbered list\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Numbered list\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('insertOrderedList')\\\"\\n >\\n <sky-icon iconName=\\\"text-number-list-ltr\\\" />\\n </button>\\n </div>\\n }\\n @case ('alignment') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Align left\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Align left\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('justifyLeft')\\\"\\n >\\n <sky-icon iconName=\\\"text-align-left\\\" />\\n </button>\\n <button\\n aria-label=\\\"Align center\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Align center\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('justifyCenter')\\\"\\n >\\n <sky-icon iconName=\\\"text-align-center\\\" />\\n </button>\\n <button\\n aria-label=\\\"Align right\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Align right\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('justifyRight')\\\"\\n >\\n <sky-icon iconName=\\\"text-align-right\\\" />\\n </button>\\n </div>\\n }\\n @case ('indentation') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Outdent\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Outdent\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('outdent')\\\"\\n >\\n <sky-icon iconName=\\\"text-indent-decrease\\\" />\\n </button>\\n <button\\n aria-label=\\\"Indent\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Indent\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('indent')\\\"\\n >\\n <sky-icon iconName=\\\"text-indent-increase\\\" />\\n </button>\\n </div>\\n }\\n @case ('undo-redo') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Undo\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Undo\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('undo')\\\"\\n >\\n <sky-icon iconName=\\\"arrow-undo\\\" />\\n </button>\\n <button\\n aria-label=\\\"Redo\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Redo\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('redo')\\\"\\n >\\n <sky-icon iconName=\\\"arrow-redo\\\" />\\n </button>\\n </div>\\n }\\n @case ('link') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Link\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Link\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngClass]=\\\"{\\n 'icon-btn-active': styleState.linkState\\n }\\\"\\n (click)=\\\"link()\\\"\\n >\\n <sky-icon iconName=\\\"link\\\" />\\n </button>\\n <button\\n aria-label=\\\"Unlink\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Unlink\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"!styleState.linkState || disabled\\\"\\n (click)=\\\"unlink()\\\"\\n >\\n <sky-icon iconName=\\\"link-dismiss\\\" />\\n </button>\\n </div>\\n }\\n }\\n </sky-toolbar-item>\\n}\\n\", styles: [\".sky-text-editor-toolbar-action:not(.sky-theme-modern *){--sky-override-text-editor-border-radius: 0;--sky-override-text-editor-button-border-outer-radius: 3px;--sky-override-text-editor-button-border: 1px solid #cdcfd2;--sky-override-text-editor-colorpicker-spacing: 10px;--sky-override-text-editor-colorpicker-top: 3px}.sky-text-editor-toolbar-action .sky-text-editor-font-picker ::ng-deep .sky-dropdown-button-content-container{width:140px;height:20px;text-align:left}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group{display:flex}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container{position:relative;top:var(--sky-override-text-editor-colorpicker-top, -2px);margin-right:var(--sky-override-text-editor-colorpicker-spacing, var(--sky-space-gap-action_group-m))}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container:last-child{margin-right:0}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn{margin-left:0;margin-right:0;border-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));border-right:none}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn:first-of-type{border-top-left-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s));border-bottom-left-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s))}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn:last-of-type{border-top-right-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s));border-bottom-right-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s));border-right:var(--sky-override-text-editor-button-border, none)}\\n\"] }]\n }], propDecorators: { editorFocusStream: [{\n type: Input\n }], fontList: [{\n type: Input\n }], fontSizeList: [{\n type: Input\n }], toolbarActions: [{\n type: Input\n }], linkWindowOptions: [{\n type: Input\n }], styleState: [{\n type: Input\n }], disabled: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3Rvb2xiYXIvdGV4dC1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3Rvb2xiYXIvdGV4dC1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULEtBQUssRUFFTCxnQkFBZ0IsRUFDaEIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLG9CQUFvQixHQUVyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQXFCLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsT0FBTyxFQUFFLE9BQU8sRUFBZ0Is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Q2pCOzhCQUlVLGlCQUFpQjtzQkFEM0IsS0FBSztnQkFXQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQUlDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFJSyxVQUFVO3NCQURwQixLQUFLO2dCQWlCQyxRQUFRO3NCQURkLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIFNreUNvbG9ycGlja2VyTWVzc2FnZSxcbiAgU2t5Q29sb3JwaWNrZXJNZXNzYWdlVHlwZSxcbiAgU2t5Q29sb3JwaWNrZXJNb2R1bGUsXG4gIFNreUNvbG9ycGlja2VyT3V0cHV0LFxufSBmcm9tICdAc2t5dXgvY29sb3JwaWNrZXInO1xuaW1wb3J0IHsgU2t5Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuaW1wb3J0IHsgU2t5SWNvbk1vZHVsZSB9IGZyb20gJ0Bza3l1eC9pY29uJztcbmltcG9ydCB7IFNreVRvb2xiYXJNb2R1bGUgfSBmcm9tICdAc2t5dXgvbGF5b3V0JztcbmltcG9ydCB7IFNreU1vZGFsQ2xvc2VBcmdzLCBTa3lNb2RhbFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvbW9kYWxzJztcbmltcG9ydCB7XG4gIFNreURyb3Bkb3duTWVzc2FnZSxcbiAgU2t5RHJvcGRvd25NZXNzYWdlVHlwZSxcbiAgU2t5RHJvcGRvd25Nb2R1bGUsXG59IGZyb20gJ0Bza3l1eC9wb3BvdmVycyc7XG5pbXBvcnQgeyBTa3lUaGVtZU1vZHVsZSB9IGZyb20gJ0Bza3l1eC90aGVtZSc7XG5cbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTVFlMRV9TVEFURV9ERUZBVUxUUyB9IGZyb20gJy4uL2RlZmF1bHRzL3N0eWxlLXN0YXRlLWRlZmF1bHRzJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RleHQtZWRpdG9yLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yRm9udCB9IGZyb20gJy4uL3R5cGVzL2ZvbnQtc3RhdGUnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvckxpbmtXaW5kb3dPcHRpb25zVHlwZSB9IGZyb20gJy4uL3R5cGVzL2xpbmstd2luZG93LW9wdGlvbnMtdHlwZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB9IGZyb20gJy4uL3R5cGVzL3N0eWxlLXN0YXRlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZSB9IGZyb20gJy4uL3R5cGVzL3Rvb2xiYXItYWN0aW9uLXR5cGUnO1xuaW1wb3J0IHsgU2t5VXJsTW9kYWxDb250ZXh0IH0gZnJvbSAnLi4vdXJsLW1vZGFsL3RleHQtZWRpdG9yLXVybC1tb2RhbC1jb250ZXh0JztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JVcmxNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFVybFRhcmdldCB9IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtdGFyZ2V0JztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXRleHQtZWRpdG9yLXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHQtZWRpdG9yLXRvb2xiYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgU2t5Q2hlY2tib3hNb2R1bGUsXG4gICAgU2t5Q29sb3JwaWNrZXJNb2R1bGUsXG4gICAgU2t5RHJvcGRvd25Nb2R1bGUsXG4gICAgU2t5SWNvbk1vZHVsZSxcbiAgICBTa3lUaGVtZU1vZHVsZSxcbiAgICBTa3lUb29sYmFyTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yVG9vbGJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWRpdG9yRm9jdXNTdHJlYW0odmFsdWU6IFN1YmplY3Q8dm9pZD4pIHtcbiAgICB0aGlzLiNfZWRpdG9yRm9jdXNTdHJlYW0gPSB2YWx1ZTtcbiAgICB0aGlzLiNzdWJzY3JpYmVFZGl0b3JGb2N1cygpO1xuICB9XG5cbiAgcHVibGljIGdldCBlZGl0b3JGb2N1c1N0cmVhbSgpOiBTdWJqZWN0PHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jX2VkaXRvckZvY3VzU3RyZWFtO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZvbnRMaXN0OiBTa3lUZXh0RWRpdG9yRm9udFtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZvbnRTaXplTGlzdDogbnVtYmVyW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdG9vbGJhckFjdGlvbnM6IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZVtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxpbmtXaW5kb3dPcHRpb25zOiBTa3lUZXh0RWRpdG9yTGlua1dpbmRvd09wdGlvbnNUeXBlW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0eWxlU3RhdGUodmFsdWU6IFNreVRleHRFZGl0b3JTdHlsZVN0YXRlKSB7XG4gICAgdGhpcy4jX3N0eWxlU3RhdGUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUuZm9udCAhPT0gdGhpcy5zdHlsZVN0YXRlRm9udE5hbWUpIHtcbiAgICAgIGlmICh2YWx1ZS5mb250ID09PSAnXCJCbGFja2JhdWQgU2Fuc1wiLCBBcmlhbCwgc2Fucy1zZXJpZicpIHtcbiAgICAgICAgdGhpcy5zdHlsZVN0YXRlRm9udE5hbWUgPSB0aGlzLiNnZXRGb250TmFtZSgnQmxhY2tiYXVkIFNhbnMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3R5bGVTdGF0ZUZvbnROYW1lID0gdGhpcy4jZ2V0Rm9udE5hbWUodmFsdWUuZm9udCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzdHlsZVN0YXRlKCk6IFNreVRleHRFZGl0b3JTdHlsZVN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy4jX3N0eWxlU3RhdGU7XG4gIH1cblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgcHVibGljIGJhY2tDb2xvcnBpY2tlclN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreUNvbG9ycGlja2VyTWVzc2FnZT4oKTtcbiAgcHVibGljIGNvbG9ycGlja2VyU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5Q29sb3JwaWNrZXJNZXNzYWdlPigpO1xuICBwdWJsaWMgZm9udFBpY2tlclN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreURyb3Bkb3duTWVzc2FnZT4oKTtcbiAgcHVibGljIGZvbnRTaXplU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5RHJvcGRvd25NZXNzYWdlPigpO1xuICBwdWJsaWMgc3R5bGVTdGF0ZUZvbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI2VkaXRvckZvY3VzU3RyZWFtU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjX2VkaXRvckZvY3VzU3RyZWFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgI19zdHlsZVN0YXRlID0gU1RZTEVfU1RBVEVfREVGQVVMVFM7XG5cbiAgcmVhZG9ubHkgI2FkYXB0ZXJTZXJ2aWNlID0gaW5qZWN0KFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSk7XG4gIHJlYWRvbmx5ICNjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHJlYWRvbmx5ICNtb2RhbFNlcnZpY2UgPSBpbmplY3QoU2t5TW9kYWxTZXJ2aWNlKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jc3Vic2NyaWJlRWRpdG9yRm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBleGVjQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHZhbHVlID0gJycpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmV4ZWNDb21tYW5kKHtcbiAgICAgIGNvbW1hbmQ6IGNvbW1hbmQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0eWxlU3RhdGUgPSB7XG4gICAgICAuLi50aGlzLnN0eWxlU3RhdGUsXG4gICAgICAuLi50aGlzLiNhZGFwdGVyU2VydmljZS5nZXRTdHlsZVN0YXRlKCksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVGb250U3R5bGUoXG4gICAgY3VycmVudFN0YXRlOiBib29sZWFuLFxuICAgIG5ld1N0YXRlOiBib29sZWFuLFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKGN1cnJlbnRTdGF0ZSAhPT0gbmV3U3RhdGUpIHtcbiAgICAgIHRoaXMuZXhlY0NvbW1hbmQoY29tbWFuZCk7XG4gICAgfVxuXG4gICAgLy8gRm9yY2Ugc2t5LWNoZWNrYm94IHRvIHNob3cgY2hhbmdlcyBvbiB1c2VyJ3MgaW5pdGlhbCBjbGljay5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgbGluaygpOiB2b2lkIHtcbiAgICBjb25zdCBwcmlvclNlbGVjdGlvbiA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNhdmVTZWxlY3Rpb24oKTtcbiAgICBjb25zdCBjdXJyZW50TGluayA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldExpbmsoKTtcbiAgICBjb25zdCBpbnB1dE1vZGFsID0gdGhpcy4jbW9kYWxTZXJ2aWNlLm9wZW4oU2t5VGV4dEVkaXRvclVybE1vZGFsQ29tcG9uZW50LCBbXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFNreVVybE1vZGFsQ29udGV4dCxcbiAgICAgICAgdXNlRmFjdG9yeTogKCk6IFNreVVybE1vZGFsQ29udGV4dCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBTa3lVcmxNb2RhbENvbnRleHQoKTtcbiAgICAgICAgICBjb250ZXh0LnVybFJlc3VsdCA9IGN1cnJlbnRMaW5rO1xuICAgICAgICAgIGNvbnRleHQubGlua1dpbmRvd09wdGlvbnMgPSB0aGlzLmxpbmtXaW5kb3dPcHRpb25zO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIGlucHV0TW9kYWwuY2xvc2VkLnN1YnNjcmliZSgocmVzdWx0OiBTa3lNb2RhbENsb3NlQXJncykgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdzYXZlJyAmJiBwcmlvclNlbGVjdGlvbikge1xuICAgICAgICBpZiAoY3VycmVudExpbmspIHtcbiAgICAgICAgICBjb25zdCBhbmNob3IgPSB0aGlzLiNhZGFwdGVyU2VydmljZS5nZXRTZWxlY3RlZEFuY2hvclRhZygpO1xuXG4gICAgICAgICAgaWYgKGFuY2hvcikge1xuICAgICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2VsZWN0RWxlbWVudChhbmNob3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhlY0NvbW1hbmQoJ3VubGluaycpO1xuICAgICAgICBpZiAocmVzdWx0LmRhdGEudGFyZ2V0ID09PSBVcmxUYXJnZXQuTm9uZSkge1xuICAgICAgICAgIC8vIEN1cnJlbnQgd2luZG93XG4gICAgICAgICAgdGhpcy5leGVjQ29tbWFuZCgnY3JlYXRlTGluaycsIHJlc3VsdC5kYXRhLnVybCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTmV3IFdpbmRvd1xuICAgICAgICAgIGNvbnN0IHNUZXh0ID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvbigpO1xuICAgICAgICAgIHRoaXMuZXhlY0NvbW1hbmQoXG4gICAgICAgICAgICAnaW5zZXJ0SFRNTCcsXG4gICAgICAgICAgICAnPGEgaHJlZj1cIicgK1xuICAgICAgICAgICAgICByZXN1bHQuZGF0YS51cmwgK1xuICAgICAgICAgICAgICAnXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIHRhcmdldD1cIl9ibGFua1wiPicgK1xuICAgICAgICAgICAgICBzVGV4dCArXG4gICAgICAgICAgICAgICc8L2E+JyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdW5saW5rKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb25SYW5nZSA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlXG4gICAgICAuZ2V0Q3VycmVudFNlbGVjdGlvbigpXG4gICAgICA/LmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKGN1cnJlbnRTZWxlY3Rpb25SYW5nZSAmJiBjdXJyZW50U2VsZWN0aW9uUmFuZ2UudG9TdHJpbmcoKS5sZW5ndGggPD0gMCkge1xuICAgICAgY29uc3QgYW5jaG9yVGFnID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0U2VsZWN0ZWRBbmNob3JUYWcoKTtcbiAgICAgIGlmIChhbmNob3JUYWcpIHtcbiAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2VsZWN0RWxlbWVudChhbmNob3JUYWcpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmV4ZWNDb21tYW5kKCd1bmxpbmsnKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VGb250U2l6ZShzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldEZvbnRTaXplKHNpemUpO1xuICAgIHRoaXMuc3R5bGVTdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3R5bGVTdGF0ZSxcbiAgICAgIC4uLnRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldFN0eWxlU3RhdGUoKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIG9uQ29sb3JwaWNrZXJDb2xvckNoYW5nZWQoXG4gICAgY29sb3I6IFNreUNvbG9ycGlja2VyT3V0cHV0LFxuICAgIGlzQmFja2dyb3VuZCA9IGZhbHNlLFxuICApOiB2b2lkIHtcbiAgICBpZiAoaXNCYWNrZ3JvdW5kKSB7XG4gICAgICB0aGlzLmV4ZWNDb21tYW5kKCdiYWNrQ29sb3InLCBjb2xvci5yZ2JhVGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhlY0NvbW1hbmQoJ2ZvcmVDb2xvcicsIGNvbG9yLmhleCk7XG4gICAgfVxuICB9XG5cbiAgI3N1YnNjcmliZUVkaXRvckZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuI2VkaXRvckZvY3VzU3RyZWFtU3ViPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy4jZWRpdG9yRm9jdXNTdHJlYW1TdWIgPSB0aGlzLmVkaXRvckZvY3VzU3RyZWFtXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zdHlsZVN0YXRlID0ge1xuICAgICAgICAgIC4uLnRoaXMuc3R5bGVTdGF0ZSxcbiAgICAgICAgICAuLi50aGlzLiNhZGFwdGVyU2VydmljZS5nZXRTdHlsZVN0YXRlKCksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd25zKCk7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgI2Nsb3NlRHJvcGRvd25zKCk6IHZvaWQge1xuICAgIGNvbnN0IG1lc3NhZ2U6IFNreUNvbG9ycGlja2VyTWVzc2FnZSA9IHtcbiAgICAgIHR5cGU6IFNreUNvbG9ycGlja2VyTWVzc2FnZVR5cGUuQ2xvc2UsXG4gICAgfTtcbiAgICB0aGlzLmNvbG9ycGlja2VyU3RyZWFtLm5leHQobWVzc2FnZSk7XG4gICAgdGhpcy5iYWNrQ29sb3JwaWNrZXJTdHJlYW0ubmV4dChtZXNzYWdlKTtcbiAgICB0aGlzLmZvbnRQaWNrZXJTdHJlYW0ubmV4dCh7IHR5cGU6IFNreURyb3Bkb3duTWVzc2FnZVR5cGUuQ2xvc2UgfSk7XG4gICAgdGhpcy5mb250U2l6ZVN0cmVhbS5uZXh0KHsgdHlwZTogU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSB9KTtcbiAgfVxuXG4gICNnZXRGb250TmFtZShmb250TmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IHNreVRleHRFZGl0b3JGb250IG9mIHRoaXMuZm9udExpc3QpIHtcbiAgICAgIGlmIChmb250TmFtZS5yZXBsYWNlKC9bJ1wiXSsvZywgJycpID09PSBza3lUZXh0RWRpdG9yRm9udC5uYW1lKSB7XG4gICAgICAgIHJldHVybiBza3lUZXh0RWRpdG9yRm9udC5uYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiQGZvciAoYWN0aW9uIG9mIHRvb2xiYXJBY3Rpb25zOyB0cmFjayBhY3Rpb24pIHtcbiAgPHNreS10b29sYmFyLWl0ZW1cbiAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci10b29sYmFyLWFjdGlvblwiXG4gICAgW25nQ2xhc3NdPVwiJ3NreS10ZXh0LWVkaXRvci10b29sYmFyLWFjdGlvbi0nICsgYWN0aW9uXCJcbiAgPlxuICAgIEBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgQGNhc2UgKCdmb250LWZhbWlseScpIHtcbiAgICAgICAgPHNreS1kcm9wZG93blxuICAgICAgICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWZvbnQtcGlja2VyXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIFtsYWJlbF09XCInRm9udDogJyArIHN0eWxlU3RhdGVGb250TmFtZVwiXG4gICAgICAgICAgW21lc3NhZ2VTdHJlYW1dPVwiZm9udFBpY2tlclN0cmVhbVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c2t5LWRyb3Bkb3duLWJ1dHRvblxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAnZm9udC1mYW1pbHknOiBzdHlsZVN0YXRlLmZvbnRcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHN0eWxlU3RhdGVGb250TmFtZSB9fVxuICAgICAgICAgIDwvc2t5LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgICA8c2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgICBAZm9yIChmb250TW9kZWwgb2YgZm9udExpc3Q7IHRyYWNrIGZvbnRNb2RlbC5uYW1lKSB7XG4gICAgICAgICAgICAgIDxza3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtZmFtaWx5JzogZm9udE1vZGVsLnZhbHVlXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnZm9udG5hbWUnLCBmb250TW9kZWwubmFtZSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGZvbnRNb2RlbC5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvc2t5LWRyb3Bkb3duLWl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9za3ktZHJvcGRvd24tbWVudT5cbiAgICAgICAgPC9za3ktZHJvcGRvd24+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ2ZvbnQtc2l6ZScpIHtcbiAgICAgICAgPHNreS1kcm9wZG93blxuICAgICAgICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWZvbnQtc2l6ZS1waWNrZXJcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW2xhYmVsXT1cIidGb250IHNpemU6ICcgKyBzdHlsZVN0YXRlLmZvbnRTaXplICsgJ3B4J1wiXG4gICAgICAgICAgW21lc3NhZ2VTdHJlYW1dPVwiZm9udFNpemVTdHJlYW1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNreS1kcm9wZG93bi1idXR0b25cbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgJ2ZvbnQtZmFtaWx5Jzogc3R5bGVTdGF0ZS5mb250U2l6ZVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgc3R5bGVTdGF0ZS5mb250U2l6ZSArICdweCcgfX1cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAgPHNreS1kcm9wZG93bi1tZW51PlxuICAgICAgICAgICAgQGZvciAoc2l6ZSBvZiBmb250U2l6ZUxpc3Q7IHRyYWNrIHNpemUpIHtcbiAgICAgICAgICAgICAgPHNreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjaGFuZ2VGb250U2l6ZShzaXplKVwiPlxuICAgICAgICAgICAgICAgICAge3sgc2l6ZSArICdweCcgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9za3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgICAgICA8L3NreS1kcm9wZG93bj5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnZm9udC1zdHlsZScpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNreS1zd2l0Y2gtaWNvbi1ncm91cCBza3ktdGV4dC1lZGl0b3ItZm9udC1zdHlsZS1waWNrZXJcIj5cbiAgICAgICAgICA8c2t5LWNoZWNrYm94XG4gICAgICAgICAgICBpY29uTmFtZT1cInRleHQtYm9sZFwiXG4gICAgICAgICAgICBsYWJlbD1cIkJvbGRcIlxuICAgICAgICAgICAgdGl0bGU9XCJCb2xkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJzdHlsZVN0YXRlLmJvbGRTdGF0ZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgdG9nZ2xlRm9udFN0eWxlKHN0eWxlU3RhdGUuYm9sZFN0YXRlLCAkZXZlbnQsICdib2xkJylcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c2t5LWNoZWNrYm94XG4gICAgICAgICAgICBpY29uTmFtZT1cInRleHQtaXRhbGljXCJcbiAgICAgICAgICAgIGxhYmVsPVwiSXRhbGljaXplZFwiXG4gICAgICAgICAgICB0aXRsZT1cIkl0YWxpY2l6ZWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0eWxlU3RhdGUuaXRhbGljU3RhdGVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgIHRvZ2dsZUZvbnRTdHlsZShzdHlsZVN0YXRlLml0YWxpY1N0YXRlLCAkZXZlbnQsICdpdGFsaWMnKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxza3ktY2hlY2tib3hcbiAgICAgICAgICAgIGljb25OYW1lPVwidGV4dC11bmRlcmxpbmVcIlxuICAgICAgICAgICAgbGFiZWw9XCJVbmRlcmxpbmVcIlxuICAgICAgICAgICAgdGl0bGU9XCJVbmRlcmxpbmVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0eWxlU3RhdGUudW5kZXJsaW5lU3RhdGVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgIHRvZ2dsZUZvbnRTdHlsZShzdHlsZVN0YXRlLnVuZGVybGluZVN0YXRlLCAkZXZlbnQsICd1bmRlcmxpbmUnKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnY29sb3InKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItY29sb3JwaWNrZXItZ3JvdXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWNvbG9ycGlja2VyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHNreS1jb2xvcnBpY2tlclxuICAgICAgICAgICAgICAjY29sb3JQaWNrZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItZm9udC1jb2xvci1waWNrZXJcIlxuICAgICAgICAgICAgICBsYWJlbD1cIkZvbnQgY29sb3JcIlxuICAgICAgICAgICAgICBwaWNrZXJCdXR0b25JY29uPVwiY29sb3ItbGluZVwiXG4gICAgICAgICAgICAgIFttZXNzYWdlU3RyZWFtXT1cImNvbG9ycGlja2VyU3RyZWFtXCJcbiAgICAgICAgICAgICAgW3Nob3dSZXNldEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIChzZWxlY3RlZENvbG9yQ2hhbmdlZCk9XCJvbkNvbG9ycGlja2VyQ29sb3JDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBvdXRwdXRGb3JtYXQ9XCJoZXhcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBbYWxsb3dUcmFuc3BhcmVuY3ldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic3R5bGVTdGF0ZS5mb250Q29sb3JcIlxuICAgICAgICAgICAgICAgIFtza3lDb2xvcnBpY2tlcklucHV0XT1cImNvbG9yUGlja2VyXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc2t5LWNvbG9ycGlja2VyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItY29sb3JwaWNrZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c2t5LWNvbG9ycGlja2VyXG4gICAgICAgICAgICAgICNiYWNrQ29sb3JQaWNrZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItYmFja2dyb3VuZC1jb2xvci1waWNrZXJcIlxuICAgICAgICAgICAgICBsYWJlbD1cIkJhY2tncm91bmQgY29sb3JcIlxuICAgICAgICAgICAgICBwaWNrZXJCdXR0b25JY29uPVwidGV4dC1jb2xvclwiXG4gICAgICAgICAgICAgIFttZXNzYWdlU3RyZWFtXT1cImJhY2tDb2xvcnBpY2tlclN0cmVhbVwiXG4gICAgICAgICAgICAgIFtzaG93UmVzZXRCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWRDb2xvckNoYW5nZWQpPVwib25Db2xvcnBpY2tlckNvbG9yQ2hhbmdlZCgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgb3V0cHV0Rm9ybWF0PVwicmdiYVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIFthbGxvd1RyYW5zcGFyZW5jeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0eWxlU3RhdGUuYmFja0NvbG9yXCJcbiAgICAgICAgICAgICAgICBbc2t5Q29sb3JwaWNrZXJJbnB1dF09XCJiYWNrQ29sb3JQaWNrZXJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9za3ktY29sb3JwaWNrZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdsaXN0Jykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LXN3aXRjaC1pY29uLWdyb3VwXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkJ1bGxldGVkIGxpc3RcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJCdWxsZXRlZCBsaXN0XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJ0ZXh0LWJ1bGxldC1saXN0XCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiTnVtYmVyZWQgbGlzdFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIk51bWJlcmVkIGxpc3RcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdpbnNlcnRPcmRlcmVkTGlzdCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJ0ZXh0LW51bWJlci1saXN0LWx0clwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdhbGlnbm1lbnQnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktc3dpdGNoLWljb24tZ3JvdXBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWxpZ24gbGVmdFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIkFsaWduIGxlZnRcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdqdXN0aWZ5TGVmdCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJ0ZXh0LWFsaWduLWxlZnRcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbGlnbiBjZW50ZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJBbGlnbiBjZW50ZXJcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdqdXN0aWZ5Q2VudGVyJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktaWNvbiBpY29uTmFtZT1cInRleHQtYWxpZ24tY2VudGVyXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWxpZ24gcmlnaHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJBbGlnbiByaWdodFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ2p1c3RpZnlSaWdodCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJ0ZXh0LWFsaWduLXJpZ2h0XCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ2luZGVudGF0aW9uJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LXN3aXRjaC1pY29uLWdyb3VwXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk91dGRlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJPdXRkZW50XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnb3V0ZGVudCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJ0ZXh0LWluZGVudC1kZWNyZWFzZVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkluZGVudFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIkluZGVudFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ2luZGVudCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJ0ZXh0LWluZGVudC1pbmNyZWFzZVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCd1bmRvLXJlZG8nKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktc3dpdGNoLWljb24tZ3JvdXBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiVW5kb1wiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIlVuZG9cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCd1bmRvJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktaWNvbiBpY29uTmFtZT1cImFycm93LXVuZG9cIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZWRvXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWRlZmF1bHQgc2t5LWJ0bi1pY29uXCJcbiAgICAgICAgICAgIHRpdGxlPVwiUmVkb1wiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ3JlZG8nKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNreS1pY29uIGljb25OYW1lPVwiYXJyb3ctcmVkb1wiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdsaW5rJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LXN3aXRjaC1pY29uLWdyb3VwXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkxpbmtcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJMaW5rXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2ljb24tYnRuLWFjdGl2ZSc6IHN0eWxlU3RhdGUubGlua1N0YXRlXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJsaW5rKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktaWNvbiBpY29uTmFtZT1cImxpbmtcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJVbmxpbmtcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJVbmxpbmtcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXN0eWxlU3RhdGUubGlua1N0YXRlIHx8IGRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ1bmxpbmsoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNreS1pY29uIGljb25OYW1lPVwibGluay1kaXNtaXNzXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICA8L3NreS10b29sYmFyLWl0ZW0+XG59XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, NgZone, TemplateRef, ViewChild, ViewEncapsulation, booleanAttribute, inject, } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { SkyCoreAdapterService, SkyIdModule, SkyIdService } from '@skyux/core';\nimport { SKY_FORM_ERRORS_ENABLED, SkyFormErrorsModule, SkyInputBoxHostService, SkyRequiredStateDirective, } from '@skyux/forms';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyThemeModule } from '@skyux/theme';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SkyTextEditorResourcesModule } from '../shared/sky-text-editor-resources.module';\nimport { FONT_LIST_DEFAULTS } from './defaults/font-list-defaults';\nimport { FONT_SIZE_LIST_DEFAULTS } from './defaults/font-size-list-defaults';\nimport { LINK_WINDOW_OPTIONS_DEFAULTS } from './defaults/link-window-options-defaults';\nimport { MENU_DEFAULTS } from './defaults/menu-defaults';\nimport { STYLE_STATE_DEFAULTS } from './defaults/style-state-defaults';\nimport { TOOLBAR_ACTION_DEFAULTS } from './defaults/toolbar-action-defaults';\nimport { SkyTextEditorMenubarComponent } from './menubar/text-editor-menubar.component';\nimport { SkyTextEditorAdapterService } from './services/text-editor-adapter.service';\nimport { SkyTextEditorSelectionService } from './services/text-editor-selection.service';\nimport { SkyTextEditorService } from './services/text-editor.service';\nimport { SkyTextSanitizationService } from './services/text-sanitization.service';\nimport { SkyTextEditorToolbarComponent } from './toolbar/text-editor-toolbar.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@skyux/forms\";\nimport * as i2 from \"@angular/common\";\nimport * as i3 from \"@skyux/help-inline\";\nimport * as i4 from \"@skyux/core\";\nimport * as i5 from \"@skyux/theme\";\nimport * as i6 from \"@skyux/layout\";\nimport * as i7 from \"@skyux/i18n\";\n/**\n * The text editor component lets users format and manipulate text.\n */\nexport class SkyTextEditorComponent {\n /**\n * 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.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n set disabled(value) {\n if (value !== this.disabled) {\n this.#_disabled = value;\n this.#applyDisabledState();\n }\n }\n get disabled() {\n return this.#_disabled;\n }\n /**\n * The fonts to include in the font picker.\n * @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'}]\n */\n set fontList(value) {\n this.#_fontList = value || FONT_LIST_DEFAULTS;\n }\n get fontList() {\n return this.#_fontList;\n }\n /**\n * The font sizes to include in the font size picker.\n * @default [6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 36, 48]\n */\n set fontSizeList(value) {\n this.#_fontSizeList = value || FONT_SIZE_LIST_DEFAULTS;\n }\n get fontSizeList() {\n return this.#_fontSizeList;\n }\n /**\n * The unique ID attribute for the text editor.\n * By default, the component generates a random ID.\n */\n set id(value) {\n this.#id = value || this.#defaultId;\n }\n get id() {\n return this.#id;\n }\n /**\n * The initial styles for all content, including background color, font size, and link state.\n */\n set initialStyleState(state) {\n // Do not update the state after initialization has taken place\n /* istanbul ignore else */\n if (!this.#initialized) {\n this.#_initialStyleState = {\n ...STYLE_STATE_DEFAULTS,\n ...state,\n };\n }\n }\n get initialStyleState() {\n return this.#_initialStyleState;\n }\n /**\n * The text to display as the text editor's label.\n */\n set labelText(value) {\n this.#_labelText = value;\n this.#updateA11yAttributes();\n }\n get labelText() {\n return this.#_labelText;\n }\n /**\n * The menus to include in the menu bar.\n * @default [ 'edit', 'format' ]\n */\n set menus(value) {\n this.#_menus = value || MENU_DEFAULTS;\n }\n get menus() {\n return this.#_menus;\n }\n /**\n * The merge fields to include in the merge field menu.\n */\n set mergeFields(value) {\n this.#_mergeFields = value || [];\n }\n get mergeFields() {\n return this.#_mergeFields;\n }\n /**\n * Placeholder text to display when the text entry area is empty.\n */\n set placeholder(value) {\n /* istanbul ignore else */\n if (value !== this.#_placeholder) {\n this.#_placeholder = value || '';\n if (this.#initialized) {\n this.#adapterService.setPlaceholder(value);\n }\n }\n }\n get placeholder() {\n return this.#_placeholder;\n }\n /**\n * The actions to include in the toolbar in the specified order.\n * @default [ 'font-family', 'font-size', 'font-style', 'color', 'list', 'link ]\n */\n set toolbarActions(value) {\n this.#_toolbarActions = value || TOOLBAR_ACTION_DEFAULTS;\n }\n get toolbarActions() {\n return this.#_toolbarActions;\n }\n /**\n * The target window options for adding a hyperlink.\n * @default [ 'new', 'existing' ]\n */\n set linkWindowOptions(value) {\n this.#_linkWindowOptions = value ?? LINK_WINDOW_OPTIONS_DEFAULTS;\n }\n get linkWindowOptions() {\n return this.#_linkWindowOptions;\n }\n /**\n * The internal value of the control.\n */\n set value(value) {\n // Normalize value and set any empty state to an empty string.\n let normalizedValue;\n const valueTrimmed = value?.trim();\n if (!value ||\n valueTrimmed === '<p></p>' ||\n valueTrimmed === '<br>' ||\n valueTrimmed === '<p><br></p>') {\n normalizedValue = '';\n }\n else {\n normalizedValue = value;\n }\n normalizedValue = this.#sanitizationService\n .sanitize(normalizedValue)\n .trim();\n if (this.#_value !== normalizedValue) {\n this.#_value = normalizedValue;\n // Update angular form control if model has been normalized.\n /* istanbul ignore else */\n if (this.ngControl?.control &&\n normalizedValue !== this.ngControl.control.value) {\n this.ngControl.control.setValue(normalizedValue, {\n emitModelToViewChange: false,\n });\n }\n // #initIframe() will do another check later to see if the editor should\n // receive focus if not initialized before this is called.\n this.#checkAutofocusAndFocus();\n }\n }\n get value() {\n return this.#_value;\n }\n #defaultId;\n #id;\n #focusInitialized;\n #initialized;\n #ngUnsubscribe;\n #_fontList;\n #_fontSizeList;\n #_labelText;\n #_mergeFields;\n #_menus;\n #_toolbarActions;\n #_linkWindowOptions;\n #_disabled;\n #_initialStyleState;\n #_placeholder;\n #_value;\n #adapterService;\n #changeDetector;\n #coreAdapterService;\n #editorService;\n #idSvc;\n #sanitizationService;\n #zone;\n constructor() {\n /**\n * Whether to put focus on the editor after it renders.\n */\n this.autofocus = false;\n /**\n * Whether the text editor is stacked on another form component. When specified,\n * the appropriate vertical spacing is automatically added to the text editor.\n */\n this.stacked = false;\n this.editorFocusStream = new Subject();\n this.formControlClass = !!inject(SkyInputBoxHostService, {\n optional: true,\n });\n this.editorFocused = false;\n this.#focusInitialized = false;\n this.#initialized = false;\n this.#ngUnsubscribe = new Subject();\n this.#_fontList = FONT_LIST_DEFAULTS;\n this.#_fontSizeList = FONT_SIZE_LIST_DEFAULTS;\n this.#_mergeFields = [];\n this.#_menus = MENU_DEFAULTS;\n this.#_toolbarActions = TOOLBAR_ACTION_DEFAULTS;\n this.#_linkWindowOptions = LINK_WINDOW_OPTIONS_DEFAULTS;\n this.#_disabled = false;\n this.#_initialStyleState = Object.assign({}, STYLE_STATE_DEFAULTS);\n this.#_placeholder = '';\n this.#_value = '<p></p>';\n this.#adapterService = inject(SkyTextEditorAdapterService);\n this.#changeDetector = inject(ChangeDetectorRef);\n this.#coreAdapterService = inject(SkyCoreAdapterService);\n this.#editorService = inject(SkyTextEditorService);\n this.#idSvc = inject(SkyIdService);\n this.#sanitizationService = inject(SkyTextSanitizationService);\n this.#zone = inject(NgZone);\n this.errorId = this.#idSvc.generateId();\n this.ngControl = inject(NgControl);\n this.requiredState = inject(SkyRequiredStateDirective);\n /* istanbul ignore next */\n this.#_onTouched = () => { };\n /* istanbul ignore next */\n this.#_onChange = () => { };\n this.#id = this.#defaultId = this.#idSvc.generateId();\n this.ngControl.valueAccessor = this;\n }\n ngAfterViewInit() {\n this.#initIframe();\n }\n ngOnDestroy() {\n this.#adapterService.removeObservers(this.#editorService.editor);\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n onIframeLoad() {\n // Reinitialize the editor if it already exists to cover situations where the text editor might have been moved in the DOM.\n if (this.#editorService.isInitialized) {\n this.#initIframe();\n }\n }\n /**\n * Implemented as part of ControlValueAccessor.\n */\n writeValue(value) {\n this.value = value;\n // Update HTML if necessary.\n if (this.#initialized) {\n const editorValue = this.#adapterService.getEditorInnerHtml();\n if (editorValue !== this.#_value) {\n this.#adapterService.setEditorInnerHtml(this.#_value);\n }\n }\n }\n /**\n * Implemented as part of ControlValueAccessor.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn) {\n this.#_onChange = fn;\n }\n /**\n * Implemented as part of ControlValueAccessor.\n */\n registerOnTouched(fn) {\n this.#_onTouched = fn;\n }\n /**\n * Implemented as part of ControlValueAccessor.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n #checkAutofocusAndFocus() {\n // Don't set focus on the editor if the iframe isn't initialized.\n // Autofocus isn't testable in Firefox and IE.\n /* istanbul ignore next */\n if (this.autofocus && this.#initialized && !this.#focusInitialized) {\n this.#adapterService.focusEditor();\n this.#focusInitialized = true;\n }\n }\n #updateStyle() {\n this.#_initialStyleState = {\n ...this.#_initialStyleState,\n ...this.#adapterService.getStyleState(),\n };\n }\n #initIframe() {\n this.#adapterService.initEditor(this.id, this.iframeRef.nativeElement, this.initialStyleState, this.placeholder);\n this.ngControl.statusChanges\n ?.pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#updateA11yAttributes();\n // Trigger change detection when the field status is modified programmatically.\n this.#changeDetector.markForCheck();\n });\n this.#editorService\n .inputListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n // Angular doesn't run change detection for changes originating inside an iframe,\n // so we have to call the onChange() event inside NgZone to force change propagation to consuming components.\n this.#zone.run(() => {\n this.#viewToModelUpdate();\n });\n });\n this.#editorService\n .selectionChangeListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#updateStyle();\n this.editorFocusStream.next();\n });\n this.#editorService\n .clickListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.editorFocusStream.next();\n });\n this.#editorService\n .blurListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n // Angular doesn't run change detection for changes originating inside an iframe,\n // so we have to run markForCheck() inside the NgZone to force change propagation to consuming components.\n this.#zone.run(() => {\n this.#_onTouched();\n this.editorFocused = false;\n this.#changeDetector.markForCheck();\n });\n });\n this.#editorService\n .commandChangeListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#updateStyle();\n this.#viewToModelUpdate();\n });\n this.#editorService\n .focusListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n // Angular doesn't run change detection for changes originating inside an iframe,\n // so we have to run markForCheck() inside the NgZone to force change propagation to consuming components.\n this.#zone.run(() => {\n this.editorFocused = true;\n this.#changeDetector.markForCheck();\n });\n });\n this.#adapterService.setEditorInnerHtml(this.#_value);\n this.#updateA11yAttributes();\n /* istanbul ignore next */\n if (this.autofocus) {\n this.#adapterService.focusEditor();\n }\n this.#applyDisabledState();\n this.#initialized = true;\n this.#focusInitialized = false;\n this.#checkAutofocusAndFocus();\n }\n #updateA11yAttributes() {\n if (this.#editorService.isInitialized) {\n this.#adapterService.setLabelAttribute(this.labelText);\n this.#adapterService.setErrorAttributes(this.labelText ? this.errorId : '', this.ngControl.errors);\n this.#adapterService.setRequiredAttribute(this.requiredState.isRequired());\n }\n }\n #viewToModelUpdate(emitChange = true) {\n this.value = this.#adapterService.getEditorInnerHtml();\n /* istanbul ignore else */\n if (emitChange) {\n this.#_onChange(this.#_value);\n }\n }\n #applyDisabledState() {\n // Update focusableChildren inside the iframe.\n let focusableChildren;\n /* istanbul ignore else */\n if (this.iframeRef?.nativeElement.contentDocument?.body) {\n focusableChildren = this.#coreAdapterService.getFocusableChildren(this.iframeRef.nativeElement.contentDocument.body, {\n ignoreVisibility: true,\n ignoreTabIndex: true,\n });\n if (this.#_disabled) {\n this.#adapterService.disableEditor(focusableChildren, this.iframeRef.nativeElement);\n }\n else {\n this.#adapterService.enableEditor(focusableChildren, this.iframeRef.nativeElement);\n }\n this.#changeDetector.markForCheck();\n }\n }\n /* istanbul ignore next */\n #_onTouched;\n /* istanbul ignore next */\n #_onChange;\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.5\", type: SkyTextEditorComponent, isStandalone: true, selector: \"sky-text-editor\", inputs: { autofocus: \"autofocus\", disabled: [\"disabled\", \"disabled\", booleanAttribute], fontList: \"fontList\", fontSizeList: \"fontSizeList\", helpPopoverContent: \"helpPopoverContent\", helpPopoverTitle: \"helpPopoverTitle\", hintText: \"hintText\", id: \"id\", initialStyleState: \"initialStyleState\", labelText: \"labelText\", menus: \"menus\", mergeFields: \"mergeFields\", placeholder: \"placeholder\", stacked: [\"stacked\", \"stacked\", booleanAttribute], toolbarActions: \"toolbarActions\", linkWindowOptions: \"linkWindowOptions\", helpKey: \"helpKey\" }, host: { properties: { \"class.sky-form-field-stacked\": \"this.stacked\", \"class.sky-form-control\": \"this.formControlClass\" } }, providers: [\n SkyTextEditorService,\n SkyTextEditorSelectionService,\n SkyTextEditorAdapterService,\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ], viewQueries: [{ propertyName: \"iframeRef\", first: true, predicate: [\"iframe\"], descendants: true }, { propertyName: \"inputTemplateRef\", first: true, predicate: [\"inputTemplateRef\"], descendants: true, read: TemplateRef, static: true }], hostDirectives: [{ directive: i1.SkyRequiredStateDirective, inputs: [\"required\", \"required\"] }], ngImport: i0, template: \"<div\\n class=\\\"sky-text-editor\\\"\\n [ngClass]=\\\"{\\n 'sky-text-editor-disabled': disabled,\\n 'sky-text-editor-wrapper-focused': editorFocused,\\n 'sky-text-editor-invalid':\\n ngControl.errors && (ngControl.touched || ngControl.dirty)\\n }\\\"\\n>\\n <div class=\\\"sky-text-editor-label-wrapper\\\">\\n @if (labelText) {\\n <label\\n class=\\\"sky-control-label\\\"\\n [ngClass]=\\\"{\\n 'sky-control-label-required': requiredState.isRequired()\\n }\\\"\\n >{{ labelText }}</label\\n >\\n @if (helpPopoverContent || helpKey) {\\n <span class=\\\"sky-control-help-container\\\">\\n <sky-help-inline\\n [helpKey]=\\\"helpKey\\\"\\n [labelText]=\\\"labelText\\\"\\n [popoverContent]=\\\"helpPopoverContent\\\"\\n [popoverTitle]=\\\"helpPopoverTitle\\\"\\n />\\n </span>\\n }\\n }\\n </div>\\n @if (\\n (menus && menus.length) > 0 || (toolbarActions && toolbarActions.length > 0)\\n ) {\\n <sky-toolbar class=\\\"sky-text-editor-toolbar\\\">\\n @if (menus && menus.length > 0) {\\n <sky-toolbar-section\\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-toolbar-section>\\n }\\n @if (toolbarActions && toolbarActions.length > 0) {\\n <sky-toolbar-section\\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 [linkWindowOptions]=\\\"linkWindowOptions\\\"\\n [toolbarActions]=\\\"toolbarActions\\\"\\n [styleState]=\\\"initialStyleState\\\"\\n />\\n </sky-toolbar-section>\\n }\\n </sky-toolbar>\\n }\\n <iframe\\n #iframe\\n class=\\\"sky-text-editor-wrapper\\\"\\n src=\\\"about:blank\\\"\\n allow=\\\"clipboard-read *; clipboard-write *\\\"\\n [attr.title]=\\\"\\n labelText || ('skyux_text_editor_iframe_title_default' | skyLibResources)\\n \\\"\\n [attr.aria-describedby]=\\\"hintText ? hintTextEl.id : undefined\\\"\\n [ngClass]=\\\"{\\n 'sky-text-editor-wrapper-disabled': disabled\\n }\\\"\\n (load)=\\\"onIframeLoad()\\\"\\n >\\n </iframe>\\n</div>\\n<div\\n #hintTextEl=\\\"skyId\\\"\\n skyId\\n class=\\\"sky-text-editor-hint-text\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-font-deemphasized': 'default',\\n 'sky-font-hint-text-s': 'modern'\\n }\\\"\\n>\\n {{ hintText }}\\n</div>\\n<sky-form-errors\\n class=\\\"sky-text-editor-errors\\\"\\n [id]=\\\"errorId\\\"\\n [errors]=\\\"ngControl.errors\\\"\\n [labelText]=\\\"labelText\\\"\\n [touched]=\\\"ngControl.touched\\\"\\n [dirty]=\\\"ngControl.dirty\\\"\\n>\\n <ng-content select=\\\"sky-form-error\\\" />\\n</sky-form-errors>\\n\", styles: [\".sky-text-editor:not(.sky-theme-modern *){--sky-override-text-editor-background-color: white;--sky-override-text-editor-toolbar-background-color: white;--sky-override-text-editor-label-background-color: transparent;--sky-override-text-editor-border-error: 1px solid var(--sky-highlight-color-danger);--sky-override-text-editor-border-focused: 1px solid var(--sky-highlight-color-info);--sky-override-text-editor-border-radius: 0;--sky-override-text-editor-border: 1px solid #cdcfd2;--sky-override-text-editor-box-shadow-error: 0 0 8px rgba(239, 64, 68, .6);--sky-override-text-editor-box-shadow-focused: 0 0 8px rgba(0, 180, 241, .6);--sky-override-text-editor-box-shadow: none;--sky-override-text-editor-disabled-cursor: default;--sky-override-text-editor-label-color: var(--sky-text-color-default);--sky-override-text-editor-label-color-focused: var(--sky-text-color-default);--sky-override-text-editor-label-color-invalid: var(--sky-text-color-default);--sky-override-text-editor-label-display: flex;--sky-override-text-editor-label-font-size: 15px;--sky-override-text-editor-label-font-weight: 400;--sky-override-text-editor-label-line-height: normal;--sky-override-text-editor-label-margin-bottom: 5px;--sky-override-text-editor-label-padding: 0;--sky-override-text-editor-toolbar-border: 1px solid #cdcfd2;--sky-override-text-editor-toolbar-item-spacing: 0 20px 10px 0;--sky-override-text-editor-toolbar-section-padding: 10px 10px 0 10px;--sky-override-text-editor-top-toolbar-bottom-padding: 0;--sky-override-text-editor-wrapper-background-color-disabled: var( --sky-background-color-disabled );--sky-override-text-editor-wrapper-padding: 1rem}.sky-text-editor-hint-text:not(.sky-theme-modern *){--sky-override-text-editor-hint-text-space: 5px}sky-text-editor.sky-form-field-stacked{display:block}.sky-text-editor{border-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-base) var(--sky-color-border-input-base));background-color:var(--sky-color-background-input-base)}.sky-text-editor.sky-text-editor-disabled{background-color:var(--sky-color-background-input-disabled);box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-disabled) var(--sky-color-border-input-disabled));cursor:var(--sky-override-text-editor-disabled-cursor, not-allowed)}.sky-text-editor .sky-text-editor-label-wrapper:not(:empty){background-color:var(--sky-override-text-editor-label-background-color);display:var(--sky-override-text-editor-label-display, inline-block);padding:var(--sky-override-text-editor-label-padding, var(--sky-comp-input-label-space-inset-top) var(--sky-comp-input-value-space-inset-right) 0 var(--sky-comp-input-value-space-inset-left));width:100%;color:var(--sky-override-text-editor-label-color, var(--sky-color-text-default))}.sky-text-editor .sky-text-editor-label-wrapper:not(:empty) label{font-size:var(--sky-override-text-editor-label-font-size, var(--sky-font-size-input-label));font-style:var(--sky-font-style-input-label);font-weight:var(--sky-override-text-editor-label-font-weight, var(--sky-font-style-input-label));letter-spacing:var(--sky-font-letter_spacing-input-label);line-height:var(--sky-override-text-editor-label-line-height, var(--sky-font-line_height-input-label));margin-bottom:var(--sky-override-text-editor-label-margin-bottom, 0)}.sky-text-editor .sky-text-editor-wrapper{display:flex;flex-wrap:wrap;background-color:var(--sky-override-text-editor-background-color);width:100%;height:300px;padding:var(--sky-override-text-editor-wrapper-padding, var(--sky-comp-text_editor-space-inset-top) var(--sky-comp-text_editor-space-inset-right) var(--sky-comp-text_editor-space-inset-bottom) var(--sky-comp-text_editor-space-inset-left));font-size:1.2rem;border-bottom-left-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));border-bottom-right-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));border-top:none;border-right:var(--sky-override-text-editor-border, none);border-bottom:var(--sky-override-text-editor-border, none);border-left:var(--sky-override-text-editor-border, none);box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-base) var(--sky-color-border-input-base));overflow-y:auto;outline:none}.sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:var(--sky-override-text-editor-wrapper-background-color-disabled, var(--sky-color-background-input-disabled));box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-disabled) var(--sky-color-border-input-disabled))}.sky-text-editor.sky-text-editor-invalid .sky-text-editor-wrapper{box-shadow:var(--sky-override-text-editor-box-shadow-error, inset 0 0 0 var(--sky-border-width-input-error) var(--sky-color-border-input-error));border:var(--sky-override-text-editor-border-error, none);outline:none}.sky-text-editor.sky-text-editor-invalid .sky-text-editor-label-wrapper{color:var(--sky-override-text-editor-label-color-invalid, var(--sky-color-text-danger))}.sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-wrapper{box-shadow:var(--sky-override-text-editor-box-shadow-focused, inset 0 0 0 var(--sky-border-width-input-focus) var(--sky-color-border-input-focus));border:var(--sky-override-text-editor-border-focused, none);outline:none}.sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-label-wrapper{color:var(--sky-override-text-editor-label-color-focused, var(--sky-color-text-action))}.sky-text-editor:not(.sky-text-editor-wrapper-focused) .sky-text-editor-wrapper:hover:not(:active){box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-hover) var(--sky-color-border-input-hover))}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-container{background-color:var(--sky-override-text-editor-toolbar-background-color)!important}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:var(--sky-override-text-editor-toolbar-section-padding, var(--sky-comp-toolbar-space-inset-top) var(--sky-comp-input-value-space-inset-right) var(--sky-comp-toolbar-space-inset-bottom) var(--sky-comp-input-value-space-inset-left))!important;border-top:var(--sky-override-text-editor-toolbar-border, none)!important}.sky-text-editor .sky-text-editor-toolbar sky-toolbar-section:not(:last-of-type) .sky-toolbar-section{padding-bottom:var(--sky-override-text-editor-top-toolbar-bottom-padding, var(--sky-comp-toolbar-space-inset-bottom))!important;border-top:none!important}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:var(--sky-override-text-editor-toolbar-border, none);border-right:var(--sky-override-text-editor-toolbar-border, none)}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:var(--sky-override-text-editor-toolbar-item-spacing, 0 var(--sky-space-gap-action_group-m) 0 0)!important}.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-text-editor-hint-text{margin-top:var(--sky-override-text-editor-hint-text-space, var(--sky-space-gap-stacked_supplemental-s))}.sky-theme-modern .sky-text-editor .sky-text-editor-label-wrapper:not(:empty){transition:border-color .15s,box-shadow .15s,color .15s}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper{transition:border-color .15s,box-shadow .15s,color .15s}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"ngmodule\", type: SkyHelpInlineModule }, { kind: \"component\", type: i3.λ1, selector: \"sky-help-inline\", inputs: [\"ariaControls\", \"ariaExpanded\", \"ariaLabel\", \"helpKey\", \"labelledBy\", \"labelText\", \"popoverContent\", \"popoverTitle\"], outputs: [\"actionClick\"] }, { kind: \"ngmodule\", type: SkyIdModule }, { kind: \"directive\", type: i4.λ2, selector: \"[skyId]\", exportAs: [\"skyId\"] }, { kind: \"component\", type: SkyTextEditorMenubarComponent, selector: \"sky-text-editor-menubar\", inputs: [\"editorFocusStream\", \"menus\", \"mergeFields\", \"disabled\"] }, { kind: \"component\", type: SkyTextEditorToolbarComponent, selector: \"sky-text-editor-toolbar\", inputs: [\"editorFocusStream\", \"fontList\", \"fontSizeList\", \"toolbarActions\", \"linkWindowOptions\", \"styleState\", \"disabled\"] }, { kind: \"ngmodule\", type: SkyThemeModule }, { kind: \"directive\", type: i5.λ2, selector: \"[skyThemeClass]\", inputs: [\"class\", \"skyThemeClass\"] }, { kind: \"ngmodule\", type: SkyToolbarModule }, { kind: \"component\", type: i6.λ37, selector: \"sky-toolbar\", inputs: [\"listDescriptor\"] }, { kind: \"component\", type: i6.λ38, selector: \"sky-toolbar-section\" }, { kind: \"ngmodule\", type: SkyFormErrorsModule }, { kind: \"component\", type: i1.λ21, selector: \"sky-form-errors\", inputs: [\"errors\", \"labelText\", \"touched\", \"dirty\"] }, { kind: \"ngmodule\", type: SkyTextEditorResourcesModule }, { kind: \"pipe\", type: i7.SkyLibResourcesPipe, name: \"skyLibResources\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-text-editor', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n SkyTextEditorService,\n SkyTextEditorSelectionService,\n SkyTextEditorAdapterService,\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ], hostDirectives: [\n {\n directive: SkyRequiredStateDirective,\n inputs: ['required'],\n },\n ], imports: [\n CommonModule,\n SkyHelpInlineModule,\n SkyIdModule,\n SkyTextEditorMenubarComponent,\n SkyTextEditorToolbarComponent,\n SkyThemeModule,\n SkyToolbarModule,\n SkyFormErrorsModule,\n SkyTextEditorResourcesModule,\n ], template: \"<div\\n class=\\\"sky-text-editor\\\"\\n [ngClass]=\\\"{\\n 'sky-text-editor-disabled': disabled,\\n 'sky-text-editor-wrapper-focused': editorFocused,\\n 'sky-text-editor-invalid':\\n ngControl.errors && (ngControl.touched || ngControl.dirty)\\n }\\\"\\n>\\n <div class=\\\"sky-text-editor-label-wrapper\\\">\\n @if (labelText) {\\n <label\\n class=\\\"sky-control-label\\\"\\n [ngClass]=\\\"{\\n 'sky-control-label-required': requiredState.isRequired()\\n }\\\"\\n >{{ labelText }}</label\\n >\\n @if (helpPopoverContent || helpKey) {\\n <span class=\\\"sky-control-help-container\\\">\\n <sky-help-inline\\n [helpKey]=\\\"helpKey\\\"\\n [labelText]=\\\"labelText\\\"\\n [popoverContent]=\\\"helpPopoverContent\\\"\\n [popoverTitle]=\\\"helpPopoverTitle\\\"\\n />\\n </span>\\n }\\n }\\n </div>\\n @if (\\n (menus && menus.length) > 0 || (toolbarActions && toolbarActions.length > 0)\\n ) {\\n <sky-toolbar class=\\\"sky-text-editor-toolbar\\\">\\n @if (menus && menus.length > 0) {\\n <sky-toolbar-section\\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-toolbar-section>\\n }\\n @if (toolbarActions && toolbarActions.length > 0) {\\n <sky-toolbar-section\\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 [linkWindowOptions]=\\\"linkWindowOptions\\\"\\n [toolbarActions]=\\\"toolbarActions\\\"\\n [styleState]=\\\"initialStyleState\\\"\\n />\\n </sky-toolbar-section>\\n }\\n </sky-toolbar>\\n }\\n <iframe\\n #iframe\\n class=\\\"sky-text-editor-wrapper\\\"\\n src=\\\"about:blank\\\"\\n allow=\\\"clipboard-read *; clipboard-write *\\\"\\n [attr.title]=\\\"\\n labelText || ('skyux_text_editor_iframe_title_default' | skyLibResources)\\n \\\"\\n [attr.aria-describedby]=\\\"hintText ? hintTextEl.id : undefined\\\"\\n [ngClass]=\\\"{\\n 'sky-text-editor-wrapper-disabled': disabled\\n }\\\"\\n (load)=\\\"onIframeLoad()\\\"\\n >\\n </iframe>\\n</div>\\n<div\\n #hintTextEl=\\\"skyId\\\"\\n skyId\\n class=\\\"sky-text-editor-hint-text\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-font-deemphasized': 'default',\\n 'sky-font-hint-text-s': 'modern'\\n }\\\"\\n>\\n {{ hintText }}\\n</div>\\n<sky-form-errors\\n class=\\\"sky-text-editor-errors\\\"\\n [id]=\\\"errorId\\\"\\n [errors]=\\\"ngControl.errors\\\"\\n [labelText]=\\\"labelText\\\"\\n [touched]=\\\"ngControl.touched\\\"\\n [dirty]=\\\"ngControl.dirty\\\"\\n>\\n <ng-content select=\\\"sky-form-error\\\" />\\n</sky-form-errors>\\n\", styles: [\".sky-text-editor:not(.sky-theme-modern *){--sky-override-text-editor-background-color: white;--sky-override-text-editor-toolbar-background-color: white;--sky-override-text-editor-label-background-color: transparent;--sky-override-text-editor-border-error: 1px solid var(--sky-highlight-color-danger);--sky-override-text-editor-border-focused: 1px solid var(--sky-highlight-color-info);--sky-override-text-editor-border-radius: 0;--sky-override-text-editor-border: 1px solid #cdcfd2;--sky-override-text-editor-box-shadow-error: 0 0 8px rgba(239, 64, 68, .6);--sky-override-text-editor-box-shadow-focused: 0 0 8px rgba(0, 180, 241, .6);--sky-override-text-editor-box-shadow: none;--sky-override-text-editor-disabled-cursor: default;--sky-override-text-editor-label-color: var(--sky-text-color-default);--sky-override-text-editor-label-color-focused: var(--sky-text-color-default);--sky-override-text-editor-label-color-invalid: var(--sky-text-color-default);--sky-override-text-editor-label-display: flex;--sky-override-text-editor-label-font-size: 15px;--sky-override-text-editor-label-font-weight: 400;--sky-override-text-editor-label-line-height: normal;--sky-override-text-editor-label-margin-bottom: 5px;--sky-override-text-editor-label-padding: 0;--sky-override-text-editor-toolbar-border: 1px solid #cdcfd2;--sky-override-text-editor-toolbar-item-spacing: 0 20px 10px 0;--sky-override-text-editor-toolbar-section-padding: 10px 10px 0 10px;--sky-override-text-editor-top-toolbar-bottom-padding: 0;--sky-override-text-editor-wrapper-background-color-disabled: var( --sky-background-color-disabled );--sky-override-text-editor-wrapper-padding: 1rem}.sky-text-editor-hint-text:not(.sky-theme-modern *){--sky-override-text-editor-hint-text-space: 5px}sky-text-editor.sky-form-field-stacked{display:block}.sky-text-editor{border-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-base) var(--sky-color-border-input-base));background-color:var(--sky-color-background-input-base)}.sky-text-editor.sky-text-editor-disabled{background-color:var(--sky-color-background-input-disabled);box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-disabled) var(--sky-color-border-input-disabled));cursor:var(--sky-override-text-editor-disabled-cursor, not-allowed)}.sky-text-editor .sky-text-editor-label-wrapper:not(:empty){background-color:var(--sky-override-text-editor-label-background-color);display:var(--sky-override-text-editor-label-display, inline-block);padding:var(--sky-override-text-editor-label-padding, var(--sky-comp-input-label-space-inset-top) var(--sky-comp-input-value-space-inset-right) 0 var(--sky-comp-input-value-space-inset-left));width:100%;color:var(--sky-override-text-editor-label-color, var(--sky-color-text-default))}.sky-text-editor .sky-text-editor-label-wrapper:not(:empty) label{font-size:var(--sky-override-text-editor-label-font-size, var(--sky-font-size-input-label));font-style:var(--sky-font-style-input-label);font-weight:var(--sky-override-text-editor-label-font-weight, var(--sky-font-style-input-label));letter-spacing:var(--sky-font-letter_spacing-input-label);line-height:var(--sky-override-text-editor-label-line-height, var(--sky-font-line_height-input-label));margin-bottom:var(--sky-override-text-editor-label-margin-bottom, 0)}.sky-text-editor .sky-text-editor-wrapper{display:flex;flex-wrap:wrap;background-color:var(--sky-override-text-editor-background-color);width:100%;height:300px;padding:var(--sky-override-text-editor-wrapper-padding, var(--sky-comp-text_editor-space-inset-top) var(--sky-comp-text_editor-space-inset-right) var(--sky-comp-text_editor-space-inset-bottom) var(--sky-comp-text_editor-space-inset-left));font-size:1.2rem;border-bottom-left-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));border-bottom-right-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));border-top:none;border-right:var(--sky-override-text-editor-border, none);border-bottom:var(--sky-override-text-editor-border, none);border-left:var(--sky-override-text-editor-border, none);box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-base) var(--sky-color-border-input-base));overflow-y:auto;outline:none}.sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:var(--sky-override-text-editor-wrapper-background-color-disabled, var(--sky-color-background-input-disabled));box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-disabled) var(--sky-color-border-input-disabled))}.sky-text-editor.sky-text-editor-invalid .sky-text-editor-wrapper{box-shadow:var(--sky-override-text-editor-box-shadow-error, inset 0 0 0 var(--sky-border-width-input-error) var(--sky-color-border-input-error));border:var(--sky-override-text-editor-border-error, none);outline:none}.sky-text-editor.sky-text-editor-invalid .sky-text-editor-label-wrapper{color:var(--sky-override-text-editor-label-color-invalid, var(--sky-color-text-danger))}.sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-wrapper{box-shadow:var(--sky-override-text-editor-box-shadow-focused, inset 0 0 0 var(--sky-border-width-input-focus) var(--sky-color-border-input-focus));border:var(--sky-override-text-editor-border-focused, none);outline:none}.sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-label-wrapper{color:var(--sky-override-text-editor-label-color-focused, var(--sky-color-text-action))}.sky-text-editor:not(.sky-text-editor-wrapper-focused) .sky-text-editor-wrapper:hover:not(:active){box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-hover) var(--sky-color-border-input-hover))}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-container{background-color:var(--sky-override-text-editor-toolbar-background-color)!important}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:var(--sky-override-text-editor-toolbar-section-padding, var(--sky-comp-toolbar-space-inset-top) var(--sky-comp-input-value-space-inset-right) var(--sky-comp-toolbar-space-inset-bottom) var(--sky-comp-input-value-space-inset-left))!important;border-top:var(--sky-override-text-editor-toolbar-border, none)!important}.sky-text-editor .sky-text-editor-toolbar sky-toolbar-section:not(:last-of-type) .sky-toolbar-section{padding-bottom:var(--sky-override-text-editor-top-toolbar-bottom-padding, var(--sky-comp-toolbar-space-inset-bottom))!important;border-top:none!important}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:var(--sky-override-text-editor-toolbar-border, none);border-right:var(--sky-override-text-editor-toolbar-border, none)}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:var(--sky-override-text-editor-toolbar-item-spacing, 0 var(--sky-space-gap-action_group-m) 0 0)!important}.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-text-editor-hint-text{margin-top:var(--sky-override-text-editor-hint-text-space, var(--sky-space-gap-stacked_supplemental-s))}.sky-theme-modern .sky-text-editor .sky-text-editor-label-wrapper:not(:empty){transition:border-color .15s,box-shadow .15s,color .15s}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper{transition:border-color .15s,box-shadow .15s,color .15s}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { autofocus: [{\n type: Input\n }], disabled: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], fontList: [{\n type: Input\n }], fontSizeList: [{\n type: Input\n }], helpPopoverContent: [{\n type: Input\n }], helpPopoverTitle: [{\n type: Input\n }], hintText: [{\n type: Input\n }], id: [{\n type: Input\n }], initialStyleState: [{\n type: Input\n }], labelText: [{\n type: Input\n }], menus: [{\n type: Input\n }], mergeFields: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], stacked: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }, {\n type: HostBinding,\n args: ['class.sky-form-field-stacked']\n }], toolbarActions: [{\n type: Input\n }], linkWindowOptions: [{\n type: Input\n }], helpKey: [{\n type: Input\n }], iframeRef: [{\n type: ViewChild,\n args: ['iframe']\n }], inputTemplateRef: [{\n type: ViewChild,\n args: ['inputTemplateRef', {\n read: TemplateRef,\n static: true,\n }]\n }], formControlClass: [{\n type: HostBinding,\n args: ['class.sky-form-control']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9FLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0Qix5QkFBeUIsR0FDMUIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0s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QjtzQkFEeEIsS0FBSztnQkFRQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBUUMsUUFBUTtzQkFEZCxLQUFLO2dCQVFLLEVBQUU7c0JBRFosS0FBSztnQkFhSyxpQkFBaUI7c0JBRDNCLEtBQUs7Z0JBb0JLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBZUssS0FBSztzQkFEZixLQUFLO2dCQWFLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBYUssV0FBVztzQkFEckIsS0FBSztnQkFxQkMsT0FBTztzQkFGYixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFOztzQkFDckMsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBUWhDLGNBQWM7c0JBRHhCLEtBQUs7Z0JBZ0JLLGlCQUFpQjtzQkFEM0IsS0FBSztnQkFpQkMsT0FBTztzQkFEYixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsU0FBUzt1QkFBQyxRQUFRO2dCQXNEWixnQkFBZ0I7c0JBSnRCLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUU7d0JBQzdCLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFNTSxnQkFBZ0I7c0JBRHRCLFdBQVc7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lDb3JlQWRhcHRlclNlcnZpY2UsIFNreUlkTW9kdWxlLCBTa3lJZFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCxcbiAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgU2t5SW5wdXRCb3hIb3N0U2VydmljZSxcbiAgU2t5UmVxdWlyZWRTdGF0ZURpcmVjdGl2ZSxcbn0gZnJvbSAnQHNreXV4L2Zvcm1zJztcbmltcG9ydCB7IFNreUhlbHBJbmxpbmVNb2R1bGUgfSBmcm9tICdAc2t5dXgvaGVscC1pbmxpbmUnO1xuaW1wb3J0IHsgU2t5VG9vbGJhck1vZHVsZSB9IGZyb20gJ0Bza3l1eC9sYXlvdXQnO1xuaW1wb3J0IHsgU2t5VGhlbWVNb2R1bGUgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVRleHRFZGl0b3JSZXNvdXJjZXNNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQvc2t5LXRleHQtZWRpdG9yLXJlc291cmNlcy5tb2R1bGUnO1xuXG5pbXBvcnQgeyBGT05UX0xJU1RfREVGQVVMVFMgfSBmcm9tICcuL2RlZmF1bHRzL2ZvbnQtbGlzdC1kZWZhdWx0cyc7XG5pbXBvcnQgeyBGT05UX1NJWkVfTElTVF9ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvZm9udC1zaXplLWxpc3QtZGVmYXVsdHMnO1xuaW1wb3J0IHsgTElOS19XSU5ET1dfT1BUSU9OU19ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvbGluay13aW5kb3ctb3B0aW9ucy1kZWZhdWx0cyc7XG5pbXBvcnQgeyBNRU5VX0RFRkFVTFRTIH0gZnJvbSAnLi9kZWZhdWx0cy9tZW51LWRlZmF1bHRzJztcbmltcG9ydCB7IFNUWUxFX1NUQVRFX0RFRkFVTFRTIH0gZnJvbSAnLi9kZWZhdWx0cy9zdHlsZS1zdGF0ZS1kZWZhdWx0cyc7XG5pbXBvcnQgeyBUT09MQkFSX0FDVElPTl9ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvdG9vbGJhci1hY3Rpb24tZGVmYXVsdHMnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lbnViYXJDb21wb25lbnQgfSBmcm9tICcuL21lbnViYXIvdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRTYW5pdGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LXNhbml0aXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyL3RleHQtZWRpdG9yLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JGb250IH0gZnJvbSAnLi90eXBlcy9mb250LXN0YXRlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JMaW5rV2luZG93T3B0aW9uc1R5cGUgfSBmcm9tICcuL3R5cGVzL2xpbmstd2luZG93LW9wdGlvbnMtdHlwZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yTWVudVR5cGUgfSBmcm9tICcuL3R5cGVzL21lbnUtdHlwZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB9IGZyb20gJy4vdHlwZXMvc3R5bGUtc3RhdGUnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lcmdlRmllbGQgfSBmcm9tICcuL3R5cGVzL3RleHQtZWRpdG9yLW1lcmdlLWZpZWxkJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZSB9IGZyb20gJy4vdHlwZXMvdG9vbGJhci1hY3Rpb24tdHlwZSc7XG5cbi8qKlxuICogVGhlIHRleHQgZWRpdG9yIGNvbXBvbmVudCBsZXRzIHVzZXJzIGZvcm1hdCBhbmQgbWFuaXB1bGF0ZSB0ZXh0LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktdGV4dC1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU2t5VGV4dEVkaXRvclNlcnZpY2UsXG4gICAgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UsXG4gICAgU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogU0tZX0ZPUk1fRVJST1JTX0VOQUJMRUQsIHVzZVZhbHVlOiB0cnVlIH0sXG4gIF0sXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAge1xuICAgICAgZGlyZWN0aXZlOiBTa3lSZXF1aXJlZFN0YXRlRGlyZWN0aXZlLFxuICAgICAgaW5wdXRzOiBbJ3JlcXVpcmVkJ10sXG4gICAgfSxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTa3lIZWxwSW5saW5lTW9kdWxlLFxuICAgIFNreUlkTW9kdWxlLFxuICAgIFNreVRleHRFZGl0b3JNZW51YmFyQ29tcG9uZW50LFxuICAgIFNreVRleHRFZGl0b3JUb29sYmFyQ29tcG9uZW50LFxuICAgIFNreVRoZW1lTW9kdWxlLFxuICAgIFNreVRvb2xiYXJNb2R1bGUsXG4gICAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgICBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3Nvclxue1xuICAvKipcbiAgICogV2hldGhlciB0byBwdXQgZm9jdXMgb24gdGhlIGVkaXRvciBhZnRlciBpdCByZW5kZXJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9mb2N1czogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIHRleHQgZWRpdG9yIG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLlxuICAgKiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLCB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuI2FwcGx5RGlzYWJsZWRTdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9udHMgdG8gaW5jbHVkZSBpbiB0aGUgZm9udCBwaWNrZXIuXG4gICAqIEBkZWZhdWx0IFt7bmFtZTogJ0JsYWNrYmF1ZCBTYW5zJywgdmFsdWU6ICdcIkJsYWNrYmF1ZCBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmJ30sIHtuYW1lOiAnQXJpYWwnLCB2YWx1ZTogJ0FyaWFsJ30sIHtuYW1lOiAnQXJpYWwgQmxhY2snLCB2YWx1ZTogJ1wiQXJpYWwgQmxhY2tcIid9LCB7bmFtZTogJ0NvdXJpZXIgTmV3JywgdmFsdWU6ICdcIkNvdXJpZXIgTmV3XCInfSwge25hbWU6ICdHZW9yZ2lhJywgdmFsdWU6ICdHZW9yZ2lhLCBzZXJpZid9LCB7bmFtZTogJ1RhaG9tYScsIHZhbHVlOiAnVGFob21hLCBHZW5ldmEsIHNhbnMtc2VyaWYnfSwge25hbWU6ICdUaW1lcyBOZXcgUm9tYW4nLCB2YWx1ZTogJ1wiVGltZXMgTmV3IFJvbWFuXCInfSwge25hbWU6ICdUcmVidWNoZXQgTVMnLCB2YWx1ZTogJ1wiVHJlYnVjaGV0IE1TXCIsIHNhbnMtc2VyaWYnfSwge25hbWU6ICdWZXJkYW5hJywgdmFsdWU6ICdWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWYnfV1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZm9udExpc3QodmFsdWU6IFNreVRleHRFZGl0b3JGb250W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZm9udExpc3QgPSB2YWx1ZSB8fCBGT05UX0xJU1RfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvbnRMaXN0KCk6IFNreVRleHRFZGl0b3JGb250W10ge1xuICAgIHJldHVybiB0aGlzLiNfZm9udExpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbnQgc2l6ZXMgdG8gaW5jbHVkZSBpbiB0aGUgZm9udCBzaXplIHBpY2tlci5cbiAgICogQGRlZmF1bHQgWzYsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzNiwgNDhdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZvbnRTaXplTGlzdCh2YWx1ZTogbnVtYmVyW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZm9udFNpemVMaXN0ID0gdmFsdWUgfHwgRk9OVF9TSVpFX0xJU1RfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvbnRTaXplTGlzdCgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19mb250U2l6ZUxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGhlbHAgcG9wb3Zlci4gV2hlbiBzcGVjaWZpZWQgYWxvbmcgd2l0aCBgbGFiZWxUZXh0YCwgYSBbaGVscCBpbmxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9oZWxwLWlubGluZSlcbiAgICogYnV0dG9uIGlzIGFkZGVkIHRvIHRoZSB0ZXh0IGVkaXRvci4gVGhlIGhlbHAgaW5saW5lIGJ1dHRvbiBkaXNwbGF5cyBhIFtwb3BvdmVyXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvcG9wb3ZlcilcbiAgICogd2hlbiBjbGlja2VkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udGVudCBhbmQgb3B0aW9uYWwgdGl0bGUuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGxhYmVsVGV4dGAgaXMgYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBoZWxwIHBvcG92ZXIuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGhlbHBQb3BvdmVyQ29udGVudGAgaXNcbiAgICogYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBbUGVyc2lzdGVudCBpbmxpbmUgaGVscCB0ZXh0XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2Rlc2lnbi9ndWlkZWxpbmVzL3VzZXItYXNzaXN0YW5jZSNpbmxpbmUtaGVscCkgdGhhdCBwcm92aWRlc1xuICAgKiBhZGRpdGlvbmFsIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGludFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBhdHRyaWJ1dGUgZm9yIHRoZSB0ZXh0IGVkaXRvci5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGNvbXBvbmVudCBnZW5lcmF0ZXMgYSByYW5kb20gSUQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNpZCA9IHZhbHVlIHx8IHRoaXMuI2RlZmF1bHRJZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jaWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGluaXRpYWwgc3R5bGVzIGZvciBhbGwgY29udGVudCwgaW5jbHVkaW5nIGJhY2tncm91bmQgY29sb3IsIGZvbnQgc2l6ZSwgYW5kIGxpbmsgc3RhdGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGluaXRpYWxTdHlsZVN0YXRlKHN0YXRlOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIC8vIERvIG5vdCB1cGRhdGUgdGhlIHN0YXRlIGFmdGVyIGluaXRpYWxpemF0aW9uIGhhcyB0YWtlbiBwbGFjZVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNpbml0aWFsaXplZCkge1xuICAgICAgdGhpcy4jX2luaXRpYWxTdHlsZVN0YXRlID0ge1xuICAgICAgICAuLi5TVFlMRV9TVEFURV9ERUZBVUxUUyxcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5pdGlhbFN0eWxlU3RhdGUoKTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUge1xuICAgIHJldHVybiB0aGlzLiNfaW5pdGlhbFN0eWxlU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgdGV4dCBlZGl0b3IncyBsYWJlbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbGFiZWxUZXh0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbGFiZWxUZXh0ID0gdmFsdWU7XG4gICAgdGhpcy4jdXBkYXRlQTExeUF0dHJpYnV0ZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFiZWxUZXh0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19sYWJlbFRleHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1lbnVzIHRvIGluY2x1ZGUgaW4gdGhlIG1lbnUgYmFyLlxuICAgKiBAZGVmYXVsdCBbICdlZGl0JywgJ2Zvcm1hdCcgXVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtZW51cyh2YWx1ZTogU2t5VGV4dEVkaXRvck1lbnVUeXBlW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWVudXMgPSB2YWx1ZSB8fCBNRU5VX0RFRkFVTFRTO1xuICB9XG5cbiAgcHVibGljIGdldCBtZW51cygpOiBTa3lUZXh0RWRpdG9yTWVudVR5cGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19tZW51cztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWVyZ2UgZmllbGRzIHRvIGluY2x1ZGUgaW4gdGhlIG1lcmdlIGZpZWxkIG1lbnUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1lcmdlRmllbGRzKHZhbHVlOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZFtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21lcmdlRmllbGRzID0gdmFsdWUgfHwgW107XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lcmdlRmllbGRzKCk6IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkW10ge1xuICAgIHJldHVybiB0aGlzLiNfbWVyZ2VGaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogUGxhY2Vob2xkZXIgdGV4dCB0byBkaXNwbGF5IHdoZW4gdGhlIHRleHQgZW50cnkgYXJlYSBpcyBlbXB0eS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLiNfcGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuI19wbGFjZWhvbGRlciA9IHZhbHVlIHx8ICcnO1xuICAgICAgaWYgKHRoaXMuI2luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldFBsYWNlaG9sZGVyKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI19wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0ZXh0IGVkaXRvciBpcyBzdGFja2VkIG9uIGFub3RoZXIgZm9ybSBjb21wb25lbnQuIFdoZW4gc3BlY2lmaWVkLFxuICAgKiB0aGUgYXBwcm9wcmlhdGUgdmVydGljYWwgc3BhY2luZyBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSB0ZXh0IGVkaXRvci5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1mb3JtLWZpZWxkLXN0YWNrZWQnKVxuICBwdWJsaWMgc3RhY2tlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9ucyB0byBpbmNsdWRlIGluIHRoZSB0b29sYmFyIGluIHRoZSBzcGVjaWZpZWQgb3JkZXIuXG4gICAqIEBkZWZhdWx0IFsgJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtc2l6ZScsICdmb250LXN0eWxlJywgJ2NvbG9yJywgJ2xpc3QnLCAnbGluayBdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRvb2xiYXJBY3Rpb25zKFxuICAgIHZhbHVlOiBTa3lUZXh0RWRpdG9yVG9vbGJhckFjdGlvblR5cGVbXSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy4jX3Rvb2xiYXJBY3Rpb25zID0gdmFsdWUgfHwgVE9PTEJBUl9BQ1RJT05fREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRvb2xiYXJBY3Rpb25zKCk6IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jX3Rvb2xiYXJBY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgd2luZG93IG9wdGlvbnMgZm9yIGFkZGluZyBhIGh5cGVybGluay5cbiAgICogQGRlZmF1bHQgWyAnbmV3JywgJ2V4aXN0aW5nJyBdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGxpbmtXaW5kb3dPcHRpb25zKFxuICAgIHZhbHVlOiBTa3lUZXh0RWRpdG9yTGlua1dpbmRvd09wdGlvbnNUeXBlW10gfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMuI19saW5rV2luZG93T3B0aW9ucyA9IHZhbHVlID8/IExJTktfV0lORE9XX09QVElPTlNfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpbmtXaW5kb3dPcHRpb25zKCk6IFNreVRleHRFZGl0b3JMaW5rV2luZG93T3B0aW9uc1R5cGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19saW5rV2luZG93T3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGhlbHAga2V5IHRoYXQgaWRlbnRpZmllcyB0aGUgZ2xvYmFsIGhlbHAgY29udGVudCB0byBkaXNwbGF5LiBXaGVuIHNwZWNpZmllZCBhbG9uZyB3aXRoIGBsYWJlbFRleHRgLCBhIFtoZWxwIGlubGluZV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2hlbHAtaW5saW5lKVxuICAgKiBidXR0b24gaXMgcGxhY2VkIGJlc2lkZSB0aGUgdGV4dCBlZGl0b3IgbGFiZWwuIENsaWNraW5nIHRoZSBidXR0b24gaW52b2tlcyBbZ2xvYmFsIGhlbHBdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vZGV2ZWxvcC9nbG9iYWwtaGVscClcbiAgICogYXMgY29uZmlndXJlZCBieSB0aGUgYXBwbGljYXRpb24uIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGxhYmVsVGV4dGAgaXMgYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2lmcmFtZScpXG4gIHB1YmxpYyBpZnJhbWVSZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5hbCB2YWx1ZSBvZiB0aGUgY29udHJvbC5cbiAgICovXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIC8vIE5vcm1hbGl6ZSB2YWx1ZSBhbmQgc2V0IGFueSBlbXB0eSBzdGF0ZSB0byBhbiBlbXB0eSBzdHJpbmcuXG4gICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZTogc3RyaW5nO1xuICAgIGNvbnN0IHZhbHVlVHJpbW1lZCA9IHZhbHVlPy50cmltKCk7XG5cbiAgICBpZiAoXG4gICAgICAhdmFsdWUgfHxcbiAgICAgIHZhbHVlVHJpbW1lZCA9PT0gJzxwPjwvcD4nIHx8XG4gICAgICB2YWx1ZVRyaW1tZWQgPT09ICc8YnI+JyB8fFxuICAgICAgdmFsdWVUcmltbWVkID09PSAnPHA+PGJyPjwvcD4nXG4gICAgKSB7XG4gICAgICBub3JtYWxpemVkVmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgbm9ybWFsaXplZFZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplZFZhbHVlID0gdGhpcy4jc2FuaXRpemF0aW9uU2VydmljZVxuICAgICAgLnNhbml0aXplKG5vcm1hbGl6ZWRWYWx1ZSlcbiAgICAgIC50cmltKCk7XG5cbiAgICBpZiAodGhpcy4jX3ZhbHVlICE9PSBub3JtYWxpemVkVmFsdWUpIHtcbiAgICAgIHRoaXMuI192YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTtcblxuICAgICAgLy8gVXBkYXRlIGFuZ3VsYXIgZm9ybSBjb250cm9sIGlmIG1vZGVsIGhhcyBiZWVuIG5vcm1hbGl6ZWQuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm5nQ29udHJvbD8uY29udHJvbCAmJlxuICAgICAgICBub3JtYWxpemVkVmFsdWUgIT09IHRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZWRWYWx1ZSwge1xuICAgICAgICAgIGVtaXRNb2RlbFRvVmlld0NoYW5nZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyAjaW5pdElmcmFtZSgpIHdpbGwgZG8gYW5vdGhlciBjaGVjayBsYXRlciB0byBzZWUgaWYgdGhlIGVkaXRvciBzaG91bGRcbiAgICAgIC8vIHJlY2VpdmUgZm9jdXMgaWYgbm90IGluaXRpYWxpemVkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC5cbiAgICAgIHRoaXMuI2NoZWNrQXV0b2ZvY3VzQW5kRm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI192YWx1ZTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0VGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwdWJsaWMgaW5wdXRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGVkaXRvckZvY3VzU3RyZWFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1mb3JtLWNvbnRyb2wnKVxuICBwdWJsaWMgZm9ybUNvbnRyb2xDbGFzcyA9ICEhaW5qZWN0KFNreUlucHV0Qm94SG9zdFNlcnZpY2UsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGVkaXRvckZvY3VzZWQgPSBmYWxzZTtcblxuICAjZGVmYXVsdElkOiBzdHJpbmc7XG4gICNpZDogc3RyaW5nO1xuICAjZm9jdXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAjaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNfZm9udExpc3QgPSBGT05UX0xJU1RfREVGQVVMVFM7XG4gICNfZm9udFNpemVMaXN0ID0gRk9OVF9TSVpFX0xJU1RfREVGQVVMVFM7XG4gICNfbGFiZWxUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNfbWVyZ2VGaWVsZHM6IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkW10gPSBbXTtcbiAgI19tZW51cyA9IE1FTlVfREVGQVVMVFM7XG4gICNfdG9vbGJhckFjdGlvbnM6IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZVtdID0gVE9PTEJBUl9BQ1RJT05fREVGQVVMVFM7XG4gICNfbGlua1dpbmRvd09wdGlvbnMgPSBMSU5LX1dJTkRPV19PUFRJT05TX0RFRkFVTFRTO1xuICAjX2Rpc2FibGVkID0gZmFsc2U7XG4gICNfaW5pdGlhbFN0eWxlU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBTVFlMRV9TVEFURV9ERUZBVUxUUyk7XG4gICNfcGxhY2Vob2xkZXIgPSAnJztcbiAgI192YWx1ZSA9ICc8cD48L3A+JztcblxuICByZWFkb25seSAjYWRhcHRlclNlcnZpY2UgPSBpbmplY3QoU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2NoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcmVhZG9ubHkgI2NvcmVBZGFwdGVyU2VydmljZSA9IGluamVjdChTa3lDb3JlQWRhcHRlclNlcnZpY2UpO1xuICByZWFkb25seSAjZWRpdG9yU2VydmljZSA9IGluamVjdChTa3lUZXh0RWRpdG9yU2VydmljZSk7XG4gIHJlYWRvbmx5ICNpZFN2YyA9IGluamVjdChTa3lJZFNlcnZpY2UpO1xuICByZWFkb25seSAjc2FuaXRpemF0aW9uU2VydmljZSA9IGluamVjdChTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZSk7XG4gIHJlYWRvbmx5ICN6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVycm9ySWQgPSB0aGlzLiNpZFN2Yy5nZW5lcmF0ZUlkKCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBuZ0NvbnRyb2wgPSBpbmplY3QoTmdDb250cm9sKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlcXVpcmVkU3RhdGUgPSBpbmplY3QoU2t5UmVxdWlyZWRTdGF0ZURpcmVjdGl2ZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy4jaWQgPSB0aGlzLiNkZWZhdWx0SWQgPSB0aGlzLiNpZFN2Yy5nZW5lcmF0ZUlkKCk7XG4gICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2luaXRJZnJhbWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5yZW1vdmVPYnNlcnZlcnModGhpcy4jZWRpdG9yU2VydmljZS5lZGl0b3IpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbklmcmFtZUxvYWQoKTogdm9pZCB7XG4gICAgLy8gUmVpbml0aWFsaXplIHRoZSBlZGl0b3IgaWYgaXQgYWxyZWFkeSBleGlzdHMgdG8gY292ZXIgc2l0dWF0aW9ucyB3aGVyZSB0aGUgdGV4dCBlZGl0b3IgbWlnaHQgaGF2ZSBiZWVuIG1vdmVkIGluIHRoZSBET00uXG4gICAgaWYgKHRoaXMuI2VkaXRvclNlcnZpY2UuaXNJbml0aWFsaXplZCkge1xuICAgICAgdGhpcy4jaW5pdElmcmFtZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcblxuICAgIC8vIFVwZGF0ZSBIVE1MIGlmIG5lY2Vzc2FyeS5cbiAgICBpZiAodGhpcy4jaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGNvbnN0IGVkaXRvclZhbHVlID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0RWRpdG9ySW5uZXJIdG1sKCk7XG4gICAgICBpZiAoZWRpdG9yVmFsdWUgIT09IHRoaXMuI192YWx1ZSkge1xuICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRFZGl0b3JJbm5lckh0bWwodGhpcy4jX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI19vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNfb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gICNjaGVja0F1dG9mb2N1c0FuZEZvY3VzKCk6IHZvaWQge1xuICAgIC8vIERvbid0IHNldCBmb2N1cyBvbiB0aGUgZWRpdG9yIGlmIHRoZSBpZnJhbWUgaXNuJ3QgaW5pdGlhbGl6ZWQuXG4gICAgLy8gQXV0b2ZvY3VzIGlzbid0IHRlc3RhYmxlIGluIEZpcmVmb3ggYW5kIElFLlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzICYmIHRoaXMuI2luaXRpYWxpemVkICYmICF0aGlzLiNmb2N1c0luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VkaXRvcigpO1xuICAgICAgdGhpcy4jZm9jdXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgI3VwZGF0ZVN0eWxlKCk6IHZvaWQge1xuICAgIHRoaXMuI19pbml0aWFsU3R5bGVTdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuI19pbml0aWFsU3R5bGVTdGF0ZSxcbiAgICAgIC4uLnRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldFN0eWxlU3RhdGUoKSxcbiAgICB9O1xuICB9XG5cbiAgI2luaXRJZnJhbWUoKTogdm9pZCB7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuaW5pdEVkaXRvcihcbiAgICAgIHRoaXMuaWQsXG4gICAgICAodGhpcy5pZnJhbWVSZWYgYXMgRWxlbWVudFJlZikubmF0aXZlRWxlbWVudCxcbiAgICAgIHRoaXMuaW5pdGlhbFN0eWxlU3RhdGUsXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyLFxuICAgICk7XG5cbiAgICB0aGlzLm5nQ29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuI3VwZGF0ZUExMXlBdHRyaWJ1dGVzKCk7XG5cbiAgICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW4gdGhlIGZpZWxkIHN0YXR1cyBpcyBtb2RpZmllZCBwcm9ncmFtbWF0aWNhbGx5LlxuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmlucHV0TGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIEFuZ3VsYXIgZG9lc24ndCBydW4gY2hhbmdlIGRldGVjdGlvbiBmb3IgY2hhbmdlcyBvcmlnaW5hdGluZyBpbnNpZGUgYW4gaWZyYW1lLFxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIGNhbGwgdGhlIG9uQ2hhbmdlKCkgZXZlbnQgaW5zaWRlIE5nWm9uZSB0byBmb3JjZSBjaGFuZ2UgcHJvcGFnYXRpb24gdG8gY29uc3VtaW5nIGNvbXBvbmVudHMuXG4gICAgICAgIHRoaXMuI3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiN2aWV3VG9Nb2RlbFVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLnNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiN1cGRhdGVTdHlsZSgpO1xuICAgICAgICB0aGlzLmVkaXRvckZvY3VzU3RyZWFtLm5leHQoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmNsaWNrTGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdG9yRm9jdXNTdHJlYW0ubmV4dCgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiNlZGl0b3JTZXJ2aWNlXG4gICAgICAuYmx1ckxpc3RlbmVyKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvLyBBbmd1bGFyIGRvZXNuJ3QgcnVuIGNoYW5nZSBkZXRlY3Rpb24gZm9yIGNoYW5nZXMgb3JpZ2luYXRpbmcgaW5zaWRlIGFuIGlmcmFtZSxcbiAgICAgICAgLy8gc28gd2UgaGF2ZSB0byBydW4gbWFya0ZvckNoZWNrKCkgaW5zaWRlIHRoZSBOZ1pvbmUgdG8gZm9yY2UgY2hhbmdlIHByb3BhZ2F0aW9uIHRvIGNvbnN1bWluZyBjb21wb25lbnRzLlxuICAgICAgICB0aGlzLiN6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jX29uVG91Y2hlZCgpO1xuICAgICAgICAgIHRoaXMuZWRpdG9yRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmNvbW1hbmRDaGFuZ2VMaXN0ZW5lcigpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy4jdXBkYXRlU3R5bGUoKTtcbiAgICAgICAgdGhpcy4jdmlld1RvTW9kZWxVcGRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmZvY3VzTGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIEFuZ3VsYXIgZG9lc24ndCBydW4gY2hhbmdlIGRldGVjdGlvbiBmb3IgY2hhbmdlcyBvcmlnaW5hdGluZyBpbnNpZGUgYW4gaWZyYW1lLFxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIHJ1biBtYXJrRm9yQ2hlY2soKSBpbnNpZGUgdGhlIE5nWm9uZSB0byBmb3JjZSBjaGFuZ2UgcHJvcGFnYXRpb24gdG8gY29uc3VtaW5nIGNvbXBvbmVudHMuXG4gICAgICAgIHRoaXMuI3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVkaXRvckZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0RWRpdG9ySW5uZXJIdG1sKHRoaXMuI192YWx1ZSk7XG4gICAgdGhpcy4jdXBkYXRlQTExeUF0dHJpYnV0ZXMoKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VkaXRvcigpO1xuICAgIH1cblxuICAgIHRoaXMuI2FwcGx5RGlzYWJsZWRTdGF0ZSgpO1xuXG4gICAgdGhpcy4jaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMuI2ZvY3VzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuI2NoZWNrQXV0b2ZvY3VzQW5kRm9jdXMoKTtcbiAgfVxuXG4gICN1cGRhdGVBMTF5QXR0cmlidXRlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jZWRpdG9yU2VydmljZS5pc0luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRMYWJlbEF0dHJpYnV0ZSh0aGlzLmxhYmVsVGV4dCk7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRFcnJvckF0dHJpYnV0ZXMoXG4gICAgICAgIHRoaXMubGFiZWxUZXh0ID8gdGhpcy5lcnJvcklkIDogJycsXG4gICAgICAgIHRoaXMubmdDb250cm9sLmVycm9ycyxcbiAgICAgICk7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRSZXF1aXJlZEF0dHJpYnV0ZShcbiAgICAgICAgdGhpcy5yZXF1aXJlZFN0YXRlLmlzUmVxdWlyZWQoKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgI3ZpZXdUb01vZGVsVXBkYXRlKGVtaXRDaGFuZ2UgPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldEVkaXRvcklubmVySHRtbCgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGVtaXRDaGFuZ2UpIHtcbiAgICAgIHRoaXMuI19vbkNoYW5nZSh0aGlzLiNfdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gICNhcHBseURpc2FibGVkU3RhdGUoKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIGZvY3VzYWJsZUNoaWxkcmVuIGluc2lkZSB0aGUgaWZyYW1lLlxuICAgIGxldCBmb2N1c2FibGVDaGlsZHJlbjogSFRNTEVsZW1lbnRbXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmlmcmFtZVJlZj8ubmF0aXZlRWxlbWVudC5jb250ZW50RG9jdW1lbnQ/LmJvZHkpIHtcbiAgICAgIGZvY3VzYWJsZUNoaWxkcmVuID0gdGhpcy4jY29yZUFkYXB0ZXJTZXJ2aWNlLmdldEZvY3VzYWJsZUNoaWxkcmVuKFxuICAgICAgICB0aGlzLmlmcmFtZVJlZi5uYXRpdmVFbGVtZW50LmNvbnRlbnREb2N1bWVudC5ib2R5LFxuICAgICAgICB7XG4gICAgICAgICAgaWdub3JlVmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgICBpZ25vcmVUYWJJbmRleDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLiNfZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZGlzYWJsZUVkaXRvcihcbiAgICAgICAgICBmb2N1c2FibGVDaGlsZHJlbixcbiAgICAgICAgICB0aGlzLmlmcmFtZVJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZW5hYmxlRWRpdG9yKFxuICAgICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuLFxuICAgICAgICAgIHRoaXMuaWZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAjX29uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICNfb25DaGFuZ2U6IChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHZhbHVlOiBhbnksXG4gICkgPT4gdm9pZCA9ICgpID0+IHt9O1xufVxuIiwiPGRpdlxuICBjbGFzcz1cInNreS10ZXh0LWVkaXRvclwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnc2t5LXRleHQtZWRpdG9yLWRpc2FibGVkJzogZGlzYWJsZWQsXG4gICAgJ3NreS10ZXh0LWVkaXRvci13cmFwcGVyLWZvY3VzZWQnOiBlZGl0b3JGb2N1c2VkLFxuICAgICdza3ktdGV4dC1lZGl0b3ItaW52YWxpZCc6XG4gICAgICBuZ0NvbnRyb2wuZXJyb3JzICYmIChuZ0NvbnRyb2wudG91Y2hlZCB8fCBuZ0NvbnRyb2wuZGlydHkpXG4gIH1cIlxuPlxuICA8ZGl2IGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWxhYmVsLXdyYXBwZXJcIj5cbiAgICBAaWYgKGxhYmVsVGV4dCkge1xuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwic2t5LWNvbnRyb2wtbGFiZWxcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3NreS1jb250cm9sLWxhYmVsLXJlcXVpcmVkJzogcmVxdWlyZWRTdGF0ZS5pc1JlcXVpcmVkKClcbiAgICAgICAgfVwiXG4gICAgICAgID57eyBsYWJlbFRleHQgfX08L2xhYmVsXG4gICAgICA+XG4gICAgICBAaWYgKGhlbHBQb3BvdmVyQ29udGVudCB8fCBoZWxwS2V5KSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2t5LWNvbnRyb2wtaGVscC1jb250YWluZXJcIj5cbiAgICAgICAgICA8c2t5LWhlbHAtaW5saW5lXG4gICAgICAgICAgICBbaGVscEtleV09XCJoZWxwS2V5XCJcbiAgICAgICAgICAgIFtsYWJlbFRleHRdPVwibGFiZWxUZXh0XCJcbiAgICAgICAgICAgIFtwb3BvdmVyQ29udGVudF09XCJoZWxwUG9wb3ZlckNvbnRlbnRcIlxuICAgICAgICAgICAgW3BvcG92ZXJUaXRsZV09XCJoZWxwUG9wb3ZlclRpdGxlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbiAgQGlmIChcbiAgICAobWVudXMgJiYgbWVudXMubGVuZ3RoKSA+IDAgfHwgKHRvb2xiYXJBY3Rpb25zICYmIHRvb2xiYXJBY3Rpb25zLmxlbmd0aCA+IDApXG4gICkge1xuICAgIDxza3ktdG9vbGJhciBjbGFzcz1cInNreS10ZXh0LWVkaXRvci10b29sYmFyXCI+XG4gICAgICBAaWYgKG1lbnVzICYmIG1lbnVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPHNreS10b29sYmFyLXNlY3Rpb25cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiVGV4dCBmb3JtYXR0aW5nXCJcbiAgICAgICAgICBjbGFzcz1cIm1lbnViYXJcIlxuICAgICAgICAgIHJvbGU9XCJ0b29sYmFyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxza3ktdGV4dC1lZGl0b3ItbWVudWJhclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtlZGl0b3JGb2N1c1N0cmVhbV09XCJlZGl0b3JGb2N1c1N0cmVhbVwiXG4gICAgICAgICAgICBbbWVudXNdPVwibWVudXNcIlxuICAgICAgICAgICAgW21lcmdlRmllbGRzXT1cIm1lcmdlRmllbGRzXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3NreS10b29sYmFyLXNlY3Rpb24+XG4gICAgICB9XG4gICAgICBAaWYgKHRvb2xiYXJBY3Rpb25zICYmIHRvb2xiYXJBY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPHNreS10b29sYmFyLXNlY3Rpb25cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiVGV4dCBmb3JtYXR0aW5nXCJcbiAgICAgICAgICBjbGFzcz1cInRvb2xiYXJcIlxuICAgICAgICAgIHJvbGU9XCJ0b29sYmFyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxza3ktdGV4dC1lZGl0b3ItdG9vbGJhclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtlZGl0b3JGb2N1c1N0cmVhbV09XCJlZGl0b3JGb2N1c1N0cmVhbVwiXG4gICAgICAgICAgICBbZm9udExpc3RdPVwiZm9udExpc3RcIlxuICAgICAgICAgICAgW2ZvbnRTaXplTGlzdF09XCJmb250U2l6ZUxpc3RcIlxuICAgICAgICAgICAgW2xpbmtXaW5kb3dPcHRpb25zXT1cImxpbmtXaW5kb3dPcHRpb25zXCJcbiAgICAgICAgICAgIFt0b29sYmFyQWN0aW9uc109XCJ0b29sYmFyQWN0aW9uc1wiXG4gICAgICAgICAgICBbc3R5bGVTdGF0ZV09XCJpbml0aWFsU3R5bGVTdGF0ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9za3ktdG9vbGJhci1zZWN0aW9uPlxuICAgICAgfVxuICAgIDwvc2t5LXRvb2xiYXI+XG4gIH1cbiAgPGlmcmFtZVxuICAgICNpZnJhbWVcbiAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci13cmFwcGVyXCJcbiAgICBzcmM9XCJhYm91dDpibGFua1wiXG4gICAgYWxsb3c9XCJjbGlwYm9hcmQtcmVhZCAqOyBjbGlwYm9hcmQtd3JpdGUgKlwiXG4gICAgW2F0dHIudGl0bGVdPVwiXG4gICAgICBsYWJlbFRleHQgfHwgKCdza3l1eF90ZXh0X2VkaXRvcl9pZnJhbWVfdGl0bGVfZGVmYXVsdCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgXCJcbiAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImhpbnRUZXh0ID8gaGludFRleHRFbC5pZCA6IHVuZGVmaW5lZFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3NreS10ZXh0LWVkaXRvci13cmFwcGVyLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICB9XCJcbiAgICAobG9hZCk9XCJvbklmcmFtZUxvYWQoKVwiXG4gID5cbiAgPC9pZnJhbWU+XG48L2Rpdj5cbjxkaXZcbiAgI2hpbnRUZXh0RWw9XCJza3lJZFwiXG4gIHNreUlkXG4gIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWhpbnQtdGV4dFwiXG4gIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAnc2t5LWZvbnQtZGVlbXBoYXNpemVkJzogJ2RlZmF1bHQnLFxuICAgICdza3ktZm9udC1oaW50LXRleHQtcyc6ICdtb2Rlcm4nXG4gIH1cIlxuPlxuICB7eyBoaW50VGV4dCB9fVxuPC9kaXY+XG48c2t5LWZvcm0tZXJyb3JzXG4gIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWVycm9yc1wiXG4gIFtpZF09XCJlcnJvcklkXCJcbiAgW2Vycm9yc109XCJuZ0NvbnRyb2wuZXJyb3JzXCJcbiAgW2xhYmVsVGV4dF09XCJsYWJlbFRleHRcIlxuICBbdG91Y2hlZF09XCJuZ0NvbnRyb2wudG91Y2hlZFwiXG4gIFtkaXJ0eV09XCJuZ0NvbnRyb2wuZGlydHlcIlxuPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktZm9ybS1lcnJvclwiIC8+XG48L3NreS1mb3JtLWVycm9ycz5cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { SkyFormErrorModule } from '@skyux/forms';\nimport { SkyTextEditorComponent } from './text-editor.component';\nimport * as i0 from \"@angular/core\";\nexport class SkyTextEditorModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorModule, imports: [SkyTextEditorComponent], exports: [SkyTextEditorComponent, SkyFormErrorModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorModule, imports: [SkyTextEditorComponent, SkyFormErrorModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyTextEditorModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [SkyTextEditorComponent],\n exports: [SkyTextEditorComponent, SkyFormErrorModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBTWpFLE1BQU0sT0FBTyxtQkFBbUI7OEdBQW5CLG1CQUFtQjsrR0FBbkIsbUJBQW1CLFlBSHBCLHNCQUFzQixhQUN0QixzQkFBc0IsRUFBRSxrQkFBa0I7K0dBRXpDLG1CQUFtQixZQUhwQixzQkFBc0IsRUFDRSxrQkFBa0I7OzJGQUV6QyxtQkFBbUI7a0JBSi9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLGtCQUFrQixDQUFDO2lCQUN0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lGb3JtRXJyb3JNb2R1bGUgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi90ZXh0LWVkaXRvci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbU2t5VGV4dEVkaXRvckNvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtTa3lUZXh0RWRpdG9yQ29tcG9uZW50LCBTa3lGb3JtRXJyb3JNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yTW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5dXgtdGV4dC1lZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL3NreXV4LXRleHQtZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i2.SkyTextSanitizationService","i1.SkyTextEditorSelectionService","i2.SkyTextEditorService","take","i1","i3","i5","i2","i4","i6","i7"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skyux-text-editor.mjs","sources":["../tmp-esm2022/lib/modules/text-editor/services/text-sanitization.service.js","../tmp-esm2022/lib/modules/rich-text-display/rich-text-display.component.js","../tmp-esm2022/lib/modules/rich-text-display/rich-text-display.module.js","../tmp-esm2022/lib/modules/shared/sky-text-editor-resources.module.js","../tmp-esm2022/lib/modules/text-editor/defaults/font-list-defaults.js","../tmp-esm2022/lib/modules/text-editor/defaults/font-size-list-defaults.js","../tmp-esm2022/lib/modules/text-editor/defaults/link-window-options-defaults.js","../tmp-esm2022/lib/modules/text-editor/defaults/menu-defaults.js","../tmp-esm2022/lib/modules/text-editor/defaults/style-state-defaults.js","../tmp-esm2022/lib/modules/text-editor/defaults/toolbar-action-defaults.js","../tmp-esm2022/lib/modules/text-editor/url-modal/text-editor-url-target.js","../tmp-esm2022/lib/modules/text-editor/services/text-editor-selection.service.js","../tmp-esm2022/lib/modules/text-editor/services/text-editor.service.js","../tmp-esm2022/lib/modules/text-editor/services/text-editor-adapter.service.js","../tmp-esm2022/lib/modules/text-editor/menubar/text-editor-menubar.component.js","../tmp-esm2022/lib/modules/text-editor/url-modal/text-editor-url-modal-context.js","../tmp-esm2022/lib/modules/text-editor/url-modal/text-editor-url-modal.component.js","../tmp-esm2022/lib/modules/text-editor/toolbar/text-editor-toolbar.component.js","../tmp-esm2022/lib/modules/text-editor/text-editor.component.js","../tmp-esm2022/lib/modules/text-editor/text-editor.module.js","../tmp-esm2022/skyux-text-editor.js"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport createDOMPurify from 'dompurify';\nimport * as i0 from \"@angular/core\";\nconst domPurify = createDOMPurify(window);\ndomPurify.addHook('afterSanitizeAttributes', (node) => {\n // Set all elements owning target to target=_blank\n // so we only allow the target attribute with that value.\n if (node.getAttribute('target')) {\n node.setAttribute('target', '_blank');\n node.setAttribute('rel', 'noopener noreferrer');\n }\n});\n/**\n * The `SkyTextSanitizationService` user the `DOMPurify` library to sanitize strings for use\n * in the DOM. `DOMPurify` allows more customization than Angular's internal `DomSanitizer` so we\n * can preserve `<style>` tags and allow `target` attributes for new tab links.\n * @internal\n */\nexport class SkyTextSanitizationService {\n #allowedAttributes = ['target'];\n /**\n * Returns a sanitized string, allowing target attribute for new tab links.\n */\n sanitize(htmlString) {\n return domPurify.sanitize(htmlString, {\n ADD_ATTR: this.#allowedAttributes,\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextSanitizationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextSanitizationService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextSanitizationService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1zYW5pdGl6YXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3Ivc2VydmljZXMvdGV4dC1zYW5pdGl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sZUFBZSxNQUFNLFdBQVcsQ0FBQzs7QUFFeEMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFhLEVBQUUsRUFBRTtJQUM3RCxrREFBa0Q7SUFDbEQseURBQXlEO0lBQ3pELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDbEQsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUg7Ozs7O0dBS0c7QUFJSCxNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDLGtCQUFrQixHQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFMUM7O09BRUc7SUFDSSxRQUFRLENBQUMsVUFBa0I7UUFDaEMsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUNwQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQVZVLDBCQUEwQjtrSEFBMUIsMEJBQTBCLGNBRnpCLE1BQU07OzJGQUVQLDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCBjcmVhdGVET01QdXJpZnkgZnJvbSAnZG9tcHVyaWZ5JztcblxuY29uc3QgZG9tUHVyaWZ5ID0gY3JlYXRlRE9NUHVyaWZ5KHdpbmRvdyk7XG5cbmRvbVB1cmlmeS5hZGRIb29rKCdhZnRlclNhbml0aXplQXR0cmlidXRlcycsIChub2RlOiBFbGVtZW50KSA9PiB7XG4gIC8vIFNldCBhbGwgZWxlbWVudHMgb3duaW5nIHRhcmdldCB0byB0YXJnZXQ9X2JsYW5rXG4gIC8vIHNvIHdlIG9ubHkgYWxsb3cgdGhlIHRhcmdldCBhdHRyaWJ1dGUgd2l0aCB0aGF0IHZhbHVlLlxuICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZSgncmVsJywgJ25vb3BlbmVyIG5vcmVmZXJyZXInKTtcbiAgfVxufSk7XG5cbi8qKlxuICogVGhlIGBTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZWAgdXNlciB0aGUgYERPTVB1cmlmeWAgbGlicmFyeSB0byBzYW5pdGl6ZSBzdHJpbmdzIGZvciB1c2VcbiAqIGluIHRoZSBET00uIGBET01QdXJpZnlgIGFsbG93cyBtb3JlIGN1c3RvbWl6YXRpb24gdGhhbiBBbmd1bGFyJ3MgaW50ZXJuYWwgYERvbVNhbml0aXplcmAgc28gd2VcbiAqIGNhbiBwcmVzZXJ2ZSBgPHN0eWxlPmAgdGFncyBhbmQgYWxsb3cgYHRhcmdldGAgYXR0cmlidXRlcyBmb3IgbmV3IHRhYiBsaW5rcy5cbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5VGV4dFNhbml0aXphdGlvblNlcnZpY2Uge1xuICAjYWxsb3dlZEF0dHJpYnV0ZXM6IHN0cmluZ1tdID0gWyd0YXJnZXQnXTtcblxuICAvKipcbiAgICogUmV0dXJucyBhIHNhbml0aXplZCBzdHJpbmcsIGFsbG93aW5nIHRhcmdldCBhdHRyaWJ1dGUgZm9yIG5ldyB0YWIgbGlua3MuXG4gICAqL1xuICBwdWJsaWMgc2FuaXRpemUoaHRtbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZG9tUHVyaWZ5LnNhbml0aXplKGh0bWxTdHJpbmcsIHtcbiAgICAgIEFERF9BVFRSOiB0aGlzLiNhbGxvd2VkQXR0cmlidXRlcyxcbiAgICB9KTtcbiAgfVxufVxuIl19","import { Component, Input } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/platform-browser\";\nimport * as i2 from \"../text-editor/services/text-sanitization.service\";\nexport class SkyRichTextDisplayComponent {\n /**\n * The rich text to display.\n */\n set richText(value) {\n if (value) {\n const cleaned = this.#sanitizationService.sanitize(value);\n /* istanbul ignore else */\n if (cleaned !== this.#_richText) {\n this.#_richText = cleaned;\n // Text has already been sanitized with DOMPurifier.\n // Tell Angular to bypass its own internal sanitization.\n this.sanitizedText = this.#sanitizer.bypassSecurityTrustHtml(cleaned);\n }\n }\n else {\n this.#_richText = '';\n this.sanitizedText = '';\n }\n }\n #_richText;\n #sanitizer;\n #sanitizationService;\n constructor(sanitizer, sanitizationService) {\n this.sanitizedText = '';\n this.#_richText = '';\n this.#sanitizer = sanitizer;\n this.#sanitizationService = sanitizationService;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyRichTextDisplayComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.SkyTextSanitizationService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.0\", type: SkyRichTextDisplayComponent, isStandalone: false, selector: \"sky-rich-text-display\", inputs: { richText: \"richText\" }, ngImport: i0, template: \"<span class=\\\"sky-rich-text-display-text\\\" [innerHTML]=\\\"sanitizedText\\\"></span>\\n\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyRichTextDisplayComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-rich-text-display', standalone: false, template: \"<span class=\\\"sky-rich-text-display-text\\\" [innerHTML]=\\\"sanitizedText\\\"></span>\\n\" }]\n }], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i2.SkyTextSanitizationService }], propDecorators: { richText: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LWRpc3BsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy9yaWNoLXRleHQtZGlzcGxheS9yaWNoLXRleHQtZGlzcGxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3JpY2gtdGV4dC1kaXNwbGF5L3JpY2gtdGV4dC1kaXNwbGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBVWpELE1BQU0sT0FBTywyQkFBMkI7SUFDdEM7O09BRUc7SUFDSCxJQUNXLFFBQVEsQ0FBQyxLQUF5QjtRQUMzQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCwwQkFBMEI7WUFDMUIsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztnQkFFMUIsb0RBQW9EO2dCQUNwRCx3REFBd0Q7Z0JBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RSxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUlELFVBQVUsQ0FBTTtJQUVoQixVQUFVLENBQWU7SUFDekIsb0JBQW9CLENBQTZCO0lBRWpELFlBQ0UsU0FBdUIsRUFDdkIsbUJBQStDO1FBVDFDLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBRXBDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFTZCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7SUFDbEQsQ0FBQzs4R0FuQ1UsMkJBQTJCO2tHQUEzQiwyQkFBMkIsb0hDVnhDLG9GQUNBOzsyRkRTYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBRXJCLEtBQUs7MEhBT04sUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgU2t5VGV4dFNhbml0aXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi90ZXh0LWVkaXRvci9zZXJ2aWNlcy90ZXh0LXNhbml0aXphdGlvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXJpY2gtdGV4dC1kaXNwbGF5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JpY2gtdGV4dC1kaXNwbGF5LmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFNreVJpY2hUZXh0RGlzcGxheUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgcmljaCB0ZXh0IHRvIGRpc3BsYXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHJpY2hUZXh0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnN0IGNsZWFuZWQgPSB0aGlzLiNzYW5pdGl6YXRpb25TZXJ2aWNlLnNhbml0aXplKHZhbHVlKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoY2xlYW5lZCAhPT0gdGhpcy4jX3JpY2hUZXh0KSB7XG4gICAgICAgIHRoaXMuI19yaWNoVGV4dCA9IGNsZWFuZWQ7XG5cbiAgICAgICAgLy8gVGV4dCBoYXMgYWxyZWFkeSBiZWVuIHNhbml0aXplZCB3aXRoIERPTVB1cmlmaWVyLlxuICAgICAgICAvLyBUZWxsIEFuZ3VsYXIgdG8gYnlwYXNzIGl0cyBvd24gaW50ZXJuYWwgc2FuaXRpemF0aW9uLlxuICAgICAgICB0aGlzLnNhbml0aXplZFRleHQgPSB0aGlzLiNzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoY2xlYW5lZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI19yaWNoVGV4dCA9ICcnO1xuICAgICAgdGhpcy5zYW5pdGl6ZWRUZXh0ID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhbml0aXplZFRleHQ6IFNhZmVIdG1sID0gJyc7XG5cbiAgI19yaWNoVGV4dCA9ICcnO1xuXG4gICNzYW5pdGl6ZXI6IERvbVNhbml0aXplcjtcbiAgI3Nhbml0aXphdGlvblNlcnZpY2U6IFNreVRleHRTYW5pdGl6YXRpb25TZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHNhbml0aXphdGlvblNlcnZpY2U6IFNreVRleHRTYW5pdGl6YXRpb25TZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLiNzYW5pdGl6ZXIgPSBzYW5pdGl6ZXI7XG4gICAgdGhpcy4jc2FuaXRpemF0aW9uU2VydmljZSA9IHNhbml0aXphdGlvblNlcnZpY2U7XG4gIH1cbn1cbiIsIjxzcGFuIGNsYXNzPVwic2t5LXJpY2gtdGV4dC1kaXNwbGF5LXRleHRcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZFRleHRcIj48L3NwYW4+XG4iXX0=","import { NgModule } from '@angular/core';\nimport { SkyRichTextDisplayComponent } from './rich-text-display.component';\nimport * as i0 from \"@angular/core\";\nexport class SkyRichTextDisplayModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyRichTextDisplayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyRichTextDisplayModule, declarations: [SkyRichTextDisplayComponent], exports: [SkyRichTextDisplayComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyRichTextDisplayModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyRichTextDisplayModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [SkyRichTextDisplayComponent],\n declarations: [SkyRichTextDisplayComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LWRpc3BsYXkubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy9yaWNoLXRleHQtZGlzcGxheS9yaWNoLXRleHQtZGlzcGxheS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFNNUUsTUFBTSxPQUFPLHdCQUF3Qjs4R0FBeEIsd0JBQXdCOytHQUF4Qix3QkFBd0IsaUJBRnBCLDJCQUEyQixhQURoQywyQkFBMkI7K0dBRzFCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFKcEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztvQkFDdEMsWUFBWSxFQUFFLENBQUMsMkJBQTJCLENBQUM7aUJBQzVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5UmljaFRleHREaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi9yaWNoLXRleHQtZGlzcGxheS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbU2t5UmljaFRleHREaXNwbGF5Q29tcG9uZW50XSxcbiAgZGVjbGFyYXRpb25zOiBbU2t5UmljaFRleHREaXNwbGF5Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UmljaFRleHREaXNwbGF5TW9kdWxlIHt9XG4iXX0=","/* istanbul ignore file */\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-text-editor' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport { SkyI18nModule, SkyLibResourcesService, } from '@skyux/i18n';\nimport * as i0 from \"@angular/core\";\nconst RESOURCES = {\n 'EN-US': {\n skyux_text_editor_format_menu_action_bold_label: { message: 'Bold' },\n skyux_text_editor_format_menu_action_bold_key_shortcut: {\n message: 'Ctrl+B',\n },\n skyux_text_editor_format_menu_action_italic_label: { message: 'Italic' },\n skyux_text_editor_format_menu_action_italic_key_shortcut: {\n message: 'Ctrl+I',\n },\n skyux_text_editor_format_menu_action_underline_label: {\n message: 'Underline',\n },\n skyux_text_editor_format_menu_action_underline_key_shortcut: {\n message: 'Ctrl+U',\n },\n skyux_text_editor_format_menu_action_strikethrough_label: {\n message: 'Strikethrough',\n },\n skyux_text_editor_format_menu_action_clear_formatting_label: {\n message: 'Clear formatting',\n },\n skyux_text_editor_edit_menu_action_undo_label: { message: 'Undo' },\n skyux_text_editor_edit_menu_action_undo_key_shortcut: { message: 'Ctrl+Z' },\n skyux_text_editor_edit_menu_action_redo_label: { message: 'Redo' },\n skyux_text_editor_edit_menu_action_redo_key_shortcut: { message: 'Ctrl+Y' },\n skyux_text_editor_edit_menu_action_cut_label: { message: 'Cut' },\n skyux_text_editor_edit_menu_action_cut_key_shortcut: { message: 'Ctrl+X' },\n skyux_text_editor_edit_menu_action_copy_label: { message: 'Copy' },\n skyux_text_editor_edit_menu_action_copy_key_shortcut: { message: 'Ctrl+C' },\n skyux_text_editor_edit_menu_action_paste_label: { message: 'Paste' },\n skyux_text_editor_edit_menu_action_paste_key_shortcut: {\n message: 'Ctrl+V',\n },\n skyux_text_editor_edit_menu_action_select_all_label: {\n message: 'Select all',\n },\n skyux_text_editor_edit_menu_action_select_all_key_shortcut: {\n message: 'Ctrl+A',\n },\n skyux_text_editor_iframe_title_default: { message: 'Text editor' },\n skyux_text_editor_menubar_dropdown_button_edit_label: { message: 'Edit' },\n skyux_text_editor_menubar_dropdown_button_format_label: {\n message: 'Format',\n },\n skyux_text_editor_menubar_dropdown_button_insert_label: {\n message: 'Insert merge field',\n },\n skyux_text_editor_paste_incompatibility_error: {\n message: 'Direct clipboard access is not supported by this browser. Use the Ctrl+X/C/V keyboard shortcuts instead.',\n },\n skyux_text_editor_url_modal_header_label: { message: 'Create link' },\n skyux_text_editor_url_modal_url_label: {\n message: 'Enter a URL to link to:',\n },\n skyux_text_editor_url_modal_open_label: {\n message: 'Where should it open?',\n },\n skyux_text_editor_url_modal_current_option_label: {\n message: 'Current window',\n },\n skyux_text_editor_url_modal_open_in_new_window_label: {\n message: 'This link will open in a new window.',\n },\n skyux_text_editor_url_modal_new_option_label: { message: 'New window' },\n skyux_text_editor_url_modal_email_label: { message: 'Email address' },\n skyux_text_editor_url_modal_subject_label: { message: 'Subject line' },\n skyux_text_editor_url_modal_save_button_label: { message: 'Save' },\n skyux_text_editor_url_modal_cancel_button_label: { message: 'Cancel' },\n },\n 'FR-CA': {\n skyux_text_editor_format_menu_action_bold_label: { message: 'Gras' },\n skyux_text_editor_format_menu_action_bold_key_shortcut: {\n message: 'Ctrl+B',\n },\n skyux_text_editor_format_menu_action_italic_label: { message: 'Italique' },\n skyux_text_editor_format_menu_action_italic_key_shortcut: {\n message: 'Ctrl+I',\n },\n skyux_text_editor_format_menu_action_underline_label: {\n message: 'Souligner',\n },\n skyux_text_editor_format_menu_action_underline_key_shortcut: {\n message: 'Ctrl+U',\n },\n skyux_text_editor_format_menu_action_strikethrough_label: {\n message: 'Barrer',\n },\n skyux_text_editor_format_menu_action_clear_formatting_label: {\n message: 'Supprimer la mise en forme',\n },\n skyux_text_editor_edit_menu_action_undo_label: { message: 'Annuler' },\n skyux_text_editor_edit_menu_action_undo_key_shortcut: { message: 'Ctrl+Z' },\n skyux_text_editor_edit_menu_action_redo_label: { message: 'Rétablir' },\n skyux_text_editor_edit_menu_action_redo_key_shortcut: { message: 'Ctrl+Y' },\n skyux_text_editor_edit_menu_action_cut_label: { message: 'Couper' },\n skyux_text_editor_edit_menu_action_cut_key_shortcut: { message: 'Ctrl+X' },\n skyux_text_editor_edit_menu_action_copy_label: { message: 'Copier' },\n skyux_text_editor_edit_menu_action_copy_key_shortcut: { message: 'Ctrl+C' },\n skyux_text_editor_edit_menu_action_paste_label: { message: 'Coller' },\n skyux_text_editor_edit_menu_action_paste_key_shortcut: {\n message: 'Ctrl+V',\n },\n skyux_text_editor_edit_menu_action_select_all_label: {\n message: 'Sélectionner tout',\n },\n skyux_text_editor_edit_menu_action_select_all_key_shortcut: {\n message: 'Ctrl+A',\n },\n skyux_text_editor_iframe_title_default: { message: 'Éditeur de texte' },\n skyux_text_editor_menubar_dropdown_button_edit_label: {\n message: 'Modifier',\n },\n skyux_text_editor_menubar_dropdown_button_format_label: {\n message: 'Format',\n },\n skyux_text_editor_menubar_dropdown_button_insert_label: {\n message: 'Insérer un champ de fusion',\n },\n skyux_text_editor_paste_incompatibility_error: {\n message: 'L’accès direct au presse-papiers n’est pas pris en charge par ce navigateur. Utilisez plutôt les raccourcis-clavier Ctrl+X/C/V.',\n },\n skyux_text_editor_url_modal_header_label: { message: 'Créer le lien' },\n skyux_text_editor_url_modal_url_label: {\n message: 'Saisir une URL à lier à :',\n },\n skyux_text_editor_url_modal_open_label: {\n message: 'Où devrait-elle s’ouvrir?',\n },\n skyux_text_editor_url_modal_current_option_label: {\n message: 'Fenêtre actuelle',\n },\n skyux_text_editor_url_modal_open_in_new_window_label: {\n message: 'Ce lien s’ouvrira dans une nouvelle fenêtre',\n },\n skyux_text_editor_url_modal_new_option_label: {\n message: 'Nouvelle fenêtre',\n },\n skyux_text_editor_url_modal_email_label: { message: 'Adresse de courriel' },\n skyux_text_editor_url_modal_subject_label: {\n message: 'Ligne de mention objet',\n },\n skyux_text_editor_url_modal_save_button_label: { message: 'Sauvegarder' },\n skyux_text_editor_url_modal_cancel_button_label: { message: 'Annuler' },\n },\n};\nSkyLibResourcesService.addResources(RESOURCES);\n/**\n * Import into any component library module that needs to use resource strings.\n */\nexport class SkyTextEditorResourcesModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorResourcesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorResourcesModule, exports: [SkyI18nModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorResourcesModule, imports: [SkyI18nModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorResourcesModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [SkyI18nModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5LXRleHQtZWRpdG9yLXJlc291cmNlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3NoYXJlZC9za3ktdGV4dC1lZGl0b3ItcmVzb3VyY2VzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxhQUFhLEVBRWIsc0JBQXNCLEdBQ3ZCLE1BQU0sYUFBYSxDQUFDOztBQUVyQixNQUFNLFNBQVMsR0FBb0M7SUFDakQsT0FBTyxFQUFFO1FBQ1AsK0NBQStDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQ3BFLHNEQUFzRCxFQUFFO1lBQ3RELE9BQU8sRUFBRSxRQUFRO1NBQ2xCO1FBQ0QsaURBQWlELEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO1FBQ3hFLHdEQUF3RCxFQUFFO1lBQ3hELE9BQU8sRUFBRSxRQUFRO1NBQ2xCO1FBQ0Qsb0RBQW9ELEVBQUU7WUFDcEQsT0FBTyxFQUFFLFdBQVc7U0FDckI7UUFDRCwyREFBMkQsRUFBRTtZQUMzRCxPQUFPLEVBQUUsUUFBUTtTQUNsQjtRQUNELHdEQUF3RCxFQUFFO1lBQ3hELE9BQU8sRUFBRSxlQUFlO1NBQ3pCO1FBQ0QsMkRBQTJELEVBQUU7WUFDM0QsT0FBTyxFQUFFLGtCQUFrQjtTQUM1QjtRQUNELDZDQUE2QyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtRQUNsRSxvREFBb0QsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7UUFDM0UsNkNBQTZDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQ2xFLG9EQUFvRCxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEs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QTRCLFlBRjdCLGFBQWE7K0dBRVosNEJBQTRCLFlBRjdCLGFBQWE7OzJGQUVaLDRCQUE0QjtrQkFIeEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbi8qKlxuICogTk9USUNFOiBETyBOT1QgTU9ESUZZIFRISVMgRklMRSFcbiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgd2VyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieVxuICogdGhlICduZyBnZW5lcmF0ZSBAc2t5dXgvaTE4bjpsaWItcmVzb3VyY2VzLW1vZHVsZSBsaWIvbW9kdWxlcy9zaGFyZWQvc2t5LXRleHQtZWRpdG9yJyBzY2hlbWF0aWMuXG4gKiBUbyB1cGRhdGUgdGhpcyBmaWxlLCBzaW1wbHkgcmVydW4gdGhlIGNvbW1hbmQuXG4gKi9cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTa3lJMThuTW9kdWxlLFxuICBTa3lMaWJSZXNvdXJjZXMsXG4gIFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG59IGZyb20gJ0Bza3l1eC9pMThuJztcblxuY29uc3QgUkVTT1VSQ0VTOiBSZWNvcmQ8c3RyaW5nLCBTa3lMaWJSZXNvdXJjZXM+ID0ge1xuICAnRU4tVVMnOiB7XG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZm9ybWF0X21lbnVfYWN0aW9uX2JvbGRfbGFiZWw6IHsgbWVzc2FnZTogJ0JvbGQnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZm9ybWF0X21lbnVfYWN0aW9uX2JvbGRfa2V5X3Nob3J0Y3V0OiB7XG4gICAgICBtZXNzYWdlOiAnQ3RybCtCJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9pdGFsaWNfbGFiZWw6IHsgbWVzc2FnZTogJ0l0YWxpYycgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25faXRhbGljX2tleV9zaG9ydGN1dDoge1xuICAgICAgbWVzc2FnZTogJ0N0cmwrSScsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25fdW5kZXJsaW5lX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnVW5kZXJsaW5lJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl91bmRlcmxpbmVfa2V5X3Nob3J0Y3V0OiB7XG4gICAgICBtZXNzYWdlOiAnQ3RybCtVJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9zdHJpa2V0aHJvdWdoX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnU3RyaWtldGhyb3VnaCcsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25fY2xlYXJfZm9ybWF0dGluZ19sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ0NsZWFyIGZvcm1hdHRpbmcnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl91bmRvX2xhYmVsOiB7IG1lc3NhZ2U6ICdVbmRvJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fdW5kb19rZXlfc2hvcnRjdXQ6IHsgbWVzc2FnZTogJ0N0cmwrWicgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3JlZG9fbGFiZWw6IHsgbWVzc2FnZTogJ1JlZG8nIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9yZWRvX2tleV9zaG9ydGN1dDogeyBtZXNzYWdlOiAnQ3RybCtZJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fY3V0X2xhYmVsOiB7IG1lc3NhZ2U6ICdDdXQnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9jdXRfa2V5X3Nob3J0Y3V0OiB7IG1lc3NhZ2U6ICdDdHJsK1gnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9jb3B5X2xhYmVsOiB7IG1lc3NhZ2U6ICdDb3B5JyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fY29weV9rZXlfc2hvcnRjdXQ6IHsgbWVzc2FnZTogJ0N0cmwrQycgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3Bhc3RlX2xhYmVsOiB7IG1lc3NhZ2U6ICdQYXN0ZScgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3Bhc3RlX2tleV9zaG9ydGN1dDoge1xuICAgICAgbWVzc2FnZTogJ0N0cmwrVicsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3NlbGVjdF9hbGxfbGFiZWw6IHtcbiAgICAgIG1lc3NhZ2U6ICdTZWxlY3QgYWxsJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fc2VsZWN0X2FsbF9rZXlfc2hvcnRjdXQ6IHtcbiAgICAgIG1lc3NhZ2U6ICdDdHJsK0EnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfaWZyYW1lX3RpdGxlX2RlZmF1bHQ6IHsgbWVzc2FnZTogJ1RleHQgZWRpdG9yJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX21lbnViYXJfZHJvcGRvd25fYnV0dG9uX2VkaXRfbGFiZWw6IHsgbWVzc2FnZTogJ0VkaXQnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfbWVudWJhcl9kcm9wZG93bl9idXR0b25fZm9ybWF0X2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnRm9ybWF0JyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX21lbnViYXJfZHJvcGRvd25fYnV0dG9uX2luc2VydF9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ0luc2VydCBtZXJnZSBmaWVsZCcsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9wYXN0ZV9pbmNvbXBhdGliaWxpdHlfZXJyb3I6IHtcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgICdEaXJlY3QgY2xpcGJvYXJkIGFjY2VzcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci4gVXNlIHRoZSBDdHJsK1gvQy9WIGtleWJvYXJkIHNob3J0Y3V0cyBpbnN0ZWFkLicsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfaGVhZGVyX2xhYmVsOiB7IG1lc3NhZ2U6ICdDcmVhdGUgbGluaycgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfdXJsX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnRW50ZXIgYSBVUkwgdG8gbGluayB0bzonLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX29wZW5fbGFiZWw6IHtcbiAgICAgIG1lc3NhZ2U6ICdXaGVyZSBzaG91bGQgaXQgb3Blbj8nLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX2N1cnJlbnRfb3B0aW9uX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnQ3VycmVudCB3aW5kb3cnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX29wZW5faW5fbmV3X3dpbmRvd19sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ1RoaXMgbGluayB3aWxsIG9wZW4gaW4gYSBuZXcgd2luZG93LicsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfbmV3X29wdGlvbl9sYWJlbDogeyBtZXNzYWdlOiAnTmV3IHdpbmRvdycgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfZW1haWxfbGFiZWw6IHsgbWVzc2FnZTogJ0VtYWlsIGFkZHJlc3MnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX3N1YmplY3RfbGFiZWw6IHsgbWVzc2FnZTogJ1N1YmplY3QgbGluZScgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfc2F2ZV9idXR0b25fbGFiZWw6IHsgbWVzc2FnZTogJ1NhdmUnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX2NhbmNlbF9idXR0b25fbGFiZWw6IHsgbWVzc2FnZTogJ0NhbmNlbCcgfSxcbiAgfSxcbiAgJ0ZSLUNBJzoge1xuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9ib2xkX2xhYmVsOiB7IG1lc3NhZ2U6ICdHcmFzJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9ib2xkX2tleV9zaG9ydGN1dDoge1xuICAgICAgbWVzc2FnZTogJ0N0cmwrQicsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25faXRhbGljX2xhYmVsOiB7IG1lc3NhZ2U6ICdJdGFsaXF1ZScgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25faXRhbGljX2tleV9zaG9ydGN1dDoge1xuICAgICAgbWVzc2FnZTogJ0N0cmwrSScsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25fdW5kZXJsaW5lX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnU291bGlnbmVyJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl91bmRlcmxpbmVfa2V5X3Nob3J0Y3V0OiB7XG4gICAgICBtZXNzYWdlOiAnQ3RybCtVJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9zdHJpa2V0aHJvdWdoX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnQmFycmVyJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9jbGVhcl9mb3JtYXR0aW5nX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnU3VwcHJpbWVyIGxhIG1pc2UgZW4gZm9ybWUnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl91bmRvX2xhYmVsOiB7IG1lc3NhZ2U6ICdBbm51bGVyJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fdW5kb19rZXlfc2hvcnRjdXQ6IHsgbWVzc2FnZTogJ0N0cmwrWicgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3JlZG9fbGFiZWw6IHsgbWVzc2FnZTogJ1LDqXRhYmxpcicgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3JlZG9fa2V5X3Nob3J0Y3V0OiB7IG1lc3NhZ2U6ICdDdHJsK1knIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9jdXRfbGFiZWw6IHsgbWVzc2FnZTogJ0NvdXBlcicgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX2N1dF9rZXlfc2hvcnRjdXQ6IHsgbWVzc2FnZTogJ0N0cmwrWCcgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX2NvcHlfbGFiZWw6IHsgbWVzc2FnZTogJ0NvcGllcicgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX2NvcHlfa2V5X3Nob3J0Y3V0OiB7IG1lc3NhZ2U6ICdDdHJsK0MnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9wYXN0ZV9sYWJlbDogeyBtZXNzYWdlOiAnQ29sbGVyJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fcGFzdGVfa2V5X3Nob3J0Y3V0OiB7XG4gICAgICBtZXNzYWdlOiAnQ3RybCtWJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fc2VsZWN0X2FsbF9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ1PDqWxlY3Rpb25uZXIgdG91dCcsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3NlbGVjdF9hbGxfa2V5X3Nob3J0Y3V0OiB7XG4gICAgICBtZXNzYWdlOiAnQ3RybCtBJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2lmcmFtZV90aXRsZV9kZWZhdWx0OiB7IG1lc3NhZ2U6ICfDiWRpdGV1ciBkZSB0ZXh0ZScgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9tZW51YmFyX2Ryb3Bkb3duX2J1dHRvbl9lZGl0X2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnTW9kaWZpZXInLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfbWVudWJhcl9kcm9wZG93bl9idXR0b25fZm9ybWF0X2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnRm9ybWF0JyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX21lbnViYXJfZHJvcGRvd25fYnV0dG9uX2luc2VydF9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ0luc8OpcmVyIHVuIGNoYW1wIGRlIGZ1c2lvbicsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9wYXN0ZV9pbmNvbXBhdGliaWxpdHlfZXJyb3I6IHtcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgICdM4oCZYWNjw6hzIGRpcmVjdCBhdSBwcmVzc2UtcGFwaWVycyBu4oCZZXN0IHBhcyBwcmlzIGVuIGNoYXJnZSBwYXIgY2UgbmF2aWdhdGV1ci4gVXRpbGlzZXogcGx1dMO0dCBsZXMgcmFjY291cmNpcy1jbGF2aWVyIEN0cmwrWC9DL1YuJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9oZWFkZXJfbGFiZWw6IHsgbWVzc2FnZTogJ0Nyw6llciBsZSBsaWVuJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF91cmxfbGFiZWw6IHtcbiAgICAgIG1lc3NhZ2U6ICdTYWlzaXIgdW5lIFVSTCDDoCBsaWVyIMOgwqA6JyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9vcGVuX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnT8O5IGRldnJhaXQtZWxsZSBz4oCZb3V2cmlyPycsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfY3VycmVudF9vcHRpb25fbGFiZWw6IHtcbiAgICAgIG1lc3NhZ2U6ICdGZW7DqnRyZSBhY3R1ZWxsZScsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfb3Blbl9pbl9uZXdfd2luZG93X2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnQ2UgbGllbiBz4oCZb3V2cmlyYSBkYW5zIHVuZSBub3V2ZWxsZSBmZW7DqnRyZScsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfbmV3X29wdGlvbl9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ05vdXZlbGxlIGZlbsOqdHJlJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9lbWFpbF9sYWJlbDogeyBtZXNzYWdlOiAnQWRyZXNzZSBkZSBjb3VycmllbCcgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfc3ViamVjdF9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ0xpZ25lIGRlIG1lbnRpb24gb2JqZXQnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX3NhdmVfYnV0dG9uX2xhYmVsOiB7IG1lc3NhZ2U6ICdTYXV2ZWdhcmRlcicgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfY2FuY2VsX2J1dHRvbl9sYWJlbDogeyBtZXNzYWdlOiAnQW5udWxlcicgfSxcbiAgfSxcbn07XG5cblNreUxpYlJlc291cmNlc1NlcnZpY2UuYWRkUmVzb3VyY2VzKFJFU09VUkNFUyk7XG5cbi8qKlxuICogSW1wb3J0IGludG8gYW55IGNvbXBvbmVudCBsaWJyYXJ5IG1vZHVsZSB0aGF0IG5lZWRzIHRvIHVzZSByZXNvdXJjZSBzdHJpbmdzLlxuICovXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbU2t5STE4bk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JSZXNvdXJjZXNNb2R1bGUge31cbiJdfQ==","/**\n * @internal\n */\nexport const FONT_LIST_DEFAULTS = [\n {\n name: 'Blackbaud Sans',\n value: '\"Blackbaud Sans\", Arial, sans-serif',\n },\n {\n name: 'Arial',\n value: 'Arial',\n },\n {\n name: 'Arial Black',\n value: '\"Arial Black\"',\n },\n {\n name: 'Courier New',\n value: '\"Courier New\"',\n },\n {\n name: 'Georgia',\n value: 'Georgia, serif',\n },\n {\n name: 'Tahoma',\n value: 'Tahoma, Geneva, sans-serif',\n },\n {\n name: 'Times New Roman',\n value: '\"Times New Roman\"',\n },\n {\n name: 'Trebuchet MS',\n value: '\"Trebuchet MS\", sans-serif',\n },\n {\n name: 'Verdana',\n value: 'Verdana, Geneva, sans-serif',\n },\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9udC1saXN0LWRlZmF1bHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci9kZWZhdWx0cy9mb250LWxpc3QtZGVmYXVsdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBd0I7SUFDckQ7UUFDRSxJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLEtBQUssRUFBRSxxQ0FBcUM7S0FDN0M7SUFDRDtRQUNFLElBQUksRUFBRSxPQUFPO1FBQ2IsS0FBSyxFQUFFLE9BQU87S0FDZjtJQUNEO1FBQ0UsSUFBSSxFQUFFLGFBQWE7UUFDbkIsS0FBSyxFQUFFLGVBQWU7S0FDdkI7SUFDRDtRQUNFLElBQUksRUFBRSxhQUFhO1FBQ25CLEtBQUssRUFBRSxlQUFlO0tBQ3ZCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEtBQUssRUFBRSxnQkFBZ0I7S0FDeEI7SUFDRDtRQUNFLElBQUksRUFBRSxRQUFRO1FBQ2QsS0FBSyxFQUFFLDRCQUE0QjtLQUNwQztJQUNEO1FBQ0UsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixLQUFLLEVBQUUsbUJBQW1CO0tBQzNCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsY0FBYztRQUNwQixLQUFLLEVBQUUsNEJBQTRCO0tBQ3BDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEtBQUssRUFBRSw2QkFBNkI7S0FDckM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2t5VGV4dEVkaXRvckZvbnQgfSBmcm9tICcuLi90eXBlcy9mb250LXN0YXRlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEZPTlRfTElTVF9ERUZBVUxUUzogU2t5VGV4dEVkaXRvckZvbnRbXSA9IFtcbiAge1xuICAgIG5hbWU6ICdCbGFja2JhdWQgU2FucycsXG4gICAgdmFsdWU6ICdcIkJsYWNrYmF1ZCBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdBcmlhbCcsXG4gICAgdmFsdWU6ICdBcmlhbCcsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnQXJpYWwgQmxhY2snLFxuICAgIHZhbHVlOiAnXCJBcmlhbCBCbGFja1wiJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdDb3VyaWVyIE5ldycsXG4gICAgdmFsdWU6ICdcIkNvdXJpZXIgTmV3XCInLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ0dlb3JnaWEnLFxuICAgIHZhbHVlOiAnR2VvcmdpYSwgc2VyaWYnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1RhaG9tYScsXG4gICAgdmFsdWU6ICdUYWhvbWEsIEdlbmV2YSwgc2Fucy1zZXJpZicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnVGltZXMgTmV3IFJvbWFuJyxcbiAgICB2YWx1ZTogJ1wiVGltZXMgTmV3IFJvbWFuXCInLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1RyZWJ1Y2hldCBNUycsXG4gICAgdmFsdWU6ICdcIlRyZWJ1Y2hldCBNU1wiLCBzYW5zLXNlcmlmJyxcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdWZXJkYW5hJyxcbiAgICB2YWx1ZTogJ1ZlcmRhbmEsIEdlbmV2YSwgc2Fucy1zZXJpZicsXG4gIH0sXG5dO1xuIl19","/**\n * @internal\n */\nexport const FONT_SIZE_LIST_DEFAULTS = [\n 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 36, 48,\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9udC1zaXplLWxpc3QtZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL2RlZmF1bHRzL2ZvbnQtc2l6ZS1saXN0LWRlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQWE7SUFDL0MsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0NBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgRk9OVF9TSVpFX0xJU1RfREVGQVVMVFM6IG51bWJlcltdID0gW1xuICA2LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTgsIDIwLCAyMiwgMjQsIDI2LCAyOCwgMzYsIDQ4LFxuXTtcbiJdfQ==","export const LINK_WINDOW_OPTIONS_DEFAULTS = ['new', 'existing'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay13aW5kb3ctb3B0aW9ucy1kZWZhdWx0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3IvZGVmYXVsdHMvbGluay13aW5kb3ctb3B0aW9ucy1kZWZhdWx0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FDdkMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lUZXh0RWRpdG9yTGlua1dpbmRvd09wdGlvbnNUeXBlIH0gZnJvbSAnLi4vdHlwZXMvbGluay13aW5kb3ctb3B0aW9ucy10eXBlJztcblxuZXhwb3J0IGNvbnN0IExJTktfV0lORE9XX09QVElPTlNfREVGQVVMVFM6IFNreVRleHRFZGl0b3JMaW5rV2luZG93T3B0aW9uc1R5cGVbXSA9XG4gIFsnbmV3JywgJ2V4aXN0aW5nJ107XG4iXX0=","/**\n * @internal\n */\nexport const MENU_DEFAULTS = ['edit', 'format'];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1kZWZhdWx0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3IvZGVmYXVsdHMvbWVudS1kZWZhdWx0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBNEIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lUZXh0RWRpdG9yTWVudVR5cGUgfSBmcm9tICcuLi90eXBlcy9tZW51LXR5cGUnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTUVOVV9ERUZBVUxUUzogU2t5VGV4dEVkaXRvck1lbnVUeXBlW10gPSBbJ2VkaXQnLCAnZm9ybWF0J107XG4iXX0=","import { FONT_LIST_DEFAULTS } from './font-list-defaults';\n/**\n * @internal\n */\nexport const STYLE_STATE_DEFAULTS = {\n backColor: 'rgba(0, 0, 0, 0)',\n fontColor: '#000',\n fontSize: 14,\n font: FONT_LIST_DEFAULTS[0].value,\n boldState: false,\n italicState: false,\n underlineState: false,\n linkState: false,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUtc3RhdGUtZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL2RlZmF1bHRzL3N0eWxlLXN0YXRlLWRlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQTRCO0lBQzNELFNBQVMsRUFBRSxrQkFBa0I7SUFDN0IsU0FBUyxFQUFFLE1BQU07SUFDakIsUUFBUSxFQUFFLEVBQUU7SUFDWixJQUFJLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztJQUNqQyxTQUFTLEVBQUUsS0FBSztJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixjQUFjLEVBQUUsS0FBSztJQUNyQixTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUgfSBmcm9tICcuLi90eXBlcy9zdHlsZS1zdGF0ZSc7XG5cbmltcG9ydCB7IEZPTlRfTElTVF9ERUZBVUxUUyB9IGZyb20gJy4vZm9udC1saXN0LWRlZmF1bHRzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFNUWUxFX1NUQVRFX0RFRkFVTFRTOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSA9IHtcbiAgYmFja0NvbG9yOiAncmdiYSgwLCAwLCAwLCAwKScsXG4gIGZvbnRDb2xvcjogJyMwMDAnLFxuICBmb250U2l6ZTogMTQsXG4gIGZvbnQ6IEZPTlRfTElTVF9ERUZBVUxUU1swXS52YWx1ZSxcbiAgYm9sZFN0YXRlOiBmYWxzZSxcbiAgaXRhbGljU3RhdGU6IGZhbHNlLFxuICB1bmRlcmxpbmVTdGF0ZTogZmFsc2UsXG4gIGxpbmtTdGF0ZTogZmFsc2UsXG59O1xuIl19","/**\n * @internal\n */\nexport const TOOLBAR_ACTION_DEFAULTS = [\n 'font-family',\n 'font-size',\n 'font-style',\n 'color',\n 'list',\n 'link',\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci1hY3Rpb24tZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL2RlZmF1bHRzL3Rvb2xiYXItYWN0aW9uLWRlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQXFDO0lBQ3ZFLGFBQWE7SUFDYixXQUFXO0lBQ1gsWUFBWTtJQUNaLE9BQU87SUFDUCxNQUFNO0lBQ04sTUFBTTtDQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lUZXh0RWRpdG9yVG9vbGJhckFjdGlvblR5cGUgfSBmcm9tICcuLi90eXBlcy90b29sYmFyLWFjdGlvbi10eXBlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFRPT0xCQVJfQUNUSU9OX0RFRkFVTFRTOiBTa3lUZXh0RWRpdG9yVG9vbGJhckFjdGlvblR5cGVbXSA9IFtcbiAgJ2ZvbnQtZmFtaWx5JyxcbiAgJ2ZvbnQtc2l6ZScsXG4gICdmb250LXN0eWxlJyxcbiAgJ2NvbG9yJyxcbiAgJ2xpc3QnLFxuICAnbGluaycsXG5dO1xuIl19","/**\n * @internal\n */\nexport var UrlTarget;\n(function (UrlTarget) {\n UrlTarget[UrlTarget[\"None\"] = 0] = \"None\";\n UrlTarget[UrlTarget[\"NewWindow\"] = 1] = \"NewWindow\";\n})(UrlTarget || (UrlTarget = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItdXJsLXRhcmdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3IvdXJsLW1vZGFsL3RleHQtZWRpdG9yLXVybC10YXJnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ25CLHlDQUFRLENBQUE7SUFDUixtREFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUhXLFNBQVMsS0FBVCxTQUFTLFFBR3BCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGVudW0gVXJsVGFyZ2V0IHtcbiAgTm9uZSA9IDAsXG4gIE5ld1dpbmRvdyA9IDEsXG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * @internal\n */\nexport class SkyTextEditorSelectionService {\n isElementSelected(documentEl, element) {\n const selectedNode = this.getCurrentSelection(documentEl)?.anchorNode;\n /* istanbul ignore next */\n return !!(selectedNode &&\n (element.contains(selectedNode) ||\n (selectedNode.parentNode && element.contains(selectedNode.parentNode))));\n }\n getCurrentSelection(documentEl) {\n return documentEl.getSelection();\n }\n getCurrentSelectionParentElement(documentEl) {\n const selection = this.getCurrentSelection(documentEl);\n let selectedEl;\n /* istanbul ignore else */\n if (selection &&\n selection.getRangeAt &&\n selection.getRangeAt(0).commonAncestorContainer) {\n selectedEl = selection.getRangeAt(0).commonAncestorContainer;\n selectedEl =\n selectedEl.nodeType !== 1 ? selectedEl.parentElement : selectedEl;\n }\n else {\n return undefined;\n }\n return selectedEl;\n }\n getCurrentSelectionRange(documentEl, windowEl) {\n /* istanbul ignore else */\n if (windowEl.getSelection) {\n const sel = windowEl.getSelection();\n /* istanbul ignore else */\n if (sel && sel.getRangeAt && sel.rangeCount) {\n return sel.getRangeAt(0);\n }\n }\n else if (documentEl.getSelection()?.getRangeAt) {\n return documentEl.getSelection()?.getRangeAt(0);\n }\n /* istanbul ignore next */\n return undefined;\n }\n selectElement(documentEl, windowEl, element) {\n /* istanbul ignore else */\n if (element) {\n /* istanbul ignore else */\n if (windowEl.getSelection) {\n const sel = windowEl.getSelection();\n sel?.removeAllRanges();\n const range = documentEl.createRange();\n range.selectNodeContents(element);\n sel?.addRange(range);\n }\n else if (documentEl.getSelection) {\n const sel = documentEl.getSelection();\n sel?.removeAllRanges();\n const range = documentEl.createRange();\n range.selectNodeContents(element);\n sel?.addRange(range);\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorSelectionService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorSelectionService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3Itc2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3NlcnZpY2VzL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOztHQUVHO0FBRUgsTUFBTSxPQUFPLDZCQUE2QjtJQUNqQyxpQkFBaUIsQ0FDdEIsVUFBb0IsRUFDcEIsT0FBb0I7UUFFcEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsQ0FBQztRQUN0RSwwQkFBMEI7UUFDMUIsT0FBTyxDQUFDLENBQUMsQ0FDUCxZQUFZO1lBQ1osQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztnQkFDN0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxVQUFvQjtRQUM3QyxPQUFPLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU0sZ0NBQWdDLENBQ3JDLFVBQW9CO1FBRXBCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLFVBQTBCLENBQUM7UUFDL0IsMEJBQTBCO1FBQzFCLElBQ0UsU0FBUztZQUNULFNBQVMsQ0FBQyxVQUFVO1lBQ3BCLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEVBQy9DLENBQUM7WUFDRCxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBa0MsQ0FBQztZQUN4RSxVQUFVO2dCQUNSLFVBQVUsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDdEUsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVNLHdCQUF3QixDQUM3QixVQUFvQixFQUNwQixRQUFnQjtRQUVoQiwwQkFBMEI7UUFDMUIsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BDLDBCQUEwQjtZQUMxQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDakQsT0FBTyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVNLGFBQWEsQ0FDbEIsVUFBb0IsRUFDcEIsUUFBZ0IsRUFDaEIsT0FBb0I7UUFFcEIsMEJBQTBCO1FBQzFCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWiwwQkFBMEI7WUFDMUIsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDcEMsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixDQUFDO2lCQUFNLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNuQyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RDLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN2QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xDLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOzhHQS9FVSw2QkFBNkI7a0hBQTdCLDZCQUE2Qjs7MkZBQTdCLDZCQUE2QjtrQkFEekMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgcHVibGljIGlzRWxlbWVudFNlbGVjdGVkKFxuICAgIGRvY3VtZW50RWw6IERvY3VtZW50LFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oZG9jdW1lbnRFbCk/LmFuY2hvck5vZGU7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gISEoXG4gICAgICBzZWxlY3RlZE5vZGUgJiZcbiAgICAgIChlbGVtZW50LmNvbnRhaW5zKHNlbGVjdGVkTm9kZSkgfHxcbiAgICAgICAgKHNlbGVjdGVkTm9kZS5wYXJlbnROb2RlICYmIGVsZW1lbnQuY29udGFpbnMoc2VsZWN0ZWROb2RlLnBhcmVudE5vZGUpKSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRTZWxlY3Rpb24oZG9jdW1lbnRFbDogRG9jdW1lbnQpOiBTZWxlY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gZG9jdW1lbnRFbC5nZXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXJyZW50U2VsZWN0aW9uUGFyZW50RWxlbWVudChcbiAgICBkb2N1bWVudEVsOiBEb2N1bWVudCxcbiAgKTogRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbihkb2N1bWVudEVsKTtcbiAgICBsZXQgc2VsZWN0ZWRFbDogRWxlbWVudCB8IG51bGw7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoXG4gICAgICBzZWxlY3Rpb24gJiZcbiAgICAgIHNlbGVjdGlvbi5nZXRSYW5nZUF0ICYmXG4gICAgICBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5jb21tb25BbmNlc3RvckNvbnRhaW5lclxuICAgICkge1xuICAgICAgc2VsZWN0ZWRFbCA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIGFzIEVsZW1lbnQ7XG4gICAgICBzZWxlY3RlZEVsID1cbiAgICAgICAgc2VsZWN0ZWRFbC5ub2RlVHlwZSAhPT0gMSA/IHNlbGVjdGVkRWwucGFyZW50RWxlbWVudCA6IHNlbGVjdGVkRWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZEVsO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRTZWxlY3Rpb25SYW5nZShcbiAgICBkb2N1bWVudEVsOiBEb2N1bWVudCxcbiAgICB3aW5kb3dFbDogV2luZG93LFxuICApOiBSYW5nZSB8IHVuZGVmaW5lZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAod2luZG93RWwuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3dFbC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoc2VsICYmIHNlbC5nZXRSYW5nZUF0ICYmIHNlbC5yYW5nZUNvdW50KSB7XG4gICAgICAgIHJldHVybiBzZWwuZ2V0UmFuZ2VBdCgwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWwuZ2V0U2VsZWN0aW9uKCk/LmdldFJhbmdlQXQpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudEVsLmdldFNlbGVjdGlvbigpPy5nZXRSYW5nZUF0KDApO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RFbGVtZW50KFxuICAgIGRvY3VtZW50RWw6IERvY3VtZW50LFxuICAgIHdpbmRvd0VsOiBXaW5kb3csXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAod2luZG93RWwuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvd0VsLmdldFNlbGVjdGlvbigpO1xuICAgICAgICBzZWw/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50RWwuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgICBzZWw/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbC5nZXRTZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc2VsID0gZG9jdW1lbnRFbC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgc2VsPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudEVsLmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICAgICAgc2VsPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * @internal\n */\nexport class SkyTextEditorService {\n /**\n * A dictionary representing all active text editors and their settings.\n */\n set editor(value) {\n this.#editor = value;\n }\n get editor() {\n if (!this.#editor) {\n throw new Error('Editor has not been initialized.');\n }\n return this.#editor;\n }\n get isInitialized() {\n return this.#editor !== undefined;\n }\n #editor;\n /**\n * Returns the blur observable from the editor with the corresponding id.\n */\n blurListener() {\n return this.editor.blurObservable;\n }\n /**\n * Returns the click observable from the editor with the corresponding id.\n */\n clickListener() {\n return this.editor.clickObservable;\n }\n /**\n * Returns the command change observable from the editor with the corresponding id.\n */\n commandChangeListener() {\n return this.editor.commandChangeObservable;\n }\n /**\n * Returns the focus observable from the editor with the corresponding id.\n */\n focusListener() {\n return this.editor.focusObservable;\n }\n /**\n * Returns the input change observable from the editor with the corresponding id.\n */\n inputListener() {\n return this.editor.inputObservable;\n }\n /**\n * Returns the selection change observable from the editor with the corresponding id.\n */\n selectionChangeListener() {\n return this.editor.selectionChangeObservable;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3Ivc2VydmljZXMvdGV4dC1lZGl0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0zQzs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFDL0I7O09BRUc7SUFDSCxJQUFXLE1BQU0sQ0FBQyxLQUFvQjtRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU8sQ0FBNEI7SUFFbkM7O09BRUc7SUFDSSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSx1QkFBdUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDO0lBQy9DLENBQUM7OEdBOURVLG9CQUFvQjtrSEFBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEVkaXRvclNldHRpbmcgfSBmcm9tICcuLi90eXBlcy9lZGl0b3Itc2V0dGluZyc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yU2VydmljZSB7XG4gIC8qKlxuICAgKiBBIGRpY3Rpb25hcnkgcmVwcmVzZW50aW5nIGFsbCBhY3RpdmUgdGV4dCBlZGl0b3JzIGFuZCB0aGVpciBzZXR0aW5ncy5cbiAgICovXG4gIHB1YmxpYyBzZXQgZWRpdG9yKHZhbHVlOiBFZGl0b3JTZXR0aW5nKSB7XG4gICAgdGhpcy4jZWRpdG9yID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVkaXRvcigpOiBFZGl0b3JTZXR0aW5nIHtcbiAgICBpZiAoIXRoaXMuI2VkaXRvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFZGl0b3IgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNlZGl0b3I7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2VkaXRvciAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgI2VkaXRvcjogRWRpdG9yU2V0dGluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYmx1ciBvYnNlcnZhYmxlIGZyb20gdGhlIGVkaXRvciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGlkLlxuICAgKi9cbiAgcHVibGljIGJsdXJMaXN0ZW5lcigpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuYmx1ck9ic2VydmFibGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2xpY2sgb2JzZXJ2YWJsZSBmcm9tIHRoZSBlZGl0b3Igd2l0aCB0aGUgY29ycmVzcG9uZGluZyBpZC5cbiAgICovXG4gIHB1YmxpYyBjbGlja0xpc3RlbmVyKCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5jbGlja09ic2VydmFibGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29tbWFuZCBjaGFuZ2Ugb2JzZXJ2YWJsZSBmcm9tIHRoZSBlZGl0b3Igd2l0aCB0aGUgY29ycmVzcG9uZGluZyBpZC5cbiAgICovXG4gIHB1YmxpYyBjb21tYW5kQ2hhbmdlTGlzdGVuZXIoKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmNvbW1hbmRDaGFuZ2VPYnNlcnZhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZvY3VzIG9ic2VydmFibGUgZnJvbSB0aGUgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgZm9jdXNMaXN0ZW5lcigpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuZm9jdXNPYnNlcnZhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGlucHV0IGNoYW5nZSBvYnNlcnZhYmxlIGZyb20gdGhlIGVkaXRvciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGlkLlxuICAgKi9cbiAgcHVibGljIGlucHV0TGlzdGVuZXIoKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmlucHV0T2JzZXJ2YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZWxlY3Rpb24gY2hhbmdlIG9ic2VydmFibGUgZnJvbSB0aGUgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlTGlzdGVuZXIoKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLnNlbGVjdGlvbkNoYW5nZU9ic2VydmFibGU7XG4gIH1cbn1cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { Subject, take } from 'rxjs';\nimport { STYLE_STATE_DEFAULTS } from '../defaults/style-state-defaults';\nimport { UrlTarget } from '../url-modal/text-editor-url-target';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./text-editor-selection.service\";\nimport * as i2 from \"./text-editor.service\";\nimport * as i3 from \"@skyux/core\";\n/**\n * @internal\n */\nexport class SkyTextEditorAdapterService {\n #resourceSvc = inject(SkyLibResourcesService);\n #selectionService;\n #textEditorService;\n #windowRef;\n constructor(selectionService, textEditorService, windowService) {\n this.#selectionService = selectionService;\n this.#textEditorService = textEditorService;\n this.#windowRef = windowService;\n }\n /**\n * Creates a text editor inside the supplied iframe element.\n */\n initEditor(id, iframeElement, styleState, placeholder) {\n this.#textEditorService.editor = this.#createObservers(iframeElement);\n const documentEl = this.#getIframeDocumentEl();\n if (!documentEl) {\n return;\n }\n const styleEl = documentEl.createElement('style');\n styleEl.innerHTML = `.editor:empty:before {\n content: attr(data-placeholder);\n font-family: \"Blackbaud Sans\", Arial, sans-serif;\n color: #686c73;\n font-weight: 400;\n font-size: 15px;\n font-style: italic;\n }`;\n documentEl.head.appendChild(styleEl);\n const style = {\n ...STYLE_STATE_DEFAULTS,\n ...styleState,\n };\n const bodyStyle = `background-color: ${style.backColor};\n color: ${style.fontColor};\n font-family: ${style.font};\n font-size: ${style.fontSize}px`;\n documentEl.querySelector('html')?.setAttribute('lang', 'en');\n documentEl.body.setAttribute('contenteditable', 'true');\n documentEl.body.setAttribute('id', id);\n documentEl.body.setAttribute('role', 'main');\n documentEl.body.setAttribute('class', 'editor');\n documentEl.body.setAttribute('style', bodyStyle);\n documentEl.body.setAttribute('data-placeholder', placeholder || '');\n }\n disableEditor(focusableChildren, textEditorNativeElement) {\n this.#setEditorDisabled(focusableChildren, textEditorNativeElement, true);\n }\n enableEditor(focusableChildren, textEditorNativeElement) {\n this.#setEditorDisabled(focusableChildren, textEditorNativeElement, false);\n }\n /**\n * Executes a command on the text editor with the corresponding id.\n */\n async execCommand(editorCommand) {\n /* istanbul ignore else */\n if (this.#textEditorService.editor) {\n const documentEl = this.#getIframeDocumentEl();\n if (editorCommand.command === 'paste') {\n // Firefox does not support the clipboard API's `readText` as of 3/24. We are ok with just firing an alert when the paste button is used in Firefox.\n if (!navigator.clipboard.readText) {\n this.#resourceSvc\n .getString('skyux_text_editor_paste_incompatibility_error')\n .pipe(take(1))\n .subscribe((errorString) => alert(errorString));\n }\n else {\n await navigator.clipboard.readText().then((clipText) => {\n /* istanbul ignore else */\n if (this.editorSelected()) {\n documentEl?.execCommand('insertHTML', false, clipText);\n this.focusEditor();\n this.#textEditorService.editor.commandChangeObservable.next();\n }\n });\n }\n }\n else {\n /* istanbul ignore else */\n if (this.editorSelected()) {\n documentEl?.execCommand(editorCommand.command, false, editorCommand.value);\n this.focusEditor();\n this.#textEditorService.editor.commandChangeObservable.next();\n }\n }\n }\n }\n getCurrentSelection() {\n const documentEl = this.#getIframeDocumentEl();\n if (documentEl) {\n return this.#selectionService.getCurrentSelection(documentEl);\n }\n return null;\n }\n /**\n * Returns a data URI using the provided text string.\n * Used to display a merge field inside a string of text.\n */\n getMergeFieldDataURI(text) {\n const documentEl = this.#windowRef.nativeWindow.document;\n let textToUse = text;\n if (text.length > 18) {\n textToUse = text.substr(0, 15) + '...';\n }\n const canvasElement = documentEl.createElement('canvas');\n canvasElement.setAttribute('height', '20');\n canvasElement.setAttribute('width', '100');\n canvasElement.style.backgroundColor = 'tan';\n canvasElement.style.border = '1px solid #000000';\n canvasElement.style.borderRadius = '5px';\n const context = canvasElement.getContext('2d');\n context.font = '12px Arial';\n context.textAlign = 'center';\n context.fillText(textToUse, 50, 15);\n context.globalCompositeOperation = 'destination-over';\n context.fillStyle = '#00FFFF';\n context.fillRect(0, 0, 100, 20);\n context.globalCompositeOperation = 'source-over';\n context.lineWidth = 2;\n context.strokeStyle = '#FF0000';\n context.strokeRect(0, 0, 100, 20);\n const result = canvasElement.toDataURL('image/png', 1.0);\n return result;\n }\n getStyleState() {\n const documentEl = this.#getIframeDocumentEl();\n /* istanbul ignore else */\n if (documentEl && this.editorSelected()) {\n return {\n backColor: this.#getColor(documentEl, 'BackColor'),\n fontColor: this.#getColor(documentEl, 'ForeColor'),\n fontSize: parseInt(this.#getFontSize(), undefined),\n font: documentEl.queryCommandValue('fontname'),\n boldState: documentEl.queryCommandState('Bold'),\n italicState: documentEl.queryCommandState('Italic'),\n underlineState: documentEl.queryCommandState('Underline'),\n linkState: this.#hasLink(),\n };\n }\n /* istanbul ignore next */\n return {};\n }\n getEditorInnerHtml() {\n const documentEl = this.#getIframeDocumentEl();\n if (documentEl) {\n return this.#replaceHtmlCodes(documentEl.body.innerHTML);\n }\n return '';\n }\n setEditorInnerHtml(value) {\n const documentEl = this.#getIframeDocumentEl();\n const editorContent = documentEl?.body;\n /* istanbul ignore else */\n if (editorContent && editorContent.innerHTML !== value) {\n editorContent.innerHTML = value;\n }\n }\n focusEditor() {\n /* istanbul ignore else */\n if (this.#textEditorService.editor) {\n const windowEl = this.#getContentWindowEl();\n const iframeDocumentEl = this.#getIframeDocumentEl();\n if (windowEl && iframeDocumentEl) {\n const currentSelection = this.#selectionService.getCurrentSelectionRange(iframeDocumentEl, windowEl);\n const cursorIsNotActiveAndHasReset = currentSelection &&\n currentSelection.startOffset === 0 &&\n currentSelection.endOffset === 0;\n if (!this.editorSelected() || cursorIsNotActiveAndHasReset) {\n // focus the end of the editor\n const documentEl = this.#windowRef.nativeWindow.document;\n const editor = iframeDocumentEl.body;\n const range = documentEl.createRange();\n this.#textEditorService.editor.iframeElementRef.focus();\n editor.focus();\n if (windowEl.getSelection && documentEl.createRange) {\n range.selectNodeContents(editor);\n range.collapse(false);\n const sel = windowEl.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n }\n }\n else {\n // Cursor may not be active, restore it\n this.#textEditorService.editor.iframeElementRef.focus();\n iframeDocumentEl.body.focus();\n }\n }\n }\n }\n getLink() {\n let link;\n const anchorEl = this.getSelectedAnchorTag();\n if (anchorEl && anchorEl.href) {\n link = {\n target: anchorEl.getAttribute('target') === '_blank'\n ? UrlTarget.NewWindow\n : UrlTarget.None,\n url: anchorEl.href,\n };\n }\n return link;\n }\n getSelectedAnchorTag() {\n const selectedEl = this.#getCurrentSelectionParentElement();\n if (selectedEl) {\n return this.#getParent(selectedEl, 'a');\n }\n return undefined;\n }\n saveSelection() {\n const documentEl = this.#getIframeDocumentEl();\n const windowEl = this.#getContentWindowEl();\n if (documentEl && windowEl) {\n return this.#selectionService.getCurrentSelectionRange(documentEl, windowEl);\n }\n return undefined;\n }\n selectElement(element) {\n const documentEl = this.#getIframeDocumentEl();\n const windowEl = this.#getContentWindowEl();\n if (documentEl && windowEl) {\n this.#selectionService.selectElement(documentEl, windowEl, element);\n }\n }\n setErrorAttributes(errorId, errors) {\n const documentEl = this.#getIframeDocumentEl();\n documentEl?.body.setAttribute('aria-invalid', (!!errors).toString());\n if (errors && errorId) {\n documentEl?.body.setAttribute('aria-errormessage', errorId);\n }\n else {\n documentEl?.body.removeAttribute('aria-errormessage');\n }\n }\n setLabelAttribute(label) {\n if (label) {\n const documentEl = this.#getIframeDocumentEl();\n documentEl?.body.setAttribute('aria-label', label);\n }\n }\n setPlaceholder(placeholder) {\n const documentEl = this.#getIframeDocumentEl();\n documentEl?.body.setAttribute('data-placeholder', placeholder || '');\n }\n setRequiredAttribute(required) {\n const documentEl = this.#getIframeDocumentEl();\n documentEl?.body.setAttribute('aria-required', required.toString());\n }\n async setFontSize(fontSize) {\n const doc = this.#getIframeDocumentEl();\n await this.execCommand({ command: 'fontSize', value: '1' });\n if (doc) {\n const fontElements = Array.from(doc.querySelectorAll('font[size=\"1\"]'));\n for (const element of fontElements) {\n element.removeAttribute('size');\n element.style.fontSize = fontSize + 'px';\n }\n this.#cleanUpBlankStyleTags(doc);\n }\n this.focusEditor();\n this.#textEditorService.editor.commandChangeObservable.next();\n }\n removeObservers(setting) {\n /* istanbul ignore next */\n const documentEl = setting.iframeElementRef.contentWindow\n ? setting.iframeElementRef.contentWindow.document\n : setting.iframeElementRef.contentDocument;\n setting.selectionChangeObservable.complete();\n setting.clickObservable.complete();\n setting.commandChangeObservable.complete();\n if (documentEl) {\n documentEl.removeEventListener('selectionchange', setting.selectionListener);\n documentEl.removeEventListener('input', setting.selectionListener);\n documentEl.removeEventListener('mousedown', setting.clickListener);\n documentEl.body.removeEventListener('paste', setting.pasteListener);\n }\n }\n #getContentWindowEl() {\n return this.#textEditorService.editor.iframeElementRef\n .contentWindow;\n }\n #getChildSelectedAnchorTags() {\n const selectedRange = this.getCurrentSelection()?.getRangeAt(0);\n if (selectedRange && selectedRange.toString().length <= 0) {\n return [];\n }\n const parentElement = this.#getCurrentSelectionParentElement();\n let childElements = [];\n /* istanbul ignore else */\n if (parentElement) {\n childElements = Array.from(parentElement.querySelectorAll('a'));\n }\n /* istanbul ignore next */\n return childElements.filter((element) => {\n // IE specific\n if (selectedRange) {\n if (!selectedRange.intersectsNode) {\n if (!element || !element.href) {\n return false;\n }\n const tempRange = document.createRange();\n tempRange.selectNodeContents(element);\n return ((selectedRange.compareBoundaryPoints(Range.START_TO_START, tempRange) !== -1 &&\n selectedRange.compareBoundaryPoints(Range.START_TO_END, tempRange) !== 1) ||\n (selectedRange.compareBoundaryPoints(Range.END_TO_START, tempRange) !== -1 &&\n selectedRange.compareBoundaryPoints(Range.END_TO_END, tempRange) !== 1));\n }\n }\n // Normal non-IE\n return (!!element && !!element.href && selectedRange?.intersectsNode(element));\n });\n }\n #getIframeDocumentEl() {\n const contentWindowEl = this.#getContentWindowEl();\n /* istanbul ignore else */\n if (contentWindowEl) {\n return contentWindowEl.document;\n }\n /* istanbul ignore next */\n return this.#textEditorService.editor.iframeElementRef\n .contentDocument;\n }\n #getFontSize() {\n let fontSize = STYLE_STATE_DEFAULTS.fontSize.toString();\n const selection = this.getCurrentSelection();\n /* istanbul ignore else */\n if (selection &&\n selection.anchorNode &&\n selection.anchorNode.parentElement) {\n let element = selection.anchorNode;\n if (element?.nodeType !== 1) {\n element = element?.parentElement;\n }\n const computedStyle = window.getComputedStyle(element);\n /* istanbul ignore else */\n if (computedStyle) {\n fontSize = computedStyle.getPropertyValue('font-size');\n }\n }\n return fontSize;\n }\n #createObservers(element) {\n /* istanbul ignore next */\n const documentEl = element.contentWindow\n ? element.contentWindow.document\n : element.contentDocument;\n // Firefox bug where we need to open/close to cancel load so it doesn't overwrite attrs\n documentEl?.open();\n documentEl?.close();\n const selectionObservable = new Subject();\n const selectionListener = () => selectionObservable.next();\n const clickObservable = new Subject();\n const clickListener = () => clickObservable.next();\n const pasteListener = this.#getPasteOverride();\n const blurObservable = new Subject();\n const blurListener = () => blurObservable.next();\n const focusObservable = new Subject();\n const focusListener = () => focusObservable.next();\n const inputObservable = new Subject();\n const inputListener = () => inputObservable.next();\n documentEl?.addEventListener('selectionchange', selectionListener);\n documentEl?.addEventListener('input', inputListener);\n documentEl?.addEventListener('mousedown', clickListener);\n documentEl?.body.addEventListener('paste', pasteListener);\n documentEl?.body.addEventListener('blur', blurListener);\n documentEl?.body.addEventListener('focusin', focusListener);\n return {\n blurObservable,\n clickObservable,\n focusObservable,\n commandChangeObservable: new Subject(),\n iframeElementRef: element,\n inputObservable,\n selectionChangeObservable: selectionObservable,\n blurListener,\n focusListener,\n clickListener,\n inputListener,\n pasteListener,\n selectionListener,\n };\n }\n #getPasteOverride() {\n /* istanbul ignore next */\n return (e) => {\n e.preventDefault();\n const text = e.clipboardData?.getData('text/plain');\n if (text !== undefined) {\n void this.execCommand({\n command: 'insertHTML',\n value: text.toString(),\n });\n }\n };\n }\n #getCurrentSelectionParentElement() {\n const documentEl = this.#getIframeDocumentEl();\n if (documentEl) {\n return this.#selectionService.getCurrentSelectionParentElement(documentEl);\n }\n return undefined;\n }\n #getColor(documentEl, selector) {\n const commandValue = documentEl.queryCommandValue(selector);\n // Edge is weird and returns numbers\n /* istanbul ignore if */\n if (typeof commandValue === 'number') {\n /* istanbul ignore next */\n return ('rgb(' +\n (commandValue & 0xff) +\n ', ' +\n ((commandValue & 0xff00) >> 8) +\n ', ' +\n ((commandValue & 0xff0000) >> 16) +\n ')');\n }\n // Firefox uses 'Transparent' instead of a color value\n /* istanbul ignore next */\n if (commandValue.toString().toLowerCase() === 'transparent') {\n return STYLE_STATE_DEFAULTS.backColor;\n }\n return commandValue;\n }\n #hasLink() {\n const anchorEl = this.getSelectedAnchorTag();\n const childAnchorEls = this.#getChildSelectedAnchorTags();\n /* istanbul ignore next */\n return childAnchorEls.length > 0 || (!!anchorEl && !!anchorEl.href);\n }\n #getParent(element, tag) {\n let currentNode = element;\n while (currentNode && currentNode.tagName.toUpperCase() !== 'BODY') {\n if (currentNode.tagName.toUpperCase() === tag.toUpperCase()) {\n return currentNode;\n }\n currentNode = currentNode.parentElement;\n }\n return undefined;\n }\n editorSelected() {\n const documentEl = this.#getIframeDocumentEl();\n if (documentEl) {\n return this.#selectionService.isElementSelected(documentEl, documentEl.body);\n }\n return false;\n }\n #cleanUpBlankStyleTags(doc) {\n const orphanElements = Array.from(doc.querySelectorAll('font,span,*[style=\"\"]'));\n for (const element of orphanElements) {\n if (!element.getAttribute('style')) {\n element.removeAttribute('style');\n }\n }\n const removableElements = orphanElements.filter((element) => {\n const tagName = element.tagName.toUpperCase();\n return ((tagName === 'FONT' || tagName === 'SPAN') &&\n (element.attributes.length === 0 || !element.hasChildNodes));\n });\n for (const element of removableElements) {\n const parent = element.parentNode;\n /* istanbul ignore else */\n if (parent) {\n while (element.firstChild) {\n parent.insertBefore(element.firstChild, element);\n }\n parent.removeChild(element);\n }\n }\n }\n // Certain values are encoded in html and need to be decoded\n #replaceHtmlCodes(str) {\n return str\n .replace(/ /, String.fromCharCode(160))\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n }\n #setEditorDisabled(focusableChildren, textEditorNativeElement, disabled) {\n textEditorNativeElement.style.pointerEvents = disabled ? 'none' : 'auto';\n textEditorNativeElement.setAttribute('aria-disabled', disabled ? 'true' : 'false');\n /* istanbul ignore else */\n if (focusableChildren.length > 0) {\n focusableChildren.forEach((aFocusableChild) => {\n aFocusableChild.tabIndex = disabled ? -1 : 0;\n });\n }\n this.#getIframeDocumentEl()?.body.setAttribute('contenteditable', disabled ? 'false' : 'true');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorAdapterService, deps: [{ token: i1.SkyTextEditorSelectionService }, { token: i2.SkyTextEditorService }, { token: i3.SkyAppWindowRef }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorAdapterService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorAdapterService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i1.SkyTextEditorSelectionService }, { type: i2.SkyTextEditorService }, { type: i3.SkyAppWindowRef }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXJELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBS3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFLaEU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sMkJBQTJCO0lBQzdCLFlBQVksR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN2RCxpQkFBaUIsQ0FBZ0M7SUFDakQsa0JBQWtCLENBQXVCO0lBQ3pDLFVBQVUsQ0FBa0I7SUFFNUIsWUFDRSxnQkFBK0MsRUFDL0MsaUJBQXVDLEVBQ3ZDLGFBQThCO1FBRTlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUMxQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVSxDQUNmLEVBQVUsRUFDVixhQUFnQyxFQUNoQyxVQUFtQyxFQUNuQyxXQUFvQjtRQUVwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENB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dUJBQXVCLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3pFLHVCQUF1QixDQUFDLFlBQVksQ0FDbEMsZUFBZSxFQUNmLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzVCLENBQUM7UUFDRiwwQkFBMEI7UUFDMUIsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7Z0JBQzVDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQzVDLGlCQUFpQixFQUNqQixRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUM1QixDQUFDO0lBQ0osQ0FBQzs4R0FqbkJVLDJCQUEyQjtrSEFBM0IsMkJBQTJCOzsyRkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5QXBwV2luZG93UmVmIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTVFlMRV9TVEFURV9ERUZBVUxUUyB9IGZyb20gJy4uL2RlZmF1bHRzL3N0eWxlLXN0YXRlLWRlZmF1bHRzJztcbmltcG9ydCB7IEVkaXRvckNvbW1hbmQgfSBmcm9tICcuLi90eXBlcy9lZGl0b3ItY29tbWFuZCc7XG5pbXBvcnQgeyBFZGl0b3JTZXR0aW5nIH0gZnJvbSAnLi4vdHlwZXMvZWRpdG9yLXNldHRpbmcnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUgfSBmcm9tICcuLi90eXBlcy9zdHlsZS1zdGF0ZSc7XG5pbXBvcnQgeyBVcmxNb2RhbFJlc3VsdCB9IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwtcmVzdWx0JztcbmltcG9ydCB7IFVybFRhcmdldCB9IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtdGFyZ2V0JztcblxuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi90ZXh0LWVkaXRvci5zZXJ2aWNlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSB7XG4gIHJlYWRvbmx5ICNyZXNvdXJjZVN2YyA9IGluamVjdChTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlKTtcbiAgI3NlbGVjdGlvblNlcnZpY2U6IFNreVRleHRFZGl0b3JTZWxlY3Rpb25TZXJ2aWNlO1xuICAjdGV4dEVkaXRvclNlcnZpY2U6IFNreVRleHRFZGl0b3JTZXJ2aWNlO1xuICAjd2luZG93UmVmOiBTa3lBcHBXaW5kb3dSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2VsZWN0aW9uU2VydmljZTogU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UsXG4gICAgdGV4dEVkaXRvclNlcnZpY2U6IFNreVRleHRFZGl0b3JTZXJ2aWNlLFxuICAgIHdpbmRvd1NlcnZpY2U6IFNreUFwcFdpbmRvd1JlZixcbiAgKSB7XG4gICAgdGhpcy4jc2VsZWN0aW9uU2VydmljZSA9IHNlbGVjdGlvblNlcnZpY2U7XG4gICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UgPSB0ZXh0RWRpdG9yU2VydmljZTtcbiAgICB0aGlzLiN3aW5kb3dSZWYgPSB3aW5kb3dTZXJ2aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZXh0IGVkaXRvciBpbnNpZGUgdGhlIHN1cHBsaWVkIGlmcmFtZSBlbGVtZW50LlxuICAgKi9cbiAgcHVibGljIGluaXRFZGl0b3IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBpZnJhbWVFbGVtZW50OiBIVE1MSUZyYW1lRWxlbWVudCxcbiAgICBzdHlsZVN0YXRlOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSxcbiAgICBwbGFjZWhvbGRlcj86IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yID0gdGhpcy4jY3JlYXRlT2JzZXJ2ZXJzKGlmcmFtZUVsZW1lbnQpO1xuXG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBpZiAoIWRvY3VtZW50RWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZUVsID0gZG9jdW1lbnRFbC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWwuaW5uZXJIVE1MID0gYC5lZGl0b3I6ZW1wdHk6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1wbGFjZWhvbGRlcik7XG4gICAgICBmb250LWZhbWlseTogXCJCbGFja2JhdWQgU2Fuc1wiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgIGNvbG9yOiAjNjg2YzczO1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9YDtcbiAgICBkb2N1bWVudEVsLmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbCk7XG5cbiAgICBjb25zdCBzdHlsZTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUgPSB7XG4gICAgICAuLi5TVFlMRV9TVEFURV9ERUZBVUxUUyxcbiAgICAgIC4uLnN0eWxlU3RhdGUsXG4gICAgfTtcbiAgICBjb25zdCBib2R5U3R5bGUgPSBgYmFja2dyb3VuZC1jb2xvcjogJHtzdHlsZS5iYWNrQ29sb3J9O1xuICAgICAgY29sb3I6ICR7c3R5bGUuZm9udENvbG9yfTtcbiAgICAgIGZvbnQtZmFtaWx5OiAke3N0eWxlLmZvbnR9O1xuICAgICAgZm9udC1zaXplOiAke3N0eWxlLmZvbnRTaXplfXB4YDtcbiAgICBkb2N1bWVudEVsLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKT8uc2V0QXR0cmlidXRlKCdsYW5nJywgJ2VuJyk7XG4gICAgZG9jdW1lbnRFbC5ib2R5LnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ3RydWUnKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdpZCcsIGlkKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdyb2xlJywgJ21haW4nKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdjbGFzcycsICdlZGl0b3InKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdzdHlsZScsIGJvZHlTdHlsZSk7XG4gICAgZG9jdW1lbnRFbC5ib2R5LnNldEF0dHJpYnV0ZSgnZGF0YS1wbGFjZWhvbGRlcicsIHBsYWNlaG9sZGVyIHx8ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlRWRpdG9yKFxuICAgIGZvY3VzYWJsZUNoaWxkcmVuOiBIVE1MRWxlbWVudFtdLFxuICAgIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy4jc2V0RWRpdG9yRGlzYWJsZWQoZm9jdXNhYmxlQ2hpbGRyZW4sIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50LCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmFibGVFZGl0b3IoXG4gICAgZm9jdXNhYmxlQ2hpbGRyZW46IEhUTUxFbGVtZW50W10sXG4gICAgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICApOiB2b2lkIHtcbiAgICB0aGlzLiNzZXRFZGl0b3JEaXNhYmxlZChmb2N1c2FibGVDaGlsZHJlbiwgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIGNvbW1hbmQgb24gdGhlIHRleHQgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhlY0NvbW1hbmQoZWRpdG9yQ29tbWFuZDogRWRpdG9yQ29tbWFuZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvcikge1xuICAgICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcblxuICAgICAgaWYgKGVkaXRvckNvbW1hbmQuY29tbWFuZCA9PT0gJ3Bhc3RlJykge1xuICAgICAgICAvLyBGaXJlZm94IGRvZXMgbm90IHN1cHBvcnQgdGhlIGNsaXBib2FyZCBBUEkncyBgcmVhZFRleHRgIGFzIG9mIDMvMjQuIFdlIGFyZSBvayB3aXRoIGp1c3QgZmlyaW5nIGFuIGFsZXJ0IHdoZW4gdGhlIHBhc3RlIGJ1dHRvbiBpcyB1c2VkIGluIEZpcmVmb3guXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmNsaXBib2FyZC5yZWFkVGV4dCkge1xuICAgICAgICAgIHRoaXMuI3Jlc291cmNlU3ZjXG4gICAgICAgICAgICAuZ2V0U3RyaW5nKCdza3l1eF90ZXh0X2VkaXRvcl9wYXN0ZV9pbmNvbXBhdGliaWxpdHlfZXJyb3InKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGVycm9yU3RyaW5nKSA9PiBhbGVydChlcnJvclN0cmluZykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQucmVhZFRleHQoKS50aGVuKChjbGlwVGV4dCkgPT4ge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvclNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgZG9jdW1lbnRFbD8uZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgY2xpcFRleHQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNFZGl0b3IoKTtcbiAgICAgICAgICAgICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yLmNvbW1hbmRDaGFuZ2VPYnNlcnZhYmxlLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yU2VsZWN0ZWQoKSkge1xuICAgICAgICAgIGRvY3VtZW50RWw/LmV4ZWNDb21tYW5kKFxuICAgICAgICAgICAgZWRpdG9yQ29tbWFuZC5jb21tYW5kLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBlZGl0b3JDb21tYW5kLnZhbHVlLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLmZvY3VzRWRpdG9yKCk7XG4gICAgICAgICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yLmNvbW1hbmRDaGFuZ2VPYnNlcnZhYmxlLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXJyZW50U2VsZWN0aW9uKCk6IFNlbGVjdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCk7XG4gICAgaWYgKGRvY3VtZW50RWwpIHtcbiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3Rpb25TZXJ2aWNlLmdldEN1cnJlbnRTZWxlY3Rpb24oZG9jdW1lbnRFbCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBkYXRhIFVSSSB1c2luZyB0aGUgcHJvdmlkZWQgdGV4dCBzdHJpbmcuXG4gICAqIFVzZWQgdG8gZGlzcGxheSBhIG1lcmdlIGZpZWxkIGluc2lkZSBhIHN0cmluZyBvZiB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldE1lcmdlRmllbGREYXRhVVJJKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI3dpbmRvd1JlZi5uYXRpdmVXaW5kb3cuZG9jdW1lbnQ7XG4gICAgbGV0IHRleHRUb1VzZSA9IHRleHQ7XG4gICAgaWYgKHRleHQubGVuZ3RoID4gMTgpIHtcbiAgICAgIHRleHRUb1VzZSA9IHRleHQuc3Vic3RyKDAsIDE1KSArICcuLi4nO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSBkb2N1bWVudEVsLmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhc0VsZW1lbnQuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMjAnKTtcbiAgICBjYW52YXNFbGVtZW50LnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJyk7XG4gICAgY2FudmFzRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndGFuJztcbiAgICBjYW52YXNFbGVtZW50LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgIzAwMDAwMCc7XG4gICAgY2FudmFzRWxlbWVudC5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNXB4JztcblxuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXNFbGVtZW50LmdldENvbnRleHQoJzJkJyk7XG4gICAgY29udGV4dC5mb250ID0gJzEycHggQXJpYWwnO1xuICAgIGNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgY29udGV4dC5maWxsVGV4dCh0ZXh0VG9Vc2UsIDUwLCAxNSk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1vdmVyJztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDBGRkZGJztcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDEwMCwgMjApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInO1xuICAgIGNvbnRleHQubGluZVdpZHRoID0gMjtcbiAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuc3Ryb2tlUmVjdCgwLCAwLCAxMDAsIDIwKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbnZhc0VsZW1lbnQudG9EYXRhVVJMKCdpbWFnZS9wbmcnLCAxLjApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3R5bGVTdGF0ZSgpOiBQYXJ0aWFsPFNreVRleHRFZGl0b3JTdHlsZVN0YXRlPiB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGRvY3VtZW50RWwgJiYgdGhpcy5lZGl0b3JTZWxlY3RlZCgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYWNrQ29sb3I6IHRoaXMuI2dldENvbG9yKGRvY3VtZW50RWwsICdCYWNrQ29sb3InKSxcbiAgICAgICAgZm9udENvbG9yOiB0aGlzLiNnZXRDb2xvcihkb2N1bWVudEVsLCAnRm9yZUNvbG9yJyksXG4gICAgICAgIGZvbnRTaXplOiBwYXJzZUludCh0aGlzLiNnZXRGb250U2l6ZSgpLCB1bmRlZmluZWQpLFxuICAgICAgICBmb250OiBkb2N1bWVudEVsLnF1ZXJ5Q29tbWFuZFZhbHVlKCdmb250bmFtZScpLFxuICAgICAgICBib2xkU3RhdGU6IGRvY3VtZW50RWwucXVlcnlDb21tYW5kU3RhdGUoJ0JvbGQnKSxcbiAgICAgICAgaXRhbGljU3RhdGU6IGRvY3VtZW50RWwucXVlcnlDb21tYW5kU3RhdGUoJ0l0YWxpYycpLFxuICAgICAgICB1bmRlcmxpbmVTdGF0ZTogZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRTdGF0ZSgnVW5kZXJsaW5lJyksXG4gICAgICAgIGxpbmtTdGF0ZTogdGhpcy4jaGFzTGluaygpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFZGl0b3JJbm5lckh0bWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGlmIChkb2N1bWVudEVsKSB7XG4gICAgICByZXR1cm4gdGhpcy4jcmVwbGFjZUh0bWxDb2Rlcyhkb2N1bWVudEVsLmJvZHkuaW5uZXJIVE1MKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcklubmVySHRtbCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBjb25zdCBlZGl0b3JDb250ZW50ID0gZG9jdW1lbnRFbD8uYm9keTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChlZGl0b3JDb250ZW50ICYmIGVkaXRvckNvbnRlbnQuaW5uZXJIVE1MICE9PSB2YWx1ZSkge1xuICAgICAgZWRpdG9yQ29udGVudC5pbm5lckhUTUwgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9jdXNFZGl0b3IoKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yKSB7XG4gICAgICBjb25zdCB3aW5kb3dFbCA9IHRoaXMuI2dldENvbnRlbnRXaW5kb3dFbCgpO1xuICAgICAgY29uc3QgaWZyYW1lRG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICAgIGlmICh3aW5kb3dFbCAmJiBpZnJhbWVEb2N1bWVudEVsKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPVxuICAgICAgICAgIHRoaXMuI3NlbGVjdGlvblNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvblJhbmdlKFxuICAgICAgICAgICAgaWZyYW1lRG9jdW1lbnRFbCxcbiAgICAgICAgICAgIHdpbmRvd0VsLFxuICAgICAgICAgICk7XG4gICAgICAgIGNvbnN0IGN1cnNvcklzTm90QWN0aXZlQW5kSGFzUmVzZXQgPVxuICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24gJiZcbiAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0T2Zmc2V0ID09PSAwICYmXG4gICAgICAgICAgY3VycmVudFNlbGVjdGlvbi5lbmRPZmZzZXQgPT09IDA7XG5cbiAgICAgICAgaWYgKCF0aGlzLmVkaXRvclNlbGVjdGVkKCkgfHwgY3Vyc29ySXNOb3RBY3RpdmVBbmRIYXNSZXNldCkge1xuICAgICAgICAgIC8vIGZvY3VzIHRoZSBlbmQgb2YgdGhlIGVkaXRvclxuICAgICAgICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiN3aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50O1xuICAgICAgICAgIGNvbnN0IGVkaXRvciA9IGlmcmFtZURvY3VtZW50RWwuYm9keSBhcyBIVE1MQm9keUVsZW1lbnQ7XG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudEVsLmNyZWF0ZVJhbmdlKCk7XG5cbiAgICAgICAgICB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuaWZyYW1lRWxlbWVudFJlZi5mb2N1cygpO1xuICAgICAgICAgIGVkaXRvci5mb2N1cygpO1xuXG4gICAgICAgICAgaWYgKHdpbmRvd0VsLmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudEVsLmNyZWF0ZVJhbmdlKSB7XG4gICAgICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTtcbiAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvd0VsLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgc2VsPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgIHNlbD8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDdXJzb3IgbWF5IG5vdCBiZSBhY3RpdmUsIHJlc3RvcmUgaXRcbiAgICAgICAgICB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuaWZyYW1lRWxlbWVudFJlZi5mb2N1cygpO1xuICAgICAgICAgIGlmcmFtZURvY3VtZW50RWwuYm9keS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldExpbmsoKTogVXJsTW9kYWxSZXN1bHQgfCB1bmRlZmluZWQge1xuICAgIGxldCBsaW5rOiBVcmxNb2RhbFJlc3VsdCB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhbmNob3JFbCA9IHRoaXMuZ2V0U2VsZWN0ZWRBbmNob3JUYWcoKTtcbiAgICBpZiAoYW5jaG9yRWwgJiYgYW5jaG9yRWwuaHJlZikge1xuICAgICAgbGluayA9IHtcbiAgICAgICAgdGFyZ2V0OlxuICAgICAgICAgIGFuY2hvckVsLmdldEF0dHJpYnV0ZSgndGFyZ2V0JykgPT09ICdfYmxhbmsnXG4gICAgICAgICAgICA/IFVybFRhcmdldC5OZXdXaW5kb3dcbiAgICAgICAgICAgIDogVXJsVGFyZ2V0Lk5vbmUsXG4gICAgICAgIHVybDogYW5jaG9yRWwuaHJlZixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRBbmNob3JUYWcoKTogSFRNTEFuY2hvckVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzZWxlY3RlZEVsID0gdGhpcy4jZ2V0Q3VycmVudFNlbGVjdGlvblBhcmVudEVsZW1lbnQoKTtcblxuICAgIGlmIChzZWxlY3RlZEVsKSB7XG4gICAgICByZXR1cm4gdGhpcy4jZ2V0UGFyZW50KHNlbGVjdGVkRWwsICdhJykgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlU2VsZWN0aW9uKCk6IFJhbmdlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGNvbnN0IHdpbmRvd0VsID0gdGhpcy4jZ2V0Q29udGVudFdpbmRvd0VsKCk7XG4gICAgaWYgKGRvY3VtZW50RWwgJiYgd2luZG93RWwpIHtcbiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3Rpb25TZXJ2aWNlLmdldEN1cnJlbnRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgZG9jdW1lbnRFbCxcbiAgICAgICAgd2luZG93RWwsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdEVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGNvbnN0IHdpbmRvd0VsID0gdGhpcy4jZ2V0Q29udGVudFdpbmRvd0VsKCk7XG4gICAgaWYgKGRvY3VtZW50RWwgJiYgd2luZG93RWwpIHtcbiAgICAgIHRoaXMuI3NlbGVjdGlvblNlcnZpY2Uuc2VsZWN0RWxlbWVudChkb2N1bWVudEVsLCB3aW5kb3dFbCwgZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEVycm9yQXR0cmlidXRlcyhcbiAgICBlcnJvcklkOiBzdHJpbmcsXG4gICAgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBkb2N1bWVudEVsPy5ib2R5LnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgKCEhZXJyb3JzKS50b1N0cmluZygpKTtcbiAgICBpZiAoZXJyb3JzICYmIGVycm9ySWQpIHtcbiAgICAgIGRvY3VtZW50RWw/LmJvZHkuc2V0QXR0cmlidXRlKCdhcmlhLWVycm9ybWVzc2FnZScsIGVycm9ySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudEVsPy5ib2R5LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1lcnJvcm1lc3NhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0TGFiZWxBdHRyaWJ1dGUobGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmIChsYWJlbCkge1xuICAgICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICAgIGRvY3VtZW50RWw/LmJvZHkuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgbGFiZWwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRQbGFjZWhvbGRlcihwbGFjZWhvbGRlcj86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCk7XG4gICAgZG9jdW1lbnRFbD8uYm9keS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcGxhY2Vob2xkZXInLCBwbGFjZWhvbGRlciB8fCAnJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0UmVxdWlyZWRBdHRyaWJ1dGUocmVxdWlyZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGRvY3VtZW50RWw/LmJvZHkuc2V0QXR0cmlidXRlKCdhcmlhLXJlcXVpcmVkJywgcmVxdWlyZWQudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0Rm9udFNpemUoZm9udFNpemU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKHsgY29tbWFuZDogJ2ZvbnRTaXplJywgdmFsdWU6ICcxJyB9KTtcbiAgICBpZiAoZG9jKSB7XG4gICAgICBjb25zdCBmb250RWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBBcnJheS5mcm9tKFxuICAgICAgICBkb2MucXVlcnlTZWxlY3RvckFsbCgnZm9udFtzaXplPVwiMVwiXScpLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBmb250RWxlbWVudHMpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3NpemUnKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5mb250U2l6ZSA9IGZvbnRTaXplICsgJ3B4JztcbiAgICAgIH1cbiAgICAgIHRoaXMuI2NsZWFuVXBCbGFua1N0eWxlVGFncyhkb2MpO1xuICAgIH1cblxuICAgIHRoaXMuZm9jdXNFZGl0b3IoKTtcbiAgICB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuY29tbWFuZENoYW5nZU9ic2VydmFibGUubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZU9ic2VydmVycyhzZXR0aW5nOiBFZGl0b3JTZXR0aW5nKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBjb25zdCBkb2N1bWVudEVsID0gc2V0dGluZy5pZnJhbWVFbGVtZW50UmVmLmNvbnRlbnRXaW5kb3dcbiAgICAgID8gc2V0dGluZy5pZnJhbWVFbGVtZW50UmVmLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnRcbiAgICAgIDogc2V0dGluZy5pZnJhbWVFbGVtZW50UmVmLmNvbnRlbnREb2N1bWVudDtcbiAgICBzZXR0aW5nLnNlbGVjdGlvbkNoYW5nZU9ic2VydmFibGUuY29tcGxldGUoKTtcbiAgICBzZXR0aW5nLmNsaWNrT2JzZXJ2YWJsZS5jb21wbGV0ZSgpO1xuICAgIHNldHRpbmcuY29tbWFuZENoYW5nZU9ic2VydmFibGUuY29tcGxldGUoKTtcbiAgICBpZiAoZG9jdW1lbnRFbCkge1xuICAgICAgZG9jdW1lbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2VsZWN0aW9uY2hhbmdlJyxcbiAgICAgICAgc2V0dGluZy5zZWxlY3Rpb25MaXN0ZW5lcixcbiAgICAgICk7XG4gICAgICBkb2N1bWVudEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0Jywgc2V0dGluZy5zZWxlY3Rpb25MaXN0ZW5lcik7XG4gICAgICBkb2N1bWVudEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHNldHRpbmcuY2xpY2tMaXN0ZW5lcik7XG4gICAgICBkb2N1bWVudEVsLmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBzZXR0aW5nLnBhc3RlTGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gICNnZXRDb250ZW50V2luZG93RWwoKTogV2luZG93IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yLmlmcmFtZUVsZW1lbnRSZWZcbiAgICAgIC5jb250ZW50V2luZG93IGFzIFdpbmRvdztcbiAgfVxuXG4gICNnZXRDaGlsZFNlbGVjdGVkQW5jaG9yVGFncygpOiBFbGVtZW50W10ge1xuICAgIGNvbnN0IHNlbGVjdGVkUmFuZ2UgPSB0aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAoc2VsZWN0ZWRSYW5nZSAmJiBzZWxlY3RlZFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGhpcy4jZ2V0Q3VycmVudFNlbGVjdGlvblBhcmVudEVsZW1lbnQoKTtcblxuICAgIGxldCBjaGlsZEVsZW1lbnRzOiBIVE1MQW5jaG9yRWxlbWVudFtdID0gW107XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgY2hpbGRFbGVtZW50cyA9IEFycmF5LmZyb20ocGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhJykpO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIGNoaWxkRWxlbWVudHMuZmlsdGVyKChlbGVtZW50KSA9PiB7XG4gICAgICAvLyBJRSBzcGVjaWZpY1xuICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UpIHtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlLmludGVyc2VjdHNOb2RlKSB7XG4gICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmhyZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdGVtcFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICB0ZW1wUmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2VsZWN0ZWRSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoXG4gICAgICAgICAgICAgIFJhbmdlLlNUQVJUX1RPX1NUQVJULFxuICAgICAgICAgICAgICB0ZW1wUmFuZ2UsXG4gICAgICAgICAgICApICE9PSAtMSAmJlxuICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhcbiAgICAgICAgICAgICAgICBSYW5nZS5TVEFSVF9UT19FTkQsXG4gICAgICAgICAgICAgICAgdGVtcFJhbmdlLFxuICAgICAgICAgICAgICApICE9PSAxKSB8fFxuICAgICAgICAgICAgKHNlbGVjdGVkUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFxuICAgICAgICAgICAgICBSYW5nZS5FTkRfVE9fU1RBUlQsXG4gICAgICAgICAgICAgIHRlbXBSYW5nZSxcbiAgICAgICAgICAgICkgIT09IC0xICYmXG4gICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFxuICAgICAgICAgICAgICAgIFJhbmdlLkVORF9UT19FTkQsXG4gICAgICAgICAgICAgICAgdGVtcFJhbmdlLFxuICAgICAgICAgICAgICApICE9PSAxKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm9ybWFsIG5vbi1JRVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgISFlbGVtZW50ICYmICEhZWxlbWVudC5ocmVmICYmIHNlbGVjdGVkUmFuZ2U/LmludGVyc2VjdHNOb2RlKGVsZW1lbnQpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgI2dldElmcmFtZURvY3VtZW50RWwoKTogRG9jdW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbnRlbnRXaW5kb3dFbCA9IHRoaXMuI2dldENvbnRlbnRXaW5kb3dFbCgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGNvbnRlbnRXaW5kb3dFbCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRXaW5kb3dFbC5kb2N1bWVudDtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuaWZyYW1lRWxlbWVudFJlZlxuICAgICAgLmNvbnRlbnREb2N1bWVudCBhcyBEb2N1bWVudDtcbiAgfVxuXG4gICNnZXRGb250U2l6ZSgpOiBzdHJpbmcge1xuICAgIGxldCBmb250U2l6ZSA9IFNUWUxFX1NUQVRFX0RFRkFVTFRTLmZvbnRTaXplLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoXG4gICAgICBzZWxlY3Rpb24gJiZcbiAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlICYmXG4gICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50XG4gICAgKSB7XG4gICAgICBsZXQgZWxlbWVudCA9IHNlbGVjdGlvbi5hbmNob3JOb2RlIGFzIEhUTUxFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlbGVtZW50Py5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudD8ucGFyZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50IGFzIEVsZW1lbnQpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChjb21wdXRlZFN0eWxlKSB7XG4gICAgICAgIGZvbnRTaXplID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdmb250LXNpemUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvbnRTaXplO1xuICB9XG5cbiAgI2NyZWF0ZU9ic2VydmVycyhlbGVtZW50OiBIVE1MSUZyYW1lRWxlbWVudCk6IEVkaXRvclNldHRpbmcge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IGVsZW1lbnQuY29udGVudFdpbmRvd1xuICAgICAgPyBlbGVtZW50LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnRcbiAgICAgIDogZWxlbWVudC5jb250ZW50RG9jdW1lbnQ7XG5cbiAgICAvLyBGaXJlZm94IGJ1ZyB3aGVyZSB3ZSBuZWVkIHRvIG9wZW4vY2xvc2UgdG8gY2FuY2VsIGxvYWQgc28gaXQgZG9lc24ndCBvdmVyd3JpdGUgYXR0cnNcbiAgICBkb2N1bWVudEVsPy5vcGVuKCk7XG4gICAgZG9jdW1lbnRFbD8uY2xvc2UoKTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbk9ic2VydmFibGUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGNvbnN0IHNlbGVjdGlvbkxpc3RlbmVyID0gKCk6IHZvaWQgPT4gc2VsZWN0aW9uT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgY29uc3QgY2xpY2tPYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBjbGlja0xpc3RlbmVyID0gKCk6IHZvaWQgPT4gY2xpY2tPYnNlcnZhYmxlLm5leHQoKTtcbiAgICBjb25zdCBwYXN0ZUxpc3RlbmVyID0gdGhpcy4jZ2V0UGFzdGVPdmVycmlkZSgpO1xuICAgIGNvbnN0IGJsdXJPYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBibHVyTGlzdGVuZXIgPSAoKTogdm9pZCA9PiBibHVyT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgY29uc3QgZm9jdXNPYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBmb2N1c0xpc3RlbmVyID0gKCk6IHZvaWQgPT4gZm9jdXNPYnNlcnZhYmxlLm5leHQoKTtcbiAgICBjb25zdCBpbnB1dE9ic2VydmFibGUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGNvbnN0IGlucHV0TGlzdGVuZXIgPSAoKTogdm9pZCA9PiBpbnB1dE9ic2VydmFibGUubmV4dCgpO1xuXG4gICAgZG9jdW1lbnRFbD8uYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgc2VsZWN0aW9uTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgaW5wdXRMaXN0ZW5lcik7XG4gICAgZG9jdW1lbnRFbD8uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgY2xpY2tMaXN0ZW5lcik7XG4gICAgZG9jdW1lbnRFbD8uYm9keS5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIHBhc3RlTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWw/LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIGJsdXJMaXN0ZW5lcik7XG4gICAgZG9jdW1lbnRFbD8uYm9keS5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgZm9jdXNMaXN0ZW5lcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJsdXJPYnNlcnZhYmxlLFxuICAgICAgY2xpY2tPYnNlcnZhYmxlLFxuICAgICAgZm9jdXNPYnNlcnZhYmxlLFxuICAgICAgY29tbWFuZENoYW5nZU9ic2VydmFibGU6IG5ldyBTdWJqZWN0KCksXG4gICAgICBpZnJhbWVFbGVtZW50UmVmOiBlbGVtZW50LFxuICAgICAgaW5wdXRPYnNlcnZhYmxlLFxuICAgICAgc2VsZWN0aW9uQ2hhbmdlT2JzZXJ2YWJsZTogc2VsZWN0aW9uT2JzZXJ2YWJsZSxcbiAgICAgIGJsdXJMaXN0ZW5lcixcbiAgICAgIGZvY3VzTGlzdGVuZXIsXG4gICAgICBjbGlja0xpc3RlbmVyLFxuICAgICAgaW5wdXRMaXN0ZW5lcixcbiAgICAgIHBhc3RlTGlzdGVuZXIsXG4gICAgICBzZWxlY3Rpb25MaXN0ZW5lcixcbiAgICB9O1xuICB9XG5cbiAgI2dldFBhc3RlT3ZlcnJpZGUoKTogKGU6IENsaXBib2FyZEV2ZW50KSA9PiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiAoZTogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IHRleHQgPSBlLmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQvcGxhaW4nKTtcblxuICAgICAgaWYgKHRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2b2lkIHRoaXMuZXhlY0NvbW1hbmQoe1xuICAgICAgICAgIGNvbW1hbmQ6ICdpbnNlcnRIVE1MJyxcbiAgICAgICAgICB2YWx1ZTogdGV4dC50b1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgI2dldEN1cnJlbnRTZWxlY3Rpb25QYXJlbnRFbGVtZW50KCk6IEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGlmIChkb2N1bWVudEVsKSB7XG4gICAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uUGFyZW50RWxlbWVudChcbiAgICAgICAgZG9jdW1lbnRFbCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAjZ2V0Q29sb3IoZG9jdW1lbnRFbDogRG9jdW1lbnQsIHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbW1hbmRWYWx1ZSA9IGRvY3VtZW50RWwucXVlcnlDb21tYW5kVmFsdWUoc2VsZWN0b3IpO1xuXG4gICAgLy8gRWRnZSBpcyB3ZWlyZCBhbmQgcmV0dXJucyBudW1iZXJzXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHR5cGVvZiBjb21tYW5kVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJ3JnYignICtcbiAgICAgICAgKGNvbW1hbmRWYWx1ZSAmIDB4ZmYpICtcbiAgICAgICAgJywgJyArXG4gICAgICAgICgoY29tbWFuZFZhbHVlICYgMHhmZjAwKSA+PiA4KSArXG4gICAgICAgICcsICcgK1xuICAgICAgICAoKGNvbW1hbmRWYWx1ZSAmIDB4ZmYwMDAwKSA+PiAxNikgK1xuICAgICAgICAnKSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmlyZWZveCB1c2VzICdUcmFuc3BhcmVudCcgaW5zdGVhZCBvZiBhIGNvbG9yIHZhbHVlXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoY29tbWFuZFZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zcGFyZW50Jykge1xuICAgICAgcmV0dXJuIFNUWUxFX1NUQVRFX0RFRkFVTFRTLmJhY2tDb2xvcjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRWYWx1ZTtcbiAgfVxuXG4gICNoYXNMaW5rKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFuY2hvckVsID0gdGhpcy5nZXRTZWxlY3RlZEFuY2hvclRhZygpO1xuICAgIGNvbnN0IGNoaWxkQW5jaG9yRWxzID0gdGhpcy4jZ2V0Q2hpbGRTZWxlY3RlZEFuY2hvclRhZ3MoKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBjaGlsZEFuY2hvckVscy5sZW5ndGggPiAwIHx8ICghIWFuY2hvckVsICYmICEhYW5jaG9yRWwuaHJlZik7XG4gIH1cblxuICAjZ2V0UGFyZW50KGVsZW1lbnQ6IEVsZW1lbnQsIHRhZzogc3RyaW5nKTogRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGN1cnJlbnROb2RlOiBFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG4gICAgd2hpbGUgKGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2RlLnRhZ05hbWUudG9VcHBlckNhc2UoKSAhPT0gJ0JPRFknKSB7XG4gICAgICBpZiAoY3VycmVudE5vZGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSB0YWcudG9VcHBlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgICB9XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZWRpdG9yU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBpZiAoZG9jdW1lbnRFbCkge1xuICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvblNlcnZpY2UuaXNFbGVtZW50U2VsZWN0ZWQoXG4gICAgICAgIGRvY3VtZW50RWwsXG4gICAgICAgIGRvY3VtZW50RWwuYm9keSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gICNjbGVhblVwQmxhbmtTdHlsZVRhZ3MoZG9jOiBEb2N1bWVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9ycGhhbkVsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gQXJyYXkuZnJvbShcbiAgICAgIGRvYy5xdWVyeVNlbGVjdG9yQWxsKCdmb250LHNwYW4sKltzdHlsZT1cIlwiXScpLFxuICAgICk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG9ycGhhbkVsZW1lbnRzKSB7XG4gICAgICBpZiAoIWVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZW1vdmFibGVFbGVtZW50cyA9IG9ycGhhbkVsZW1lbnRzLmZpbHRlcigoZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRhZ05hbWUgPT09ICdGT05UJyB8fCB0YWdOYW1lID09PSAnU1BBTicpICYmXG4gICAgICAgIChlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoID09PSAwIHx8ICFlbGVtZW50Lmhhc0NoaWxkTm9kZXMpXG4gICAgICApO1xuICAgIH0pO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiByZW1vdmFibGVFbGVtZW50cykge1xuICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudC5maXJzdENoaWxkLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2VydGFpbiB2YWx1ZXMgYXJlIGVuY29kZWQgaW4gaHRtbCBhbmQgbmVlZCB0byBiZSBkZWNvZGVkXG4gICNyZXBsYWNlSHRtbENvZGVzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAucmVwbGFjZSgvJm5ic3A7LywgU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApKVxuICAgICAgLnJlcGxhY2UoLyZsdDsvZywgJzwnKVxuICAgICAgLnJlcGxhY2UoLyZndDsvZywgJz4nKVxuICAgICAgLnJlcGxhY2UoLyZhbXA7L2csICcmJyk7XG4gIH1cblxuICAjc2V0RWRpdG9yRGlzYWJsZWQoXG4gICAgZm9jdXNhYmxlQ2hpbGRyZW46IEhUTUxFbGVtZW50W10sXG4gICAgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIGRpc2FibGVkOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gZGlzYWJsZWQgPyAnbm9uZScgOiAnYXV0byc7XG4gICAgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgICAgJ2FyaWEtZGlzYWJsZWQnLFxuICAgICAgZGlzYWJsZWQgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm9jdXNhYmxlQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgZm9jdXNhYmxlQ2hpbGRyZW4uZm9yRWFjaCgoYUZvY3VzYWJsZUNoaWxkKSA9PiB7XG4gICAgICAgIGFGb2N1c2FibGVDaGlsZC50YWJJbmRleCA9IGRpc2FibGVkID8gLTEgOiAwO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKT8uYm9keS5zZXRBdHRyaWJ1dGUoXG4gICAgICAnY29udGVudGVkaXRhYmxlJyxcbiAgICAgIGRpc2FibGVkID8gJ2ZhbHNlJyA6ICd0cnVlJyxcbiAgICApO1xuICB9XG59XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, booleanAttribute, inject, } from '@angular/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyDropdownMessageType, SkyDropdownModule, } from '@skyux/popovers';\nimport { SkyThemeModule } from '@skyux/theme';\nimport he from 'he';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { SkyTextEditorResourcesModule } from '../../shared/sky-text-editor-resources.module';\nimport { SkyTextEditorAdapterService } from '../services/text-editor-adapter.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@skyux/popovers\";\nimport * as i3 from \"@skyux/theme\";\nimport * as i4 from \"@skyux/layout\";\nimport * as i5 from \"@skyux/i18n\";\nconst FORMAT_MENU_ACTION = 'skyux_text_editor_format_menu_action_';\nconst EDIT_MENU_ACTION = 'skyux_text_editor_edit_menu_action_';\n/**\n * @internal\n */\nexport class SkyTextEditorMenubarComponent {\n constructor() {\n this.editorFocusStream = new Subject();\n this.menus = [];\n this.mergeFields = [];\n this.disabled = false;\n this.editDropdownStream = new Subject();\n this.formatDropdownStream = new Subject();\n this.mergeFieldDropdownStream = new Subject();\n this.#ngUnsubscribe = new Subject();\n this.#adapterService = inject(SkyTextEditorAdapterService);\n this.#resources = inject(SkyLibResourcesService);\n }\n #ngUnsubscribe;\n #adapterService;\n #resources;\n ngOnInit() {\n this.editorFocusStream\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#closeDropdowns();\n });\n this.#resources\n .getStrings({\n bold: FORMAT_MENU_ACTION + 'bold_label',\n boldShort: FORMAT_MENU_ACTION + 'bold_key_shortcut',\n italic: FORMAT_MENU_ACTION + 'italic_label',\n italicShort: FORMAT_MENU_ACTION + 'italic_key_shortcut',\n underline: FORMAT_MENU_ACTION + 'underline_label',\n underlineShort: FORMAT_MENU_ACTION + 'underline_key_shortcut',\n strikethrough: FORMAT_MENU_ACTION + 'strikethrough_label',\n clearFormatting: FORMAT_MENU_ACTION + 'clear_formatting_label',\n undo: EDIT_MENU_ACTION + 'undo_label',\n undoShort: EDIT_MENU_ACTION + 'undo_key_shortcut',\n redo: EDIT_MENU_ACTION + 'redo_label',\n redoShort: EDIT_MENU_ACTION + 'redo_key_shortcut',\n cut: EDIT_MENU_ACTION + 'cut_label',\n cutShort: EDIT_MENU_ACTION + 'cut_key_shortcut',\n copy: EDIT_MENU_ACTION + 'copy_label',\n copyShort: EDIT_MENU_ACTION + 'copy_key_shortcut',\n paste: EDIT_MENU_ACTION + 'paste_label',\n pasteShort: EDIT_MENU_ACTION + 'paste_key_shortcut',\n selectAll: EDIT_MENU_ACTION + 'select_all_label',\n selectAllShort: EDIT_MENU_ACTION + 'select_all_key_shortcut',\n })\n .pipe(take(1), takeUntil(this.#ngUnsubscribe))\n .subscribe((resources) => {\n this.formatItems = [\n {\n function: () => this.execCommand('bold'),\n label: resources.bold,\n keyShortcut: resources.boldShort,\n },\n {\n function: () => this.execCommand('italic'),\n label: resources.italic,\n keyShortcut: resources.italicShort,\n },\n {\n function: () => this.execCommand('underline'),\n label: resources.underline,\n keyShortcut: resources.underlineShort,\n },\n {\n function: () => this.execCommand('strikethrough'),\n label: resources.strikethrough,\n },\n {\n isDivider: true,\n },\n {\n function: () => this.#clearFormat(),\n label: resources.clearFormatting,\n },\n ];\n this.editItems = [\n {\n function: () => this.execCommand('undo'),\n label: resources.undo,\n keyShortcut: resources.undoShort,\n },\n {\n function: () => this.execCommand('redo'),\n label: resources.redo,\n keyShortcut: resources.redoShort,\n },\n {\n isDivider: true,\n },\n {\n function: () => this.execCommand('cut'),\n label: resources.cut,\n keyShortcut: resources.cutShort,\n },\n {\n function: () => this.execCommand('copy'),\n label: resources.copy,\n keyShortcut: resources.copyShort,\n },\n {\n function: () => this.execCommand('paste'),\n label: resources.paste,\n keyShortcut: resources.pasteShort,\n },\n {\n isDivider: true,\n },\n {\n function: () => this.execCommand('selectAll'),\n label: resources.selectAll,\n keyShortcut: resources.selectAllShort,\n },\n ];\n });\n }\n ngOnDestroy() {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n execCommand(command, value = '') {\n void this.#adapterService.execCommand({\n command: command,\n value: value,\n });\n }\n insertMergeField(field) {\n this.execCommand('insertHTML', '<img style=\"display: inline; cursor: grab;\" data-fieldid=\"' +\n he.escape(field.id) +\n '\" data-fielddisplay=\"' +\n he.escape(field.name) +\n '\" src=\"' +\n (field.previewImageUrl ||\n this.#adapterService.getMergeFieldDataURI(field.name)) +\n '\">');\n }\n #closeDropdowns() {\n this.editDropdownStream.next({ type: SkyDropdownMessageType.Close });\n this.formatDropdownStream.next({ type: SkyDropdownMessageType.Close });\n this.mergeFieldDropdownStream.next({ type: SkyDropdownMessageType.Close });\n }\n #clearFormat() {\n const currentSelection = this.#adapterService.getCurrentSelection();\n /* istanbul ignore else */\n if (currentSelection &&\n currentSelection.rangeCount > 0 &&\n currentSelection.getRangeAt(0).toString().length <= 0) {\n this.execCommand('selectAll');\n }\n this.execCommand('removeFormat');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorMenubarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.0\", type: SkyTextEditorMenubarComponent, isStandalone: true, selector: \"sky-text-editor-menubar\", inputs: { editorFocusStream: \"editorFocusStream\", menus: \"menus\", mergeFields: \"mergeFields\", disabled: [\"disabled\", \"disabled\", booleanAttribute] }, ngImport: i0, template: \"@for (menu of menus; track menu) {\\n <sky-toolbar-item\\n class=\\\"sky-text-editor-menu\\\"\\n [ngClass]=\\\"'sky-text-editor-menu-' + menu\\\"\\n >\\n @switch (menu) {\\n @case ('edit') {\\n <sky-dropdown\\n label=\\\"Edit menu\\\"\\n [disabled]=\\\"disabled\\\"\\n [messageStream]=\\\"editDropdownStream\\\"\\n >\\n <sky-dropdown-button>\\n {{\\n 'skyux_text_editor_menubar_dropdown_button_edit_label'\\n | skyLibResources\\n }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (editItem of editItems; track editItem) {\\n <sky-dropdown-item>\\n @if (!editItem.isDivider) {\\n <button type=\\\"button\\\" (click)=\\\"editItem?.function?.()\\\">\\n {{ editItem.label }}\\n @if (editItem.keyShortcut) {\\n <div\\n class=\\\"sky-text-editor-menu-key-shortcut\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-font-deemphasized': 'modern',\\n 'sky-deemphasized': 'default'\\n }\\\"\\n >\\n {{ editItem.keyShortcut }}\\n </div>\\n }\\n </button>\\n } @else {\\n <div\\n class=\\\"sky-text-editor-dropdown-item-divider\\\"\\n role=\\\"divider\\\"\\n ></div>\\n }\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('format') {\\n <sky-dropdown\\n label=\\\"Format menu\\\"\\n [disabled]=\\\"disabled\\\"\\n [messageStream]=\\\"formatDropdownStream\\\"\\n >\\n <sky-dropdown-button>\\n {{\\n 'skyux_text_editor_menubar_dropdown_button_format_label'\\n | skyLibResources\\n }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (formatItem of formatItems; track formatItem) {\\n <sky-dropdown-item>\\n @if (!formatItem.isDivider) {\\n <button type=\\\"button\\\" (click)=\\\"formatItem?.function?.()\\\">\\n {{ formatItem.label }}\\n @if (formatItem.keyShortcut) {\\n <div\\n class=\\\"sky-text-editor-menu-key-shortcut\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-font-deemphasized': 'modern',\\n 'sky-deemphasized': 'default'\\n }\\\"\\n >\\n {{ formatItem.keyShortcut }}\\n </div>\\n }\\n </button>\\n } @else {\\n <div\\n class=\\\"sky-text-editor-dropdown-item-divider\\\"\\n role=\\\"divider\\\"\\n ></div>\\n }\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('merge-field') {\\n @if (mergeFields && mergeFields.length > 0) {\\n <sky-dropdown\\n label=\\\"Insert merge field\\\"\\n [disabled]=\\\"disabled\\\"\\n [messageStream]=\\\"mergeFieldDropdownStream\\\"\\n >\\n <sky-dropdown-button>\\n {{\\n 'skyux_text_editor_menubar_dropdown_button_insert_label'\\n | skyLibResources\\n }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (mergeField of mergeFields; track mergeField.name) {\\n <sky-dropdown-item>\\n <button type=\\\"button\\\" (click)=\\\"insertMergeField(mergeField)\\\">\\n {{ mergeField.name }}\\n </button>\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n }\\n }\\n </sky-toolbar-item>\\n}\\n\", styles: [\".sky-text-editor-dropdown-item-divider{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,.1);cursor:default;filter:none}.sky-text-editor-menu-key-shortcut{float:right;margin-left:15px}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"ngmodule\", type: SkyDropdownModule }, { kind: \"component\", type: i2.λ2, selector: \"sky-dropdown-button\" }, { kind: \"component\", type: i2.λ3, selector: \"sky-dropdown\", inputs: [\"buttonStyle\", \"buttonType\", \"disabled\", \"label\", \"horizontalAlignment\", \"messageStream\", \"title\", \"trigger\"] }, { kind: \"component\", type: i2.λ1, selector: \"sky-dropdown-item\", inputs: [\"ariaRole\"] }, { kind: \"component\", type: i2.λ4, selector: \"sky-dropdown-menu\", inputs: [\"ariaLabelledBy\", \"ariaRole\", \"useNativeFocus\"], outputs: [\"menuChanges\"] }, { kind: \"ngmodule\", type: SkyTextEditorResourcesModule }, { kind: \"ngmodule\", type: SkyThemeModule }, { kind: \"directive\", type: i3.λ2, selector: \"[skyThemeClass]\", inputs: [\"class\", \"skyThemeClass\"] }, { kind: \"ngmodule\", type: SkyToolbarModule }, { kind: \"component\", type: i4.λ39, selector: \"sky-toolbar-item\" }, { kind: \"pipe\", type: i5.SkyLibResourcesPipe, name: \"skyLibResources\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorMenubarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-text-editor-menubar', changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n CommonModule,\n SkyDropdownModule,\n SkyTextEditorResourcesModule,\n SkyThemeModule,\n SkyToolbarModule,\n ], template: \"@for (menu of menus; track menu) {\\n <sky-toolbar-item\\n class=\\\"sky-text-editor-menu\\\"\\n [ngClass]=\\\"'sky-text-editor-menu-' + menu\\\"\\n >\\n @switch (menu) {\\n @case ('edit') {\\n <sky-dropdown\\n label=\\\"Edit menu\\\"\\n [disabled]=\\\"disabled\\\"\\n [messageStream]=\\\"editDropdownStream\\\"\\n >\\n <sky-dropdown-button>\\n {{\\n 'skyux_text_editor_menubar_dropdown_button_edit_label'\\n | skyLibResources\\n }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (editItem of editItems; track editItem) {\\n <sky-dropdown-item>\\n @if (!editItem.isDivider) {\\n <button type=\\\"button\\\" (click)=\\\"editItem?.function?.()\\\">\\n {{ editItem.label }}\\n @if (editItem.keyShortcut) {\\n <div\\n class=\\\"sky-text-editor-menu-key-shortcut\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-font-deemphasized': 'modern',\\n 'sky-deemphasized': 'default'\\n }\\\"\\n >\\n {{ editItem.keyShortcut }}\\n </div>\\n }\\n </button>\\n } @else {\\n <div\\n class=\\\"sky-text-editor-dropdown-item-divider\\\"\\n role=\\\"divider\\\"\\n ></div>\\n }\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('format') {\\n <sky-dropdown\\n label=\\\"Format menu\\\"\\n [disabled]=\\\"disabled\\\"\\n [messageStream]=\\\"formatDropdownStream\\\"\\n >\\n <sky-dropdown-button>\\n {{\\n 'skyux_text_editor_menubar_dropdown_button_format_label'\\n | skyLibResources\\n }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (formatItem of formatItems; track formatItem) {\\n <sky-dropdown-item>\\n @if (!formatItem.isDivider) {\\n <button type=\\\"button\\\" (click)=\\\"formatItem?.function?.()\\\">\\n {{ formatItem.label }}\\n @if (formatItem.keyShortcut) {\\n <div\\n class=\\\"sky-text-editor-menu-key-shortcut\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-font-deemphasized': 'modern',\\n 'sky-deemphasized': 'default'\\n }\\\"\\n >\\n {{ formatItem.keyShortcut }}\\n </div>\\n }\\n </button>\\n } @else {\\n <div\\n class=\\\"sky-text-editor-dropdown-item-divider\\\"\\n role=\\\"divider\\\"\\n ></div>\\n }\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('merge-field') {\\n @if (mergeFields && mergeFields.length > 0) {\\n <sky-dropdown\\n label=\\\"Insert merge field\\\"\\n [disabled]=\\\"disabled\\\"\\n [messageStream]=\\\"mergeFieldDropdownStream\\\"\\n >\\n <sky-dropdown-button>\\n {{\\n 'skyux_text_editor_menubar_dropdown_button_insert_label'\\n | skyLibResources\\n }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (mergeField of mergeFields; track mergeField.name) {\\n <sky-dropdown-item>\\n <button type=\\\"button\\\" (click)=\\\"insertMergeField(mergeField)\\\">\\n {{ mergeField.name }}\\n </button>\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n }\\n }\\n </sky-toolbar-item>\\n}\\n\", styles: [\".sky-text-editor-dropdown-item-divider{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,.1);cursor:default;filter:none}.sky-text-editor-menu-key-shortcut{float:right;margin-left:15px}\\n\"] }]\n }], propDecorators: { editorFocusStream: [{\n type: Input\n }], menus: [{\n type: Input\n }], mergeFields: [{\n type: Input\n }], disabled: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL21lbnViYXIvdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL21lbnViYXIvdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLGdCQUFnQixFQUNoQixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM3RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7OztBQUl0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QyxNQUFNLFdBQ3RDO3dCQUNQLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQiw0QkFBNEI7d0JBQzVCLGNBQWM7d0JBQ2QsZ0JBQWdCO3FCQUNqQjs4QkFJTSxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBSUMsS0FBSztzQkFEWCxLQUFLO2dCQUlDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5pbXBvcnQgeyBTa3lUb29sYmFyTW9kdWxlIH0gZnJvbSAnQHNreXV4L2xheW91dCc7XG5pbXBvcnQge1xuICBTa3lEcm9wZG93bk1lc3NhZ2UsXG4gIFNreURyb3Bkb3duTWVzc2FnZVR5cGUsXG4gIFNreURyb3Bkb3duTW9kdWxlLFxufSBmcm9tICdAc2t5dXgvcG9wb3ZlcnMnO1xuaW1wb3J0IHsgU2t5VGhlbWVNb2R1bGUgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgaGUgZnJvbSAnaGUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NreS10ZXh0LWVkaXRvci1yZXNvdXJjZXMubW9kdWxlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RleHQtZWRpdG9yLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yTWVudVR5cGUgfSBmcm9tICcuLi90eXBlcy9tZW51LXR5cGUnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lcmdlRmllbGQgfSBmcm9tICcuLi90eXBlcy90ZXh0LWVkaXRvci1tZXJnZS1maWVsZCc7XG5cbmNvbnN0IEZPUk1BVF9NRU5VX0FDVElPTiA9ICdza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25fJztcbmNvbnN0IEVESVRfTUVOVV9BQ1RJT04gPSAnc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl8nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktdGV4dC1lZGl0b3ItbWVudWJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LWVkaXRvci1tZW51YmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTa3lEcm9wZG93bk1vZHVsZSxcbiAgICBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlLFxuICAgIFNreVRoZW1lTW9kdWxlLFxuICAgIFNreVRvb2xiYXJNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JNZW51YmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBASW5wdXQoKVxuICBwdWJsaWMgZWRpdG9yRm9jdXNTdHJlYW0gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtZW51czogU2t5VGV4dEVkaXRvck1lbnVUeXBlW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWVyZ2VGaWVsZHM6IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkW10gPSBbXTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgcHVibGljIGVkaXREcm9wZG93blN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreURyb3Bkb3duTWVzc2FnZT4oKTtcblxuICBwdWJsaWMgZWRpdEl0ZW1zOlxuICAgIHwge1xuICAgICAgICBmdW5jdGlvbj86ICgpID0+IHZvaWQ7XG4gICAgICAgIGlzRGl2aWRlcj86IGJvb2xlYW47XG4gICAgICAgIGxhYmVsPzogc3RyaW5nO1xuICAgICAgICBrZXlTaG9ydGN1dD86IHN0cmluZztcbiAgICAgIH1bXVxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBmb3JtYXREcm9wZG93blN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreURyb3Bkb3duTWVzc2FnZT4oKTtcblxuICBwdWJsaWMgZm9ybWF0SXRlbXM6XG4gICAgfCB7XG4gICAgICAgIGZ1bmN0aW9uPzogKCkgPT4gdm9pZDtcbiAgICAgICAgaXNEaXZpZGVyPzogYm9vbGVhbjtcbiAgICAgICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgICAgIGtleVNob3J0Y3V0Pzogc3RyaW5nO1xuICAgICAgfVtdXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIG1lcmdlRmllbGREcm9wZG93blN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreURyb3Bkb3duTWVzc2FnZT4oKTtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgI2FkYXB0ZXJTZXJ2aWNlID0gaW5qZWN0KFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSk7XG4gIHJlYWRvbmx5ICNyZXNvdXJjZXMgPSBpbmplY3QoU2t5TGliUmVzb3VyY2VzU2VydmljZSk7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yRm9jdXNTdHJlYW1cbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3ducygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiNyZXNvdXJjZXNcbiAgICAgIC5nZXRTdHJpbmdzKHtcbiAgICAgICAgYm9sZDogRk9STUFUX01FTlVfQUNUSU9OICsgJ2JvbGRfbGFiZWwnLFxuICAgICAgICBib2xkU2hvcnQ6IEZPUk1BVF9NRU5VX0FDVElPTiArICdib2xkX2tleV9zaG9ydGN1dCcsXG4gICAgICAgIGl0YWxpYzogRk9STUFUX01FTlVfQUNUSU9OICsgJ2l0YWxpY19sYWJlbCcsXG4gICAgICAgIGl0YWxpY1Nob3J0OiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAnaXRhbGljX2tleV9zaG9ydGN1dCcsXG4gICAgICAgIHVuZGVybGluZTogRk9STUFUX01FTlVfQUNUSU9OICsgJ3VuZGVybGluZV9sYWJlbCcsXG4gICAgICAgIHVuZGVybGluZVNob3J0OiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAndW5kZXJsaW5lX2tleV9zaG9ydGN1dCcsXG4gICAgICAgIHN0cmlrZXRocm91Z2g6IEZPUk1BVF9NRU5VX0FDVElPTiArICdzdHJpa2V0aHJvdWdoX2xhYmVsJyxcbiAgICAgICAgY2xlYXJGb3JtYXR0aW5nOiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAnY2xlYXJfZm9ybWF0dGluZ19sYWJlbCcsXG4gICAgICAgIHVuZG86IEVESVRfTUVOVV9BQ1RJT04gKyAndW5kb19sYWJlbCcsXG4gICAgICAgIHVuZG9TaG9ydDogRURJVF9NRU5VX0FDVElPTiArICd1bmRvX2tleV9zaG9ydGN1dCcsXG4gICAgICAgIHJlZG86IEVESVRfTUVOVV9BQ1RJT04gKyAncmVkb19sYWJlbCcsXG4gICAgICAgIHJlZG9TaG9ydDogRURJVF9NRU5VX0FDVElPTiArICdyZWRvX2tleV9zaG9ydGN1dCcsXG4gICAgICAgIGN1dDogRURJVF9NRU5VX0FDVElPTiArICdjdXRfbGFiZWwnLFxuICAgICAgICBjdXRTaG9ydDogRURJVF9NRU5VX0FDVElPTiArICdjdXRfa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgY29weTogRURJVF9NRU5VX0FDVElPTiArICdjb3B5X2xhYmVsJyxcbiAgICAgICAgY29weVNob3J0OiBFRElUX01FTlVfQUNUSU9OICsgJ2NvcHlfa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgcGFzdGU6IEVESVRfTUVOVV9BQ1RJT04gKyAncGFzdGVfbGFiZWwnLFxuICAgICAgICBwYXN0ZVNob3J0OiBFRElUX01FTlVfQUNUSU9OICsgJ3Bhc3RlX2tleV9zaG9ydGN1dCcsXG4gICAgICAgIHNlbGVjdEFsbDogRURJVF9NRU5VX0FDVElPTiArICdzZWxlY3RfYWxsX2xhYmVsJyxcbiAgICAgICAgc2VsZWN0QWxsU2hvcnQ6IEVESVRfTUVOVV9BQ1RJT04gKyAnc2VsZWN0X2FsbF9rZXlfc2hvcnRjdXQnLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRha2UoMSksIHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc291cmNlcykgPT4ge1xuICAgICAgICB0aGlzLmZvcm1hdEl0ZW1zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdib2xkJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLmJvbGQsXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLmJvbGRTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdpdGFsaWMnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuaXRhbGljLFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy5pdGFsaWNTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCd1bmRlcmxpbmUnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMudW5kZXJsaW5lLFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy51bmRlcmxpbmVTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdzdHJpa2V0aHJvdWdoJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLnN0cmlrZXRocm91Z2gsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpc0RpdmlkZXI6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogKCk6IHZvaWQgPT4gdGhpcy4jY2xlYXJGb3JtYXQoKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuY2xlYXJGb3JtYXR0aW5nLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuZWRpdEl0ZW1zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCd1bmRvJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLnVuZG8sXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLnVuZG9TaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdyZWRvJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLnJlZG8sXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLnJlZG9TaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlzRGl2aWRlcjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdjdXQnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuY3V0LFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy5jdXRTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdjb3B5JyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLmNvcHksXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLmNvcHlTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdwYXN0ZScpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5wYXN0ZSxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMucGFzdGVTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlzRGl2aWRlcjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKTogdm9pZCA9PiB0aGlzLmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuc2VsZWN0QWxsLFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy5zZWxlY3RBbGxTaG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGV4ZWNDb21tYW5kKGNvbW1hbmQ6IHN0cmluZywgdmFsdWUgPSAnJyk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy4jYWRhcHRlclNlcnZpY2UuZXhlY0NvbW1hbmQoe1xuICAgICAgY29tbWFuZDogY29tbWFuZCxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnRNZXJnZUZpZWxkKGZpZWxkOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZCk6IHZvaWQge1xuICAgIHRoaXMuZXhlY0NvbW1hbmQoXG4gICAgICAnaW5zZXJ0SFRNTCcsXG4gICAgICAnPGltZyBzdHlsZT1cImRpc3BsYXk6IGlubGluZTsgY3Vyc29yOiBncmFiO1wiIGRhdGEtZmllbGRpZD1cIicgK1xuICAgICAgICBoZS5lc2NhcGUoZmllbGQuaWQpICtcbiAgICAgICAgJ1wiIGRhdGEtZmllbGRkaXNwbGF5PVwiJyArXG4gICAgICAgIGhlLmVzY2FwZShmaWVsZC5uYW1lKSArXG4gICAgICAgICdcIiBzcmM9XCInICtcbiAgICAgICAgKGZpZWxkLnByZXZpZXdJbWFnZVVybCB8fFxuICAgICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldE1lcmdlRmllbGREYXRhVVJJKGZpZWxkLm5hbWUpKSArXG4gICAgICAgICdcIj4nLFxuICAgICk7XG4gIH1cblxuICAjY2xvc2VEcm9wZG93bnMoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0RHJvcGRvd25TdHJlYW0ubmV4dCh7IHR5cGU6IFNreURyb3Bkb3duTWVzc2FnZVR5cGUuQ2xvc2UgfSk7XG4gICAgdGhpcy5mb3JtYXREcm9wZG93blN0cmVhbS5uZXh0KHsgdHlwZTogU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSB9KTtcbiAgICB0aGlzLm1lcmdlRmllbGREcm9wZG93blN0cmVhbS5uZXh0KHsgdHlwZTogU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSB9KTtcbiAgfVxuXG4gICNjbGVhckZvcm1hdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvbigpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKFxuICAgICAgY3VycmVudFNlbGVjdGlvbiAmJlxuICAgICAgY3VycmVudFNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCAmJlxuICAgICAgY3VycmVudFNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLnRvU3RyaW5nKCkubGVuZ3RoIDw9IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZXhlY0NvbW1hbmQoJ3NlbGVjdEFsbCcpO1xuICAgIH1cbiAgICB0aGlzLmV4ZWNDb21tYW5kKCdyZW1vdmVGb3JtYXQnKTtcbiAgfVxufVxuIiwiQGZvciAobWVudSBvZiBtZW51czsgdHJhY2sgbWVudSkge1xuICA8c2t5LXRvb2xiYXItaXRlbVxuICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLW1lbnVcIlxuICAgIFtuZ0NsYXNzXT1cIidza3ktdGV4dC1lZGl0b3ItbWVudS0nICsgbWVudVwiXG4gID5cbiAgICBAc3dpdGNoIChtZW51KSB7XG4gICAgICBAY2FzZSAoJ2VkaXQnKSB7XG4gICAgICAgIDxza3ktZHJvcGRvd25cbiAgICAgICAgICBsYWJlbD1cIkVkaXQgbWVudVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbbWVzc2FnZVN0cmVhbV09XCJlZGl0RHJvcGRvd25TdHJlYW1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnc2t5dXhfdGV4dF9lZGl0b3JfbWVudWJhcl9kcm9wZG93bl9idXR0b25fZWRpdF9sYWJlbCdcbiAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAgPHNreS1kcm9wZG93bi1tZW51PlxuICAgICAgICAgICAgQGZvciAoZWRpdEl0ZW0gb2YgZWRpdEl0ZW1zOyB0cmFjayBlZGl0SXRlbSkge1xuICAgICAgICAgICAgICA8c2t5LWRyb3Bkb3duLWl0ZW0+XG4gICAgICAgICAgICAgICAgQGlmICghZWRpdEl0ZW0uaXNEaXZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZWRpdEl0ZW0/LmZ1bmN0aW9uPy4oKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBlZGl0SXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGVkaXRJdGVtLmtleVNob3J0Y3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItbWVudS1rZXktc2hvcnRjdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnc2t5LWZvbnQtZGVlbXBoYXNpemVkJzogJ21vZGVybicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdza3ktZGVlbXBoYXNpemVkJzogJ2RlZmF1bHQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBlZGl0SXRlbS5rZXlTaG9ydGN1dCB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItZHJvcGRvd24taXRlbS1kaXZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImRpdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9za3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgICAgICA8L3NreS1kcm9wZG93bj5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnZm9ybWF0Jykge1xuICAgICAgICA8c2t5LWRyb3Bkb3duXG4gICAgICAgICAgbGFiZWw9XCJGb3JtYXQgbWVudVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbbWVzc2FnZVN0cmVhbV09XCJmb3JtYXREcm9wZG93blN0cmVhbVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c2t5LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICdza3l1eF90ZXh0X2VkaXRvcl9tZW51YmFyX2Ryb3Bkb3duX2J1dHRvbl9mb3JtYXRfbGFiZWwnXG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9za3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICAgIDxza3ktZHJvcGRvd24tbWVudT5cbiAgICAgICAgICAgIEBmb3IgKGZvcm1hdEl0ZW0gb2YgZm9ybWF0SXRlbXM7IHRyYWNrIGZvcm1hdEl0ZW0pIHtcbiAgICAgICAgICAgICAgPHNreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICAgICAgICAgIEBpZiAoIWZvcm1hdEl0ZW0uaXNEaXZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0SXRlbT8uZnVuY3Rpb24/LigpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdEl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmb3JtYXRJdGVtLmtleVNob3J0Y3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItbWVudS1rZXktc2hvcnRjdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnc2t5LWZvbnQtZGVlbXBoYXNpemVkJzogJ21vZGVybicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdza3ktZGVlbXBoYXNpemVkJzogJ2RlZmF1bHQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXRJdGVtLmtleVNob3J0Y3V0IH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci1kcm9wZG93bi1pdGVtLWRpdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiZGl2aWRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgIDwvc2t5LWRyb3Bkb3duPlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdtZXJnZS1maWVsZCcpIHtcbiAgICAgICAgQGlmIChtZXJnZUZpZWxkcyAmJiBtZXJnZUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgPHNreS1kcm9wZG93blxuICAgICAgICAgICAgbGFiZWw9XCJJbnNlcnQgbWVyZ2UgZmllbGRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFttZXNzYWdlU3RyZWFtXT1cIm1lcmdlRmllbGREcm9wZG93blN0cmVhbVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgJ3NreXV4X3RleHRfZWRpdG9yX21lbnViYXJfZHJvcGRvd25fYnV0dG9uX2luc2VydF9sYWJlbCdcbiAgICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L3NreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAgICA8c2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgICAgIEBmb3IgKG1lcmdlRmllbGQgb2YgbWVyZ2VGaWVsZHM7IHRyYWNrIG1lcmdlRmllbGQubmFtZSkge1xuICAgICAgICAgICAgICAgIDxza3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJpbnNlcnRNZXJnZUZpZWxkKG1lcmdlRmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG1lcmdlRmllbGQubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9za3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9za3ktZHJvcGRvd24tbWVudT5cbiAgICAgICAgICA8L3NreS1kcm9wZG93bj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgPC9za3ktdG9vbGJhci1pdGVtPlxufVxuIl19","/**\n * @internal\n */\nexport class SkyUrlModalContext {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItdXJsLW1vZGFsLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwtY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7Q0FHOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lUZXh0RWRpdG9yTGlua1dpbmRvd09wdGlvbnNUeXBlIH0gZnJvbSAnLi4vdHlwZXMvbGluay13aW5kb3ctb3B0aW9ucy10eXBlJztcblxuaW1wb3J0IHsgVXJsTW9kYWxSZXN1bHQgfSBmcm9tICcuL3RleHQtZWRpdG9yLXVybC1tb2RhbC1yZXN1bHQnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgU2t5VXJsTW9kYWxDb250ZXh0IHtcbiAgcHVibGljIHVybFJlc3VsdDogVXJsTW9kYWxSZXN1bHQgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBsaW5rV2luZG93T3B0aW9uczogU2t5VGV4dEVkaXRvckxpbmtXaW5kb3dPcHRpb25zVHlwZVtdIHwgdW5kZWZpbmVkO1xufVxuIl19","import { Component, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyIdModule } from '@skyux/core';\nimport { SkyInputBoxModule } from '@skyux/forms';\nimport { SkyModalInstance, SkyModalModule } from '@skyux/modals';\nimport { SkyTabsModule } from '@skyux/tabs';\nimport { SkyValidation } from '@skyux/validation';\nimport { SkyTextEditorResourcesModule } from '../../shared/sky-text-editor-resources.module';\nimport { SkyUrlModalContext } from './text-editor-url-modal-context';\nimport { UrlTarget } from './text-editor-url-target';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@skyux/modals\";\nimport * as i3 from \"@skyux/core\";\nimport * as i4 from \"@skyux/forms\";\nimport * as i5 from \"@skyux/tabs\";\nimport * as i6 from \"@skyux/i18n\";\nconst emailKey = 'mailto:';\nconst queryStringParamKey = '?Subject=';\n/**\n * @internal\n */\nexport class SkyTextEditorUrlModalComponent {\n set activeTab(value) {\n this.#_activeTab = value;\n this.valid = this.#isValid();\n }\n get activeTab() {\n return this.#_activeTab;\n }\n set emailAddress(value) {\n this.#_emailAddress = value;\n this.valid = this.#isValid();\n }\n get emailAddress() {\n return this.#_emailAddress;\n }\n set url(value) {\n this.#_url = value;\n this.valid = this.#isValid();\n }\n get url() {\n return this.#_url;\n }\n #_activeTab;\n #_emailAddress;\n #_url;\n #modalContext;\n #modalInstance;\n constructor() {\n this.emailAddressValid = false;\n this.allowAllOpenLinkOptions = true;\n this.openLinksInNewWindowOnly = false;\n this.subject = '';\n this.target = 0;\n this.valid = false;\n this.#_activeTab = 0;\n this.#_emailAddress = '';\n this.#_url = 'https://';\n this.#modalContext = inject(SkyUrlModalContext);\n this.#modalInstance = inject(SkyModalInstance);\n const linkWindowOptions = this.#modalContext.linkWindowOptions;\n if (linkWindowOptions?.length === 1) {\n this.allowAllOpenLinkOptions = false;\n if (linkWindowOptions[0] === 'new') {\n this.openLinksInNewWindowOnly = true;\n this.target = 1;\n }\n else {\n this.target = 0;\n }\n }\n if (this.#modalContext.urlResult) {\n if (this.#modalContext.urlResult.url.startsWith(emailKey)) {\n this.emailAddress = this.#modalContext.urlResult.url.replace(emailKey, '');\n let queryStringIndex = this.emailAddress.indexOf(queryStringParamKey);\n queryStringIndex =\n queryStringIndex > -1\n ? queryStringIndex\n : this.emailAddress.indexOf(queryStringParamKey.toLowerCase());\n /* istanbul ignore else */\n if (queryStringIndex > -1) {\n this.subject = decodeURI(this.emailAddress).slice(queryStringIndex + queryStringParamKey.length);\n this.emailAddress = this.emailAddress.slice(0, queryStringIndex);\n }\n // Set active tab to email\n this.activeTab = 1;\n }\n else {\n this.url = this.#modalContext.urlResult.url;\n this.target = this.#modalContext.urlResult.target;\n // set active tab to web page\n this.activeTab = 0;\n }\n }\n }\n activeTabChanged(value) {\n this.activeTab = Number(value);\n }\n save() {\n /* istanbul ignore else */\n if (this.#isValid()) {\n if (this.activeTab === 0) {\n this.#modalInstance.save({\n url: this.url,\n target: this.target\n ? parseInt(this.target, undefined)\n : UrlTarget.None,\n });\n }\n else {\n this.#modalInstance.save({\n url: this.#getEmailUrl(),\n target: UrlTarget.None,\n });\n }\n }\n }\n cancel() {\n this.#modalInstance.cancel();\n }\n #getEmailUrl() {\n return (emailKey +\n this.emailAddress +\n (this.subject ? '?Subject=' + encodeURI(this.subject) : ''));\n }\n #isValid() {\n if (this.activeTab === 0) {\n return !!this.url && SkyValidation.isUrl(this.url);\n }\n return !!this.emailAddress && SkyValidation.isEmail(this.emailAddress);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorUrlModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.0\", type: SkyTextEditorUrlModalComponent, isStandalone: true, selector: \"sky-text-editor-url-modal\", ngImport: i0, template: \"<sky-modal>\\n <sky-modal-header>\\n {{ 'skyux_text_editor_url_modal_header_label' | skyLibResources }}\\n </sky-modal-header>\\n <sky-modal-content>\\n <sky-tabset\\n data-sky-id=\\\"test-tabset\\\"\\n [active]=\\\"activeTab\\\"\\n (activeChange)=\\\"activeTabChanged($event)\\\"\\n >\\n <sky-tab tabHeading=\\\"Web page\\\">\\n <div class=\\\"sky-form-group sky-text-editor-url-modal-first-field\\\">\\n <sky-input-box\\n class=\\\"sky-text-editor-url-input\\\"\\n stacked=\\\"true\\\"\\n [hintText]=\\\"\\n openLinksInNewWindowOnly\\n ? ('skyux_text_editor_url_modal_open_in_new_window_label'\\n | skyLibResources)\\n : undefined\\n \\\"\\n >\\n <label\\n class=\\\"sky-control-label sky-control-label-required\\\"\\n [for]=\\\"urlInput.id\\\"\\n >\\n {{ 'skyux_text_editor_url_modal_url_label' | skyLibResources }}\\n </label>\\n <input\\n #urlInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n type=\\\"text\\\"\\n skyId\\n [(ngModel)]=\\\"url\\\"\\n />\\n </sky-input-box>\\n </div>\\n @if (allowAllOpenLinkOptions) {\\n <sky-input-box stacked=\\\"true\\\" class=\\\"sky-form-group\\\">\\n <label class=\\\"sky-control-label\\\" [for]=\\\"targetInput.id\\\">\\n {{ 'skyux_text_editor_url_modal_open_label' | skyLibResources }}\\n </label>\\n <select\\n #targetInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n skyId\\n [(ngModel)]=\\\"target\\\"\\n >\\n <option value=\\\"0\\\">\\n {{\\n 'skyux_text_editor_url_modal_current_option_label'\\n | skyLibResources\\n }}\\n </option>\\n <option value=\\\"1\\\">\\n {{\\n 'skyux_text_editor_url_modal_new_option_label'\\n | skyLibResources\\n }}\\n </option>\\n </select>\\n </sky-input-box>\\n }\\n </sky-tab>\\n <sky-tab tabHeading=\\\"Email address\\\">\\n <div class=\\\"sky-form-group first-field\\\">\\n <sky-input-box stacked=\\\"true\\\">\\n <label\\n class=\\\"sky-control-label sky-control-label-required\\\"\\n [for]=\\\"emailAddressInput.id\\\"\\n >\\n {{ 'skyux_text_editor_url_modal_email_label' | skyLibResources }}\\n </label>\\n <input\\n #emailAddressInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n type=\\\"text\\\"\\n skyId\\n [(ngModel)]=\\\"emailAddress\\\"\\n />\\n </sky-input-box>\\n </div>\\n <sky-input-box stacked=\\\"true\\\" class=\\\"sky-form-group\\\">\\n <label class=\\\"sky-control-label\\\" [for]=\\\"subjectInput.id\\\">\\n {{ 'skyux_text_editor_url_modal_subject_label' | skyLibResources }}\\n </label>\\n <input\\n #subjectInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n type=\\\"text\\\"\\n skyId\\n [(ngModel)]=\\\"subject\\\"\\n />\\n </sky-input-box>\\n </sky-tab>\\n </sky-tabset>\\n </sky-modal-content>\\n <sky-modal-footer>\\n <button\\n type=\\\"submit\\\"\\n class=\\\"sky-btn sky-btn-primary\\\"\\n [disabled]=\\\"!valid\\\"\\n (click)=\\\"save()\\\"\\n >\\n {{ 'skyux_text_editor_url_modal_save_button_label' | skyLibResources }}\\n </button>\\n <button type=\\\"button\\\" class=\\\"sky-btn sky-btn-link\\\" (click)=\\\"cancel()\\\">\\n {{ 'skyux_text_editor_url_modal_cancel_button_label' | skyLibResources }}\\n </button>\\n </sky-modal-footer>\\n</sky-modal>\\n\", styles: [\".sky-text-editor-url-modal-first-field{margin-top:15px}\\n\"], dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgSelectOption, selector: \"option\", inputs: [\"ngValue\", \"value\"] }, { kind: \"directive\", type: i1.ɵNgSelectMultipleOption, selector: \"option\", inputs: [\"ngValue\", \"value\"] }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.SelectControlValueAccessor, selector: \"select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]\", inputs: [\"compareWith\"] }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: SkyModalModule }, { kind: \"component\", type: i2.λ5, selector: \"sky-modal\", inputs: [\"formErrors\", \"headingText\", \"helpKey\", \"helpPopoverContent\", \"helpPopoverTitle\", \"ariaRole\", \"tiledBody\", \"ariaDescribedBy\", \"ariaLabelledBy\", \"layout\"] }, { kind: \"component\", type: i2.λ2, selector: \"sky-modal-content\" }, { kind: \"component\", type: i2.λ3, selector: \"sky-modal-footer\" }, { kind: \"component\", type: i2.λ4, selector: \"sky-modal-header\" }, { kind: \"ngmodule\", type: SkyIdModule }, { kind: \"directive\", type: i3.λ2, selector: \"[skyId]\", exportAs: [\"skyId\"] }, { kind: \"ngmodule\", type: SkyInputBoxModule }, { kind: \"component\", type: i4.λ10, selector: \"sky-input-box\", inputs: [\"hasErrors\", \"disabled\", \"labelText\", \"characterLimit\", \"stacked\", \"helpPopoverTitle\", \"helpPopoverContent\", \"helpKey\", \"hintText\"] }, { kind: \"ngmodule\", type: SkyTabsModule }, { kind: \"component\", type: i5.λ1, selector: \"sky-tab\", inputs: [\"active\", \"disabled\", \"permalinkValue\", \"tabHeaderCount\", \"tabHeading\", \"tabIndexValue\", \"layout\"], outputs: [\"close\"] }, { kind: \"component\", type: i5.λ2, selector: \"sky-tabset\", inputs: [\"active\", \"ariaLabel\", \"ariaLabelledBy\", \"permalinkId\", \"tabStyle\"], outputs: [\"activeChange\", \"newTab\", \"openTab\", \"tabIndexesChange\"] }, { kind: \"ngmodule\", type: SkyTextEditorResourcesModule }, { kind: \"pipe\", type: i6.SkyLibResourcesPipe, name: \"skyLibResources\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorUrlModalComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-text-editor-url-modal', imports: [\n FormsModule,\n SkyModalModule,\n SkyIdModule,\n SkyInputBoxModule,\n SkyTabsModule,\n SkyTextEditorResourcesModule,\n ], template: \"<sky-modal>\\n <sky-modal-header>\\n {{ 'skyux_text_editor_url_modal_header_label' | skyLibResources }}\\n </sky-modal-header>\\n <sky-modal-content>\\n <sky-tabset\\n data-sky-id=\\\"test-tabset\\\"\\n [active]=\\\"activeTab\\\"\\n (activeChange)=\\\"activeTabChanged($event)\\\"\\n >\\n <sky-tab tabHeading=\\\"Web page\\\">\\n <div class=\\\"sky-form-group sky-text-editor-url-modal-first-field\\\">\\n <sky-input-box\\n class=\\\"sky-text-editor-url-input\\\"\\n stacked=\\\"true\\\"\\n [hintText]=\\\"\\n openLinksInNewWindowOnly\\n ? ('skyux_text_editor_url_modal_open_in_new_window_label'\\n | skyLibResources)\\n : undefined\\n \\\"\\n >\\n <label\\n class=\\\"sky-control-label sky-control-label-required\\\"\\n [for]=\\\"urlInput.id\\\"\\n >\\n {{ 'skyux_text_editor_url_modal_url_label' | skyLibResources }}\\n </label>\\n <input\\n #urlInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n type=\\\"text\\\"\\n skyId\\n [(ngModel)]=\\\"url\\\"\\n />\\n </sky-input-box>\\n </div>\\n @if (allowAllOpenLinkOptions) {\\n <sky-input-box stacked=\\\"true\\\" class=\\\"sky-form-group\\\">\\n <label class=\\\"sky-control-label\\\" [for]=\\\"targetInput.id\\\">\\n {{ 'skyux_text_editor_url_modal_open_label' | skyLibResources }}\\n </label>\\n <select\\n #targetInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n skyId\\n [(ngModel)]=\\\"target\\\"\\n >\\n <option value=\\\"0\\\">\\n {{\\n 'skyux_text_editor_url_modal_current_option_label'\\n | skyLibResources\\n }}\\n </option>\\n <option value=\\\"1\\\">\\n {{\\n 'skyux_text_editor_url_modal_new_option_label'\\n | skyLibResources\\n }}\\n </option>\\n </select>\\n </sky-input-box>\\n }\\n </sky-tab>\\n <sky-tab tabHeading=\\\"Email address\\\">\\n <div class=\\\"sky-form-group first-field\\\">\\n <sky-input-box stacked=\\\"true\\\">\\n <label\\n class=\\\"sky-control-label sky-control-label-required\\\"\\n [for]=\\\"emailAddressInput.id\\\"\\n >\\n {{ 'skyux_text_editor_url_modal_email_label' | skyLibResources }}\\n </label>\\n <input\\n #emailAddressInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n type=\\\"text\\\"\\n skyId\\n [(ngModel)]=\\\"emailAddress\\\"\\n />\\n </sky-input-box>\\n </div>\\n <sky-input-box stacked=\\\"true\\\" class=\\\"sky-form-group\\\">\\n <label class=\\\"sky-control-label\\\" [for]=\\\"subjectInput.id\\\">\\n {{ 'skyux_text_editor_url_modal_subject_label' | skyLibResources }}\\n </label>\\n <input\\n #subjectInput=\\\"skyId\\\"\\n class=\\\"sky-form-control\\\"\\n type=\\\"text\\\"\\n skyId\\n [(ngModel)]=\\\"subject\\\"\\n />\\n </sky-input-box>\\n </sky-tab>\\n </sky-tabset>\\n </sky-modal-content>\\n <sky-modal-footer>\\n <button\\n type=\\\"submit\\\"\\n class=\\\"sky-btn sky-btn-primary\\\"\\n [disabled]=\\\"!valid\\\"\\n (click)=\\\"save()\\\"\\n >\\n {{ 'skyux_text_editor_url_modal_save_button_label' | skyLibResources }}\\n </button>\\n <button type=\\\"button\\\" class=\\\"sky-btn sky-btn-link\\\" (click)=\\\"cancel()\\\">\\n {{ 'skyux_text_editor_url_modal_cancel_button_label' | skyLibResources }}\\n </button>\\n </sky-modal-footer>\\n</sky-modal>\\n\", styles: [\".sky-text-editor-url-modal-first-field{margin-top:15px}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItdXJsLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3IvdXJsLW1vZGFsL3RleHQtZWRpdG9yLXVybC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFlLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7OztBQUVyRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFDM0IsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUM7QUFFeEM7O0dBRUc7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QWE7d0JBQ2IsNEJBQTRCO3FCQUM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUlkTW9kdWxlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5SW5wdXRCb3hNb2R1bGUgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuaW1wb3J0IHsgU2t5TW9kYWxJbnN0YW5jZSwgU2t5TW9kYWxNb2R1bGUgfSBmcm9tICdAc2t5dXgvbW9kYWxzJztcbmltcG9ydCB7IFNreVRhYkluZGV4LCBTa3lUYWJzTW9kdWxlIH0gZnJvbSAnQHNreXV4L3RhYnMnO1xuaW1wb3J0IHsgU2t5VmFsaWRhdGlvbiB9IGZyb20gJ0Bza3l1eC92YWxpZGF0aW9uJztcblxuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclJlc291cmNlc01vZHVsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9za3ktdGV4dC1lZGl0b3ItcmVzb3VyY2VzLm1vZHVsZSc7XG5cbmltcG9ydCB7IFNreVVybE1vZGFsQ29udGV4dCB9IGZyb20gJy4vdGV4dC1lZGl0b3ItdXJsLW1vZGFsLWNvbnRleHQnO1xuaW1wb3J0IHsgVXJsTW9kYWxSZXN1bHQgfSBmcm9tICcuL3RleHQtZWRpdG9yLXVybC1tb2RhbC1yZXN1bHQnO1xuaW1wb3J0IHsgVXJsVGFyZ2V0IH0gZnJvbSAnLi90ZXh0LWVkaXRvci11cmwtdGFyZ2V0JztcblxuY29uc3QgZW1haWxLZXkgPSAnbWFpbHRvOic7XG5jb25zdCBxdWVyeVN0cmluZ1BhcmFtS2V5ID0gJz9TdWJqZWN0PSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS10ZXh0LWVkaXRvci11cmwtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3ItdXJsLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1lZGl0b3ItdXJsLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBTa3lNb2RhbE1vZHVsZSxcbiAgICBTa3lJZE1vZHVsZSxcbiAgICBTa3lJbnB1dEJveE1vZHVsZSxcbiAgICBTa3lUYWJzTW9kdWxlLFxuICAgIFNreVRleHRFZGl0b3JSZXNvdXJjZXNNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JVcmxNb2RhbENvbXBvbmVudCB7XG4gIHB1YmxpYyBzZXQgYWN0aXZlVGFiKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLiNfYWN0aXZlVGFiID0gdmFsdWU7XG4gICAgdGhpcy52YWxpZCA9IHRoaXMuI2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aXZlVGFiKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19hY3RpdmVUYWI7XG4gIH1cblxuICBwdWJsaWMgc2V0IGVtYWlsQWRkcmVzcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy4jX2VtYWlsQWRkcmVzcyA9IHZhbHVlO1xuICAgIHRoaXMudmFsaWQgPSB0aGlzLiNpc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVtYWlsQWRkcmVzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNfZW1haWxBZGRyZXNzO1xuICB9XG5cbiAgcHVibGljIHNldCB1cmwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuI191cmwgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbGlkID0gdGhpcy4jaXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX3VybDtcbiAgfVxuXG4gIHB1YmxpYyBlbWFpbEFkZHJlc3NWYWxpZCA9IGZhbHNlO1xuICBwdWJsaWMgYWxsb3dBbGxPcGVuTGlua09wdGlvbnMgPSB0cnVlO1xuICBwdWJsaWMgb3BlbkxpbmtzSW5OZXdXaW5kb3dPbmx5ID0gZmFsc2U7XG4gIHB1YmxpYyBzdWJqZWN0ID0gJyc7XG4gIHB1YmxpYyB0YXJnZXQ6IG51bWJlciB8IHN0cmluZyA9IDA7XG4gIHB1YmxpYyB2YWxpZCA9IGZhbHNlO1xuXG4gICNfYWN0aXZlVGFiID0gMDtcbiAgI19lbWFpbEFkZHJlc3MgPSAnJztcbiAgI191cmwgPSAnaHR0cHM6Ly8nO1xuXG4gIHJlYWRvbmx5ICNtb2RhbENvbnRleHQgPSBpbmplY3QoU2t5VXJsTW9kYWxDb250ZXh0KTtcbiAgcmVhZG9ubHkgI21vZGFsSW5zdGFuY2UgPSBpbmplY3QoU2t5TW9kYWxJbnN0YW5jZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbGlua1dpbmRvd09wdGlvbnMgPSB0aGlzLiNtb2RhbENvbnRleHQubGlua1dpbmRvd09wdGlvbnM7XG5cbiAgICBpZiAobGlua1dpbmRvd09wdGlvbnM/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5hbGxvd0FsbE9wZW5MaW5rT3B0aW9ucyA9IGZhbHNlO1xuICAgICAgaWYgKGxpbmtXaW5kb3dPcHRpb25zWzBdID09PSAnbmV3Jykge1xuICAgICAgICB0aGlzLm9wZW5MaW5rc0luTmV3V2luZG93T25seSA9IHRydWU7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy4jbW9kYWxDb250ZXh0LnVybFJlc3VsdCkge1xuICAgICAgaWYgKHRoaXMuI21vZGFsQ29udGV4dC51cmxSZXN1bHQudXJsLnN0YXJ0c1dpdGgoZW1haWxLZXkpKSB7XG4gICAgICAgIHRoaXMuZW1haWxBZGRyZXNzID0gdGhpcy4jbW9kYWxDb250ZXh0LnVybFJlc3VsdC51cmwucmVwbGFjZShcbiAgICAgICAgICBlbWFpbEtleSxcbiAgICAgICAgICAnJyxcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgcXVlcnlTdHJpbmdJbmRleCA9IHRoaXMuZW1haWxBZGRyZXNzLmluZGV4T2YocXVlcnlTdHJpbmdQYXJhbUtleSk7XG4gICAgICAgIHF1ZXJ5U3RyaW5nSW5kZXggPVxuICAgICAgICAgIHF1ZXJ5U3RyaW5nSW5kZXggPiAtMVxuICAgICAgICAgICAgPyBxdWVyeVN0cmluZ0luZGV4XG4gICAgICAgICAgICA6IHRoaXMuZW1haWxBZGRyZXNzLmluZGV4T2YocXVlcnlTdHJpbmdQYXJhbUtleS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAocXVlcnlTdHJpbmdJbmRleCA+IC0xKSB7XG4gICAgICAgICAgdGhpcy5zdWJqZWN0ID0gZGVjb2RlVVJJKHRoaXMuZW1haWxBZGRyZXNzKS5zbGljZShcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nSW5kZXggKyBxdWVyeVN0cmluZ1BhcmFtS2V5Lmxlbmd0aCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuZW1haWxBZGRyZXNzID0gdGhpcy5lbWFpbEFkZHJlc3Muc2xpY2UoMCwgcXVlcnlTdHJpbmdJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgYWN0aXZlIHRhYiB0byBlbWFpbFxuICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVybCA9IHRoaXMuI21vZGFsQ29udGV4dC51cmxSZXN1bHQudXJsO1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRoaXMuI21vZGFsQ29udGV4dC51cmxSZXN1bHQudGFyZ2V0IGFzIGFueTtcblxuICAgICAgICAvLyBzZXQgYWN0aXZlIHRhYiB0byB3ZWIgcGFnZVxuICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFjdGl2ZVRhYkNoYW5nZWQodmFsdWU6IFNreVRhYkluZGV4KTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVUYWIgPSBOdW1iZXIodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy4jaXNWYWxpZCgpKSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVUYWIgPT09IDApIHtcbiAgICAgICAgdGhpcy4jbW9kYWxJbnN0YW5jZS5zYXZlKHtcbiAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgIHRhcmdldDogdGhpcy50YXJnZXRcbiAgICAgICAgICAgID8gcGFyc2VJbnQodGhpcy50YXJnZXQgYXMgc3RyaW5nLCB1bmRlZmluZWQpXG4gICAgICAgICAgICA6IFVybFRhcmdldC5Ob25lLFxuICAgICAgICB9IGFzIFVybE1vZGFsUmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI21vZGFsSW5zdGFuY2Uuc2F2ZSh7XG4gICAgICAgICAgdXJsOiB0aGlzLiNnZXRFbWFpbFVybCgpLFxuICAgICAgICAgIHRhcmdldDogVXJsVGFyZ2V0Lk5vbmUsXG4gICAgICAgIH0gYXMgVXJsTW9kYWxSZXN1bHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy4jbW9kYWxJbnN0YW5jZS5jYW5jZWwoKTtcbiAgfVxuXG4gICNnZXRFbWFpbFVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICBlbWFpbEtleSArXG4gICAgICB0aGlzLmVtYWlsQWRkcmVzcyArXG4gICAgICAodGhpcy5zdWJqZWN0ID8gJz9TdWJqZWN0PScgKyBlbmNvZGVVUkkodGhpcy5zdWJqZWN0KSA6ICcnKVxuICAgICk7XG4gIH1cblxuICAjaXNWYWxpZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hY3RpdmVUYWIgPT09IDApIHtcbiAgICAgIHJldHVybiAhIXRoaXMudXJsICYmIFNreVZhbGlkYXRpb24uaXNVcmwodGhpcy51cmwpO1xuICAgIH1cbiAgICByZXR1cm4gISF0aGlzLmVtYWlsQWRkcmVzcyAmJiBTa3lWYWxpZGF0aW9uLmlzRW1haWwodGhpcy5lbWFpbEFkZHJlc3MpO1xuICB9XG59XG4iLCI8c2t5LW1vZGFsPlxuICA8c2t5LW1vZGFsLWhlYWRlcj5cbiAgICB7eyAnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX2hlYWRlcl9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgPC9za3ktbW9kYWwtaGVhZGVyPlxuICA8c2t5LW1vZGFsLWNvbnRlbnQ+XG4gICAgPHNreS10YWJzZXRcbiAgICAgIGRhdGEtc2t5LWlkPVwidGVzdC10YWJzZXRcIlxuICAgICAgW2FjdGl2ZV09XCJhY3RpdmVUYWJcIlxuICAgICAgKGFjdGl2ZUNoYW5nZSk9XCJhY3RpdmVUYWJDaGFuZ2VkKCRldmVudClcIlxuICAgID5cbiAgICAgIDxza3ktdGFiIHRhYkhlYWRpbmc9XCJXZWIgcGFnZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LWZvcm0tZ3JvdXAgc2t5LXRleHQtZWRpdG9yLXVybC1tb2RhbC1maXJzdC1maWVsZFwiPlxuICAgICAgICAgIDxza3ktaW5wdXQtYm94XG4gICAgICAgICAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci11cmwtaW5wdXRcIlxuICAgICAgICAgICAgc3RhY2tlZD1cInRydWVcIlxuICAgICAgICAgICAgW2hpbnRUZXh0XT1cIlxuICAgICAgICAgICAgICBvcGVuTGlua3NJbk5ld1dpbmRvd09ubHlcbiAgICAgICAgICAgICAgICA/ICgnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX29wZW5faW5fbmV3X3dpbmRvd19sYWJlbCdcbiAgICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1jb250cm9sLWxhYmVsIHNreS1jb250cm9sLWxhYmVsLXJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgW2Zvcl09XCJ1cmxJbnB1dC5pZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfdXJsX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAjdXJsSW5wdXQ9XCJza3lJZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2t5LWZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgc2t5SWRcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ1cmxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NreS1pbnB1dC1ib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKGFsbG93QWxsT3BlbkxpbmtPcHRpb25zKSB7XG4gICAgICAgICAgPHNreS1pbnB1dC1ib3ggc3RhY2tlZD1cInRydWVcIiBjbGFzcz1cInNreS1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJza3ktY29udHJvbC1sYWJlbFwiIFtmb3JdPVwidGFyZ2V0SW5wdXQuaWRcIj5cbiAgICAgICAgICAgICAge3sgJ3NreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9vcGVuX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgI3RhcmdldElucHV0PVwic2t5SWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1mb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBza3lJZFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRhcmdldFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIwXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfY3VycmVudF9vcHRpb25fbGFiZWwnXG4gICAgICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfbmV3X29wdGlvbl9sYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvc2t5LWlucHV0LWJveD5cbiAgICAgICAgfVxuICAgICAgPC9za3ktdGFiPlxuICAgICAgPHNreS10YWIgdGFiSGVhZGluZz1cIkVtYWlsIGFkZHJlc3NcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNreS1mb3JtLWdyb3VwIGZpcnN0LWZpZWxkXCI+XG4gICAgICAgICAgPHNreS1pbnB1dC1ib3ggc3RhY2tlZD1cInRydWVcIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1jb250cm9sLWxhYmVsIHNreS1jb250cm9sLWxhYmVsLXJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgW2Zvcl09XCJlbWFpbEFkZHJlc3NJbnB1dC5pZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfZW1haWxfbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICNlbWFpbEFkZHJlc3NJbnB1dD1cInNreUlkXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBza3lJZFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVtYWlsQWRkcmVzc1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc2t5LWlucHV0LWJveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxza3ktaW5wdXQtYm94IHN0YWNrZWQ9XCJ0cnVlXCIgY2xhc3M9XCJza3ktZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNreS1jb250cm9sLWxhYmVsXCIgW2Zvcl09XCJzdWJqZWN0SW5wdXQuaWRcIj5cbiAgICAgICAgICAgIHt7ICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfc3ViamVjdF9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3N1YmplY3RJbnB1dD1cInNreUlkXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBza3lJZFxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdWJqZWN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3NreS1pbnB1dC1ib3g+XG4gICAgICA8L3NreS10YWI+XG4gICAgPC9za3ktdGFic2V0PlxuICA8L3NreS1tb2RhbC1jb250ZW50PlxuICA8c2t5LW1vZGFsLWZvb3Rlcj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLXByaW1hcnlcIlxuICAgICAgW2Rpc2FibGVkXT1cIiF2YWxpZFwiXG4gICAgICAoY2xpY2spPVwic2F2ZSgpXCJcbiAgICA+XG4gICAgICB7eyAnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX3NhdmVfYnV0dG9uX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWxpbmtcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5cbiAgICAgIHt7ICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfY2FuY2VsX2J1dHRvbl9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9za3ktbW9kYWwtZm9vdGVyPlxuPC9za3ktbW9kYWw+XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, booleanAttribute, inject, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyColorpickerMessageType, SkyColorpickerModule, } from '@skyux/colorpicker';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyModalService } from '@skyux/modals';\nimport { SkyDropdownMessageType, SkyDropdownModule, } from '@skyux/popovers';\nimport { SkyThemeModule } from '@skyux/theme';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { STYLE_STATE_DEFAULTS } from '../defaults/style-state-defaults';\nimport { SkyTextEditorAdapterService } from '../services/text-editor-adapter.service';\nimport { SkyUrlModalContext } from '../url-modal/text-editor-url-modal-context';\nimport { SkyTextEditorUrlModalComponent } from '../url-modal/text-editor-url-modal.component';\nimport { UrlTarget } from '../url-modal/text-editor-url-target';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"@skyux/forms\";\nimport * as i4 from \"@skyux/colorpicker\";\nimport * as i5 from \"@skyux/popovers\";\nimport * as i6 from \"@skyux/icon\";\nimport * as i7 from \"@skyux/layout\";\n/**\n * @internal\n */\nexport class SkyTextEditorToolbarComponent {\n constructor() {\n this.fontList = [];\n this.fontSizeList = [];\n this.toolbarActions = [];\n this.linkWindowOptions = [];\n this.disabled = false;\n this.backColorpickerStream = new Subject();\n this.colorpickerStream = new Subject();\n this.fontPickerStream = new Subject();\n this.fontSizeStream = new Subject();\n this.#ngUnsubscribe = new Subject();\n this.#_editorFocusStream = new Subject();\n this.#_styleState = STYLE_STATE_DEFAULTS;\n this.#adapterService = inject(SkyTextEditorAdapterService);\n this.#changeDetector = inject(ChangeDetectorRef);\n this.#modalService = inject(SkyModalService);\n }\n set editorFocusStream(value) {\n this.#_editorFocusStream = value;\n this.#subscribeEditorFocus();\n }\n get editorFocusStream() {\n return this.#_editorFocusStream;\n }\n set styleState(value) {\n this.#_styleState = value;\n if (value.font !== this.styleStateFontName) {\n if (value.font === '\"Blackbaud Sans\", Arial, sans-serif') {\n this.styleStateFontName = this.#getFontName('Blackbaud Sans');\n }\n else {\n this.styleStateFontName = this.#getFontName(value.font);\n }\n }\n }\n get styleState() {\n return this.#_styleState;\n }\n #editorFocusStreamSub;\n #ngUnsubscribe;\n #_editorFocusStream;\n #_styleState;\n #adapterService;\n #changeDetector;\n #modalService;\n ngOnInit() {\n this.#subscribeEditorFocus();\n }\n execCommand(command, value = '') {\n void this.#adapterService.execCommand({\n command: command,\n value: value,\n });\n this.styleState = {\n ...this.styleState,\n ...this.#adapterService.getStyleState(),\n };\n }\n toggleFontStyle(currentState, newState, command) {\n if (currentState !== newState) {\n this.execCommand(command);\n }\n // Force sky-checkbox to show changes on user's initial click.\n this.#changeDetector.detectChanges();\n }\n link() {\n const priorSelection = this.#adapterService.saveSelection();\n const currentLink = this.#adapterService.getLink();\n const inputModal = this.#modalService.open(SkyTextEditorUrlModalComponent, [\n {\n provide: SkyUrlModalContext,\n useFactory: () => {\n const context = new SkyUrlModalContext();\n context.urlResult = currentLink;\n context.linkWindowOptions = this.linkWindowOptions;\n return context;\n },\n },\n ]);\n inputModal.closed.subscribe((result) => {\n if (result.reason === 'save' && priorSelection) {\n if (currentLink) {\n const anchor = this.#adapterService.getSelectedAnchorTag();\n if (anchor) {\n this.#adapterService.selectElement(anchor);\n }\n }\n this.execCommand('unlink');\n if (result.data.target === UrlTarget.None) {\n // Current window\n this.execCommand('createLink', result.data.url);\n }\n else {\n // New Window\n const sText = this.#adapterService.getCurrentSelection();\n this.execCommand('insertHTML', '<a href=\"' +\n result.data.url +\n '\" rel=\"noopener noreferrer\" target=\"_blank\">' +\n sText +\n '</a>');\n }\n }\n });\n }\n unlink() {\n const currentSelectionRange = this.#adapterService\n .getCurrentSelection()\n ?.getRangeAt(0);\n if (currentSelectionRange && currentSelectionRange.toString().length <= 0) {\n const anchorTag = this.#adapterService.getSelectedAnchorTag();\n if (anchorTag) {\n this.#adapterService.selectElement(anchorTag);\n }\n }\n this.execCommand('unlink');\n }\n changeFontSize(size) {\n void this.#adapterService.setFontSize(size);\n this.styleState = {\n ...this.styleState,\n ...this.#adapterService.getStyleState(),\n };\n }\n onColorpickerColorChanged(color, isBackground = false) {\n if (isBackground) {\n this.execCommand('backColor', color.rgbaText);\n }\n else {\n this.execCommand('foreColor', color.hex);\n }\n }\n #subscribeEditorFocus() {\n this.#editorFocusStreamSub?.unsubscribe();\n this.#editorFocusStreamSub = this.editorFocusStream\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.styleState = {\n ...this.styleState,\n ...this.#adapterService.getStyleState(),\n };\n this.#closeDropdowns();\n this.#changeDetector.detectChanges();\n });\n }\n #closeDropdowns() {\n const message = {\n type: SkyColorpickerMessageType.Close,\n };\n this.colorpickerStream.next(message);\n this.backColorpickerStream.next(message);\n this.fontPickerStream.next({ type: SkyDropdownMessageType.Close });\n this.fontSizeStream.next({ type: SkyDropdownMessageType.Close });\n }\n #getFontName(fontName) {\n for (const skyTextEditorFont of this.fontList) {\n if (fontName.replace(/['\"]+/g, '') === skyTextEditorFont.name) {\n return skyTextEditorFont.name;\n }\n }\n /* istanbul ignore next */\n return undefined;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.0\", type: SkyTextEditorToolbarComponent, isStandalone: true, selector: \"sky-text-editor-toolbar\", inputs: { editorFocusStream: \"editorFocusStream\", fontList: \"fontList\", fontSizeList: \"fontSizeList\", toolbarActions: \"toolbarActions\", linkWindowOptions: \"linkWindowOptions\", styleState: \"styleState\", disabled: [\"disabled\", \"disabled\", booleanAttribute] }, ngImport: i0, template: \"@for (action of toolbarActions; track action) {\\n <sky-toolbar-item\\n class=\\\"sky-text-editor-toolbar-action\\\"\\n [ngClass]=\\\"'sky-text-editor-toolbar-action-' + action\\\"\\n >\\n @switch (action) {\\n @case ('font-family') {\\n <sky-dropdown\\n class=\\\"sky-text-editor-font-picker\\\"\\n [disabled]=\\\"disabled\\\"\\n [label]=\\\"'Font: ' + styleStateFontName\\\"\\n [messageStream]=\\\"fontPickerStream\\\"\\n >\\n <sky-dropdown-button\\n [ngStyle]=\\\"{\\n 'font-family': styleState.font\\n }\\\"\\n >\\n {{ styleStateFontName }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (fontModel of fontList; track fontModel.name) {\\n <sky-dropdown-item>\\n <button\\n type=\\\"button\\\"\\n [ngStyle]=\\\"{\\n 'font-family': fontModel.value\\n }\\\"\\n (click)=\\\"execCommand('fontname', fontModel.name)\\\"\\n >\\n {{ fontModel.name }}\\n </button>\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('font-size') {\\n <sky-dropdown\\n class=\\\"sky-text-editor-font-size-picker\\\"\\n [disabled]=\\\"disabled\\\"\\n [label]=\\\"'Font size: ' + styleState.fontSize + 'px'\\\"\\n [messageStream]=\\\"fontSizeStream\\\"\\n >\\n <sky-dropdown-button\\n [ngStyle]=\\\"{\\n 'font-family': styleState.fontSize\\n }\\\"\\n >\\n {{ styleState.fontSize + 'px' }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (size of fontSizeList; track size) {\\n <sky-dropdown-item>\\n <button type=\\\"button\\\" (click)=\\\"changeFontSize(size)\\\">\\n {{ size + 'px' }}\\n </button>\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('font-style') {\\n <div class=\\\"sky-switch-icon-group sky-text-editor-font-style-picker\\\">\\n <sky-checkbox\\n iconName=\\\"text-bold\\\"\\n label=\\\"Bold\\\"\\n title=\\\"Bold\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.boldState\\\"\\n (ngModelChange)=\\\"\\n toggleFontStyle(styleState.boldState, $event, 'bold')\\n \\\"\\n />\\n <sky-checkbox\\n iconName=\\\"text-italic\\\"\\n label=\\\"Italicized\\\"\\n title=\\\"Italicized\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.italicState\\\"\\n (ngModelChange)=\\\"\\n toggleFontStyle(styleState.italicState, $event, 'italic')\\n \\\"\\n />\\n <sky-checkbox\\n iconName=\\\"text-underline\\\"\\n label=\\\"Underline\\\"\\n title=\\\"Underline\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.underlineState\\\"\\n (ngModelChange)=\\\"\\n toggleFontStyle(styleState.underlineState, $event, 'underline')\\n \\\"\\n />\\n </div>\\n }\\n @case ('color') {\\n <div class=\\\"sky-text-editor-colorpicker-group\\\">\\n <div class=\\\"sky-text-editor-colorpicker-container\\\">\\n <sky-colorpicker\\n #colorPicker\\n class=\\\"sky-text-editor-font-color-picker\\\"\\n label=\\\"Font color\\\"\\n pickerButtonIcon=\\\"color-line\\\"\\n [messageStream]=\\\"colorpickerStream\\\"\\n [showResetButton]=\\\"false\\\"\\n (selectedColorChanged)=\\\"onColorpickerColorChanged($event)\\\"\\n >\\n <input\\n outputFormat=\\\"hex\\\"\\n type=\\\"text\\\"\\n [allowTransparency]=\\\"false\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.fontColor\\\"\\n [skyColorpickerInput]=\\\"colorPicker\\\"\\n />\\n </sky-colorpicker>\\n </div>\\n <div class=\\\"sky-text-editor-colorpicker-container\\\">\\n <sky-colorpicker\\n #backColorPicker\\n class=\\\"sky-text-editor-background-color-picker\\\"\\n label=\\\"Background color\\\"\\n pickerButtonIcon=\\\"text-color\\\"\\n [messageStream]=\\\"backColorpickerStream\\\"\\n [showResetButton]=\\\"false\\\"\\n (selectedColorChanged)=\\\"onColorpickerColorChanged($event, true)\\\"\\n >\\n <input\\n outputFormat=\\\"rgba\\\"\\n type=\\\"text\\\"\\n [allowTransparency]=\\\"true\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.backColor\\\"\\n [skyColorpickerInput]=\\\"backColorPicker\\\"\\n />\\n </sky-colorpicker>\\n </div>\\n </div>\\n }\\n @case ('list') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Bulleted list\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Bulleted list\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('insertUnorderedList')\\\"\\n >\\n <sky-icon iconName=\\\"text-bullet-list\\\" />\\n </button>\\n <button\\n aria-label=\\\"Numbered list\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Numbered list\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('insertOrderedList')\\\"\\n >\\n <sky-icon iconName=\\\"text-number-list-ltr\\\" />\\n </button>\\n </div>\\n }\\n @case ('alignment') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Align left\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Align left\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('justifyLeft')\\\"\\n >\\n <sky-icon iconName=\\\"text-align-left\\\" />\\n </button>\\n <button\\n aria-label=\\\"Align center\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Align center\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('justifyCenter')\\\"\\n >\\n <sky-icon iconName=\\\"text-align-center\\\" />\\n </button>\\n <button\\n aria-label=\\\"Align right\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Align right\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('justifyRight')\\\"\\n >\\n <sky-icon iconName=\\\"text-align-right\\\" />\\n </button>\\n </div>\\n }\\n @case ('indentation') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Outdent\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Outdent\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('outdent')\\\"\\n >\\n <sky-icon iconName=\\\"text-indent-decrease\\\" />\\n </button>\\n <button\\n aria-label=\\\"Indent\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Indent\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('indent')\\\"\\n >\\n <sky-icon iconName=\\\"text-indent-increase\\\" />\\n </button>\\n </div>\\n }\\n @case ('undo-redo') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Undo\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Undo\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('undo')\\\"\\n >\\n <sky-icon iconName=\\\"arrow-undo\\\" />\\n </button>\\n <button\\n aria-label=\\\"Redo\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Redo\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('redo')\\\"\\n >\\n <sky-icon iconName=\\\"arrow-redo\\\" />\\n </button>\\n </div>\\n }\\n @case ('link') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Link\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Link\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngClass]=\\\"{\\n 'icon-btn-active': styleState.linkState\\n }\\\"\\n (click)=\\\"link()\\\"\\n >\\n <sky-icon iconName=\\\"link\\\" />\\n </button>\\n <button\\n aria-label=\\\"Unlink\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Unlink\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"!styleState.linkState || disabled\\\"\\n (click)=\\\"unlink()\\\"\\n >\\n <sky-icon iconName=\\\"link-dismiss\\\" />\\n </button>\\n </div>\\n }\\n }\\n </sky-toolbar-item>\\n}\\n\", styles: [\".sky-text-editor-toolbar-action:not(.sky-theme-modern *){--sky-override-text-editor-border-radius: 0;--sky-override-text-editor-button-border-outer-radius: 3px;--sky-override-text-editor-button-border: 1px solid #cdcfd2;--sky-override-text-editor-colorpicker-spacing: 10px;--sky-override-text-editor-colorpicker-top: 3px}.sky-text-editor-toolbar-action .sky-text-editor-font-picker ::ng-deep .sky-dropdown-button-content-container{width:140px;height:20px;text-align:left}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group{display:flex}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container{position:relative;top:var(--sky-override-text-editor-colorpicker-top, -2px);margin-right:var(--sky-override-text-editor-colorpicker-spacing, var(--sky-space-gap-action_group-m))}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container:last-child{margin-right:0}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn{margin-left:0;margin-right:0;border-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));border-right:none}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn:first-of-type{border-top-left-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s));border-bottom-left-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s))}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn:last-of-type{border-top-right-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s));border-bottom-right-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s));border-right:var(--sky-override-text-editor-button-border, none)}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: SkyCheckboxModule }, { kind: \"component\", type: i3.λ3, selector: \"sky-checkbox\", inputs: [\"label\", \"labelledBy\", \"id\", \"disabled\", \"tabindex\", \"name\", \"helpPopoverContent\", \"helpPopoverTitle\", \"iconName\", \"checkboxType\", \"checked\", \"indeterminate\", \"required\", \"labelText\", \"labelHidden\", \"hintText\", \"stacked\", \"helpKey\"], outputs: [\"change\", \"checkedChange\", \"disabledChange\", \"indeterminateChange\"] }, { kind: \"ngmodule\", type: SkyColorpickerModule }, { kind: \"component\", type: i4.λ1, selector: \"sky-colorpicker\", inputs: [\"pickerButtonIcon\", \"label\", \"labelledBy\", \"labelText\", \"labelHidden\", \"helpKey\", \"helpPopoverContent\", \"helpPopoverTitle\", \"hintText\", \"stacked\", \"messageStream\", \"showResetButton\"], outputs: [\"selectedColorChanged\", \"selectedColorApplied\"] }, { kind: \"directive\", type: i4.λ2, selector: \"[skyColorpickerInput]\", inputs: [\"skyColorpickerInput\", \"initialColor\", \"id\", \"returnFormat\", \"outputFormat\", \"presetColors\", \"alphaChannel\", \"allowTransparency\"] }, { kind: \"ngmodule\", type: SkyDropdownModule }, { kind: \"component\", type: i5.λ2, selector: \"sky-dropdown-button\" }, { kind: \"component\", type: i5.λ3, selector: \"sky-dropdown\", inputs: [\"buttonStyle\", \"buttonType\", \"disabled\", \"label\", \"horizontalAlignment\", \"messageStream\", \"title\", \"trigger\"] }, { kind: \"component\", type: i5.λ1, selector: \"sky-dropdown-item\", inputs: [\"ariaRole\"] }, { kind: \"component\", type: i5.λ4, selector: \"sky-dropdown-menu\", inputs: [\"ariaLabelledBy\", \"ariaRole\", \"useNativeFocus\"], outputs: [\"menuChanges\"] }, { kind: \"ngmodule\", type: SkyIconModule }, { kind: \"component\", type: i6.λ1, selector: \"sky-icon\", inputs: [\"iconName\", \"variant\", \"iconSize\"] }, { kind: \"ngmodule\", type: SkyThemeModule }, { kind: \"ngmodule\", type: SkyToolbarModule }, { kind: \"component\", type: i7.λ39, selector: \"sky-toolbar-item\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorToolbarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-text-editor-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n CommonModule,\n FormsModule,\n SkyCheckboxModule,\n SkyColorpickerModule,\n SkyDropdownModule,\n SkyIconModule,\n SkyThemeModule,\n SkyToolbarModule,\n ], template: \"@for (action of toolbarActions; track action) {\\n <sky-toolbar-item\\n class=\\\"sky-text-editor-toolbar-action\\\"\\n [ngClass]=\\\"'sky-text-editor-toolbar-action-' + action\\\"\\n >\\n @switch (action) {\\n @case ('font-family') {\\n <sky-dropdown\\n class=\\\"sky-text-editor-font-picker\\\"\\n [disabled]=\\\"disabled\\\"\\n [label]=\\\"'Font: ' + styleStateFontName\\\"\\n [messageStream]=\\\"fontPickerStream\\\"\\n >\\n <sky-dropdown-button\\n [ngStyle]=\\\"{\\n 'font-family': styleState.font\\n }\\\"\\n >\\n {{ styleStateFontName }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (fontModel of fontList; track fontModel.name) {\\n <sky-dropdown-item>\\n <button\\n type=\\\"button\\\"\\n [ngStyle]=\\\"{\\n 'font-family': fontModel.value\\n }\\\"\\n (click)=\\\"execCommand('fontname', fontModel.name)\\\"\\n >\\n {{ fontModel.name }}\\n </button>\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('font-size') {\\n <sky-dropdown\\n class=\\\"sky-text-editor-font-size-picker\\\"\\n [disabled]=\\\"disabled\\\"\\n [label]=\\\"'Font size: ' + styleState.fontSize + 'px'\\\"\\n [messageStream]=\\\"fontSizeStream\\\"\\n >\\n <sky-dropdown-button\\n [ngStyle]=\\\"{\\n 'font-family': styleState.fontSize\\n }\\\"\\n >\\n {{ styleState.fontSize + 'px' }}\\n </sky-dropdown-button>\\n <sky-dropdown-menu>\\n @for (size of fontSizeList; track size) {\\n <sky-dropdown-item>\\n <button type=\\\"button\\\" (click)=\\\"changeFontSize(size)\\\">\\n {{ size + 'px' }}\\n </button>\\n </sky-dropdown-item>\\n }\\n </sky-dropdown-menu>\\n </sky-dropdown>\\n }\\n @case ('font-style') {\\n <div class=\\\"sky-switch-icon-group sky-text-editor-font-style-picker\\\">\\n <sky-checkbox\\n iconName=\\\"text-bold\\\"\\n label=\\\"Bold\\\"\\n title=\\\"Bold\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.boldState\\\"\\n (ngModelChange)=\\\"\\n toggleFontStyle(styleState.boldState, $event, 'bold')\\n \\\"\\n />\\n <sky-checkbox\\n iconName=\\\"text-italic\\\"\\n label=\\\"Italicized\\\"\\n title=\\\"Italicized\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.italicState\\\"\\n (ngModelChange)=\\\"\\n toggleFontStyle(styleState.italicState, $event, 'italic')\\n \\\"\\n />\\n <sky-checkbox\\n iconName=\\\"text-underline\\\"\\n label=\\\"Underline\\\"\\n title=\\\"Underline\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.underlineState\\\"\\n (ngModelChange)=\\\"\\n toggleFontStyle(styleState.underlineState, $event, 'underline')\\n \\\"\\n />\\n </div>\\n }\\n @case ('color') {\\n <div class=\\\"sky-text-editor-colorpicker-group\\\">\\n <div class=\\\"sky-text-editor-colorpicker-container\\\">\\n <sky-colorpicker\\n #colorPicker\\n class=\\\"sky-text-editor-font-color-picker\\\"\\n label=\\\"Font color\\\"\\n pickerButtonIcon=\\\"color-line\\\"\\n [messageStream]=\\\"colorpickerStream\\\"\\n [showResetButton]=\\\"false\\\"\\n (selectedColorChanged)=\\\"onColorpickerColorChanged($event)\\\"\\n >\\n <input\\n outputFormat=\\\"hex\\\"\\n type=\\\"text\\\"\\n [allowTransparency]=\\\"false\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.fontColor\\\"\\n [skyColorpickerInput]=\\\"colorPicker\\\"\\n />\\n </sky-colorpicker>\\n </div>\\n <div class=\\\"sky-text-editor-colorpicker-container\\\">\\n <sky-colorpicker\\n #backColorPicker\\n class=\\\"sky-text-editor-background-color-picker\\\"\\n label=\\\"Background color\\\"\\n pickerButtonIcon=\\\"text-color\\\"\\n [messageStream]=\\\"backColorpickerStream\\\"\\n [showResetButton]=\\\"false\\\"\\n (selectedColorChanged)=\\\"onColorpickerColorChanged($event, true)\\\"\\n >\\n <input\\n outputFormat=\\\"rgba\\\"\\n type=\\\"text\\\"\\n [allowTransparency]=\\\"true\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"styleState.backColor\\\"\\n [skyColorpickerInput]=\\\"backColorPicker\\\"\\n />\\n </sky-colorpicker>\\n </div>\\n </div>\\n }\\n @case ('list') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Bulleted list\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Bulleted list\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('insertUnorderedList')\\\"\\n >\\n <sky-icon iconName=\\\"text-bullet-list\\\" />\\n </button>\\n <button\\n aria-label=\\\"Numbered list\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Numbered list\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('insertOrderedList')\\\"\\n >\\n <sky-icon iconName=\\\"text-number-list-ltr\\\" />\\n </button>\\n </div>\\n }\\n @case ('alignment') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Align left\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Align left\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('justifyLeft')\\\"\\n >\\n <sky-icon iconName=\\\"text-align-left\\\" />\\n </button>\\n <button\\n aria-label=\\\"Align center\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Align center\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('justifyCenter')\\\"\\n >\\n <sky-icon iconName=\\\"text-align-center\\\" />\\n </button>\\n <button\\n aria-label=\\\"Align right\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Align right\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('justifyRight')\\\"\\n >\\n <sky-icon iconName=\\\"text-align-right\\\" />\\n </button>\\n </div>\\n }\\n @case ('indentation') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Outdent\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Outdent\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('outdent')\\\"\\n >\\n <sky-icon iconName=\\\"text-indent-decrease\\\" />\\n </button>\\n <button\\n aria-label=\\\"Indent\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Indent\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('indent')\\\"\\n >\\n <sky-icon iconName=\\\"text-indent-increase\\\" />\\n </button>\\n </div>\\n }\\n @case ('undo-redo') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Undo\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Undo\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('undo')\\\"\\n >\\n <sky-icon iconName=\\\"arrow-undo\\\" />\\n </button>\\n <button\\n aria-label=\\\"Redo\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Redo\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n (click)=\\\"execCommand('redo')\\\"\\n >\\n <sky-icon iconName=\\\"arrow-redo\\\" />\\n </button>\\n </div>\\n }\\n @case ('link') {\\n <div class=\\\"sky-switch-icon-group\\\">\\n <button\\n aria-label=\\\"Link\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Link\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngClass]=\\\"{\\n 'icon-btn-active': styleState.linkState\\n }\\\"\\n (click)=\\\"link()\\\"\\n >\\n <sky-icon iconName=\\\"link\\\" />\\n </button>\\n <button\\n aria-label=\\\"Unlink\\\"\\n class=\\\"sky-btn sky-btn-default sky-btn-icon\\\"\\n title=\\\"Unlink\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"!styleState.linkState || disabled\\\"\\n (click)=\\\"unlink()\\\"\\n >\\n <sky-icon iconName=\\\"link-dismiss\\\" />\\n </button>\\n </div>\\n }\\n }\\n </sky-toolbar-item>\\n}\\n\", styles: [\".sky-text-editor-toolbar-action:not(.sky-theme-modern *){--sky-override-text-editor-border-radius: 0;--sky-override-text-editor-button-border-outer-radius: 3px;--sky-override-text-editor-button-border: 1px solid #cdcfd2;--sky-override-text-editor-colorpicker-spacing: 10px;--sky-override-text-editor-colorpicker-top: 3px}.sky-text-editor-toolbar-action .sky-text-editor-font-picker ::ng-deep .sky-dropdown-button-content-container{width:140px;height:20px;text-align:left}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group{display:flex}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container{position:relative;top:var(--sky-override-text-editor-colorpicker-top, -2px);margin-right:var(--sky-override-text-editor-colorpicker-spacing, var(--sky-space-gap-action_group-m))}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container:last-child{margin-right:0}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn{margin-left:0;margin-right:0;border-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));border-right:none}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn:first-of-type{border-top-left-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s));border-bottom-left-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s))}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn:last-of-type{border-top-right-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s));border-bottom-right-radius:var(--sky-override-text-editor-button-border-outer-radius, var(--sky-border-radius-s));border-right:var(--sky-override-text-editor-button-border, none)}\\n\"] }]\n }], propDecorators: { editorFocusStream: [{\n type: Input\n }], fontList: [{\n type: Input\n }], fontSizeList: [{\n type: Input\n }], toolbarActions: [{\n type: Input\n }], linkWindowOptions: [{\n type: Input\n }], styleState: [{\n type: Input\n }], disabled: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3Rvb2xiYXIvdGV4dC1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3Rvb2xiYXIvdGV4dC1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULEtBQUssRUFFTCxnQkFBZ0IsRUFDaEIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLG9CQUFvQixHQUVyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQXFCLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsT0FBTyxFQUFFLE9BQU8sRUFBZ0Is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Q2pCOzhCQUlVLGlCQUFpQjtzQkFEM0IsS0FBSztnQkFXQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQUlDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFJSyxVQUFVO3NCQURwQixLQUFLO2dCQWlCQyxRQUFRO3NCQURkLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIFNreUNvbG9ycGlja2VyTWVzc2FnZSxcbiAgU2t5Q29sb3JwaWNrZXJNZXNzYWdlVHlwZSxcbiAgU2t5Q29sb3JwaWNrZXJNb2R1bGUsXG4gIFNreUNvbG9ycGlja2VyT3V0cHV0LFxufSBmcm9tICdAc2t5dXgvY29sb3JwaWNrZXInO1xuaW1wb3J0IHsgU2t5Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuaW1wb3J0IHsgU2t5SWNvbk1vZHVsZSB9IGZyb20gJ0Bza3l1eC9pY29uJztcbmltcG9ydCB7IFNreVRvb2xiYXJNb2R1bGUgfSBmcm9tICdAc2t5dXgvbGF5b3V0JztcbmltcG9ydCB7IFNreU1vZGFsQ2xvc2VBcmdzLCBTa3lNb2RhbFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvbW9kYWxzJztcbmltcG9ydCB7XG4gIFNreURyb3Bkb3duTWVzc2FnZSxcbiAgU2t5RHJvcGRvd25NZXNzYWdlVHlwZSxcbiAgU2t5RHJvcGRvd25Nb2R1bGUsXG59IGZyb20gJ0Bza3l1eC9wb3BvdmVycyc7XG5pbXBvcnQgeyBTa3lUaGVtZU1vZHVsZSB9IGZyb20gJ0Bza3l1eC90aGVtZSc7XG5cbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTVFlMRV9TVEFURV9ERUZBVUxUUyB9IGZyb20gJy4uL2RlZmF1bHRzL3N0eWxlLXN0YXRlLWRlZmF1bHRzJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RleHQtZWRpdG9yLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yRm9udCB9IGZyb20gJy4uL3R5cGVzL2ZvbnQtc3RhdGUnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvckxpbmtXaW5kb3dPcHRpb25zVHlwZSB9IGZyb20gJy4uL3R5cGVzL2xpbmstd2luZG93LW9wdGlvbnMtdHlwZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB9IGZyb20gJy4uL3R5cGVzL3N0eWxlLXN0YXRlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZSB9IGZyb20gJy4uL3R5cGVzL3Rvb2xiYXItYWN0aW9uLXR5cGUnO1xuaW1wb3J0IHsgU2t5VXJsTW9kYWxDb250ZXh0IH0gZnJvbSAnLi4vdXJsLW1vZGFsL3RleHQtZWRpdG9yLXVybC1tb2RhbC1jb250ZXh0JztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JVcmxNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFVybFRhcmdldCB9IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtdGFyZ2V0JztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXRleHQtZWRpdG9yLXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHQtZWRpdG9yLXRvb2xiYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgU2t5Q2hlY2tib3hNb2R1bGUsXG4gICAgU2t5Q29sb3JwaWNrZXJNb2R1bGUsXG4gICAgU2t5RHJvcGRvd25Nb2R1bGUsXG4gICAgU2t5SWNvbk1vZHVsZSxcbiAgICBTa3lUaGVtZU1vZHVsZSxcbiAgICBTa3lUb29sYmFyTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yVG9vbGJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWRpdG9yRm9jdXNTdHJlYW0odmFsdWU6IFN1YmplY3Q8dm9pZD4pIHtcbiAgICB0aGlzLiNfZWRpdG9yRm9jdXNTdHJlYW0gPSB2YWx1ZTtcbiAgICB0aGlzLiNzdWJzY3JpYmVFZGl0b3JGb2N1cygpO1xuICB9XG5cbiAgcHVibGljIGdldCBlZGl0b3JGb2N1c1N0cmVhbSgpOiBTdWJqZWN0PHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jX2VkaXRvckZvY3VzU3RyZWFtO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZvbnRMaXN0OiBTa3lUZXh0RWRpdG9yRm9udFtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZvbnRTaXplTGlzdDogbnVtYmVyW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdG9vbGJhckFjdGlvbnM6IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZVtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxpbmtXaW5kb3dPcHRpb25zOiBTa3lUZXh0RWRpdG9yTGlua1dpbmRvd09wdGlvbnNUeXBlW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN0eWxlU3RhdGUodmFsdWU6IFNreVRleHRFZGl0b3JTdHlsZVN0YXRlKSB7XG4gICAgdGhpcy4jX3N0eWxlU3RhdGUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUuZm9udCAhPT0gdGhpcy5zdHlsZVN0YXRlRm9udE5hbWUpIHtcbiAgICAgIGlmICh2YWx1ZS5mb250ID09PSAnXCJCbGFja2JhdWQgU2Fuc1wiLCBBcmlhbCwgc2Fucy1zZXJpZicpIHtcbiAgICAgICAgdGhpcy5zdHlsZVN0YXRlRm9udE5hbWUgPSB0aGlzLiNnZXRGb250TmFtZSgnQmxhY2tiYXVkIFNhbnMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3R5bGVTdGF0ZUZvbnROYW1lID0gdGhpcy4jZ2V0Rm9udE5hbWUodmFsdWUuZm9udCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzdHlsZVN0YXRlKCk6IFNreVRleHRFZGl0b3JTdHlsZVN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy4jX3N0eWxlU3RhdGU7XG4gIH1cblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgcHVibGljIGJhY2tDb2xvcnBpY2tlclN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreUNvbG9ycGlja2VyTWVzc2FnZT4oKTtcbiAgcHVibGljIGNvbG9ycGlja2VyU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5Q29sb3JwaWNrZXJNZXNzYWdlPigpO1xuICBwdWJsaWMgZm9udFBpY2tlclN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreURyb3Bkb3duTWVzc2FnZT4oKTtcbiAgcHVibGljIGZvbnRTaXplU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5RHJvcGRvd25NZXNzYWdlPigpO1xuICBwdWJsaWMgc3R5bGVTdGF0ZUZvbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI2VkaXRvckZvY3VzU3RyZWFtU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjX2VkaXRvckZvY3VzU3RyZWFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgI19zdHlsZVN0YXRlID0gU1RZTEVfU1RBVEVfREVGQVVMVFM7XG5cbiAgcmVhZG9ubHkgI2FkYXB0ZXJTZXJ2aWNlID0gaW5qZWN0KFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSk7XG4gIHJlYWRvbmx5ICNjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHJlYWRvbmx5ICNtb2RhbFNlcnZpY2UgPSBpbmplY3QoU2t5TW9kYWxTZXJ2aWNlKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jc3Vic2NyaWJlRWRpdG9yRm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBleGVjQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHZhbHVlID0gJycpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmV4ZWNDb21tYW5kKHtcbiAgICAgIGNvbW1hbmQ6IGNvbW1hbmQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0eWxlU3RhdGUgPSB7XG4gICAgICAuLi50aGlzLnN0eWxlU3RhdGUsXG4gICAgICAuLi50aGlzLiNhZGFwdGVyU2VydmljZS5nZXRTdHlsZVN0YXRlKCksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVGb250U3R5bGUoXG4gICAgY3VycmVudFN0YXRlOiBib29sZWFuLFxuICAgIG5ld1N0YXRlOiBib29sZWFuLFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKGN1cnJlbnRTdGF0ZSAhPT0gbmV3U3RhdGUpIHtcbiAgICAgIHRoaXMuZXhlY0NvbW1hbmQoY29tbWFuZCk7XG4gICAgfVxuXG4gICAgLy8gRm9yY2Ugc2t5LWNoZWNrYm94IHRvIHNob3cgY2hhbmdlcyBvbiB1c2VyJ3MgaW5pdGlhbCBjbGljay5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgbGluaygpOiB2b2lkIHtcbiAgICBjb25zdCBwcmlvclNlbGVjdGlvbiA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNhdmVTZWxlY3Rpb24oKTtcbiAgICBjb25zdCBjdXJyZW50TGluayA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldExpbmsoKTtcbiAgICBjb25zdCBpbnB1dE1vZGFsID0gdGhpcy4jbW9kYWxTZXJ2aWNlLm9wZW4oU2t5VGV4dEVkaXRvclVybE1vZGFsQ29tcG9uZW50LCBbXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFNreVVybE1vZGFsQ29udGV4dCxcbiAgICAgICAgdXNlRmFjdG9yeTogKCk6IFNreVVybE1vZGFsQ29udGV4dCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBTa3lVcmxNb2RhbENvbnRleHQoKTtcbiAgICAgICAgICBjb250ZXh0LnVybFJlc3VsdCA9IGN1cnJlbnRMaW5rO1xuICAgICAgICAgIGNvbnRleHQubGlua1dpbmRvd09wdGlvbnMgPSB0aGlzLmxpbmtXaW5kb3dPcHRpb25zO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIGlucHV0TW9kYWwuY2xvc2VkLnN1YnNjcmliZSgocmVzdWx0OiBTa3lNb2RhbENsb3NlQXJncykgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdzYXZlJyAmJiBwcmlvclNlbGVjdGlvbikge1xuICAgICAgICBpZiAoY3VycmVudExpbmspIHtcbiAgICAgICAgICBjb25zdCBhbmNob3IgPSB0aGlzLiNhZGFwdGVyU2VydmljZS5nZXRTZWxlY3RlZEFuY2hvclRhZygpO1xuXG4gICAgICAgICAgaWYgKGFuY2hvcikge1xuICAgICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2VsZWN0RWxlbWVudChhbmNob3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhlY0NvbW1hbmQoJ3VubGluaycpO1xuICAgICAgICBpZiAocmVzdWx0LmRhdGEudGFyZ2V0ID09PSBVcmxUYXJnZXQuTm9uZSkge1xuICAgICAgICAgIC8vIEN1cnJlbnQgd2luZG93XG4gICAgICAgICAgdGhpcy5leGVjQ29tbWFuZCgnY3JlYXRlTGluaycsIHJlc3VsdC5kYXRhLnVybCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTmV3IFdpbmRvd1xuICAgICAgICAgIGNvbnN0IHNUZXh0ID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvbigpO1xuICAgICAgICAgIHRoaXMuZXhlY0NvbW1hbmQoXG4gICAgICAgICAgICAnaW5zZXJ0SFRNTCcsXG4gICAgICAgICAgICAnPGEgaHJlZj1cIicgK1xuICAgICAgICAgICAgICByZXN1bHQuZGF0YS51cmwgK1xuICAgICAgICAgICAgICAnXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIHRhcmdldD1cIl9ibGFua1wiPicgK1xuICAgICAgICAgICAgICBzVGV4dCArXG4gICAgICAgICAgICAgICc8L2E+JyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdW5saW5rKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb25SYW5nZSA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlXG4gICAgICAuZ2V0Q3VycmVudFNlbGVjdGlvbigpXG4gICAgICA/LmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKGN1cnJlbnRTZWxlY3Rpb25SYW5nZSAmJiBjdXJyZW50U2VsZWN0aW9uUmFuZ2UudG9TdHJpbmcoKS5sZW5ndGggPD0gMCkge1xuICAgICAgY29uc3QgYW5jaG9yVGFnID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0U2VsZWN0ZWRBbmNob3JUYWcoKTtcbiAgICAgIGlmIChhbmNob3JUYWcpIHtcbiAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2VsZWN0RWxlbWVudChhbmNob3JUYWcpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmV4ZWNDb21tYW5kKCd1bmxpbmsnKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VGb250U2l6ZShzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldEZvbnRTaXplKHNpemUpO1xuICAgIHRoaXMuc3R5bGVTdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3R5bGVTdGF0ZSxcbiAgICAgIC4uLnRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldFN0eWxlU3RhdGUoKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIG9uQ29sb3JwaWNrZXJDb2xvckNoYW5nZWQoXG4gICAgY29sb3I6IFNreUNvbG9ycGlja2VyT3V0cHV0LFxuICAgIGlzQmFja2dyb3VuZCA9IGZhbHNlLFxuICApOiB2b2lkIHtcbiAgICBpZiAoaXNCYWNrZ3JvdW5kKSB7XG4gICAgICB0aGlzLmV4ZWNDb21tYW5kKCdiYWNrQ29sb3InLCBjb2xvci5yZ2JhVGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhlY0NvbW1hbmQoJ2ZvcmVDb2xvcicsIGNvbG9yLmhleCk7XG4gICAgfVxuICB9XG5cbiAgI3N1YnNjcmliZUVkaXRvckZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuI2VkaXRvckZvY3VzU3RyZWFtU3ViPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy4jZWRpdG9yRm9jdXNTdHJlYW1TdWIgPSB0aGlzLmVkaXRvckZvY3VzU3RyZWFtXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zdHlsZVN0YXRlID0ge1xuICAgICAgICAgIC4uLnRoaXMuc3R5bGVTdGF0ZSxcbiAgICAgICAgICAuLi50aGlzLiNhZGFwdGVyU2VydmljZS5nZXRTdHlsZVN0YXRlKCksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd25zKCk7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgI2Nsb3NlRHJvcGRvd25zKCk6IHZvaWQge1xuICAgIGNvbnN0IG1lc3NhZ2U6IFNreUNvbG9ycGlja2VyTWVzc2FnZSA9IHtcbiAgICAgIHR5cGU6IFNreUNvbG9ycGlja2VyTWVzc2FnZVR5cGUuQ2xvc2UsXG4gICAgfTtcbiAgICB0aGlzLmNvbG9ycGlja2VyU3RyZWFtLm5leHQobWVzc2FnZSk7XG4gICAgdGhpcy5iYWNrQ29sb3JwaWNrZXJTdHJlYW0ubmV4dChtZXNzYWdlKTtcbiAgICB0aGlzLmZvbnRQaWNrZXJTdHJlYW0ubmV4dCh7IHR5cGU6IFNreURyb3Bkb3duTWVzc2FnZVR5cGUuQ2xvc2UgfSk7XG4gICAgdGhpcy5mb250U2l6ZVN0cmVhbS5uZXh0KHsgdHlwZTogU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSB9KTtcbiAgfVxuXG4gICNnZXRGb250TmFtZShmb250TmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IHNreVRleHRFZGl0b3JGb250IG9mIHRoaXMuZm9udExpc3QpIHtcbiAgICAgIGlmIChmb250TmFtZS5yZXBsYWNlKC9bJ1wiXSsvZywgJycpID09PSBza3lUZXh0RWRpdG9yRm9udC5uYW1lKSB7XG4gICAgICAgIHJldHVybiBza3lUZXh0RWRpdG9yRm9udC5uYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiQGZvciAoYWN0aW9uIG9mIHRvb2xiYXJBY3Rpb25zOyB0cmFjayBhY3Rpb24pIHtcbiAgPHNreS10b29sYmFyLWl0ZW1cbiAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci10b29sYmFyLWFjdGlvblwiXG4gICAgW25nQ2xhc3NdPVwiJ3NreS10ZXh0LWVkaXRvci10b29sYmFyLWFjdGlvbi0nICsgYWN0aW9uXCJcbiAgPlxuICAgIEBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgQGNhc2UgKCdmb250LWZhbWlseScpIHtcbiAgICAgICAgPHNreS1kcm9wZG93blxuICAgICAgICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWZvbnQtcGlja2VyXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIFtsYWJlbF09XCInRm9udDogJyArIHN0eWxlU3RhdGVGb250TmFtZVwiXG4gICAgICAgICAgW21lc3NhZ2VTdHJlYW1dPVwiZm9udFBpY2tlclN0cmVhbVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c2t5LWRyb3Bkb3duLWJ1dHRvblxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAnZm9udC1mYW1pbHknOiBzdHlsZVN0YXRlLmZvbnRcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHN0eWxlU3RhdGVGb250TmFtZSB9fVxuICAgICAgICAgIDwvc2t5LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgICA8c2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgICBAZm9yIChmb250TW9kZWwgb2YgZm9udExpc3Q7IHRyYWNrIGZvbnRNb2RlbC5uYW1lKSB7XG4gICAgICAgICAgICAgIDxza3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtZmFtaWx5JzogZm9udE1vZGVsLnZhbHVlXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnZm9udG5hbWUnLCBmb250TW9kZWwubmFtZSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGZvbnRNb2RlbC5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvc2t5LWRyb3Bkb3duLWl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9za3ktZHJvcGRvd24tbWVudT5cbiAgICAgICAgPC9za3ktZHJvcGRvd24+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ2ZvbnQtc2l6ZScpIHtcbiAgICAgICAgPHNreS1kcm9wZG93blxuICAgICAgICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWZvbnQtc2l6ZS1waWNrZXJcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW2xhYmVsXT1cIidGb250IHNpemU6ICcgKyBzdHlsZVN0YXRlLmZvbnRTaXplICsgJ3B4J1wiXG4gICAgICAgICAgW21lc3NhZ2VTdHJlYW1dPVwiZm9udFNpemVTdHJlYW1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNreS1kcm9wZG93bi1idXR0b25cbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgJ2ZvbnQtZmFtaWx5Jzogc3R5bGVTdGF0ZS5mb250U2l6ZVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgc3R5bGVTdGF0ZS5mb250U2l6ZSArICdweCcgfX1cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAgPHNreS1kcm9wZG93bi1tZW51PlxuICAgICAgICAgICAgQGZvciAoc2l6ZSBvZiBmb250U2l6ZUxpc3Q7IHRyYWNrIHNpemUpIHtcbiAgICAgICAgICAgICAgPHNreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjaGFuZ2VGb250U2l6ZShzaXplKVwiPlxuICAgICAgICAgICAgICAgICAge3sgc2l6ZSArICdweCcgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9za3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgICAgICA8L3NreS1kcm9wZG93bj5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnZm9udC1zdHlsZScpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNreS1zd2l0Y2gtaWNvbi1ncm91cCBza3ktdGV4dC1lZGl0b3ItZm9udC1zdHlsZS1waWNrZXJcIj5cbiAgICAgICAgICA8c2t5LWNoZWNrYm94XG4gICAgICAgICAgICBpY29uTmFtZT1cInRleHQtYm9sZFwiXG4gICAgICAgICAgICBsYWJlbD1cIkJvbGRcIlxuICAgICAgICAgICAgdGl0bGU9XCJCb2xkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJzdHlsZVN0YXRlLmJvbGRTdGF0ZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgdG9nZ2xlRm9udFN0eWxlKHN0eWxlU3RhdGUuYm9sZFN0YXRlLCAkZXZlbnQsICdib2xkJylcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c2t5LWNoZWNrYm94XG4gICAgICAgICAgICBpY29uTmFtZT1cInRleHQtaXRhbGljXCJcbiAgICAgICAgICAgIGxhYmVsPVwiSXRhbGljaXplZFwiXG4gICAgICAgICAgICB0aXRsZT1cIkl0YWxpY2l6ZWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0eWxlU3RhdGUuaXRhbGljU3RhdGVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgIHRvZ2dsZUZvbnRTdHlsZShzdHlsZVN0YXRlLml0YWxpY1N0YXRlLCAkZXZlbnQsICdpdGFsaWMnKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxza3ktY2hlY2tib3hcbiAgICAgICAgICAgIGljb25OYW1lPVwidGV4dC11bmRlcmxpbmVcIlxuICAgICAgICAgICAgbGFiZWw9XCJVbmRlcmxpbmVcIlxuICAgICAgICAgICAgdGl0bGU9XCJVbmRlcmxpbmVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0eWxlU3RhdGUudW5kZXJsaW5lU3RhdGVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgIHRvZ2dsZUZvbnRTdHlsZShzdHlsZVN0YXRlLnVuZGVybGluZVN0YXRlLCAkZXZlbnQsICd1bmRlcmxpbmUnKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnY29sb3InKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItY29sb3JwaWNrZXItZ3JvdXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWNvbG9ycGlja2VyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHNreS1jb2xvcnBpY2tlclxuICAgICAgICAgICAgICAjY29sb3JQaWNrZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItZm9udC1jb2xvci1waWNrZXJcIlxuICAgICAgICAgICAgICBsYWJlbD1cIkZvbnQgY29sb3JcIlxuICAgICAgICAgICAgICBwaWNrZXJCdXR0b25JY29uPVwiY29sb3ItbGluZVwiXG4gICAgICAgICAgICAgIFttZXNzYWdlU3RyZWFtXT1cImNvbG9ycGlja2VyU3RyZWFtXCJcbiAgICAgICAgICAgICAgW3Nob3dSZXNldEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIChzZWxlY3RlZENvbG9yQ2hhbmdlZCk9XCJvbkNvbG9ycGlja2VyQ29sb3JDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBvdXRwdXRGb3JtYXQ9XCJoZXhcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBbYWxsb3dUcmFuc3BhcmVuY3ldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic3R5bGVTdGF0ZS5mb250Q29sb3JcIlxuICAgICAgICAgICAgICAgIFtza3lDb2xvcnBpY2tlcklucHV0XT1cImNvbG9yUGlja2VyXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc2t5LWNvbG9ycGlja2VyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItY29sb3JwaWNrZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c2t5LWNvbG9ycGlja2VyXG4gICAgICAgICAgICAgICNiYWNrQ29sb3JQaWNrZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItYmFja2dyb3VuZC1jb2xvci1waWNrZXJcIlxuICAgICAgICAgICAgICBsYWJlbD1cIkJhY2tncm91bmQgY29sb3JcIlxuICAgICAgICAgICAgICBwaWNrZXJCdXR0b25JY29uPVwidGV4dC1jb2xvclwiXG4gICAgICAgICAgICAgIFttZXNzYWdlU3RyZWFtXT1cImJhY2tDb2xvcnBpY2tlclN0cmVhbVwiXG4gICAgICAgICAgICAgIFtzaG93UmVzZXRCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWRDb2xvckNoYW5nZWQpPVwib25Db2xvcnBpY2tlckNvbG9yQ2hhbmdlZCgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgb3V0cHV0Rm9ybWF0PVwicmdiYVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIFthbGxvd1RyYW5zcGFyZW5jeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0eWxlU3RhdGUuYmFja0NvbG9yXCJcbiAgICAgICAgICAgICAgICBbc2t5Q29sb3JwaWNrZXJJbnB1dF09XCJiYWNrQ29sb3JQaWNrZXJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9za3ktY29sb3JwaWNrZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdsaXN0Jykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LXN3aXRjaC1pY29uLWdyb3VwXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkJ1bGxldGVkIGxpc3RcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJCdWxsZXRlZCBsaXN0XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJ0ZXh0LWJ1bGxldC1saXN0XCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiTnVtYmVyZWQgbGlzdFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIk51bWJlcmVkIGxpc3RcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdpbnNlcnRPcmRlcmVkTGlzdCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJ0ZXh0LW51bWJlci1saXN0LWx0clwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdhbGlnbm1lbnQnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktc3dpdGNoLWljb24tZ3JvdXBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWxpZ24gbGVmdFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIkFsaWduIGxlZnRcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdqdXN0aWZ5TGVmdCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJ0ZXh0LWFsaWduLWxlZnRcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbGlnbiBjZW50ZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJBbGlnbiBjZW50ZXJcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdqdXN0aWZ5Q2VudGVyJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktaWNvbiBpY29uTmFtZT1cInRleHQtYWxpZ24tY2VudGVyXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWxpZ24gcmlnaHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJBbGlnbiByaWdodFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ2p1c3RpZnlSaWdodCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJ0ZXh0LWFsaWduLXJpZ2h0XCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ2luZGVudGF0aW9uJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LXN3aXRjaC1pY29uLWdyb3VwXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk91dGRlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJPdXRkZW50XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnb3V0ZGVudCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJ0ZXh0LWluZGVudC1kZWNyZWFzZVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkluZGVudFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIkluZGVudFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ2luZGVudCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJ0ZXh0LWluZGVudC1pbmNyZWFzZVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCd1bmRvLXJlZG8nKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktc3dpdGNoLWljb24tZ3JvdXBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiVW5kb1wiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIlVuZG9cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCd1bmRvJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktaWNvbiBpY29uTmFtZT1cImFycm93LXVuZG9cIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZWRvXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWRlZmF1bHQgc2t5LWJ0bi1pY29uXCJcbiAgICAgICAgICAgIHRpdGxlPVwiUmVkb1wiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ3JlZG8nKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNreS1pY29uIGljb25OYW1lPVwiYXJyb3ctcmVkb1wiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdsaW5rJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LXN3aXRjaC1pY29uLWdyb3VwXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkxpbmtcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJMaW5rXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2ljb24tYnRuLWFjdGl2ZSc6IHN0eWxlU3RhdGUubGlua1N0YXRlXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJsaW5rKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktaWNvbiBpY29uTmFtZT1cImxpbmtcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJVbmxpbmtcIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJVbmxpbmtcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXN0eWxlU3RhdGUubGlua1N0YXRlIHx8IGRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ1bmxpbmsoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNreS1pY29uIGljb25OYW1lPVwibGluay1kaXNtaXNzXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICA8L3NreS10b29sYmFyLWl0ZW0+XG59XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, NgZone, TemplateRef, ViewChild, ViewEncapsulation, booleanAttribute, inject, } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { SkyCoreAdapterService, SkyIdModule, SkyIdService } from '@skyux/core';\nimport { SKY_FORM_ERRORS_ENABLED, SkyFormErrorsModule, SkyInputBoxHostService, SkyRequiredStateDirective, } from '@skyux/forms';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyThemeModule } from '@skyux/theme';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SkyTextEditorResourcesModule } from '../shared/sky-text-editor-resources.module';\nimport { FONT_LIST_DEFAULTS } from './defaults/font-list-defaults';\nimport { FONT_SIZE_LIST_DEFAULTS } from './defaults/font-size-list-defaults';\nimport { LINK_WINDOW_OPTIONS_DEFAULTS } from './defaults/link-window-options-defaults';\nimport { MENU_DEFAULTS } from './defaults/menu-defaults';\nimport { STYLE_STATE_DEFAULTS } from './defaults/style-state-defaults';\nimport { TOOLBAR_ACTION_DEFAULTS } from './defaults/toolbar-action-defaults';\nimport { SkyTextEditorMenubarComponent } from './menubar/text-editor-menubar.component';\nimport { SkyTextEditorAdapterService } from './services/text-editor-adapter.service';\nimport { SkyTextEditorSelectionService } from './services/text-editor-selection.service';\nimport { SkyTextEditorService } from './services/text-editor.service';\nimport { SkyTextSanitizationService } from './services/text-sanitization.service';\nimport { SkyTextEditorToolbarComponent } from './toolbar/text-editor-toolbar.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@skyux/forms\";\nimport * as i2 from \"@angular/common\";\nimport * as i3 from \"@skyux/help-inline\";\nimport * as i4 from \"@skyux/core\";\nimport * as i5 from \"@skyux/theme\";\nimport * as i6 from \"@skyux/layout\";\nimport * as i7 from \"@skyux/i18n\";\n/**\n * The text editor component lets users format and manipulate text.\n */\nexport class SkyTextEditorComponent {\n /**\n * 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.\n * To set the disabled state on reactive forms, use the `FormControl` instead.\n * @default false\n */\n set disabled(value) {\n if (value !== this.disabled) {\n this.#_disabled = value;\n this.#applyDisabledState();\n }\n }\n get disabled() {\n return this.#_disabled;\n }\n /**\n * The fonts to include in the font picker.\n * @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'}]\n */\n set fontList(value) {\n this.#_fontList = value || FONT_LIST_DEFAULTS;\n }\n get fontList() {\n return this.#_fontList;\n }\n /**\n * The font sizes to include in the font size picker.\n * @default [6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 36, 48]\n */\n set fontSizeList(value) {\n this.#_fontSizeList = value || FONT_SIZE_LIST_DEFAULTS;\n }\n get fontSizeList() {\n return this.#_fontSizeList;\n }\n /**\n * The unique ID attribute for the text editor.\n * By default, the component generates a random ID.\n */\n set id(value) {\n this.#id = value || this.#defaultId;\n }\n get id() {\n return this.#id;\n }\n /**\n * The initial styles for all content, including background color, font size, and link state.\n */\n set initialStyleState(state) {\n // Do not update the state after initialization has taken place\n /* istanbul ignore else */\n if (!this.#initialized) {\n this.#_initialStyleState = {\n ...STYLE_STATE_DEFAULTS,\n ...state,\n };\n }\n }\n get initialStyleState() {\n return this.#_initialStyleState;\n }\n /**\n * The text to display as the text editor's label.\n */\n set labelText(value) {\n this.#_labelText = value;\n this.#updateA11yAttributes();\n }\n get labelText() {\n return this.#_labelText;\n }\n /**\n * The menus to include in the menu bar.\n * @default [ 'edit', 'format' ]\n */\n set menus(value) {\n this.#_menus = value || MENU_DEFAULTS;\n }\n get menus() {\n return this.#_menus;\n }\n /**\n * The merge fields to include in the merge field menu.\n */\n set mergeFields(value) {\n this.#_mergeFields = value || [];\n }\n get mergeFields() {\n return this.#_mergeFields;\n }\n /**\n * Placeholder text to display when the text entry area is empty.\n */\n set placeholder(value) {\n /* istanbul ignore else */\n if (value !== this.#_placeholder) {\n this.#_placeholder = value || '';\n if (this.#initialized) {\n this.#adapterService.setPlaceholder(value);\n }\n }\n }\n get placeholder() {\n return this.#_placeholder;\n }\n /**\n * The actions to include in the toolbar in the specified order.\n * @default [ 'font-family', 'font-size', 'font-style', 'color', 'list', 'link ]\n */\n set toolbarActions(value) {\n this.#_toolbarActions = value || TOOLBAR_ACTION_DEFAULTS;\n }\n get toolbarActions() {\n return this.#_toolbarActions;\n }\n /**\n * The target window options for adding a hyperlink.\n * @default [ 'new', 'existing' ]\n */\n set linkWindowOptions(value) {\n this.#_linkWindowOptions = value ?? LINK_WINDOW_OPTIONS_DEFAULTS;\n }\n get linkWindowOptions() {\n return this.#_linkWindowOptions;\n }\n /**\n * The internal value of the control.\n */\n set value(value) {\n // Normalize value and set any empty state to an empty string.\n let normalizedValue;\n const valueTrimmed = value?.trim();\n if (!value ||\n valueTrimmed === '<p></p>' ||\n valueTrimmed === '<br>' ||\n valueTrimmed === '<p><br></p>') {\n normalizedValue = '';\n }\n else {\n normalizedValue = value;\n }\n normalizedValue = this.#sanitizationService\n .sanitize(normalizedValue)\n .trim();\n if (this.#_value !== normalizedValue) {\n this.#_value = normalizedValue;\n // Update angular form control if model has been normalized.\n /* istanbul ignore else */\n if (this.ngControl?.control &&\n normalizedValue !== this.ngControl.control.value) {\n this.ngControl.control.setValue(normalizedValue, {\n emitModelToViewChange: false,\n });\n }\n // #initIframe() will do another check later to see if the editor should\n // receive focus if not initialized before this is called.\n this.#checkAutofocusAndFocus();\n }\n }\n get value() {\n return this.#_value;\n }\n #defaultId;\n #id;\n #focusInitialized;\n #initialized;\n #ngUnsubscribe;\n #_fontList;\n #_fontSizeList;\n #_labelText;\n #_mergeFields;\n #_menus;\n #_toolbarActions;\n #_linkWindowOptions;\n #_disabled;\n #_initialStyleState;\n #_placeholder;\n #_value;\n #adapterService;\n #changeDetector;\n #coreAdapterService;\n #editorService;\n #idSvc;\n #sanitizationService;\n #zone;\n constructor() {\n /**\n * Whether to put focus on the editor after it renders.\n */\n this.autofocus = false;\n /**\n * Whether the text editor is stacked on another form component. When specified,\n * the appropriate vertical spacing is automatically added to the text editor.\n */\n this.stacked = false;\n this.editorFocusStream = new Subject();\n this.formControlClass = !!inject(SkyInputBoxHostService, {\n optional: true,\n });\n this.editorFocused = false;\n this.#focusInitialized = false;\n this.#initialized = false;\n this.#ngUnsubscribe = new Subject();\n this.#_fontList = FONT_LIST_DEFAULTS;\n this.#_fontSizeList = FONT_SIZE_LIST_DEFAULTS;\n this.#_mergeFields = [];\n this.#_menus = MENU_DEFAULTS;\n this.#_toolbarActions = TOOLBAR_ACTION_DEFAULTS;\n this.#_linkWindowOptions = LINK_WINDOW_OPTIONS_DEFAULTS;\n this.#_disabled = false;\n this.#_initialStyleState = Object.assign({}, STYLE_STATE_DEFAULTS);\n this.#_placeholder = '';\n this.#_value = '<p></p>';\n this.#adapterService = inject(SkyTextEditorAdapterService);\n this.#changeDetector = inject(ChangeDetectorRef);\n this.#coreAdapterService = inject(SkyCoreAdapterService);\n this.#editorService = inject(SkyTextEditorService);\n this.#idSvc = inject(SkyIdService);\n this.#sanitizationService = inject(SkyTextSanitizationService);\n this.#zone = inject(NgZone);\n this.errorId = this.#idSvc.generateId();\n this.ngControl = inject(NgControl);\n this.requiredState = inject(SkyRequiredStateDirective);\n /* istanbul ignore next */\n this.#_onTouched = () => { };\n /* istanbul ignore next */\n this.#_onChange = () => { };\n this.#id = this.#defaultId = this.#idSvc.generateId();\n this.ngControl.valueAccessor = this;\n }\n ngAfterViewInit() {\n this.#initIframe();\n }\n ngOnDestroy() {\n this.#adapterService.removeObservers(this.#editorService.editor);\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n onIframeLoad() {\n // Reinitialize the editor if it already exists to cover situations where the text editor might have been moved in the DOM.\n if (this.#editorService.isInitialized) {\n this.#initIframe();\n }\n }\n /**\n * Implemented as part of ControlValueAccessor.\n */\n writeValue(value) {\n this.value = value;\n // Update HTML if necessary.\n if (this.#initialized) {\n const editorValue = this.#adapterService.getEditorInnerHtml();\n if (editorValue !== this.#_value) {\n this.#adapterService.setEditorInnerHtml(this.#_value);\n }\n }\n }\n /**\n * Implemented as part of ControlValueAccessor.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn) {\n this.#_onChange = fn;\n }\n /**\n * Implemented as part of ControlValueAccessor.\n */\n registerOnTouched(fn) {\n this.#_onTouched = fn;\n }\n /**\n * Implemented as part of ControlValueAccessor.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n #checkAutofocusAndFocus() {\n // Don't set focus on the editor if the iframe isn't initialized.\n // Autofocus isn't testable in Firefox and IE.\n /* istanbul ignore next */\n if (this.autofocus && this.#initialized && !this.#focusInitialized) {\n this.#adapterService.focusEditor();\n this.#focusInitialized = true;\n }\n }\n #updateStyle() {\n this.#_initialStyleState = {\n ...this.#_initialStyleState,\n ...this.#adapterService.getStyleState(),\n };\n }\n #initIframe() {\n this.#adapterService.initEditor(this.id, this.iframeRef.nativeElement, this.initialStyleState, this.placeholder);\n this.ngControl.statusChanges\n ?.pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#updateA11yAttributes();\n // Trigger change detection when the field status is modified programmatically.\n this.#changeDetector.markForCheck();\n });\n this.#editorService\n .inputListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n // Angular doesn't run change detection for changes originating inside an iframe,\n // so we have to call the onChange() event inside NgZone to force change propagation to consuming components.\n this.#zone.run(() => {\n this.#viewToModelUpdate();\n });\n });\n this.#editorService\n .selectionChangeListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#updateStyle();\n this.editorFocusStream.next();\n });\n this.#editorService\n .clickListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.editorFocusStream.next();\n });\n this.#editorService\n .blurListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n // Angular doesn't run change detection for changes originating inside an iframe,\n // so we have to run markForCheck() inside the NgZone to force change propagation to consuming components.\n this.#zone.run(() => {\n this.#_onTouched();\n this.editorFocused = false;\n this.#changeDetector.markForCheck();\n });\n });\n this.#editorService\n .commandChangeListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#updateStyle();\n this.#viewToModelUpdate();\n });\n this.#editorService\n .focusListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n // Angular doesn't run change detection for changes originating inside an iframe,\n // so we have to run markForCheck() inside the NgZone to force change propagation to consuming components.\n this.#zone.run(() => {\n this.editorFocused = true;\n this.#changeDetector.markForCheck();\n });\n });\n this.#adapterService.setEditorInnerHtml(this.#_value);\n this.#updateA11yAttributes();\n /* istanbul ignore next */\n if (this.autofocus) {\n this.#adapterService.focusEditor();\n }\n this.#applyDisabledState();\n this.#initialized = true;\n this.#focusInitialized = false;\n this.#checkAutofocusAndFocus();\n }\n #updateA11yAttributes() {\n if (this.#editorService.isInitialized) {\n this.#adapterService.setLabelAttribute(this.labelText);\n this.#adapterService.setErrorAttributes(this.labelText ? this.errorId : '', this.ngControl.errors);\n this.#adapterService.setRequiredAttribute(this.requiredState.isRequired());\n }\n }\n #viewToModelUpdate(emitChange = true) {\n this.value = this.#adapterService.getEditorInnerHtml();\n /* istanbul ignore else */\n if (emitChange) {\n this.#_onChange(this.#_value);\n }\n }\n #applyDisabledState() {\n // Update focusableChildren inside the iframe.\n let focusableChildren;\n /* istanbul ignore else */\n if (this.iframeRef?.nativeElement.contentDocument?.body) {\n focusableChildren = this.#coreAdapterService.getFocusableChildren(this.iframeRef.nativeElement.contentDocument.body, {\n ignoreVisibility: true,\n ignoreTabIndex: true,\n });\n if (this.#_disabled) {\n this.#adapterService.disableEditor(focusableChildren, this.iframeRef.nativeElement);\n }\n else {\n this.#adapterService.enableEditor(focusableChildren, this.iframeRef.nativeElement);\n }\n this.#changeDetector.markForCheck();\n }\n }\n /* istanbul ignore next */\n #_onTouched;\n /* istanbul ignore next */\n #_onChange;\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.0\", type: SkyTextEditorComponent, isStandalone: true, selector: \"sky-text-editor\", inputs: { autofocus: \"autofocus\", disabled: [\"disabled\", \"disabled\", booleanAttribute], fontList: \"fontList\", fontSizeList: \"fontSizeList\", helpPopoverContent: \"helpPopoverContent\", helpPopoverTitle: \"helpPopoverTitle\", hintText: \"hintText\", id: \"id\", initialStyleState: \"initialStyleState\", labelText: \"labelText\", menus: \"menus\", mergeFields: \"mergeFields\", placeholder: \"placeholder\", stacked: [\"stacked\", \"stacked\", booleanAttribute], toolbarActions: \"toolbarActions\", linkWindowOptions: \"linkWindowOptions\", helpKey: \"helpKey\" }, host: { properties: { \"class.sky-form-field-stacked\": \"this.stacked\", \"class.sky-form-control\": \"this.formControlClass\" } }, providers: [\n SkyTextEditorService,\n SkyTextEditorSelectionService,\n SkyTextEditorAdapterService,\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ], viewQueries: [{ propertyName: \"iframeRef\", first: true, predicate: [\"iframe\"], descendants: true }, { propertyName: \"inputTemplateRef\", first: true, predicate: [\"inputTemplateRef\"], descendants: true, read: TemplateRef, static: true }], hostDirectives: [{ directive: i1.SkyRequiredStateDirective, inputs: [\"required\", \"required\"] }], ngImport: i0, template: \"<div\\n class=\\\"sky-text-editor\\\"\\n [ngClass]=\\\"{\\n 'sky-text-editor-disabled': disabled,\\n 'sky-text-editor-wrapper-focused': editorFocused,\\n 'sky-text-editor-invalid':\\n ngControl.errors && (ngControl.touched || ngControl.dirty)\\n }\\\"\\n>\\n <div class=\\\"sky-text-editor-label-wrapper\\\">\\n @if (labelText) {\\n <label\\n class=\\\"sky-control-label\\\"\\n [ngClass]=\\\"{\\n 'sky-control-label-required': requiredState.isRequired()\\n }\\\"\\n >{{ labelText }}</label\\n >\\n @if (helpPopoverContent || helpKey) {\\n <span class=\\\"sky-control-help-container\\\">\\n <sky-help-inline\\n [helpKey]=\\\"helpKey\\\"\\n [labelText]=\\\"labelText\\\"\\n [popoverContent]=\\\"helpPopoverContent\\\"\\n [popoverTitle]=\\\"helpPopoverTitle\\\"\\n />\\n </span>\\n }\\n }\\n </div>\\n @if (\\n (menus && menus.length) > 0 || (toolbarActions && toolbarActions.length > 0)\\n ) {\\n <sky-toolbar class=\\\"sky-text-editor-toolbar\\\">\\n @if (menus && menus.length > 0) {\\n <sky-toolbar-section\\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-toolbar-section>\\n }\\n @if (toolbarActions && toolbarActions.length > 0) {\\n <sky-toolbar-section\\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 [linkWindowOptions]=\\\"linkWindowOptions\\\"\\n [toolbarActions]=\\\"toolbarActions\\\"\\n [styleState]=\\\"initialStyleState\\\"\\n />\\n </sky-toolbar-section>\\n }\\n </sky-toolbar>\\n }\\n <iframe\\n #iframe\\n class=\\\"sky-text-editor-wrapper\\\"\\n src=\\\"about:blank\\\"\\n allow=\\\"clipboard-read *; clipboard-write *\\\"\\n [attr.title]=\\\"\\n labelText || ('skyux_text_editor_iframe_title_default' | skyLibResources)\\n \\\"\\n [attr.aria-describedby]=\\\"hintText ? hintTextEl.id : undefined\\\"\\n [ngClass]=\\\"{\\n 'sky-text-editor-wrapper-disabled': disabled\\n }\\\"\\n (load)=\\\"onIframeLoad()\\\"\\n >\\n </iframe>\\n</div>\\n<div\\n #hintTextEl=\\\"skyId\\\"\\n skyId\\n class=\\\"sky-text-editor-hint-text\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-font-deemphasized': 'default',\\n 'sky-font-hint-text-s': 'modern'\\n }\\\"\\n>\\n {{ hintText }}\\n</div>\\n<sky-form-errors\\n class=\\\"sky-text-editor-errors\\\"\\n [id]=\\\"errorId\\\"\\n [errors]=\\\"ngControl.errors\\\"\\n [labelText]=\\\"labelText\\\"\\n [touched]=\\\"ngControl.touched\\\"\\n [dirty]=\\\"ngControl.dirty\\\"\\n>\\n <ng-content select=\\\"sky-form-error\\\" />\\n</sky-form-errors>\\n\", styles: [\".sky-text-editor:not(.sky-theme-modern *){--sky-override-text-editor-background-color: white;--sky-override-text-editor-toolbar-background-color: white;--sky-override-text-editor-label-background-color: transparent;--sky-override-text-editor-border-error: 1px solid var(--sky-highlight-color-danger);--sky-override-text-editor-border-focused: 1px solid var(--sky-highlight-color-info);--sky-override-text-editor-border-radius: 0;--sky-override-text-editor-border: 1px solid #cdcfd2;--sky-override-text-editor-box-shadow-error: 0 0 8px rgba(239, 64, 68, .6);--sky-override-text-editor-box-shadow-focused: 0 0 8px rgba(0, 180, 241, .6);--sky-override-text-editor-box-shadow: none;--sky-override-text-editor-disabled-cursor: default;--sky-override-text-editor-label-color: var(--sky-text-color-default);--sky-override-text-editor-label-color-focused: var(--sky-text-color-default);--sky-override-text-editor-label-color-invalid: var(--sky-text-color-default);--sky-override-text-editor-label-display: flex;--sky-override-text-editor-label-font-size: 15px;--sky-override-text-editor-label-font-weight: 400;--sky-override-text-editor-label-line-height: normal;--sky-override-text-editor-label-margin-bottom: 5px;--sky-override-text-editor-label-padding: 0;--sky-override-text-editor-toolbar-border: 1px solid #cdcfd2;--sky-override-text-editor-toolbar-item-spacing: 0 20px 10px 0;--sky-override-text-editor-toolbar-section-padding: 10px 10px 0 10px;--sky-override-text-editor-top-toolbar-bottom-padding: 0;--sky-override-text-editor-wrapper-background-color-disabled: var( --sky-background-color-disabled );--sky-override-text-editor-wrapper-padding: 1rem}.sky-text-editor-hint-text:not(.sky-theme-modern *){--sky-override-text-editor-hint-text-space: 5px}sky-text-editor.sky-form-field-stacked{display:block}.sky-text-editor{border-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-base) var(--sky-color-border-input-base));background-color:var(--sky-color-background-input-base)}.sky-text-editor.sky-text-editor-disabled{background-color:var(--sky-color-background-input-disabled);box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-disabled) var(--sky-color-border-input-disabled));cursor:var(--sky-override-text-editor-disabled-cursor, not-allowed)}.sky-text-editor .sky-text-editor-label-wrapper:not(:empty){background-color:var(--sky-override-text-editor-label-background-color);display:var(--sky-override-text-editor-label-display, inline-block);padding:var(--sky-override-text-editor-label-padding, var(--sky-comp-input-label-space-inset-top) var(--sky-comp-input-value-space-inset-right) 0 var(--sky-comp-input-value-space-inset-left));width:100%;color:var(--sky-override-text-editor-label-color, var(--sky-color-text-default))}.sky-text-editor .sky-text-editor-label-wrapper:not(:empty) label{font-size:var(--sky-override-text-editor-label-font-size, var(--sky-font-size-input-label));font-style:var(--sky-font-style-input-label);font-weight:var(--sky-override-text-editor-label-font-weight, var(--sky-font-style-input-label));letter-spacing:var(--sky-font-letter_spacing-input-label);line-height:var(--sky-override-text-editor-label-line-height, var(--sky-font-line_height-input-label));margin-bottom:var(--sky-override-text-editor-label-margin-bottom, 0)}.sky-text-editor .sky-text-editor-wrapper{display:flex;flex-wrap:wrap;background-color:var(--sky-override-text-editor-background-color);width:100%;height:300px;padding:var(--sky-override-text-editor-wrapper-padding, var(--sky-comp-text_editor-space-inset-top) var(--sky-comp-text_editor-space-inset-right) var(--sky-comp-text_editor-space-inset-bottom) var(--sky-comp-text_editor-space-inset-left));font-size:1.2rem;border-bottom-left-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));border-bottom-right-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));border-top:none;border-right:var(--sky-override-text-editor-border, none);border-bottom:var(--sky-override-text-editor-border, none);border-left:var(--sky-override-text-editor-border, none);box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-base) var(--sky-color-border-input-base));overflow-y:auto;outline:none}.sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:var(--sky-override-text-editor-wrapper-background-color-disabled, var(--sky-color-background-input-disabled));box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-disabled) var(--sky-color-border-input-disabled))}.sky-text-editor.sky-text-editor-invalid .sky-text-editor-wrapper{box-shadow:var(--sky-override-text-editor-box-shadow-error, inset 0 0 0 var(--sky-border-width-input-error) var(--sky-color-border-input-error));border:var(--sky-override-text-editor-border-error, none);outline:none}.sky-text-editor.sky-text-editor-invalid .sky-text-editor-label-wrapper{color:var(--sky-override-text-editor-label-color-invalid, var(--sky-color-text-danger))}.sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-wrapper{box-shadow:var(--sky-override-text-editor-box-shadow-focused, inset 0 0 0 var(--sky-border-width-input-focus) var(--sky-color-border-input-focus));border:var(--sky-override-text-editor-border-focused, none);outline:none}.sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-label-wrapper{color:var(--sky-override-text-editor-label-color-focused, var(--sky-color-text-action))}.sky-text-editor:not(.sky-text-editor-wrapper-focused) .sky-text-editor-wrapper:hover:not(:active){box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-hover) var(--sky-color-border-input-hover))}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-container{background-color:var(--sky-override-text-editor-toolbar-background-color)!important}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:var(--sky-override-text-editor-toolbar-section-padding, var(--sky-comp-toolbar-space-inset-top) var(--sky-comp-input-value-space-inset-right) var(--sky-comp-toolbar-space-inset-bottom) var(--sky-comp-input-value-space-inset-left))!important;border-top:var(--sky-override-text-editor-toolbar-border, none)!important}.sky-text-editor .sky-text-editor-toolbar sky-toolbar-section:not(:last-of-type) .sky-toolbar-section{padding-bottom:var(--sky-override-text-editor-top-toolbar-bottom-padding, var(--sky-comp-toolbar-space-inset-bottom))!important;border-top:none!important}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:var(--sky-override-text-editor-toolbar-border, none);border-right:var(--sky-override-text-editor-toolbar-border, none)}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:var(--sky-override-text-editor-toolbar-item-spacing, 0 var(--sky-space-gap-action_group-m) 0 0)!important}.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-text-editor-hint-text{margin-top:var(--sky-override-text-editor-hint-text-space, var(--sky-space-gap-stacked_supplemental-s))}.sky-theme-modern .sky-text-editor .sky-text-editor-label-wrapper:not(:empty){transition:border-color .15s,box-shadow .15s,color .15s}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper{transition:border-color .15s,box-shadow .15s,color .15s}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i2.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"ngmodule\", type: SkyHelpInlineModule }, { kind: \"component\", type: i3.λ1, selector: \"sky-help-inline\", inputs: [\"ariaControls\", \"ariaExpanded\", \"ariaLabel\", \"helpKey\", \"labelledBy\", \"labelText\", \"popoverContent\", \"popoverTitle\"], outputs: [\"actionClick\"] }, { kind: \"ngmodule\", type: SkyIdModule }, { kind: \"directive\", type: i4.λ2, selector: \"[skyId]\", exportAs: [\"skyId\"] }, { kind: \"component\", type: SkyTextEditorMenubarComponent, selector: \"sky-text-editor-menubar\", inputs: [\"editorFocusStream\", \"menus\", \"mergeFields\", \"disabled\"] }, { kind: \"component\", type: SkyTextEditorToolbarComponent, selector: \"sky-text-editor-toolbar\", inputs: [\"editorFocusStream\", \"fontList\", \"fontSizeList\", \"toolbarActions\", \"linkWindowOptions\", \"styleState\", \"disabled\"] }, { kind: \"ngmodule\", type: SkyThemeModule }, { kind: \"directive\", type: i5.λ2, selector: \"[skyThemeClass]\", inputs: [\"class\", \"skyThemeClass\"] }, { kind: \"ngmodule\", type: SkyToolbarModule }, { kind: \"component\", type: i6.λ37, selector: \"sky-toolbar\", inputs: [\"listDescriptor\"] }, { kind: \"component\", type: i6.λ38, selector: \"sky-toolbar-section\" }, { kind: \"ngmodule\", type: SkyFormErrorsModule }, { kind: \"component\", type: i1.λ21, selector: \"sky-form-errors\", inputs: [\"errors\", \"labelText\", \"touched\", \"dirty\"] }, { kind: \"ngmodule\", type: SkyTextEditorResourcesModule }, { kind: \"pipe\", type: i7.SkyLibResourcesPipe, name: \"skyLibResources\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-text-editor', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n SkyTextEditorService,\n SkyTextEditorSelectionService,\n SkyTextEditorAdapterService,\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ], hostDirectives: [\n {\n directive: SkyRequiredStateDirective,\n inputs: ['required'],\n },\n ], imports: [\n CommonModule,\n SkyHelpInlineModule,\n SkyIdModule,\n SkyTextEditorMenubarComponent,\n SkyTextEditorToolbarComponent,\n SkyThemeModule,\n SkyToolbarModule,\n SkyFormErrorsModule,\n SkyTextEditorResourcesModule,\n ], template: \"<div\\n class=\\\"sky-text-editor\\\"\\n [ngClass]=\\\"{\\n 'sky-text-editor-disabled': disabled,\\n 'sky-text-editor-wrapper-focused': editorFocused,\\n 'sky-text-editor-invalid':\\n ngControl.errors && (ngControl.touched || ngControl.dirty)\\n }\\\"\\n>\\n <div class=\\\"sky-text-editor-label-wrapper\\\">\\n @if (labelText) {\\n <label\\n class=\\\"sky-control-label\\\"\\n [ngClass]=\\\"{\\n 'sky-control-label-required': requiredState.isRequired()\\n }\\\"\\n >{{ labelText }}</label\\n >\\n @if (helpPopoverContent || helpKey) {\\n <span class=\\\"sky-control-help-container\\\">\\n <sky-help-inline\\n [helpKey]=\\\"helpKey\\\"\\n [labelText]=\\\"labelText\\\"\\n [popoverContent]=\\\"helpPopoverContent\\\"\\n [popoverTitle]=\\\"helpPopoverTitle\\\"\\n />\\n </span>\\n }\\n }\\n </div>\\n @if (\\n (menus && menus.length) > 0 || (toolbarActions && toolbarActions.length > 0)\\n ) {\\n <sky-toolbar class=\\\"sky-text-editor-toolbar\\\">\\n @if (menus && menus.length > 0) {\\n <sky-toolbar-section\\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-toolbar-section>\\n }\\n @if (toolbarActions && toolbarActions.length > 0) {\\n <sky-toolbar-section\\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 [linkWindowOptions]=\\\"linkWindowOptions\\\"\\n [toolbarActions]=\\\"toolbarActions\\\"\\n [styleState]=\\\"initialStyleState\\\"\\n />\\n </sky-toolbar-section>\\n }\\n </sky-toolbar>\\n }\\n <iframe\\n #iframe\\n class=\\\"sky-text-editor-wrapper\\\"\\n src=\\\"about:blank\\\"\\n allow=\\\"clipboard-read *; clipboard-write *\\\"\\n [attr.title]=\\\"\\n labelText || ('skyux_text_editor_iframe_title_default' | skyLibResources)\\n \\\"\\n [attr.aria-describedby]=\\\"hintText ? hintTextEl.id : undefined\\\"\\n [ngClass]=\\\"{\\n 'sky-text-editor-wrapper-disabled': disabled\\n }\\\"\\n (load)=\\\"onIframeLoad()\\\"\\n >\\n </iframe>\\n</div>\\n<div\\n #hintTextEl=\\\"skyId\\\"\\n skyId\\n class=\\\"sky-text-editor-hint-text\\\"\\n [skyThemeClass]=\\\"{\\n 'sky-font-deemphasized': 'default',\\n 'sky-font-hint-text-s': 'modern'\\n }\\\"\\n>\\n {{ hintText }}\\n</div>\\n<sky-form-errors\\n class=\\\"sky-text-editor-errors\\\"\\n [id]=\\\"errorId\\\"\\n [errors]=\\\"ngControl.errors\\\"\\n [labelText]=\\\"labelText\\\"\\n [touched]=\\\"ngControl.touched\\\"\\n [dirty]=\\\"ngControl.dirty\\\"\\n>\\n <ng-content select=\\\"sky-form-error\\\" />\\n</sky-form-errors>\\n\", styles: [\".sky-text-editor:not(.sky-theme-modern *){--sky-override-text-editor-background-color: white;--sky-override-text-editor-toolbar-background-color: white;--sky-override-text-editor-label-background-color: transparent;--sky-override-text-editor-border-error: 1px solid var(--sky-highlight-color-danger);--sky-override-text-editor-border-focused: 1px solid var(--sky-highlight-color-info);--sky-override-text-editor-border-radius: 0;--sky-override-text-editor-border: 1px solid #cdcfd2;--sky-override-text-editor-box-shadow-error: 0 0 8px rgba(239, 64, 68, .6);--sky-override-text-editor-box-shadow-focused: 0 0 8px rgba(0, 180, 241, .6);--sky-override-text-editor-box-shadow: none;--sky-override-text-editor-disabled-cursor: default;--sky-override-text-editor-label-color: var(--sky-text-color-default);--sky-override-text-editor-label-color-focused: var(--sky-text-color-default);--sky-override-text-editor-label-color-invalid: var(--sky-text-color-default);--sky-override-text-editor-label-display: flex;--sky-override-text-editor-label-font-size: 15px;--sky-override-text-editor-label-font-weight: 400;--sky-override-text-editor-label-line-height: normal;--sky-override-text-editor-label-margin-bottom: 5px;--sky-override-text-editor-label-padding: 0;--sky-override-text-editor-toolbar-border: 1px solid #cdcfd2;--sky-override-text-editor-toolbar-item-spacing: 0 20px 10px 0;--sky-override-text-editor-toolbar-section-padding: 10px 10px 0 10px;--sky-override-text-editor-top-toolbar-bottom-padding: 0;--sky-override-text-editor-wrapper-background-color-disabled: var( --sky-background-color-disabled );--sky-override-text-editor-wrapper-padding: 1rem}.sky-text-editor-hint-text:not(.sky-theme-modern *){--sky-override-text-editor-hint-text-space: 5px}sky-text-editor.sky-form-field-stacked{display:block}.sky-text-editor{border-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-base) var(--sky-color-border-input-base));background-color:var(--sky-color-background-input-base)}.sky-text-editor.sky-text-editor-disabled{background-color:var(--sky-color-background-input-disabled);box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-disabled) var(--sky-color-border-input-disabled));cursor:var(--sky-override-text-editor-disabled-cursor, not-allowed)}.sky-text-editor .sky-text-editor-label-wrapper:not(:empty){background-color:var(--sky-override-text-editor-label-background-color);display:var(--sky-override-text-editor-label-display, inline-block);padding:var(--sky-override-text-editor-label-padding, var(--sky-comp-input-label-space-inset-top) var(--sky-comp-input-value-space-inset-right) 0 var(--sky-comp-input-value-space-inset-left));width:100%;color:var(--sky-override-text-editor-label-color, var(--sky-color-text-default))}.sky-text-editor .sky-text-editor-label-wrapper:not(:empty) label{font-size:var(--sky-override-text-editor-label-font-size, var(--sky-font-size-input-label));font-style:var(--sky-font-style-input-label);font-weight:var(--sky-override-text-editor-label-font-weight, var(--sky-font-style-input-label));letter-spacing:var(--sky-font-letter_spacing-input-label);line-height:var(--sky-override-text-editor-label-line-height, var(--sky-font-line_height-input-label));margin-bottom:var(--sky-override-text-editor-label-margin-bottom, 0)}.sky-text-editor .sky-text-editor-wrapper{display:flex;flex-wrap:wrap;background-color:var(--sky-override-text-editor-background-color);width:100%;height:300px;padding:var(--sky-override-text-editor-wrapper-padding, var(--sky-comp-text_editor-space-inset-top) var(--sky-comp-text_editor-space-inset-right) var(--sky-comp-text_editor-space-inset-bottom) var(--sky-comp-text_editor-space-inset-left));font-size:1.2rem;border-bottom-left-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));border-bottom-right-radius:var(--sky-override-text-editor-border-radius, var(--sky-border-radius-s));border-top:none;border-right:var(--sky-override-text-editor-border, none);border-bottom:var(--sky-override-text-editor-border, none);border-left:var(--sky-override-text-editor-border, none);box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-base) var(--sky-color-border-input-base));overflow-y:auto;outline:none}.sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:var(--sky-override-text-editor-wrapper-background-color-disabled, var(--sky-color-background-input-disabled));box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-disabled) var(--sky-color-border-input-disabled))}.sky-text-editor.sky-text-editor-invalid .sky-text-editor-wrapper{box-shadow:var(--sky-override-text-editor-box-shadow-error, inset 0 0 0 var(--sky-border-width-input-error) var(--sky-color-border-input-error));border:var(--sky-override-text-editor-border-error, none);outline:none}.sky-text-editor.sky-text-editor-invalid .sky-text-editor-label-wrapper{color:var(--sky-override-text-editor-label-color-invalid, var(--sky-color-text-danger))}.sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-wrapper{box-shadow:var(--sky-override-text-editor-box-shadow-focused, inset 0 0 0 var(--sky-border-width-input-focus) var(--sky-color-border-input-focus));border:var(--sky-override-text-editor-border-focused, none);outline:none}.sky-text-editor.sky-text-editor-wrapper-focused .sky-text-editor-label-wrapper{color:var(--sky-override-text-editor-label-color-focused, var(--sky-color-text-action))}.sky-text-editor:not(.sky-text-editor-wrapper-focused) .sky-text-editor-wrapper:hover:not(:active){box-shadow:var(--sky-override-text-editor-box-shadow, inset 0 0 0 var(--sky-border-width-input-hover) var(--sky-color-border-input-hover))}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-container{background-color:var(--sky-override-text-editor-toolbar-background-color)!important}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:var(--sky-override-text-editor-toolbar-section-padding, var(--sky-comp-toolbar-space-inset-top) var(--sky-comp-input-value-space-inset-right) var(--sky-comp-toolbar-space-inset-bottom) var(--sky-comp-input-value-space-inset-left))!important;border-top:var(--sky-override-text-editor-toolbar-border, none)!important}.sky-text-editor .sky-text-editor-toolbar sky-toolbar-section:not(:last-of-type) .sky-toolbar-section{padding-bottom:var(--sky-override-text-editor-top-toolbar-bottom-padding, var(--sky-comp-toolbar-space-inset-bottom))!important;border-top:none!important}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:var(--sky-override-text-editor-toolbar-border, none);border-right:var(--sky-override-text-editor-toolbar-border, none)}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:var(--sky-override-text-editor-toolbar-item-spacing, 0 var(--sky-space-gap-action_group-m) 0 0)!important}.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-text-editor-hint-text{margin-top:var(--sky-override-text-editor-hint-text-space, var(--sky-space-gap-stacked_supplemental-s))}.sky-theme-modern .sky-text-editor .sky-text-editor-label-wrapper:not(:empty){transition:border-color .15s,box-shadow .15s,color .15s}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper{transition:border-color .15s,box-shadow .15s,color .15s}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { autofocus: [{\n type: Input\n }], disabled: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], fontList: [{\n type: Input\n }], fontSizeList: [{\n type: Input\n }], helpPopoverContent: [{\n type: Input\n }], helpPopoverTitle: [{\n type: Input\n }], hintText: [{\n type: Input\n }], id: [{\n type: Input\n }], initialStyleState: [{\n type: Input\n }], labelText: [{\n type: Input\n }], menus: [{\n type: Input\n }], mergeFields: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], stacked: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }, {\n type: HostBinding,\n args: ['class.sky-form-field-stacked']\n }], toolbarActions: [{\n type: Input\n }], linkWindowOptions: [{\n type: Input\n }], helpKey: [{\n type: Input\n }], iframeRef: [{\n type: ViewChild,\n args: ['iframe']\n }], inputTemplateRef: [{\n type: ViewChild,\n args: ['inputTemplateRef', {\n read: TemplateRef,\n static: true,\n }]\n }], formControlClass: [{\n type: HostBinding,\n args: ['class.sky-form-control']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9FLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0Qix5QkFBeUIsR0FDMUIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0s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QjtzQkFEeEIsS0FBSztnQkFRQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBUUMsUUFBUTtzQkFEZCxLQUFLO2dCQVFLLEVBQUU7c0JBRFosS0FBSztnQkFhSyxpQkFBaUI7c0JBRDNCLEtBQUs7Z0JBb0JLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBZUssS0FBSztzQkFEZixLQUFLO2dCQWFLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBYUssV0FBVztzQkFEckIsS0FBSztnQkFxQkMsT0FBTztzQkFGYixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFOztzQkFDckMsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBUWhDLGNBQWM7c0JBRHhCLEtBQUs7Z0JBZ0JLLGlCQUFpQjtzQkFEM0IsS0FBSztnQkFpQkMsT0FBTztzQkFEYixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsU0FBUzt1QkFBQyxRQUFRO2dCQXNEWixnQkFBZ0I7c0JBSnRCLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUU7d0JBQzdCLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFNTSxnQkFBZ0I7c0JBRHRCLFdBQVc7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lDb3JlQWRhcHRlclNlcnZpY2UsIFNreUlkTW9kdWxlLCBTa3lJZFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCxcbiAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgU2t5SW5wdXRCb3hIb3N0U2VydmljZSxcbiAgU2t5UmVxdWlyZWRTdGF0ZURpcmVjdGl2ZSxcbn0gZnJvbSAnQHNreXV4L2Zvcm1zJztcbmltcG9ydCB7IFNreUhlbHBJbmxpbmVNb2R1bGUgfSBmcm9tICdAc2t5dXgvaGVscC1pbmxpbmUnO1xuaW1wb3J0IHsgU2t5VG9vbGJhck1vZHVsZSB9IGZyb20gJ0Bza3l1eC9sYXlvdXQnO1xuaW1wb3J0IHsgU2t5VGhlbWVNb2R1bGUgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVRleHRFZGl0b3JSZXNvdXJjZXNNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQvc2t5LXRleHQtZWRpdG9yLXJlc291cmNlcy5tb2R1bGUnO1xuXG5pbXBvcnQgeyBGT05UX0xJU1RfREVGQVVMVFMgfSBmcm9tICcuL2RlZmF1bHRzL2ZvbnQtbGlzdC1kZWZhdWx0cyc7XG5pbXBvcnQgeyBGT05UX1NJWkVfTElTVF9ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvZm9udC1zaXplLWxpc3QtZGVmYXVsdHMnO1xuaW1wb3J0IHsgTElOS19XSU5ET1dfT1BUSU9OU19ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvbGluay13aW5kb3ctb3B0aW9ucy1kZWZhdWx0cyc7XG5pbXBvcnQgeyBNRU5VX0RFRkFVTFRTIH0gZnJvbSAnLi9kZWZhdWx0cy9tZW51LWRlZmF1bHRzJztcbmltcG9ydCB7IFNUWUxFX1NUQVRFX0RFRkFVTFRTIH0gZnJvbSAnLi9kZWZhdWx0cy9zdHlsZS1zdGF0ZS1kZWZhdWx0cyc7XG5pbXBvcnQgeyBUT09MQkFSX0FDVElPTl9ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvdG9vbGJhci1hY3Rpb24tZGVmYXVsdHMnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lbnViYXJDb21wb25lbnQgfSBmcm9tICcuL21lbnViYXIvdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRTYW5pdGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LXNhbml0aXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyL3RleHQtZWRpdG9yLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JGb250IH0gZnJvbSAnLi90eXBlcy9mb250LXN0YXRlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JMaW5rV2luZG93T3B0aW9uc1R5cGUgfSBmcm9tICcuL3R5cGVzL2xpbmstd2luZG93LW9wdGlvbnMtdHlwZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yTWVudVR5cGUgfSBmcm9tICcuL3R5cGVzL21lbnUtdHlwZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB9IGZyb20gJy4vdHlwZXMvc3R5bGUtc3RhdGUnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lcmdlRmllbGQgfSBmcm9tICcuL3R5cGVzL3RleHQtZWRpdG9yLW1lcmdlLWZpZWxkJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZSB9IGZyb20gJy4vdHlwZXMvdG9vbGJhci1hY3Rpb24tdHlwZSc7XG5cbi8qKlxuICogVGhlIHRleHQgZWRpdG9yIGNvbXBvbmVudCBsZXRzIHVzZXJzIGZvcm1hdCBhbmQgbWFuaXB1bGF0ZSB0ZXh0LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktdGV4dC1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU2t5VGV4dEVkaXRvclNlcnZpY2UsXG4gICAgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UsXG4gICAgU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogU0tZX0ZPUk1fRVJST1JTX0VOQUJMRUQsIHVzZVZhbHVlOiB0cnVlIH0sXG4gIF0sXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAge1xuICAgICAgZGlyZWN0aXZlOiBTa3lSZXF1aXJlZFN0YXRlRGlyZWN0aXZlLFxuICAgICAgaW5wdXRzOiBbJ3JlcXVpcmVkJ10sXG4gICAgfSxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTa3lIZWxwSW5saW5lTW9kdWxlLFxuICAgIFNreUlkTW9kdWxlLFxuICAgIFNreVRleHRFZGl0b3JNZW51YmFyQ29tcG9uZW50LFxuICAgIFNreVRleHRFZGl0b3JUb29sYmFyQ29tcG9uZW50LFxuICAgIFNreVRoZW1lTW9kdWxlLFxuICAgIFNreVRvb2xiYXJNb2R1bGUsXG4gICAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgICBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3Nvclxue1xuICAvKipcbiAgICogV2hldGhlciB0byBwdXQgZm9jdXMgb24gdGhlIGVkaXRvciBhZnRlciBpdCByZW5kZXJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9mb2N1czogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIHRleHQgZWRpdG9yIG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLlxuICAgKiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLCB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuI2FwcGx5RGlzYWJsZWRTdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9udHMgdG8gaW5jbHVkZSBpbiB0aGUgZm9udCBwaWNrZXIuXG4gICAqIEBkZWZhdWx0IFt7bmFtZTogJ0JsYWNrYmF1ZCBTYW5zJywgdmFsdWU6ICdcIkJsYWNrYmF1ZCBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmJ30sIHtuYW1lOiAnQXJpYWwnLCB2YWx1ZTogJ0FyaWFsJ30sIHtuYW1lOiAnQXJpYWwgQmxhY2snLCB2YWx1ZTogJ1wiQXJpYWwgQmxhY2tcIid9LCB7bmFtZTogJ0NvdXJpZXIgTmV3JywgdmFsdWU6ICdcIkNvdXJpZXIgTmV3XCInfSwge25hbWU6ICdHZW9yZ2lhJywgdmFsdWU6ICdHZW9yZ2lhLCBzZXJpZid9LCB7bmFtZTogJ1RhaG9tYScsIHZhbHVlOiAnVGFob21hLCBHZW5ldmEsIHNhbnMtc2VyaWYnfSwge25hbWU6ICdUaW1lcyBOZXcgUm9tYW4nLCB2YWx1ZTogJ1wiVGltZXMgTmV3IFJvbWFuXCInfSwge25hbWU6ICdUcmVidWNoZXQgTVMnLCB2YWx1ZTogJ1wiVHJlYnVjaGV0IE1TXCIsIHNhbnMtc2VyaWYnfSwge25hbWU6ICdWZXJkYW5hJywgdmFsdWU6ICdWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWYnfV1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZm9udExpc3QodmFsdWU6IFNreVRleHRFZGl0b3JGb250W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZm9udExpc3QgPSB2YWx1ZSB8fCBGT05UX0xJU1RfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvbnRMaXN0KCk6IFNreVRleHRFZGl0b3JGb250W10ge1xuICAgIHJldHVybiB0aGlzLiNfZm9udExpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbnQgc2l6ZXMgdG8gaW5jbHVkZSBpbiB0aGUgZm9udCBzaXplIHBpY2tlci5cbiAgICogQGRlZmF1bHQgWzYsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzNiwgNDhdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZvbnRTaXplTGlzdCh2YWx1ZTogbnVtYmVyW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZm9udFNpemVMaXN0ID0gdmFsdWUgfHwgRk9OVF9TSVpFX0xJU1RfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvbnRTaXplTGlzdCgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19mb250U2l6ZUxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGhlbHAgcG9wb3Zlci4gV2hlbiBzcGVjaWZpZWQgYWxvbmcgd2l0aCBgbGFiZWxUZXh0YCwgYSBbaGVscCBpbmxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9oZWxwLWlubGluZSlcbiAgICogYnV0dG9uIGlzIGFkZGVkIHRvIHRoZSB0ZXh0IGVkaXRvci4gVGhlIGhlbHAgaW5saW5lIGJ1dHRvbiBkaXNwbGF5cyBhIFtwb3BvdmVyXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvcG9wb3ZlcilcbiAgICogd2hlbiBjbGlja2VkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udGVudCBhbmQgb3B0aW9uYWwgdGl0bGUuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGxhYmVsVGV4dGAgaXMgYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBoZWxwIHBvcG92ZXIuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGhlbHBQb3BvdmVyQ29udGVudGAgaXNcbiAgICogYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBbUGVyc2lzdGVudCBpbmxpbmUgaGVscCB0ZXh0XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2Rlc2lnbi9ndWlkZWxpbmVzL3VzZXItYXNzaXN0YW5jZSNpbmxpbmUtaGVscCkgdGhhdCBwcm92aWRlc1xuICAgKiBhZGRpdGlvbmFsIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGludFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBhdHRyaWJ1dGUgZm9yIHRoZSB0ZXh0IGVkaXRvci5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGNvbXBvbmVudCBnZW5lcmF0ZXMgYSByYW5kb20gSUQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNpZCA9IHZhbHVlIHx8IHRoaXMuI2RlZmF1bHRJZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jaWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGluaXRpYWwgc3R5bGVzIGZvciBhbGwgY29udGVudCwgaW5jbHVkaW5nIGJhY2tncm91bmQgY29sb3IsIGZvbnQgc2l6ZSwgYW5kIGxpbmsgc3RhdGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGluaXRpYWxTdHlsZVN0YXRlKHN0YXRlOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIC8vIERvIG5vdCB1cGRhdGUgdGhlIHN0YXRlIGFmdGVyIGluaXRpYWxpemF0aW9uIGhhcyB0YWtlbiBwbGFjZVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNpbml0aWFsaXplZCkge1xuICAgICAgdGhpcy4jX2luaXRpYWxTdHlsZVN0YXRlID0ge1xuICAgICAgICAuLi5TVFlMRV9TVEFURV9ERUZBVUxUUyxcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5pdGlhbFN0eWxlU3RhdGUoKTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUge1xuICAgIHJldHVybiB0aGlzLiNfaW5pdGlhbFN0eWxlU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgdGV4dCBlZGl0b3IncyBsYWJlbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbGFiZWxUZXh0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbGFiZWxUZXh0ID0gdmFsdWU7XG4gICAgdGhpcy4jdXBkYXRlQTExeUF0dHJpYnV0ZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFiZWxUZXh0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19sYWJlbFRleHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1lbnVzIHRvIGluY2x1ZGUgaW4gdGhlIG1lbnUgYmFyLlxuICAgKiBAZGVmYXVsdCBbICdlZGl0JywgJ2Zvcm1hdCcgXVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtZW51cyh2YWx1ZTogU2t5VGV4dEVkaXRvck1lbnVUeXBlW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWVudXMgPSB2YWx1ZSB8fCBNRU5VX0RFRkFVTFRTO1xuICB9XG5cbiAgcHVibGljIGdldCBtZW51cygpOiBTa3lUZXh0RWRpdG9yTWVudVR5cGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19tZW51cztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWVyZ2UgZmllbGRzIHRvIGluY2x1ZGUgaW4gdGhlIG1lcmdlIGZpZWxkIG1lbnUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1lcmdlRmllbGRzKHZhbHVlOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZFtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21lcmdlRmllbGRzID0gdmFsdWUgfHwgW107XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lcmdlRmllbGRzKCk6IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkW10ge1xuICAgIHJldHVybiB0aGlzLiNfbWVyZ2VGaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogUGxhY2Vob2xkZXIgdGV4dCB0byBkaXNwbGF5IHdoZW4gdGhlIHRleHQgZW50cnkgYXJlYSBpcyBlbXB0eS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLiNfcGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuI19wbGFjZWhvbGRlciA9IHZhbHVlIHx8ICcnO1xuICAgICAgaWYgKHRoaXMuI2luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldFBsYWNlaG9sZGVyKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI19wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0ZXh0IGVkaXRvciBpcyBzdGFja2VkIG9uIGFub3RoZXIgZm9ybSBjb21wb25lbnQuIFdoZW4gc3BlY2lmaWVkLFxuICAgKiB0aGUgYXBwcm9wcmlhdGUgdmVydGljYWwgc3BhY2luZyBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSB0ZXh0IGVkaXRvci5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1mb3JtLWZpZWxkLXN0YWNrZWQnKVxuICBwdWJsaWMgc3RhY2tlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9ucyB0byBpbmNsdWRlIGluIHRoZSB0b29sYmFyIGluIHRoZSBzcGVjaWZpZWQgb3JkZXIuXG4gICAqIEBkZWZhdWx0IFsgJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtc2l6ZScsICdmb250LXN0eWxlJywgJ2NvbG9yJywgJ2xpc3QnLCAnbGluayBdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRvb2xiYXJBY3Rpb25zKFxuICAgIHZhbHVlOiBTa3lUZXh0RWRpdG9yVG9vbGJhckFjdGlvblR5cGVbXSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy4jX3Rvb2xiYXJBY3Rpb25zID0gdmFsdWUgfHwgVE9PTEJBUl9BQ1RJT05fREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRvb2xiYXJBY3Rpb25zKCk6IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jX3Rvb2xiYXJBY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgd2luZG93IG9wdGlvbnMgZm9yIGFkZGluZyBhIGh5cGVybGluay5cbiAgICogQGRlZmF1bHQgWyAnbmV3JywgJ2V4aXN0aW5nJyBdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGxpbmtXaW5kb3dPcHRpb25zKFxuICAgIHZhbHVlOiBTa3lUZXh0RWRpdG9yTGlua1dpbmRvd09wdGlvbnNUeXBlW10gfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMuI19saW5rV2luZG93T3B0aW9ucyA9IHZhbHVlID8/IExJTktfV0lORE9XX09QVElPTlNfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpbmtXaW5kb3dPcHRpb25zKCk6IFNreVRleHRFZGl0b3JMaW5rV2luZG93T3B0aW9uc1R5cGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19saW5rV2luZG93T3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGhlbHAga2V5IHRoYXQgaWRlbnRpZmllcyB0aGUgZ2xvYmFsIGhlbHAgY29udGVudCB0byBkaXNwbGF5LiBXaGVuIHNwZWNpZmllZCBhbG9uZyB3aXRoIGBsYWJlbFRleHRgLCBhIFtoZWxwIGlubGluZV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2hlbHAtaW5saW5lKVxuICAgKiBidXR0b24gaXMgcGxhY2VkIGJlc2lkZSB0aGUgdGV4dCBlZGl0b3IgbGFiZWwuIENsaWNraW5nIHRoZSBidXR0b24gaW52b2tlcyBbZ2xvYmFsIGhlbHBdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vZGV2ZWxvcC9nbG9iYWwtaGVscClcbiAgICogYXMgY29uZmlndXJlZCBieSB0aGUgYXBwbGljYXRpb24uIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGxhYmVsVGV4dGAgaXMgYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ2lmcmFtZScpXG4gIHB1YmxpYyBpZnJhbWVSZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5hbCB2YWx1ZSBvZiB0aGUgY29udHJvbC5cbiAgICovXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIC8vIE5vcm1hbGl6ZSB2YWx1ZSBhbmQgc2V0IGFueSBlbXB0eSBzdGF0ZSB0byBhbiBlbXB0eSBzdHJpbmcuXG4gICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZTogc3RyaW5nO1xuICAgIGNvbnN0IHZhbHVlVHJpbW1lZCA9IHZhbHVlPy50cmltKCk7XG5cbiAgICBpZiAoXG4gICAgICAhdmFsdWUgfHxcbiAgICAgIHZhbHVlVHJpbW1lZCA9PT0gJzxwPjwvcD4nIHx8XG4gICAgICB2YWx1ZVRyaW1tZWQgPT09ICc8YnI+JyB8fFxuICAgICAgdmFsdWVUcmltbWVkID09PSAnPHA+PGJyPjwvcD4nXG4gICAgKSB7XG4gICAgICBub3JtYWxpemVkVmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgbm9ybWFsaXplZFZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplZFZhbHVlID0gdGhpcy4jc2FuaXRpemF0aW9uU2VydmljZVxuICAgICAgLnNhbml0aXplKG5vcm1hbGl6ZWRWYWx1ZSlcbiAgICAgIC50cmltKCk7XG5cbiAgICBpZiAodGhpcy4jX3ZhbHVlICE9PSBub3JtYWxpemVkVmFsdWUpIHtcbiAgICAgIHRoaXMuI192YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTtcblxuICAgICAgLy8gVXBkYXRlIGFuZ3VsYXIgZm9ybSBjb250cm9sIGlmIG1vZGVsIGhhcyBiZWVuIG5vcm1hbGl6ZWQuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm5nQ29udHJvbD8uY29udHJvbCAmJlxuICAgICAgICBub3JtYWxpemVkVmFsdWUgIT09IHRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZWRWYWx1ZSwge1xuICAgICAgICAgIGVtaXRNb2RlbFRvVmlld0NoYW5nZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyAjaW5pdElmcmFtZSgpIHdpbGwgZG8gYW5vdGhlciBjaGVjayBsYXRlciB0byBzZWUgaWYgdGhlIGVkaXRvciBzaG91bGRcbiAgICAgIC8vIHJlY2VpdmUgZm9jdXMgaWYgbm90IGluaXRpYWxpemVkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC5cbiAgICAgIHRoaXMuI2NoZWNrQXV0b2ZvY3VzQW5kRm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI192YWx1ZTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0VGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwdWJsaWMgaW5wdXRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGVkaXRvckZvY3VzU3RyZWFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1mb3JtLWNvbnRyb2wnKVxuICBwdWJsaWMgZm9ybUNvbnRyb2xDbGFzcyA9ICEhaW5qZWN0KFNreUlucHV0Qm94SG9zdFNlcnZpY2UsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGVkaXRvckZvY3VzZWQgPSBmYWxzZTtcblxuICAjZGVmYXVsdElkOiBzdHJpbmc7XG4gICNpZDogc3RyaW5nO1xuICAjZm9jdXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAjaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNfZm9udExpc3QgPSBGT05UX0xJU1RfREVGQVVMVFM7XG4gICNfZm9udFNpemVMaXN0ID0gRk9OVF9TSVpFX0xJU1RfREVGQVVMVFM7XG4gICNfbGFiZWxUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNfbWVyZ2VGaWVsZHM6IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkW10gPSBbXTtcbiAgI19tZW51cyA9IE1FTlVfREVGQVVMVFM7XG4gICNfdG9vbGJhckFjdGlvbnM6IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZVtdID0gVE9PTEJBUl9BQ1RJT05fREVGQVVMVFM7XG4gICNfbGlua1dpbmRvd09wdGlvbnMgPSBMSU5LX1dJTkRPV19PUFRJT05TX0RFRkFVTFRTO1xuICAjX2Rpc2FibGVkID0gZmFsc2U7XG4gICNfaW5pdGlhbFN0eWxlU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBTVFlMRV9TVEFURV9ERUZBVUxUUyk7XG4gICNfcGxhY2Vob2xkZXIgPSAnJztcbiAgI192YWx1ZSA9ICc8cD48L3A+JztcblxuICByZWFkb25seSAjYWRhcHRlclNlcnZpY2UgPSBpbmplY3QoU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2NoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcmVhZG9ubHkgI2NvcmVBZGFwdGVyU2VydmljZSA9IGluamVjdChTa3lDb3JlQWRhcHRlclNlcnZpY2UpO1xuICByZWFkb25seSAjZWRpdG9yU2VydmljZSA9IGluamVjdChTa3lUZXh0RWRpdG9yU2VydmljZSk7XG4gIHJlYWRvbmx5ICNpZFN2YyA9IGluamVjdChTa3lJZFNlcnZpY2UpO1xuICByZWFkb25seSAjc2FuaXRpemF0aW9uU2VydmljZSA9IGluamVjdChTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZSk7XG4gIHJlYWRvbmx5ICN6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVycm9ySWQgPSB0aGlzLiNpZFN2Yy5nZW5lcmF0ZUlkKCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBuZ0NvbnRyb2wgPSBpbmplY3QoTmdDb250cm9sKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlcXVpcmVkU3RhdGUgPSBpbmplY3QoU2t5UmVxdWlyZWRTdGF0ZURpcmVjdGl2ZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy4jaWQgPSB0aGlzLiNkZWZhdWx0SWQgPSB0aGlzLiNpZFN2Yy5nZW5lcmF0ZUlkKCk7XG4gICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2luaXRJZnJhbWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5yZW1vdmVPYnNlcnZlcnModGhpcy4jZWRpdG9yU2VydmljZS5lZGl0b3IpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbklmcmFtZUxvYWQoKTogdm9pZCB7XG4gICAgLy8gUmVpbml0aWFsaXplIHRoZSBlZGl0b3IgaWYgaXQgYWxyZWFkeSBleGlzdHMgdG8gY292ZXIgc2l0dWF0aW9ucyB3aGVyZSB0aGUgdGV4dCBlZGl0b3IgbWlnaHQgaGF2ZSBiZWVuIG1vdmVkIGluIHRoZSBET00uXG4gICAgaWYgKHRoaXMuI2VkaXRvclNlcnZpY2UuaXNJbml0aWFsaXplZCkge1xuICAgICAgdGhpcy4jaW5pdElmcmFtZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcblxuICAgIC8vIFVwZGF0ZSBIVE1MIGlmIG5lY2Vzc2FyeS5cbiAgICBpZiAodGhpcy4jaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGNvbnN0IGVkaXRvclZhbHVlID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0RWRpdG9ySW5uZXJIdG1sKCk7XG4gICAgICBpZiAoZWRpdG9yVmFsdWUgIT09IHRoaXMuI192YWx1ZSkge1xuICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRFZGl0b3JJbm5lckh0bWwodGhpcy4jX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI19vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNfb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gICNjaGVja0F1dG9mb2N1c0FuZEZvY3VzKCk6IHZvaWQge1xuICAgIC8vIERvbid0IHNldCBmb2N1cyBvbiB0aGUgZWRpdG9yIGlmIHRoZSBpZnJhbWUgaXNuJ3QgaW5pdGlhbGl6ZWQuXG4gICAgLy8gQXV0b2ZvY3VzIGlzbid0IHRlc3RhYmxlIGluIEZpcmVmb3ggYW5kIElFLlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzICYmIHRoaXMuI2luaXRpYWxpemVkICYmICF0aGlzLiNmb2N1c0luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VkaXRvcigpO1xuICAgICAgdGhpcy4jZm9jdXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgI3VwZGF0ZVN0eWxlKCk6IHZvaWQge1xuICAgIHRoaXMuI19pbml0aWFsU3R5bGVTdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuI19pbml0aWFsU3R5bGVTdGF0ZSxcbiAgICAgIC4uLnRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldFN0eWxlU3RhdGUoKSxcbiAgICB9O1xuICB9XG5cbiAgI2luaXRJZnJhbWUoKTogdm9pZCB7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuaW5pdEVkaXRvcihcbiAgICAgIHRoaXMuaWQsXG4gICAgICAodGhpcy5pZnJhbWVSZWYgYXMgRWxlbWVudFJlZikubmF0aXZlRWxlbWVudCxcbiAgICAgIHRoaXMuaW5pdGlhbFN0eWxlU3RhdGUsXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyLFxuICAgICk7XG5cbiAgICB0aGlzLm5nQ29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuI3VwZGF0ZUExMXlBdHRyaWJ1dGVzKCk7XG5cbiAgICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW4gdGhlIGZpZWxkIHN0YXR1cyBpcyBtb2RpZmllZCBwcm9ncmFtbWF0aWNhbGx5LlxuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmlucHV0TGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIEFuZ3VsYXIgZG9lc24ndCBydW4gY2hhbmdlIGRldGVjdGlvbiBmb3IgY2hhbmdlcyBvcmlnaW5hdGluZyBpbnNpZGUgYW4gaWZyYW1lLFxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIGNhbGwgdGhlIG9uQ2hhbmdlKCkgZXZlbnQgaW5zaWRlIE5nWm9uZSB0byBmb3JjZSBjaGFuZ2UgcHJvcGFnYXRpb24gdG8gY29uc3VtaW5nIGNvbXBvbmVudHMuXG4gICAgICAgIHRoaXMuI3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiN2aWV3VG9Nb2RlbFVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLnNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiN1cGRhdGVTdHlsZSgpO1xuICAgICAgICB0aGlzLmVkaXRvckZvY3VzU3RyZWFtLm5leHQoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmNsaWNrTGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdG9yRm9jdXNTdHJlYW0ubmV4dCgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiNlZGl0b3JTZXJ2aWNlXG4gICAgICAuYmx1ckxpc3RlbmVyKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvLyBBbmd1bGFyIGRvZXNuJ3QgcnVuIGNoYW5nZSBkZXRlY3Rpb24gZm9yIGNoYW5nZXMgb3JpZ2luYXRpbmcgaW5zaWRlIGFuIGlmcmFtZSxcbiAgICAgICAgLy8gc28gd2UgaGF2ZSB0byBydW4gbWFya0ZvckNoZWNrKCkgaW5zaWRlIHRoZSBOZ1pvbmUgdG8gZm9yY2UgY2hhbmdlIHByb3BhZ2F0aW9uIHRvIGNvbnN1bWluZyBjb21wb25lbnRzLlxuICAgICAgICB0aGlzLiN6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jX29uVG91Y2hlZCgpO1xuICAgICAgICAgIHRoaXMuZWRpdG9yRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmNvbW1hbmRDaGFuZ2VMaXN0ZW5lcigpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy4jdXBkYXRlU3R5bGUoKTtcbiAgICAgICAgdGhpcy4jdmlld1RvTW9kZWxVcGRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jZWRpdG9yU2VydmljZVxuICAgICAgLmZvY3VzTGlzdGVuZXIoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIEFuZ3VsYXIgZG9lc24ndCBydW4gY2hhbmdlIGRldGVjdGlvbiBmb3IgY2hhbmdlcyBvcmlnaW5hdGluZyBpbnNpZGUgYW4gaWZyYW1lLFxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIHJ1biBtYXJrRm9yQ2hlY2soKSBpbnNpZGUgdGhlIE5nWm9uZSB0byBmb3JjZSBjaGFuZ2UgcHJvcGFnYXRpb24gdG8gY29uc3VtaW5nIGNvbXBvbmVudHMuXG4gICAgICAgIHRoaXMuI3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVkaXRvckZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0RWRpdG9ySW5uZXJIdG1sKHRoaXMuI192YWx1ZSk7XG4gICAgdGhpcy4jdXBkYXRlQTExeUF0dHJpYnV0ZXMoKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5mb2N1c0VkaXRvcigpO1xuICAgIH1cblxuICAgIHRoaXMuI2FwcGx5RGlzYWJsZWRTdGF0ZSgpO1xuXG4gICAgdGhpcy4jaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMuI2ZvY3VzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuI2NoZWNrQXV0b2ZvY3VzQW5kRm9jdXMoKTtcbiAgfVxuXG4gICN1cGRhdGVBMTF5QXR0cmlidXRlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jZWRpdG9yU2VydmljZS5pc0luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRMYWJlbEF0dHJpYnV0ZSh0aGlzLmxhYmVsVGV4dCk7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRFcnJvckF0dHJpYnV0ZXMoXG4gICAgICAgIHRoaXMubGFiZWxUZXh0ID8gdGhpcy5lcnJvcklkIDogJycsXG4gICAgICAgIHRoaXMubmdDb250cm9sLmVycm9ycyxcbiAgICAgICk7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRSZXF1aXJlZEF0dHJpYnV0ZShcbiAgICAgICAgdGhpcy5yZXF1aXJlZFN0YXRlLmlzUmVxdWlyZWQoKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgI3ZpZXdUb01vZGVsVXBkYXRlKGVtaXRDaGFuZ2UgPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldEVkaXRvcklubmVySHRtbCgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGVtaXRDaGFuZ2UpIHtcbiAgICAgIHRoaXMuI19vbkNoYW5nZSh0aGlzLiNfdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gICNhcHBseURpc2FibGVkU3RhdGUoKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIGZvY3VzYWJsZUNoaWxkcmVuIGluc2lkZSB0aGUgaWZyYW1lLlxuICAgIGxldCBmb2N1c2FibGVDaGlsZHJlbjogSFRNTEVsZW1lbnRbXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmlmcmFtZVJlZj8ubmF0aXZlRWxlbWVudC5jb250ZW50RG9jdW1lbnQ/LmJvZHkpIHtcbiAgICAgIGZvY3VzYWJsZUNoaWxkcmVuID0gdGhpcy4jY29yZUFkYXB0ZXJTZXJ2aWNlLmdldEZvY3VzYWJsZUNoaWxkcmVuKFxuICAgICAgICB0aGlzLmlmcmFtZVJlZi5uYXRpdmVFbGVtZW50LmNvbnRlbnREb2N1bWVudC5ib2R5LFxuICAgICAgICB7XG4gICAgICAgICAgaWdub3JlVmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgICBpZ25vcmVUYWJJbmRleDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLiNfZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZGlzYWJsZUVkaXRvcihcbiAgICAgICAgICBmb2N1c2FibGVDaGlsZHJlbixcbiAgICAgICAgICB0aGlzLmlmcmFtZVJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZW5hYmxlRWRpdG9yKFxuICAgICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuLFxuICAgICAgICAgIHRoaXMuaWZyYW1lUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAjX29uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICNfb25DaGFuZ2U6IChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHZhbHVlOiBhbnksXG4gICkgPT4gdm9pZCA9ICgpID0+IHt9O1xufVxuIiwiPGRpdlxuICBjbGFzcz1cInNreS10ZXh0LWVkaXRvclwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnc2t5LXRleHQtZWRpdG9yLWRpc2FibGVkJzogZGlzYWJsZWQsXG4gICAgJ3NreS10ZXh0LWVkaXRvci13cmFwcGVyLWZvY3VzZWQnOiBlZGl0b3JGb2N1c2VkLFxuICAgICdza3ktdGV4dC1lZGl0b3ItaW52YWxpZCc6XG4gICAgICBuZ0NvbnRyb2wuZXJyb3JzICYmIChuZ0NvbnRyb2wudG91Y2hlZCB8fCBuZ0NvbnRyb2wuZGlydHkpXG4gIH1cIlxuPlxuICA8ZGl2IGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWxhYmVsLXdyYXBwZXJcIj5cbiAgICBAaWYgKGxhYmVsVGV4dCkge1xuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwic2t5LWNvbnRyb2wtbGFiZWxcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3NreS1jb250cm9sLWxhYmVsLXJlcXVpcmVkJzogcmVxdWlyZWRTdGF0ZS5pc1JlcXVpcmVkKClcbiAgICAgICAgfVwiXG4gICAgICAgID57eyBsYWJlbFRleHQgfX08L2xhYmVsXG4gICAgICA+XG4gICAgICBAaWYgKGhlbHBQb3BvdmVyQ29udGVudCB8fCBoZWxwS2V5KSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2t5LWNvbnRyb2wtaGVscC1jb250YWluZXJcIj5cbiAgICAgICAgICA8c2t5LWhlbHAtaW5saW5lXG4gICAgICAgICAgICBbaGVscEtleV09XCJoZWxwS2V5XCJcbiAgICAgICAgICAgIFtsYWJlbFRleHRdPVwibGFiZWxUZXh0XCJcbiAgICAgICAgICAgIFtwb3BvdmVyQ29udGVudF09XCJoZWxwUG9wb3ZlckNvbnRlbnRcIlxuICAgICAgICAgICAgW3BvcG92ZXJUaXRsZV09XCJoZWxwUG9wb3ZlclRpdGxlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbiAgQGlmIChcbiAgICAobWVudXMgJiYgbWVudXMubGVuZ3RoKSA+IDAgfHwgKHRvb2xiYXJBY3Rpb25zICYmIHRvb2xiYXJBY3Rpb25zLmxlbmd0aCA+IDApXG4gICkge1xuICAgIDxza3ktdG9vbGJhciBjbGFzcz1cInNreS10ZXh0LWVkaXRvci10b29sYmFyXCI+XG4gICAgICBAaWYgKG1lbnVzICYmIG1lbnVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPHNreS10b29sYmFyLXNlY3Rpb25cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiVGV4dCBmb3JtYXR0aW5nXCJcbiAgICAgICAgICBjbGFzcz1cIm1lbnViYXJcIlxuICAgICAgICAgIHJvbGU9XCJ0b29sYmFyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxza3ktdGV4dC1lZGl0b3ItbWVudWJhclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtlZGl0b3JGb2N1c1N0cmVhbV09XCJlZGl0b3JGb2N1c1N0cmVhbVwiXG4gICAgICAgICAgICBbbWVudXNdPVwibWVudXNcIlxuICAgICAgICAgICAgW21lcmdlRmllbGRzXT1cIm1lcmdlRmllbGRzXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3NreS10b29sYmFyLXNlY3Rpb24+XG4gICAgICB9XG4gICAgICBAaWYgKHRvb2xiYXJBY3Rpb25zICYmIHRvb2xiYXJBY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPHNreS10b29sYmFyLXNlY3Rpb25cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiVGV4dCBmb3JtYXR0aW5nXCJcbiAgICAgICAgICBjbGFzcz1cInRvb2xiYXJcIlxuICAgICAgICAgIHJvbGU9XCJ0b29sYmFyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxza3ktdGV4dC1lZGl0b3ItdG9vbGJhclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtlZGl0b3JGb2N1c1N0cmVhbV09XCJlZGl0b3JGb2N1c1N0cmVhbVwiXG4gICAgICAgICAgICBbZm9udExpc3RdPVwiZm9udExpc3RcIlxuICAgICAgICAgICAgW2ZvbnRTaXplTGlzdF09XCJmb250U2l6ZUxpc3RcIlxuICAgICAgICAgICAgW2xpbmtXaW5kb3dPcHRpb25zXT1cImxpbmtXaW5kb3dPcHRpb25zXCJcbiAgICAgICAgICAgIFt0b29sYmFyQWN0aW9uc109XCJ0b29sYmFyQWN0aW9uc1wiXG4gICAgICAgICAgICBbc3R5bGVTdGF0ZV09XCJpbml0aWFsU3R5bGVTdGF0ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9za3ktdG9vbGJhci1zZWN0aW9uPlxuICAgICAgfVxuICAgIDwvc2t5LXRvb2xiYXI+XG4gIH1cbiAgPGlmcmFtZVxuICAgICNpZnJhbWVcbiAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci13cmFwcGVyXCJcbiAgICBzcmM9XCJhYm91dDpibGFua1wiXG4gICAgYWxsb3c9XCJjbGlwYm9hcmQtcmVhZCAqOyBjbGlwYm9hcmQtd3JpdGUgKlwiXG4gICAgW2F0dHIudGl0bGVdPVwiXG4gICAgICBsYWJlbFRleHQgfHwgKCdza3l1eF90ZXh0X2VkaXRvcl9pZnJhbWVfdGl0bGVfZGVmYXVsdCcgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgXCJcbiAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImhpbnRUZXh0ID8gaGludFRleHRFbC5pZCA6IHVuZGVmaW5lZFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3NreS10ZXh0LWVkaXRvci13cmFwcGVyLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICB9XCJcbiAgICAobG9hZCk9XCJvbklmcmFtZUxvYWQoKVwiXG4gID5cbiAgPC9pZnJhbWU+XG48L2Rpdj5cbjxkaXZcbiAgI2hpbnRUZXh0RWw9XCJza3lJZFwiXG4gIHNreUlkXG4gIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWhpbnQtdGV4dFwiXG4gIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAnc2t5LWZvbnQtZGVlbXBoYXNpemVkJzogJ2RlZmF1bHQnLFxuICAgICdza3ktZm9udC1oaW50LXRleHQtcyc6ICdtb2Rlcm4nXG4gIH1cIlxuPlxuICB7eyBoaW50VGV4dCB9fVxuPC9kaXY+XG48c2t5LWZvcm0tZXJyb3JzXG4gIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWVycm9yc1wiXG4gIFtpZF09XCJlcnJvcklkXCJcbiAgW2Vycm9yc109XCJuZ0NvbnRyb2wuZXJyb3JzXCJcbiAgW2xhYmVsVGV4dF09XCJsYWJlbFRleHRcIlxuICBbdG91Y2hlZF09XCJuZ0NvbnRyb2wudG91Y2hlZFwiXG4gIFtkaXJ0eV09XCJuZ0NvbnRyb2wuZGlydHlcIlxuPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktZm9ybS1lcnJvclwiIC8+XG48L3NreS1mb3JtLWVycm9ycz5cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { SkyFormErrorModule } from '@skyux/forms';\nimport { SkyTextEditorComponent } from './text-editor.component';\nimport * as i0 from \"@angular/core\";\nexport class SkyTextEditorModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorModule, imports: [SkyTextEditorComponent], exports: [SkyTextEditorComponent, SkyFormErrorModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorModule, imports: [SkyTextEditorComponent, SkyFormErrorModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyTextEditorModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [SkyTextEditorComponent],\n exports: [SkyTextEditorComponent, SkyFormErrorModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBTWpFLE1BQU0sT0FBTyxtQkFBbUI7OEdBQW5CLG1CQUFtQjsrR0FBbkIsbUJBQW1CLFlBSHBCLHNCQUFzQixhQUN0QixzQkFBc0IsRUFBRSxrQkFBa0I7K0dBRXpDLG1CQUFtQixZQUhwQixzQkFBc0IsRUFDRSxrQkFBa0I7OzJGQUV6QyxtQkFBbUI7a0JBSi9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLGtCQUFrQixDQUFDO2lCQUN0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lGb3JtRXJyb3JNb2R1bGUgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi90ZXh0LWVkaXRvci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbU2t5VGV4dEVkaXRvckNvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtTa3lUZXh0RWRpdG9yQ29tcG9uZW50LCBTa3lGb3JtRXJyb3JNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yTW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5dXgtdGV4dC1lZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL3NreXV4LXRleHQtZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i2.SkyTextSanitizationService","i1.SkyTextEditorSelectionService","i2.SkyTextEditorService","take","i1","i3","i4","i2","i5","i6","i7"],"mappings":"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"}
|