@skyux/text-editor 13.11.4 → 13.12.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.3.15\", ngImport: i0, type: SkyTextSanitizationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTextSanitizationService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTextSanitizationService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1zYW5pdGl6YXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3Ivc2VydmljZXMvdGV4dC1zYW5pdGl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sZUFBZSxNQUFNLFdBQVcsQ0FBQzs7QUFFeEMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRTFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFhLEVBQUUsRUFBRTtJQUM3RCxrREFBa0Q7SUFDbEQseURBQXlEO0lBQ3pELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDbEQsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUg7Ozs7O0dBS0c7QUFJSCxNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDLGtCQUFrQixHQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFMUM7O09BRUc7SUFDSSxRQUFRLENBQUMsVUFBa0I7UUFDaEMsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUNwQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQVZVLDBCQUEwQjttSEFBMUIsMEJBQTBCLGNBRnpCLE1BQU07OzRGQUVQLDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCBjcmVhdGVET01QdXJpZnkgZnJvbSAnZG9tcHVyaWZ5JztcblxuY29uc3QgZG9tUHVyaWZ5ID0gY3JlYXRlRE9NUHVyaWZ5KHdpbmRvdyk7XG5cbmRvbVB1cmlmeS5hZGRIb29rKCdhZnRlclNhbml0aXplQXR0cmlidXRlcycsIChub2RlOiBFbGVtZW50KSA9PiB7XG4gIC8vIFNldCBhbGwgZWxlbWVudHMgb3duaW5nIHRhcmdldCB0byB0YXJnZXQ9X2JsYW5rXG4gIC8vIHNvIHdlIG9ubHkgYWxsb3cgdGhlIHRhcmdldCBhdHRyaWJ1dGUgd2l0aCB0aGF0IHZhbHVlLlxuICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZSgncmVsJywgJ25vb3BlbmVyIG5vcmVmZXJyZXInKTtcbiAgfVxufSk7XG5cbi8qKlxuICogVGhlIGBTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZWAgdXNlciB0aGUgYERPTVB1cmlmeWAgbGlicmFyeSB0byBzYW5pdGl6ZSBzdHJpbmdzIGZvciB1c2VcbiAqIGluIHRoZSBET00uIGBET01QdXJpZnlgIGFsbG93cyBtb3JlIGN1c3RvbWl6YXRpb24gdGhhbiBBbmd1bGFyJ3MgaW50ZXJuYWwgYERvbVNhbml0aXplcmAgc28gd2VcbiAqIGNhbiBwcmVzZXJ2ZSBgPHN0eWxlPmAgdGFncyBhbmQgYWxsb3cgYHRhcmdldGAgYXR0cmlidXRlcyBmb3IgbmV3IHRhYiBsaW5rcy5cbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5VGV4dFNhbml0aXphdGlvblNlcnZpY2Uge1xuICAjYWxsb3dlZEF0dHJpYnV0ZXM6IHN0cmluZ1tdID0gWyd0YXJnZXQnXTtcblxuICAvKipcbiAgICogUmV0dXJucyBhIHNhbml0aXplZCBzdHJpbmcsIGFsbG93aW5nIHRhcmdldCBhdHRyaWJ1dGUgZm9yIG5ldyB0YWIgbGlua3MuXG4gICAqL1xuICBwdWJsaWMgc2FuaXRpemUoaHRtbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZG9tUHVyaWZ5LnNhbml0aXplKGh0bWxTdHJpbmcsIHtcbiAgICAgIEFERF9BVFRSOiB0aGlzLiNhbGxvd2VkQXR0cmlidXRlcyxcbiAgICB9KTtcbiAgfVxufVxuIl19","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.15\", 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.15\", 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.15\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LWRpc3BsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy9yaWNoLXRleHQtZGlzcGxheS9yaWNoLXRleHQtZGlzcGxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3JpY2gtdGV4dC1kaXNwbGF5L3JpY2gtdGV4dC1kaXNwbGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBVWpELE1BQU0sT0FBTywyQkFBMkI7SUFDdEM7O09BRUc7SUFDSCxJQUNXLFFBQVEsQ0FBQyxLQUF5QjtRQUMzQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCwwQkFBMEI7WUFDMUIsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztnQkFFMUIsb0RBQW9EO2dCQUNwRCx3REFBd0Q7Z0JBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RSxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUlELFVBQVUsQ0FBTTtJQUVoQixVQUFVLENBQWU7SUFDekIsb0JBQW9CLENBQTZCO0lBRWpELFlBQ0UsU0FBdUIsRUFDdkIsbUJBQStDO1FBVDFDLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBRXBDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFTZCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7SUFDbEQsQ0FBQzsrR0FuQ1UsMkJBQTJCO21HQUEzQiwyQkFBMkIsb0hDVnhDLG9GQUNBOzs0RkRTYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBRXJCLEtBQUs7O3NCQU1oQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBTa3lUZXh0U2FuaXRpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL3RleHQtZWRpdG9yL3NlcnZpY2VzL3RleHQtc2FuaXRpemF0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktcmljaC10ZXh0LWRpc3BsYXknLFxuICB0ZW1wbGF0ZVVybDogJy4vcmljaC10ZXh0LWRpc3BsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UmljaFRleHREaXNwbGF5Q29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSByaWNoIHRleHQgdG8gZGlzcGxheS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcmljaFRleHQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgY2xlYW5lZCA9IHRoaXMuI3Nhbml0aXphdGlvblNlcnZpY2Uuc2FuaXRpemUodmFsdWUpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChjbGVhbmVkICE9PSB0aGlzLiNfcmljaFRleHQpIHtcbiAgICAgICAgdGhpcy4jX3JpY2hUZXh0ID0gY2xlYW5lZDtcblxuICAgICAgICAvLyBUZXh0IGhhcyBhbHJlYWR5IGJlZW4gc2FuaXRpemVkIHdpdGggRE9NUHVyaWZpZXIuXG4gICAgICAgIC8vIFRlbGwgQW5ndWxhciB0byBieXBhc3MgaXRzIG93biBpbnRlcm5hbCBzYW5pdGl6YXRpb24uXG4gICAgICAgIHRoaXMuc2FuaXRpemVkVGV4dCA9IHRoaXMuI3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChjbGVhbmVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jX3JpY2hUZXh0ID0gJyc7XG4gICAgICB0aGlzLnNhbml0aXplZFRleHQgPSAnJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2FuaXRpemVkVGV4dDogU2FmZUh0bWwgPSAnJztcblxuICAjX3JpY2hUZXh0ID0gJyc7XG5cbiAgI3Nhbml0aXplcjogRG9tU2FuaXRpemVyO1xuICAjc2FuaXRpemF0aW9uU2VydmljZTogU2t5VGV4dFNhbml0aXphdGlvblNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgc2FuaXRpemF0aW9uU2VydmljZTogU2t5VGV4dFNhbml0aXphdGlvblNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuI3Nhbml0aXplciA9IHNhbml0aXplcjtcbiAgICB0aGlzLiNzYW5pdGl6YXRpb25TZXJ2aWNlID0gc2FuaXRpemF0aW9uU2VydmljZTtcbiAgfVxufVxuIiwiPHNwYW4gY2xhc3M9XCJza3ktcmljaC10ZXh0LWRpc3BsYXktdGV4dFwiIFtpbm5lckhUTUxdPVwic2FuaXRpemVkVGV4dFwiPjwvc3Bhbj5cbiJdfQ==","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.15\", ngImport: i0, type: SkyRichTextDisplayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyRichTextDisplayModule, declarations: [SkyRichTextDisplayComponent], exports: [SkyRichTextDisplayComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyRichTextDisplayModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyRichTextDisplayModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [SkyRichTextDisplayComponent],\n declarations: [SkyRichTextDisplayComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LWRpc3BsYXkubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy9yaWNoLXRleHQtZGlzcGxheS9yaWNoLXRleHQtZGlzcGxheS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFNNUUsTUFBTSxPQUFPLHdCQUF3QjsrR0FBeEIsd0JBQXdCO2dIQUF4Qix3QkFBd0IsaUJBRnBCLDJCQUEyQixhQURoQywyQkFBMkI7Z0hBRzFCLHdCQUF3Qjs7NEZBQXhCLHdCQUF3QjtrQkFKcEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztvQkFDdEMsWUFBWSxFQUFFLENBQUMsMkJBQTJCLENBQUM7aUJBQzVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5UmljaFRleHREaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi9yaWNoLXRleHQtZGlzcGxheS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbU2t5UmljaFRleHREaXNwbGF5Q29tcG9uZW50XSxcbiAgZGVjbGFyYXRpb25zOiBbU2t5UmljaFRleHREaXNwbGF5Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UmljaFRleHREaXNwbGF5TW9kdWxlIHt9XG4iXX0=","/* 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.15\", ngImport: i0, type: SkyTextEditorResourcesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTextEditorResourcesModule, exports: [SkyI18nModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTextEditorResourcesModule, imports: [SkyI18nModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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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QTRCLFlBRjdCLGFBQWE7Z0hBRVosNEJBQTRCLFlBRjdCLGFBQWE7OzRGQUVaLDRCQUE0QjtrQkFIeEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbi8qKlxuICogTk9USUNFOiBETyBOT1QgTU9ESUZZIFRISVMgRklMRSFcbiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgd2VyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieVxuICogdGhlICduZyBnZW5lcmF0ZSBAc2t5dXgvaTE4bjpsaWItcmVzb3VyY2VzLW1vZHVsZSBsaWIvbW9kdWxlcy9zaGFyZWQvc2t5LXRleHQtZWRpdG9yJyBzY2hlbWF0aWMuXG4gKiBUbyB1cGRhdGUgdGhpcyBmaWxlLCBzaW1wbHkgcmVydW4gdGhlIGNvbW1hbmQuXG4gKi9cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTa3lJMThuTW9kdWxlLFxuICBTa3lMaWJSZXNvdXJjZXMsXG4gIFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG59IGZyb20gJ0Bza3l1eC9pMThuJztcblxuY29uc3QgUkVTT1VSQ0VTOiBSZWNvcmQ8c3RyaW5nLCBTa3lMaWJSZXNvdXJjZXM+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.15\", ngImport: i0, type: SkyTextEditorSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTextEditorSelectionService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTextEditorSelectionService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3Itc2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3NlcnZpY2VzL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOztHQUVHO0FBRUgsTUFBTSxPQUFPLDZCQUE2QjtJQUNqQyxpQkFBaUIsQ0FDdEIsVUFBb0IsRUFDcEIsT0FBb0I7UUFFcEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsQ0FBQztRQUN0RSwwQkFBMEI7UUFDMUIsT0FBTyxDQUFDLENBQUMsQ0FDUCxZQUFZO1lBQ1osQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztnQkFDN0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxVQUFvQjtRQUM3QyxPQUFPLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU0sZ0NBQWdDLENBQ3JDLFVBQW9CO1FBRXBCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLFVBQTBCLENBQUM7UUFDL0IsMEJBQTBCO1FBQzFCLElBQ0UsU0FBUztZQUNULFNBQVMsQ0FBQyxVQUFVO1lBQ3BCLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEVBQy9DLENBQUM7WUFDRCxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBa0MsQ0FBQztZQUN4RSxVQUFVO2dCQUNSLFVBQVUsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDdEUsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVNLHdCQUF3QixDQUM3QixVQUFvQixFQUNwQixRQUFnQjtRQUVoQiwwQkFBMEI7UUFDMUIsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BDLDBCQUEwQjtZQUMxQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDakQsT0FBTyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVNLGFBQWEsQ0FDbEIsVUFBb0IsRUFDcEIsUUFBZ0IsRUFDaEIsT0FBb0I7UUFFcEIsMEJBQTBCO1FBQzFCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWiwwQkFBMEI7WUFDMUIsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDcEMsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixDQUFDO2lCQUFNLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNuQyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RDLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN2QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xDLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOytHQS9FVSw2QkFBNkI7bUhBQTdCLDZCQUE2Qjs7NEZBQTdCLDZCQUE2QjtrQkFEekMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgcHVibGljIGlzRWxlbWVudFNlbGVjdGVkKFxuICAgIGRvY3VtZW50RWw6IERvY3VtZW50LFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oZG9jdW1lbnRFbCk/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.15\", ngImport: i0, type: SkyTextEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTextEditorService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTextEditorService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3Ivc2VydmljZXMvdGV4dC1lZGl0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0zQzs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFDL0I7O09BRUc7SUFDSCxJQUFXLE1BQU0sQ0FBQyxLQUFvQjtRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU8sQ0FBNEI7SUFFbkM7O09BRUc7SUFDSSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSx1QkFBdUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDO0lBQy9DLENBQUM7K0dBOURVLG9CQUFvQjttSEFBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEVkaXRvclNldHRpbmcgfSBmcm9tICcuLi90eXBlcy9lZGl0b3Itc2V0dGluZyc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yU2VydmljZSB7XG4gIC8qKlxuICAgKiBBIGRpY3Rpb25hcnkgcmVwcmVzZW50aW5nIGFsbCBhY3RpdmUgdGV4dCBlZGl0b3JzIGFuZCB0aGVpciBzZXR0aW5ncy5cbiAgICovXG4gIHB1YmxpYyBzZXQgZWRpdG9yKHZhbHVlOiBFZGl0b3JTZXR0aW5nKSB7XG4gICAgdGhpcy4jZWRpdG9yID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVkaXRvcigpOiBFZGl0b3JTZXR0aW5nIHtcbiAgICBpZiAoIXRoaXMuI2VkaXRvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFZGl0b3IgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNlZGl0b3I7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2VkaXRvciAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgI2VkaXRvcjogRWRpdG9yU2V0dGluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYmx1ciBvYnNlcnZhYmxlIGZyb20gdGhlIGVkaXRvciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGlkLlxuICAgKi9cbiAgcHVibGljIGJsdXJMaXN0ZW5lcigpOiBPYnNlcnZhYmxlPHVua25vd24+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(/&nbsp;/, String.fromCharCode(160))\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&amp;/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.15\", 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.15\", ngImport: i0, type: SkyTextEditorAdapterService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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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dUJBQXVCLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3pFLHVCQUF1QixDQUFDLFlBQVksQ0FDbEMsZUFBZSxFQUNmLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzVCLENBQUM7UUFDRiwwQkFBMEI7UUFDMUIsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7Z0JBQzVDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQzVDLGlCQUFpQixFQUNqQixRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUM1QixDQUFDO0lBQ0osQ0FBQzsrR0FqbkJVLDJCQUEyQjttSEFBM0IsMkJBQTJCOzs0RkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5QXBwV2luZG93UmVmIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTVFlMRV9TVEFURV9ERUZBVUxUUyB9IGZyb20gJy4uL2RlZmF1bHRzL3N0eWxlLXN0YXRlLWRlZmF1bHRzJztcbmltcG9ydCB7IEVkaXRvckNvbW1hbmQgfSBmcm9tICcuLi90eXBlcy9lZGl0b3ItY29tbWFuZCc7XG5pbXBvcnQgeyBFZGl0b3JTZXR0aW5nIH0gZnJvbSAnLi4vdHlwZXMvZWRpdG9yLXNldHRpbmcnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUgfSBmcm9tICcuLi90eXBlcy9zdHlsZS1zdGF0ZSc7XG5pbXBvcnQgeyBVcmxNb2RhbFJlc3VsdCB9IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwtcmVzdWx0JztcbmltcG9ydCB7IFVybFRhcmdldCB9IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtdGFyZ2V0JztcblxuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi90ZXh0LWVkaXRvci5zZXJ2aWNlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSB7XG4gIHJlYWRvbmx5ICNyZXNvdXJjZVN2YyA9IGluamVjdChTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlKTtcbiAgI3NlbGVjdGlvblNlcnZpY2U6IFNreVRleHRFZGl0b3JTZWxlY3Rpb25TZXJ2aWNlO1xuICAjdGV4dEVkaXRvclNlcnZpY2U6IFNreVRleHRFZGl0b3JTZXJ2aWNlO1xuICAjd2luZG93UmVmOiBTa3lBcHBXaW5kb3dSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2VsZWN0aW9uU2VydmljZTogU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UsXG4gICAgdGV4dEVkaXRvclNlcnZpY2U6IFNreVRleHRFZGl0b3JTZXJ2aWNlLFxuICAgIHdpbmRvd1NlcnZpY2U6IFNreUFwcFdpbmRvd1JlZixcbiAgKSB7XG4gICAgdGhpcy4jc2VsZWN0aW9uU2VydmljZSA9IHNlbGVjdGlvblNlcnZpY2U7XG4gICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UgPSB0ZXh0RWRpdG9yU2VydmljZTtcbiAgICB0aGlzLiN3aW5kb3dSZWYgPSB3aW5kb3dTZXJ2aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZXh0IGVkaXRvciBpbnNpZGUgdGhlIHN1cHBsaWVkIGlmcmFtZSBlbGVtZW50LlxuICAgKi9cbiAgcHVibGljIGluaXRFZGl0b3IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBpZnJhbWVFbGVtZW50OiBIVE1MSUZyYW1lRWxlbWVudCxcbiAgICBzdHlsZVN0YXRlOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSxcbiAgICBwbGFjZWhvbGRlcj86IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yID0gdGhpcy4jY3JlYXRlT2JzZXJ2ZXJzKGlmcmFtZUVsZW1lbnQpO1xuXG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBpZiAoIWRvY3VtZW50RWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZUVsID0gZG9jdW1lbnRFbC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWwuaW5uZXJIVE1MID0gYC5lZGl0b3I6ZW1wdHk6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1wbGFjZWhvbGRlcik7XG4gICAgICBmb250LWZhbWlseTogXCJCbGFja2JhdWQgU2Fuc1wiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgIGNvbG9yOiAjNjg2YzczO1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9YDtcbiAgICBkb2N1bWVudEVsLmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbCk7XG5cbiAgICBjb25zdCBzdHlsZTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUgPSB7XG4gICAgICAuLi5TVFlMRV9TVEFURV9ERUZBVUxUUyxcbiAgICAgIC4uLnN0eWxlU3RhdGUsXG4gICAgfTtcbiAgICBjb25zdCBib2R5U3R5bGUgPSBgYmFja2dyb3VuZC1jb2xvcjogJHtzdHlsZS5iYWNrQ29sb3J9O1xuICAgICAgY29sb3I6ICR7c3R5bGUuZm9udENvbG9yfTtcbiAgICAgIGZvbnQtZmFtaWx5OiAke3N0eWxlLmZvbnR9O1xuICAgICAgZm9udC1zaXplOiAke3N0eWxlLmZvbnRTaXplfXB4YDtcbiAgICBkb2N1bWVudEVsLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKT8uc2V0QXR0cmlidXRlKCdsYW5nJywgJ2VuJyk7XG4gICAgZG9jdW1lbnRFbC5ib2R5LnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ3RydWUnKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdpZCcsIGlkKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdyb2xlJywgJ21haW4nKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdjbGFzcycsICdlZGl0b3InKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdzdHlsZScsIGJvZHlTdHlsZSk7XG4gICAgZG9jdW1lbnRFbC5ib2R5LnNldEF0dHJpYnV0ZSgnZGF0YS1wbGFjZWhvbGRlcicsIHBsYWNlaG9sZGVyIHx8ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlRWRpdG9yKFxuICAgIGZvY3VzYWJsZUNoaWxkcmVuOiBIVE1MRWxlbWVudFtdLFxuICAgIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy4jc2V0RWRpdG9yRGlzYWJsZWQoZm9jdXNhYmxlQ2hpbGRyZW4sIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50LCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmFibGVFZGl0b3IoXG4gICAgZm9jdXNhYmxlQ2hpbGRyZW46IEhUTUxFbGVtZW50W10sXG4gICAgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICApOiB2b2lkIHtcbiAgICB0aGlzLiNzZXRFZGl0b3JEaXNhYmxlZChmb2N1c2FibGVDaGlsZHJlbiwgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIGNvbW1hbmQgb24gdGhlIHRleHQgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhlY0NvbW1hbmQoZWRpdG9yQ29tbWFuZDogRWRpdG9yQ29tbWFuZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvcikge1xuICAgICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcblxuICAgICAgaWYgKGVkaXRvckNvbW1hbmQuY29tbWFuZCA9PT0gJ3Bhc3RlJykge1xuICAgICAgICAvLyBGaXJlZm94IGRvZXMgbm90IHN1cHBvcnQgdGhlIGNsaXBib2FyZCBBUEkncyBgcmVhZFRleHRgIGFzIG9mIDMvMjQuIFdlIGFyZSBvayB3aXRoIGp1c3QgZmlyaW5nIGFuIGFsZXJ0IHdoZW4gdGhlIHBhc3RlIGJ1dHRvbiBpcyB1c2VkIGluIEZpcmVmb3guXG4gICAgICAgIGlmICghbmF2aWdhdG9yLmNsaXBib2FyZC5yZWFkVGV4dCkge1xuICAgICAgICAgIHRoaXMuI3Jlc291cmNlU3ZjXG4gICAgICAgICAgICAuZ2V0U3RyaW5nKCdza3l1eF90ZXh0X2VkaXRvcl9wYXN0ZV9pbmNvbXBhdGliaWxpdHlfZXJyb3InKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGVycm9yU3RyaW5nKSA9PiBhbGVydChlcnJvclN0cmluZykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQucmVhZFRleHQoKS50aGVuKChjbGlwVGV4dCkgPT4ge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvclNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgZG9jdW1lbnRFbD8uZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgY2xpcFRleHQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNFZGl0b3IoKTtcbiAgICAgICAgICAgICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yLmNvbW1hbmRDaGFuZ2VPYnNlcnZhYmxlLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yU2VsZWN0ZWQoKSkge1xuICAgICAgICAgIGRvY3VtZW50RWw/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.15\", ngImport: i0, type: SkyTextEditorMenubarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", 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.15\", 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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QyxNQUFNLFdBQ3RDO3dCQUNQLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQiw0QkFBNEI7d0JBQzVCLGNBQWM7d0JBQ2QsZ0JBQWdCO3FCQUNqQjs7c0JBR0EsS0FBSzs7c0JBR0wsS0FBSzs7c0JBR0wsS0FBSzs7c0JBR0wsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuaW1wb3J0IHsgU2t5VG9vbGJhck1vZHVsZSB9IGZyb20gJ0Bza3l1eC9sYXlvdXQnO1xuaW1wb3J0IHtcbiAgU2t5RHJvcGRvd25NZXNzYWdlLFxuICBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLFxuICBTa3lEcm9wZG93bk1vZHVsZSxcbn0gZnJvbSAnQHNreXV4L3BvcG92ZXJzJztcbmltcG9ydCB7IFNreVRoZW1lTW9kdWxlIH0gZnJvbSAnQHNreXV4L3RoZW1lJztcblxuaW1wb3J0IGhlIGZyb20gJ2hlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclJlc291cmNlc01vZHVsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9za3ktdGV4dC1lZGl0b3ItcmVzb3VyY2VzLm1vZHVsZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lbnVUeXBlIH0gZnJvbSAnLi4vdHlwZXMvbWVudS10eXBlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkIH0gZnJvbSAnLi4vdHlwZXMvdGV4dC1lZGl0b3ItbWVyZ2UtZmllbGQnO1xuXG5jb25zdCBGT1JNQVRfTUVOVV9BQ1RJT04gPSAnc2t5dXhfdGV4dF9lZGl0b3JfZm9ybWF0X21lbnVfYWN0aW9uXyc7XG5jb25zdCBFRElUX01FTlVfQUNUSU9OID0gJ3NreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXRleHQtZWRpdG9yLW1lbnViYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHQtZWRpdG9yLW1lbnViYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgU2t5RHJvcGRvd25Nb2R1bGUsXG4gICAgU2t5VGV4dEVkaXRvclJlc291cmNlc01vZHVsZSxcbiAgICBTa3lUaGVtZU1vZHVsZSxcbiAgICBTa3lUb29sYmFyTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yTWVudWJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIGVkaXRvckZvY3VzU3RyZWFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWVudXM6IFNreVRleHRFZGl0b3JNZW51VHlwZVtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1lcmdlRmllbGRzOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZFtdID0gW107XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBlZGl0RHJvcGRvd25TdHJlYW0gPSBuZXcgU3ViamVjdDxTa3lEcm9wZG93bk1lc3NhZ2U+KCk7XG5cbiAgcHVibGljIGVkaXRJdGVtczpcbiAgICB8IHtcbiAgICAgICAgZnVuY3Rpb24/OiAoKSA9PiB2b2lkO1xuICAgICAgICBpc0RpdmlkZXI/OiBib29sZWFuO1xuICAgICAgICBsYWJlbD86IHN0cmluZztcbiAgICAgICAga2V5U2hvcnRjdXQ/OiBzdHJpbmc7XG4gICAgICB9W11cbiAgICB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZm9ybWF0RHJvcGRvd25TdHJlYW0gPSBuZXcgU3ViamVjdDxTa3lEcm9wZG93bk1lc3NhZ2U+KCk7XG5cbiAgcHVibGljIGZvcm1hdEl0ZW1zOlxuICAgIHwge1xuICAgICAgICBmdW5jdGlvbj86ICgpID0+IHZvaWQ7XG4gICAgICAgIGlzRGl2aWRlcj86IGJvb2xlYW47XG4gICAgICAgIGxhYmVsPzogc3RyaW5nO1xuICAgICAgICBrZXlTaG9ydGN1dD86IHN0cmluZztcbiAgICAgIH1bXVxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBtZXJnZUZpZWxkRHJvcGRvd25TdHJlYW0gPSBuZXcgU3ViamVjdDxTa3lEcm9wZG93bk1lc3NhZ2U+KCk7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5ICNhZGFwdGVyU2VydmljZSA9IGluamVjdChTa3lUZXh0RWRpdG9yQWRhcHRlclNlcnZpY2UpO1xuICByZWFkb25seSAjcmVzb3VyY2VzID0gaW5qZWN0KFNreUxpYlJlc291cmNlc1NlcnZpY2UpO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvckZvY3VzU3RyZWFtXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bnMoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4jcmVzb3VyY2VzXG4gICAgICAuZ2V0U3RyaW5ncyh7XG4gICAgICAgIGJvbGQ6IEZPUk1BVF9NRU5VX0FDVElPTiArICdib2xkX2xhYmVsJyxcbiAgICAgICAgYm9sZFNob3J0OiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAnYm9sZF9rZXlfc2hvcnRjdXQnLFxuICAgICAgICBpdGFsaWM6IEZPUk1BVF9NRU5VX0FDVElPTiArICdpdGFsaWNfbGFiZWwnLFxuICAgICAgICBpdGFsaWNTaG9ydDogRk9STUFUX01FTlVfQUNUSU9OICsgJ2l0YWxpY19rZXlfc2hvcnRjdXQnLFxuICAgICAgICB1bmRlcmxpbmU6IEZPUk1BVF9NRU5VX0FDVElPTiArICd1bmRlcmxpbmVfbGFiZWwnLFxuICAgICAgICB1bmRlcmxpbmVTaG9ydDogRk9STUFUX01FTlVfQUNUSU9OICsgJ3VuZGVybGluZV9rZXlfc2hvcnRjdXQnLFxuICAgICAgICBzdHJpa2V0aHJvdWdoOiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAnc3RyaWtldGhyb3VnaF9sYWJlbCcsXG4gICAgICAgIGNsZWFyRm9ybWF0dGluZzogRk9STUFUX01FTlVfQUNUSU9OICsgJ2NsZWFyX2Zvcm1hdHRpbmdfbGFiZWwnLFxuICAgICAgICB1bmRvOiBFRElUX01FTlVfQUNUSU9OICsgJ3VuZG9fbGFiZWwnLFxuICAgICAgICB1bmRvU2hvcnQ6IEVESVRfTUVOVV9BQ1RJT04gKyAndW5kb19rZXlfc2hvcnRjdXQnLFxuICAgICAgICByZWRvOiBFRElUX01FTlVfQUNUSU9OICsgJ3JlZG9fbGFiZWwnLFxuICAgICAgICByZWRvU2hvcnQ6IEVESVRfTUVOVV9BQ1RJT04gKyAncmVkb19rZXlfc2hvcnRjdXQnLFxuICAgICAgICBjdXQ6IEVESVRfTUVOVV9BQ1RJT04gKyAnY3V0X2xhYmVsJyxcbiAgICAgICAgY3V0U2hvcnQ6IEVESVRfTUVOVV9BQ1RJT04gKyAnY3V0X2tleV9zaG9ydGN1dCcsXG4gICAgICAgIGNvcHk6IEVESVRfTUVOVV9BQ1RJT04gKyAnY29weV9sYWJlbCcsXG4gICAgICAgIGNvcHlTaG9ydDogRURJVF9NRU5VX0FDVElPTiArICdjb3B5X2tleV9zaG9ydGN1dCcsXG4gICAgICAgIHBhc3RlOiBFRElUX01FTlVfQUNUSU9OICsgJ3Bhc3RlX2xhYmVsJyxcbiAgICAgICAgcGFzdGVTaG9ydDogRURJVF9NRU5VX0FDVElPTiArICdwYXN0ZV9rZXlfc2hvcnRjdXQnLFxuICAgICAgICBzZWxlY3RBbGw6IEVESVRfTUVOVV9BQ1RJT04gKyAnc2VsZWN0X2FsbF9sYWJlbCcsXG4gICAgICAgIHNlbGVjdEFsbFNob3J0OiBFRElUX01FTlVfQUNUSU9OICsgJ3NlbGVjdF9hbGxfa2V5X3Nob3J0Y3V0JyxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpLCB0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChyZXNvdXJjZXMpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtYXRJdGVtcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogKCk6IHZvaWQgPT4gdGhpcy5leGVjQ29tbWFuZCgnYm9sZCcpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5ib2xkLFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy5ib2xkU2hvcnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogKCk6IHZvaWQgPT4gdGhpcy5leGVjQ29tbWFuZCgnaXRhbGljJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLml0YWxpYyxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMuaXRhbGljU2hvcnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogKCk6IHZvaWQgPT4gdGhpcy5leGVjQ29tbWFuZCgndW5kZXJsaW5lJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLnVuZGVybGluZSxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMudW5kZXJsaW5lU2hvcnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogKCk6IHZvaWQgPT4gdGhpcy5leGVjQ29tbWFuZCgnc3RyaWtldGhyb3VnaCcpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5zdHJpa2V0aHJvdWdoLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaXNEaXZpZGVyOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpOiB2b2lkID0+IHRoaXMuI2NsZWFyRm9ybWF0KCksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLmNsZWFyRm9ybWF0dGluZyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLmVkaXRJdGVtcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogKCk6IHZvaWQgPT4gdGhpcy5leGVjQ29tbWFuZCgndW5kbycpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy51bmRvLFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy51bmRvU2hvcnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogKCk6IHZvaWQgPT4gdGhpcy5leGVjQ29tbWFuZCgncmVkbycpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5yZWRvLFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy5yZWRvU2hvcnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpc0RpdmlkZXI6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogKCk6IHZvaWQgPT4gdGhpcy5leGVjQ29tbWFuZCgnY3V0JyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLmN1dCxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMuY3V0U2hvcnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogKCk6IHZvaWQgPT4gdGhpcy5leGVjQ29tbWFuZCgnY29weScpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5jb3B5LFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy5jb3B5U2hvcnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogKCk6IHZvaWQgPT4gdGhpcy5leGVjQ29tbWFuZCgncGFzdGUnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMucGFzdGUsXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLnBhc3RlU2hvcnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpc0RpdmlkZXI6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogKCk6IHZvaWQgPT4gdGhpcy5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLnNlbGVjdEFsbCxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMuc2VsZWN0QWxsU2hvcnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBleGVjQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHZhbHVlID0gJycpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmV4ZWNDb21tYW5kKHtcbiAgICAgIGNvbW1hbmQ6IGNvbW1hbmQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0TWVyZ2VGaWVsZChmaWVsZDogU2t5VGV4dEVkaXRvck1lcmdlRmllbGQpOiB2b2lkIHtcbiAgICB0aGlzLmV4ZWNDb21tYW5kKFxuICAgICAgJ2luc2VydEhUTUwnLFxuICAgICAgJzxpbWcgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmU7IGN1cnNvcjogZ3JhYjtcIiBkYXRhLWZpZWxkaWQ9XCInICtcbiAgICAgICAgaGUuZXNjYXBlKGZpZWxkLmlkKSArXG4gICAgICAgICdcIiBkYXRhLWZpZWxkZGlzcGxheT1cIicgK1xuICAgICAgICBoZS5lc2NhcGUoZmllbGQubmFtZSkgK1xuICAgICAgICAnXCIgc3JjPVwiJyArXG4gICAgICAgIChmaWVsZC5wcmV2aWV3SW1hZ2VVcmwgfHxcbiAgICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5nZXRNZXJnZUZpZWxkRGF0YVVSSShmaWVsZC5uYW1lKSkgK1xuICAgICAgICAnXCI+JyxcbiAgICApO1xuICB9XG5cbiAgI2Nsb3NlRHJvcGRvd25zKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdERyb3Bkb3duU3RyZWFtLm5leHQoeyB0eXBlOiBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLkNsb3NlIH0pO1xuICAgIHRoaXMuZm9ybWF0RHJvcGRvd25TdHJlYW0ubmV4dCh7IHR5cGU6IFNreURyb3Bkb3duTWVzc2FnZVR5cGUuQ2xvc2UgfSk7XG4gICAgdGhpcy5tZXJnZUZpZWxkRHJvcGRvd25TdHJlYW0ubmV4dCh7IHR5cGU6IFNreURyb3Bkb3duTWVzc2FnZVR5cGUuQ2xvc2UgfSk7XG4gIH1cblxuICAjY2xlYXJGb3JtYXQoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldEN1cnJlbnRTZWxlY3Rpb24oKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChcbiAgICAgIGN1cnJlbnRTZWxlY3Rpb24gJiZcbiAgICAgIGN1cnJlbnRTZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDAgJiZcbiAgICAgIGN1cnJlbnRTZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS50b1N0cmluZygpLmxlbmd0aCA8PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnKTtcbiAgICB9XG4gICAgdGhpcy5leGVjQ29tbWFuZCgncmVtb3ZlRm9ybWF0Jyk7XG4gIH1cbn1cbiIsIkBmb3IgKG1lbnUgb2YgbWVudXM7IHRyYWNrIG1lbnUpIHtcbiAgPHNreS10b29sYmFyLWl0ZW1cbiAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci1tZW51XCJcbiAgICBbbmdDbGFzc109XCInc2t5LXRleHQtZWRpdG9yLW1lbnUtJyArIG1lbnVcIlxuICA+XG4gICAgQHN3aXRjaCAobWVudSkge1xuICAgICAgQGNhc2UgKCdlZGl0Jykge1xuICAgICAgICA8c2t5LWRyb3Bkb3duXG4gICAgICAgICAgbGFiZWw9XCJFZGl0IG1lbnVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW21lc3NhZ2VTdHJlYW1dPVwiZWRpdERyb3Bkb3duU3RyZWFtXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxza3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgJ3NreXV4X3RleHRfZWRpdG9yX21lbnViYXJfZHJvcGRvd25fYnV0dG9uX2VkaXRfbGFiZWwnXG4gICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9za3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICAgIDxza3ktZHJvcGRvd24tbWVudT5cbiAgICAgICAgICAgIEBmb3IgKGVkaXRJdGVtIG9mIGVkaXRJdGVtczsgdHJhY2sgZWRpdEl0ZW0pIHtcbiAgICAgICAgICAgICAgPHNreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICAgICAgICAgIEBpZiAoIWVkaXRJdGVtLmlzRGl2aWRlcikge1xuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImVkaXRJdGVtPy5mdW5jdGlvbj8uKClcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZWRpdEl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChlZGl0SXRlbS5rZXlTaG9ydGN1dCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLW1lbnUta2V5LXNob3J0Y3V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NreS1mb250LWRlZW1waGFzaXplZCc6ICdtb2Rlcm4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnc2t5LWRlZW1waGFzaXplZCc6ICdkZWZhdWx0J1xuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZWRpdEl0ZW0ua2V5U2hvcnRjdXQgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWRyb3Bkb3duLWl0ZW0tZGl2aWRlclwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJkaXZpZGVyXCJcbiAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc2t5LWRyb3Bkb3duLWl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9za3ktZHJvcGRvd24tbWVudT5cbiAgICAgICAgPC9za3ktZHJvcGRvd24+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ2Zvcm1hdCcpIHtcbiAgICAgICAgPHNreS1kcm9wZG93blxuICAgICAgICAgIGxhYmVsPVwiRm9ybWF0IG1lbnVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW21lc3NhZ2VTdHJlYW1dPVwiZm9ybWF0RHJvcGRvd25TdHJlYW1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnc2t5dXhfdGV4dF9lZGl0b3JfbWVudWJhcl9kcm9wZG93bl9idXR0b25fZm9ybWF0X2xhYmVsJ1xuICAgICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvc2t5LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgICA8c2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgICBAZm9yIChmb3JtYXRJdGVtIG9mIGZvcm1hdEl0ZW1zOyB0cmFjayBmb3JtYXRJdGVtKSB7XG4gICAgICAgICAgICAgIDxza3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgICAgICBAaWYgKCFmb3JtYXRJdGVtLmlzRGl2aWRlcikge1xuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdEl0ZW0/LmZ1bmN0aW9uPy4oKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXRJdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZm9ybWF0SXRlbS5rZXlTaG9ydGN1dCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLW1lbnUta2V5LXNob3J0Y3V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NreS1mb250LWRlZW1waGFzaXplZCc6ICdtb2Rlcm4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnc2t5LWRlZW1waGFzaXplZCc6ICdkZWZhdWx0J1xuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybWF0SXRlbS5rZXlTaG9ydGN1dCB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItZHJvcGRvd24taXRlbS1kaXZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImRpdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9za3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgICAgICA8L3NreS1kcm9wZG93bj5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnbWVyZ2UtZmllbGQnKSB7XG4gICAgICAgIEBpZiAobWVyZ2VGaWVsZHMgJiYgbWVyZ2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIDxza3ktZHJvcGRvd25cbiAgICAgICAgICAgIGxhYmVsPVwiSW5zZXJ0IG1lcmdlIGZpZWxkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbbWVzc2FnZVN0cmVhbV09XCJtZXJnZUZpZWxkRHJvcGRvd25TdHJlYW1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICdza3l1eF90ZXh0X2VkaXRvcl9tZW51YmFyX2Ryb3Bkb3duX2J1dHRvbl9pbnNlcnRfbGFiZWwnXG4gICAgICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9za3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICAgICAgPHNreS1kcm9wZG93bi1tZW51PlxuICAgICAgICAgICAgICBAZm9yIChtZXJnZUZpZWxkIG9mIG1lcmdlRmllbGRzOyB0cmFjayBtZXJnZUZpZWxkLm5hbWUpIHtcbiAgICAgICAgICAgICAgICA8c2t5LWRyb3Bkb3duLWl0ZW0+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiaW5zZXJ0TWVyZ2VGaWVsZChtZXJnZUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBtZXJnZUZpZWxkLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvc2t5LWRyb3Bkb3duLWl0ZW0+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgPC9za3ktZHJvcGRvd24+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIDwvc2t5LXRvb2xiYXItaXRlbT5cbn1cbiJdfQ==","/**\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.15\", ngImport: i0, type: SkyTextEditorUrlModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", 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.15\", 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.15\", ngImport: i0, type: SkyTextEditorToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", 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.15\", 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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Q2pCOztzQkFHQSxLQUFLOztzQkFVTCxLQUFLOztzQkFHTCxLQUFLOztzQkFHTCxLQUFLOztzQkFHTCxLQUFLOztzQkFHTCxLQUFLOztzQkFnQkwsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgU2t5Q29sb3JwaWNrZXJNZXNzYWdlLFxuICBTa3lDb2xvcnBpY2tlck1lc3NhZ2VUeXBlLFxuICBTa3lDb2xvcnBpY2tlck1vZHVsZSxcbiAgU2t5Q29sb3JwaWNrZXJPdXRwdXQsXG59IGZyb20gJ0Bza3l1eC9jb2xvcnBpY2tlcic7XG5pbXBvcnQgeyBTa3lDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lJY29uTW9kdWxlIH0gZnJvbSAnQHNreXV4L2ljb24nO1xuaW1wb3J0IHsgU2t5VG9vbGJhck1vZHVsZSB9IGZyb20gJ0Bza3l1eC9sYXlvdXQnO1xuaW1wb3J0IHsgU2t5TW9kYWxDbG9zZUFyZ3MsIFNreU1vZGFsU2VydmljZSB9IGZyb20gJ0Bza3l1eC9tb2RhbHMnO1xuaW1wb3J0IHtcbiAgU2t5RHJvcGRvd25NZXNzYWdlLFxuICBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLFxuICBTa3lEcm9wZG93bk1vZHVsZSxcbn0gZnJvbSAnQHNreXV4L3BvcG92ZXJzJztcbmltcG9ydCB7IFNreVRoZW1lTW9kdWxlIH0gZnJvbSAnQHNreXV4L3RoZW1lJztcblxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNUWUxFX1NUQVRFX0RFRkFVTFRTIH0gZnJvbSAnLi4vZGVmYXVsdHMvc3R5bGUtc3RhdGUtZGVmYXVsdHMnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGV4dC1lZGl0b3ItYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JGb250IH0gZnJvbSAnLi4vdHlwZXMvZm9udC1zdGF0ZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yTGlua1dpbmRvd09wdGlvbnNUeXBlIH0gZnJvbSAnLi4vdHlwZXMvbGluay13aW5kb3ctb3B0aW9ucy10eXBlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTdHlsZVN0YXRlIH0gZnJvbSAnLi4vdHlwZXMvc3R5bGUtc3RhdGUnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclRvb2xiYXJBY3Rpb25UeXBlIH0gZnJvbSAnLi4vdHlwZXMvdG9vbGJhci1hY3Rpb24tdHlwZSc7XG5pbXBvcnQgeyBTa3lVcmxNb2RhbENvbnRleHQgfSBmcm9tICcuLi91cmwtbW9kYWwvdGV4dC1lZGl0b3ItdXJsLW1vZGFsLWNvbnRleHQnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclVybE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdXJsLW1vZGFsL3RleHQtZWRpdG9yLXVybC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXJsVGFyZ2V0IH0gZnJvbSAnLi4vdXJsLW1vZGFsL3RleHQtZWRpdG9yLXVybC10YXJnZXQnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktdGV4dC1lZGl0b3ItdG9vbGJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LWVkaXRvci10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBTa3lDaGVja2JveE1vZHVsZSxcbiAgICBTa3lDb2xvcnBpY2tlck1vZHVsZSxcbiAgICBTa3lEcm9wZG93bk1vZHVsZSxcbiAgICBTa3lJY29uTW9kdWxlLFxuICAgIFNreVRoZW1lTW9kdWxlLFxuICAgIFNreVRvb2xiYXJNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlZGl0b3JGb2N1c1N0cmVhbSh2YWx1ZTogU3ViamVjdDx2b2lkPikge1xuICAgIHRoaXMuI19lZGl0b3JGb2N1c1N0cmVhbSA9IHZhbHVlO1xuICAgIHRoaXMuI3N1YnNjcmliZUVkaXRvckZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVkaXRvckZvY3VzU3RyZWFtKCk6IFN1YmplY3Q8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLiNfZWRpdG9yRm9jdXNTdHJlYW07XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgZm9udExpc3Q6IFNreVRleHRFZGl0b3JGb250W10gPSBbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZm9udFNpemVMaXN0OiBudW1iZXJbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b29sYmFyQWN0aW9uczogU2t5VGV4dEVkaXRvclRvb2xiYXJBY3Rpb25UeXBlW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbGlua1dpbmRvd09wdGlvbnM6IFNreVRleHRFZGl0b3JMaW5rV2luZG93T3B0aW9uc1R5cGVbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3R5bGVTdGF0ZSh2YWx1ZTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUpIHtcbiAgICB0aGlzLiNfc3R5bGVTdGF0ZSA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZS5mb250ICE9PSB0aGlzLnN0eWxlU3RhdGVGb250TmFtZSkge1xuICAgICAgaWYgKHZhbHVlLmZvbnQgPT09ICdcIkJsYWNrYmF1ZCBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmJykge1xuICAgICAgICB0aGlzLnN0eWxlU3RhdGVGb250TmFtZSA9IHRoaXMuI2dldEZvbnROYW1lKCdCbGFja2JhdWQgU2FucycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdHlsZVN0YXRlRm9udE5hbWUgPSB0aGlzLiNnZXRGb250TmFtZSh2YWx1ZS5mb250KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0eWxlU3RhdGUoKTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUge1xuICAgIHJldHVybiB0aGlzLiNfc3R5bGVTdGF0ZTtcbiAgfVxuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgYmFja0NvbG9ycGlja2VyU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5Q29sb3JwaWNrZXJNZXNzYWdlPigpO1xuICBwdWJsaWMgY29sb3JwaWNrZXJTdHJlYW0gPSBuZXcgU3ViamVjdDxTa3lDb2xvcnBpY2tlck1lc3NhZ2U+KCk7XG4gIHB1YmxpYyBmb250UGlja2VyU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5RHJvcGRvd25NZXNzYWdlPigpO1xuICBwdWJsaWMgZm9udFNpemVTdHJlYW0gPSBuZXcgU3ViamVjdDxTa3lEcm9wZG93bk1lc3NhZ2U+KCk7XG4gIHB1YmxpYyBzdHlsZVN0YXRlRm9udE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjZWRpdG9yRm9jdXNTdHJlYW1TdWI6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNfZWRpdG9yRm9jdXNTdHJlYW0gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAjX3N0eWxlU3RhdGUgPSBTVFlMRV9TVEFURV9ERUZBVUxUUztcblxuICByZWFkb25seSAjYWRhcHRlclNlcnZpY2UgPSBpbmplY3QoU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2NoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcmVhZG9ubHkgI21vZGFsU2VydmljZSA9IGluamVjdChTa3lNb2RhbFNlcnZpY2UpO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNzdWJzY3JpYmVFZGl0b3JGb2N1cygpO1xuICB9XG5cbiAgcHVibGljIGV4ZWNDb21tYW5kKGNvbW1hbmQ6IHN0cmluZywgdmFsdWUgPSAnJyk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy4jYWRhcHRlclNlcnZpY2UuZXhlY0NvbW1hbmQoe1xuICAgICAgY29tbWFuZDogY29tbWFuZCxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuc3R5bGVTdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3R5bGVTdGF0ZSxcbiAgICAgIC4uLnRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldFN0eWxlU3RhdGUoKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUZvbnRTdHlsZShcbiAgICBjdXJyZW50U3RhdGU6IGJvb2xlYW4sXG4gICAgbmV3U3RhdGU6IGJvb2xlYW4sXG4gICAgY29tbWFuZDogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBpZiAoY3VycmVudFN0YXRlICE9PSBuZXdTdGF0ZSkge1xuICAgICAgdGhpcy5leGVjQ29tbWFuZChjb21tYW5kKTtcbiAgICB9XG5cbiAgICAvLyBGb3JjZSBza3ktY2hlY2tib3ggdG8gc2hvdyBjaGFuZ2VzIG9uIHVzZXIncyBpbml0aWFsIGNsaWNrLlxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBsaW5rKCk6IHZvaWQge1xuICAgIGNvbnN0IHByaW9yU2VsZWN0aW9uID0gdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2F2ZVNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGN1cnJlbnRMaW5rID0gdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0TGluaygpO1xuICAgIGNvbnN0IGlucHV0TW9kYWwgPSB0aGlzLiNtb2RhbFNlcnZpY2Uub3BlbihTa3lUZXh0RWRpdG9yVXJsTW9kYWxDb21wb25lbnQsIFtcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogU2t5VXJsTW9kYWxDb250ZXh0LFxuICAgICAgICB1c2VGYWN0b3J5OiAoKTogU2t5VXJsTW9kYWxDb250ZXh0ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IFNreVVybE1vZGFsQ29udGV4dCgpO1xuICAgICAgICAgIGNvbnRleHQudXJsUmVzdWx0ID0gY3VycmVudExpbms7XG4gICAgICAgICAgY29udGV4dC5saW5rV2luZG93T3B0aW9ucyA9IHRoaXMubGlua1dpbmRvd09wdGlvbnM7XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgaW5wdXRNb2RhbC5jbG9zZWQuc3Vic2NyaWJlKChyZXN1bHQ6IFNreU1vZGFsQ2xvc2VBcmdzKSA9PiB7XG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ3NhdmUnICYmIHByaW9yU2VsZWN0aW9uKSB7XG4gICAgICAgIGlmIChjdXJyZW50TGluaykge1xuICAgICAgICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldFNlbGVjdGVkQW5jaG9yVGFnKCk7XG5cbiAgICAgICAgICBpZiAoYW5jaG9yKSB7XG4gICAgICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZWxlY3RFbGVtZW50KGFuY2hvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leGVjQ29tbWFuZCgndW5saW5rJyk7XG4gICAgICAgIGlmIChyZXN1bHQuZGF0YS50YXJnZXQgPT09IFVybFRhcmdldC5Ob25lKSB7XG4gICAgICAgICAgLy8gQ3VycmVudCB3aW5kb3dcbiAgICAgICAgICB0aGlzLmV4ZWNDb21tYW5kKCdjcmVhdGVMaW5rJywgcmVzdWx0LmRhdGEudXJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBOZXcgV2luZG93XG4gICAgICAgICAgY29uc3Qgc1RleHQgPSB0aGlzLiNhZGFwdGVyU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gICAgICAgICAgdGhpcy5leGVjQ29tbWFuZChcbiAgICAgICAgICAgICdpbnNlcnRIVE1MJyxcbiAgICAgICAgICAgICc8YSBocmVmPVwiJyArXG4gICAgICAgICAgICAgIHJlc3VsdC5kYXRhLnVybCArXG4gICAgICAgICAgICAgICdcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JyArXG4gICAgICAgICAgICAgIHNUZXh0ICtcbiAgICAgICAgICAgICAgJzwvYT4nLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1bmxpbmsoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvblJhbmdlID0gdGhpcy4jYWRhcHRlclNlcnZpY2VcbiAgICAgIC5nZXRDdXJyZW50U2VsZWN0aW9uKClcbiAgICAgID8uZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAoY3VycmVudFNlbGVjdGlvblJhbmdlICYmIGN1cnJlbnRTZWxlY3Rpb25SYW5nZS50b1N0cmluZygpLmxlbmd0aCA8PSAwKSB7XG4gICAgICBjb25zdCBhbmNob3JUYWcgPSB0aGlzLiNhZGFwdGVyU2VydmljZS5nZXRTZWxlY3RlZEFuY2hvclRhZygpO1xuICAgICAgaWYgKGFuY2hvclRhZykge1xuICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZWxlY3RFbGVtZW50KGFuY2hvclRhZyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZXhlY0NvbW1hbmQoJ3VubGluaycpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZUZvbnRTaXplKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIHZvaWQgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0Rm9udFNpemUoc2l6ZSk7XG4gICAgdGhpcy5zdHlsZVN0YXRlID0ge1xuICAgICAgLi4udGhpcy5zdHlsZVN0YXRlLFxuICAgICAgLi4udGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0U3R5bGVTdGF0ZSgpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgb25Db2xvcnBpY2tlckNvbG9yQ2hhbmdlZChcbiAgICBjb2xvcjogU2t5Q29sb3JwaWNrZXJPdXRwdXQsXG4gICAgaXNCYWNrZ3JvdW5kID0gZmFsc2UsXG4gICk6IHZvaWQge1xuICAgIGlmIChpc0JhY2tncm91bmQpIHtcbiAgICAgIHRoaXMuZXhlY0NvbW1hbmQoJ2JhY2tDb2xvcicsIGNvbG9yLnJnYmFUZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5leGVjQ29tbWFuZCgnZm9yZUNvbG9yJywgY29sb3IuaGV4KTtcbiAgICB9XG4gIH1cblxuICAjc3Vic2NyaWJlRWRpdG9yRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy4jZWRpdG9yRm9jdXNTdHJlYW1TdWI/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLiNlZGl0b3JGb2N1c1N0cmVhbVN1YiA9IHRoaXMuZWRpdG9yRm9jdXNTdHJlYW1cbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnN0eWxlU3RhdGUgPSB7XG4gICAgICAgICAgLi4udGhpcy5zdHlsZVN0YXRlLFxuICAgICAgICAgIC4uLnRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldFN0eWxlU3RhdGUoKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bnMoKTtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gIH1cblxuICAjY2xvc2VEcm9wZG93bnMoKTogdm9pZCB7XG4gICAgY29uc3QgbWVzc2FnZTogU2t5Q29sb3JwaWNrZXJNZXNzYWdlID0ge1xuICAgICAgdHlwZTogU2t5Q29sb3JwaWNrZXJNZXNzYWdlVHlwZS5DbG9zZSxcbiAgICB9O1xuICAgIHRoaXMuY29sb3JwaWNrZXJTdHJlYW0ubmV4dChtZXNzYWdlKTtcbiAgICB0aGlzLmJhY2tDb2xvcnBpY2tlclN0cmVhbS5uZXh0KG1lc3NhZ2UpO1xuICAgIHRoaXMuZm9udFBpY2tlclN0cmVhbS5uZXh0KHsgdHlwZTogU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSB9KTtcbiAgICB0aGlzLmZvbnRTaXplU3RyZWFtLm5leHQoeyB0eXBlOiBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLkNsb3NlIH0pO1xuICB9XG5cbiAgI2dldEZvbnROYW1lKGZvbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3Qgc2t5VGV4dEVkaXRvckZvbnQgb2YgdGhpcy5mb250TGlzdCkge1xuICAgICAgaWYgKGZvbnROYW1lLnJlcGxhY2UoL1snXCJdKy9nLCAnJykgPT09IHNreVRleHRFZGl0b3JGb250Lm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHNreVRleHRFZGl0b3JGb250Lm5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iLCJAZm9yIChhY3Rpb24gb2YgdG9vbGJhckFjdGlvbnM7IHRyYWNrIGFjdGlvbikge1xuICA8c2t5LXRvb2xiYXItaXRlbVxuICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLXRvb2xiYXItYWN0aW9uXCJcbiAgICBbbmdDbGFzc109XCInc2t5LXRleHQtZWRpdG9yLXRvb2xiYXItYWN0aW9uLScgKyBhY3Rpb25cIlxuICA+XG4gICAgQHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBAY2FzZSAoJ2ZvbnQtZmFtaWx5Jykge1xuICAgICAgICA8c2t5LWRyb3Bkb3duXG4gICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItZm9udC1waWNrZXJcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW2xhYmVsXT1cIidGb250OiAnICsgc3R5bGVTdGF0ZUZvbnROYW1lXCJcbiAgICAgICAgICBbbWVzc2FnZVN0cmVhbV09XCJmb250UGlja2VyU3RyZWFtXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxza3ktZHJvcGRvd24tYnV0dG9uXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICdmb250LWZhbWlseSc6IHN0eWxlU3RhdGUuZm9udFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgc3R5bGVTdGF0ZUZvbnROYW1lIH19XG4gICAgICAgICAgPC9za3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICAgIDxza3ktZHJvcGRvd24tbWVudT5cbiAgICAgICAgICAgIEBmb3IgKGZvbnRNb2RlbCBvZiBmb250TGlzdDsgdHJhY2sgZm9udE1vZGVsLm5hbWUpIHtcbiAgICAgICAgICAgICAgPHNreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAnZm9udC1mYW1pbHknOiBmb250TW9kZWwudmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdmb250bmFtZScsIGZvbnRNb2RlbC5uYW1lKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgZm9udE1vZGVsLm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9za3ktZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgICAgICA8L3NreS1kcm9wZG93bj5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnZm9udC1zaXplJykge1xuICAgICAgICA8c2t5LWRyb3Bkb3duXG4gICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItZm9udC1zaXplLXBpY2tlclwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ0ZvbnQgc2l6ZTogJyArIHN0eWxlU3RhdGUuZm9udFNpemUgKyAncHgnXCJcbiAgICAgICAgICBbbWVzc2FnZVN0cmVhbV09XCJmb250U2l6ZVN0cmVhbVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c2t5LWRyb3Bkb3duLWJ1dHRvblxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAnZm9udC1mYW1pbHknOiBzdHlsZVN0YXRlLmZvbnRTaXplXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBzdHlsZVN0YXRlLmZvbnRTaXplICsgJ3B4JyB9fVxuICAgICAgICAgIDwvc2t5LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgICA8c2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgICBAZm9yIChzaXplIG9mIGZvbnRTaXplTGlzdDsgdHJhY2sgc2l6ZSkge1xuICAgICAgICAgICAgICA8c2t5LWRyb3Bkb3duLWl0ZW0+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNoYW5nZUZvbnRTaXplKHNpemUpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBzaXplICsgJ3B4JyB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L3NreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgIDwvc2t5LWRyb3Bkb3duPlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdmb250LXN0eWxlJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2t5LXN3aXRjaC1pY29uLWdyb3VwIHNreS10ZXh0LWVkaXRvci1mb250LXN0eWxlLXBpY2tlclwiPlxuICAgICAgICAgIDxza3ktY2hlY2tib3hcbiAgICAgICAgICAgIGljb25OYW1lPVwidGV4dC1ib2xkXCJcbiAgICAgICAgICAgIGxhYmVsPVwiQm9sZFwiXG4gICAgICAgICAgICB0aXRsZT1cIkJvbGRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0eWxlU3RhdGUuYm9sZFN0YXRlXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICB0b2dnbGVGb250U3R5bGUoc3R5bGVTdGF0ZS5ib2xkU3RhdGUsICRldmVudCwgJ2JvbGQnKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxza3ktY2hlY2tib3hcbiAgICAgICAgICAgIGljb25OYW1lPVwidGV4dC1pdGFsaWNcIlxuICAgICAgICAgICAgbGFiZWw9XCJJdGFsaWNpemVkXCJcbiAgICAgICAgICAgIHRpdGxlPVwiSXRhbGljaXplZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwic3R5bGVTdGF0ZS5pdGFsaWNTdGF0ZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgdG9nZ2xlRm9udFN0eWxlKHN0eWxlU3RhdGUuaXRhbGljU3RhdGUsICRldmVudCwgJ2l0YWxpYycpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNreS1jaGVja2JveFxuICAgICAgICAgICAgaWNvbk5hbWU9XCJ0ZXh0LXVuZGVybGluZVwiXG4gICAgICAgICAgICBsYWJlbD1cIlVuZGVybGluZVwiXG4gICAgICAgICAgICB0aXRsZT1cIlVuZGVybGluZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwic3R5bGVTdGF0ZS51bmRlcmxpbmVTdGF0ZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgdG9nZ2xlRm9udFN0eWxlKHN0eWxlU3RhdGUudW5kZXJsaW5lU3RhdGUsICRldmVudCwgJ3VuZGVybGluZScpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdjb2xvcicpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNreS10ZXh0LWVkaXRvci1jb2xvcnBpY2tlci1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItY29sb3JwaWNrZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c2t5LWNvbG9ycGlja2VyXG4gICAgICAgICAgICAgICNjb2xvclBpY2tlclxuICAgICAgICAgICAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci1mb250LWNvbG9yLXBpY2tlclwiXG4gICAgICAgICAgICAgIGxhYmVsPVwiRm9udCBjb2xvclwiXG4gICAgICAgICAgICAgIHBpY2tlckJ1dHRvbkljb249XCJjb2xvci1saW5lXCJcbiAgICAgICAgICAgICAgW21lc3NhZ2VTdHJlYW1dPVwiY29sb3JwaWNrZXJTdHJlYW1cIlxuICAgICAgICAgICAgICBbc2hvd1Jlc2V0QnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkQ29sb3JDaGFuZ2VkKT1cIm9uQ29sb3JwaWNrZXJDb2xvckNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG91dHB1dEZvcm1hdD1cImhleFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIFthbGxvd1RyYW5zcGFyZW5jeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzdHlsZVN0YXRlLmZvbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgW3NreUNvbG9ycGlja2VySW5wdXRdPVwiY29sb3JQaWNrZXJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9za3ktY29sb3JwaWNrZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNreS10ZXh0LWVkaXRvci1jb2xvcnBpY2tlci1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxza3ktY29sb3JwaWNrZXJcbiAgICAgICAgICAgICAgI2JhY2tDb2xvclBpY2tlclxuICAgICAgICAgICAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci1iYWNrZ3JvdW5kLWNvbG9yLXBpY2tlclwiXG4gICAgICAgICAgICAgIGxhYmVsPVwiQmFja2dyb3VuZCBjb2xvclwiXG4gICAgICAgICAgICAgIHBpY2tlckJ1dHRvbkljb249XCJ0ZXh0LWNvbG9yXCJcbiAgICAgICAgICAgICAgW21lc3NhZ2VTdHJlYW1dPVwiYmFja0NvbG9ycGlja2VyU3RyZWFtXCJcbiAgICAgICAgICAgICAgW3Nob3dSZXNldEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIChzZWxlY3RlZENvbG9yQ2hhbmdlZCk9XCJvbkNvbG9ycGlja2VyQ29sb3JDaGFuZ2VkKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBvdXRwdXRGb3JtYXQ9XCJyZ2JhXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgW2FsbG93VHJhbnNwYXJlbmN5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic3R5bGVTdGF0ZS5iYWNrQ29sb3JcIlxuICAgICAgICAgICAgICAgIFtza3lDb2xvcnBpY2tlcklucHV0XT1cImJhY2tDb2xvclBpY2tlclwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3NreS1jb2xvcnBpY2tlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ2xpc3QnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktc3dpdGNoLWljb24tZ3JvdXBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQnVsbGV0ZWQgbGlzdFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIkJ1bGxldGVkIGxpc3RcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdpbnNlcnRVbm9yZGVyZWRMaXN0JylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktaWNvbiBpY29uTmFtZT1cInRleHQtYnVsbGV0LWxpc3RcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJOdW1iZXJlZCBsaXN0XCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWRlZmF1bHQgc2t5LWJ0bi1pY29uXCJcbiAgICAgICAgICAgIHRpdGxlPVwiTnVtYmVyZWQgbGlzdFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ2luc2VydE9yZGVyZWRMaXN0JylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktaWNvbiBpY29uTmFtZT1cInRleHQtbnVtYmVyLWxpc3QtbHRyXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ2FsaWdubWVudCcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNreS1zd2l0Y2gtaWNvbi1ncm91cFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbGlnbiBsZWZ0XCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWRlZmF1bHQgc2t5LWJ0bi1pY29uXCJcbiAgICAgICAgICAgIHRpdGxlPVwiQWxpZ24gbGVmdFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ2p1c3RpZnlMZWZ0JylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktaWNvbiBpY29uTmFtZT1cInRleHQtYWxpZ24tbGVmdFwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFsaWduIGNlbnRlclwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIkFsaWduIGNlbnRlclwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ2p1c3RpZnlDZW50ZXInKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNreS1pY29uIGljb25OYW1lPVwidGV4dC1hbGlnbi1jZW50ZXJcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbGlnbiByaWdodFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIkFsaWduIHJpZ2h0XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnanVzdGlmeVJpZ2h0JylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktaWNvbiBpY29uTmFtZT1cInRleHQtYWxpZ24tcmlnaHRcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnaW5kZW50YXRpb24nKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktc3dpdGNoLWljb24tZ3JvdXBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiT3V0ZGVudFwiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIk91dGRlbnRcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWNDb21tYW5kKCdvdXRkZW50JylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktaWNvbiBpY29uTmFtZT1cInRleHQtaW5kZW50LWRlY3JlYXNlXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiSW5kZW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWRlZmF1bHQgc2t5LWJ0bi1pY29uXCJcbiAgICAgICAgICAgIHRpdGxlPVwiSW5kZW50XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgnaW5kZW50JylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxza3ktaWNvbiBpY29uTmFtZT1cInRleHQtaW5kZW50LWluY3JlYXNlXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ3VuZG8tcmVkbycpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNreS1zd2l0Y2gtaWNvbi1ncm91cFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJVbmRvXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWRlZmF1bHQgc2t5LWJ0bi1pY29uXCJcbiAgICAgICAgICAgIHRpdGxlPVwiVW5kb1wiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhlY0NvbW1hbmQoJ3VuZG8nKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNreS1pY29uIGljb25OYW1lPVwiYXJyb3ctdW5kb1wiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlZG9cIlxuICAgICAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktYnRuLWljb25cIlxuICAgICAgICAgICAgdGl0bGU9XCJSZWRvXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleGVjQ29tbWFuZCgncmVkbycpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJhcnJvdy1yZWRvXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ2xpbmsnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktc3dpdGNoLWljb24tZ3JvdXBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiTGlua1wiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIkxpbmtcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnaWNvbi1idG4tYWN0aXZlJzogc3R5bGVTdGF0ZS5saW5rU3RhdGVcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImxpbmsoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNreS1pY29uIGljb25OYW1lPVwibGlua1wiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlVubGlua1wiXG4gICAgICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0IHNreS1idG4taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIlVubGlua1wiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc3R5bGVTdGF0ZS5saW5rU3RhdGUgfHwgZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInVubGluaygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c2t5LWljb24gaWNvbk5hbWU9XCJsaW5rLWRpc21pc3NcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9XG4gIDwvc2t5LXRvb2xiYXItaXRlbT5cbn1cbiJdfQ==","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.15\", ngImport: i0, type: SkyTextEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.15\", 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.15\", 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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LEtBQUs7O3NCQW1CTCxLQUFLOztzQkFjTCxLQUFLOztzQkFZTCxLQUFLOztzQkFZTCxLQUFLOztzQkFtQkwsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTs7c0JBQ3JDLFdBQVc7dUJBQUMsOEJBQThCOztzQkFPMUMsS0FBSzs7c0JBZUwsS0FBSzs7c0JBZ0JMLEtBQUs7O3NCQUdMLFNBQVM7dUJBQUMsUUFBUTs7c0JBa0RsQixTQUFTO3VCQUFDLGtCQUFrQixFQUFFO3dCQUM3QixJQUFJLEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2I7O3NCQUtBLFdBQVc7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lDb3JlQWRhcHRlclNlcnZpY2UsIFNreUlkTW9kdWxlLCBTa3lJZFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfRk9STV9FUlJPUlNfRU5BQkxFRCxcbiAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgU2t5SW5wdXRCb3hIb3N0U2VydmljZSxcbiAgU2t5UmVxdWlyZWRTdGF0ZURpcmVjdGl2ZSxcbn0gZnJvbSAnQHNreXV4L2Zvcm1zJztcbmltcG9ydCB7IFNreUhlbHBJbmxpbmVNb2R1bGUgfSBmcm9tICdAc2t5dXgvaGVscC1pbmxpbmUnO1xuaW1wb3J0IHsgU2t5VG9vbGJhck1vZHVsZSB9IGZyb20gJ0Bza3l1eC9sYXlvdXQnO1xuaW1wb3J0IHsgU2t5VGhlbWVNb2R1bGUgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVRleHRFZGl0b3JSZXNvdXJjZXNNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQvc2t5LXRleHQtZWRpdG9yLXJlc291cmNlcy5tb2R1bGUnO1xuXG5pbXBvcnQgeyBGT05UX0xJU1RfREVGQVVMVFMgfSBmcm9tICcuL2RlZmF1bHRzL2ZvbnQtbGlzdC1kZWZhdWx0cyc7XG5pbXBvcnQgeyBGT05UX1NJWkVfTElTVF9ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvZm9udC1zaXplLWxpc3QtZGVmYXVsdHMnO1xuaW1wb3J0IHsgTElOS19XSU5ET1dfT1BUSU9OU19ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvbGluay13aW5kb3ctb3B0aW9ucy1kZWZhdWx0cyc7XG5pbXBvcnQgeyBNRU5VX0RFRkFVTFRTIH0gZnJvbSAnLi9kZWZhdWx0cy9tZW51LWRlZmF1bHRzJztcbmltcG9ydCB7IFNUWUxFX1NUQVRFX0RFRkFVTFRTIH0gZnJvbSAnLi9kZWZhdWx0cy9zdHlsZS1zdGF0ZS1kZWZhdWx0cyc7XG5pbXBvcnQgeyBUT09MQkFSX0FDVElPTl9ERUZBVUxUUyB9IGZyb20gJy4vZGVmYXVsdHMvdG9vbGJhci1hY3Rpb24tZGVmYXVsdHMnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lbnViYXJDb21wb25lbnQgfSBmcm9tICcuL21lbnViYXIvdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRTYW5pdGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90ZXh0LXNhbml0aXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyL3RleHQtZWRpdG9yLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JGb250IH0gZnJvbSAnLi90eXBlcy9mb250LXN0YXRlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JMaW5rV2luZG93T3B0aW9uc1R5cGUgfSBmcm9tICcuL3R5cGVzL2xpbmstd2luZG93LW9wdGlvbnMtdHlwZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yTWVudVR5cGUgfSBmcm9tICcuL3R5cGVzL21lbnUtdHlwZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB9IGZyb20gJy4vdHlwZXMvc3R5bGUtc3RhdGUnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lcmdlRmllbGQgfSBmcm9tICcuL3R5cGVzL3RleHQtZWRpdG9yLW1lcmdlLWZpZWxkJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZSB9IGZyb20gJy4vdHlwZXMvdG9vbGJhci1hY3Rpb24tdHlwZSc7XG5cbi8qKlxuICogVGhlIHRleHQgZWRpdG9yIGNvbXBvbmVudCBsZXRzIHVzZXJzIGZvcm1hdCBhbmQgbWFuaXB1bGF0ZSB0ZXh0LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktdGV4dC1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU2t5VGV4dEVkaXRvclNlcnZpY2UsXG4gICAgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UsXG4gICAgU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogU0tZX0ZPUk1fRVJST1JTX0VOQUJMRUQsIHVzZVZhbHVlOiB0cnVlIH0sXG4gIF0sXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAge1xuICAgICAgZGlyZWN0aXZlOiBTa3lSZXF1aXJlZFN0YXRlRGlyZWN0aXZlLFxuICAgICAgaW5wdXRzOiBbJ3JlcXVpcmVkJ10sXG4gICAgfSxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTa3lIZWxwSW5saW5lTW9kdWxlLFxuICAgIFNreUlkTW9kdWxlLFxuICAgIFNreVRleHRFZGl0b3JNZW51YmFyQ29tcG9uZW50LFxuICAgIFNreVRleHRFZGl0b3JUb29sYmFyQ29tcG9uZW50LFxuICAgIFNreVRoZW1lTW9kdWxlLFxuICAgIFNreVRvb2xiYXJNb2R1bGUsXG4gICAgU2t5Rm9ybUVycm9yc01vZHVsZSxcbiAgICBTa3lUZXh0RWRpdG9yUmVzb3VyY2VzTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3Nvclxue1xuICAvKipcbiAgICogV2hldGhlciB0byBwdXQgZm9jdXMgb24gdGhlIGVkaXRvciBhZnRlciBpdCByZW5kZXJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9mb2N1czogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIHRleHQgZWRpdG9yIG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLlxuICAgKiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLCB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuI2FwcGx5RGlzYWJsZWRTdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9udHMgdG8gaW5jbHVkZSBpbiB0aGUgZm9udCBwaWNrZXIuXG4gICAqIEBkZWZhdWx0IFt7bmFtZTogJ0JsYWNrYmF1ZCBTYW5zJywgdmFsdWU6ICdcIkJsYWNrYmF1ZCBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmJ30sIHtuYW1lOiAnQXJpYWwnLCB2YWx1ZTogJ0FyaWFsJ30sIHtuYW1lOiAnQXJpYWwgQmxhY2snLCB2YWx1ZTogJ1wiQXJpYWwgQmxhY2tcIid9LCB7bmFtZTogJ0NvdXJpZXIgTmV3JywgdmFsdWU6ICdcIkNvdXJpZXIgTmV3XCInfSwge25hbWU6ICdHZW9yZ2lhJywgdmFsdWU6ICdHZW9yZ2lhLCBzZXJpZid9LCB7bmFtZTogJ1RhaG9tYScsIHZhbHVlOiAnVGFob21hLCBHZW5ldmEsIHNhbnMtc2VyaWYnfSwge25hbWU6ICdUaW1lcyBOZXcgUm9tYW4nLCB2YWx1ZTogJ1wiVGltZXMgTmV3IFJvbWFuXCInfSwge25hbWU6ICdUcmVidWNoZXQgTVMnLCB2YWx1ZTogJ1wiVHJlYnVjaGV0IE1TXCIsIHNhbnMtc2VyaWYnfSwge25hbWU6ICdWZXJkYW5hJywgdmFsdWU6ICdWZXJkYW5hLCBHZW5ldmEsIHNhbnMtc2VyaWYnfV1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZm9udExpc3QodmFsdWU6IFNreVRleHRFZGl0b3JGb250W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZm9udExpc3QgPSB2YWx1ZSB8fCBGT05UX0xJU1RfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvbnRMaXN0KCk6IFNreVRleHRFZGl0b3JGb250W10ge1xuICAgIHJldHVybiB0aGlzLiNfZm9udExpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbnQgc2l6ZXMgdG8gaW5jbHVkZSBpbiB0aGUgZm9udCBzaXplIHBpY2tlci5cbiAgICogQGRlZmF1bHQgWzYsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzNiwgNDhdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZvbnRTaXplTGlzdCh2YWx1ZTogbnVtYmVyW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZm9udFNpemVMaXN0ID0gdmFsdWUgfHwgRk9OVF9TSVpFX0xJU1RfREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvbnRTaXplTGlzdCgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19mb250U2l6ZUxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGhlbHAgcG9wb3Zlci4gV2hlbiBzcGVjaWZpZWQgYWxvbmcgd2l0aCBgbGFiZWxUZXh0YCwgYSBbaGVscCBpbmxpbmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9oZWxwLWlubGluZSlcbiAgICogYnV0dG9uIGlzIGFkZGVkIHRvIHRoZSB0ZXh0IGVkaXRvci4gVGhlIGhlbHAgaW5saW5lIGJ1dHRvbiBkaXNwbGF5cyBhIFtwb3BvdmVyXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvcG9wb3ZlcilcbiAgICogd2hlbiBjbGlja2VkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udGVudCBhbmQgb3B0aW9uYWwgdGl0bGUuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGxhYmVsVGV4dGAgaXMgYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHRpdGxlIG9mIHRoZSBoZWxwIHBvcG92ZXIuIFRoaXMgcHJvcGVydHkgb25seSBhcHBsaWVzIHdoZW4gYGhlbHBQb3BvdmVyQ29udGVudGAgaXNcbiAgICogYWxzbyBzcGVjaWZpZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVscFBvcG92ZXJUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBbUGVyc2lzdGVudCBpbmxpbmUgaGVscCB0ZXh0XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2Rlc2lnbi9ndWlkZWxpbmVzL3VzZXItYXNzaXN0YW5jZSNpbmxpbmUtaGVscCkgdGhhdCBwcm92aWRlc1xuICAgKiBhZGRpdGlvbmFsIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGludFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCBhdHRyaWJ1dGUgZm9yIHRoZSB0ZXh0IGVkaXRvci5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGNvbXBvbmVudCBnZW5lcmF0ZXMgYSByYW5kb20gSUQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNpZCA9IHZhbHVlIHx8IHRoaXMuI2RlZmF1bHRJZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jaWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGluaXRpYWwgc3R5bGVzIGZvciBhbGwgY29udGVudCwgaW5jbHVkaW5nIGJhY2tncm91bmQgY29sb3IsIGZvbnQgc2l6ZSwgYW5kIGxpbmsgc3RhdGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGluaXRpYWxTdHlsZVN0YXRlKHN0YXRlOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIC8vIERvIG5vdCB1cGRhdGUgdGhlIHN0YXRlIGFmdGVyIGluaXRpYWxpemF0aW9uIGhhcyB0YWtlbiBwbGFjZVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNpbml0aWFsaXplZCkge1xuICAgICAgdGhpcy4jX2luaXRpYWxTdHlsZVN0YXRlID0ge1xuICAgICAgICAuLi5TVFlMRV9TVEFURV9ERUZBVUxUUyxcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5pdGlhbFN0eWxlU3RhdGUoKTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUge1xuICAgIHJldHVybiB0aGlzLiNfaW5pdGlhbFN0eWxlU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgdGV4dCBlZGl0b3IncyBsYWJlbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbGFiZWxUZXh0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbGFiZWxUZXh0ID0gdmFsdWU7XG4gICAgdGhpcy4jdXBkYXRlQTExeUF0dHJpYnV0ZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFiZWxUZXh0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19sYWJlbFRleHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1lbnVzIHRvIGluY2x1ZGUgaW4gdGhlIG1lbnUgYmFyLlxuICAgKiBAZGVmYXVsdCBbICdlZGl0JywgJ2Zvcm1hdCcgXVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtZW51cyh2YWx1ZTogU2t5VGV4dEVkaXRvck1lbnVUeXBlW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWVudXMgPSB2YWx1ZSB8fCBNRU5VX0RFRkFVTFRTO1xuICB9XG5cbiAgcHVibGljIGdldCBtZW51cygpOiBTa3lUZXh0RWRpdG9yTWVudVR5cGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19tZW51cztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWVyZ2UgZmllbGRzIHRvIGluY2x1ZGUgaW4gdGhlIG1lcmdlIGZpZWxkIG1lbnUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1lcmdlRmllbGRzKHZhbHVlOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZFtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21lcmdlRmllbGRzID0gdmFsdWUgfHwgW107XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lcmdlRmllbGRzKCk6IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkW10ge1xuICAgIHJldHVybiB0aGlzLiNfbWVyZ2VGaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogUGxhY2Vob2xkZXIgdGV4dCB0byBkaXNwbGF5IHdoZW4gdGhlIHRleHQgZW50cnkgYXJlYSBpcyBlbXB0eS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLiNfcGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuI19wbGFjZWhvbGRlciA9IHZhbHVlIHx8ICcnO1xuICAgICAgaWYgKHRoaXMuI2luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldFBsYWNlaG9sZGVyKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI19wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0ZXh0IGVkaXRvciBpcyBzdGFja2VkIG9uIGFub3RoZXIgZm9ybSBjb21wb25lbnQuIFdoZW4gc3BlY2lmaWVkLFxuICAgKiB0aGUgYXBwcm9wcmlhdGUgdmVydGljYWwgc3BhY2luZyBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSB0ZXh0IGVkaXRvci5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1mb3JtLWZpZWxkLXN0YWNrZWQnKVxuICBwdWJsaWMgc3RhY2tlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9ucyB0byBpbmNsdWRlIGluIHRoZSB0b29sYmFyIGluIHRoZSBzcGVjaWZpZWQgb3JkZXIuXG4gICAqIEBkZWZhdWx0IFsgJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtc2l6ZScsICdmb250LXN0eWxlJywgJ2NvbG9yJywgJ2xpc3QnLCAnbGluayBdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRvb2xiYXJBY3Rpb25zKFxuICAgIHZhbHVlOiBTa3lUZXh0RWRpdG9yVG9vbGJhckFjdGlvblR5cGVbXSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy4jX3Rvb2xiYXJBY3Rpb25zID0gdmFsdWUgfHwgVE9PTEJBUl9BQ1RJT05fREVGQVVMVFM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRvb2xiYXJBY3Rpb25zKCk6IFNreVRleHRFZGl0b3JUb29sYmFyQWN0aW9uVHlwZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jX3Rvb2xiYXJBY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgd2luZG93IG9wdGlvbnMgZm9yIGFkZGluZyBhIGh5cGVybGluay5cbiAgICogQGRlZmF1bHQgWyAnbmV3JywgJ2V4aXN0aW5nJyBdXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGxpbmtXaW5kb3dPcHRpb25zKFxuICAgIHZhbHVlOiBTa3lUZXh0RWRpdG9yTGlua1dpbmRvd09wdGlvbnNUeXBlW10gfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMuI19saW5rV2luZG93T3B0aW9ucyA9IHZhbHVlID8/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.15\", ngImport: i0, type: SkyTextEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTextEditorModule, imports: [SkyTextEditorComponent], exports: [SkyTextEditorComponent, SkyFormErrorModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: SkyTextEditorModule, imports: [SkyTextEditorComponent, SkyFormErrorModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBTWpFLE1BQU0sT0FBTyxtQkFBbUI7K0dBQW5CLG1CQUFtQjtnSEFBbkIsbUJBQW1CLFlBSHBCLHNCQUFzQixhQUN0QixzQkFBc0IsRUFBRSxrQkFBa0I7Z0hBRXpDLG1CQUFtQixZQUhwQixzQkFBc0IsRUFDRSxrQkFBa0I7OzRGQUV6QyxtQkFBbUI7a0JBSi9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLGtCQUFrQixDQUFDO2lCQUN0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lGb3JtRXJyb3JNb2R1bGUgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi90ZXh0LWVkaXRvci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbU2t5VGV4dEVkaXRvckNvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtTa3lUZXh0RWRpdG9yQ29tcG9uZW50LCBTa3lGb3JtRXJyb3JNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yTW9kdWxlIHt9XG4iXX0=","/**\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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"}
1
+ {"version":3,"file":"skyux-text-editor.mjs","sources":["../../../../../libs/components/text-editor/src/lib/modules/text-editor/services/text-sanitization.service.ts","../../../../../libs/components/text-editor/src/lib/modules/rich-text-display/rich-text-display.component.ts","../../../../../libs/components/text-editor/src/lib/modules/rich-text-display/rich-text-display.component.html","../../../../../libs/components/text-editor/src/lib/modules/rich-text-display/rich-text-display.module.ts","../../../../../libs/components/text-editor/src/lib/modules/shared/sky-text-editor-resources.module.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/defaults/font-list-defaults.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/defaults/font-size-list-defaults.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/defaults/link-window-options-defaults.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/defaults/menu-defaults.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/defaults/style-state-defaults.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/defaults/toolbar-action-defaults.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/url-modal/text-editor-url-target.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/services/text-editor-selection.service.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/services/text-editor.service.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/services/text-editor-adapter.service.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/menubar/text-editor-menubar.component.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/menubar/text-editor-menubar.component.html","../../../../../libs/components/text-editor/src/lib/modules/text-editor/url-modal/text-editor-url-modal-context.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/url-modal/text-editor-url-modal.component.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/url-modal/text-editor-url-modal.component.html","../../../../../libs/components/text-editor/src/lib/modules/text-editor/toolbar/text-editor-toolbar.component.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/toolbar/text-editor-toolbar.component.html","../../../../../libs/components/text-editor/src/lib/modules/text-editor/text-editor.component.ts","../../../../../libs/components/text-editor/src/lib/modules/text-editor/text-editor.component.html","../../../../../libs/components/text-editor/src/lib/modules/text-editor/text-editor.module.ts","../../../../../libs/components/text-editor/src/skyux-text-editor.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport createDOMPurify from 'dompurify';\n\nconst domPurify = createDOMPurify(window);\n\ndomPurify.addHook('afterSanitizeAttributes', (node: Element) => {\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/**\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 */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyTextSanitizationService {\n #allowedAttributes: string[] = ['target'];\n\n /**\n * Returns a sanitized string, allowing target attribute for new tab links.\n */\n public sanitize(htmlString: string): string {\n return domPurify.sanitize(htmlString, {\n ADD_ATTR: this.#allowedAttributes,\n });\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nimport { SkyTextSanitizationService } from '../text-editor/services/text-sanitization.service';\n\n@Component({\n selector: 'sky-rich-text-display',\n templateUrl: './rich-text-display.component.html',\n standalone: false,\n})\nexport class SkyRichTextDisplayComponent {\n /**\n * The rich text to display.\n */\n @Input()\n public set richText(value: string | undefined) {\n if (value) {\n const cleaned = this.#sanitizationService.sanitize(value);\n /* istanbul ignore else */\n if (cleaned !== this.#_richText) {\n this.#_richText = cleaned;\n\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 } else {\n this.#_richText = '';\n this.sanitizedText = '';\n }\n }\n\n public sanitizedText: SafeHtml = '';\n\n #_richText = '';\n\n #sanitizer: DomSanitizer;\n #sanitizationService: SkyTextSanitizationService;\n\n constructor(\n sanitizer: DomSanitizer,\n sanitizationService: SkyTextSanitizationService,\n ) {\n this.#sanitizer = sanitizer;\n this.#sanitizationService = sanitizationService;\n }\n}\n","<span class=\"sky-rich-text-display-text\" [innerHTML]=\"sanitizedText\"></span>\n","import { NgModule } from '@angular/core';\n\nimport { SkyRichTextDisplayComponent } from './rich-text-display.component';\n\n@NgModule({\n exports: [SkyRichTextDisplayComponent],\n declarations: [SkyRichTextDisplayComponent],\n})\nexport class SkyRichTextDisplayModule {}\n","/* 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 {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\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:\n '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:\n '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};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyTextEditorResourcesModule {}\n","import { SkyTextEditorFont } from '../types/font-state';\n\n/**\n * @internal\n */\nexport const FONT_LIST_DEFAULTS: SkyTextEditorFont[] = [\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","/**\n * @internal\n */\nexport const FONT_SIZE_LIST_DEFAULTS: number[] = [\n 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 36, 48,\n];\n","import { SkyTextEditorLinkWindowOptionsType } from '../types/link-window-options-type';\n\nexport const LINK_WINDOW_OPTIONS_DEFAULTS: SkyTextEditorLinkWindowOptionsType[] =\n ['new', 'existing'];\n","import { SkyTextEditorMenuType } from '../types/menu-type';\n\n/**\n * @internal\n */\nexport const MENU_DEFAULTS: SkyTextEditorMenuType[] = ['edit', 'format'];\n","import { SkyTextEditorStyleState } from '../types/style-state';\n\nimport { FONT_LIST_DEFAULTS } from './font-list-defaults';\n\n/**\n * @internal\n */\nexport const STYLE_STATE_DEFAULTS: SkyTextEditorStyleState = {\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","import { SkyTextEditorToolbarActionType } from '../types/toolbar-action-type';\n\n/**\n * @internal\n */\nexport const TOOLBAR_ACTION_DEFAULTS: SkyTextEditorToolbarActionType[] = [\n 'font-family',\n 'font-size',\n 'font-style',\n 'color',\n 'list',\n 'link',\n];\n","/**\n * @internal\n */\nexport enum UrlTarget {\n None = 0,\n NewWindow = 1,\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyTextEditorSelectionService {\n public isElementSelected(\n documentEl: Document,\n element: HTMLElement,\n ): boolean {\n const selectedNode = this.getCurrentSelection(documentEl)?.anchorNode;\n /* istanbul ignore next */\n return !!(\n selectedNode &&\n (element.contains(selectedNode) ||\n (selectedNode.parentNode && element.contains(selectedNode.parentNode)))\n );\n }\n\n public getCurrentSelection(documentEl: Document): Selection | null {\n return documentEl.getSelection();\n }\n\n public getCurrentSelectionParentElement(\n documentEl: Document,\n ): Element | null | undefined {\n const selection = this.getCurrentSelection(documentEl);\n let selectedEl: Element | null;\n /* istanbul ignore else */\n if (\n selection &&\n selection.getRangeAt &&\n selection.getRangeAt(0).commonAncestorContainer\n ) {\n selectedEl = selection.getRangeAt(0).commonAncestorContainer as Element;\n selectedEl =\n selectedEl.nodeType !== 1 ? selectedEl.parentElement : selectedEl;\n } else {\n return undefined;\n }\n return selectedEl;\n }\n\n public getCurrentSelectionRange(\n documentEl: Document,\n windowEl: Window,\n ): Range | undefined {\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 } else if (documentEl.getSelection()?.getRangeAt) {\n return documentEl.getSelection()?.getRangeAt(0);\n }\n\n /* istanbul ignore next */\n return undefined;\n }\n\n public selectElement(\n documentEl: Document,\n windowEl: Window,\n element: HTMLElement,\n ): void {\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 } 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}\n","import { Injectable } from '@angular/core';\n\nimport { Observable } from 'rxjs';\n\nimport { EditorSetting } from '../types/editor-setting';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyTextEditorService {\n /**\n * A dictionary representing all active text editors and their settings.\n */\n public set editor(value: EditorSetting) {\n this.#editor = value;\n }\n\n public get editor(): EditorSetting {\n if (!this.#editor) {\n throw new Error('Editor has not been initialized.');\n }\n\n return this.#editor;\n }\n\n public get isInitialized(): boolean {\n return this.#editor !== undefined;\n }\n\n #editor: EditorSetting | undefined;\n\n /**\n * Returns the blur observable from the editor with the corresponding id.\n */\n public blurListener(): Observable<unknown> {\n return this.editor.blurObservable;\n }\n\n /**\n * Returns the click observable from the editor with the corresponding id.\n */\n public clickListener(): Observable<unknown> {\n return this.editor.clickObservable;\n }\n\n /**\n * Returns the command change observable from the editor with the corresponding id.\n */\n public commandChangeListener(): Observable<unknown> {\n return this.editor.commandChangeObservable;\n }\n\n /**\n * Returns the focus observable from the editor with the corresponding id.\n */\n public focusListener(): Observable<unknown> {\n return this.editor.focusObservable;\n }\n\n /**\n * Returns the input change observable from the editor with the corresponding id.\n */\n public inputListener(): Observable<unknown> {\n return this.editor.inputObservable;\n }\n\n /**\n * Returns the selection change observable from the editor with the corresponding id.\n */\n public selectionChangeListener(): Observable<unknown> {\n return this.editor.selectionChangeObservable;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { SkyAppWindowRef } from '@skyux/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\n\nimport { Subject, take } from 'rxjs';\n\nimport { STYLE_STATE_DEFAULTS } from '../defaults/style-state-defaults';\nimport { EditorCommand } from '../types/editor-command';\nimport { EditorSetting } from '../types/editor-setting';\nimport { SkyTextEditorStyleState } from '../types/style-state';\nimport { UrlModalResult } from '../url-modal/text-editor-url-modal-result';\nimport { UrlTarget } from '../url-modal/text-editor-url-target';\n\nimport { SkyTextEditorSelectionService } from './text-editor-selection.service';\nimport { SkyTextEditorService } from './text-editor.service';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyTextEditorAdapterService {\n readonly #resourceSvc = inject(SkyLibResourcesService);\n #selectionService: SkyTextEditorSelectionService;\n #textEditorService: SkyTextEditorService;\n #windowRef: SkyAppWindowRef;\n\n constructor(\n selectionService: SkyTextEditorSelectionService,\n textEditorService: SkyTextEditorService,\n windowService: SkyAppWindowRef,\n ) {\n this.#selectionService = selectionService;\n this.#textEditorService = textEditorService;\n this.#windowRef = windowService;\n }\n\n /**\n * Creates a text editor inside the supplied iframe element.\n */\n public initEditor(\n id: string,\n iframeElement: HTMLIFrameElement,\n styleState: SkyTextEditorStyleState,\n placeholder?: string,\n ): void {\n this.#textEditorService.editor = this.#createObservers(iframeElement);\n\n const documentEl = this.#getIframeDocumentEl();\n if (!documentEl) {\n return;\n }\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\n const style: SkyTextEditorStyleState = {\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\n public disableEditor(\n focusableChildren: HTMLElement[],\n textEditorNativeElement: HTMLElement,\n ): void {\n this.#setEditorDisabled(focusableChildren, textEditorNativeElement, true);\n }\n\n public enableEditor(\n focusableChildren: HTMLElement[],\n textEditorNativeElement: HTMLElement,\n ): void {\n this.#setEditorDisabled(focusableChildren, textEditorNativeElement, false);\n }\n\n /**\n * Executes a command on the text editor with the corresponding id.\n */\n public async execCommand(editorCommand: EditorCommand): Promise<void> {\n /* istanbul ignore else */\n if (this.#textEditorService.editor) {\n const documentEl = this.#getIframeDocumentEl();\n\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 } else {\n await navigator.clipboard.readText().then((clipText) => {\n /* istanbul ignore else */\n if (this.editorSelected()) {\n documentEl?.execCommand('insertHTML', false, clipText);\n\n this.focusEditor();\n this.#textEditorService.editor.commandChangeObservable.next();\n }\n });\n }\n } else {\n /* istanbul ignore else */\n if (this.editorSelected()) {\n documentEl?.execCommand(\n editorCommand.command,\n false,\n editorCommand.value,\n );\n\n this.focusEditor();\n this.#textEditorService.editor.commandChangeObservable.next();\n }\n }\n }\n }\n\n public getCurrentSelection(): Selection | null {\n const documentEl = this.#getIframeDocumentEl();\n if (documentEl) {\n return this.#selectionService.getCurrentSelection(documentEl);\n }\n return null;\n }\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 public getMergeFieldDataURI(text: string): string {\n const documentEl = this.#windowRef.nativeWindow.document;\n let textToUse = text;\n if (text.length > 18) {\n textToUse = text.substr(0, 15) + '...';\n }\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\n const context = canvasElement.getContext('2d');\n context.font = '12px Arial';\n context.textAlign = 'center';\n context.fillText(textToUse, 50, 15);\n\n context.globalCompositeOperation = 'destination-over';\n context.fillStyle = '#00FFFF';\n context.fillRect(0, 0, 100, 20);\n\n context.globalCompositeOperation = 'source-over';\n context.lineWidth = 2;\n context.strokeStyle = '#FF0000';\n context.strokeRect(0, 0, 100, 20);\n\n const result = canvasElement.toDataURL('image/png', 1.0);\n return result;\n }\n\n public getStyleState(): Partial<SkyTextEditorStyleState> {\n const documentEl = this.#getIframeDocumentEl();\n\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\n /* istanbul ignore next */\n return {};\n }\n\n public getEditorInnerHtml(): string {\n const documentEl = this.#getIframeDocumentEl();\n if (documentEl) {\n return this.#replaceHtmlCodes(documentEl.body.innerHTML);\n }\n return '';\n }\n\n public setEditorInnerHtml(value: string): void {\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\n public focusEditor(): void {\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 =\n this.#selectionService.getCurrentSelectionRange(\n iframeDocumentEl,\n windowEl,\n );\n const cursorIsNotActiveAndHasReset =\n currentSelection &&\n currentSelection.startOffset === 0 &&\n currentSelection.endOffset === 0;\n\n if (!this.editorSelected() || cursorIsNotActiveAndHasReset) {\n // focus the end of the editor\n const documentEl = this.#windowRef.nativeWindow.document;\n const editor = iframeDocumentEl.body as HTMLBodyElement;\n const range = documentEl.createRange();\n\n this.#textEditorService.editor.iframeElementRef.focus();\n editor.focus();\n\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 } else {\n // Cursor may not be active, restore it\n this.#textEditorService.editor.iframeElementRef.focus();\n iframeDocumentEl.body.focus();\n }\n }\n }\n }\n\n public getLink(): UrlModalResult | undefined {\n let link: UrlModalResult | undefined;\n const anchorEl = this.getSelectedAnchorTag();\n if (anchorEl && anchorEl.href) {\n link = {\n target:\n anchorEl.getAttribute('target') === '_blank'\n ? UrlTarget.NewWindow\n : UrlTarget.None,\n url: anchorEl.href,\n };\n }\n\n return link;\n }\n\n public getSelectedAnchorTag(): HTMLAnchorElement | null | undefined {\n const selectedEl = this.#getCurrentSelectionParentElement();\n\n if (selectedEl) {\n return this.#getParent(selectedEl, 'a') as HTMLAnchorElement;\n }\n\n return undefined;\n }\n\n public saveSelection(): Range | undefined {\n const documentEl = this.#getIframeDocumentEl();\n const windowEl = this.#getContentWindowEl();\n if (documentEl && windowEl) {\n return this.#selectionService.getCurrentSelectionRange(\n documentEl,\n windowEl,\n );\n }\n return undefined;\n }\n\n public selectElement(element: HTMLElement): void {\n const documentEl = this.#getIframeDocumentEl();\n const windowEl = this.#getContentWindowEl();\n if (documentEl && windowEl) {\n this.#selectionService.selectElement(documentEl, windowEl, element);\n }\n }\n\n public setErrorAttributes(\n errorId: string,\n errors: ValidationErrors | null,\n ): void {\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 } else {\n documentEl?.body.removeAttribute('aria-errormessage');\n }\n }\n\n public setLabelAttribute(label: string | undefined): void {\n if (label) {\n const documentEl = this.#getIframeDocumentEl();\n documentEl?.body.setAttribute('aria-label', label);\n }\n }\n\n public setPlaceholder(placeholder?: string): void {\n const documentEl = this.#getIframeDocumentEl();\n documentEl?.body.setAttribute('data-placeholder', placeholder || '');\n }\n\n public setRequiredAttribute(required: boolean): void {\n const documentEl = this.#getIframeDocumentEl();\n documentEl?.body.setAttribute('aria-required', required.toString());\n }\n\n public async setFontSize(fontSize: number): Promise<void> {\n const doc = this.#getIframeDocumentEl();\n await this.execCommand({ command: 'fontSize', value: '1' });\n if (doc) {\n const fontElements: HTMLElement[] = Array.from(\n doc.querySelectorAll('font[size=\"1\"]'),\n );\n for (const element of fontElements) {\n element.removeAttribute('size');\n element.style.fontSize = fontSize + 'px';\n }\n this.#cleanUpBlankStyleTags(doc);\n }\n\n this.focusEditor();\n this.#textEditorService.editor.commandChangeObservable.next();\n }\n\n public removeObservers(setting: EditorSetting): void {\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(\n 'selectionchange',\n setting.selectionListener,\n );\n documentEl.removeEventListener('input', setting.selectionListener);\n documentEl.removeEventListener('mousedown', setting.clickListener);\n documentEl.body.removeEventListener('paste', setting.pasteListener);\n }\n }\n\n #getContentWindowEl(): Window | undefined {\n return this.#textEditorService.editor.iframeElementRef\n .contentWindow as Window;\n }\n\n #getChildSelectedAnchorTags(): Element[] {\n const selectedRange = this.getCurrentSelection()?.getRangeAt(0);\n if (selectedRange && selectedRange.toString().length <= 0) {\n return [];\n }\n\n const parentElement = this.#getCurrentSelectionParentElement();\n\n let childElements: HTMLAnchorElement[] = [];\n /* istanbul ignore else */\n if (parentElement) {\n childElements = Array.from(parentElement.querySelectorAll('a'));\n }\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 (\n (selectedRange.compareBoundaryPoints(\n Range.START_TO_START,\n tempRange,\n ) !== -1 &&\n selectedRange.compareBoundaryPoints(\n Range.START_TO_END,\n tempRange,\n ) !== 1) ||\n (selectedRange.compareBoundaryPoints(\n Range.END_TO_START,\n tempRange,\n ) !== -1 &&\n selectedRange.compareBoundaryPoints(\n Range.END_TO_END,\n tempRange,\n ) !== 1)\n );\n }\n }\n\n // Normal non-IE\n return (\n !!element && !!element.href && selectedRange?.intersectsNode(element)\n );\n });\n }\n\n #getIframeDocumentEl(): Document | undefined {\n const contentWindowEl = this.#getContentWindowEl();\n /* istanbul ignore else */\n if (contentWindowEl) {\n return contentWindowEl.document;\n }\n\n /* istanbul ignore next */\n return this.#textEditorService.editor.iframeElementRef\n .contentDocument as Document;\n }\n\n #getFontSize(): string {\n let fontSize = STYLE_STATE_DEFAULTS.fontSize.toString();\n const selection = this.getCurrentSelection();\n /* istanbul ignore else */\n if (\n selection &&\n selection.anchorNode &&\n selection.anchorNode.parentElement\n ) {\n let element = selection.anchorNode as HTMLElement | null | undefined;\n if (element?.nodeType !== 1) {\n element = element?.parentElement;\n }\n const computedStyle = window.getComputedStyle(element as Element);\n /* istanbul ignore else */\n if (computedStyle) {\n fontSize = computedStyle.getPropertyValue('font-size');\n }\n }\n return fontSize;\n }\n\n #createObservers(element: HTMLIFrameElement): EditorSetting {\n /* istanbul ignore next */\n const documentEl = element.contentWindow\n ? element.contentWindow.document\n : element.contentDocument;\n\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\n const selectionObservable = new Subject<void>();\n const selectionListener = (): void => selectionObservable.next();\n const clickObservable = new Subject<void>();\n const clickListener = (): void => clickObservable.next();\n const pasteListener = this.#getPasteOverride();\n const blurObservable = new Subject<void>();\n const blurListener = (): void => blurObservable.next();\n const focusObservable = new Subject<void>();\n const focusListener = (): void => focusObservable.next();\n const inputObservable = new Subject<void>();\n const inputListener = (): void => inputObservable.next();\n\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\n #getPasteOverride(): (e: ClipboardEvent) => void {\n /* istanbul ignore next */\n return (e: ClipboardEvent): void => {\n e.preventDefault();\n const text = e.clipboardData?.getData('text/plain');\n\n if (text !== undefined) {\n void this.execCommand({\n command: 'insertHTML',\n value: text.toString(),\n });\n }\n };\n }\n\n #getCurrentSelectionParentElement(): Element | null | undefined {\n const documentEl = this.#getIframeDocumentEl();\n if (documentEl) {\n return this.#selectionService.getCurrentSelectionParentElement(\n documentEl,\n );\n }\n return undefined;\n }\n\n #getColor(documentEl: Document, selector: string): string {\n const commandValue = documentEl.queryCommandValue(selector);\n\n // Edge is weird and returns numbers\n /* istanbul ignore if */\n if (typeof commandValue === 'number') {\n /* istanbul ignore next */\n return (\n 'rgb(' +\n (commandValue & 0xff) +\n ', ' +\n ((commandValue & 0xff00) >> 8) +\n ', ' +\n ((commandValue & 0xff0000) >> 16) +\n ')'\n );\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\n #hasLink(): boolean {\n const anchorEl = this.getSelectedAnchorTag();\n const childAnchorEls = this.#getChildSelectedAnchorTags();\n /* istanbul ignore next */\n return childAnchorEls.length > 0 || (!!anchorEl && !!anchorEl.href);\n }\n\n #getParent(element: Element, tag: string): Element | undefined {\n let currentNode: Element | null = 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\n public editorSelected(): boolean {\n const documentEl = this.#getIframeDocumentEl();\n if (documentEl) {\n return this.#selectionService.isElementSelected(\n documentEl,\n documentEl.body,\n );\n }\n return false;\n }\n\n #cleanUpBlankStyleTags(doc: Document): void {\n const orphanElements: HTMLElement[] = Array.from(\n doc.querySelectorAll('font,span,*[style=\"\"]'),\n );\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 (\n (tagName === 'FONT' || tagName === 'SPAN') &&\n (element.attributes.length === 0 || !element.hasChildNodes)\n );\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\n // Certain values are encoded in html and need to be decoded\n #replaceHtmlCodes(str: string): string {\n return str\n .replace(/&nbsp;/, String.fromCharCode(160))\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&amp;/g, '&');\n }\n\n #setEditorDisabled(\n focusableChildren: HTMLElement[],\n textEditorNativeElement: HTMLElement,\n disabled: boolean,\n ): void {\n textEditorNativeElement.style.pointerEvents = disabled ? 'none' : 'auto';\n textEditorNativeElement.setAttribute(\n 'aria-disabled',\n disabled ? 'true' : 'false',\n );\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(\n 'contenteditable',\n disabled ? 'false' : 'true',\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnDestroy,\n OnInit,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport {\n SkyDropdownMessage,\n SkyDropdownMessageType,\n SkyDropdownModule,\n} from '@skyux/popovers';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport he from 'he';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { SkyTextEditorResourcesModule } from '../../shared/sky-text-editor-resources.module';\nimport { SkyTextEditorAdapterService } from '../services/text-editor-adapter.service';\nimport { SkyTextEditorMenuType } from '../types/menu-type';\nimport { SkyTextEditorMergeField } from '../types/text-editor-merge-field';\n\nconst FORMAT_MENU_ACTION = 'skyux_text_editor_format_menu_action_';\nconst EDIT_MENU_ACTION = 'skyux_text_editor_edit_menu_action_';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-text-editor-menubar',\n templateUrl: './text-editor-menubar.component.html',\n styleUrls: ['./text-editor-menubar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SkyDropdownModule,\n SkyTextEditorResourcesModule,\n SkyThemeModule,\n SkyToolbarModule,\n ],\n})\nexport class SkyTextEditorMenubarComponent implements OnDestroy, OnInit {\n @Input()\n public editorFocusStream = new Subject<void>();\n\n @Input()\n public menus: SkyTextEditorMenuType[] = [];\n\n @Input()\n public mergeFields: SkyTextEditorMergeField[] = [];\n\n @Input({ transform: booleanAttribute })\n public disabled = false;\n\n public editDropdownStream = new Subject<SkyDropdownMessage>();\n\n public editItems:\n | {\n function?: () => void;\n isDivider?: boolean;\n label?: string;\n keyShortcut?: string;\n }[]\n | undefined;\n\n public formatDropdownStream = new Subject<SkyDropdownMessage>();\n\n public formatItems:\n | {\n function?: () => void;\n isDivider?: boolean;\n label?: string;\n keyShortcut?: string;\n }[]\n | undefined;\n\n public mergeFieldDropdownStream = new Subject<SkyDropdownMessage>();\n\n #ngUnsubscribe = new Subject<void>();\n\n readonly #adapterService = inject(SkyTextEditorAdapterService);\n readonly #resources = inject(SkyLibResourcesService);\n\n public ngOnInit(): void {\n this.editorFocusStream\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#closeDropdowns();\n });\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: (): void => this.execCommand('bold'),\n label: resources.bold,\n keyShortcut: resources.boldShort,\n },\n {\n function: (): void => this.execCommand('italic'),\n label: resources.italic,\n keyShortcut: resources.italicShort,\n },\n {\n function: (): void => this.execCommand('underline'),\n label: resources.underline,\n keyShortcut: resources.underlineShort,\n },\n {\n function: (): void => this.execCommand('strikethrough'),\n label: resources.strikethrough,\n },\n {\n isDivider: true,\n },\n {\n function: (): void => this.#clearFormat(),\n label: resources.clearFormatting,\n },\n ];\n this.editItems = [\n {\n function: (): void => this.execCommand('undo'),\n label: resources.undo,\n keyShortcut: resources.undoShort,\n },\n {\n function: (): void => this.execCommand('redo'),\n label: resources.redo,\n keyShortcut: resources.redoShort,\n },\n {\n isDivider: true,\n },\n {\n function: (): void => this.execCommand('cut'),\n label: resources.cut,\n keyShortcut: resources.cutShort,\n },\n {\n function: (): void => this.execCommand('copy'),\n label: resources.copy,\n keyShortcut: resources.copyShort,\n },\n {\n function: (): void => this.execCommand('paste'),\n label: resources.paste,\n keyShortcut: resources.pasteShort,\n },\n {\n isDivider: true,\n },\n {\n function: (): void => this.execCommand('selectAll'),\n label: resources.selectAll,\n keyShortcut: resources.selectAllShort,\n },\n ];\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public execCommand(command: string, value = ''): void {\n void this.#adapterService.execCommand({\n command: command,\n value: value,\n });\n }\n\n public insertMergeField(field: SkyTextEditorMergeField): void {\n this.execCommand(\n 'insertHTML',\n '<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 }\n\n #closeDropdowns(): void {\n this.editDropdownStream.next({ type: SkyDropdownMessageType.Close });\n this.formatDropdownStream.next({ type: SkyDropdownMessageType.Close });\n this.mergeFieldDropdownStream.next({ type: SkyDropdownMessageType.Close });\n }\n\n #clearFormat(): void {\n const currentSelection = this.#adapterService.getCurrentSelection();\n /* istanbul ignore else */\n if (\n currentSelection &&\n currentSelection.rangeCount > 0 &&\n currentSelection.getRangeAt(0).toString().length <= 0\n ) {\n this.execCommand('selectAll');\n }\n this.execCommand('removeFormat');\n }\n}\n","@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","import { SkyTextEditorLinkWindowOptionsType } from '../types/link-window-options-type';\n\nimport { UrlModalResult } from './text-editor-url-modal-result';\n\n/**\n * @internal\n */\nexport class SkyUrlModalContext {\n public urlResult: UrlModalResult | undefined;\n public linkWindowOptions: SkyTextEditorLinkWindowOptionsType[] | undefined;\n}\n","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 { SkyTabIndex, SkyTabsModule } from '@skyux/tabs';\nimport { SkyValidation } from '@skyux/validation';\n\nimport { SkyTextEditorResourcesModule } from '../../shared/sky-text-editor-resources.module';\n\nimport { SkyUrlModalContext } from './text-editor-url-modal-context';\nimport { UrlModalResult } from './text-editor-url-modal-result';\nimport { UrlTarget } from './text-editor-url-target';\n\nconst emailKey = 'mailto:';\nconst queryStringParamKey = '?Subject=';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-text-editor-url-modal',\n templateUrl: './text-editor-url-modal.component.html',\n styleUrls: ['./text-editor-url-modal.component.scss'],\n imports: [\n FormsModule,\n SkyModalModule,\n SkyIdModule,\n SkyInputBoxModule,\n SkyTabsModule,\n SkyTextEditorResourcesModule,\n ],\n})\nexport class SkyTextEditorUrlModalComponent {\n public set activeTab(value: number) {\n this.#_activeTab = value;\n this.valid = this.#isValid();\n }\n\n public get activeTab(): number {\n return this.#_activeTab;\n }\n\n public set emailAddress(value: string) {\n this.#_emailAddress = value;\n this.valid = this.#isValid();\n }\n\n public get emailAddress(): string {\n return this.#_emailAddress;\n }\n\n public set url(value: string) {\n this.#_url = value;\n this.valid = this.#isValid();\n }\n\n public get url(): string {\n return this.#_url;\n }\n\n public emailAddressValid = false;\n public allowAllOpenLinkOptions = true;\n public openLinksInNewWindowOnly = false;\n public subject = '';\n public target: number | string = 0;\n public valid = false;\n\n #_activeTab = 0;\n #_emailAddress = '';\n #_url = 'https://';\n\n readonly #modalContext = inject(SkyUrlModalContext);\n readonly #modalInstance = inject(SkyModalInstance);\n\n constructor() {\n const linkWindowOptions = this.#modalContext.linkWindowOptions;\n\n if (linkWindowOptions?.length === 1) {\n this.allowAllOpenLinkOptions = false;\n if (linkWindowOptions[0] === 'new') {\n this.openLinksInNewWindowOnly = true;\n this.target = 1;\n } else {\n this.target = 0;\n }\n }\n\n if (this.#modalContext.urlResult) {\n if (this.#modalContext.urlResult.url.startsWith(emailKey)) {\n this.emailAddress = this.#modalContext.urlResult.url.replace(\n emailKey,\n '',\n );\n\n let queryStringIndex = this.emailAddress.indexOf(queryStringParamKey);\n queryStringIndex =\n queryStringIndex > -1\n ? queryStringIndex\n : this.emailAddress.indexOf(queryStringParamKey.toLowerCase());\n\n /* istanbul ignore else */\n if (queryStringIndex > -1) {\n this.subject = decodeURI(this.emailAddress).slice(\n queryStringIndex + queryStringParamKey.length,\n );\n this.emailAddress = this.emailAddress.slice(0, queryStringIndex);\n }\n\n // Set active tab to email\n this.activeTab = 1;\n } else {\n this.url = this.#modalContext.urlResult.url;\n this.target = this.#modalContext.urlResult.target as any;\n\n // set active tab to web page\n this.activeTab = 0;\n }\n }\n }\n\n public activeTabChanged(value: SkyTabIndex): void {\n this.activeTab = Number(value);\n }\n\n public save(): void {\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 as string, undefined)\n : UrlTarget.None,\n } as UrlModalResult);\n } else {\n this.#modalInstance.save({\n url: this.#getEmailUrl(),\n target: UrlTarget.None,\n } as UrlModalResult);\n }\n }\n }\n\n public cancel(): void {\n this.#modalInstance.cancel();\n }\n\n #getEmailUrl(): string {\n return (\n emailKey +\n this.emailAddress +\n (this.subject ? '?Subject=' + encodeURI(this.subject) : '')\n );\n }\n\n #isValid(): boolean {\n if (this.activeTab === 0) {\n return !!this.url && SkyValidation.isUrl(this.url);\n }\n return !!this.emailAddress && SkyValidation.isEmail(this.emailAddress);\n }\n}\n","<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","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n SkyColorpickerMessage,\n SkyColorpickerMessageType,\n SkyColorpickerModule,\n SkyColorpickerOutput,\n} from '@skyux/colorpicker';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyModalCloseArgs, SkyModalService } from '@skyux/modals';\nimport {\n SkyDropdownMessage,\n SkyDropdownMessageType,\n SkyDropdownModule,\n} from '@skyux/popovers';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { STYLE_STATE_DEFAULTS } from '../defaults/style-state-defaults';\nimport { SkyTextEditorAdapterService } from '../services/text-editor-adapter.service';\nimport { SkyTextEditorFont } from '../types/font-state';\nimport { SkyTextEditorLinkWindowOptionsType } from '../types/link-window-options-type';\nimport { SkyTextEditorStyleState } from '../types/style-state';\nimport { SkyTextEditorToolbarActionType } from '../types/toolbar-action-type';\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';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-text-editor-toolbar',\n templateUrl: './text-editor-toolbar.component.html',\n styleUrls: ['./text-editor-toolbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n SkyCheckboxModule,\n SkyColorpickerModule,\n SkyDropdownModule,\n SkyIconModule,\n SkyThemeModule,\n SkyToolbarModule,\n ],\n})\nexport class SkyTextEditorToolbarComponent implements OnInit {\n @Input()\n public set editorFocusStream(value: Subject<void>) {\n this.#_editorFocusStream = value;\n this.#subscribeEditorFocus();\n }\n\n public get editorFocusStream(): Subject<void> {\n return this.#_editorFocusStream;\n }\n\n @Input()\n public fontList: SkyTextEditorFont[] = [];\n\n @Input()\n public fontSizeList: number[] = [];\n\n @Input()\n public toolbarActions: SkyTextEditorToolbarActionType[] = [];\n\n @Input()\n public linkWindowOptions: SkyTextEditorLinkWindowOptionsType[] = [];\n\n @Input()\n public set styleState(value: SkyTextEditorStyleState) {\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 } else {\n this.styleStateFontName = this.#getFontName(value.font);\n }\n }\n }\n\n public get styleState(): SkyTextEditorStyleState {\n return this.#_styleState;\n }\n\n @Input({ transform: booleanAttribute })\n public disabled = false;\n\n public backColorpickerStream = new Subject<SkyColorpickerMessage>();\n public colorpickerStream = new Subject<SkyColorpickerMessage>();\n public fontPickerStream = new Subject<SkyDropdownMessage>();\n public fontSizeStream = new Subject<SkyDropdownMessage>();\n public styleStateFontName: string | undefined;\n\n #editorFocusStreamSub: Subscription | undefined;\n #ngUnsubscribe = new Subject<void>();\n\n #_editorFocusStream = new Subject<void>();\n #_styleState = STYLE_STATE_DEFAULTS;\n\n readonly #adapterService = inject(SkyTextEditorAdapterService);\n readonly #changeDetector = inject(ChangeDetectorRef);\n readonly #modalService = inject(SkyModalService);\n\n public ngOnInit(): void {\n this.#subscribeEditorFocus();\n }\n\n public execCommand(command: string, value = ''): void {\n void this.#adapterService.execCommand({\n command: command,\n value: value,\n });\n\n this.styleState = {\n ...this.styleState,\n ...this.#adapterService.getStyleState(),\n };\n }\n\n public toggleFontStyle(\n currentState: boolean,\n newState: boolean,\n command: string,\n ): void {\n if (currentState !== newState) {\n this.execCommand(command);\n }\n\n // Force sky-checkbox to show changes on user's initial click.\n this.#changeDetector.detectChanges();\n }\n\n public link(): void {\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: (): SkyUrlModalContext => {\n const context = new SkyUrlModalContext();\n context.urlResult = currentLink;\n context.linkWindowOptions = this.linkWindowOptions;\n\n return context;\n },\n },\n ]);\n inputModal.closed.subscribe((result: SkyModalCloseArgs) => {\n if (result.reason === 'save' && priorSelection) {\n if (currentLink) {\n const anchor = this.#adapterService.getSelectedAnchorTag();\n\n if (anchor) {\n this.#adapterService.selectElement(anchor);\n }\n }\n\n this.execCommand('unlink');\n if (result.data.target === UrlTarget.None) {\n // Current window\n this.execCommand('createLink', result.data.url);\n } else {\n // New Window\n const sText = this.#adapterService.getCurrentSelection();\n this.execCommand(\n 'insertHTML',\n '<a href=\"' +\n result.data.url +\n '\" rel=\"noopener noreferrer\" target=\"_blank\">' +\n sText +\n '</a>',\n );\n }\n }\n });\n }\n\n public unlink(): void {\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\n public changeFontSize(size: number): void {\n void this.#adapterService.setFontSize(size);\n this.styleState = {\n ...this.styleState,\n ...this.#adapterService.getStyleState(),\n };\n }\n\n public onColorpickerColorChanged(\n color: SkyColorpickerOutput,\n isBackground = false,\n ): void {\n if (isBackground) {\n this.execCommand('backColor', color.rgbaText);\n } else {\n this.execCommand('foreColor', color.hex);\n }\n }\n\n #subscribeEditorFocus(): void {\n this.#editorFocusStreamSub?.unsubscribe();\n\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\n #closeDropdowns(): void {\n const message: SkyColorpickerMessage = {\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\n #getFontName(fontName: string): string | undefined {\n for (const skyTextEditorFont of this.fontList) {\n if (fontName.replace(/['\"]+/g, '') === skyTextEditorFont.name) {\n return skyTextEditorFont.name;\n }\n }\n\n /* istanbul ignore next */\n return undefined;\n }\n}\n","@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","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n Input,\n NgZone,\n OnDestroy,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { SkyCoreAdapterService, SkyIdModule, SkyIdService } from '@skyux/core';\nimport {\n SKY_FORM_ERRORS_ENABLED,\n SkyFormErrorsModule,\n SkyInputBoxHostService,\n SkyRequiredStateDirective,\n} from '@skyux/forms';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyToolbarModule } from '@skyux/layout';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyTextEditorResourcesModule } from '../shared/sky-text-editor-resources.module';\n\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 { SkyTextEditorFont } from './types/font-state';\nimport { SkyTextEditorLinkWindowOptionsType } from './types/link-window-options-type';\nimport { SkyTextEditorMenuType } from './types/menu-type';\nimport { SkyTextEditorStyleState } from './types/style-state';\nimport { SkyTextEditorMergeField } from './types/text-editor-merge-field';\nimport { SkyTextEditorToolbarActionType } from './types/toolbar-action-type';\n\n/**\n * The text editor component lets users format and manipulate text.\n */\n@Component({\n selector: 'sky-text-editor',\n templateUrl: './text-editor.component.html',\n styleUrls: ['./text-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n SkyTextEditorService,\n SkyTextEditorSelectionService,\n SkyTextEditorAdapterService,\n { provide: SKY_FORM_ERRORS_ENABLED, useValue: true },\n ],\n hostDirectives: [\n {\n directive: SkyRequiredStateDirective,\n inputs: ['required'],\n },\n ],\n imports: [\n CommonModule,\n SkyHelpInlineModule,\n SkyIdModule,\n SkyTextEditorMenubarComponent,\n SkyTextEditorToolbarComponent,\n SkyThemeModule,\n SkyToolbarModule,\n SkyFormErrorsModule,\n SkyTextEditorResourcesModule,\n ],\n})\nexport class SkyTextEditorComponent\n implements AfterViewInit, OnDestroy, ControlValueAccessor\n{\n /**\n * Whether to put focus on the editor after it renders.\n */\n @Input()\n public autofocus: boolean | undefined = false;\n\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 @Input({ transform: booleanAttribute })\n public set disabled(value: boolean) {\n if (value !== this.disabled) {\n this.#_disabled = value;\n this.#applyDisabledState();\n }\n }\n\n public get disabled(): boolean {\n return this.#_disabled;\n }\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 @Input()\n public set fontList(value: SkyTextEditorFont[] | undefined) {\n this.#_fontList = value || FONT_LIST_DEFAULTS;\n }\n\n public get fontList(): SkyTextEditorFont[] {\n return this.#_fontList;\n }\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 @Input()\n public set fontSizeList(value: number[] | undefined) {\n this.#_fontSizeList = value || FONT_SIZE_LIST_DEFAULTS;\n }\n\n public get fontSizeList(): number[] {\n return this.#_fontSizeList;\n }\n\n /**\n * The content of the help popover. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the text editor. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpPopoverContent: string | TemplateRef<unknown> | undefined;\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is\n * also specified.\n */\n @Input()\n public helpPopoverTitle: string | undefined;\n\n /**\n * [Persistent inline help text](https://developer.blackbaud.com/skyux/design/guidelines/user-assistance#inline-help) that provides\n * additional context to the user.\n */\n @Input()\n public hintText: string | undefined;\n\n /**\n * The unique ID attribute for the text editor.\n * By default, the component generates a random ID.\n */\n @Input()\n public set id(value: string | undefined) {\n this.#id = value || this.#defaultId;\n }\n\n public get id(): string {\n return this.#id;\n }\n\n /**\n * The initial styles for all content, including background color, font size, and link state.\n */\n @Input()\n public set initialStyleState(state: SkyTextEditorStyleState | undefined) {\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\n public get initialStyleState(): SkyTextEditorStyleState {\n return this.#_initialStyleState;\n }\n\n /**\n * The text to display as the text editor's label.\n */\n @Input()\n public set labelText(value: string | undefined) {\n this.#_labelText = value;\n this.#updateA11yAttributes();\n }\n\n public get labelText(): string | undefined {\n return this.#_labelText;\n }\n\n /**\n * The menus to include in the menu bar.\n * @default [ 'edit', 'format' ]\n */\n @Input()\n public set menus(value: SkyTextEditorMenuType[] | undefined) {\n this.#_menus = value || MENU_DEFAULTS;\n }\n\n public get menus(): SkyTextEditorMenuType[] {\n return this.#_menus;\n }\n\n /**\n * The merge fields to include in the merge field menu.\n */\n @Input()\n public set mergeFields(value: SkyTextEditorMergeField[] | undefined) {\n this.#_mergeFields = value || [];\n }\n\n public get mergeFields(): SkyTextEditorMergeField[] {\n return this.#_mergeFields;\n }\n\n /**\n * Placeholder text to display when the text entry area is empty.\n */\n @Input()\n public set placeholder(value: string | undefined) {\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\n public get placeholder(): string {\n return this.#_placeholder;\n }\n\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 @Input({ transform: booleanAttribute })\n @HostBinding('class.sky-form-field-stacked')\n public stacked = false;\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 @Input()\n public set toolbarActions(\n value: SkyTextEditorToolbarActionType[] | undefined,\n ) {\n this.#_toolbarActions = value || TOOLBAR_ACTION_DEFAULTS;\n }\n\n public get toolbarActions(): SkyTextEditorToolbarActionType[] {\n return this.#_toolbarActions;\n }\n\n /**\n * The target window options for adding a hyperlink.\n * @default [ 'new', 'existing' ]\n */\n @Input()\n public set linkWindowOptions(\n value: SkyTextEditorLinkWindowOptionsType[] | undefined,\n ) {\n this.#_linkWindowOptions = value ?? LINK_WINDOW_OPTIONS_DEFAULTS;\n }\n\n public get linkWindowOptions(): SkyTextEditorLinkWindowOptionsType[] {\n return this.#_linkWindowOptions;\n }\n\n /**\n * A help key that identifies the global help content to display. When specified along with `labelText`, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the text editor label. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application. This property only applies when `labelText` is also specified.\n */\n @Input()\n public helpKey: string | undefined;\n\n @ViewChild('iframe')\n public iframeRef: ElementRef | undefined;\n\n /**\n * The internal value of the control.\n */\n public set value(value: string | undefined) {\n // Normalize value and set any empty state to an empty string.\n let normalizedValue: string;\n const valueTrimmed = value?.trim();\n\n if (\n !value ||\n valueTrimmed === '<p></p>' ||\n valueTrimmed === '<br>' ||\n valueTrimmed === '<p><br></p>'\n ) {\n normalizedValue = '';\n } else {\n normalizedValue = value;\n }\n\n normalizedValue = this.#sanitizationService\n .sanitize(normalizedValue)\n .trim();\n\n if (this.#_value !== normalizedValue) {\n this.#_value = normalizedValue;\n\n // Update angular form control if model has been normalized.\n /* istanbul ignore else */\n if (\n this.ngControl?.control &&\n normalizedValue !== this.ngControl.control.value\n ) {\n this.ngControl.control.setValue(normalizedValue, {\n emitModelToViewChange: false,\n });\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\n public get value(): string {\n return this.#_value;\n }\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n public inputTemplateRef: TemplateRef<unknown> | undefined;\n\n public editorFocusStream = new Subject<void>();\n\n @HostBinding('class.sky-form-control')\n public formControlClass = !!inject(SkyInputBoxHostService, {\n optional: true,\n });\n\n protected editorFocused = false;\n\n #defaultId: string;\n #id: string;\n #focusInitialized = false;\n #initialized = false;\n #ngUnsubscribe = new Subject<void>();\n\n #_fontList = FONT_LIST_DEFAULTS;\n #_fontSizeList = FONT_SIZE_LIST_DEFAULTS;\n #_labelText: string | undefined;\n #_mergeFields: SkyTextEditorMergeField[] = [];\n #_menus = MENU_DEFAULTS;\n #_toolbarActions: SkyTextEditorToolbarActionType[] = TOOLBAR_ACTION_DEFAULTS;\n #_linkWindowOptions = LINK_WINDOW_OPTIONS_DEFAULTS;\n #_disabled = false;\n #_initialStyleState = Object.assign({}, STYLE_STATE_DEFAULTS);\n #_placeholder = '';\n #_value = '<p></p>';\n\n readonly #adapterService = inject(SkyTextEditorAdapterService);\n readonly #changeDetector = inject(ChangeDetectorRef);\n readonly #coreAdapterService = inject(SkyCoreAdapterService);\n readonly #editorService = inject(SkyTextEditorService);\n readonly #idSvc = inject(SkyIdService);\n readonly #sanitizationService = inject(SkyTextSanitizationService);\n readonly #zone = inject(NgZone);\n\n protected readonly errorId = this.#idSvc.generateId();\n protected readonly ngControl = inject(NgControl);\n protected readonly requiredState = inject(SkyRequiredStateDirective);\n\n constructor() {\n this.#id = this.#defaultId = this.#idSvc.generateId();\n this.ngControl.valueAccessor = this;\n }\n\n public ngAfterViewInit(): void {\n this.#initIframe();\n }\n\n public ngOnDestroy(): void {\n this.#adapterService.removeObservers(this.#editorService.editor);\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public onIframeLoad(): void {\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 /**\n * Implemented as part of ControlValueAccessor.\n */\n public writeValue(value: string): void {\n this.value = value;\n\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 /**\n * Implemented as part of ControlValueAccessor.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public registerOnChange(fn: (value: any) => void): void {\n this.#_onChange = fn;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public registerOnTouched(fn: () => void): void {\n this.#_onTouched = fn;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n #checkAutofocusAndFocus(): void {\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\n #updateStyle(): void {\n this.#_initialStyleState = {\n ...this.#_initialStyleState,\n ...this.#adapterService.getStyleState(),\n };\n }\n\n #initIframe(): void {\n this.#adapterService.initEditor(\n this.id,\n (this.iframeRef as ElementRef).nativeElement,\n this.initialStyleState,\n this.placeholder,\n );\n\n this.ngControl.statusChanges\n ?.pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#updateA11yAttributes();\n\n // Trigger change detection when the field status is modified programmatically.\n this.#changeDetector.markForCheck();\n });\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\n this.#editorService\n .selectionChangeListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#updateStyle();\n this.editorFocusStream.next();\n });\n\n this.#editorService\n .clickListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.editorFocusStream.next();\n });\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\n this.#editorService\n .commandChangeListener()\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#updateStyle();\n this.#viewToModelUpdate();\n });\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\n this.#adapterService.setEditorInnerHtml(this.#_value);\n this.#updateA11yAttributes();\n\n /* istanbul ignore next */\n if (this.autofocus) {\n this.#adapterService.focusEditor();\n }\n\n this.#applyDisabledState();\n\n this.#initialized = true;\n this.#focusInitialized = false;\n\n this.#checkAutofocusAndFocus();\n }\n\n #updateA11yAttributes(): void {\n if (this.#editorService.isInitialized) {\n this.#adapterService.setLabelAttribute(this.labelText);\n this.#adapterService.setErrorAttributes(\n this.labelText ? this.errorId : '',\n this.ngControl.errors,\n );\n this.#adapterService.setRequiredAttribute(\n this.requiredState.isRequired(),\n );\n }\n }\n\n #viewToModelUpdate(emitChange = true): void {\n this.value = this.#adapterService.getEditorInnerHtml();\n /* istanbul ignore else */\n if (emitChange) {\n this.#_onChange(this.#_value);\n }\n }\n\n #applyDisabledState(): void {\n // Update focusableChildren inside the iframe.\n let focusableChildren: HTMLElement[];\n /* istanbul ignore else */\n if (this.iframeRef?.nativeElement.contentDocument?.body) {\n focusableChildren = this.#coreAdapterService.getFocusableChildren(\n this.iframeRef.nativeElement.contentDocument.body,\n {\n ignoreVisibility: true,\n ignoreTabIndex: true,\n },\n );\n\n if (this.#_disabled) {\n this.#adapterService.disableEditor(\n focusableChildren,\n this.iframeRef.nativeElement,\n );\n } else {\n this.#adapterService.enableEditor(\n focusableChildren,\n this.iframeRef.nativeElement,\n );\n }\n this.#changeDetector.markForCheck();\n }\n }\n\n /* istanbul ignore next */\n #_onTouched = (): void => {};\n\n /* istanbul ignore next */\n #_onChange: (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n ) => void = () => {};\n}\n","<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","import { NgModule } from '@angular/core';\nimport { SkyFormErrorModule } from '@skyux/forms';\n\nimport { SkyTextEditorComponent } from './text-editor.component';\n\n@NgModule({\n imports: [SkyTextEditorComponent],\n exports: [SkyTextEditorComponent, SkyFormErrorModule],\n})\nexport class SkyTextEditorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.SkyTextSanitizationService","i1.SkyTextEditorSelectionService","i2.SkyTextEditorService","take","i1","i4","i2","i6","i3","i5","i7"],"mappings":"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"}