@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
@@ -0,0 +1,14 @@
1
+ import { SkyAppLocaleInfo, SkyLibResourcesProvider } from '@skyux/i18n';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@skyux/i18n";
4
+ export declare class SkyTextEditorResourcesProvider implements SkyLibResourcesProvider {
5
+ getString(localeInfo: SkyAppLocaleInfo, name: string): string;
6
+ }
7
+ /**
8
+ * Import into any component library module that needs to use resource strings.
9
+ */
10
+ export declare class SkyTextEditorResourcesModule {
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkyTextEditorResourcesModule, never>;
12
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SkyTextEditorResourcesModule, never, never, [typeof i1.SkyI18nModule]>;
13
+ static ɵinj: i0.ɵɵInjectorDeclaration<SkyTextEditorResourcesModule>;
14
+ }
@@ -5,6 +5,7 @@ import { Subject } from 'rxjs';
5
5
  import { SkyTextEditorAdapterService } from '../services/text-editor-adapter.service';
6
6
  import { SkyTextEditorMenuType } from '../types/menu-type';
7
7
  import { SkyTextEditorMergeField } from '../types/text-editor-merge-field';
8
+ import * as i0 from "@angular/core";
8
9
  /**
9
10
  * @internal
10
11
  */
@@ -42,4 +43,6 @@ export declare class SkyTextEditorMenubarComponent implements OnDestroy, OnInit
42
43
  insertMergeField(field: SkyTextEditorMergeField): void;
43
44
  private closeDropdowns;
44
45
  private clearFormat;
46
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkyTextEditorMenubarComponent, never>;
47
+ static ɵcmp: i0.ɵɵComponentDeclaration<SkyTextEditorMenubarComponent, "sky-text-editor-menubar", never, { "editorFocusStream": "editorFocusStream"; "editorId": "editorId"; "menus": "menus"; "mergeFields": "mergeFields"; "disabled": "disabled"; }, {}, never, never>;
45
48
  }
@@ -5,6 +5,7 @@ import { SkyTextEditorStyleState } from '../types/style-state';
5
5
  import { UrlModalResult } from '../url-modal/text-editor-url-modal-result';
6
6
  import { SkyTextEditorService } from './text-editor.service';
7
7
  import { SkyTextEditorSelectionService } from './text-editor-selection.service';
8
+ import * as i0 from "@angular/core";
8
9
  /**
9
10
  * @internal
10
11
  */
@@ -56,4 +57,6 @@ export declare class SkyTextEditorAdapterService {
56
57
  private cleanUpBlankStyleTags;
57
58
  private replaceHtmlCodes;
58
59
  private setEditorDisabled;
60
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkyTextEditorAdapterService, never>;
61
+ static ɵprov: i0.ɵɵInjectableDeclaration<SkyTextEditorAdapterService>;
59
62
  }
@@ -1,3 +1,4 @@
1
+ import * as i0 from "@angular/core";
1
2
  /**
2
3
  * @internal
3
4
  */
@@ -7,4 +8,6 @@ export declare class SkyTextEditorSelectionService {
7
8
  getCurrentSelectionParentElement(documentEl: Document): Element;
8
9
  getCurrentSelectionRange(documentEl: Document, windowEl: Window): Range;
9
10
  selectElement(documentEl: Document, windowEl: Window, element: HTMLElement): void;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkyTextEditorSelectionService, never>;
12
+ static ɵprov: i0.ɵɵInjectableDeclaration<SkyTextEditorSelectionService>;
10
13
  }
@@ -1,5 +1,6 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { EditorSetting } from '../types/editor-setting';
3
+ import * as i0 from "@angular/core";
3
4
  /**
4
5
  * @internal
5
6
  */
@@ -26,4 +27,6 @@ export declare class SkyTextEditorService {
26
27
  * Returns the selection change observable from the editor with the corresponding id.
27
28
  */
28
29
  selectionChangeListener(id: string): Observable<unknown>;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkyTextEditorService, never>;
31
+ static ɵprov: i0.ɵɵInjectableDeclaration<SkyTextEditorService>;
29
32
  }
@@ -1,3 +1,4 @@
1
+ import * as i0 from "@angular/core";
1
2
  /**
2
3
  * The `SkyTextSanitizationService` user the `DOMPurify` library to sanitize strings for use
3
4
  * in the DOM. `DOMPurify` allows more customization than Angular's internal `DomSanitizer` so we
@@ -10,4 +11,6 @@ export declare class SkyTextSanitizationService {
10
11
  * Returns a sanitized string, allowing target attribute for new tab links.
11
12
  */
12
13
  sanitize(htmlString: string): string;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkyTextSanitizationService, never>;
15
+ static ɵprov: i0.ɵɵInjectableDeclaration<SkyTextSanitizationService>;
13
16
  }
@@ -10,6 +10,7 @@ import { SkyTextEditorMenuType } from './types/menu-type';
10
10
  import { SkyTextEditorStyleState } from './types/style-state';
11
11
  import { SkyTextEditorMergeField } from './types/text-editor-merge-field';
12
12
  import { SkyTextEditorToolbarActionType } from './types/toolbar-action-type';
13
+ import * as i0 from "@angular/core";
13
14
  /**
14
15
  * The text editor component lets users format and manipulate text.
15
16
  */
@@ -94,4 +95,6 @@ export declare class SkyTextEditorComponent implements AfterViewInit, ControlVal
94
95
  updateValueAndStyle(): void;
95
96
  onTouch: () => void;
96
97
  private _onChange;
98
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkyTextEditorComponent, never>;
99
+ static ɵcmp: i0.ɵɵComponentDeclaration<SkyTextEditorComponent, "sky-text-editor", never, { "autofocus": "autofocus"; "disabled": "disabled"; "fontList": "fontList"; "fontSizeList": "fontSizeList"; "id": "id"; "initialStyleState": "initialStyleState"; "menus": "menus"; "mergeFields": "mergeFields"; "placeholder": "placeholder"; "toolbarActions": "toolbarActions"; }, {}, never, never>;
97
100
  }
