@skyux/text-editor 4.0.0-beta.2 → 5.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/LICENSE +21 -0
  2. package/bundles/skyux-text-editor.umd.js +730 -562
  3. package/bundles/skyux-text-editor.umd.js.map +1 -1
  4. package/documentation.json +1961 -0
  5. package/esm2015/modules/rich-text-display/rich-text-display.component.js +17 -20
  6. package/esm2015/modules/rich-text-display/rich-text-display.module.js +22 -17
  7. package/esm2015/modules/shared/forms-utility.js +1 -1
  8. package/esm2015/modules/shared/sky-text-editor-resources.module.js +41 -0
  9. package/esm2015/modules/text-editor/defaults/font-list-defaults.js +1 -1
  10. package/esm2015/modules/text-editor/defaults/font-size-list-defaults.js +1 -1
  11. package/esm2015/modules/text-editor/defaults/menu-defaults.js +1 -1
  12. package/esm2015/modules/text-editor/defaults/style-state-defaults.js +1 -1
  13. package/esm2015/modules/text-editor/defaults/toolbar-action-defaults.js +1 -1
  14. package/esm2015/modules/text-editor/menubar/text-editor-menubar.component.js +32 -36
  15. package/esm2015/modules/text-editor/services/text-editor-adapter.service.js +17 -22
  16. package/esm2015/modules/text-editor/services/text-editor-selection.service.js +12 -13
  17. package/esm2015/modules/text-editor/services/text-editor.service.js +11 -11
  18. package/esm2015/modules/text-editor/services/text-sanitization.service.js +12 -14
  19. package/esm2015/modules/text-editor/text-editor.component.js +63 -68
  20. package/esm2015/modules/text-editor/text-editor.module.js +68 -27
  21. package/esm2015/modules/text-editor/toolbar/text-editor-toolbar.component.js +40 -42
  22. package/esm2015/modules/text-editor/types/editor-command.js +2 -1
  23. package/esm2015/modules/text-editor/types/editor-setting.js +2 -1
  24. package/esm2015/modules/text-editor/types/font-state.js +2 -1
  25. package/esm2015/modules/text-editor/types/menu-type.js +2 -1
  26. package/esm2015/modules/text-editor/types/style-state.js +2 -1
  27. package/esm2015/modules/text-editor/types/text-editor-merge-field.js +2 -1
  28. package/esm2015/modules/text-editor/types/toolbar-action-type.js +2 -1
  29. package/esm2015/modules/text-editor/url-modal/text-editor-url-modal-context.js +1 -1
  30. package/esm2015/modules/text-editor/url-modal/text-editor-url-modal-result.js +2 -1
  31. package/esm2015/modules/text-editor/url-modal/text-editor-url-modal.component.js +21 -18
  32. package/esm2015/modules/text-editor/url-modal/text-editor-url-target.js +1 -1
  33. package/esm2015/public-api.js +15 -0
  34. package/esm2015/skyux-text-editor.js +2 -14
  35. package/fesm2015/skyux-text-editor.js +359 -312
  36. package/fesm2015/skyux-text-editor.js.map +1 -1
  37. package/modules/rich-text-display/rich-text-display.component.d.ts +3 -0
  38. package/modules/rich-text-display/rich-text-display.module.d.ts +6 -0
  39. package/modules/shared/sky-text-editor-resources.module.d.ts +14 -0
  40. package/modules/text-editor/menubar/text-editor-menubar.component.d.ts +3 -0
  41. package/modules/text-editor/services/text-editor-adapter.service.d.ts +3 -0
  42. package/modules/text-editor/services/text-editor-selection.service.d.ts +3 -0
  43. package/modules/text-editor/services/text-editor.service.d.ts +3 -0
  44. package/modules/text-editor/services/text-sanitization.service.d.ts +3 -0
  45. package/modules/text-editor/text-editor.component.d.ts +3 -0
  46. package/modules/text-editor/text-editor.module.d.ts +21 -0
  47. package/modules/text-editor/toolbar/text-editor-toolbar.component.d.ts +3 -0
  48. package/modules/text-editor/url-modal/text-editor-url-modal.component.d.ts +3 -0
  49. package/package.json +20 -36
  50. package/public-api.d.ts +12 -0
  51. package/skyux-text-editor.d.ts +2 -13
  52. package/CHANGELOG.md +0 -13
  53. package/bundles/skyux-text-editor.umd.min.js +0 -2
  54. package/bundles/skyux-text-editor.umd.min.js.map +0 -1
  55. package/esm2015/plugin-resources/text-editor-resources-provider.js +0 -16
  56. package/esm2015/plugin-resources/text-editor-resources.module.js +0 -19
  57. package/esm2015/public_api.js +0 -3
  58. package/esm5/modules/rich-text-display/rich-text-display.component.js +0 -44
  59. package/esm5/modules/rich-text-display/rich-text-display.module.js +0 -24
  60. package/esm5/modules/shared/forms-utility.js +0 -14
  61. package/esm5/modules/text-editor/defaults/font-list-defaults.js +0 -42
  62. package/esm5/modules/text-editor/defaults/font-size-list-defaults.js +0 -5
  63. package/esm5/modules/text-editor/defaults/menu-defaults.js +0 -8
  64. package/esm5/modules/text-editor/defaults/style-state-defaults.js +0 -15
  65. package/esm5/modules/text-editor/defaults/toolbar-action-defaults.js +0 -12
  66. package/esm5/modules/text-editor/menubar/text-editor-menubar.component.js +0 -199
  67. package/esm5/modules/text-editor/services/text-editor-adapter.service.js +0 -470
  68. package/esm5/modules/text-editor/services/text-editor-selection.service.js +0 -77
  69. package/esm5/modules/text-editor/services/text-editor.service.js +0 -49
  70. package/esm5/modules/text-editor/services/text-sanitization.service.js +0 -41
  71. package/esm5/modules/text-editor/text-editor.component.js +0 -287
  72. package/esm5/modules/text-editor/text-editor.module.js +0 -63
  73. package/esm5/modules/text-editor/toolbar/text-editor-toolbar.component.js +0 -178
  74. package/esm5/modules/text-editor/types/editor-command.js +0 -1
  75. package/esm5/modules/text-editor/types/editor-setting.js +0 -1
  76. package/esm5/modules/text-editor/types/font-state.js +0 -1
  77. package/esm5/modules/text-editor/types/menu-type.js +0 -1
  78. package/esm5/modules/text-editor/types/style-state.js +0 -1
  79. package/esm5/modules/text-editor/types/text-editor-merge-field.js +0 -1
  80. package/esm5/modules/text-editor/types/toolbar-action-type.js +0 -1
  81. package/esm5/modules/text-editor/url-modal/text-editor-url-modal-context.js +0 -10
  82. package/esm5/modules/text-editor/url-modal/text-editor-url-modal-result.js +0 -1
  83. package/esm5/modules/text-editor/url-modal/text-editor-url-modal.component.js +0 -120
  84. package/esm5/modules/text-editor/url-modal/text-editor-url-target.js +0 -9
  85. package/esm5/plugin-resources/text-editor-resources-provider.js +0 -17
  86. package/esm5/plugin-resources/text-editor-resources.module.js +0 -22
  87. package/esm5/public_api.js +0 -3
  88. package/esm5/skyux-text-editor.js +0 -17
  89. package/fesm5/skyux-text-editor.js +0 -1620
  90. package/fesm5/skyux-text-editor.js.map +0 -1
  91. package/plugin-resources/text-editor-resources-provider.d.ts +0 -5
  92. package/plugin-resources/text-editor-resources.module.d.ts +0 -2
  93. package/public_api.d.ts +0 -7
  94. package/skyux-text-editor.metadata.json +0 -1
  95. package/src/assets/img/default-anatomy.png +0 -0
  96. package/src/assets/img/default-option-menu-toolbar-items.png +0 -0
  97. package/src/assets/img/default-use-when.png +0 -0
  98. package/src/assets/img/modern-anatomy.png +0 -0
  99. package/src/assets/img/modern-option-menu-toolbar-items.png +0 -0
  100. package/src/assets/img/modern-use-when.png +0 -0
  101. package/src/assets/locales/resources_en_US.json +0 -130
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-text-editor.js","sources":["ng://@skyux/text-editor/modules/text-editor/services/text-sanitization.service.ts","ng://@skyux/text-editor/modules/rich-text-display/rich-text-display.component.ts","ng://@skyux/text-editor/modules/rich-text-display/rich-text-display.module.ts","ng://@skyux/text-editor/plugin-resources/text-editor-resources-provider.ts","ng://@skyux/text-editor/plugin-resources/text-editor-resources.module.ts","ng://@skyux/text-editor/modules/text-editor/defaults/font-list-defaults.ts","ng://@skyux/text-editor/modules/text-editor/defaults/style-state-defaults.ts","ng://@skyux/text-editor/modules/text-editor/url-modal/text-editor-url-target.ts","ng://@skyux/text-editor/modules/text-editor/services/text-editor.service.ts","ng://@skyux/text-editor/modules/text-editor/services/text-editor-selection.service.ts","ng://@skyux/text-editor/modules/text-editor/services/text-editor-adapter.service.ts","ng://@skyux/text-editor/modules/shared/forms-utility.ts","ng://@skyux/text-editor/modules/text-editor/menubar/text-editor-menubar.component.ts","ng://@skyux/text-editor/modules/text-editor/url-modal/text-editor-url-modal-context.ts","ng://@skyux/text-editor/modules/text-editor/url-modal/text-editor-url-modal.component.ts","ng://@skyux/text-editor/modules/text-editor/toolbar/text-editor-toolbar.component.ts","ng://@skyux/text-editor/modules/text-editor/defaults/menu-defaults.ts","ng://@skyux/text-editor/modules/text-editor/defaults/toolbar-action-defaults.ts","ng://@skyux/text-editor/modules/text-editor/defaults/font-size-list-defaults.ts","ng://@skyux/text-editor/modules/text-editor/text-editor.component.ts","ng://@skyux/text-editor/modules/text-editor/text-editor.module.ts","ng://@skyux/text-editor/skyux-text-editor.ts"],"sourcesContent":["import {\n Injectable\n} from '@angular/core';\n\n// TODO: figure out how to get the following `import` to work with docs-tools library.\n// import DOMPurify from 'dompurify';\nconst createDOMPurify = require('dompurify');\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\n private 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, { ADD_ATTR: this.allowedAttributes });\n }\n\n}\n","import {\n Component,\n Input\n} from '@angular/core';\n\nimport {\n DomSanitizer,\n SafeHtml\n} from '@angular/platform-browser';\n\nimport {\n SkyTextSanitizationService\n} from '../text-editor/services/text-sanitization.service';\n\n@Component({\n selector: 'sky-rich-text-display',\n templateUrl: './rich-text-display.component.html'\n})\nexport class SkyRichTextDisplayComponent {\n\n /**\n * Specifies the rich text to display.\n */\n @Input()\n public set richText(value: string) {\n const cleaned = this.sanitizationService.sanitize(value);\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 }\n\n public sanitizedText: SafeHtml = '';\n\n private _richText: string = '';\n\n constructor(\n private sanitizer: DomSanitizer,\n private sanitizationService: SkyTextSanitizationService\n ) { }\n\n}\n","import {\n CommonModule\n} from '@angular/common';\n\nimport {\n NgModule\n} from '@angular/core';\n\nimport {\n SkyRichTextDisplayComponent\n} from './rich-text-display.component';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n exports: [\n SkyRichTextDisplayComponent\n ],\n declarations: [\n SkyRichTextDisplayComponent\n ]\n})\nexport class SkyRichTextDisplayModule { }\n","\nimport {\n Injectable\n} from '@angular/core';\n\nimport {\n getStringForLocale,\n SkyAppLocaleInfo,\n SkyLibResourcesProvider\n} from '@skyux/i18n';\n\n@Injectable()\nexport class SkyTextEditorResourcesProvider implements SkyLibResourcesProvider {\n private resources: any = {\"EN-US\":{\"skyux_text_editor_format_menu_action_bold_label\":\"Bold\",\"skyux_text_editor_format_menu_action_bold_key_shortcut\":\"Ctrl+B\",\"skyux_text_editor_format_menu_action_italic_label\":\"Italic\",\"skyux_text_editor_format_menu_action_italic_key_shortcut\":\"Ctrl+I\",\"skyux_text_editor_format_menu_action_underline_label\":\"Underline\",\"skyux_text_editor_format_menu_action_underline_key_shortcut\":\"Ctrl+U\",\"skyux_text_editor_format_menu_action_strikethrough_label\":\"Strikethrough\",\"skyux_text_editor_format_menu_action_clear_formatting_label\":\"Clear formatting\",\"skyux_text_editor_edit_menu_action_undo_label\":\"Undo\",\"skyux_text_editor_edit_menu_action_undo_key_shortcut\":\"Ctrl+Z\",\"skyux_text_editor_edit_menu_action_redo_label\":\"Redo\",\"skyux_text_editor_edit_menu_action_redo_key_shortcut\":\"Ctrl+Y\",\"skyux_text_editor_edit_menu_action_cut_label\":\"Cut\",\"skyux_text_editor_edit_menu_action_cut_key_shortcut\":\"Ctrl+X\",\"skyux_text_editor_edit_menu_action_copy_label\":\"Copy\",\"skyux_text_editor_edit_menu_action_copy_key_shortcut\":\"Ctrl+C\",\"skyux_text_editor_edit_menu_action_paste_label\":\"Paste\",\"skyux_text_editor_edit_menu_action_paste_key_shortcut\":\"Ctrl+V\",\"skyux_text_editor_edit_menu_action_select_all_label\":\"Select all\",\"skyux_text_editor_edit_menu_action_select_all_key_shortcut\":\"Ctrl+A\",\"skyux_text_editor_menubar_dropdown_button_edit_label\":\"Edit\",\"skyux_text_editor_menubar_dropdown_button_format_label\":\"Format\",\"skyux_text_editor_menubar_dropdown_button_insert_label\":\"Insert merge field\",\"skyux_text_editor_url_modal_header_label\":\"Create link\",\"skyux_text_editor_url_modal_url_label\":\"Enter a URL to link to:\",\"skyux_text_editor_url_modal_open_label\":\"Where should it open?\",\"skyux_text_editor_url_modal_current_option_label\":\"Current window\",\"skyux_text_editor_url_modal_new_option_label\":\"New window\",\"skyux_text_editor_url_modal_email_label\":\"Email address\",\"skyux_text_editor_url_modal_subject_label\":\"Subject line\",\"skyux_text_editor_url_modal_save_button_label\":\"Save\",\"skyux_text_editor_url_modal_cancel_button_label\":\"Cancel\"}};\n\n public getString(localeInfo: SkyAppLocaleInfo, name: string): string {\n return getStringForLocale(this.resources, localeInfo.locale, name);\n }\n}\n","import {\n NgModule\n} from '@angular/core';\n\nimport {\n SKY_LIB_RESOURCES_PROVIDERS\n} from '@skyux/i18n';\n\nimport {\n SkyTextEditorResourcesProvider\n} from './text-editor-resources-provider';\n\n@NgModule({\n providers: [\n {\n provide: SKY_LIB_RESOURCES_PROVIDERS,\n useClass: SkyTextEditorResourcesProvider,\n multi: true\n }\n ]\n})\nexport class SkyTextEditorResourcesModule {}\n","import {\n SkyTextEditorFont\n} 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","import {\n FONT_LIST_DEFAULTS\n} from './font-list-defaults';\n\nimport {\n SkyTextEditorStyleState\n} from '../types/style-state';\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","/**\n * @internal\n */\nexport enum UrlTarget {\n None = 0,\n NewWindow = 1\n}\n","import {\n Injectable\n} from '@angular/core';\n\nimport {\n Observable\n} from 'rxjs';\n\nimport {\n EditorSetting\n} from '../types/editor-setting';\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SkyTextEditorService {\n\n /**\n * A dictionary representing all active text editors and their settings.\n */\n public editors: { [key: string]: EditorSetting } = {};\n\n /**\n * Returns the click observable from the editor with the corresponding id.\n */\n public clickListener(id: string): Observable<unknown> {\n return this.editors[id].clickObservable;\n }\n\n /**\n * Returns the command change observable from the editor with the corresponding id.\n */\n public commandChangeListener(id: string): Observable<unknown> {\n return this.editors[id].commandChangeObservable;\n }\n\n /**\n * Removes editor from the `editors` index by id.\n */\n public removeEditor(id: string): void {\n if (id in this.editors) {\n delete this.editors[id];\n }\n }\n\n /**\n * Returns the selection change observable from the editor with the corresponding id.\n */\n public selectionChangeListener(id: string): Observable<unknown> {\n return this.editors[id].selectionChangeObservable;\n }\n\n}\n","import {\n Injectable\n} from '@angular/core';\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SkyTextEditorSelectionService {\n public isElementSelected(documentEl: Document, element: HTMLElement) {\n const selectedNode = this.getCurrentSelection(documentEl).anchorNode as HTMLElement;\n return selectedNode &&\n (\n element.contains(selectedNode) ||\n (selectedNode.parentNode && element.contains(selectedNode.parentNode))\n );\n }\n\n public getCurrentSelection(documentEl: Document): Selection {\n return documentEl.getSelection();\n }\n\n public getCurrentSelectionParentElement(documentEl: Document): Element {\n const selection = this.getCurrentSelection(documentEl);\n let selectedEl: Element;\n /* istanbul ignore else */\n if (selection &&\n selection.getRangeAt &&\n selection.getRangeAt(0).commonAncestorContainer\n ) {\n selectedEl = selection.getRangeAt(0).commonAncestorContainer as Element;\n selectedEl = selectedEl.nodeType !== 1 ? selectedEl.parentElement : selectedEl;\n } else if (selection && selection.type !== 'Control') {\n selectedEl = (selection as any).createRange().parentElement();\n } else {\n return undefined;\n }\n return selectedEl;\n }\n\n public getCurrentSelectionRange(documentEl: Document, windowEl: Window): Range {\n /* istanbul ignore else */\n if (windowEl.getSelection) {\n const sel = windowEl.getSelection();\n if (sel.getRangeAt && sel.rangeCount) {\n return sel.getRangeAt(0);\n }\n } else if (documentEl.getSelection() && documentEl.getSelection().getRangeAt) {\n return documentEl.getSelection().getRangeAt(0);\n }\n }\n\n public selectElement(documentEl: Document, windowEl: Window, element: HTMLElement): void {\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}\n","import {\n Injectable\n} from '@angular/core';\n\nimport {\n SkyAppWindowRef\n} from '@skyux/core';\n\nimport {\n Subject\n} from 'rxjs';\n\nimport {\n STYLE_STATE_DEFAULTS\n} from '../defaults/style-state-defaults';\n\nimport {\n EditorCommand\n} from '../types/editor-command';\n\nimport {\n EditorSetting\n} from '../types/editor-setting';\n\nimport {\n SkyTextEditorStyleState\n} from '../types/style-state';\n\nimport {\n UrlModalResult\n} from '../url-modal/text-editor-url-modal-result';\n\nimport {\n UrlTarget\n} from '../url-modal/text-editor-url-target';\n\nimport {\n SkyTextEditorService\n} from './text-editor.service';\n\nimport {\n SkyTextEditorSelectionService\n} from './text-editor-selection.service';\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SkyTextEditorAdapterService {\n\n private get editors(): { [key: string]: EditorSetting } {\n return this.textEditorService.editors;\n }\n\n constructor(\n private selectionService: SkyTextEditorSelectionService,\n private textEditorService: SkyTextEditorService,\n private windowService: SkyAppWindowRef\n ) { }\n\n /**\n * Creates a text editor inside the supplied iframe element.\n */\n public addEditor(\n id: string,\n iframeElement: HTMLIFrameElement,\n styleState: SkyTextEditorStyleState,\n placeholder?: string\n ): void {\n if (!(id in this.editors)) {\n this.editors[id] = this.createObservers(id, iframeElement);\n\n const documentEl = this.getIframeDocumentEl(id);\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 = { ...STYLE_STATE_DEFAULTS, ...styleState };\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\n public disableEditor(id: string, focusableChildren: HTMLElement[], textEditorNativeElement: any): void {\n this.setEditorDisabled(id, focusableChildren, textEditorNativeElement, true);\n }\n\n public enableEditor(id: string, focusableChildren: HTMLElement[], textEditorNativeElement: any): void {\n this.setEditorDisabled(id, focusableChildren, textEditorNativeElement, false);\n }\n\n /**\n * Executes a command on the text editor with the corresponding id.\n */\n public execCommand(id: string, editorCommand: EditorCommand): void {\n if (id in this.editors) {\n const documentEl = this.getIframeDocumentEl(id);\n\n if (this.editorSelected(id)) {\n const commandIsSupportedAndEnabled = documentEl.execCommand(editorCommand.command, false, editorCommand.value);\n\n // IE11 doesn't support insertHTML\n /* istanbul ignore next */\n if (\n editorCommand.command.toLowerCase() === 'inserthtml' &&\n !commandIsSupportedAndEnabled\n ) {\n this.insertHtmlInIE11(id, editorCommand.value);\n }\n\n this.focusEditor(id);\n this.editors[id].commandChangeObservable.next();\n }\n }\n }\n\n public getCurrentSelection(id: string): Selection {\n return this.selectionService.getCurrentSelection(this.getIframeDocumentEl(id));\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.windowService.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(id: string): Partial<SkyTextEditorStyleState> {\n const documentEl = this.getIframeDocumentEl(id);\n\n if (this.editorSelected(id)) {\n return {\n backColor: this.getColor(documentEl, 'BackColor'),\n fontColor: this.getColor(documentEl, 'ForeColor'),\n fontSize: parseInt(this.getFontSize(id), 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(id)\n };\n }\n\n /* istanbul ignore next */\n return {};\n }\n\n public getEditorInnerHtml(id: string): string {\n const documentEl = this.getIframeDocumentEl(id);\n if (documentEl) {\n return this.replaceHtmlCodes(documentEl.body.innerHTML);\n }\n return '';\n }\n\n public setEditorInnerHtml(id: string, value: string): void {\n const documentEl = this.getIframeDocumentEl(id);\n const editorContent = documentEl.body;\n if (editorContent.innerHTML !== value) {\n editorContent.innerHTML = value;\n }\n }\n\n public focusEditor(id: string): void {\n if (id in this.editors) {\n const windowEl = this.getContentWindowEl(id);\n const iframeDocumentEl = this.getIframeDocumentEl(id);\n const currentSelection = this.selectionService.getCurrentSelectionRange(iframeDocumentEl, windowEl);\n const cursorIsNotActiveAndHasReset = currentSelection && (currentSelection.startOffset === 0 && currentSelection.endOffset === 0);\n\n if (!this.editorSelected(id) || cursorIsNotActiveAndHasReset) {\n // focus the end of the editor\n const documentEl = this.windowService.nativeWindow.document;\n const editor: any = iframeDocumentEl.body;\n const range = documentEl.createRange();\n\n this.editors[id].iframeElementRef.focus();\n editor.focus();\n /* istanbul ignore else */\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 } else {\n // IE only\n const textRange = editor.createTextRange();\n textRange.moveToElementText(editor);\n textRange.collapse(false);\n textRange.select();\n }\n } else {\n // Cursor may not be active, restore it\n this.editors[id].iframeElementRef.focus();\n iframeDocumentEl.body.focus();\n }\n }\n }\n\n public getLink(editorId: string): UrlModalResult {\n let link: UrlModalResult = undefined;\n const anchorEl = this.getSelectedAnchorTag(editorId);\n if (anchorEl && anchorEl.href) {\n link = {\n target: anchorEl.getAttribute('target') === '_blank' ? UrlTarget.NewWindow : UrlTarget.None,\n url: anchorEl.href\n };\n }\n\n return link;\n }\n\n public getSelectedAnchorTag(editorId: string): HTMLAnchorElement {\n const selectedEl = this.getCurrentSelectionParentElement(editorId);\n\n return this.getParent(selectedEl, 'a') as HTMLAnchorElement;\n }\n\n public saveSelection(id: string): Range {\n return this.selectionService.getCurrentSelectionRange(this.getIframeDocumentEl(id), this.getContentWindowEl(id));\n }\n\n public selectElement(id: string, element: HTMLElement): void {\n this.selectionService.selectElement(this.getIframeDocumentEl(id), this.getContentWindowEl(id), element);\n }\n\n public setPlaceholder(id: string, placeholder?: string): void {\n const documentEl = this.getIframeDocumentEl(id);\n documentEl.body.setAttribute('data-placeholder', placeholder || '');\n }\n\n public setFontSize(id: string, fontSize: number): void {\n const doc = this.getIframeDocumentEl(id);\n this.execCommand(id, {command: 'fontSize', value: 1});\n const fontElements: HTMLElement[] = Array.from(doc.querySelectorAll('font[size=\"1\"]'));\n for (let element of fontElements) {\n element.removeAttribute('size');\n element.style.fontSize = (fontSize + 'px');\n }\n this.cleanUpBlankStyleTags(doc);\n\n this.focusEditor(id);\n this.editors[id].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 documentEl.removeEventListener('selectionchange', setting.selectionListener);\n documentEl.removeEventListener('input', setting.selectionListener);\n documentEl.removeEventListener('mousedown', setting.clickListener);\n documentEl.body.removeEventListener('paste', setting.pasteListener);\n }\n\n private getContentWindowEl(id: string): Window {\n return this.editors[id].iframeElementRef.contentWindow;\n }\n\n private getChildSelectedAnchorTags(editorId: string): Element[] {\n const selectedRange = this.getCurrentSelection(editorId).getRangeAt(0);\n if (selectedRange.toString().length <= 0) {\n return [];\n }\n\n const parentElement = this.getCurrentSelectionParentElement(editorId);\n const childElements = parentElement ? Array.from(parentElement.querySelectorAll('a')) : [];\n\n /* istanbul ignore next */\n return childElements.filter(element => {\n\n // IE specific\n if (!selectedRange.intersectsNode) {\n if (!element || !element.href) {\n return false;\n }\n const tempRange = document.createRange();\n tempRange.selectNodeContents(element);\n return (selectedRange.compareBoundaryPoints(Range.START_TO_START, tempRange) !== -1\n && selectedRange.compareBoundaryPoints(Range.START_TO_END, tempRange) !== 1) ||\n (selectedRange.compareBoundaryPoints(Range.END_TO_START, tempRange) !== -1\n && selectedRange.compareBoundaryPoints(Range.END_TO_END, tempRange) !== 1);\n }\n\n // Normal non-IE\n return !!element && !!element.href && selectedRange.intersectsNode(element);\n });\n }\n\n private getIframeDocumentEl(id: string): Document {\n /* istanbul ignore next */\n if (!(id in this.editors)) {\n return undefined;\n }\n\n const contentWindowEl = this.getContentWindowEl(id);\n if (contentWindowEl) {\n return contentWindowEl.document;\n }\n\n /* istanbul ignore next */\n return this.editors[id].iframeElementRef.contentDocument;\n }\n\n private getFontSize(id: string): string {\n let fontSize = STYLE_STATE_DEFAULTS.fontSize.toString();\n const selection = this.getCurrentSelection(id);\n if (\n selection &&\n selection.anchorNode &&\n selection.anchorNode.parentElement\n ) {\n let element = selection.anchorNode;\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 private createObservers(id: string, 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();\n const selectionListener = () => selectionObservable.next();\n const clickObservable = new Subject();\n const clickListener = () => clickObservable.next();\n const pasteListener = this.getPasteOverride(id);\n\n documentEl.addEventListener('selectionchange', selectionListener);\n documentEl.addEventListener('input', selectionListener);\n documentEl.addEventListener('mousedown', clickListener);\n documentEl.body.addEventListener('paste', pasteListener);\n return {\n iframeElementRef: element,\n selectionListener: selectionListener,\n clickListener: clickListener,\n pasteListener: pasteListener,\n selectionChangeObservable: selectionObservable,\n clickObservable: clickObservable,\n commandChangeObservable: new Subject()\n };\n }\n\n /* istanbul ignore next */\n private getPasteOverride(id: string): (e: ClipboardEvent) => void {\n return (e: ClipboardEvent): void => {\n e.preventDefault();\n const text = e.clipboardData.getData('text/plain');\n this.execCommand(id, { command: 'insertHTML', value: text });\n };\n }\n\n private getCurrentSelectionParentElement(id: string): Element {\n return this.selectionService.getCurrentSelectionParentElement(this.getIframeDocumentEl(id));\n }\n\n private getColor(documentEl: Document, selector: string): string {\n const commandValue = documentEl.queryCommandValue(selector);\n\n // Edge is weird and returns numbers\n if (typeof commandValue === 'number') {\n /* istanbul ignore next */\n // tslint:disable-next-line: no-bitwise\n return 'rgb(' + (commandValue & 0xFF) + ', ' +\n // tslint:disable-next-line: no-bitwise\n ((commandValue & 0xFF00) >> 8) + ', ' +\n // tslint:disable-next-line: no-bitwise\n ((commandValue & 0xFF0000) >> 16 ) + ')';\n }\n\n // Firefox uses 'Transparent' instead of a color value\n /* istanbul ignore next */\n if (commandValue.toString().toLowerCase() === 'transparent') {\n return STYLE_STATE_DEFAULTS.backColor;\n }\n return commandValue;\n }\n\n private hasLink(editorId: string): boolean {\n const anchorEl = this.getSelectedAnchorTag(editorId);\n const childAnchorEls = this.getChildSelectedAnchorTags(editorId);\n return childAnchorEls.length > 0 || (!!anchorEl && !!anchorEl.href);\n }\n\n private getParent(element: Element, tag: string): Element {\n let currentNode = element;\n while (currentNode && currentNode.tagName.toUpperCase() !== 'BODY') {\n if (currentNode.tagName.toUpperCase() === tag.toUpperCase()) {\n return currentNode;\n }\n currentNode = currentNode.parentElement;\n }\n return undefined;\n }\n\n private editorSelected(id: string): boolean {\n const documentEl = this.getIframeDocumentEl(id);\n return this.selectionService.isElementSelected(documentEl, documentEl.body);\n }\n\n /* istanbul ignore next */\n private insertHtmlInIE11(id: string, html: string): void {\n const documentEl = this.getIframeDocumentEl(id);\n const windowEl = this.getContentWindowEl(id);\n const sel = windowEl.getSelection();\n if (sel.getRangeAt && sel.rangeCount) {\n let range = sel.getRangeAt(0);\n range.deleteContents();\n\n const el = documentEl.createElement('div');\n el.innerHTML = html;\n let frag = documentEl.createDocumentFragment(), node, lastNode;\n while (el.firstChild) {\n node = el.firstChild;\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n\n // Preserve the selection\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n }\n\n private cleanUpBlankStyleTags(doc: Document): void {\n const orphanElements: HTMLElement[] = Array.from(doc.querySelectorAll('font,span,*[style=\"\"]'));\n for (let element of orphanElements) {\n if (!element.getAttribute('style')) {\n element.removeAttribute('style');\n }\n }\n const removableElements = orphanElements.filter(element => {\n const tagName = element.tagName.toUpperCase();\n return (tagName === 'FONT' || tagName === 'SPAN') &&\n (element.attributes.length === 0 || !element.hasChildNodes);\n });\n for (let 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 private replaceHtmlCodes(str: string): string {\n return str.replace(/&nbsp;/, String.fromCharCode(160))\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&amp;/g, '&');\n }\n\n private setEditorDisabled(id: string, focusableChildren: HTMLElement[], textEditorNativeElement: any, disabled: boolean): void {\n textEditorNativeElement.style.pointerEvents = disabled ? 'none' : 'auto';\n textEditorNativeElement.setAttribute('aria-disabled', disabled ? 'true' : 'false');\n focusableChildren.forEach(aFocusableChild => {\n aFocusableChild.tabIndex = disabled ? -1 : 0;\n });\n this.getIframeDocumentEl(id).body.setAttribute('contenteditable', disabled ? 'false' : 'true');\n }\n\n}\n","// Need to add the following to classes which contain static methods.\n// See: https://github.com/ng-packagr/ng-packagr/issues/641\n// @dynamic\nexport class SkyFormsUtility {\n\n /** Coerces a data-bound value (typically a string) to a boolean. */\n public static coerceBooleanProperty(value: any): boolean {\n return value !== undefined && `${value}` !== 'false';\n }\n}\n","import {\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n Component,\n Input,\n OnDestroy,\n OnInit\n} from '@angular/core';\n\nimport {\n SkyLibResourcesService\n} from '@skyux/i18n';\n\nimport {\n SkyDropdownMessage,\n SkyDropdownMessageType\n} from '@skyux/popovers';\n\nimport {\n forkJoin,\n Subject\n} from 'rxjs';\n\nimport {\n take,\n takeUntil\n} from 'rxjs/operators';\n\nimport {\n SkyTextEditorAdapterService\n} from '../services/text-editor-adapter.service';\n\nimport {\n SkyTextEditorMenuType\n} from '../types/menu-type';\n\nimport {\n SkyTextEditorMergeField\n} from '../types/text-editor-merge-field';\n\nimport {\n SkyFormsUtility\n} from '../../shared/forms-utility';\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})\nexport class SkyTextEditorMenubarComponent implements OnDestroy, OnInit {\n\n @Input()\n public editorFocusStream = new Subject();\n\n @Input()\n public editorId: string;\n\n @Input()\n public menus: SkyTextEditorMenuType[] = [];\n\n @Input()\n public mergeFields: SkyTextEditorMergeField[] = [];\n\n @Input()\n public set disabled(value: boolean) {\n const coercedValue = SkyFormsUtility.coerceBooleanProperty(value);\n if (coercedValue !== this.disabled) {\n this._disabled = coercedValue;\n this.changeDetector.markForCheck();\n }\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n private _disabled: boolean = false;\n\n public editDropdownStream = new Subject<SkyDropdownMessage>();\n\n public editItems: {\n function?: () => void,\n isDivider?: boolean,\n label?: string,\n keyShortcut?: string\n }[];\n\n public formatDropdownStream = new Subject<SkyDropdownMessage>();\n\n public formatItems: {\n function?: () => void,\n isDivider?: boolean,\n label?: string,\n keyShortcut?: string\n }[];\n\n public mergeFieldDropdownStream = new Subject<SkyDropdownMessage>();\n\n private ngUnsubscribe = new Subject<void>();\n\n constructor(\n private adapterService: SkyTextEditorAdapterService,\n private changeDetector: ChangeDetectorRef,\n private resources: SkyLibResourcesService\n ) {}\n\n public ngOnInit(): void {\n this.editorFocusStream\n .pipe(\n takeUntil(this.ngUnsubscribe)\n ).subscribe(() => {\n this.closeDropdowns();\n });\n\n forkJoin([\n // Format menu strings.\n this.resources.getString('skyux_text_editor_format_menu_action_bold_label'),\n this.resources.getString('skyux_text_editor_format_menu_action_bold_key_shortcut'),\n this.resources.getString('skyux_text_editor_format_menu_action_italic_label'),\n this.resources.getString('skyux_text_editor_format_menu_action_italic_key_shortcut'),\n this.resources.getString('skyux_text_editor_format_menu_action_underline_label'),\n this.resources.getString('skyux_text_editor_format_menu_action_underline_key_shortcut'),\n this.resources.getString('skyux_text_editor_format_menu_action_strikethrough_label'),\n this.resources.getString('skyux_text_editor_format_menu_action_clear_formatting_label'),\n\n // Edit menu string - start at index 8.\n this.resources.getString('skyux_text_editor_edit_menu_action_undo_label'),\n this.resources.getString('skyux_text_editor_edit_menu_action_undo_key_shortcut'),\n this.resources.getString('skyux_text_editor_edit_menu_action_redo_label'),\n this.resources.getString('skyux_text_editor_edit_menu_action_redo_key_shortcut'),\n this.resources.getString('skyux_text_editor_edit_menu_action_cut_label'),\n this.resources.getString('skyux_text_editor_edit_menu_action_cut_key_shortcut'),\n this.resources.getString('skyux_text_editor_edit_menu_action_copy_label'),\n this.resources.getString('skyux_text_editor_edit_menu_action_copy_key_shortcut'),\n this.resources.getString('skyux_text_editor_edit_menu_action_paste_label'),\n this.resources.getString('skyux_text_editor_edit_menu_action_paste_key_shortcut'),\n this.resources.getString('skyux_text_editor_edit_menu_action_select_all_label'),\n this.resources.getString('skyux_text_editor_edit_menu_action_select_all_key_shortcut')\n\n ])\n .pipe(take(1))\n .subscribe(resources => {\n this.formatItems = [\n {\n function: () => this.execCommand('bold'),\n label: resources[0],\n keyShortcut: resources[1]\n },\n {\n function: () => this.execCommand('italic'),\n label: resources[2],\n keyShortcut: resources[3]\n },\n {\n function: () => this.execCommand('underline'),\n label: resources[4],\n keyShortcut: resources[5]\n },\n {\n function: () => this.execCommand('strikethrough'),\n label: resources[6]\n },\n {\n isDivider: true\n },\n {\n function: () => this.clearFormat(),\n label: resources[7]\n }\n ];\n this.editItems = [\n {\n function: () => this.execCommand('undo'),\n label: resources[8],\n keyShortcut: resources[9]\n },\n {\n function: () => this.execCommand('redo'),\n label: resources[10],\n keyShortcut: resources[11]\n },\n {\n isDivider: true\n },\n {\n function: () => this.execCommand('cut'),\n label: resources[12],\n keyShortcut: resources[13]\n },\n {\n function: () => this.execCommand('copy'),\n label: resources[14],\n keyShortcut: resources[15]\n },\n {\n function: () => this.execCommand('paste'),\n label: resources[16],\n keyShortcut: resources[17]\n },\n {\n isDivider: true\n },\n {\n function: () => this.execCommand('selectAll'),\n label: resources[18],\n keyShortcut: resources[19]\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: any = ''): void {\n this.adapterService.execCommand(this.editorId, {\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=\"' + field.id +\n '\" data-fielddisplay=\"' + field.name +\n '\" src=\"' + (field.previewImageUrl || this.adapterService.getMergeFieldDataURI(field.name)) + '\">'\n );\n }\n\n private 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 private clearFormat(): void {\n let currentSelection = this.adapterService.getCurrentSelection(this.editorId);\n if (currentSelection.rangeCount > 0 && currentSelection.getRangeAt(0).toString().length <= 0) {\n this.execCommand('selectAll');\n }\n this.execCommand('removeFormat');\n }\n\n}\n","import {\n UrlModalResult\n} from './text-editor-url-modal-result';\n\n/**\n * @internal\n */\nexport class SkyUrlModalContext {\n public urlResult: UrlModalResult;\n}\n","import {\n Component\n} from '@angular/core';\n\nimport {\n SkyModalInstance\n} from '@skyux/modals';\n\nimport {\n SkyValidation\n} from '@skyux/validation';\n\nimport {\n UrlModalResult\n} from './text-editor-url-modal-result';\n\nimport {\n SkyUrlModalContext\n} from './text-editor-url-modal-context';\n\nimport {\n UrlTarget\n} from './text-editor-url-target';\n\nconst emailKey = 'mailto:';\nconst queryStringParamKey = '?Subject=';\n\n/**\n * @internal\n */\n@Component({\n selector: 'skyux-text-editor-url-modal',\n templateUrl: './text-editor-url-modal.component.html',\n styleUrls: ['./text-editor-url-modal.component.scss']\n})\nexport class SkyTextEditorUrlModalComponent {\n\n public set activeTab(value: number) {\n this._activeTab = value;\n this.valid = this.isValid();\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 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 public get url(): string {\n return this._url;\n }\n\n public emailAddressValid: boolean = false;\n\n public subject: string = '';\n\n public target: number = 0;\n\n public valid: boolean = false;\n\n public _activeTab = 0;\n\n private _emailAddress: string = '';\n\n private _url: string = 'https://';\n\n constructor(\n private readonly modalInstance: SkyModalInstance,\n modalContext: SkyUrlModalContext\n ) {\n if (modalContext.urlResult) {\n if (modalContext.urlResult.url.startsWith(emailKey)) {\n this.emailAddress = modalContext.urlResult.url.replace(emailKey, '');\n\n let queryStringIndex = this.emailAddress.indexOf(queryStringParamKey);\n queryStringIndex = queryStringIndex > -1 ? queryStringIndex : this.emailAddress.indexOf(queryStringParamKey.toLowerCase());\n\n if (queryStringIndex > -1) {\n this.subject = decodeURI(this.emailAddress).slice(queryStringIndex + queryStringParamKey.length);\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 = modalContext.urlResult.url,\n this.target = 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: number): void {\n this.activeTab = value;\n }\n\n public save(): void {\n if (this.isValid()) {\n if (this.activeTab === 0) {\n this.modalInstance.save({\n url: this.url,\n target: this.target ? parseInt(this.target as any, undefined) : 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 private getEmailUrl(): string {\n return emailKey + this.emailAddress + (this.subject ? '?Subject=' + encodeURI(this.subject) : '');\n }\n\n private 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}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit\n} from '@angular/core';\n\nimport {\n Subject\n} from 'rxjs';\n\nimport {\n SkyColorpickerOutput,\n SkyColorpickerMessage,\n SkyColorpickerMessageType\n} from '@skyux/colorpicker';\n\nimport {\n SkyModalCloseArgs,\n SkyModalService\n} from '@skyux/modals';\n\nimport {\n SkyDropdownMessage,\n SkyDropdownMessageType\n} from '@skyux/popovers';\n\nimport {\n STYLE_STATE_DEFAULTS\n} from '../defaults/style-state-defaults';\n\nimport {\n SkyTextEditorAdapterService\n} from '../services/text-editor-adapter.service';\n\nimport {\n SkyTextEditorFont\n} from '../types/font-state';\n\nimport {\n SkyTextEditorStyleState\n} from '../types/style-state';\n\nimport {\n SkyTextEditorToolbarActionType\n} from '../types/toolbar-action-type';\n\nimport {\n SkyTextEditorUrlModalComponent\n} from '../url-modal/text-editor-url-modal.component';\n\nimport {\n UrlTarget\n} from '../url-modal/text-editor-url-target';\n\nimport {\n SkyUrlModalContext\n} from '../url-modal/text-editor-url-modal-context';\n\nimport {\n SkyFormsUtility\n} from '../../shared/forms-utility';\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})\nexport class SkyTextEditorToolbarComponent implements OnInit {\n\n @Input()\n public editorFocusStream = new Subject();\n\n @Input()\n public editorId: string;\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 get styleState(): SkyTextEditorStyleState {\n return this._styleState;\n }\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 @Input()\n public set disabled(value: boolean) {\n const coercedValue = SkyFormsUtility.coerceBooleanProperty(value);\n if (coercedValue !== this.disabled) {\n this._disabled = coercedValue;\n this.changeDetector.markForCheck();\n }\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public backColorpickerStream = new Subject<SkyColorpickerMessage>();\n\n public colorpickerStream = new Subject<SkyColorpickerMessage>();\n\n public fontPickerStream = new Subject<SkyDropdownMessage>();\n\n public fontSizeStream = new Subject<SkyDropdownMessage>();\n\n public styleStateFontName: string;\n\n private _disabled: boolean = false;\n\n private _styleState = STYLE_STATE_DEFAULTS;\n\n constructor(\n private adapterService: SkyTextEditorAdapterService,\n private changeDetector: ChangeDetectorRef,\n private modalService: SkyModalService\n ) {}\n\n public ngOnInit(): void {\n this.editorFocusStream.subscribe(() => {\n this.styleState = {\n ...this._styleState,\n ...this.adapterService.getStyleState(this.editorId) as any\n };\n this.closeDropdowns();\n this.changeDetector.detectChanges();\n });\n }\n\n public execCommand(command: string, value: any = ''): void {\n this.adapterService.execCommand(this.editorId, {\n command: command,\n value: value\n });\n this.styleState = {\n ...this.styleState,\n ...this.adapterService.getStyleState(this.editorId)\n };\n }\n\n public toggleFontStyle(currentState: boolean, newState: boolean, command: string): 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(this.editorId);\n const currentLink = this.adapterService.getLink(this.editorId);\n const inputModal = this.modalService.open(SkyTextEditorUrlModalComponent, [{\n provide: SkyUrlModalContext,\n useValue: { urlResult: currentLink }\n }]);\n inputModal.closed.subscribe((result: SkyModalCloseArgs) => {\n if (result.reason === 'save' && priorSelection) {\n if (currentLink) {\n const anchor = this.adapterService.getSelectedAnchorTag(this.editorId);\n this.adapterService.selectElement(this.editorId, anchor);\n }\n\n this.execCommand('unlink');\n if (result.data.target === UrlTarget.None) {\n // Current window\n this.execCommand('createLink', result.data.url);\n } else {\n // New Window\n const sText = this.adapterService.getCurrentSelection(this.editorId);\n this.execCommand('insertHTML', '<a href=\"' + result.data.url + '\" rel=\"noopener noreferrer\" target=\"_blank\">' + sText + '</a>');\n }\n }\n });\n }\n\n public unlink(): void {\n let currentSelectionRange = this.adapterService.getCurrentSelection(this.editorId).getRangeAt(0);\n if (currentSelectionRange.toString().length <= 0) {\n const anchorTag = this.adapterService.getSelectedAnchorTag(this.editorId);\n this.adapterService.selectElement(this.editorId, anchorTag);\n }\n this.execCommand('unlink');\n }\n\n public changeFontSize(size: number): void {\n this.adapterService.setFontSize(this.editorId, size);\n this.styleState = {\n ...this.styleState,\n ...this.adapterService.getStyleState(this.editorId)\n };\n }\n\n public onColorpickerColorChanged(color: SkyColorpickerOutput, isBackground = false): void {\n this.execCommand(isBackground ? 'backColor' : 'foreColor', color.hex);\n }\n\n private closeDropdowns(): void {\n const message: SkyColorpickerMessage = { type: SkyColorpickerMessageType.Close };\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 private getFontName(fontName: string): string {\n for (let i = 0; i < this.fontList.length; i++) {\n if (fontName.replace(/['\"]+/g, '') === this.fontList[i].name) {\n return this.fontList[i].name;\n }\n }\n }\n}\n","import {\n SkyTextEditorMenuType\n} from '../types/menu-type';\n\n/**\n * @internal\n */\nexport const MENU_DEFAULTS: SkyTextEditorMenuType[] = [\n 'edit',\n 'format'\n];\n","import {\n SkyTextEditorToolbarActionType\n} 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 const FONT_SIZE_LIST_DEFAULTS: number[] = [6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 36, 48];\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n forwardRef,\n Input,\n OnDestroy,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport {\n takeUntil\n} from 'rxjs/operators';\n\nimport {\n Subject\n} from 'rxjs';\n\nimport {\n SkyCoreAdapterService\n} from '@skyux/core';\n\nimport {\n MENU_DEFAULTS\n} from './defaults/menu-defaults';\n\nimport {\n STYLE_STATE_DEFAULTS\n} from './defaults/style-state-defaults';\n\nimport {\n TOOLBAR_ACTION_DEFAULTS\n} from './defaults/toolbar-action-defaults';\n\nimport {\n SkyTextEditorAdapterService\n} from './services/text-editor-adapter.service';\n\nimport {\n SkyTextEditorService\n} from './services/text-editor.service';\n\nimport {\n SkyTextSanitizationService\n} from './services/text-sanitization.service';\n\nimport {\n FONT_LIST_DEFAULTS\n} from './defaults/font-list-defaults';\n\nimport {\n FONT_SIZE_LIST_DEFAULTS\n} from './defaults/font-size-list-defaults';\n\nimport {\n SkyTextEditorFont\n} from './types/font-state';\n\nimport {\n SkyTextEditorMenuType\n} from './types/menu-type';\n\nimport {\n SkyTextEditorStyleState\n} from './types/style-state';\n\nimport {\n SkyTextEditorMergeField\n} from './types/text-editor-merge-field';\n\nimport {\n SkyTextEditorToolbarActionType\n} from './types/toolbar-action-type';\n\nimport {\n SkyFormsUtility\n} from '../shared/forms-utility';\n\n/**\n * Auto-incrementing integer used to generate unique ids for radio components.\n */\nlet nextUniqueId = 0;\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 providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // tslint:disable-next-line: no-forward-ref\n useExisting: forwardRef(() => SkyTextEditorComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class SkyTextEditorComponent implements AfterViewInit, ControlValueAccessor, OnDestroy {\n\n /**\n * Indicates whether to put focus on the editor after it renders.\n */\n @Input()\n public autofocus: boolean = false;\n\n /**\n * Indicates whether to disable the text editor.\n * @default false\n */\n @Input()\n public set disabled(value: boolean) {\n const coercedValue = SkyFormsUtility.coerceBooleanProperty(value);\n if (coercedValue !== this.disabled) {\n this._disabled = coercedValue;\n if (this._disabled) {\n this.adapterService.disableEditor(this.id, this.focusableChildren, this.iframeRef.nativeElement);\n } else {\n this.adapterService.enableEditor(this.id, this.focusableChildren, this.iframeRef.nativeElement);\n }\n this.changeDetector.markForCheck();\n }\n }\n\n public get disabled() {\n return this._disabled;\n }\n\n public editorFocusStream = new Subject();\n\n // tslint:disable: max-line-length\n /**\n * Specifies 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 // tslint:enable: max-line-length\n @Input()\n public fontList: SkyTextEditorFont[] = FONT_LIST_DEFAULTS;\n\n /**\n * Specifies 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 fontSizeList: number[] = FONT_SIZE_LIST_DEFAULTS;\n\n /**\n * Specifies a unique ID attribute for the text editor.\n * By default, the component generates a random ID.\n */\n @Input()\n public id = `sky-text-editor-${++nextUniqueId}`;\n\n /**\n * Specifies the initial styles for all content, including background color, font size, and link state.\n */\n @Input()\n public set initialStyleState(state: SkyTextEditorStyleState) {\n // Do not update the state after initialization has taken place\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 * Specifies the menus to include in the menu bar.\n * @default [ 'edit', 'format' ]\n */\n @Input()\n public menus: SkyTextEditorMenuType[] = MENU_DEFAULTS;\n\n /**\n * Specifies the merge fields to include in the merge field menu.\n */\n @Input()\n public mergeFields: SkyTextEditorMergeField[] = [];\n\n /**\n * Specifies placeholder text to display when the text entry area is empty.\n */\n @Input()\n public set placeholder(value: string) {\n if (value !== this._placeholder) {\n this._placeholder = value;\n if (this.initialized) {\n this.adapterService.setPlaceholder(this.id, value);\n }\n }\n }\n\n public get placeholder(): string {\n return this._placeholder;\n }\n\n // tslint:disable: max-line-length\n /**\n * Specifies the actions to include in the toolbar and determines their order.\n * @default [ 'font-family', 'font-size', 'font-style', 'color', 'list', 'link ]\n */\n // tslint:enable: max-line-length\n @Input()\n public toolbarActions: SkyTextEditorToolbarActionType[] = TOOLBAR_ACTION_DEFAULTS;\n\n public set value(value: string) {\n // Set clear state to be an empty string\n let valueString: string = value;\n if (!value || (value.trim() === '<p></p>' && value.trim() === '<br>')) {\n valueString = '';\n }\n valueString = this.sanitizationService.sanitize(valueString).trim();\n\n if (this._value !== valueString) {\n this._value = valueString;\n\n // Autofocus isn't testable in Firefox and IE.\n /* istanbul ignore next */\n if (this.autofocus && !this.focusInitialized) {\n this.adapterService.focusEditor(this.id);\n this.focusInitialized = true;\n }\n this.onChange();\n }\n }\n\n public get value(): string {\n return this._value;\n }\n\n private focusableChildren: HTMLElement[];\n\n private focusInitialized: boolean = false;\n\n @ViewChild('iframe')\n private iframeRef: ElementRef;\n\n private initialized: boolean = false;\n\n private ngUnsubscribe = new Subject<void>();\n\n private _disabled: boolean = false;\n\n private _initialStyleState = Object.assign({}, STYLE_STATE_DEFAULTS);\n\n private _placeholder = '';\n\n private _value: string = '<p></p>';\n\n constructor (\n private changeDetector: ChangeDetectorRef,\n private coreAdapterService: SkyCoreAdapterService,\n private adapterService: SkyTextEditorAdapterService,\n private editorService: SkyTextEditorService,\n private sanitizationService: SkyTextSanitizationService\n ) {}\n\n public ngAfterViewInit(): void {\n this.adapterService.addEditor(\n this.id,\n this.iframeRef.nativeElement,\n this.initialStyleState,\n this.placeholder\n );\n\n this.editorService.selectionChangeListener(this.id)\n .pipe(\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(() => {\n this.updateValueAndStyle();\n this.editorFocusStream.next();\n });\n\n this.editorService.clickListener(this.id)\n .pipe(\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(() => {\n this.editorFocusStream.next();\n });\n\n this.editorService.commandChangeListener(this.id)\n .pipe(\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(() => {\n this.updateValueAndStyle();\n });\n\n this.adapterService.setEditorInnerHtml(this.id, this._value);\n\n /* istanbul ignore next */\n if (this.autofocus) {\n this.adapterService.focusEditor(this.id);\n }\n\n this.focusableChildren = this.coreAdapterService.getFocusableChildren(this.iframeRef.nativeElement, {\n ignoreVisibility: true\n });\n\n this.initialized = true;\n }\n\n public ngOnDestroy(): void {\n this.adapterService.removeObservers(this.editorService.editors[this.id]);\n this.editorService.removeEditor(this.id);\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public writeValue(obj: string): void {\n this.value = obj;\n\n // Update HTML if necessary.\n const editorValue = this.adapterService.getEditorInnerHtml(this.id);\n if (this.initialized && editorValue !== this._value) {\n this.adapterService.setEditorInnerHtml(this.id, this._value);\n }\n }\n\n public registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public onChange(): void {\n this._onChange(this.value);\n }\n\n public updateValueAndStyle(): void {\n this.value = this.adapterService.getEditorInnerHtml(this.id);\n this._initialStyleState = {\n ...this._initialStyleState,\n ...this.adapterService.getStyleState(this.id) as any\n };\n }\n\n /* istanbul ignore next */\n public onTouch = () => {};\n\n /* istanbul ignore next */\n private _onChange = (_: string) => {};\n}\n","import {\n NgModule\n} from '@angular/core';\n\nimport {\n CommonModule\n} from '@angular/common';\n\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\n\nimport {\n SkyColorpickerModule\n} from '@skyux/colorpicker';\n\nimport {\n SkyCoreAdapterModule,\n SkyIdModule\n} from '@skyux/core';\n\nimport {\n SkyCheckboxModule,\n SkyInputBoxModule\n} from '@skyux/forms';\n\nimport {\n SkyModalModule\n} from '@skyux/modals';\n\nimport {\n SkyI18nModule\n} from '@skyux/i18n';\n\nimport {\n SkyIconModule\n} from '@skyux/indicators';\n\nimport {\n SkyToolbarModule\n} from '@skyux/layout';\n\nimport {\n SkyDropdownModule\n} from '@skyux/popovers';\n\nimport {\n SkyTabsModule\n} from '@skyux/tabs';\n\nimport {\n SkyThemeModule\n} from '@skyux/theme';\n\nimport {\n SkyTextEditorResourcesModule\n} from '../../plugin-resources/text-editor-resources.module';\n\nimport {\n SkyTextEditorMenubarComponent\n} from './menubar/text-editor-menubar.component';\n\nimport {\n SkyTextEditorToolbarComponent\n} from './toolbar/text-editor-toolbar.component';\n\nimport {\n SkyTextEditorUrlModalComponent\n} from './url-modal/text-editor-url-modal.component';\n\nimport {\n SkyTextEditorComponent\n} from './text-editor.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SkyCoreAdapterModule,\n SkyTextEditorResourcesModule,\n SkyI18nModule,\n SkyIconModule,\n SkyIdModule,\n SkyInputBoxModule,\n SkyColorpickerModule,\n SkyCheckboxModule,\n SkyDropdownModule,\n SkyModalModule,\n SkyTabsModule,\n SkyThemeModule,\n SkyToolbarModule\n ],\n exports: [\n SkyTextEditorComponent,\n SkyTextEditorUrlModalComponent,\n SkyTextEditorToolbarComponent,\n SkyTextEditorMenubarComponent\n ],\n declarations: [\n SkyTextEditorComponent,\n SkyTextEditorUrlModalComponent,\n SkyTextEditorToolbarComponent,\n SkyTextEditorMenubarComponent\n ],\n entryComponents: [\n SkyTextEditorUrlModalComponent\n ]\n})\nexport class SkyTextEditorModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {SkyRichTextDisplayComponent as ɵa} from './modules/rich-text-display/rich-text-display.component';\nexport {SkyTextEditorMenubarComponent as ɵl} from './modules/text-editor/menubar/text-editor-menubar.component';\nexport {SkyTextEditorAdapterService as ɵf} from './modules/text-editor/services/text-editor-adapter.service';\nexport {SkyTextEditorSelectionService as ɵg} from './modules/text-editor/services/text-editor-selection.service';\nexport {SkyTextEditorService as ɵh} from './modules/text-editor/services/text-editor.service';\nexport {SkyTextSanitizationService as ɵb} from './modules/text-editor/services/text-sanitization.service';\nexport {SkyTextEditorComponent as ɵe} from './modules/text-editor/text-editor.component';\nexport {SkyTextEditorToolbarComponent as ɵk} from './modules/text-editor/toolbar/text-editor-toolbar.component';\nexport {SkyUrlModalContext as ɵj} from './modules/text-editor/url-modal/text-editor-url-modal-context';\nexport {SkyTextEditorUrlModalComponent as ɵi} from './modules/text-editor/url-modal/text-editor-url-modal.component';\nexport {SkyTextEditorResourcesProvider as ɵd} from './plugin-resources/text-editor-resources-provider';\nexport {SkyTextEditorResourcesModule as ɵc} from './plugin-resources/text-editor-resources.module';"],"names":["createDOMPurify"],"mappings":"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"}
1
+ {"version":3,"file":"skyux-text-editor.js","sources":["../../../projects/text-editor/src/modules/text-editor/services/text-sanitization.service.ts","../../../projects/text-editor/src/modules/rich-text-display/rich-text-display.component.ts","../../../projects/text-editor/src/modules/rich-text-display/rich-text-display.component.html","../../../projects/text-editor/src/modules/rich-text-display/rich-text-display.module.ts","../../../projects/text-editor/src/modules/shared/sky-text-editor-resources.module.ts","../../../projects/text-editor/src/modules/shared/forms-utility.ts","../../../projects/text-editor/src/modules/text-editor/defaults/font-list-defaults.ts","../../../projects/text-editor/src/modules/text-editor/defaults/style-state-defaults.ts","../../../projects/text-editor/src/modules/text-editor/url-modal/text-editor-url-target.ts","../../../projects/text-editor/src/modules/text-editor/services/text-editor-selection.service.ts","../../../projects/text-editor/src/modules/text-editor/services/text-editor.service.ts","../../../projects/text-editor/src/modules/text-editor/services/text-editor-adapter.service.ts","../../../projects/text-editor/src/modules/text-editor/menubar/text-editor-menubar.component.ts","../../../projects/text-editor/src/modules/text-editor/menubar/text-editor-menubar.component.html","../../../projects/text-editor/src/modules/text-editor/url-modal/text-editor-url-modal-context.ts","../../../projects/text-editor/src/modules/text-editor/url-modal/text-editor-url-modal.component.ts","../../../projects/text-editor/src/modules/text-editor/url-modal/text-editor-url-modal.component.html","../../../projects/text-editor/src/modules/text-editor/toolbar/text-editor-toolbar.component.ts","../../../projects/text-editor/src/modules/text-editor/toolbar/text-editor-toolbar.component.html","../../../projects/text-editor/src/modules/text-editor/defaults/menu-defaults.ts","../../../projects/text-editor/src/modules/text-editor/defaults/toolbar-action-defaults.ts","../../../projects/text-editor/src/modules/text-editor/defaults/font-size-list-defaults.ts","../../../projects/text-editor/src/modules/text-editor/text-editor.component.ts","../../../projects/text-editor/src/modules/text-editor/text-editor.component.html","../../../projects/text-editor/src/modules/text-editor/text-editor.module.ts","../../../projects/text-editor/src/skyux-text-editor.ts"],"sourcesContent":["import {\n Injectable\n} from '@angular/core';\n\nimport createDOMPurify from \"dompurify\";\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\n private 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, { ADD_ATTR: this.allowedAttributes });\n }\n\n}\n","import {\n Component,\n Input\n} from '@angular/core';\n\nimport {\n DomSanitizer,\n SafeHtml\n} from '@angular/platform-browser';\n\nimport {\n SkyTextSanitizationService\n} from '../text-editor/services/text-sanitization.service';\n\n@Component({\n selector: 'sky-rich-text-display',\n templateUrl: './rich-text-display.component.html'\n})\nexport class SkyRichTextDisplayComponent {\n\n /**\n * Specifies the rich text to display.\n */\n @Input()\n public set richText(value: string) {\n const cleaned = this.sanitizationService.sanitize(value);\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 }\n\n public sanitizedText: SafeHtml = '';\n\n private _richText: string = '';\n\n constructor(\n private sanitizer: DomSanitizer,\n private sanitizationService: SkyTextSanitizationService\n ) { }\n\n}\n","<span\n class=\"sky-rich-text-display-text\"\n [innerHTML]=\"sanitizedText\"\n>\n</span>\n","import {\n CommonModule\n} from '@angular/common';\n\nimport {\n NgModule\n} from '@angular/core';\n\nimport {\n SkyRichTextDisplayComponent\n} from './rich-text-display.component';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n exports: [\n SkyRichTextDisplayComponent\n ],\n declarations: [\n SkyRichTextDisplayComponent\n ]\n})\nexport class SkyRichTextDisplayModule { }\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 modules/shared/sky-text-editor' schematic.\n * To update this file, simply rerun the command.\n */\n\nimport { NgModule } from '@angular/core';\nimport {\n getLibStringForLocale,\n SkyAppLocaleInfo,\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesProvider,\n SKY_LIB_RESOURCES_PROVIDERS\n} from '@skyux/i18n';\n\nconst RESOURCES: { [locale: string]: SkyLibResources } = {\n 'EN-US': {\"skyux_text_editor_format_menu_action_bold_label\":{\"message\":\"Bold\"},\"skyux_text_editor_format_menu_action_bold_key_shortcut\":{\"message\":\"Ctrl+B\"},\"skyux_text_editor_format_menu_action_italic_label\":{\"message\":\"Italic\"},\"skyux_text_editor_format_menu_action_italic_key_shortcut\":{\"message\":\"Ctrl+I\"},\"skyux_text_editor_format_menu_action_underline_label\":{\"message\":\"Underline\"},\"skyux_text_editor_format_menu_action_underline_key_shortcut\":{\"message\":\"Ctrl+U\"},\"skyux_text_editor_format_menu_action_strikethrough_label\":{\"message\":\"Strikethrough\"},\"skyux_text_editor_format_menu_action_clear_formatting_label\":{\"message\":\"Clear formatting\"},\"skyux_text_editor_edit_menu_action_undo_label\":{\"message\":\"Undo\"},\"skyux_text_editor_edit_menu_action_undo_key_shortcut\":{\"message\":\"Ctrl+Z\"},\"skyux_text_editor_edit_menu_action_redo_label\":{\"message\":\"Redo\"},\"skyux_text_editor_edit_menu_action_redo_key_shortcut\":{\"message\":\"Ctrl+Y\"},\"skyux_text_editor_edit_menu_action_cut_label\":{\"message\":\"Cut\"},\"skyux_text_editor_edit_menu_action_cut_key_shortcut\":{\"message\":\"Ctrl+X\"},\"skyux_text_editor_edit_menu_action_copy_label\":{\"message\":\"Copy\"},\"skyux_text_editor_edit_menu_action_copy_key_shortcut\":{\"message\":\"Ctrl+C\"},\"skyux_text_editor_edit_menu_action_paste_label\":{\"message\":\"Paste\"},\"skyux_text_editor_edit_menu_action_paste_key_shortcut\":{\"message\":\"Ctrl+V\"},\"skyux_text_editor_edit_menu_action_select_all_label\":{\"message\":\"Select all\"},\"skyux_text_editor_edit_menu_action_select_all_key_shortcut\":{\"message\":\"Ctrl+A\"},\"skyux_text_editor_menubar_dropdown_button_edit_label\":{\"message\":\"Edit\"},\"skyux_text_editor_menubar_dropdown_button_format_label\":{\"message\":\"Format\"},\"skyux_text_editor_menubar_dropdown_button_insert_label\":{\"message\":\"Insert merge field\"},\"skyux_text_editor_url_modal_header_label\":{\"message\":\"Create link\"},\"skyux_text_editor_url_modal_url_label\":{\"message\":\"Enter a URL to link to:\"},\"skyux_text_editor_url_modal_open_label\":{\"message\":\"Where should it open?\"},\"skyux_text_editor_url_modal_current_option_label\":{\"message\":\"Current window\"},\"skyux_text_editor_url_modal_new_option_label\":{\"message\":\"New window\"},\"skyux_text_editor_url_modal_email_label\":{\"message\":\"Email address\"},\"skyux_text_editor_url_modal_subject_label\":{\"message\":\"Subject line\"},\"skyux_text_editor_url_modal_save_button_label\":{\"message\":\"Save\"},\"skyux_text_editor_url_modal_cancel_button_label\":{\"message\":\"Cancel\"}},\n};\n\nexport class SkyTextEditorResourcesProvider implements SkyLibResourcesProvider {\n public getString(localeInfo: SkyAppLocaleInfo, name: string): string {\n return getLibStringForLocale(RESOURCES, localeInfo.locale, name);\n }\n}\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n providers: [{\n provide: SKY_LIB_RESOURCES_PROVIDERS,\n useClass: SkyTextEditorResourcesProvider,\n multi: true\n }]\n})\nexport class SkyTextEditorResourcesModule { }\n","// Need to add the following to classes which contain static methods.\n// See: https://github.com/ng-packagr/ng-packagr/issues/641\n// @dynamic\nexport class SkyFormsUtility {\n\n /** Coerces a data-bound value (typically a string) to a boolean. */\n public static coerceBooleanProperty(value: any): boolean {\n return value !== undefined && `${value}` !== 'false';\n }\n}\n","import {\n SkyTextEditorFont\n} 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","import {\n FONT_LIST_DEFAULTS\n} from './font-list-defaults';\n\nimport {\n SkyTextEditorStyleState\n} from '../types/style-state';\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","/**\n * @internal\n */\nexport enum UrlTarget {\n None = 0,\n NewWindow = 1\n}\n","import {\n Injectable\n} from '@angular/core';\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SkyTextEditorSelectionService {\n public isElementSelected(documentEl: Document, element: HTMLElement) {\n const selectedNode = this.getCurrentSelection(documentEl).anchorNode as HTMLElement;\n return selectedNode &&\n (\n element.contains(selectedNode) || (selectedNode.parentNode && element.contains(selectedNode.parentNode))\n );\n }\n\n public getCurrentSelection(documentEl: Document): Selection {\n return documentEl.getSelection();\n }\n\n public getCurrentSelectionParentElement(documentEl: Document): Element {\n const selection = this.getCurrentSelection(documentEl);\n let selectedEl: Element;\n /* istanbul ignore else */\n if (selection &&\n selection.getRangeAt &&\n selection.getRangeAt(0).commonAncestorContainer\n ) {\n selectedEl = selection.getRangeAt(0).commonAncestorContainer as Element;\n selectedEl = selectedEl.nodeType !== 1 ? selectedEl.parentElement : selectedEl;\n } else if (selection && selection.type !== 'Control') {\n selectedEl = (selection as any).createRange().parentElement();\n } else {\n return undefined;\n }\n return selectedEl;\n }\n\n public getCurrentSelectionRange(documentEl: Document, windowEl: Window): Range {\n /* istanbul ignore else */\n if (windowEl.getSelection) {\n const sel = windowEl.getSelection();\n if (sel.getRangeAt && sel.rangeCount) {\n return sel.getRangeAt(0);\n }\n } else if (documentEl.getSelection() && documentEl.getSelection().getRangeAt) {\n return documentEl.getSelection().getRangeAt(0);\n }\n }\n\n public selectElement(documentEl: Document, windowEl: Window, element: HTMLElement): void {\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}\n","import {\n Injectable\n} from '@angular/core';\n\nimport {\n Observable\n} from 'rxjs';\n\nimport {\n EditorSetting\n} from '../types/editor-setting';\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SkyTextEditorService {\n\n /**\n * A dictionary representing all active text editors and their settings.\n */\n public editors: { [key: string]: EditorSetting } = {};\n\n /**\n * Returns the click observable from the editor with the corresponding id.\n */\n public clickListener(id: string): Observable<unknown> {\n return this.editors[id].clickObservable;\n }\n\n /**\n * Returns the command change observable from the editor with the corresponding id.\n */\n public commandChangeListener(id: string): Observable<unknown> {\n return this.editors[id].commandChangeObservable;\n }\n\n /**\n * Removes editor from the `editors` index by id.\n */\n public removeEditor(id: string): void {\n if (id in this.editors) {\n delete this.editors[id];\n }\n }\n\n /**\n * Returns the selection change observable from the editor with the corresponding id.\n */\n public selectionChangeListener(id: string): Observable<unknown> {\n return this.editors[id].selectionChangeObservable;\n }\n\n}\n","import {\n Injectable\n} from '@angular/core';\n\nimport {\n SkyAppWindowRef\n} from '@skyux/core';\n\nimport {\n Subject\n} from 'rxjs';\n\nimport {\n STYLE_STATE_DEFAULTS\n} from '../defaults/style-state-defaults';\n\nimport {\n EditorCommand\n} from '../types/editor-command';\n\nimport {\n EditorSetting\n} from '../types/editor-setting';\n\nimport {\n SkyTextEditorStyleState\n} from '../types/style-state';\n\nimport {\n UrlModalResult\n} from '../url-modal/text-editor-url-modal-result';\n\nimport {\n UrlTarget\n} from '../url-modal/text-editor-url-target';\n\nimport {\n SkyTextEditorService\n} from './text-editor.service';\n\nimport {\n SkyTextEditorSelectionService\n} from './text-editor-selection.service';\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SkyTextEditorAdapterService {\n\n private get editors(): { [key: string]: EditorSetting } {\n return this.textEditorService.editors;\n }\n\n constructor(\n private selectionService: SkyTextEditorSelectionService,\n private textEditorService: SkyTextEditorService,\n private windowService: SkyAppWindowRef\n ) { }\n\n /**\n * Creates a text editor inside the supplied iframe element.\n */\n public addEditor(\n id: string,\n iframeElement: HTMLIFrameElement,\n styleState: SkyTextEditorStyleState,\n placeholder?: string\n ): void {\n if (!(id in this.editors)) {\n this.editors[id] = this.createObservers(id, iframeElement);\n\n const documentEl = this.getIframeDocumentEl(id);\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 = { ...STYLE_STATE_DEFAULTS, ...styleState };\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\n public disableEditor(id: string, focusableChildren: HTMLElement[], textEditorNativeElement: any): void {\n this.setEditorDisabled(id, focusableChildren, textEditorNativeElement, true);\n }\n\n public enableEditor(id: string, focusableChildren: HTMLElement[], textEditorNativeElement: any): void {\n this.setEditorDisabled(id, focusableChildren, textEditorNativeElement, false);\n }\n\n /**\n * Executes a command on the text editor with the corresponding id.\n */\n public execCommand(id: string, editorCommand: EditorCommand): void {\n if (id in this.editors) {\n const documentEl = this.getIframeDocumentEl(id);\n\n if (this.editorSelected(id)) {\n const commandIsSupportedAndEnabled = documentEl.execCommand(editorCommand.command, false, editorCommand.value);\n\n // IE11 doesn't support insertHTML\n /* istanbul ignore next */\n if (\n editorCommand.command.toLowerCase() === 'inserthtml' &&\n !commandIsSupportedAndEnabled\n ) {\n this.insertHtmlInIE11(id, editorCommand.value);\n }\n\n this.focusEditor(id);\n this.editors[id].commandChangeObservable.next();\n }\n }\n }\n\n public getCurrentSelection(id: string): Selection {\n return this.selectionService.getCurrentSelection(this.getIframeDocumentEl(id));\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.windowService.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(id: string): Partial<SkyTextEditorStyleState> {\n const documentEl = this.getIframeDocumentEl(id);\n\n if (this.editorSelected(id)) {\n return {\n backColor: this.getColor(documentEl, 'BackColor'),\n fontColor: this.getColor(documentEl, 'ForeColor'),\n fontSize: parseInt(this.getFontSize(id), 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(id)\n };\n }\n\n /* istanbul ignore next */\n return {};\n }\n\n public getEditorInnerHtml(id: string): string {\n const documentEl = this.getIframeDocumentEl(id);\n if (documentEl) {\n return this.replaceHtmlCodes(documentEl.body.innerHTML);\n }\n return '';\n }\n\n public setEditorInnerHtml(id: string, value: string): void {\n const documentEl = this.getIframeDocumentEl(id);\n const editorContent = documentEl.body;\n if (editorContent.innerHTML !== value) {\n editorContent.innerHTML = value;\n }\n }\n\n public focusEditor(id: string): void {\n if (id in this.editors) {\n const windowEl = this.getContentWindowEl(id);\n const iframeDocumentEl = this.getIframeDocumentEl(id);\n const currentSelection = this.selectionService.getCurrentSelectionRange(iframeDocumentEl, windowEl);\n const cursorIsNotActiveAndHasReset = currentSelection && (currentSelection.startOffset === 0 && currentSelection.endOffset === 0);\n\n if (!this.editorSelected(id) || cursorIsNotActiveAndHasReset) {\n // focus the end of the editor\n const documentEl = this.windowService.nativeWindow.document;\n const editor: any = iframeDocumentEl.body;\n const range = documentEl.createRange();\n\n this.editors[id].iframeElementRef.focus();\n editor.focus();\n /* istanbul ignore else */\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 } else {\n // IE only\n const textRange = editor.createTextRange();\n textRange.moveToElementText(editor);\n textRange.collapse(false);\n textRange.select();\n }\n } else {\n // Cursor may not be active, restore it\n this.editors[id].iframeElementRef.focus();\n iframeDocumentEl.body.focus();\n }\n }\n }\n\n public getLink(editorId: string): UrlModalResult {\n let link: UrlModalResult = undefined;\n const anchorEl = this.getSelectedAnchorTag(editorId);\n if (anchorEl && anchorEl.href) {\n link = {\n target: anchorEl.getAttribute('target') === '_blank' ? UrlTarget.NewWindow : UrlTarget.None,\n url: anchorEl.href\n };\n }\n\n return link;\n }\n\n public getSelectedAnchorTag(editorId: string): HTMLAnchorElement {\n const selectedEl = this.getCurrentSelectionParentElement(editorId);\n\n return this.getParent(selectedEl, 'a') as HTMLAnchorElement;\n }\n\n public saveSelection(id: string): Range {\n return this.selectionService.getCurrentSelectionRange(this.getIframeDocumentEl(id), this.getContentWindowEl(id));\n }\n\n public selectElement(id: string, element: HTMLElement): void {\n this.selectionService.selectElement(this.getIframeDocumentEl(id), this.getContentWindowEl(id), element);\n }\n\n public setPlaceholder(id: string, placeholder?: string): void {\n const documentEl = this.getIframeDocumentEl(id);\n documentEl.body.setAttribute('data-placeholder', placeholder || '');\n }\n\n public setFontSize(id: string, fontSize: number): void {\n const doc = this.getIframeDocumentEl(id);\n this.execCommand(id, {command: 'fontSize', value: 1});\n const fontElements: HTMLElement[] = Array.from(doc.querySelectorAll('font[size=\"1\"]'));\n for (let element of fontElements) {\n element.removeAttribute('size');\n element.style.fontSize = (fontSize + 'px');\n }\n this.cleanUpBlankStyleTags(doc);\n\n this.focusEditor(id);\n this.editors[id].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 documentEl.removeEventListener('selectionchange', setting.selectionListener);\n documentEl.removeEventListener('input', setting.selectionListener);\n documentEl.removeEventListener('mousedown', setting.clickListener);\n documentEl.body.removeEventListener('paste', setting.pasteListener);\n }\n\n private getContentWindowEl(id: string): Window {\n return this.editors[id].iframeElementRef.contentWindow;\n }\n\n private getChildSelectedAnchorTags(editorId: string): Element[] {\n const selectedRange = this.getCurrentSelection(editorId).getRangeAt(0);\n if (selectedRange.toString().length <= 0) {\n return [];\n }\n\n const parentElement = this.getCurrentSelectionParentElement(editorId);\n const childElements = parentElement ? Array.from(parentElement.querySelectorAll('a')) : [];\n\n /* istanbul ignore next */\n return childElements.filter(element => {\n\n // IE specific\n if (!selectedRange.intersectsNode) {\n if (!element || !element.href) {\n return false;\n }\n const tempRange = document.createRange();\n tempRange.selectNodeContents(element);\n return (selectedRange.compareBoundaryPoints(Range.START_TO_START, tempRange) !== -1\n && selectedRange.compareBoundaryPoints(Range.START_TO_END, tempRange) !== 1) ||\n (selectedRange.compareBoundaryPoints(Range.END_TO_START, tempRange) !== -1\n && selectedRange.compareBoundaryPoints(Range.END_TO_END, tempRange) !== 1);\n }\n\n // Normal non-IE\n return !!element && !!element.href && selectedRange.intersectsNode(element);\n });\n }\n\n private getIframeDocumentEl(id: string): Document {\n /* istanbul ignore next */\n if (!(id in this.editors)) {\n return undefined;\n }\n\n const contentWindowEl = this.getContentWindowEl(id);\n if (contentWindowEl) {\n return contentWindowEl.document;\n }\n\n /* istanbul ignore next */\n return this.editors[id].iframeElementRef.contentDocument;\n }\n\n private getFontSize(id: string): string {\n let fontSize = STYLE_STATE_DEFAULTS.fontSize.toString();\n const selection = this.getCurrentSelection(id);\n if (\n selection &&\n selection.anchorNode &&\n selection.anchorNode.parentElement\n ) {\n let element = selection.anchorNode;\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 private createObservers(id: string, 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();\n const selectionListener = () => selectionObservable.next();\n const clickObservable = new Subject();\n const clickListener = () => clickObservable.next();\n const pasteListener = this.getPasteOverride(id);\n\n documentEl.addEventListener('selectionchange', selectionListener);\n documentEl.addEventListener('input', selectionListener);\n documentEl.addEventListener('mousedown', clickListener);\n documentEl.body.addEventListener('paste', pasteListener);\n return {\n iframeElementRef: element,\n selectionListener: selectionListener,\n clickListener: clickListener,\n pasteListener: pasteListener,\n selectionChangeObservable: selectionObservable,\n clickObservable: clickObservable,\n commandChangeObservable: new Subject()\n };\n }\n\n /* istanbul ignore next */\n private getPasteOverride(id: string): (e: ClipboardEvent) => void {\n return (e: ClipboardEvent): void => {\n e.preventDefault();\n const text = e.clipboardData.getData('text/plain');\n this.execCommand(id, { command: 'insertHTML', value: text });\n };\n }\n\n private getCurrentSelectionParentElement(id: string): Element {\n return this.selectionService.getCurrentSelectionParentElement(this.getIframeDocumentEl(id));\n }\n\n private getColor(documentEl: Document, selector: string): string {\n const commandValue = documentEl.queryCommandValue(selector);\n\n // Edge is weird and returns numbers\n if (typeof commandValue === 'number') {\n /* istanbul ignore next */\n // tslint:disable-next-line: no-bitwise\n return 'rgb(' + (commandValue & 0xFF) + ', ' +\n // tslint:disable-next-line: no-bitwise\n ((commandValue & 0xFF00) >> 8) + ', ' +\n // tslint:disable-next-line: no-bitwise\n ((commandValue & 0xFF0000) >> 16 ) + ')';\n }\n\n // Firefox uses 'Transparent' instead of a color value\n /* istanbul ignore next */\n if (commandValue.toString().toLowerCase() === 'transparent') {\n return STYLE_STATE_DEFAULTS.backColor;\n }\n return commandValue;\n }\n\n private hasLink(editorId: string): boolean {\n const anchorEl = this.getSelectedAnchorTag(editorId);\n const childAnchorEls = this.getChildSelectedAnchorTags(editorId);\n return childAnchorEls.length > 0 || (!!anchorEl && !!anchorEl.href);\n }\n\n private getParent(element: Element, tag: string): Element {\n let currentNode = element;\n while (currentNode && currentNode.tagName.toUpperCase() !== 'BODY') {\n if (currentNode.tagName.toUpperCase() === tag.toUpperCase()) {\n return currentNode;\n }\n currentNode = currentNode.parentElement;\n }\n return undefined;\n }\n\n private editorSelected(id: string): boolean {\n const documentEl = this.getIframeDocumentEl(id);\n return this.selectionService.isElementSelected(documentEl, documentEl.body);\n }\n\n /* istanbul ignore next */\n private insertHtmlInIE11(id: string, html: string): void {\n const documentEl = this.getIframeDocumentEl(id);\n const windowEl = this.getContentWindowEl(id);\n const sel = windowEl.getSelection();\n if (sel.getRangeAt && sel.rangeCount) {\n let range = sel.getRangeAt(0);\n range.deleteContents();\n\n const el = documentEl.createElement('div');\n el.innerHTML = html;\n let frag = documentEl.createDocumentFragment(), node, lastNode;\n while (el.firstChild) {\n node = el.firstChild;\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n\n // Preserve the selection\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n }\n\n private cleanUpBlankStyleTags(doc: Document): void {\n const orphanElements: HTMLElement[] = Array.from(doc.querySelectorAll('font,span,*[style=\"\"]'));\n for (let element of orphanElements) {\n if (!element.getAttribute('style')) {\n element.removeAttribute('style');\n }\n }\n const removableElements = orphanElements.filter(element => {\n const tagName = element.tagName.toUpperCase();\n return (tagName === 'FONT' || tagName === 'SPAN') &&\n (element.attributes.length === 0 || !element.hasChildNodes);\n });\n for (let 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 private replaceHtmlCodes(str: string): string {\n return str.replace(/&nbsp;/, String.fromCharCode(160))\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&amp;/g, '&');\n }\n\n private setEditorDisabled(id: string, focusableChildren: HTMLElement[], textEditorNativeElement: any, disabled: boolean): void {\n textEditorNativeElement.style.pointerEvents = disabled ? 'none' : 'auto';\n textEditorNativeElement.setAttribute('aria-disabled', disabled ? 'true' : 'false');\n /* istanbul ignore else */\n if (focusableChildren.length > 0) {\n focusableChildren.forEach(aFocusableChild => {\n aFocusableChild.tabIndex = disabled ? -1 : 0;\n });\n }\n this.getIframeDocumentEl(id).body.setAttribute('contenteditable', disabled ? 'false' : 'true');\n }\n\n}\n","import {\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n Component,\n Input,\n OnDestroy,\n OnInit\n} from '@angular/core';\n\nimport {\n SkyLibResourcesService\n} from '@skyux/i18n';\n\nimport {\n SkyDropdownMessage,\n SkyDropdownMessageType\n} from '@skyux/popovers';\n\nimport {\n forkJoin,\n Subject\n} from 'rxjs';\n\nimport {\n take,\n takeUntil\n} from 'rxjs/operators';\n\nimport {\n SkyTextEditorAdapterService\n} from '../services/text-editor-adapter.service';\n\nimport {\n SkyTextEditorMenuType\n} from '../types/menu-type';\n\nimport {\n SkyTextEditorMergeField\n} from '../types/text-editor-merge-field';\n\nimport {\n SkyFormsUtility\n} from '../../shared/forms-utility';\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})\nexport class SkyTextEditorMenubarComponent implements OnDestroy, OnInit {\n\n @Input()\n public editorFocusStream = new Subject();\n\n @Input()\n public editorId: string;\n\n @Input()\n public menus: SkyTextEditorMenuType[] = [];\n\n @Input()\n public mergeFields: SkyTextEditorMergeField[] = [];\n\n @Input()\n public set disabled(value: boolean) {\n const coercedValue = SkyFormsUtility.coerceBooleanProperty(value);\n if (coercedValue !== this.disabled) {\n this._disabled = coercedValue;\n this.changeDetector.markForCheck();\n }\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n private _disabled: boolean = false;\n\n public editDropdownStream = new Subject<SkyDropdownMessage>();\n\n public editItems: {\n function?: () => void,\n isDivider?: boolean,\n label?: string,\n keyShortcut?: string\n }[];\n\n public formatDropdownStream = new Subject<SkyDropdownMessage>();\n\n public formatItems: {\n function?: () => void,\n isDivider?: boolean,\n label?: string,\n keyShortcut?: string\n }[];\n\n public mergeFieldDropdownStream = new Subject<SkyDropdownMessage>();\n\n private ngUnsubscribe = new Subject<void>();\n\n constructor(\n private adapterService: SkyTextEditorAdapterService,\n private changeDetector: ChangeDetectorRef,\n private resources: SkyLibResourcesService\n ) {}\n\n public ngOnInit(): void {\n this.editorFocusStream\n .pipe(\n takeUntil(this.ngUnsubscribe)\n ).subscribe(() => {\n this.closeDropdowns();\n });\n\n forkJoin([\n // Format menu strings.\n this.resources.getString('skyux_text_editor_format_menu_action_bold_label'),\n this.resources.getString('skyux_text_editor_format_menu_action_bold_key_shortcut'),\n this.resources.getString('skyux_text_editor_format_menu_action_italic_label'),\n this.resources.getString('skyux_text_editor_format_menu_action_italic_key_shortcut'),\n this.resources.getString('skyux_text_editor_format_menu_action_underline_label'),\n this.resources.getString('skyux_text_editor_format_menu_action_underline_key_shortcut'),\n this.resources.getString('skyux_text_editor_format_menu_action_strikethrough_label'),\n this.resources.getString('skyux_text_editor_format_menu_action_clear_formatting_label'),\n\n // Edit menu string - start at index 8.\n this.resources.getString('skyux_text_editor_edit_menu_action_undo_label'),\n this.resources.getString('skyux_text_editor_edit_menu_action_undo_key_shortcut'),\n this.resources.getString('skyux_text_editor_edit_menu_action_redo_label'),\n this.resources.getString('skyux_text_editor_edit_menu_action_redo_key_shortcut'),\n this.resources.getString('skyux_text_editor_edit_menu_action_cut_label'),\n this.resources.getString('skyux_text_editor_edit_menu_action_cut_key_shortcut'),\n this.resources.getString('skyux_text_editor_edit_menu_action_copy_label'),\n this.resources.getString('skyux_text_editor_edit_menu_action_copy_key_shortcut'),\n this.resources.getString('skyux_text_editor_edit_menu_action_paste_label'),\n this.resources.getString('skyux_text_editor_edit_menu_action_paste_key_shortcut'),\n this.resources.getString('skyux_text_editor_edit_menu_action_select_all_label'),\n this.resources.getString('skyux_text_editor_edit_menu_action_select_all_key_shortcut')\n\n ])\n .pipe(take(1))\n .subscribe(resources => {\n this.formatItems = [\n {\n function: () => this.execCommand('bold'),\n label: resources[0],\n keyShortcut: resources[1]\n },\n {\n function: () => this.execCommand('italic'),\n label: resources[2],\n keyShortcut: resources[3]\n },\n {\n function: () => this.execCommand('underline'),\n label: resources[4],\n keyShortcut: resources[5]\n },\n {\n function: () => this.execCommand('strikethrough'),\n label: resources[6]\n },\n {\n isDivider: true\n },\n {\n function: () => this.clearFormat(),\n label: resources[7]\n }\n ];\n this.editItems = [\n {\n function: () => this.execCommand('undo'),\n label: resources[8],\n keyShortcut: resources[9]\n },\n {\n function: () => this.execCommand('redo'),\n label: resources[10],\n keyShortcut: resources[11]\n },\n {\n isDivider: true\n },\n {\n function: () => this.execCommand('cut'),\n label: resources[12],\n keyShortcut: resources[13]\n },\n {\n function: () => this.execCommand('copy'),\n label: resources[14],\n keyShortcut: resources[15]\n },\n {\n function: () => this.execCommand('paste'),\n label: resources[16],\n keyShortcut: resources[17]\n },\n {\n isDivider: true\n },\n {\n function: () => this.execCommand('selectAll'),\n label: resources[18],\n keyShortcut: resources[19]\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: any = ''): void {\n this.adapterService.execCommand(this.editorId, {\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=\"' + field.id +\n '\" data-fielddisplay=\"' + field.name +\n '\" src=\"' + (field.previewImageUrl || this.adapterService.getMergeFieldDataURI(field.name)) + '\">'\n );\n }\n\n private 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 private clearFormat(): void {\n let currentSelection = this.adapterService.getCurrentSelection(this.editorId);\n if (currentSelection.rangeCount > 0 && currentSelection.getRangeAt(0).toString().length <= 0) {\n this.execCommand('selectAll');\n }\n this.execCommand('removeFormat');\n }\n\n}\n","\n <sky-toolbar-item *ngFor=\"let menu of menus\"\n class=\"sky-text-editor-menu\"\n [ngClass]=\"'sky-text-editor-menu-' + menu\"\n >\n <ng-container\n [ngSwitch]=\"menu\"\n >\n <ng-container *ngSwitchCase=\"'edit'\">\n <sky-dropdown\n label=\"Edit menu\"\n [disabled]=\"disabled\"\n [messageStream]=\"editDropdownStream\"\n >\n <sky-dropdown-button>\n {{ 'skyux_text_editor_menubar_dropdown_button_edit_label' | skyLibResources }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let editItem of editItems\">\n <button *ngIf=\"!editItem.isDivider\"\n type=\"button\"\n (click)=\"editItem.function()\"\n >\n {{ editItem.label }}\n <div *ngIf=\"editItem.keyShortcut\"\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 </button>\n <div *ngIf=\"editItem.isDivider\"\n class=\"sky-text-editor-dropdown-item-divider\"\n role=\"divider\"\n >\n </div>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n <ng-container *ngSwitchCase=\"'format'\">\n <sky-dropdown\n label=\"Format menu\"\n [disabled]=\"disabled\"\n [messageStream]=\"formatDropdownStream\"\n >\n <sky-dropdown-button>\n {{ 'skyux_text_editor_menubar_dropdown_button_format_label' | skyLibResources }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let formatItem of formatItems\">\n <button *ngIf=\"!formatItem.isDivider\"\n type=\"button\"\n (click)=\"formatItem.function()\"\n >\n {{ formatItem.label }}\n <div *ngIf=\"formatItem.keyShortcut\"\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 </button>\n <div *ngIf=\"formatItem.isDivider\"\n class=\"sky-text-editor-dropdown-item-divider\"\n role=\"divider\"\n >\n </div>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n <ng-container *ngSwitchCase=\"'merge-field'\">\n <sky-dropdown *ngIf=\"mergeFields && mergeFields.length > 0\"\n label=\"Insert merge field\"\n [disabled]=\"disabled\"\n [messageStream]=\"mergeFieldDropdownStream\"\n >\n <sky-dropdown-button>\n {{ 'skyux_text_editor_menubar_dropdown_button_insert_label' | skyLibResources }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let mergeField of mergeFields\">\n <button\n type=\"button\"\n (click)=\"insertMergeField(mergeField)\"\n >\n {{ mergeField.name }}\n </button>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n </ng-container>\n </sky-toolbar-item>\n","import {\n UrlModalResult\n} from './text-editor-url-modal-result';\n\n/**\n * @internal\n */\nexport class SkyUrlModalContext {\n public urlResult: UrlModalResult;\n}\n","import {\n Component\n} from '@angular/core';\n\nimport {\n SkyModalInstance\n} from '@skyux/modals';\n\nimport {\n SkyValidation\n} from '@skyux/validation';\n\nimport {\n UrlModalResult\n} from './text-editor-url-modal-result';\n\nimport {\n SkyUrlModalContext\n} from './text-editor-url-modal-context';\n\nimport {\n UrlTarget\n} from './text-editor-url-target';\n\nconst emailKey = 'mailto:';\nconst queryStringParamKey = '?Subject=';\n\n/**\n * @internal\n */\n@Component({\n selector: 'skyux-text-editor-url-modal',\n templateUrl: './text-editor-url-modal.component.html',\n styleUrls: ['./text-editor-url-modal.component.scss']\n})\nexport class SkyTextEditorUrlModalComponent {\n\n public set activeTab(value: number) {\n this._activeTab = value;\n this.valid = this.isValid();\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 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 public get url(): string {\n return this._url;\n }\n\n public emailAddressValid: boolean = false;\n\n public subject: string = '';\n\n public target: number = 0;\n\n public valid: boolean = false;\n\n public _activeTab = 0;\n\n private _emailAddress: string = '';\n\n private _url: string = 'https://';\n\n constructor(\n private readonly modalInstance: SkyModalInstance,\n modalContext: SkyUrlModalContext\n ) {\n if (modalContext.urlResult) {\n if (modalContext.urlResult.url.startsWith(emailKey)) {\n this.emailAddress = modalContext.urlResult.url.replace(emailKey, '');\n\n let queryStringIndex = this.emailAddress.indexOf(queryStringParamKey);\n queryStringIndex = queryStringIndex > -1 ? queryStringIndex : this.emailAddress.indexOf(queryStringParamKey.toLowerCase());\n\n if (queryStringIndex > -1) {\n this.subject = decodeURI(this.emailAddress).slice(queryStringIndex + queryStringParamKey.length);\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 = modalContext.urlResult.url,\n this.target = 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: number): void {\n this.activeTab = value;\n }\n\n public save(): void {\n if (this.isValid()) {\n if (this.activeTab === 0) {\n this.modalInstance.save({\n url: this.url,\n target: this.target ? parseInt(this.target as any, undefined) : 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 private getEmailUrl(): string {\n return emailKey + this.emailAddress + (this.subject ? '?Subject=' + encodeURI(this.subject) : '');\n }\n\n private 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}\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\n tabHeading=\"Web page\"\n >\n <div class=\"sky-form-group sky-text-editor-url-modal-first-field\">\n <sky-input-box>\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 class=\"sky-form-control\"\n type=\"text\"\n [(ngModel)]=\"url\"\n skyId\n #urlInput=\"skyId\"\n />\n </sky-input-box>\n </div>\n <sky-input-box class=\"sky-form-group\">\n <label\n class=\"sky-control-label\"\n [for]=\"targetInput.id\"\n >\n {{ 'skyux_text_editor_url_modal_open_label' | skyLibResources }}\n </label>\n <select\n class=\"sky-form-control\"\n [(ngModel)]=\"target\"\n skyId\n #targetInput=\"skyId\"\n >\n <option value=\"0\">\n {{ 'skyux_text_editor_url_modal_current_option_label' | skyLibResources }}\n </option>\n <option value=\"1\">\n {{ 'skyux_text_editor_url_modal_new_option_label' | skyLibResources }}\n </option>\n </select>\n </sky-input-box>\n </sky-tab>\n <sky-tab\n tabHeading=\"Email address\"\n >\n <div class=\"sky-form-group first-field\">\n <sky-input-box>\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 class=\"sky-form-control\"\n type=\"text\"\n [(ngModel)]=\"emailAddress\"\n skyId\n #emailAddressInput=\"skyId\"\n />\n </sky-input-box>\n </div>\n <sky-input-box class=\"sky-form-group\">\n <label\n class=\"sky-control-label\"\n [for]=\"subjectInput.id\"\n >\n {{ 'skyux_text_editor_url_modal_subject_label' | skyLibResources }}\n </label>\n <input\n class=\"sky-form-control\"\n type=\"text\"\n [(ngModel)]=\"subject\"\n skyId\n #subjectInput=\"skyId\"\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\n type=\"button\"\n class=\"sky-btn sky-btn-link\"\n (click)=\"cancel()\"\n >\n {{ 'skyux_text_editor_url_modal_cancel_button_label' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit\n} from '@angular/core';\n\nimport {\n Subject\n} from 'rxjs';\n\nimport {\n SkyColorpickerOutput,\n SkyColorpickerMessage,\n SkyColorpickerMessageType\n} from '@skyux/colorpicker';\n\nimport {\n SkyModalCloseArgs,\n SkyModalService\n} from '@skyux/modals';\n\nimport {\n SkyDropdownMessage,\n SkyDropdownMessageType\n} from '@skyux/popovers';\n\nimport {\n STYLE_STATE_DEFAULTS\n} from '../defaults/style-state-defaults';\n\nimport {\n SkyTextEditorAdapterService\n} from '../services/text-editor-adapter.service';\n\nimport {\n SkyTextEditorFont\n} from '../types/font-state';\n\nimport {\n SkyTextEditorStyleState\n} from '../types/style-state';\n\nimport {\n SkyTextEditorToolbarActionType\n} from '../types/toolbar-action-type';\n\nimport {\n SkyTextEditorUrlModalComponent\n} from '../url-modal/text-editor-url-modal.component';\n\nimport {\n UrlTarget\n} from '../url-modal/text-editor-url-target';\n\nimport {\n SkyUrlModalContext\n} from '../url-modal/text-editor-url-modal-context';\n\nimport {\n SkyFormsUtility\n} from '../../shared/forms-utility';\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})\nexport class SkyTextEditorToolbarComponent implements OnInit {\n\n @Input()\n public editorFocusStream = new Subject();\n\n @Input()\n public editorId: string;\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 get styleState(): SkyTextEditorStyleState {\n return this._styleState;\n }\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 @Input()\n public set disabled(value: boolean) {\n const coercedValue = SkyFormsUtility.coerceBooleanProperty(value);\n if (coercedValue !== this.disabled) {\n this._disabled = coercedValue;\n this.changeDetector.markForCheck();\n }\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public backColorpickerStream = new Subject<SkyColorpickerMessage>();\n\n public colorpickerStream = new Subject<SkyColorpickerMessage>();\n\n public fontPickerStream = new Subject<SkyDropdownMessage>();\n\n public fontSizeStream = new Subject<SkyDropdownMessage>();\n\n public styleStateFontName: string;\n\n private _disabled: boolean = false;\n\n private _styleState = STYLE_STATE_DEFAULTS;\n\n constructor(\n private adapterService: SkyTextEditorAdapterService,\n private changeDetector: ChangeDetectorRef,\n private modalService: SkyModalService\n ) {}\n\n public ngOnInit(): void {\n this.editorFocusStream.subscribe(() => {\n this.styleState = {\n ...this._styleState,\n ...this.adapterService.getStyleState(this.editorId) as any\n };\n this.closeDropdowns();\n this.changeDetector.detectChanges();\n });\n }\n\n public execCommand(command: string, value: any = ''): void {\n this.adapterService.execCommand(this.editorId, {\n command: command,\n value: value\n });\n this.styleState = {\n ...this.styleState,\n ...this.adapterService.getStyleState(this.editorId)\n };\n }\n\n public toggleFontStyle(currentState: boolean, newState: boolean, command: string): 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(this.editorId);\n const currentLink = this.adapterService.getLink(this.editorId);\n const inputModal = this.modalService.open(SkyTextEditorUrlModalComponent, [{\n provide: SkyUrlModalContext,\n useValue: { urlResult: currentLink }\n }]);\n inputModal.closed.subscribe((result: SkyModalCloseArgs) => {\n if (result.reason === 'save' && priorSelection) {\n if (currentLink) {\n const anchor = this.adapterService.getSelectedAnchorTag(this.editorId);\n this.adapterService.selectElement(this.editorId, anchor);\n }\n\n this.execCommand('unlink');\n if (result.data.target === UrlTarget.None) {\n // Current window\n this.execCommand('createLink', result.data.url);\n } else {\n // New Window\n const sText = this.adapterService.getCurrentSelection(this.editorId);\n this.execCommand('insertHTML', '<a href=\"' + result.data.url + '\" rel=\"noopener noreferrer\" target=\"_blank\">' + sText + '</a>');\n }\n }\n });\n }\n\n public unlink(): void {\n let currentSelectionRange = this.adapterService.getCurrentSelection(this.editorId).getRangeAt(0);\n if (currentSelectionRange.toString().length <= 0) {\n const anchorTag = this.adapterService.getSelectedAnchorTag(this.editorId);\n this.adapterService.selectElement(this.editorId, anchorTag);\n }\n this.execCommand('unlink');\n }\n\n public changeFontSize(size: number): void {\n this.adapterService.setFontSize(this.editorId, size);\n this.styleState = {\n ...this.styleState,\n ...this.adapterService.getStyleState(this.editorId)\n };\n }\n\n public onColorpickerColorChanged(color: SkyColorpickerOutput, isBackground = false): void {\n this.execCommand(isBackground ? 'backColor' : 'foreColor', color.hex);\n }\n\n private closeDropdowns(): void {\n const message: SkyColorpickerMessage = { type: SkyColorpickerMessageType.Close };\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 private getFontName(fontName: string): string {\n for (let i = 0; i < this.fontList.length; i++) {\n if (fontName.replace(/['\"]+/g, '') === this.fontList[i].name) {\n return this.fontList[i].name;\n }\n }\n }\n}\n","\n <sky-toolbar-item *ngFor=\"let action of toolbarActions\"\n class=\"sky-text-editor-toolbar-action\"\n [ngClass]=\"'sky-text-editor-toolbar-action-' + action\"\n >\n <ng-container\n [ngSwitch]=\"action\"\n >\n <ng-container *ngSwitchCase=\"'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 <sky-dropdown-item *ngFor=\"let fontModel of fontList\">\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 </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n <ng-container *ngSwitchCase=\"'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 <sky-dropdown-item *ngFor=\"let size of fontSizeList\">\n <button\n type=\"button\"\n (click)=\"changeFontSize(size)\"\n >\n {{ size + 'px' }}\n </button>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n <ng-container *ngSwitchCase=\"'font-style'\">\n <div\n class=\"sky-switch-icon-group sky-text-editor-font-style-picker\"\n >\n <sky-checkbox\n icon=\"bold\"\n label=\"Bold\"\n title=\"Bold\"\n [disabled]=\"disabled\"\n [ngModel]=\"styleState.boldState\"\n (ngModelChange)=\"toggleFontStyle(styleState.boldState, $event, 'bold')\"\n >\n </sky-checkbox>\n <sky-checkbox\n icon=\"italic\"\n label=\"Italicized\"\n title=\"Italicized\"\n [disabled]=\"disabled\"\n [ngModel]=\"styleState.italicState\"\n (ngModelChange)=\"toggleFontStyle(styleState.italicState, $event, 'italic')\"\n >\n </sky-checkbox>\n <sky-checkbox\n icon=\"underline\"\n label=\"Underline\"\n title=\"Underline\"\n [disabled]=\"disabled\"\n [ngModel]=\"styleState.underlineState\"\n (ngModelChange)=\"toggleFontStyle(styleState.underlineState, $event, 'underline')\"\n >\n </sky-checkbox>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'color'\">\n <div class=\"sky-text-editor-colorpicker-group\">\n <div class=\"sky-text-editor-colorpicker-container\">\n <sky-colorpicker\n class=\"sky-text-editor-font-color-picker\"\n label=\"Font color\"\n [messageStream]=\"colorpickerStream\"\n [showResetButton]=\"false\"\n (selectedColorChanged)=\"onColorpickerColorChanged($event)\"\n #colorPicker\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 class=\"sky-text-editor-background-color-picker\"\n label=\"Background color\"\n [messageStream]=\"backColorpickerStream\"\n [showResetButton]=\"false\"\n (selectedColorChanged)=\"onColorpickerColorChanged($event, true)\"\n #backColorPicker\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 </ng-container>\n <ng-container *ngSwitchCase=\"'list'\">\n <div\n class=\"sky-switch-icon-group\"\n >\n <button\n aria-label=\"Bulleted list\"\n class=\"sky-btn sky-btn-default sky-btn-icon\"\n title=\"Bulleted list\"\n [disabled]=\"disabled\"\n (click)=\"execCommand('insertUnorderedList')\"\n >\n <sky-icon *skyThemeIf=\"'default'\"\n icon=\"list-ul\"\n >\n </sky-icon>\n <sky-icon *skyThemeIf=\"'modern'\"\n icon=\"bullet-list-line\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n <button\n aria-label=\"Numbered list\"\n class=\"sky-btn sky-btn-default sky-btn-icon\"\n title=\"Numbered list\"\n [disabled]=\"disabled\"\n (click)=\"execCommand('insertOrderedList')\"\n >\n <sky-icon *skyThemeIf=\"'default'\"\n icon=\"list-ol\"\n >\n </sky-icon>\n <sky-icon *skyThemeIf=\"'modern'\"\n icon=\"number-list-line\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'alignment'\">\n <div\n class=\"sky-switch-icon-group\"\n >\n <button\n aria-label=\"Align left\"\n class=\"sky-btn sky-btn-default sky-btn-icon\"\n title=\"Align left\"\n [disabled]=\"disabled\"\n (click)=\"execCommand('justifyLeft')\"\n >\n <sky-icon *skyThemeIf=\"'default'\"\n icon=\"align-left\"\n >\n </sky-icon>\n <sky-icon *skyThemeIf=\"'modern'\"\n icon=\"align-left-text-line\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n <button\n aria-label=\"Align center\"\n class=\"sky-btn sky-btn-default sky-btn-icon\"\n title=\"Align center\"\n [disabled]=\"disabled\"\n (click)=\"execCommand('justifyCenter')\"\n >\n <sky-icon *skyThemeIf=\"'default'\"\n icon=\"align-center\"\n >\n </sky-icon>\n <sky-icon *skyThemeIf=\"'modern'\"\n icon=\"center-text-line\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n <button\n aria-label=\"Align right\"\n class=\"sky-btn sky-btn-default sky-btn-icon\"\n title=\"Align right\"\n [disabled]=\"disabled\"\n (click)=\"execCommand('justifyRight')\"\n >\n <sky-icon *skyThemeIf=\"'default'\"\n icon=\"align-right\"\n >\n </sky-icon>\n <sky-icon *skyThemeIf=\"'modern'\"\n icon=\"align-right-text-line\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'indentation'\">\n <div\n class=\"sky-switch-icon-group\"\n >\n <button\n aria-label=\"Outdent\"\n class=\"sky-btn sky-btn-default sky-btn-icon\"\n title=\"Outdent\"\n [disabled]=\"disabled\"\n (click)=\"execCommand('outdent')\"\n >\n <sky-icon *skyThemeIf=\"'default'\"\n icon=\"outdent\"\n >\n </sky-icon>\n <sky-icon *skyThemeIf=\"'modern'\"\n icon=\"outdent-line\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n <button\n aria-label=\"Indent\"\n class=\"sky-btn sky-btn-default sky-btn-icon\"\n title=\"Indent\"\n [disabled]=\"disabled\"\n (click)=\"execCommand('indent')\"\n >\n <sky-icon *skyThemeIf=\"'default'\"\n icon=\"indent\"\n >\n </sky-icon>\n <sky-icon *skyThemeIf=\"'modern'\"\n icon=\"indent-line\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'undo-redo'\">\n <div\n class=\"sky-switch-icon-group\"\n >\n <button\n aria-label=\"Undo\"\n class=\"sky-btn sky-btn-default sky-btn-icon\"\n title=\"Undo\"\n [disabled]=\"disabled\"\n (click)=\"execCommand('undo')\"\n >\n <sky-icon *skyThemeIf=\"'default'\"\n icon=\"undo\"\n >\n </sky-icon>\n <sky-icon *skyThemeIf=\"'modern'\"\n icon=\"undo-line\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n <button\n aria-label=\"Redo\"\n class=\"sky-btn sky-btn-default sky-btn-icon\"\n title=\"Redo\"\n [disabled]=\"disabled\"\n (click)=\"execCommand('redo')\"\n >\n <sky-icon *skyThemeIf=\"'default'\"\n icon=\"repeat\"\n >\n </sky-icon>\n <sky-icon *skyThemeIf=\"'modern'\"\n icon=\"redo-line\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'link'\">\n <div\n class=\"sky-switch-icon-group\"\n >\n <button\n aria-label=\"Link\"\n class=\"sky-btn sky-btn-default sky-btn-icon\"\n title=\"Link\"\n [disabled]=\"disabled\"\n [ngClass]=\"{\n 'icon-btn-active': styleState.linkState\n }\"\n (click)=\"link()\"\n >\n <sky-icon *skyThemeIf=\"'default'\"\n icon=\"link\"\n >\n </sky-icon>\n <sky-icon *skyThemeIf=\"'modern'\"\n icon=\"link-line\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n <button\n aria-label=\"Unlink\"\n class=\"sky-btn sky-btn-default sky-btn-icon\"\n title=\"Unlink\"\n [disabled]=\"!styleState.linkState || disabled\"\n (click)=\"unlink()\"\n >\n <sky-icon *skyThemeIf=\"'default'\"\n icon=\"unlink\"\n >\n </sky-icon>\n <sky-icon *skyThemeIf=\"'modern'\"\n icon=\"unlink-line\"\n iconType=\"skyux\"\n >\n </sky-icon>\n </button>\n </div>\n </ng-container>\n </ng-container>\n </sky-toolbar-item>\n","import {\n SkyTextEditorMenuType\n} from '../types/menu-type';\n\n/**\n * @internal\n */\nexport const MENU_DEFAULTS: SkyTextEditorMenuType[] = [\n 'edit',\n 'format'\n];\n","import {\n SkyTextEditorToolbarActionType\n} 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 const FONT_SIZE_LIST_DEFAULTS: number[] = [6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 36, 48];\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n forwardRef,\n Input,\n OnDestroy,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR\n} from '@angular/forms';\n\nimport {\n takeUntil\n} from 'rxjs/operators';\n\nimport {\n Subject\n} from 'rxjs';\n\nimport {\n SkyCoreAdapterService\n} from '@skyux/core';\n\nimport {\n MENU_DEFAULTS\n} from './defaults/menu-defaults';\n\nimport {\n STYLE_STATE_DEFAULTS\n} from './defaults/style-state-defaults';\n\nimport {\n TOOLBAR_ACTION_DEFAULTS\n} from './defaults/toolbar-action-defaults';\n\nimport {\n SkyTextEditorAdapterService\n} from './services/text-editor-adapter.service';\n\nimport {\n SkyTextEditorService\n} from './services/text-editor.service';\n\nimport {\n SkyTextSanitizationService\n} from './services/text-sanitization.service';\n\nimport {\n FONT_LIST_DEFAULTS\n} from './defaults/font-list-defaults';\n\nimport {\n FONT_SIZE_LIST_DEFAULTS\n} from './defaults/font-size-list-defaults';\n\nimport {\n SkyTextEditorFont\n} from './types/font-state';\n\nimport {\n SkyTextEditorMenuType\n} from './types/menu-type';\n\nimport {\n SkyTextEditorStyleState\n} from './types/style-state';\n\nimport {\n SkyTextEditorMergeField\n} from './types/text-editor-merge-field';\n\nimport {\n SkyTextEditorToolbarActionType\n} from './types/toolbar-action-type';\n\nimport {\n SkyFormsUtility\n} from '../shared/forms-utility';\n\n/**\n * Auto-incrementing integer used to generate unique ids for radio components.\n */\nlet nextUniqueId = 0;\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 providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n // tslint:disable-next-line: no-forward-ref\n useExisting: forwardRef(() => SkyTextEditorComponent),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class SkyTextEditorComponent implements AfterViewInit, ControlValueAccessor, OnDestroy {\n\n /**\n * Indicates whether to put focus on the editor after it renders.\n */\n @Input()\n public autofocus: boolean = false;\n\n /**\n * Indicates whether to disable the text editor.\n * @default false\n */\n @Input()\n public set disabled(value: boolean) {\n const coercedValue = SkyFormsUtility.coerceBooleanProperty(value);\n if (coercedValue !== this.disabled) {\n this._disabled = coercedValue;\n if (this._disabled) {\n this.adapterService.disableEditor(this.id, this.focusableChildren, this.iframeRef.nativeElement);\n } else {\n this.adapterService.enableEditor(this.id, this.focusableChildren, this.iframeRef.nativeElement);\n }\n this.changeDetector.markForCheck();\n }\n }\n\n public get disabled() {\n return this._disabled;\n }\n\n public editorFocusStream = new Subject();\n\n // tslint:disable: max-line-length\n /**\n * Specifies 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 // tslint:enable: max-line-length\n @Input()\n public fontList: SkyTextEditorFont[] = FONT_LIST_DEFAULTS;\n\n /**\n * Specifies 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 fontSizeList: number[] = FONT_SIZE_LIST_DEFAULTS;\n\n /**\n * Specifies a unique ID attribute for the text editor.\n * By default, the component generates a random ID.\n */\n @Input()\n public id = `sky-text-editor-${++nextUniqueId}`;\n\n /**\n * Specifies the initial styles for all content, including background color, font size, and link state.\n */\n @Input()\n public set initialStyleState(state: SkyTextEditorStyleState) {\n // Do not update the state after initialization has taken place\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 * Specifies the menus to include in the menu bar.\n * @default [ 'edit', 'format' ]\n */\n @Input()\n public menus: SkyTextEditorMenuType[] = MENU_DEFAULTS;\n\n /**\n * Specifies the merge fields to include in the merge field menu.\n */\n @Input()\n public mergeFields: SkyTextEditorMergeField[] = [];\n\n /**\n * Specifies placeholder text to display when the text entry area is empty.\n */\n @Input()\n public set placeholder(value: string) {\n if (value !== this._placeholder) {\n this._placeholder = value;\n if (this.initialized) {\n this.adapterService.setPlaceholder(this.id, value);\n }\n }\n }\n\n public get placeholder(): string {\n return this._placeholder;\n }\n\n // tslint:disable: max-line-length\n /**\n * Specifies the actions to include in the toolbar and determines their order.\n * @default [ 'font-family', 'font-size', 'font-style', 'color', 'list', 'link ]\n */\n // tslint:enable: max-line-length\n @Input()\n public toolbarActions: SkyTextEditorToolbarActionType[] = TOOLBAR_ACTION_DEFAULTS;\n\n public set value(value: string) {\n // Set clear state to be an empty string\n let valueString: string = value;\n if (!value || (value.trim() === '<p></p>' && value.trim() === '<br>')) {\n valueString = '';\n }\n valueString = this.sanitizationService.sanitize(valueString).trim();\n\n if (this._value !== valueString) {\n this._value = valueString;\n\n // Autofocus isn't testable in Firefox and IE.\n /* istanbul ignore next */\n if (this.autofocus && !this.focusInitialized) {\n this.adapterService.focusEditor(this.id);\n this.focusInitialized = true;\n }\n this.onChange();\n }\n }\n\n public get value(): string {\n return this._value;\n }\n\n private focusableChildren: HTMLElement[];\n\n private focusInitialized: boolean = false;\n\n @ViewChild('iframe')\n private iframeRef: ElementRef;\n\n private initialized: boolean = false;\n\n private ngUnsubscribe = new Subject<void>();\n\n private _disabled: boolean = false;\n\n private _initialStyleState = Object.assign({}, STYLE_STATE_DEFAULTS);\n\n private _placeholder = '';\n\n private _value: string = '<p></p>';\n\n constructor (\n private changeDetector: ChangeDetectorRef,\n private coreAdapterService: SkyCoreAdapterService,\n private adapterService: SkyTextEditorAdapterService,\n private editorService: SkyTextEditorService,\n private sanitizationService: SkyTextSanitizationService\n ) {}\n\n public ngAfterViewInit(): void {\n this.adapterService.addEditor(\n this.id,\n this.iframeRef.nativeElement,\n this.initialStyleState,\n this.placeholder\n );\n\n this.editorService.selectionChangeListener(this.id)\n .pipe(\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(() => {\n this.updateValueAndStyle();\n this.editorFocusStream.next();\n });\n\n this.editorService.clickListener(this.id)\n .pipe(\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(() => {\n this.editorFocusStream.next();\n });\n\n this.editorService.commandChangeListener(this.id)\n .pipe(\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(() => {\n this.updateValueAndStyle();\n });\n\n this.adapterService.setEditorInnerHtml(this.id, this._value);\n\n /* istanbul ignore next */\n if (this.autofocus) {\n this.adapterService.focusEditor(this.id);\n }\n\n this.focusableChildren = this.coreAdapterService.getFocusableChildren(this.iframeRef.nativeElement, {\n ignoreVisibility: true\n });\n\n this.initialized = true;\n }\n\n public ngOnDestroy(): void {\n this.adapterService.removeObservers(this.editorService.editors[this.id]);\n this.editorService.removeEditor(this.id);\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public writeValue(obj: string): void {\n this.value = obj;\n\n // Update HTML if necessary.\n const editorValue = this.adapterService.getEditorInnerHtml(this.id);\n if (this.initialized && editorValue !== this._value) {\n this.adapterService.setEditorInnerHtml(this.id, this._value);\n }\n }\n\n public registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public onChange(): void {\n this._onChange(this.value);\n }\n\n public updateValueAndStyle(): void {\n this.value = this.adapterService.getEditorInnerHtml(this.id);\n this._initialStyleState = {\n ...this._initialStyleState,\n ...this.adapterService.getStyleState(this.id) as any\n };\n }\n\n /* istanbul ignore next */\n public onTouch = () => {};\n\n /* istanbul ignore next */\n private _onChange = (_: string) => {};\n}\n","<div\n class=\"sky-text-editor\"\n>\n <sky-toolbar\n class=\"sky-text-editor-toolbar\"\n >\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 [editorId]=\"id\"\n [menus]=\"menus\"\n [mergeFields]=\"mergeFields\"\n >\n </sky-text-editor-menubar>\n </sky-toolbar-section>\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 [editorId]=\"id\"\n [fontList]=\"fontList\"\n [fontSizeList]=\"fontSizeList\"\n [toolbarActions]=\"toolbarActions\"\n [styleState]=\"initialStyleState\"\n >\n </sky-text-editor-toolbar>\n </sky-toolbar-section>\n </sky-toolbar>\n <iframe\n class=\"sky-text-editor-wrapper\"\n src=\"about:blank\"\n title=\"Text Editor\"\n [ngClass]=\"{\n 'sky-text-editor-wrapper-disabled': disabled\n }\"\n #iframe\n >\n </iframe>\n</div>\n","import {\n NgModule\n} from '@angular/core';\n\nimport {\n CommonModule\n} from '@angular/common';\n\nimport {\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\n\nimport {\n SkyColorpickerModule\n} from '@skyux/colorpicker';\n\nimport {\n SkyCoreAdapterModule,\n SkyIdModule\n} from '@skyux/core';\n\nimport {\n SkyCheckboxModule,\n SkyInputBoxModule\n} from '@skyux/forms';\n\nimport {\n SkyModalModule\n} from '@skyux/modals';\n\nimport {\n SkyI18nModule\n} from '@skyux/i18n';\n\nimport {\n SkyIconModule\n} from '@skyux/indicators';\n\nimport {\n SkyToolbarModule\n} from '@skyux/layout';\n\nimport {\n SkyDropdownModule\n} from '@skyux/popovers';\n\nimport {\n SkyTabsModule\n} from '@skyux/tabs';\n\nimport {\n SkyThemeModule\n} from '@skyux/theme';\n\nimport {\n SkyTextEditorResourcesModule\n} from '../../modules/shared/sky-text-editor-resources.module';\n\nimport {\n SkyTextEditorMenubarComponent\n} from './menubar/text-editor-menubar.component';\n\nimport {\n SkyTextEditorToolbarComponent\n} from './toolbar/text-editor-toolbar.component';\n\nimport {\n SkyTextEditorUrlModalComponent\n} from './url-modal/text-editor-url-modal.component';\n\nimport {\n SkyTextEditorComponent\n} from './text-editor.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SkyCoreAdapterModule,\n SkyTextEditorResourcesModule,\n SkyI18nModule,\n SkyIconModule,\n SkyIdModule,\n SkyInputBoxModule,\n SkyColorpickerModule,\n SkyCheckboxModule,\n SkyDropdownModule,\n SkyModalModule,\n SkyTabsModule,\n SkyThemeModule,\n SkyToolbarModule\n ],\n exports: [\n SkyTextEditorComponent,\n SkyTextEditorUrlModalComponent,\n SkyTextEditorToolbarComponent,\n SkyTextEditorMenubarComponent\n ],\n declarations: [\n SkyTextEditorComponent,\n SkyTextEditorUrlModalComponent,\n SkyTextEditorToolbarComponent,\n SkyTextEditorMenubarComponent\n ],\n entryComponents: [\n SkyTextEditorUrlModalComponent\n ]\n})\nexport class SkyTextEditorModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AAE1C,SAAS,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,IAAa;;;IAGzD,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;QACjC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;KACjD;AACH,CAAC,CAAC,CAAC;AAEH;;;;;;MASa,0BAA0B;IAHvC;QAKU,sBAAiB,GAAa,CAAC,QAAQ,CAAC,CAAC;KASlD;;;;IAJQ,QAAQ,CAAC,UAAkB;QAChC,OAAO,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;KAC7E;;uHATU,0BAA0B;2HAA1B,0BAA0B,cAFzB,MAAM;2FAEP,0BAA0B;kBAHtC,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;MCNY,2BAA2B;IAqBtC,YACU,SAAuB,EACvB,mBAA+C;QAD/C,cAAS,GAAT,SAAS,CAAc;QACvB,wBAAmB,GAAnB,mBAAmB,CAA4B;QANlD,kBAAa,GAAa,EAAE,CAAC;QAE5B,cAAS,GAAW,EAAE,CAAC;KAK1B;;;;IAnBL,IACW,QAAQ,CAAC,KAAa;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,OAAO,KAAK,IAAI,CAAC,SAAS,EAAE;YAC9B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;;;YAIzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;SACtE;KACF;;wHAfU,2BAA2B;4GAA3B,2BAA2B,+FClBxC,8FAKA;2FDaa,2BAA2B;kBAJvC,SAAS;mBAAC;oBACT,QAAQ,EAAE,uBAAuB;oBACjC,WAAW,EAAE,oCAAoC;iBAClD;yIAOY,QAAQ;sBADlB,KAAK;;;MEAK,wBAAwB;;qHAAxB,wBAAwB;sHAAxB,wBAAwB,iBAHjC,2BAA2B,aAN3B,YAAY,aAGZ,2BAA2B;sHAMlB,wBAAwB,YAV1B;YACP,YAAY;SACb;2FAQU,wBAAwB;kBAXpC,QAAQ;mBAAC;oBACR,OAAO,EAAE;wBACP,YAAY;qBACb;oBACD,OAAO,EAAE;wBACP,2BAA2B;qBAC5B;oBACD,YAAY,EAAE;wBACZ,2BAA2B;qBAC5B;iBACF;;;ACtBD;;;;;;AAiBA,MAAM,SAAS,GAA0C;IACvD,OAAO,EAAE,EAAC,iDAAiD,EAAC,EAAC,SAAS,EAAC,MAAM,EAAC,EAAC,wDAAwD,EAAC,EAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,mDAAmD,EAAC,EAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,0DAA0D,EAAC,EAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,sDAAsD,EAAC,EAAC,SAAS,EAAC,WAAW,EAAC,EAAC,6DAA6D,EAAC,EAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,0DAA0D,EAAC,EAAC,SAAS,EAAC,eAAe,EAAC,EAAC,6DAA6D,EAAC,EAAC,SAAS,EAAC,kBAAkB,EAAC,EAAC,+CAA+C,EAAC,EAAC,SAAS,EAAC,MAAM,EAAC,EAAC,sDAAsD,EAAC,EAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,+CAA+C,EAAC,EAAC,SAAS,EAAC,MAAM,EAAC,EAAC,sDAAsD,EAAC,EAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,8CAA8C,EAAC,EAAC,SAAS,EAAC,KAAK,EAAC,EAAC,qDAAqD,EAAC,EAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,+CAA+C,EAAC,EAAC,SAAS,EAAC,MAAM,EAAC,EAAC,sDAAsD,EAAC,EAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,gDAAgD,EAAC,EAAC,SAAS,EAAC,OAAO,EAAC,EAAC,uDAAuD,EAAC,EAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,qDAAqD,EAAC,EAAC,SAAS,EAAC,YAAY,EAAC,EAAC,4DAA4D,EAAC,EAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,sDAAsD,EAAC,EAAC,SAAS,EAAC,MAAM,EAAC,EAAC,wDAAwD,EAAC,EAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,wDAAwD,EAAC,EAAC,SAAS,EAAC,oBAAoB,EAAC,EAAC,0CAA0C,EAAC,EAAC,SAAS,EAAC,aAAa,EAAC,EAAC,uCAAuC,EAAC,EAAC,SAAS,EAAC,yBAAyB,EAAC,EAAC,wCAAwC,EAAC,EAAC,SAAS,EAAC,uBAAuB,EAAC,EAAC,kDAAkD,EAAC,EAAC,SAAS,EAAC,gBAAgB,EAAC,EAAC,8CAA8C,EAAC,EAAC,SAAS,EAAC,YAAY,EAAC,EAAC,yCAAyC,EAAC,EAAC,SAAS,EAAC,eAAe,EAAC,EAAC,2CAA2C,EAAC,EAAC,SAAS,EAAC,cAAc,EAAC,EAAC,+CAA+C,EAAC,EAAC,SAAS,EAAC,MAAM,EAAC,EAAC,iDAAiD,EAAC,EAAC,SAAS,EAAC,QAAQ,EAAC,EAAC;CAC13E,CAAC;MAEW,8BAA8B;IAClC,SAAS,CAAC,UAA4B,EAAE,IAAY;QACzD,OAAO,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAClE;CACF;AAED;;;MAWa,4BAA4B;;yHAA5B,4BAA4B;0HAA5B,4BAA4B,YAP7B,aAAa;0HAOZ,4BAA4B,aAN5B,CAAC;YACV,OAAO,EAAE,2BAA2B;YACpC,QAAQ,EAAE,8BAA8B;YACxC,KAAK,EAAE,IAAI;SACZ,CAAC,YALQ,aAAa;2FAOZ,4BAA4B;kBARxC,QAAQ;mBAAC;oBACR,OAAO,EAAE,CAAC,aAAa,CAAC;oBACxB,SAAS,EAAE,CAAC;4BACV,OAAO,EAAE,2BAA2B;4BACpC,QAAQ,EAAE,8BAA8B;4BACxC,KAAK,EAAE,IAAI;yBACZ,CAAC;iBACH;;;ACrCD;AACA;AACA;MACa,eAAe;;IAGnB,OAAO,qBAAqB,CAAC,KAAU;QAC5C,OAAO,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,KAAK,OAAO,CAAC;KACtD;;;ACJH;;;AAGO,MAAM,kBAAkB,GAAwB;IACrD;QACE,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,qCAAqC;KAC7C;IACD;QACE,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;KACf;IACD;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,eAAe;KACvB;IACD;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,eAAe;KACvB;IACD;QACE,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,gBAAgB;KACxB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,4BAA4B;KACpC;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,mBAAmB;KAC3B;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,4BAA4B;KACpC;IACD;QACE,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,6BAA6B;KACrC;CACF;;ACpCD;;;AAGO,MAAM,oBAAoB,GAA4B;IAC3D,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK;IACjC,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,KAAK;IAClB,cAAc,EAAE,KAAK;IACrB,SAAS,EAAE,KAAK;CACjB;;ACpBD;;;AAGA,IAAY,SAGX;AAHD,WAAY,SAAS;IACjB,yCAAQ,CAAA;IACR,mDAAa,CAAA;AACjB,CAAC,EAHW,SAAS,KAAT,SAAS;;ACCrB;;;MAMa,6BAA6B;IACjC,iBAAiB,CAAC,UAAoB,EAAE,OAAoB;QACjE,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,UAAyB,CAAC;QACpF,OAAO,YAAY;aAEf,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,YAAY,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CACzG,CAAC;KACL;IAEM,mBAAmB,CAAC,UAAoB;QAC7C,OAAO,UAAU,CAAC,YAAY,EAAE,CAAC;KAClC;IAEM,gCAAgC,CAAC,UAAoB;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,UAAmB,CAAC;;QAExB,IAAI,SAAS;YACT,SAAS,CAAC,UAAU;YACpB,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,uBAAuB,EACjD;YACA,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,uBAAkC,CAAC;YACxE,UAAU,GAAG,UAAU,CAAC,QAAQ,KAAK,CAAC,GAAG,UAAU,CAAC,aAAa,GAAG,UAAU,CAAC;SAChF;aAAM,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE;YAClD,UAAU,GAAI,SAAiB,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,CAAC;SACjE;aAAM;YACL,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,UAAU,CAAC;KACnB;IAEM,wBAAwB,CAAC,UAAoB,EAAE,QAAgB;;QAEpE,IAAI,QAAQ,CAAC,YAAY,EAAE;YACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,EAAE;gBACpC,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aAC1B;SACF;aAAM,IAAI,UAAU,CAAC,YAAY,EAAE,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE;YAC5E,OAAO,UAAU,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SAChD;KACF;IAEM,aAAa,CAAC,UAAoB,EAAE,QAAgB,EAAE,OAAoB;QAC/E,IAAI,OAAO,EAAE;;YAEX,IAAI,QAAQ,CAAC,YAAY,EAAE;gBACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;gBACpC,GAAG,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;gBACvC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAClC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACrB;iBAAM,IAAI,UAAU,CAAC,YAAY,EAAE;gBAClC,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;gBACtC,GAAG,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;gBACvC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAClC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACrB;SACF;KACF;;0HA5DU,6BAA6B;8HAA7B,6BAA6B,cAF5B,MAAM;2FAEP,6BAA6B;kBAHzC,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;ACGD;;;MAMa,oBAAoB;IAHjC;;;;QAQS,YAAO,GAAqC,EAAE,CAAC;KAgCvD;;;;IA3BQ,aAAa,CAAC,EAAU;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC;KACzC;;;;IAKM,qBAAqB,CAAC,EAAU;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,uBAAuB,CAAC;KACjD;;;;IAKM,YAAY,CAAC,EAAU;QAC5B,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;YACtB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACzB;KACF;;;;IAKM,uBAAuB,CAAC,EAAU;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,yBAAyB,CAAC;KACnD;;iHAnCU,oBAAoB;qHAApB,oBAAoB,cAFnB,MAAM;2FAEP,oBAAoB;kBAHhC,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;AC2BD;;;MAMa,2BAA2B;IAMtC,YACU,gBAA+C,EAC/C,iBAAuC,EACvC,aAA8B;QAF9B,qBAAgB,GAAhB,gBAAgB,CAA+B;QAC/C,sBAAiB,GAAjB,iBAAiB,CAAsB;QACvC,kBAAa,GAAb,aAAa,CAAiB;KACnC;IARL,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;KACvC;;;;IAWM,SAAS,CACd,EAAU,EACV,aAAgC,EAChC,UAAmC,EACnC,WAAoB;QAEpB,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;YAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YAEhD,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAClD,OAAO,CAAC,SAAS,GAAG;;;;;;;QAOlB,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAErC,MAAM,KAAK,mCAAiC,oBAAoB,GAAK,UAAU,CAAE,CAAC;YAClF,MAAM,SAAS,GAAG,qBAAqB,KAAK,CAAC,SAAS;iBAC3C,KAAK,CAAC,SAAS;uBACT,KAAK,CAAC,IAAI;qBACZ,KAAK,CAAC,QAAQ,IAAI,CAAC;YAClC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5D,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;YACxD,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAChD,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACjD,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;SACrE;KACF;IAEM,aAAa,CAAC,EAAU,EAAE,iBAAgC,EAAE,uBAA4B;QAC7F,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,IAAI,CAAC,CAAC;KAC9E;IAEM,YAAY,CAAC,EAAU,EAAE,iBAAgC,EAAE,uBAA4B;QAC5F,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAC;KAC/E;;;;IAKM,WAAW,CAAC,EAAU,EAAE,aAA4B;QACzD,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;YACtB,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YAEhD,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;gBAC3B,MAAM,4BAA4B,GAAG,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;;;gBAI/G,IACE,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,YAAY;oBACpD,CAAC,4BAA4B,EAC7B;oBACA,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;iBAChD;gBAED,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACrB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;aACjD;SACF;KACF;IAEM,mBAAmB,CAAC,EAAU;QACnC,OAAO,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;KAChF;;;;;IAMM,oBAAoB,CAAC,IAAY;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC;QAC5D,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE;YACpB,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;SACxC;QAED,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACzD,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3C,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3C,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;QAC5C,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC;QACjD,aAAa,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;QAEzC,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;QAC5B,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAEpC,OAAO,CAAC,wBAAwB,GAAG,kBAAkB,CAAC;QACtD,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAEhC,OAAO,CAAC,wBAAwB,GAAG,aAAa,CAAC;QACjD,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;QAChC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC;KACf;IAEM,aAAa,CAAC,EAAU;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAEhD,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;YAC3B,OAAO;gBACL,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;gBACjD,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;gBACjD,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;gBACnD,IAAI,EAAE,UAAU,CAAC,iBAAiB,CAAC,UAAU,CAAC;gBAC9C,SAAS,EAAE,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBAC/C,WAAW,EAAE,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC;gBACnD,cAAc,EAAE,UAAU,CAAC,iBAAiB,CAAC,WAAW,CAAC;gBACzD,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;aAC5B,CAAC;SACH;;QAGD,OAAO,EAAE,CAAC;KACX;IAEM,kBAAkB,CAAC,EAAU;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,UAAU,EAAE;YACd,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACzD;QACD,OAAO,EAAE,CAAC;KACX;IAEM,kBAAkB,CAAC,EAAU,EAAE,KAAa;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC;QACtC,IAAI,aAAa,CAAC,SAAS,KAAK,KAAK,EAAE;YACrC,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC;SACjC;KACF;IAEM,WAAW,CAAC,EAAU;QAC3B,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YACtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YACpG,MAAM,4BAA4B,GAAG,gBAAgB,KAAK,gBAAgB,CAAC,WAAW,KAAK,CAAC,IAAI,gBAAgB,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC;YAElI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,4BAA4B,EAAE;;gBAE5D,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAC5D,MAAM,MAAM,GAAQ,gBAAgB,CAAC,IAAI,CAAC;gBAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;gBAEvC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAC1C,MAAM,CAAC,KAAK,EAAE,CAAC;;gBAEf,IAAI,QAAQ,CAAC,YAAY,IAAI,UAAU,CAAC,WAAW,EAAE;oBACnD,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;oBACjC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACtB,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;oBACpC,GAAG,CAAC,eAAe,EAAE,CAAC;oBACtB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;iBACrB;qBAAM;;oBAEL,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;oBAC3C,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;oBACpC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC1B,SAAS,CAAC,MAAM,EAAE,CAAC;iBACpB;aACF;iBAAM;;gBAEL,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAC1C,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;aAC/B;SACF;KACF;IAEM,OAAO,CAAC,QAAgB;QAC7B,IAAI,IAAI,GAAmB,SAAS,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;YAC7B,IAAI,GAAG;gBACL,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,QAAQ,GAAG,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI;gBAC3F,GAAG,EAAE,QAAQ,CAAC,IAAI;aACnB,CAAC;SACH;QAED,OAAO,IAAI,CAAC;KACb;IAEM,oBAAoB,CAAC,QAAgB;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC;QAEnE,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAsB,CAAC;KAC7D;IAEM,aAAa,CAAC,EAAU;QAC7B,OAAO,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;KAClH;IAEM,aAAa,CAAC,EAAU,EAAE,OAAoB;QACnD,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;KACzG;IAEM,cAAc,CAAC,EAAU,EAAE,WAAoB;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAChD,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;KACrE;IAEM,WAAW,CAAC,EAAU,EAAE,QAAgB;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;QACtD,MAAM,YAAY,GAAkB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACvF,KAAK,IAAI,OAAO,IAAI,YAAY,EAAE;YAChC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC;SAC5C;QACD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;KACjD;IAEM,eAAe,CAAC,OAAsB;;QAE3C,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,aAAa;YACtD,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,QAAQ;YAC/C,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC;QAC5C,OAAO,CAAC,yBAAyB,CAAC,QAAQ,EAAE,CAAC;QAC7C,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QACnC,OAAO,CAAC,uBAAuB,CAAC,QAAQ,EAAE,CAAC;QAC3C,UAAU,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC7E,UAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACnE,UAAU,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACnE,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;KACrE;IAEO,kBAAkB,CAAC,EAAU;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC;KACxD;IAEO,0BAA0B,CAAC,QAAgB;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE;YACxC,OAAO,EAAE,CAAC;SACX;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC;QACtE,MAAM,aAAa,GAAG,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;;QAG3F,OAAO,aAAa,CAAC,MAAM,CAAC,OAAO;;YAGjC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;gBACjC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;oBAC7B,OAAO,KAAK,CAAC;iBACd;gBACD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACzC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACtC,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,cAAc,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;uBAC9E,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC;qBAC1E,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;2BACvE,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;aAC9E;;YAGD,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;SAC7E,CAAC,CAAC;KACJ;IAEO,mBAAmB,CAAC,EAAU;;QAEpC,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACpD,IAAI,eAAe,EAAE;YACnB,OAAO,eAAe,CAAC,QAAQ,CAAC;SACjC;;QAGD,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,eAAe,CAAC;KAC1D;IAEO,WAAW,CAAC,EAAU;QAC5B,IAAI,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC/C,IACE,SAAS;YACT,SAAS,CAAC,UAAU;YACpB,SAAS,CAAC,UAAU,CAAC,aAAa,EAClC;YACA,IAAI,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC;YACnC,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE;gBAC1B,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;aACjC;YACD,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAkB,CAAC,CAAC;;YAElE,IAAI,aAAa,EAAE;gBACjB,QAAQ,GAAG,aAAa,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;aACxD;SACF;QACD,OAAO,QAAQ,CAAC;KACjB;IAEO,eAAe,CAAC,EAAU,EAAE,OAA0B;;QAE5D,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa;YACtC,OAAO,CAAC,aAAa,CAAC,QAAQ;YAC9B,OAAO,CAAC,eAAe,CAAC;;QAG1B,UAAU,CAAC,IAAI,EAAE,CAAC;QAClB,UAAU,CAAC,KAAK,EAAE,CAAC;QAEnB,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1C,MAAM,iBAAiB,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAC3D,MAAM,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAEhD,UAAU,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAClE,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACxD,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACxD,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACzD,OAAO;YACL,gBAAgB,EAAE,OAAO;YACzB,iBAAiB,EAAE,iBAAiB;YACpC,aAAa,EAAE,aAAa;YAC5B,aAAa,EAAE,aAAa;YAC5B,yBAAyB,EAAE,mBAAmB;YAC9C,eAAe,EAAE,eAAe;YAChC,uBAAuB,EAAE,IAAI,OAAO,EAAE;SACvC,CAAC;KACH;;IAGO,gBAAgB,CAAC,EAAU;QACjC,OAAO,CAAC,CAAiB;YACvB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACnD,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;SAC9D,CAAC;KACH;IAEO,gCAAgC,CAAC,EAAU;QACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;KAC7F;IAEO,QAAQ,CAAC,UAAoB,EAAE,QAAgB;QACrD,MAAM,YAAY,GAAG,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;QAG5D,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;;;YAGpC,OAAO,MAAM,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,IAAI;;iBAE7B,CAAC,YAAY,GAAG,MAAM,KAAK,CAAC,CAAC,GAAG,IAAI;;iBAEpC,CAAC,YAAY,GAAG,QAAQ,KAAK,EAAE,CAAE,GAAG,GAAG,CAAC;SACxD;;;QAID,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,aAAa,EAAE;YAC3D,OAAO,oBAAoB,CAAC,SAAS,CAAC;SACvC;QACD,OAAO,YAAY,CAAC;KACrB;IAEO,OAAO,CAAC,QAAgB;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACjE,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KACrE;IAEO,SAAS,CAAC,OAAgB,EAAE,GAAW;QAC7C,IAAI,WAAW,GAAG,OAAO,CAAC;QAC1B,OAAO,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;YAClE,IAAI,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE;gBAC3D,OAAO,WAAW,CAAC;aACpB;YACD,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC;SACzC;QACD,OAAO,SAAS,CAAC;KAClB;IAEO,cAAc,CAAC,EAAU;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;KAC7E;;IAGO,gBAAgB,CAAC,EAAU,EAAE,IAAY;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,EAAE;YACpC,IAAI,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;YAEvB,MAAM,EAAE,GAAG,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;YACpB,IAAI,IAAI,GAAG,UAAU,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC;YAC/D,OAAO,EAAE,CAAC,UAAU,EAAE;gBACpB,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC;gBACrB,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aACnC;YACD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;;YAGvB,IAAI,QAAQ,EAAE;gBACZ,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;gBAC3B,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC9B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACrB,GAAG,CAAC,eAAe,EAAE,CAAC;gBACtB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACrB;SACF;KACF;IAEO,qBAAqB,CAAC,GAAa;QACzC,MAAM,cAAc,GAAkB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAChG,KAAK,IAAI,OAAO,IAAI,cAAc,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;gBAClC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;aAClC;SACF;QACD,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO;YACrD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC9C,OAAO,CAAC,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM;iBAC7C,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;SAC/D,CAAC,CAAC;QACH,KAAK,IAAI,OAAO,IAAI,iBAAiB,EAAE;YACrC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;;YAElC,IAAI,MAAM,EAAE;gBACV,OAAO,OAAO,CAAC,UAAU,EAAE;oBACzB,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;iBAClD;gBACD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;aAC7B;SACF;KACF;;IAGO,gBAAgB,CAAC,GAAW;QAClC,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;aACnD,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;aACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;aACrB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;KAC3B;IAEO,iBAAiB,CAAC,EAAU,EAAE,iBAAgC,EAAE,uBAA4B,EAAE,QAAiB;QACrH,uBAAuB,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;QACzE,uBAAuB,CAAC,YAAY,CAAC,eAAe,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;;QAEnF,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YAChC,iBAAiB,CAAC,OAAO,CAAC,eAAe;gBACvC,eAAe,CAAC,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aAC9C,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;KAChG;;wHAveU,2BAA2B;4HAA3B,2BAA2B,cAF1B,MAAM;2FAEP,2BAA2B;kBAHvC,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;;ACLD;;;MASa,6BAA6B;IAmDxC,YACU,cAA2C,EAC3C,cAAiC,EACjC,SAAiC;QAFjC,mBAAc,GAAd,cAAc,CAA6B;QAC3C,mBAAc,GAAd,cAAc,CAAmB;QACjC,cAAS,GAAT,SAAS,CAAwB;QAnDpC,sBAAiB,GAAG,IAAI,OAAO,EAAE,CAAC;QAMlC,UAAK,GAA4B,EAAE,CAAC;QAGpC,gBAAW,GAA8B,EAAE,CAAC;QAe3C,cAAS,GAAY,KAAK,CAAC;QAE5B,uBAAkB,GAAG,IAAI,OAAO,EAAsB,CAAC;QASvD,yBAAoB,GAAG,IAAI,OAAO,EAAsB,CAAC;QASzD,6BAAwB,GAAG,IAAI,OAAO,EAAsB,CAAC;QAE5D,kBAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;KAMxC;IAzCJ,IACW,QAAQ,CAAC,KAAc;QAChC,MAAM,YAAY,GAAG,eAAe,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,YAAY,KAAK,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;SACpC;KACF;IAEA,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAgCM,QAAQ;QACb,IAAI,CAAC,iBAAiB;aACnB,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B,CAAC,SAAS,CAAC;YACV,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB,CAAC,CAAC;QAEL,QAAQ,CAAC;;YAEP,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iDAAiD,CAAC;YAC3E,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,wDAAwD,CAAC;YAClF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,mDAAmD,CAAC;YAC7E,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,0DAA0D,CAAC;YACpF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sDAAsD,CAAC;YAChF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,6DAA6D,CAAC;YACvF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,0DAA0D,CAAC;YACpF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,6DAA6D,CAAC;;YAGvF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,+CAA+C,CAAC;YACzE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sDAAsD,CAAC;YAChF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,+CAA+C,CAAC;YACzE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sDAAsD,CAAC;YAChF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,8CAA8C,CAAC;YACxE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qDAAqD,CAAC;YAC/E,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,+CAA+C,CAAC;YACzE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sDAAsD,CAAC;YAChF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gDAAgD,CAAC;YAC1E,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,uDAAuD,CAAC;YACjF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qDAAqD,CAAC;YAC/E,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4DAA4D,CAAC;SAEvF,CAAC;aACC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACb,SAAS,CAAC,SAAS;YAClB,IAAI,CAAC,WAAW,GAAG;gBACjB;oBACE,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBACxC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;oBACnB,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;iBAC1B;gBACD;oBACE,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;oBAC1C,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;oBACnB,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;iBAC1B;gBACD;oBACE,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;oBAC7C,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;oBACnB,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;iBAC1B;gBACD;oBACE,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;oBACjD,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;iBACpB;gBACD;oBACE,SAAS,EAAE,IAAI;iBAChB;gBACD;oBACE,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE;oBAClC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;iBACpB;aACF,CAAC;YACF,IAAI,CAAC,SAAS,GAAG;gBACf;oBACE,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBACxC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;oBACnB,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;iBAC1B;gBACD;oBACE,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBACxC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;oBACpB,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;iBAC3B;gBACD;oBACE,SAAS,EAAE,IAAI;iBAChB;gBACD;oBACE,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;oBACvC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;oBACpB,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;iBAC3B;gBACD;oBACE,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBACxC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;oBACpB,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;iBAC3B;gBACD;oBACE,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;oBACzC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;oBACpB,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;iBAC3B;gBACD;oBACE,SAAS,EAAE,IAAI;iBAChB;gBACD;oBACE,QAAQ,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;oBAC7C,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;oBACpB,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;iBAC3B;aACF,CAAC;SACH,CAAC,CAAC;KACN;IAEM,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;KAC/B;IAEM,WAAW,CAAC,OAAe,EAAE,QAAa,EAAE;QACjD,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC7C,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;KACJ;IAEM,gBAAgB,CAAC,KAA8B;QACpD,IAAI,CAAC,WAAW,CACd,YAAY,EACZ,4DAA4D,GAAG,KAAK,CAAC,EAAE;YACrE,uBAAuB,GAAG,KAAK,CAAC,IAAI;YACpC,SAAS,IAAI,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CACrG,CAAC;KACH;IAEO,cAAc;QACpB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC;KAC5E;IAEO,WAAW;QACjB,IAAI,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9E,IAAI,gBAAgB,CAAC,UAAU,GAAG,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE;YAC5F,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;SAC/B;QACD,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;KAClC;;0HAnMU,6BAA6B;8GAA7B,6BAA6B,2MCrD1C,6tHAqGA;2FDhDa,6BAA6B;kBANzC,SAAS;mBAAC;oBACT,QAAQ,EAAE,yBAAyB;oBACnC,WAAW,EAAE,sCAAsC;oBACnD,SAAS,EAAE,CAAC,sCAAsC,CAAC;oBACnD,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;oLAIQ,iBAAiB;sBADvB,KAAK;gBAIC,QAAQ;sBADd,KAAK;gBAIC,KAAK;sBADX,KAAK;gBAIC,WAAW;sBADjB,KAAK;gBAIK,QAAQ;sBADlB,KAAK;;;AE/DR;;;MAGa,kBAAkB;;;ACiB/B,MAAM,QAAQ,GAAG,SAAS,CAAC;AAC3B,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAExC;;;MAQa,8BAA8B;IAwCzC,YACmB,aAA+B,EAChD,YAAgC;QADf,kBAAa,GAAb,aAAa,CAAkB;QAf3C,sBAAiB,GAAY,KAAK,CAAC;QAEnC,YAAO,GAAW,EAAE,CAAC;QAErB,WAAM,GAAW,CAAC,CAAC;QAEnB,UAAK,GAAY,KAAK,CAAC;QAEvB,eAAU,GAAG,CAAC,CAAC;QAEd,kBAAa,GAAW,EAAE,CAAC;QAE3B,SAAI,GAAW,UAAU,CAAC;QAMhC,IAAI,YAAY,CAAC,SAAS,EAAE;YAC1B,IAAI,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBACnD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAErE,IAAI,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;gBACtE,gBAAgB,GAAG,gBAAgB,GAAG,CAAC,CAAC,GAAG,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC,CAAC;gBAE3H,IAAI,gBAAgB,GAAG,CAAC,CAAC,EAAE;oBACzB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;oBACjG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;iBAClE;;gBAGD,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;aACpB;iBAAM;gBACL,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG;oBACrC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,MAAa,CAAC;;gBAGnD,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;aACpB;SACF;KACF;IAhED,IAAW,SAAS,CAAC,KAAa;QAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;KAC7B;IACD,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;KAE1B;IACC,IAAW,YAAY,CAAC,KAAa;QACnC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;KAC7B;IACD,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IAED,IAAW,GAAG,CAAC,KAAa;QACxB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;KAC/B;IACD,IAAW,GAAG;QACV,OAAO,IAAI,CAAC,IAAI,CAAC;KACpB;IA4CM,gBAAgB,CAAC,KAAa;QACnC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;IAEM,IAAI;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;gBACxB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;oBACpB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAa,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,IAAI;iBAC/D,CAAC,CAAC;aACtB;iBAAM;gBACL,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;oBACpB,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE;oBACvB,MAAM,EAAE,SAAS,CAAC,IAAI;iBACP,CAAC,CAAC;aACtB;SACF;KACF;IAEM,MAAM;QACX,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;KAC7B;IAEO,WAAW;QACjB,OAAO,QAAQ,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;KACnG;IAEO,OAAO;QACb,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;YACxB,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACpD;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACxE;;2HArGU,8BAA8B;+GAA9B,8BAA8B,mECnC3C,m1GA4GA;2FDzEa,8BAA8B;kBAL1C,SAAS;mBAAC;oBACT,QAAQ,EAAE,6BAA6B;oBACvC,WAAW,EAAE,wCAAwC;oBACrD,SAAS,EAAE,CAAC,wCAAwC,CAAC;iBACtD;;;AE8BD;;;MASa,6BAA6B;IA2DxC,YACU,cAA2C,EAC3C,cAAiC,EACjC,YAA6B;QAF7B,mBAAc,GAAd,cAAc,CAA6B;QAC3C,mBAAc,GAAd,cAAc,CAAmB;QACjC,iBAAY,GAAZ,YAAY,CAAiB;QA3DhC,sBAAiB,GAAG,IAAI,OAAO,EAAE,CAAC;QA0ClC,0BAAqB,GAAG,IAAI,OAAO,EAAyB,CAAC;QAE7D,sBAAiB,GAAG,IAAI,OAAO,EAAyB,CAAC;QAEzD,qBAAgB,GAAG,IAAI,OAAO,EAAsB,CAAC;QAErD,mBAAc,GAAG,IAAI,OAAO,EAAsB,CAAC;QAIlD,cAAS,GAAY,KAAK,CAAC;QAE3B,gBAAW,GAAG,oBAAoB,CAAC;KAMvC;IA9CJ,IACW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IACD,IAAW,UAAU,CAAC,KAA8B;QAClD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,kBAAkB,EAAE;YAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,uCAAuC,EAAE;gBAC1D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;aAC9D;iBAAM;gBACL,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aACxD;SACF;KACF;IAED,IACW,QAAQ,CAAC,KAAc;QAChC,MAAM,YAAY,GAAG,eAAe,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,YAAY,KAAK,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;SACpC;KACF;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAsBM,QAAQ;QACb,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;YAC/B,IAAI,CAAC,UAAU,mCACV,IAAI,CAAC,WAAW,GAChB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAQ,CAC3D,CAAC;YACF,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;SACrC,CAAC,CAAC;KACJ;IAEM,WAAW,CAAC,OAAe,EAAE,QAAa,EAAE;QACjD,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC7C,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,mCACV,IAAI,CAAC,UAAU,GACf,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CACpD,CAAC;KACH;IAEM,eAAe,CAAC,YAAqB,EAAE,QAAiB,EAAE,OAAe;QAC9E,IAAI,YAAY,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SAC3B;;QAGD,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;KACrC;IAEM,IAAI;QACT,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxE,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC;gBACzE,OAAO,EAAE,kBAAkB;gBAC3B,QAAQ,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;aACrC,CAAC,CAAC,CAAC;QACJ,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAyB;YACpD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,cAAc,EAAE;gBAC9C,IAAI,WAAW,EAAE;oBACf,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACvE,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;iBAC1D;gBAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC3B,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,EAAE;;oBAEzC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACjD;qBAAM;;oBAEL,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACrE,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,8CAA8C,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC;iBACjI;aACF;SACF,CAAC,CAAC;KACJ;IAEM,MAAM;QACX,IAAI,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACjG,IAAI,qBAAqB,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE;YAChD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1E,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;SAC7D;QACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;KAC5B;IAEM,cAAc,CAAC,IAAY;QAChC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,mCACV,IAAI,CAAC,UAAU,GACf,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CACpD,CAAC;KACH;IAEM,yBAAyB,CAAC,KAA2B,EAAE,YAAY,GAAG,KAAK;QAChF,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,WAAW,GAAG,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;KACvE;IAEO,cAAc;QACpB,MAAM,OAAO,GAA0B,EAAE,IAAI,EAAE,yBAAyB,CAAC,KAAK,EAAE,CAAC;QACjF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC;KAClE;IAEO,WAAW,CAAC,QAAgB;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC5D,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;aAC9B;SACF;KACF;;0HA9JU,6BAA6B;8GAA7B,6BAA6B,+QCzE1C,kwXAwWA;2FD/Ra,6BAA6B;kBANzC,SAAS;mBAAC;oBACT,QAAQ,EAAE,yBAAyB;oBACnC,WAAW,EAAE,sCAAsC;oBACnD,SAAS,EAAE,CAAC,sCAAsC,CAAC;oBACnD,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;+KAIQ,iBAAiB;sBADvB,KAAK;gBAIC,QAAQ;sBADd,KAAK;gBAIC,QAAQ;sBADd,KAAK;gBAIC,YAAY;sBADlB,KAAK;gBAIC,cAAc;sBADpB,KAAK;gBAIK,UAAU;sBADpB,KAAK;gBAgBK,QAAQ;sBADlB,KAAK;;;AErGR;;;AAGO,MAAM,aAAa,GAA4B;IACpD,MAAM;IACN,QAAQ;CACT;;ACND;;;AAGO,MAAM,uBAAuB,GAAqC;IACvE,aAAa;IACb,WAAW;IACX,YAAY;IACZ,OAAO;IACP,MAAM;IACN,MAAM;CACP;;ACdD;;;AAGO,MAAM,uBAAuB,GAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;;ACmFtH;;;AAGA,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB;;;MAkBa,sBAAsB;IA4JjC,YACU,cAAiC,EACjC,kBAAyC,EACzC,cAA2C,EAC3C,aAAmC,EACnC,mBAA+C;QAJ/C,mBAAc,GAAd,cAAc,CAAmB;QACjC,uBAAkB,GAAlB,kBAAkB,CAAuB;QACzC,mBAAc,GAAd,cAAc,CAA6B;QAC3C,kBAAa,GAAb,aAAa,CAAsB;QACnC,wBAAmB,GAAnB,mBAAmB,CAA4B;;;;QA3JlD,cAAS,GAAY,KAAK,CAAC;QAwB3B,sBAAiB,GAAG,IAAI,OAAO,EAAE,CAAC;;;;;;;QASlC,aAAQ,GAAwB,kBAAkB,CAAC;;;;;QAOnD,iBAAY,GAAa,uBAAuB,CAAC;;;;;QAOjD,OAAE,GAAG,mBAAmB,EAAE,YAAY,EAAE,CAAC;;;;;QAyBzC,UAAK,GAA4B,aAAa,CAAC;;;;QAM/C,gBAAW,GAA8B,EAAE,CAAC;;;;;;;QA0B5C,mBAAc,GAAqC,uBAAuB,CAAC;QA6B1E,qBAAgB,GAAY,KAAK,CAAC;QAKlC,gBAAW,GAAY,KAAK,CAAC;QAE7B,kBAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;QAEpC,cAAS,GAAY,KAAK,CAAC;QAE3B,uBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;QAE7D,iBAAY,GAAG,EAAE,CAAC;QAElB,WAAM,GAAW,SAAS,CAAC;;QAsG5B,YAAO,GAAG,SAAQ,CAAC;;QAGlB,cAAS,GAAG,CAAC,CAAS,QAAO,CAAC;KAjGlC;;;;;IAtJJ,IACW,QAAQ,CAAC,KAAc;QAChC,MAAM,YAAY,GAAG,eAAe,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,YAAY,KAAK,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;YAC9B,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;aAClG;iBAAM;gBACL,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;aACjG;YACD,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;SACpC;KACF;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;;;;IA8BD,IACW,iBAAiB,CAAC,KAA8B;;QAEzD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,kBAAkB,mCAClB,oBAAoB,GACpB,KAAK,CACT,CAAC;SACH;KACF;IAED,IAAW,iBAAiB;QAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAChC;;;;IAkBD,IACW,WAAW,CAAC,KAAa;QAClC,IAAI,KAAK,KAAK,IAAI,CAAC,YAAY,EAAE;YAC/B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;aACpD;SACF;KACF;IAED,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;IAWD,IAAW,KAAK,CAAC,KAAa;;QAE5B,IAAI,WAAW,GAAW,KAAK,CAAC;QAChC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,EAAE;YACrE,WAAW,GAAG,EAAE,CAAC;SAClB;QACD,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpE,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE;YAC/B,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;;;YAI1B,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC5C,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;aAC9B;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;KACF;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IA6BM,eAAe;QACpB,IAAI,CAAC,cAAc,CAAC,SAAS,CAC3B,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,SAAS,CAAC,aAAa,EAC5B,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,WAAW,CACjB,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;aAChD,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B;aACA,SAAS,CAAC;YACT,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;SAC/B,CAAC,CAAC;QAEL,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;aACtC,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B;aACA,SAAS,CAAC;YACT,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;SAC/B,CAAC,CAAC;QAEL,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;aAC9C,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAC9B;aACA,SAAS,CAAC;YACT,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B,CAAC,CAAC;QAEL,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;;QAG7D,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC1C;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;YAClG,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB;IAEM,WAAW;QAChB,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;KAC/B;IAEM,UAAU,CAAC,GAAW;QAC3B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;;QAGjB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,IAAI,CAAC,MAAM,EAAE;YACnD,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SAC9D;KACF;IAEM,gBAAgB,CAAC,EAAO;QAC7B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;IAEM,iBAAiB,CAAC,EAAO;QAC9B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;KACnB;;;;IAKM,gBAAgB,CAAC,UAAmB;QACzC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC5B;IAEM,QAAQ;QACb,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5B;IAEM,mBAAmB;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,kBAAkB,mCAClB,IAAI,CAAC,kBAAkB,GACvB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAQ,CACrD,CAAC;KACH;;mHA7PU,sBAAsB;uGAAtB,sBAAsB,oTAXtB;QACT;YACE,OAAO,EAAE,iBAAiB;;YAE1B,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC;YACrD,KAAK,EAAE,IAAI;SACZ;KACF,+HCzGH,otCAgDA;2FD6Da,sBAAsB;kBAflC,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,WAAW,EAAE,8BAA8B;oBAC3C,SAAS,EAAE,CAAC,8BAA8B,CAAC;oBAC3C,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,iBAAiB;;4BAE1B,WAAW,EAAE,UAAU,CAAC,4BAA4B,CAAC;4BACrD,KAAK,EAAE,IAAI;yBACZ;qBACF;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;iBACtC;yPAOQ,SAAS;sBADf,KAAK;gBAQK,QAAQ;sBADlB,KAAK;gBA2BC,QAAQ;sBADd,KAAK;gBAQC,YAAY;sBADlB,KAAK;gBAQC,EAAE;sBADR,KAAK;gBAOK,iBAAiB;sBAD3B,KAAK;gBAoBC,KAAK;sBADX,KAAK;gBAOC,WAAW;sBADjB,KAAK;gBAOK,WAAW;sBADrB,KAAK;gBAqBC,cAAc;sBADpB,KAAK;gBAiCE,SAAS;sBADhB,SAAS;uBAAC,QAAQ;;;ME5IR,mBAAmB;;gHAAnB,mBAAmB;iHAAnB,mBAAmB,iBAT5B,sBAAsB;QACtB,8BAA8B;QAC9B,6BAA6B;QAC7B,6BAA6B,aA3B7B,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,oBAAoB;QACpB,4BAA4B;QAC5B,aAAa;QACb,aAAa;QACb,WAAW;QACX,iBAAiB;QACjB,oBAAoB;QACpB,iBAAiB;QACjB,iBAAiB;QACjB,cAAc;QACd,aAAa;QACb,cAAc;QACd,gBAAgB,aAGhB,sBAAsB;QACtB,8BAA8B;QAC9B,6BAA6B;QAC7B,6BAA6B;iHAYpB,mBAAmB,YAlCrB;YACP,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,oBAAoB;YACpB,4BAA4B;YAC5B,aAAa;YACb,aAAa;YACb,WAAW;YACX,iBAAiB;YACjB,oBAAoB;YACpB,iBAAiB;YACjB,iBAAiB;YACjB,cAAc;YACd,aAAa;YACb,cAAc;YACd,gBAAgB;SACjB;2FAiBU,mBAAmB;kBAnC/B,QAAQ;mBAAC;oBACR,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,oBAAoB;wBACpB,4BAA4B;wBAC5B,aAAa;wBACb,aAAa;wBACb,WAAW;wBACX,iBAAiB;wBACjB,oBAAoB;wBACpB,iBAAiB;wBACjB,iBAAiB;wBACjB,cAAc;wBACd,aAAa;wBACb,cAAc;wBACd,gBAAgB;qBACjB;oBACD,OAAO,EAAE;wBACP,sBAAsB;wBACtB,8BAA8B;wBAC9B,6BAA6B;wBAC7B,6BAA6B;qBAC9B;oBACD,YAAY,EAAE;wBACZ,sBAAsB;wBACtB,8BAA8B;wBAC9B,6BAA6B;wBAC7B,6BAA6B;qBAC9B;oBACD,eAAe,EAAE;wBACf,8BAA8B;qBAC/B;iBACF;;;AC7GD;;;;;;"}
@@ -1,5 +1,6 @@
1
1
  import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
2
2
  import { SkyTextSanitizationService } from '../text-editor/services/text-sanitization.service';
3
+ import * as i0 from "@angular/core";
3
4
  export declare class SkyRichTextDisplayComponent {
4
5
  private sanitizer;
5
6
  private sanitizationService;
@@ -10,4 +11,6 @@ export declare class SkyRichTextDisplayComponent {
10
11
  sanitizedText: SafeHtml;
11
12
  private _richText;
12
13
  constructor(sanitizer: DomSanitizer, sanitizationService: SkyTextSanitizationService);
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkyRichTextDisplayComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<SkyRichTextDisplayComponent, "sky-rich-text-display", never, { "richText": "richText"; }, {}, never, never>;
13
16
  }
@@ -1,2 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./rich-text-display.component";
3
+ import * as i2 from "@angular/common";
1
4
  export declare class SkyRichTextDisplayModule {
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkyRichTextDisplayModule, never>;
6
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SkyRichTextDisplayModule, [typeof i1.SkyRichTextDisplayComponent], [typeof i2.CommonModule], [typeof i1.SkyRichTextDisplayComponent]>;
7
+ static ɵinj: i0.ɵɵInjectorDeclaration<SkyRichTextDisplayModule>;
2
8
  }