@skyux/text-editor 13.14.3 → 13.15.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.
@@ -1314,7 +1314,7 @@ class SkyTextEditorUrlModalComponent {
1314
1314
  return !!this.emailAddress && SkyValidation.isEmail(this.emailAddress);
1315
1315
  }
1316
1316
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: SkyTextEditorUrlModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1317
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", 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$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.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$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SkyModalModule }, { kind: "component", type: i2$1.λ5, selector: "sky-modal", inputs: ["formErrors", "headingText", "helpKey", "helpPopoverContent", "helpPopoverTitle", "ariaRole", "tiledBody", "ariaDescribedBy", "ariaLabelledBy", "layout"] }, { kind: "component", type: i2$1.λ2, selector: "sky-modal-content" }, { kind: "component", type: i2$1.λ3, selector: "sky-modal-footer" }, { kind: "component", type: i2$1.λ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: i1$3.λ10, selector: "sky-input-box", inputs: ["hasErrors", "disabled", "labelText", "characterLimit", "stacked", "helpPopoverTitle", "helpPopoverContent", "helpKey", "hintText"] }, { kind: "ngmodule", type: SkyTabsModule }, { kind: "component", type: i5$1.λ1, selector: "sky-tab", inputs: ["active", "disabled", "permalinkValue", "tabHeaderCount", "tabHeading", "tabIndexValue", "layout"], outputs: ["close"] }, { kind: "component", type: i5$1.λ2, selector: "sky-tabset", inputs: ["active", "ariaLabel", "ariaLabelledBy", "permalinkId", "tabStyle"], outputs: ["activeChange", "newTab", "openTab", "tabIndexesChange"] }, { kind: "ngmodule", type: SkyTextEditorResourcesModule }, { kind: "pipe", type: i5.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
1317
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", 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$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.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$2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SkyModalModule }, { kind: "component", type: i2$1.λ5, selector: "sky-modal", inputs: ["formErrors", "headingText", "helpKey", "helpPopoverContent", "helpPopoverTitle", "ariaRole", "tiledBody", "ariaDescribedBy", "ariaLabelledBy", "layout", "headingHidden"] }, { kind: "component", type: i2$1.λ2, selector: "sky-modal-content" }, { kind: "component", type: i2$1.λ3, selector: "sky-modal-footer" }, { kind: "component", type: i2$1.λ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: i1$3.λ10, selector: "sky-input-box", inputs: ["hasErrors", "disabled", "labelText", "characterLimit", "stacked", "helpPopoverTitle", "helpPopoverContent", "helpKey", "hintText"] }, { kind: "ngmodule", type: SkyTabsModule }, { kind: "component", type: i5$1.λ1, selector: "sky-tab", inputs: ["active", "disabled", "permalinkValue", "tabHeaderCount", "tabHeading", "tabIndexValue", "layout"], outputs: ["close"] }, { kind: "component", type: i5$1.λ2, selector: "sky-tabset", inputs: ["active", "ariaLabel", "ariaLabelledBy", "permalinkId", "tabStyle"], outputs: ["activeChange", "newTab", "openTab", "tabIndexesChange"] }, { kind: "ngmodule", type: SkyTextEditorResourcesModule }, { kind: "pipe", type: i5.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
1318
1318
  }
1319
1319
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: SkyTextEditorUrlModalComponent, decorators: [{
1320
1320
  type: Component,
@@ -1 +1 @@
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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"}
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyux/text-editor",
3
- "version": "13.14.3",
3
+ "version": "13.15.0",
4
4
  "author": "Blackbaud, Inc.",
5
5
  "keywords": [
6
6
  "blackbaud",
@@ -20,18 +20,18 @@
20
20
  "@angular/core": "^20.3.17",
21
21
  "@angular/forms": "^20.3.17",
22
22
  "@angular/platform-browser": "^20.3.17",
23
- "@skyux/colorpicker": "13.14.3",
24
- "@skyux/core": "13.14.3",
25
- "@skyux/forms": "13.14.3",
26
- "@skyux/help-inline": "13.14.3",
27
- "@skyux/i18n": "13.14.3",
28
- "@skyux/icon": "13.14.3",
29
- "@skyux/layout": "13.14.3",
30
- "@skyux/modals": "13.14.3",
31
- "@skyux/popovers": "13.14.3",
32
- "@skyux/tabs": "13.14.3",
33
- "@skyux/theme": "13.14.3",
34
- "@skyux/validation": "13.14.3"
23
+ "@skyux/colorpicker": "13.15.0",
24
+ "@skyux/core": "13.15.0",
25
+ "@skyux/forms": "13.15.0",
26
+ "@skyux/help-inline": "13.15.0",
27
+ "@skyux/i18n": "13.15.0",
28
+ "@skyux/icon": "13.15.0",
29
+ "@skyux/layout": "13.15.0",
30
+ "@skyux/modals": "13.15.0",
31
+ "@skyux/popovers": "13.15.0",
32
+ "@skyux/tabs": "13.15.0",
33
+ "@skyux/theme": "13.15.0",
34
+ "@skyux/validation": "13.15.0"
35
35
  },
36
36
  "dependencies": {
37
37
  "dompurify": "3.2.6",