@@ -1,2 +1,23 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./text-editor.component";
3
+ import * as i2 from "./url-modal/text-editor-url-modal.component";
4
+ import * as i3 from "./toolbar/text-editor-toolbar.component";
5
+ import * as i4 from "./menubar/text-editor-menubar.component";
6
+ import * as i5 from "@angular/common";
7
+ import * as i6 from "@angular/forms";
8
+ import * as i7 from "@skyux/core";
9
+ import * as i8 from "../shared/sky-text-editor-resources.module";
10
+ import * as i9 from "@skyux/i18n";
11
+ import * as i10 from "@skyux/indicators";
12
+ import * as i11 from "@skyux/forms";
13
+ import * as i12 from "@skyux/colorpicker";
14
+ import * as i13 from "@skyux/popovers";
15
+ import * as i14 from "@skyux/modals";
16
+ import * as i15 from "@skyux/tabs";
17
+ import * as i16 from "@skyux/theme";
18
+ import * as i17 from "@skyux/layout";
1
19
  export declare class SkyTextEditorModule {
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkyTextEditorModule, never>;
21
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SkyTextEditorModule, [typeof i1.SkyTextEditorComponent, typeof i2.SkyTextEditorUrlModalComponent, typeof i3.SkyTextEditorToolbarComponent, typeof i4.SkyTextEditorMenubarComponent], [typeof i5.CommonModule, typeof i6.FormsModule, typeof i6.ReactiveFormsModule, typeof i7.SkyCoreAdapterModule, typeof i8.SkyTextEditorResourcesModule, typeof i9.SkyI18nModule, typeof i10.SkyIconModule, typeof i7.SkyIdModule, typeof i11.SkyInputBoxModule, typeof i12.SkyColorpickerModule, typeof i11.SkyCheckboxModule, typeof i13.SkyDropdownModule, typeof i14.SkyModalModule, typeof i15.SkyTabsModule, typeof i16.SkyThemeModule, typeof i17.SkyToolbarModule], [typeof i1.SkyTextEditorComponent, typeof i2.SkyTextEditorUrlModalComponent, typeof i3.SkyTextEditorToolbarComponent, typeof i4.SkyTextEditorMenubarComponent]>;
22
+ static ɵinj: i0.ɵɵInjectorDeclaration<SkyTextEditorModule>;
2
23
  }
@@ -7,6 +7,7 @@ import { SkyTextEditorAdapterService } from '../services/text-editor-adapter.ser
7
7
  import { SkyTextEditorFont } from '../types/font-state';
8
8
  import { SkyTextEditorStyleState } from '../types/style-state';
9
9
  import { SkyTextEditorToolbarActionType } from '../types/toolbar-action-type';
10
+ import * as i0 from "@angular/core";
10
11
  /**
11
12
  * @internal
12
13
  */
@@ -40,4 +41,6 @@ export declare class SkyTextEditorToolbarComponent implements OnInit {
40
41
  onColorpickerColorChanged(color: SkyColorpickerOutput, isBackground?: boolean): void;
41
42
  private closeDropdowns;
42
43
  private getFontName;
44
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkyTextEditorToolbarComponent, never>;
45
+ static ɵcmp: i0.ɵɵComponentDeclaration<SkyTextEditorToolbarComponent, "sky-text-editor-toolbar", never, { "editorFocusStream": "editorFocusStream"; "editorId": "editorId"; "fontList": "fontList"; "fontSizeList": "fontSizeList"; "toolbarActions": "toolbarActions"; "styleState": "styleState"; "disabled": "disabled"; }, {}, never, never>;
43
46
  }
@@ -1,5 +1,6 @@
1
1
  import { SkyModalInstance } from '@skyux/modals';
2
2
  import { SkyUrlModalContext } from './text-editor-url-modal-context';
3
+ import * as i0 from "@angular/core";
3
4
  /**
4
5
  * @internal
5
6
  */
@@ -24,4 +25,6 @@ export declare class SkyTextEditorUrlModalComponent {
24
25
  cancel(): void;
25
26
  private getEmailUrl;
26
27
  private isValid;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkyTextEditorUrlModalComponent, never>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<SkyTextEditorUrlModalComponent, "skyux-text-editor-url-modal", never, {}, {}, never, never>;
27
30
  }
package/package.json CHANGED
@@ -1,45 +1,29 @@
1
1
  {
2
2
  "name": "@skyux/text-editor",
3
- "version": "4.0.0-beta.2",
4
- "description": "HTML editor for SKY UX applications",
5
- "repository": {
6
- "type": "git",
7
- "url": "git+https://github.com/blackbaud/skyux-text-editor.git"
8
- },
9
- "author": "Blackbaud, Inc.",
10
- "license": "MIT",
11
- "bugs": {
12
- "url": "https://github.com/blackbaud/skyux-text-editor/issues"
13
- },
14
- "homepage": "https://github.com/blackbaud/skyux-text-editor#readme",
3
+ "version": "5.0.0-beta.4",
15
4
  "peerDependencies": {
16
- "@angular/common": ">=9.1.13",
17
- "@angular/core": ">=9.1.13",
18
- "@angular/forms": ">=9.1.13",
19
- "@angular/router": ">=9.1.13",
20
- "@skyux/colorpicker": "^4.2.2",
21
- "@skyux/core": "^4.3.3",
22
- "@skyux/i18n": "^4.0.3",
23
- "@skyux/indicators": "^4.7.1",
24
- "@skyux/list-builder": "^4.0.1",
25
- "@skyux/list-builder-common": "^4.0.1",
26
- "@skyux/list-builder-view-checklist": "^4.0.1",
27
- "@skyux/modals": "^4.5.1",
28
- "@skyux/tabs": "^4.3.0",
29
- "@skyux/validation": "^4.0.1",
30
- "dompurify": "^2.2.9"
5
+ "@angular/common": "^12.2.7",
6
+ "@angular/core": "^12.2.7",
7
+ "@angular/forms": "^12.2.7",
8
+ "@angular/router": "^12.2.7",
9
+ "@skyux/colorpicker": "^5.0.0-beta.3",
10
+ "@skyux/core": "^5.0.0-beta.11",
11
+ "@skyux/i18n": "^5.0.0-beta.7",
12
+ "@skyux/indicators": "^5.0.0-beta.4",
13
+ "@skyux/modals": "^5.0.0-beta.6",
14
+ "@skyux/tabs": "^5.0.0-beta.3",
15
+ "@skyux/theme": "^5.0.0-beta.6",
16
+ "@skyux/validation": "^5.0.0-beta.2"
17
+ },
18
+ "dependencies": {
19
+ "dompurify": "2.3.2",
20
+ "tslib": "^2.3.0"
31
21
  },
32
22
  "main": "bundles/skyux-text-editor.umd.js",
33
- "module": "fesm5/skyux-text-editor.js",
23
+ "module": "fesm2015/skyux-text-editor.js",
34
24
  "es2015": "fesm2015/skyux-text-editor.js",
35
- "esm5": "esm5/skyux-text-editor.js",
36
25
  "esm2015": "esm2015/skyux-text-editor.js",
37
- "fesm5": "fesm5/skyux-text-editor.js",
38
26
  "fesm2015": "fesm2015/skyux-text-editor.js",
39
27
  "typings": "skyux-text-editor.d.ts",
40
- "metadata": "skyux-text-editor.metadata.json",
41
- "sideEffects": false,
42
- "dependencies": {
43
- "tslib": "^1.10.0"
44
- }
45
- }
28
+ "sideEffects": false
29
+ }
@@ -0,0 +1,12 @@
1
+ export * from './modules/rich-text-display/rich-text-display.module';
2
+ export * from './modules/text-editor/types/font-state';
3
+ export * from './modules/text-editor/types/menu-type';
4
+ export * from './modules/text-editor/types/style-state';
5
+ export * from './modules/text-editor/types/text-editor-merge-field';
6
+ export * from './modules/text-editor/types/toolbar-action-type';
7
+ export * from './modules/text-editor/text-editor.module';
8
+ export { SkyRichTextDisplayComponent as λ1 } from './modules/rich-text-display/rich-text-display.component';
9
+ export { SkyTextEditorMenubarComponent as λ2 } from './modules/text-editor/menubar/text-editor-menubar.component';
10
+ export { SkyTextEditorUrlModalComponent as λ3 } from './modules/text-editor/url-modal/text-editor-url-modal.component';
11
+ export { SkyTextEditorToolbarComponent as λ4 } from './modules/text-editor/toolbar/text-editor-toolbar.component';
12
+ export { SkyTextEditorComponent as λ5 } from './modules/text-editor/text-editor.component';
@@ -1,16 +1,5 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
- export * from './public_api';
5
- export { SkyRichTextDisplayComponent as ɵa } from './modules/rich-text-display/rich-text-display.component';
6
- export { SkyTextEditorMenubarComponent as ɵl } from './modules/text-editor/menubar/text-editor-menubar.component';
7
- export { SkyTextEditorAdapterService as ɵf } from './modules/text-editor/services/text-editor-adapter.service';
8
- export { SkyTextEditorSelectionService as ɵg } from './modules/text-editor/services/text-editor-selection.service';
9
- export { SkyTextEditorService as ɵh } from './modules/text-editor/services/text-editor.service';
10
- export { SkyTextSanitizationService as ɵb } from './modules/text-editor/services/text-sanitization.service';
11
- export { SkyTextEditorComponent as ɵe } from './modules/text-editor/text-editor.component';
12
- export { SkyTextEditorToolbarComponent as ɵk } from './modules/text-editor/toolbar/text-editor-toolbar.component';
13
- export { SkyUrlModalContext as ɵj } from './modules/text-editor/url-modal/text-editor-url-modal-context';
14
- export { SkyTextEditorUrlModalComponent as ɵi } from './modules/text-editor/url-modal/text-editor-url-modal.component';
15
- export { SkyTextEditorResourcesProvider as ɵd } from './plugin-resources/text-editor-resources-provider';
16
- export { SkyTextEditorResourcesModule as ɵc } from './plugin-resources/text-editor-resources.module';
4
+ /// <amd-module name="@skyux/text-editor" />
5
+ export * from './public-api';
package/CHANGELOG.md DELETED
@@ -1,13 +0,0 @@
1
- # 4.0.0-beta.2 (2021-09-15)
2
-
3
- - Added the ability to disable the text editor. [#21](https://github.com/blackbaud/skyux-text-editor/pull/21)
4
-
5
- # 4.0.0-beta.1 (2021-07-29)
6
-
7
- - Updated the toolbar to follow accessibility best practices. [#15](https://github.com/blackbaud/skyux-text-editor/pull/15)
8
- - Updated the toolbar icons for modern theme. [#16](https://github.com/blackbaud/skyux-text-editor/pull/16)
9
- - Fixed the text editor component to retain selection and cursor position when modifying the formatting. [#10](https://github.com/blackbaud/skyux-text-editor/pull/10)
10
-
11
- # 4.0.0-beta.0 (2021-06-18)
12
-
13
- - Initial beta release.
@@ -1,2 +0,0 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/common"),require("@angular/core"),require("@angular/platform-browser"),require("dompurify"),require("@angular/forms"),require("@skyux/colorpicker"),require("@skyux/core"),require("@skyux/forms"),require("@skyux/modals"),require("@skyux/i18n"),require("@skyux/indicators"),require("@skyux/layout"),require("@skyux/popovers"),require("@skyux/tabs"),require("@skyux/theme"),require("rxjs"),require("rxjs/operators"),require("@skyux/validation")):"function"==typeof define&&define.amd?define("@skyux/text-editor",["exports","@angular/common","@angular/core","@angular/platform-browser","dompurify","@angular/forms","@skyux/colorpicker","@skyux/core","@skyux/forms","@skyux/modals","@skyux/i18n","@skyux/indicators","@skyux/layout","@skyux/popovers","@skyux/tabs","@skyux/theme","rxjs","rxjs/operators","@skyux/validation"],t):t(((e=e||self).skyux=e.skyux||{},e.skyux["text-editor"]={}),e.ng.common,e.ng.core,e.ng.platformBrowser,e.dompurify,e.ng.forms,e.colorpicker,e.core$1,e.forms$1,e.modals,e.i18n,e.indicators,e.layout,e.popovers,e.tabs,e.theme,e.rxjs,e.rxjs.operators,e.validation)}(this,(function(e,t,n,o,i,r,s,a,l,d,c,u,y,p,m,k,b,h,f){"use strict";i=i&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i;var g=function(){return(g=Object.assign||function(e){for(var t,n=1,o=arguments.length;n<o;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function _(e,t,n,o){var i,r=arguments.length,s=r<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,o);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(r<3?i(s):r>3?i(t,n,s):i(t,n))||s);return r>3&&s&&Object.defineProperty(t,n,s),s}function x(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],o=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&o>=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}var S=i(window);S.addHook("afterSanitizeAttributes",(function(e){e.getAttribute("target")&&(e.setAttribute("target","_blank"),e.setAttribute("rel","noopener noreferrer"))}));var v,C=function(){function e(){this.allowedAttributes=["target"]}return e.prototype.sanitize=function(e){return S.sanitize(e,{ADD_ATTR:this.allowedAttributes})},e.ɵprov=n.ɵɵdefineInjectable({factory:function(){return new e},token:e,providedIn:"root"}),e=_([n.Injectable({providedIn:"root"})],e)}(),w=function(){function e(e,t){this.sanitizer=e,this.sanitizationService=t,this.sanitizedText="",this._richText=""}return Object.defineProperty(e.prototype,"richText",{set:function(e){var t=this.sanitizationService.sanitize(e);t!==this._richText&&(this._richText=t,this.sanitizedText=this.sanitizer.bypassSecurityTrustHtml(t))},enumerable:!0,configurable:!0}),e.ctorParameters=function(){return[{type:o.DomSanitizer},{type:C}]},_([n.Input()],e.prototype,"richText",null),e=_([n.Component({selector:"sky-rich-text-display",template:'<span\n class="sky-rich-text-display-text"\n [innerHTML]="sanitizedText"\n>\n</span>\n'})],e)}(),I=function(){function e(){}return e=_([n.NgModule({imports:[t.CommonModule],exports:[w],declarations:[w]})],e)}(),T=function(){function e(){this.resources={"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"}}}return e.prototype.getString=function(e,t){return c.getStringForLocale(this.resources,e.locale,t)},e=_([n.Injectable()],e)}(),A=function(){function e(){}return e=_([n.NgModule({providers:[{provide:c.SKY_LIB_RESOURCES_PROVIDERS,useClass:T,multi:!0}]})],e)}(),E=[{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"}],R={backColor:"rgba(0, 0, 0, 0)",fontColor:"#000",fontSize:14,font:E[0].value,boldState:!1,italicState:!1,underlineState:!1,linkState:!1};!function(e){e[e.None=0]="None",e[e.NewWindow=1]="NewWindow"}(v||(v={}));var D=function(){function e(){this.editors={}}return e.prototype.clickListener=function(e){return this.editors[e].clickObservable},e.prototype.commandChangeListener=function(e){return this.editors[e].commandChangeObservable},e.prototype.removeEditor=function(e){e in this.editors&&delete this.editors[e]},e.prototype.selectionChangeListener=function(e){return this.editors[e].selectionChangeObservable},e.ɵprov=n.ɵɵdefineInjectable({factory:function(){return new e},token:e,providedIn:"root"}),e=_([n.Injectable({providedIn:"root"})],e)}(),F=function(){function e(){}return e.prototype.isElementSelected=function(e,t){var n=this.getCurrentSelection(e).anchorNode;return n&&(t.contains(n)||n.parentNode&&t.contains(n.parentNode))},e.prototype.getCurrentSelection=function(e){return e.getSelection()},e.prototype.getCurrentSelectionParentElement=function(e){var t,n=this.getCurrentSelection(e);if(n&&n.getRangeAt&&n.getRangeAt(0).commonAncestorContainer)t=1!==(t=n.getRangeAt(0).commonAncestorContainer).nodeType?t.parentElement:t;else{if(!n||"Control"===n.type)return;t=n.createRange().parentElement()}return t},e.prototype.getCurrentSelectionRange=function(e,t){if(t.getSelection){var n=t.getSelection();if(n.getRangeAt&&n.rangeCount)return n.getRangeAt(0)}else if(e.getSelection()&&e.getSelection().getRangeAt)return e.getSelection().getRangeAt(0)},e.prototype.selectElement=function(e,t,n){if(n)if(t.getSelection)(o=t.getSelection()).removeAllRanges(),(i=e.createRange()).selectNodeContents(n),o.addRange(i);else if(e.getSelection){var o,i;(o=e.getSelection()).removeAllRanges(),(i=e.createRange()).selectNodeContents(n),o.addRange(i)}},e.ɵprov=n.ɵɵdefineInjectable({factory:function(){return new e},token:e,providedIn:"root"}),e=_([n.Injectable({providedIn:"root"})],e)}(),L=function(){function e(e,t,n){this.selectionService=e,this.textEditorService=t,this.windowService=n}return Object.defineProperty(e.prototype,"editors",{get:function(){return this.textEditorService.editors},enumerable:!0,configurable:!0}),e.prototype.addEditor=function(e,t,n,o){if(!(e in this.editors)){this.editors[e]=this.createObservers(e,t);var i=this.getIframeDocumentEl(e),r=i.createElement("style");r.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 }',i.head.appendChild(r);var s=g(g({},R),n),a="background-color: "+s.backColor+";\n color: "+s.fontColor+";\n font-family: "+s.font+";\n font-size: "+s.fontSize+"px";i.querySelector("html").setAttribute("lang","en"),i.body.setAttribute("contenteditable","true"),i.body.setAttribute("id",e),i.body.setAttribute("role","main"),i.body.setAttribute("class","editor"),i.body.setAttribute("style",a),i.body.setAttribute("data-placeholder",o||"")}},e.prototype.disableEditor=function(e,t,n){this.setEditorDisabled(e,t,n,!0)},e.prototype.enableEditor=function(e,t,n){this.setEditorDisabled(e,t,n,!1)},e.prototype.execCommand=function(e,t){if(e in this.editors){var n=this.getIframeDocumentEl(e);if(this.editorSelected(e)){var o=n.execCommand(t.command,!1,t.value);"inserthtml"!==t.command.toLowerCase()||o||this.insertHtmlInIE11(e,t.value),this.focusEditor(e),this.editors[e].commandChangeObservable.next()}}},e.prototype.getCurrentSelection=function(e){return this.selectionService.getCurrentSelection(this.getIframeDocumentEl(e))},e.prototype.getMergeFieldDataURI=function(e){var t=this.windowService.nativeWindow.document,n=e;e.length>18&&(n=e.substr(0,15)+"...");var o=t.createElement("canvas");o.setAttribute("height","20"),o.setAttribute("width","100"),o.style.backgroundColor="tan",o.style.border="1px solid #000000",o.style.borderRadius="5px";var i=o.getContext("2d");return i.font="12px Arial",i.textAlign="center",i.fillText(n,50,15),i.globalCompositeOperation="destination-over",i.fillStyle="#00FFFF",i.fillRect(0,0,100,20),i.globalCompositeOperation="source-over",i.lineWidth=2,i.strokeStyle="#FF0000",i.strokeRect(0,0,100,20),o.toDataURL("image/png",1)},e.prototype.getStyleState=function(e){var t=this.getIframeDocumentEl(e);return this.editorSelected(e)?{backColor:this.getColor(t,"BackColor"),fontColor:this.getColor(t,"ForeColor"),fontSize:parseInt(this.getFontSize(e),void 0),font:t.queryCommandValue("fontname"),boldState:t.queryCommandState("Bold"),italicState:t.queryCommandState("Italic"),underlineState:t.queryCommandState("Underline"),linkState:this.hasLink(e)}:{}},e.prototype.getEditorInnerHtml=function(e){var t=this.getIframeDocumentEl(e);return t?this.replaceHtmlCodes(t.body.innerHTML):""},e.prototype.setEditorInnerHtml=function(e,t){var n=this.getIframeDocumentEl(e).body;n.innerHTML!==t&&(n.innerHTML=t)},e.prototype.focusEditor=function(e){if(e in this.editors){var t=this.getContentWindowEl(e),n=this.getIframeDocumentEl(e),o=this.selectionService.getCurrentSelectionRange(n,t),i=o&&0===o.startOffset&&0===o.endOffset;if(!this.editorSelected(e)||i){var r=this.windowService.nativeWindow.document,s=n.body,a=r.createRange();if(this.editors[e].iframeElementRef.focus(),s.focus(),t.getSelection&&r.createRange){a.selectNodeContents(s),a.collapse(!1);var l=t.getSelection();l.removeAllRanges(),l.addRange(a)}else{var d=s.createTextRange();d.moveToElementText(s),d.collapse(!1),d.select()}}else this.editors[e].iframeElementRef.focus(),n.body.focus()}},e.prototype.getLink=function(e){var t=void 0,n=this.getSelectedAnchorTag(e);return n&&n.href&&(t={target:"_blank"===n.getAttribute("target")?v.NewWindow:v.None,url:n.href}),t},e.prototype.getSelectedAnchorTag=function(e){var t=this.getCurrentSelectionParentElement(e);return this.getParent(t,"a")},e.prototype.saveSelection=function(e){return this.selectionService.getCurrentSelectionRange(this.getIframeDocumentEl(e),this.getContentWindowEl(e))},e.prototype.selectElement=function(e,t){this.selectionService.selectElement(this.getIframeDocumentEl(e),this.getContentWindowEl(e),t)},e.prototype.setPlaceholder=function(e,t){this.getIframeDocumentEl(e).body.setAttribute("data-placeholder",t||"")},e.prototype.setFontSize=function(e,t){var n,o,i=this.getIframeDocumentEl(e);this.execCommand(e,{command:"fontSize",value:1});var r=Array.from(i.querySelectorAll('font[size="1"]'));try{for(var s=x(r),a=s.next();!a.done;a=s.next()){var l=a.value;l.removeAttribute("size"),l.style.fontSize=t+"px"}}catch(e){n={error:e}}finally{try{a&&!a.done&&(o=s.return)&&o.call(s)}finally{if(n)throw n.error}}this.cleanUpBlankStyleTags(i),this.focusEditor(e),this.editors[e].commandChangeObservable.next()},e.prototype.removeObservers=function(e){var t=e.iframeElementRef.contentWindow?e.iframeElementRef.contentWindow.document:e.iframeElementRef.contentDocument;e.selectionChangeObservable.complete(),e.clickObservable.complete(),e.commandChangeObservable.complete(),t.removeEventListener("selectionchange",e.selectionListener),t.removeEventListener("input",e.selectionListener),t.removeEventListener("mousedown",e.clickListener),t.body.removeEventListener("paste",e.pasteListener)},e.prototype.getContentWindowEl=function(e){return this.editors[e].iframeElementRef.contentWindow},e.prototype.getChildSelectedAnchorTags=function(e){var t=this.getCurrentSelection(e).getRangeAt(0);if(t.toString().length<=0)return[];var n=this.getCurrentSelectionParentElement(e);return(n?Array.from(n.querySelectorAll("a")):[]).filter((function(e){if(!t.intersectsNode){if(!e||!e.href)return!1;var n=document.createRange();return n.selectNodeContents(e),-1!==t.compareBoundaryPoints(Range.START_TO_START,n)&&1!==t.compareBoundaryPoints(Range.START_TO_END,n)||-1!==t.compareBoundaryPoints(Range.END_TO_START,n)&&1!==t.compareBoundaryPoints(Range.END_TO_END,n)}return!!e&&!!e.href&&t.intersectsNode(e)}))},e.prototype.getIframeDocumentEl=function(e){if(e in this.editors){var t=this.getContentWindowEl(e);return t?t.document:this.editors[e].iframeElementRef.contentDocument}},e.prototype.getFontSize=function(e){var t=R.fontSize.toString(),n=this.getCurrentSelection(e);if(n&&n.anchorNode&&n.anchorNode.parentElement){var o=n.anchorNode;1!==o.nodeType&&(o=o.parentElement);var i=window.getComputedStyle(o);i&&(t=i.getPropertyValue("font-size"))}return t},e.prototype.createObservers=function(e,t){var n=t.contentWindow?t.contentWindow.document:t.contentDocument;n.open(),n.close();var o=new b.Subject,i=function(){return o.next()},r=new b.Subject,s=function(){return r.next()},a=this.getPasteOverride(e);return n.addEventListener("selectionchange",i),n.addEventListener("input",i),n.addEventListener("mousedown",s),n.body.addEventListener("paste",a),{iframeElementRef:t,selectionListener:i,clickListener:s,pasteListener:a,selectionChangeObservable:o,clickObservable:r,commandChangeObservable:new b.Subject}},e.prototype.getPasteOverride=function(e){var t=this;return function(n){n.preventDefault();var o=n.clipboardData.getData("text/plain");t.execCommand(e,{command:"insertHTML",value:o})}},e.prototype.getCurrentSelectionParentElement=function(e){return this.selectionService.getCurrentSelectionParentElement(this.getIframeDocumentEl(e))},e.prototype.getColor=function(e,t){var n=e.queryCommandValue(t);return"number"==typeof n?"rgb("+(255&n)+", "+((65280&n)>>8)+", "+((16711680&n)>>16)+")":"transparent"===n.toString().toLowerCase()?R.backColor:n},e.prototype.hasLink=function(e){var t=this.getSelectedAnchorTag(e);return this.getChildSelectedAnchorTags(e).length>0||!!t&&!!t.href},e.prototype.getParent=function(e,t){for(var n=e;n&&"BODY"!==n.tagName.toUpperCase();){if(n.tagName.toUpperCase()===t.toUpperCase())return n;n=n.parentElement}},e.prototype.editorSelected=function(e){var t=this.getIframeDocumentEl(e);return this.selectionService.isElementSelected(t,t.body)},e.prototype.insertHtmlInIE11=function(e,t){var n=this.getIframeDocumentEl(e),o=this.getContentWindowEl(e).getSelection();if(o.getRangeAt&&o.rangeCount){var i=o.getRangeAt(0);i.deleteContents();var r=n.createElement("div");r.innerHTML=t;for(var s=n.createDocumentFragment(),a=void 0,l=void 0;r.firstChild;)a=r.firstChild,l=s.appendChild(a);i.insertNode(s),l&&((i=i.cloneRange()).setStartAfter(l),i.collapse(!0),o.removeAllRanges(),o.addRange(i))}},e.prototype.cleanUpBlankStyleTags=function(e){var t,n,o,i,r=Array.from(e.querySelectorAll('font,span,*[style=""]'));try{for(var s=x(r),a=s.next();!a.done;a=s.next()){(u=a.value).getAttribute("style")||u.removeAttribute("style")}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}var l=r.filter((function(e){var t=e.tagName.toUpperCase();return!("FONT"!==t&&"SPAN"!==t||0!==e.attributes.length&&e.hasChildNodes)}));try{for(var d=x(l),c=d.next();!c.done;c=d.next()){var u,y=(u=c.value).parentNode;if(y){for(;u.firstChild;)y.insertBefore(u.firstChild,u);y.removeChild(u)}}}catch(e){o={error:e}}finally{try{c&&!c.done&&(i=d.return)&&i.call(d)}finally{if(o)throw o.error}}},e.prototype.replaceHtmlCodes=function(e){return e.replace(/&nbsp;/,String.fromCharCode(160)).replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&")},e.prototype.setEditorDisabled=function(e,t,n,o){n.style.pointerEvents=o?"none":"auto",n.setAttribute("aria-disabled",o?"true":"false"),t.forEach((function(e){e.tabIndex=o?-1:0})),this.getIframeDocumentEl(e).body.setAttribute("contenteditable",o?"false":"true")},e.ctorParameters=function(){return[{type:F},{type:D},{type:a.SkyAppWindowRef}]},e.ɵprov=n.ɵɵdefineInjectable({factory:function(){return new e(n.ɵɵinject(F),n.ɵɵinject(D),n.ɵɵinject(a.SkyAppWindowRef))},token:e,providedIn:"root"}),e=_([n.Injectable({providedIn:"root"})],e)}(),j=function(){function e(){}return e.coerceBooleanProperty=function(e){return void 0!==e&&""+e!="false"},e}(),O=function(){function e(e,t,n){this.adapterService=e,this.changeDetector=t,this.resources=n,this.editorFocusStream=new b.Subject,this.menus=[],this.mergeFields=[],this._disabled=!1,this.editDropdownStream=new b.Subject,this.formatDropdownStream=new b.Subject,this.mergeFieldDropdownStream=new b.Subject,this.ngUnsubscribe=new b.Subject}return Object.defineProperty(e.prototype,"disabled",{get:function(){return this._disabled},set:function(e){var t=j.coerceBooleanProperty(e);t!==this.disabled&&(this._disabled=t,this.changeDetector.markForCheck())},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){var e=this;this.editorFocusStream.pipe(h.takeUntil(this.ngUnsubscribe)).subscribe((function(){e.closeDropdowns()})),b.forkJoin([this.resources.getString("skyux_text_editor_format_menu_action_bold_label"),this.resources.getString("skyux_text_editor_format_menu_action_bold_key_shortcut"),this.resources.getString("skyux_text_editor_format_menu_action_italic_label"),this.resources.getString("skyux_text_editor_format_menu_action_italic_key_shortcut"),this.resources.getString("skyux_text_editor_format_menu_action_underline_label"),this.resources.getString("skyux_text_editor_format_menu_action_underline_key_shortcut"),this.resources.getString("skyux_text_editor_format_menu_action_strikethrough_label"),this.resources.getString("skyux_text_editor_format_menu_action_clear_formatting_label"),this.resources.getString("skyux_text_editor_edit_menu_action_undo_label"),this.resources.getString("skyux_text_editor_edit_menu_action_undo_key_shortcut"),this.resources.getString("skyux_text_editor_edit_menu_action_redo_label"),this.resources.getString("skyux_text_editor_edit_menu_action_redo_key_shortcut"),this.resources.getString("skyux_text_editor_edit_menu_action_cut_label"),this.resources.getString("skyux_text_editor_edit_menu_action_cut_key_shortcut"),this.resources.getString("skyux_text_editor_edit_menu_action_copy_label"),this.resources.getString("skyux_text_editor_edit_menu_action_copy_key_shortcut"),this.resources.getString("skyux_text_editor_edit_menu_action_paste_label"),this.resources.getString("skyux_text_editor_edit_menu_action_paste_key_shortcut"),this.resources.getString("skyux_text_editor_edit_menu_action_select_all_label"),this.resources.getString("skyux_text_editor_edit_menu_action_select_all_key_shortcut")]).pipe(h.take(1)).subscribe((function(t){e.formatItems=[{function:function(){return e.execCommand("bold")},label:t[0],keyShortcut:t[1]},{function:function(){return e.execCommand("italic")},label:t[2],keyShortcut:t[3]},{function:function(){return e.execCommand("underline")},label:t[4],keyShortcut:t[5]},{function:function(){return e.execCommand("strikethrough")},label:t[6]},{isDivider:!0},{function:function(){return e.clearFormat()},label:t[7]}],e.editItems=[{function:function(){return e.execCommand("undo")},label:t[8],keyShortcut:t[9]},{function:function(){return e.execCommand("redo")},label:t[10],keyShortcut:t[11]},{isDivider:!0},{function:function(){return e.execCommand("cut")},label:t[12],keyShortcut:t[13]},{function:function(){return e.execCommand("copy")},label:t[14],keyShortcut:t[15]},{function:function(){return e.execCommand("paste")},label:t[16],keyShortcut:t[17]},{isDivider:!0},{function:function(){return e.execCommand("selectAll")},label:t[18],keyShortcut:t[19]}]}))},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.execCommand=function(e,t){void 0===t&&(t=""),this.adapterService.execCommand(this.editorId,{command:e,value:t})},e.prototype.insertMergeField=function(e){this.execCommand("insertHTML",'<img style="display: inline; cursor: grab;" data-fieldid="'+e.id+'" data-fielddisplay="'+e.name+'" src="'+(e.previewImageUrl||this.adapterService.getMergeFieldDataURI(e.name))+'">')},e.prototype.closeDropdowns=function(){this.editDropdownStream.next({type:p.SkyDropdownMessageType.Close}),this.formatDropdownStream.next({type:p.SkyDropdownMessageType.Close}),this.mergeFieldDropdownStream.next({type:p.SkyDropdownMessageType.Close})},e.prototype.clearFormat=function(){var e=this.adapterService.getCurrentSelection(this.editorId);e.rangeCount>0&&e.getRangeAt(0).toString().length<=0&&this.execCommand("selectAll"),this.execCommand("removeFormat")},e.ctorParameters=function(){return[{type:L},{type:n.ChangeDetectorRef},{type:c.SkyLibResourcesService}]},_([n.Input()],e.prototype,"editorFocusStream",void 0),_([n.Input()],e.prototype,"editorId",void 0),_([n.Input()],e.prototype,"menus",void 0),_([n.Input()],e.prototype,"mergeFields",void 0),_([n.Input()],e.prototype,"disabled",null),e=_([n.Component({selector:"sky-text-editor-menubar",template:'\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',changeDetection:n.ChangeDetectionStrategy.OnPush,styles:[".sky-text-editor-dropdown-item-divider{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:0 0;border-bottom:1px solid rgba(0,0,0,.1);cursor:default;filter:none}.sky-text-editor-menu-key-shortcut{float:right;margin-left:15px}"]})],e)}(),z=function(){},M=function(){function e(e,t){if(this.modalInstance=e,this.emailAddressValid=!1,this.subject="",this.target=0,this.valid=!1,this._activeTab=0,this._emailAddress="",this._url="https://",t.urlResult)if(t.urlResult.url.startsWith("mailto:")){this.emailAddress=t.urlResult.url.replace("mailto:","");var n=this.emailAddress.indexOf("?Subject=");(n=n>-1?n:this.emailAddress.indexOf("?Subject=".toLowerCase()))>-1&&(this.subject=decodeURI(this.emailAddress).slice(n+"?Subject=".length),this.emailAddress=this.emailAddress.slice(0,n)),this.activeTab=1}else this.url=t.urlResult.url,this.target=t.urlResult.target,this.activeTab=0}return Object.defineProperty(e.prototype,"activeTab",{get:function(){return this._activeTab},set:function(e){this._activeTab=e,this.valid=this.isValid()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"emailAddress",{get:function(){return this._emailAddress},set:function(e){this._emailAddress=e,this.valid=this.isValid()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this._url},set:function(e){this._url=e,this.valid=this.isValid()},enumerable:!0,configurable:!0}),e.prototype.activeTabChanged=function(e){this.activeTab=e},e.prototype.save=function(){this.isValid()&&(0===this.activeTab?this.modalInstance.save({url:this.url,target:this.target?parseInt(this.target,void 0):v.None}):this.modalInstance.save({url:this.getEmailUrl(),target:v.None}))},e.prototype.cancel=function(){this.modalInstance.cancel()},e.prototype.getEmailUrl=function(){return"mailto:"+this.emailAddress+(this.subject?"?Subject="+encodeURI(this.subject):"")},e.prototype.isValid=function(){return 0===this.activeTab?!!this.url&&f.SkyValidation.isUrl(this.url):!!this.emailAddress&&f.SkyValidation.isEmail(this.emailAddress)},e.ctorParameters=function(){return[{type:d.SkyModalInstance},{type:z}]},e=_([n.Component({selector:"skyux-text-editor-url-modal",template:'<sky-modal>\n <sky-modal-header>\n {{ \'skyux_text_editor_url_modal_header_label\' | skyLibResources }}\n </sky-modal-header>\n <sky-modal-content>\n <sky-tabset\n data-sky-id="test-tabset"\n [active]="activeTab"\n (activeChange)="activeTabChanged($event)"\n >\n <sky-tab\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',styles:[".sky-text-editor-url-modal-first-field{margin-top:15px}"]})],e)}(),P=function(){function e(e,t,n){this.adapterService=e,this.changeDetector=t,this.modalService=n,this.editorFocusStream=new b.Subject,this.backColorpickerStream=new b.Subject,this.colorpickerStream=new b.Subject,this.fontPickerStream=new b.Subject,this.fontSizeStream=new b.Subject,this._disabled=!1,this._styleState=R}return Object.defineProperty(e.prototype,"styleState",{get:function(){return this._styleState},set:function(e){this._styleState=e,e.font!==this.styleStateFontName&&('"Blackbaud Sans", Arial, sans-serif'===e.font?this.styleStateFontName=this.getFontName("Blackbaud Sans"):this.styleStateFontName=this.getFontName(e.font))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this._disabled},set:function(e){var t=j.coerceBooleanProperty(e);t!==this.disabled&&(this._disabled=t,this.changeDetector.markForCheck())},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){var e=this;this.editorFocusStream.subscribe((function(){e.styleState=g(g({},e._styleState),e.adapterService.getStyleState(e.editorId)),e.closeDropdowns(),e.changeDetector.detectChanges()}))},e.prototype.execCommand=function(e,t){void 0===t&&(t=""),this.adapterService.execCommand(this.editorId,{command:e,value:t}),this.styleState=g(g({},this.styleState),this.adapterService.getStyleState(this.editorId))},e.prototype.toggleFontStyle=function(e,t,n){e!==t&&this.execCommand(n),this.changeDetector.detectChanges()},e.prototype.link=function(){var e=this,t=this.adapterService.saveSelection(this.editorId),n=this.adapterService.getLink(this.editorId);this.modalService.open(M,[{provide:z,useValue:{urlResult:n}}]).closed.subscribe((function(o){if("save"===o.reason&&t){if(n){var i=e.adapterService.getSelectedAnchorTag(e.editorId);e.adapterService.selectElement(e.editorId,i)}if(e.execCommand("unlink"),o.data.target===v.None)e.execCommand("createLink",o.data.url);else{var r=e.adapterService.getCurrentSelection(e.editorId);e.execCommand("insertHTML",'<a href="'+o.data.url+'" rel="noopener noreferrer" target="_blank">'+r+"</a>")}}}))},e.prototype.unlink=function(){if(this.adapterService.getCurrentSelection(this.editorId).getRangeAt(0).toString().length<=0){var e=this.adapterService.getSelectedAnchorTag(this.editorId);this.adapterService.selectElement(this.editorId,e)}this.execCommand("unlink")},e.prototype.changeFontSize=function(e){this.adapterService.setFontSize(this.editorId,e),this.styleState=g(g({},this.styleState),this.adapterService.getStyleState(this.editorId))},e.prototype.onColorpickerColorChanged=function(e,t){void 0===t&&(t=!1),this.execCommand(t?"backColor":"foreColor",e.hex)},e.prototype.closeDropdowns=function(){var e={type:s.SkyColorpickerMessageType.Close};this.colorpickerStream.next(e),this.backColorpickerStream.next(e),this.fontPickerStream.next({type:p.SkyDropdownMessageType.Close}),this.fontSizeStream.next({type:p.SkyDropdownMessageType.Close})},e.prototype.getFontName=function(e){for(var t=0;t<this.fontList.length;t++)if(e.replace(/['"]+/g,"")===this.fontList[t].name)return this.fontList[t].name},e.ctorParameters=function(){return[{type:L},{type:n.ChangeDetectorRef},{type:d.SkyModalService}]},_([n.Input()],e.prototype,"editorFocusStream",void 0),_([n.Input()],e.prototype,"editorId",void 0),_([n.Input()],e.prototype,"fontList",void 0),_([n.Input()],e.prototype,"fontSizeList",void 0),_([n.Input()],e.prototype,"toolbarActions",void 0),_([n.Input()],e.prototype,"styleState",null),_([n.Input()],e.prototype,"disabled",null),e=_([n.Component({selector:"sky-text-editor-toolbar",template:'\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',changeDetection:n.ChangeDetectionStrategy.OnPush,styles:[".sky-text-editor-toolbar-action .sky-toolbar-item{margin-right:15px}.sky-text-editor-toolbar-action .sky-text-editor-font-picker ::ng-deep .sky-dropdown-button-content-container{width:140px;height:20px;text-align:left}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group{display:flex}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container{position:relative;top:3px;margin:0 10px 0 0}.sky-text-editor-toolbar-action .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container:last-child{margin-right:0}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn{margin-left:0;margin-right:0;border-radius:0;border-right:none}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn:first-of-type{border-top-left-radius:3px;border-bottom-left-radius:3px}.sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn:last-of-type{border-top-right-radius:3px;border-bottom-right-radius:3px;border-right:1px solid #cdcfd2}:host-context(.sky-theme-modern) .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container{top:-2px;margin:0}:host-context(.sky-theme-modern) .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container:last-child ::ng-deep sky-colorpicker .sky-colorpicker-button{margin-right:0}:host-context(.sky-theme-modern) .sky-switch-icon-group .sky-btn{margin:inherit;border-radius:6px}:host-context(.sky-theme-modern) .sky-switch-icon-group .sky-btn:first-of-type,:host-context(.sky-theme-modern) .sky-switch-icon-group .sky-btn:last-of-type{border-radius:6px}:host-context(.sky-theme-modern) .sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn:last-of-type{border:none}.sky-theme-modern .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container{top:-2px;margin:0}.sky-theme-modern .sky-text-editor-colorpicker-group .sky-text-editor-colorpicker-container:last-child ::ng-deep sky-colorpicker .sky-colorpicker-button{margin-right:0}.sky-theme-modern .sky-switch-icon-group .sky-btn{margin:inherit;border-radius:6px}.sky-theme-modern .sky-switch-icon-group .sky-btn:first-of-type,.sky-theme-modern .sky-switch-icon-group .sky-btn:last-of-type{border-radius:6px}.sky-theme-modern .sky-text-editor-toolbar-action .sky-switch-icon-group .sky-btn:last-of-type{border:none}"]})],e)}(),N=["edit","format"],U=["font-family","font-size","font-style","color","list","link"],B=[6,8,9,10,11,12,13,14,15,16,18,20,22,24,26,28,36,48],q=0,V=function(){function e(e,t,n,o,i){this.changeDetector=e,this.coreAdapterService=t,this.adapterService=n,this.editorService=o,this.sanitizationService=i,this.autofocus=!1,this.editorFocusStream=new b.Subject,this.fontList=E,this.fontSizeList=B,this.id="sky-text-editor-"+ ++q,this.menus=N,this.mergeFields=[],this.toolbarActions=U,this.focusInitialized=!1,this.initialized=!1,this.ngUnsubscribe=new b.Subject,this._disabled=!1,this._initialStyleState=Object.assign({},R),this._placeholder="",this._value="<p></p>",this.onTouch=function(){},this._onChange=function(e){}}var t;return t=e,Object.defineProperty(e.prototype,"disabled",{get:function(){return this._disabled},set:function(e){var t=j.coerceBooleanProperty(e);t!==this.disabled&&(this._disabled=t,this._disabled?this.adapterService.disableEditor(this.id,this.focusableChildren,this.iframeRef.nativeElement):this.adapterService.enableEditor(this.id,this.focusableChildren,this.iframeRef.nativeElement),this.changeDetector.markForCheck())},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"initialStyleState",{get:function(){return this._initialStyleState},set:function(e){this.initialized||(this._initialStyleState=g(g({},R),e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"placeholder",{get:function(){return this._placeholder},set:function(e){e!==this._placeholder&&(this._placeholder=e,this.initialized&&this.adapterService.setPlaceholder(this.id,e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(e){var t=e;(!e||"<p></p>"===e.trim()&&"<br>"===e.trim())&&(t=""),t=this.sanitizationService.sanitize(t).trim(),this._value!==t&&(this._value=t,this.autofocus&&!this.focusInitialized&&(this.adapterService.focusEditor(this.id),this.focusInitialized=!0),this.onChange())},enumerable:!0,configurable:!0}),e.prototype.ngAfterViewInit=function(){var e=this;this.adapterService.addEditor(this.id,this.iframeRef.nativeElement,this.initialStyleState,this.placeholder),this.editorService.selectionChangeListener(this.id).pipe(h.takeUntil(this.ngUnsubscribe)).subscribe((function(){e.updateValueAndStyle(),e.editorFocusStream.next()})),this.editorService.clickListener(this.id).pipe(h.takeUntil(this.ngUnsubscribe)).subscribe((function(){e.editorFocusStream.next()})),this.editorService.commandChangeListener(this.id).pipe(h.takeUntil(this.ngUnsubscribe)).subscribe((function(){e.updateValueAndStyle()})),this.adapterService.setEditorInnerHtml(this.id,this._value),this.autofocus&&this.adapterService.focusEditor(this.id),this.focusableChildren=this.coreAdapterService.getFocusableChildren(this.iframeRef.nativeElement,{ignoreVisibility:!0}),this.initialized=!0},e.prototype.ngOnDestroy=function(){this.adapterService.removeObservers(this.editorService.editors[this.id]),this.editorService.removeEditor(this.id),this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.writeValue=function(e){this.value=e;var t=this.adapterService.getEditorInnerHtml(this.id);this.initialized&&t!==this._value&&this.adapterService.setEditorInnerHtml(this.id,this._value)},e.prototype.registerOnChange=function(e){this._onChange=e},e.prototype.registerOnTouched=function(e){this.onTouch=e},e.prototype.setDisabledState=function(e){this.disabled=e},e.prototype.onChange=function(){this._onChange(this.value)},e.prototype.updateValueAndStyle=function(){this.value=this.adapterService.getEditorInnerHtml(this.id),this._initialStyleState=g(g({},this._initialStyleState),this.adapterService.getStyleState(this.id))},e.ctorParameters=function(){return[{type:n.ChangeDetectorRef},{type:a.SkyCoreAdapterService},{type:L},{type:D},{type:C}]},_([n.Input()],e.prototype,"autofocus",void 0),_([n.Input()],e.prototype,"disabled",null),_([n.Input()],e.prototype,"fontList",void 0),_([n.Input()],e.prototype,"fontSizeList",void 0),_([n.Input()],e.prototype,"id",void 0),_([n.Input()],e.prototype,"initialStyleState",null),_([n.Input()],e.prototype,"menus",void 0),_([n.Input()],e.prototype,"mergeFields",void 0),_([n.Input()],e.prototype,"placeholder",null),_([n.Input()],e.prototype,"toolbarActions",void 0),_([n.ViewChild("iframe")],e.prototype,"iframeRef",void 0),e=t=_([n.Component({selector:"sky-text-editor",template:'<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',providers:[{provide:r.NG_VALUE_ACCESSOR,useExisting:n.forwardRef((function(){return t})),multi:!0}],changeDetection:n.ChangeDetectionStrategy.OnPush,encapsulation:n.ViewEncapsulation.None,styles:[".sky-text-editor .sky-text-editor-wrapper{display:flex;flex-wrap:wrap;background-color:#fff;width:100%;height:300px;padding:1rem;font-size:1.2rem;border:1px solid silver;overflow-y:auto;outline:0}.sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:#ededee}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-left:1px solid #cdcfd2!important;border-right:1px solid #cdcfd2!important}.sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 10px 0}.sky-text-editor .sky-text-editor-toolbar .sky-dropdown-button{border:none}.sky-text-editor .sky-text-editor-toolbar sky-text-editor-menubar,.sky-text-editor .sky-text-editor-toolbar sky-text-editor-toolbar{display:flex;flex-wrap:wrap}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper{border:1px solid #d2d2d2}.sky-theme-modern .sky-text-editor .sky-text-editor-wrapper.sky-text-editor-wrapper-disabled{background-color:#ececed}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar{padding:10px 10px 0}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-section{padding:10px!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-sectioned{border-top:1px solid #d2d2d2!important;border-left:1px solid #d2d2d2!important;border-right:1px solid #d2d2d2!important}.sky-theme-modern .sky-text-editor .sky-text-editor-toolbar .sky-toolbar-item{margin:0 20px 0 0!important}"]})],e)}(),H=function(){function e(){}return e=_([n.NgModule({imports:[t.CommonModule,r.FormsModule,r.ReactiveFormsModule,a.SkyCoreAdapterModule,A,c.SkyI18nModule,u.SkyIconModule,a.SkyIdModule,l.SkyInputBoxModule,s.SkyColorpickerModule,l.SkyCheckboxModule,p.SkyDropdownModule,d.SkyModalModule,m.SkyTabsModule,k.SkyThemeModule,y.SkyToolbarModule],exports:[V,M,P,O],declarations:[V,M,P,O],entryComponents:[M]})],e)}();e.SkyRichTextDisplayModule=I,e.SkyTextEditorModule=H,e.ɵa=w,e.ɵb=C,e.ɵc=A,e.ɵd=T,e.ɵe=V,e.ɵf=L,e.ɵg=F,e.ɵh=D,e.ɵi=M,e.ɵj=z,e.ɵk=P,e.ɵl=O,Object.defineProperty(e,"__esModule",{value:!0})}));
2
- //# sourceMappingURL=skyux-text-editor.umd.min.js.map