@worktile/theia 1.2.9 → 1.2.10

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 (73) hide show
  1. package/bundles/worktile-theia.umd.js +731 -133
  2. package/bundles/worktile-theia.umd.js.map +1 -1
  3. package/components/inline-toolbar/inline-toolbar.component.d.ts +24 -0
  4. package/components/inline-toolbar/inline-toolbar.component.scss +18 -0
  5. package/components/nav-split-line/nav-split-line.component.d.ts +6 -1
  6. package/components/toolbar-dropdown/toolbar-dropdown.component.scss +3 -0
  7. package/components/toolbar-item/toolbar-item.component.d.ts +14 -5
  8. package/constants/node-types.d.ts +0 -1
  9. package/constants/toolbar.d.ts +6 -2
  10. package/custom-types.d.ts +1 -0
  11. package/editor.component.d.ts +6 -4
  12. package/editor.module.d.ts +59 -52
  13. package/esm2015/components/color-select/color-select.component.js +3 -2
  14. package/esm2015/components/inline-toolbar/inline-toolbar.component.js +123 -0
  15. package/esm2015/components/nav-split-line/nav-split-line.component.js +26 -5
  16. package/esm2015/components/toolbar-base-item/toolbar-base-item.component.js +3 -2
  17. package/esm2015/components/toolbar-item/toolbar-item.component.js +70 -24
  18. package/esm2015/constants/node-types.js +1 -2
  19. package/esm2015/constants/toolbar.js +37 -5
  20. package/esm2015/custom-types.js +1 -1
  21. package/esm2015/editor.component.js +24 -19
  22. package/esm2015/editor.module.js +15 -6
  23. package/esm2015/interfaces/toolbar.js +1 -1
  24. package/esm2015/plugins/deserializers/deserialize-html.plugin.js +8 -1
  25. package/esm2015/plugins/image/image.plugin.js +1 -2
  26. package/esm2015/plugins/index.js +8 -4
  27. package/esm2015/plugins/link/link.plugin.js +7 -2
  28. package/esm2015/plugins/list/list.plugin.js +7 -7
  29. package/esm2015/plugins/list/queries/get-start-list-item.js +9 -2
  30. package/esm2015/plugins/list/queries/is-selection-in-same-list-item.js +17 -0
  31. package/esm2015/plugins/paint-format/options.js +54 -0
  32. package/esm2015/plugins/paint-format/paint-format.editor.js +67 -0
  33. package/esm2015/plugins/placeholder/placeholder.component.js +75 -0
  34. package/esm2015/plugins/public-api.js +2 -1
  35. package/esm2015/plugins/quick-insert/components/quick-insert.component.js +76 -0
  36. package/esm2015/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.js +75 -0
  37. package/esm2015/plugins/quick-insert/quick-insert.editor.js +61 -0
  38. package/esm2015/plugins/quick-insert/quick-insert.plugint.js +37 -0
  39. package/esm2015/plugins/table/components/row/row.component.js +3 -1
  40. package/esm2015/plugins/table/components/table.component.js +6 -3
  41. package/esm2015/plugins/table/components/td/td.component.js +2 -1
  42. package/esm2015/plugins/table/components/toolbar/table-toolbar.component.js +1 -1
  43. package/esm2015/public-api.js +2 -1
  44. package/esm2015/services/context.service.js +2 -2
  45. package/esm2015/services/toolbar.service.js +5 -5
  46. package/esm2015/utils/auto-focus.js +2 -2
  47. package/esm2015/utils/is-clean-empty-paragraph.js +32 -0
  48. package/esm2015/utils/weak-maps.js +2 -1
  49. package/fesm2015/worktile-theia.js +726 -136
  50. package/fesm2015/worktile-theia.js.map +1 -1
  51. package/interfaces/toolbar.d.ts +3 -2
  52. package/package.json +1 -1
  53. package/plugins/list/queries/get-start-list-item.d.ts +8 -2
  54. package/plugins/list/queries/is-selection-in-same-list-item.d.ts +5 -0
  55. package/plugins/paint-format/options.d.ts +2 -0
  56. package/plugins/paint-format/paint-format.editor.d.ts +7 -0
  57. package/{components → plugins}/placeholder/placeholder.component.d.ts +5 -6
  58. package/{components → plugins}/placeholder/placeholder.component.scss +0 -0
  59. package/plugins/public-api.d.ts +1 -0
  60. package/plugins/quick-insert/components/quick-insert.component.d.ts +25 -0
  61. package/plugins/quick-insert/components/quick-insert.component.scss +21 -0
  62. package/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.d.ts +29 -0
  63. package/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.scss +21 -0
  64. package/plugins/quick-insert/quick-insert.editor.d.ts +8 -0
  65. package/plugins/quick-insert/quick-insert.plugint.d.ts +2 -0
  66. package/plugins/table/components/table.component.d.ts +1 -0
  67. package/public-api.d.ts +1 -0
  68. package/services/toolbar.service.d.ts +1 -1
  69. package/styles/editor.scss +31 -9
  70. package/styles/index.scss +5 -2
  71. package/utils/is-clean-empty-paragraph.d.ts +8 -0
  72. package/utils/weak-maps.d.ts +1 -0
  73. package/esm2015/components/placeholder/placeholder.component.js +0 -88
@@ -0,0 +1,24 @@
1
+ import { OnInit, OnDestroy, ChangeDetectorRef, ElementRef, NgZone } from '@angular/core';
2
+ import { ScrollDispatcher } from '@angular/cdk/overlay';
3
+ import { Subject } from 'rxjs';
4
+ import { Editor } from 'slate';
5
+ import { ToolbarItem } from '../../interfaces';
6
+ import { TheToolbarComponent } from '../toolbar/toolbar.component';
7
+ import * as i0 from "@angular/core";
8
+ export declare class TheInlineToolbarComponent implements OnInit, OnDestroy {
9
+ private elementRef;
10
+ private scrollDispatcher;
11
+ private cdr;
12
+ private ngZone;
13
+ editor: Editor;
14
+ toolbarItems: ToolbarItem[];
15
+ inlineToolbar: TheToolbarComponent;
16
+ destroy$: Subject<unknown>;
17
+ constructor(elementRef: ElementRef<any>, scrollDispatcher: ScrollDispatcher, cdr: ChangeDetectorRef, ngZone: NgZone);
18
+ ngOnInit(): void;
19
+ updateInlineToolbar(): void;
20
+ updatePosition(toolbarElement: any, range: any): void;
21
+ ngOnDestroy(): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<TheInlineToolbarComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<TheInlineToolbarComponent, "the-inline-toolbar", never, { "editor": "editor"; "toolbarItems": "toolbarItems"; }, {}, never, never>;
24
+ }
@@ -0,0 +1,18 @@
1
+ .the-inline-toolbar {
2
+ background: $white;
3
+ box-shadow: $box-shadow;
4
+ border-radius: 4px;
5
+ position: fixed;
6
+ z-index: 9;
7
+ top: -10000px;
8
+ left: -10000px;
9
+ margin-top: -6px;
10
+ opacity: 0;
11
+ transition: opacity 0.75s;
12
+
13
+ &.hide {
14
+ display: none;
15
+ }
16
+
17
+ @include thy-icon-nav-disabled();
18
+ }
@@ -1,8 +1,13 @@
1
1
  import { OnInit } from '@angular/core';
2
+ import { ToolbarItemMode } from '../../constants/toolbar';
2
3
  import * as i0 from "@angular/core";
3
4
  export declare class NavSplitLineComponent implements OnInit {
5
+ mode: ToolbarItemMode;
6
+ theNavSplitLine: boolean;
7
+ get horizontal(): boolean;
8
+ get vertical(): boolean;
4
9
  constructor();
5
10
  ngOnInit(): void;
6
11
  static ɵfac: i0.ɵɵFactoryDeclaration<NavSplitLineComponent, never>;
7
- static ɵcmp: i0.ɵɵComponentDeclaration<NavSplitLineComponent, "nav-split-line", never, {}, {}, never, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<NavSplitLineComponent, "nav-split-line", never, { "mode": "mode"; }, {}, never, never>;
8
13
  }
@@ -36,6 +36,9 @@
36
36
  color: initial;
37
37
  position: relative;
38
38
  }
39
+ .table-down-icon {
40
+ left: 2px;
41
+ }
39
42
  }
40
43
  }
41
44
 
@@ -1,15 +1,24 @@
1
+ import { ComponentFactoryResolver, NgZone, OnInit, ViewContainerRef } from '@angular/core';
1
2
  import { Editor } from 'slate';
2
- import { DefaultToolbarItem } from '../../interfaces';
3
+ import { ToolbarItem } from '../../interfaces';
3
4
  import { CustomEditor } from '../../custom-types';
4
5
  import { TheToolbarBaseItemComponent } from '../toolbar-base-item/toolbar-base-item.component';
6
+ import { ToolbarItemMode } from '../../constants/toolbar';
5
7
  import * as i0 from "@angular/core";
6
- export declare class TheToolbarItemComponent extends TheToolbarBaseItemComponent {
7
- item: DefaultToolbarItem;
8
+ export declare class TheToolbarItemComponent extends TheToolbarBaseItemComponent implements OnInit {
9
+ private ngZone;
10
+ private cfr;
11
+ item: ToolbarItem;
8
12
  editor: CustomEditor;
13
+ itemMode: ToolbarItemMode;
14
+ ToolbarItemMode: typeof ToolbarItemMode;
9
15
  active: string | boolean;
10
- constructor();
16
+ toolbarContainer: ViewContainerRef;
17
+ constructor(ngZone: NgZone, cfr: ComponentFactoryResolver);
18
+ ngOnInit(): void;
11
19
  statusChange(editor: Editor): void;
12
20
  execute(event: MouseEvent): void;
21
+ renderToolbarItem(): void;
13
22
  static ɵfac: i0.ɵɵFactoryDeclaration<TheToolbarItemComponent, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<TheToolbarItemComponent, "the-toolbar-item", never, { "item": "item"; "editor": "editor"; }, {}, never, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<TheToolbarItemComponent, "the-toolbar-item", never, { "item": "item"; "editor": "editor"; "itemMode": "itemMode"; }, {}, never, never>;
15
24
  }
@@ -44,7 +44,6 @@ export declare enum MarkTypes {
44
44
  }
45
45
  export declare enum ToolbarActionTypes {
46
46
  split = "split",
47
- save = "save",
48
47
  undo = "undo",
49
48
  redo = "redo",
50
49
  paintformat = "paintformat",
@@ -3,12 +3,16 @@ import { InjectionToken } from '@angular/core';
3
3
  import { ToolbarItem, ToolbarKey } from '../interfaces';
4
4
  import type { TheToolbarGroupComponent } from '../components/toolbar-group/toolbar-group.component';
5
5
  export declare const TheToolbarGroupToken: InjectionToken<ComponentType<TheToolbarGroupComponent>>;
6
- export declare const BLOCK_TOOLBAR_HOTKEY = "/";
6
+ export declare const QUICK_TOOLBAR_HOTKEY = "/";
7
7
  export declare enum DropdownMode {
8
8
  icon = "icon-mode",
9
9
  text = "text-mode"
10
10
  }
11
+ export declare enum ToolbarItemMode {
12
+ horizontal = 0,
13
+ vertical = 1
14
+ }
11
15
  export declare const DefaultGlobalToolbarDefinition: ToolbarKey[];
12
16
  export declare const DefaultInlineToolbarDefinition: ToolbarKey[];
13
- export declare const DefaultBlockToolbarDefinition: ToolbarKey[];
17
+ export declare const DefaultQuickToolbarDefinition: ToolbarKey[];
14
18
  export declare const ToolbarMoreGroup: ToolbarItem;
package/custom-types.d.ts CHANGED
@@ -30,6 +30,7 @@ export interface NumberedListElement extends TheElement {
30
30
  export interface ListItemElement extends TheElement {
31
31
  type: ElementKinds.listItem;
32
32
  start?: number;
33
+ children: Element[];
33
34
  }
34
35
  export interface LinkElement extends TheElement {
35
36
  type: ElementKinds.link;
@@ -2,13 +2,14 @@ import { OnInit, OnDestroy, ViewContainerRef, ElementRef, EventEmitter, OnChange
2
2
  import { MixinBase } from 'ngx-tethys/core';
3
3
  import { Editor, Text, Element, Descendant, Range, NodeEntry } from 'slate';
4
4
  import { SlateError } from 'slate-angular';
5
- import { ThePlugin, TheOptions, ToolbarItem, DomEventDataInfo, TheEditor } from './interfaces';
5
+ import { ThePlugin, TheOptions, DomEventDataInfo, TheEditor, ToolbarEntity } from './interfaces';
6
6
  import { TheTemplateComponent } from './components/template/template.component';
7
7
  import { TheToolbarComponent } from './components/toolbar/toolbar.component';
8
8
  import { TheToolbarService } from './services/toolbar.service';
9
9
  import { TheContextService } from './services/context.service';
10
10
  import { TheTextComponent } from './components/text/text.component';
11
- import { ThePlaceholderComponent } from './components/placeholder/placeholder.component';
11
+ import { TheQuickInsertComponent } from './plugins/quick-insert/components/quick-insert.component';
12
+ import { ThePlaceholderComponent } from './plugins/placeholder/placeholder.component';
12
13
  import * as i0 from "@angular/core";
13
14
  declare const TheEditorComponent_base: import("ngx-tethys/core").Constructor<import("ngx-tethys/core").ThyUnsubscribe> & typeof MixinBase;
14
15
  export declare class TheEditorComponent extends TheEditorComponent_base implements OnInit, OnChanges, OnDestroy {
@@ -30,14 +31,16 @@ export declare class TheEditorComponent extends TheEditorComponent_base implemen
30
31
  theEditorCreated: EventEmitter<Editor>;
31
32
  templateInstance: TheTemplateComponent;
32
33
  globalToolbarInstance: TheToolbarComponent;
34
+ quickInsertInstance: TheQuickInsertComponent;
33
35
  placeholderInstance: ThePlaceholderComponent;
34
36
  _plugins: ThePlugin[];
35
- globalToolbarItems: ToolbarItem[];
37
+ toolbarEntity: ToolbarEntity;
36
38
  editor: TheEditor;
37
39
  editorValue: Descendant[];
38
40
  decorate: (nodeEntry: NodeEntry) => Range[];
39
41
  get theGlobalToolbarInstance(): TheToolbarComponent;
40
42
  get maxHeight(): string;
43
+ get quickToolbarItems(): import("./interfaces").ToolbarItem[];
41
44
  autoScrollView: any;
42
45
  elementToHtml: WeakMap<Element, string>;
43
46
  private onChangeCallback;
@@ -78,7 +81,6 @@ export declare class TheEditorComponent extends TheEditorComponent_base implemen
78
81
  onSlaCompositionEnd: (event: CompositionEvent) => void;
79
82
  onSlaDragStart: (event: DragEvent) => void;
80
83
  onSlaDragOver: (event: DragEvent) => void;
81
- trackBy: (element: Element) => string;
82
84
  getTextAndJSON(data: DataTransfer): {
83
85
  json: any[];
84
86
  text: string;
@@ -9,7 +9,6 @@ import { TheTemplateComponent } from './components/template/template.component';
9
9
  import { TheListItemComponent } from './plugins/list/components/list-item.component';
10
10
  import { TheBulletedListComponent } from './plugins/list/components/bulleted-list.component';
11
11
  import { TheNumberedListComponent } from './plugins/list/components/numbered-list.component';
12
- import { ThePlaceholderComponent } from './components/placeholder/placeholder.component';
13
12
  import { TheColorSelectComponent } from './components/color-select/color-select.component';
14
13
  import { TheColorToolbarItemComponent } from './plugins/color/toolbar-item.component';
15
14
  import { TheCodeComponent } from './plugins/code/code.component';
@@ -24,7 +23,12 @@ import { TheInsertMarkComponent } from './plugins/table/components/insert-mark/i
24
23
  import { TheToolbarGroupComponent } from './components/toolbar-group/toolbar-group.component';
25
24
  import { TheTableSelectComponent } from './components/table-select/table-select.component';
26
25
  import { TheTableToolbarItemComponent } from './plugins/table/toolbar-item.component';
26
+ import { TheConversionHintComponent } from './components/conversion-hint/conversion-hint.component';
27
27
  import { TheVerticalToolbarItemComponent } from './plugins/vertical-align/toolbar-item.component';
28
+ import { TheInlineToolbarComponent } from './components/inline-toolbar/inline-toolbar.component';
29
+ import { TheQuickToolbarComponent } from './plugins/quick-insert/components/quick-toolbar/quick-toolbar.component';
30
+ import { TheQuickInsertComponent } from './plugins/quick-insert/components/quick-insert.component';
31
+ import { ThePlaceholderComponent } from './plugins/placeholder/placeholder.component';
28
32
  import * as i0 from "@angular/core";
29
33
  import * as i1 from "./editor.component";
30
34
  import * as i2 from "./pipes";
@@ -32,58 +36,61 @@ import * as i3 from "./components/toolbar/toolbar.component";
32
36
  import * as i4 from "./components/toolbar-dropdown/toolbar-dropdown.component";
33
37
  import * as i5 from "./components/toolbar-group/toolbar-group.component";
34
38
  import * as i6 from "./components/toolbar-item/toolbar-item.component";
35
- import * as i7 from "./components/nav-split-line/nav-split-line.component";
36
- import * as i8 from "./components/text/text.component";
37
- import * as i9 from "./components/element/element.component";
38
- import * as i10 from "./components/placeholder/placeholder.component";
39
- import * as i11 from "./components/color-select/color-select.component";
40
- import * as i12 from "./plugins/color/toolbar-item.component";
41
- import * as i13 from "./components/contextmenu/contextmenu.component";
42
- import * as i14 from "./plugins/table/components/insert-mark/insert-mark.component";
43
- import * as i15 from "./components/table-select/table-select.component";
44
- import * as i16 from "./plugins/table/toolbar-item.component";
45
- import * as i17 from "./components/conversion-hint/conversion-hint.component";
46
- import * as i18 from "./plugins/vertical-align/toolbar-item.component";
47
- import * as i19 from "./plugins/image/image.component";
48
- import * as i20 from "./components/template/template.component";
49
- import * as i21 from "./plugins/hr/hr.component";
50
- import * as i22 from "./plugins/blockquote/blockquote.component";
51
- import * as i23 from "./plugins/todo-item/todo-item.component";
52
- import * as i24 from "./plugins/list/components/list-item.component";
53
- import * as i25 from "./plugins/list/components/bulleted-list.component";
54
- import * as i26 from "./plugins/list/components/numbered-list.component";
55
- import * as i27 from "./plugins/code/code.component";
56
- import * as i28 from "./plugins/link/link.component";
57
- import * as i29 from "./plugins/link/edit/link-edit.component";
58
- import * as i30 from "./plugins/link/hover/link-hover.component";
59
- import * as i31 from "./plugins/table/components/toolbar/table-toolbar.component";
60
- import * as i32 from "./plugins/table/components/table.component";
61
- import * as i33 from "./plugins/table/components/row/row.component";
62
- import * as i34 from "./plugins/table/components/td/td.component";
63
- import * as i35 from "@angular/common";
64
- import * as i36 from "slate-angular";
65
- import * as i37 from "@angular/forms";
66
- import * as i38 from "ngx-tethys/icon";
67
- import * as i39 from "ngx-tethys/avatar";
68
- import * as i40 from "ngx-tethys/nav";
69
- import * as i41 from "ngx-tethys/form";
70
- import * as i42 from "ngx-tethys/shared";
71
- import * as i43 from "ngx-tethys/list";
72
- import * as i44 from "ngx-tethys/tooltip";
73
- import * as i45 from "ngx-tethys/progress";
74
- import * as i46 from "ngx-tethys/autocomplete";
75
- import * as i47 from "ngx-tethys/action-menu";
76
- import * as i48 from "ngx-tethys/input";
77
- import * as i49 from "ngx-tethys/select";
78
- import * as i50 from "ngx-tethys/button";
79
- import * as i51 from "ngx-tethys/notify";
80
- import * as i52 from "ngx-tethys/alert";
81
- import * as i53 from "ng-codemirror";
82
- import * as i54 from "./components/column-resize/column-resize.module";
83
- export declare const COMPONENTS: (typeof TheColorSelectComponent | typeof TheContextMenuComponent | typeof TheToolbarGroupComponent | typeof TheTextComponent | typeof TheDefaultElementComponent | typeof TheColorToolbarItemComponent | typeof TheTableSelectComponent | typeof TheTableToolbarItemComponent | typeof TheVerticalToolbarItemComponent | typeof TheToolbarItemComponent | typeof NavSplitLineComponent | typeof TheToolbarDropdownComponent | typeof TheToolbarComponent | typeof ThePlaceholderComponent | typeof TheInsertMarkComponent)[];
84
- export declare const PLUGIN_COMPONENTS: (typeof TheTableToolbarComponent | typeof TheTableComponent | typeof TheImageComponent | typeof TheNumberedListComponent | typeof TheBulletedListComponent | typeof TheListItemComponent | typeof TheCodeComponent | typeof TheLinkHoverComponent | typeof TheLinkEditComponent | typeof TheLinkComponent | typeof TheTdComponent | typeof TheTemplateComponent)[];
39
+ import * as i7 from "./components/inline-toolbar/inline-toolbar.component";
40
+ import * as i8 from "./components/nav-split-line/nav-split-line.component";
41
+ import * as i9 from "./components/text/text.component";
42
+ import * as i10 from "./components/element/element.component";
43
+ import * as i11 from "./plugins/quick-insert/components/quick-insert.component";
44
+ import * as i12 from "./plugins/quick-insert/components/quick-toolbar/quick-toolbar.component";
45
+ import * as i13 from "./components/color-select/color-select.component";
46
+ import * as i14 from "./plugins/color/toolbar-item.component";
47
+ import * as i15 from "./components/contextmenu/contextmenu.component";
48
+ import * as i16 from "./plugins/table/components/insert-mark/insert-mark.component";
49
+ import * as i17 from "./components/table-select/table-select.component";
50
+ import * as i18 from "./plugins/table/toolbar-item.component";
51
+ import * as i19 from "./components/conversion-hint/conversion-hint.component";
52
+ import * as i20 from "./plugins/vertical-align/toolbar-item.component";
53
+ import * as i21 from "./plugins/image/image.component";
54
+ import * as i22 from "./components/template/template.component";
55
+ import * as i23 from "./plugins/hr/hr.component";
56
+ import * as i24 from "./plugins/blockquote/blockquote.component";
57
+ import * as i25 from "./plugins/todo-item/todo-item.component";
58
+ import * as i26 from "./plugins/list/components/list-item.component";
59
+ import * as i27 from "./plugins/list/components/bulleted-list.component";
60
+ import * as i28 from "./plugins/list/components/numbered-list.component";
61
+ import * as i29 from "./plugins/code/code.component";
62
+ import * as i30 from "./plugins/link/link.component";
63
+ import * as i31 from "./plugins/link/edit/link-edit.component";
64
+ import * as i32 from "./plugins/link/hover/link-hover.component";
65
+ import * as i33 from "./plugins/table/components/toolbar/table-toolbar.component";
66
+ import * as i34 from "./plugins/table/components/table.component";
67
+ import * as i35 from "./plugins/table/components/row/row.component";
68
+ import * as i36 from "./plugins/table/components/td/td.component";
69
+ import * as i37 from "./plugins/placeholder/placeholder.component";
70
+ import * as i38 from "@angular/common";
71
+ import * as i39 from "slate-angular";
72
+ import * as i40 from "@angular/forms";
73
+ import * as i41 from "ngx-tethys/icon";
74
+ import * as i42 from "ngx-tethys/avatar";
75
+ import * as i43 from "ngx-tethys/nav";
76
+ import * as i44 from "ngx-tethys/form";
77
+ import * as i45 from "ngx-tethys/shared";
78
+ import * as i46 from "ngx-tethys/list";
79
+ import * as i47 from "ngx-tethys/tooltip";
80
+ import * as i48 from "ngx-tethys/progress";
81
+ import * as i49 from "ngx-tethys/autocomplete";
82
+ import * as i50 from "ngx-tethys/action-menu";
83
+ import * as i51 from "ngx-tethys/input";
84
+ import * as i52 from "ngx-tethys/select";
85
+ import * as i53 from "ngx-tethys/button";
86
+ import * as i54 from "ngx-tethys/notify";
87
+ import * as i55 from "ngx-tethys/alert";
88
+ import * as i56 from "ng-codemirror";
89
+ import * as i57 from "./components/column-resize/column-resize.module";
90
+ export declare const COMPONENTS: (typeof TheColorSelectComponent | typeof TheContextMenuComponent | typeof TheToolbarGroupComponent | typeof TheTextComponent | typeof TheDefaultElementComponent | typeof TheConversionHintComponent | typeof TheColorToolbarItemComponent | typeof TheTableSelectComponent | typeof TheTableToolbarItemComponent | typeof TheVerticalToolbarItemComponent | typeof TheQuickToolbarComponent | typeof TheToolbarItemComponent | typeof NavSplitLineComponent | typeof TheToolbarDropdownComponent | typeof TheToolbarComponent | typeof TheQuickInsertComponent | typeof TheInsertMarkComponent | typeof TheInlineToolbarComponent)[];
91
+ export declare const PLUGIN_COMPONENTS: (typeof TheTableToolbarComponent | typeof TheTableComponent | typeof TheImageComponent | typeof TheNumberedListComponent | typeof TheBulletedListComponent | typeof TheListItemComponent | typeof TheCodeComponent | typeof TheLinkHoverComponent | typeof TheLinkEditComponent | typeof TheLinkComponent | typeof TheTdComponent | typeof TheTemplateComponent | typeof ThePlaceholderComponent)[];
85
92
  export declare class TheEditorModule {
86
93
  static ɵfac: i0.ɵɵFactoryDeclaration<TheEditorModule, never>;
87
- static ɵmod: i0.ɵɵNgModuleDeclaration<TheEditorModule, [typeof i1.TheEditorComponent, typeof i2.ElementStylePipe, typeof i2.ElementClassPipe, typeof i3.TheToolbarComponent, typeof i4.TheToolbarDropdownComponent, typeof i5.TheToolbarGroupComponent, typeof i6.TheToolbarItemComponent, typeof i7.NavSplitLineComponent, typeof i8.TheTextComponent, typeof i9.TheDefaultElementComponent, typeof i10.ThePlaceholderComponent, typeof i11.TheColorSelectComponent, typeof i12.TheColorToolbarItemComponent, typeof i13.TheContextMenuComponent, typeof i14.TheInsertMarkComponent, typeof i15.TheTableSelectComponent, typeof i16.TheTableToolbarItemComponent, typeof i17.TheConversionHintComponent, typeof i18.TheVerticalToolbarItemComponent, typeof i19.TheImageComponent, typeof i20.TheTemplateComponent, typeof i21.TheHrComponent, typeof i22.TheBlockquoteComponent, typeof i23.TheTodoItemComponent, typeof i24.TheListItemComponent, typeof i25.TheBulletedListComponent, typeof i26.TheNumberedListComponent, typeof i27.TheCodeComponent, typeof i28.TheLinkComponent, typeof i28.TheReadonlyLinkComponent, typeof i29.TheLinkEditComponent, typeof i30.TheLinkHoverComponent, typeof i31.TheTableToolbarComponent, typeof i32.TheTableComponent, typeof i33.TheTableRowComponent, typeof i34.TheTdComponent], [typeof i35.CommonModule, typeof i36.SlateModule, typeof i37.FormsModule, typeof i38.ThyIconModule, typeof i39.ThyAvatarModule, typeof i40.ThyNavModule, typeof i41.ThyFormModule, typeof i42.ThySharedModule, typeof i43.ThyListModule, typeof i44.ThyTooltipModule, typeof i45.ThyProgressModule, typeof i46.ThyAutocompleteModule, typeof i47.ThyActionMenuModule, typeof i48.ThyInputModule, typeof i49.ThySelectModule, typeof i50.ThyButtonModule, typeof i51.ThyNotifyModule, typeof i52.ThyAlertModule, typeof i53.CodemirrorModule, typeof i54.TheColumnSizeModule], [typeof i1.TheEditorComponent, typeof i3.TheToolbarComponent, typeof i4.TheToolbarDropdownComponent, typeof i6.TheToolbarItemComponent, typeof i9.TheDefaultElementComponent]>;
94
+ static ɵmod: i0.ɵɵNgModuleDeclaration<TheEditorModule, [typeof i1.TheEditorComponent, typeof i2.ElementStylePipe, typeof i2.ElementClassPipe, typeof i3.TheToolbarComponent, typeof i4.TheToolbarDropdownComponent, typeof i5.TheToolbarGroupComponent, typeof i6.TheToolbarItemComponent, typeof i7.TheInlineToolbarComponent, typeof i8.NavSplitLineComponent, typeof i9.TheTextComponent, typeof i10.TheDefaultElementComponent, typeof i11.TheQuickInsertComponent, typeof i12.TheQuickToolbarComponent, typeof i13.TheColorSelectComponent, typeof i14.TheColorToolbarItemComponent, typeof i15.TheContextMenuComponent, typeof i16.TheInsertMarkComponent, typeof i17.TheTableSelectComponent, typeof i18.TheTableToolbarItemComponent, typeof i19.TheConversionHintComponent, typeof i20.TheVerticalToolbarItemComponent, typeof i21.TheImageComponent, typeof i22.TheTemplateComponent, typeof i23.TheHrComponent, typeof i24.TheBlockquoteComponent, typeof i25.TheTodoItemComponent, typeof i26.TheListItemComponent, typeof i27.TheBulletedListComponent, typeof i28.TheNumberedListComponent, typeof i29.TheCodeComponent, typeof i30.TheLinkComponent, typeof i30.TheReadonlyLinkComponent, typeof i31.TheLinkEditComponent, typeof i32.TheLinkHoverComponent, typeof i33.TheTableToolbarComponent, typeof i34.TheTableComponent, typeof i35.TheTableRowComponent, typeof i36.TheTdComponent, typeof i37.ThePlaceholderComponent], [typeof i38.CommonModule, typeof i39.SlateModule, typeof i40.FormsModule, typeof i41.ThyIconModule, typeof i42.ThyAvatarModule, typeof i43.ThyNavModule, typeof i44.ThyFormModule, typeof i45.ThySharedModule, typeof i46.ThyListModule, typeof i47.ThyTooltipModule, typeof i48.ThyProgressModule, typeof i49.ThyAutocompleteModule, typeof i50.ThyActionMenuModule, typeof i51.ThyInputModule, typeof i52.ThySelectModule, typeof i53.ThyButtonModule, typeof i54.ThyNotifyModule, typeof i55.ThyAlertModule, typeof i56.CodemirrorModule, typeof i57.TheColumnSizeModule], [typeof i1.TheEditorComponent, typeof i3.TheToolbarComponent, typeof i4.TheToolbarDropdownComponent, typeof i6.TheToolbarItemComponent, typeof i10.TheDefaultElementComponent]>;
88
95
  static ɵinj: i0.ɵɵInjectorDeclaration<TheEditorModule>;
89
96
  }
@@ -51,6 +51,7 @@ export class TheColorSelectComponent {
51
51
  }
52
52
  }
53
53
  _selectColor(event, color) {
54
+ event.preventDefault();
54
55
  event.stopPropagation();
55
56
  if (this.option.specialColor && color === this.option.specialColor) {
56
57
  color = '';
@@ -81,7 +82,7 @@ export class TheColorSelectComponent {
81
82
  }
82
83
  }
83
84
  TheColorSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: TheColorSelectComponent, deps: [{ token: i1.ThyPopoverRef }], target: i0.ɵɵFactoryTarget.Component });
84
- TheColorSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.7", type: TheColorSelectComponent, selector: "the-color-select", inputs: { selectedColor: "selectedColor", selectAction: "selectAction", showCustom: "showCustom", colors: "colors", option: "option" }, host: { listeners: { "document: mousedown": "handleDocumentMouseDown($event)", "mousedown": "handleMouseDown($event)", "keydown": "handleKeydown($event)" } }, ngImport: i0, template: "<div class=\"color-container\">\n <div class=\"colors\">\n <div *ngFor=\"let row of selectColors; let rowIndex = index\">\n <span\n class=\"color-item\"\n *ngFor=\"let _color of row.rowValue; let i = index\"\n [ngClass]=\"_color.classMaps\"\n (mousedown)=\"_selectColor($event, _color.value)\"\n >\n <span [ngStyle]=\"{ background: _color.value }\">\n <thy-icon\n thyIconName=\"check\"\n [ngStyle]=\"{ color: row.tickColor }\"\n ></thy-icon>\n </span>\n </span>\n </div>\n </div>\n <div\n *ngIf=\"option.showCustom\"\n class=\"select-color\"\n >\n <span\n class=\"color\"\n [ngStyle]=\"{ background: selectedColor }\"\n ></span>\n #\n <input\n thyInput\n maxlength=\"6\"\n (keydown.enter)=\"customInputColorEnter($event)\"\n onkeyup=\"value=value.replace(/[^0-9A-Fa-f]/g,'')\"\n class=\"value\"\n [(ngModel)]=\"customColor\"\n (ngModelChange)=\"colorChange(false)\"\n />\n </div>\n</div>\n", components: [{ type: i2.ThyIconComponent, selector: "thy-icon", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5.ThyInputDirective, selector: "[thyInput]", inputs: ["thySize", "thyAutocomplete"] }, { type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
85
+ TheColorSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.7", type: TheColorSelectComponent, selector: "the-color-select", inputs: { selectedColor: "selectedColor", selectAction: "selectAction", showCustom: "showCustom", colors: "colors", option: "option" }, host: { listeners: { "document: mousedown": "handleDocumentMouseDown($event)", "mousedown": "handleMouseDown($event)", "keydown": "handleKeydown($event)" } }, ngImport: i0, template: "<div class=\"color-container\">\n <div class=\"colors\">\n <div *ngFor=\"let row of selectColors; let rowIndex = index\">\n <span\n class=\"color-item\"\n *ngFor=\"let _color of row.rowValue; let i = index\"\n [ngClass]=\"_color.classMaps\"\n (mousedown)=\"_selectColor($event, _color.value)\"\n >\n <span [ngStyle]=\"{ background: _color.value }\">\n <thy-icon thyIconName=\"check\" [ngStyle]=\"{ color: row.tickColor }\"></thy-icon>\n </span>\n </span>\n </div>\n </div>\n <div *ngIf=\"option.showCustom\" class=\"select-color\">\n <span class=\"color\" [ngStyle]=\"{ background: selectedColor }\"></span>\n #\n <input\n thyInput\n maxlength=\"6\"\n (keydown.enter)=\"customInputColorEnter($event)\"\n onkeyup=\"value=value.replace(/[^0-9A-Fa-f]/g,'')\"\n class=\"value\"\n [(ngModel)]=\"customColor\"\n (ngModelChange)=\"colorChange(false)\"\n />\n </div>\n</div>\n", components: [{ type: i2.ThyIconComponent, selector: "thy-icon", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5.ThyInputDirective, selector: "[thyInput]", inputs: ["thySize", "thyAutocomplete"] }, { type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
85
86
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: TheColorSelectComponent, decorators: [{
86
87
  type: Component,
87
88
  args: [{
@@ -109,4 +110,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImpor
109
110
  type: HostListener,
110
111
  args: ['keydown', ['$event']]
111
112
  }] } });
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3Itc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9jb21wb25lbnRzL2NvbG9yLXNlbGVjdC9jb2xvci1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY29sb3Itc2VsZWN0L2NvbG9yLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFTaEcsTUFBTSxPQUFPLHVCQUF1QjtJQXdCaEMsWUFBb0IsVUFBa0Q7UUFBbEQsZUFBVSxHQUFWLFVBQVUsQ0FBd0M7UUFuQjdELGVBQVUsR0FBRyxJQUFJLENBQUM7UUFVM0IsaUJBQVksR0FBOEUsRUFBRSxDQUFDO0lBU3BCLENBQUM7SUFOMUUsdUJBQXVCLENBQUMsS0FBaUI7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQXFCLENBQUMsRUFBRTtZQUNuRixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUlELFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBR0QsZUFBZSxDQUFDLEtBQWlCO1FBQzdCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBR0QsYUFBYSxDQUFDLEtBQWlCO1FBQzNCLEtBQUssQ0FB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Q0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBQ0QscUJBQXFCLENBQUMsS0FBb0I7UUFDdEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQzs7b0hBL0ZRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLCtWQ1RwQywydkNBc0NBOzJGRDdCYSx1QkFBdUI7a0JBTG5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsV0FBVyxFQUFFLDZCQUE2QjtvQkFDMUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEO29HQUVZLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBU04sdUJBQXVCO3NCQUR0QixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWlCL0MsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNckMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGh5UG9wb3ZlclJlZiB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBDb2xvclR5cGUsIENvbG9yU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbG9yLXNlbGVjdCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGhlLWNvbG9yLXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICdjb2xvci1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFRoZUNvbG9yU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBzZWxlY3RlZENvbG9yOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBzZWxlY3RBY3Rpb246IChjb2xvcjogQ29sb3JUeXBlKSA9PiB2b2lkO1xuXG4gICAgQElucHV0KCkgc2hvd0N1c3RvbSA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBjb2xvcnM6IHN0cmluZ1tdO1xuXG4gICAgQElucHV0KCkgb3B0aW9uOiBDb2xvclNlbGVjdE9wdGlvbjtcblxuICAgIGNvbG9yOiBzdHJpbmc7XG5cbiAgICBjdXN0b21Db2xvcjogc3RyaW5nO1xuXG4gICAgc2VsZWN0Q29sb3JzOiB7IHJvd1ZhbHVlOiB7IHZhbHVlOiBzdHJpbmc7IGNsYXNzTWFwczogb2JqZWN0IH1bXTsgdGlja0NvbG9yOiBzdHJpbmcgfVtdID0gW107XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDogbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVEb2N1bWVudE1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb2xvci1jb250YWluZXInKS5jb250YWlucyhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcG9wb3ZlclJlZjogVGh5UG9wb3ZlclJlZjxUaGVDb2xvclNlbGVjdENvbXBvbmVudD4pIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2xvcikge1xuICAgICAgICAgICAgdGhpcy5jdXN0b21Db2xvciA9IHRoaXMuc2VsZWN0ZWRDb2xvci5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1aWxkQ29sb3JzKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlS2V5ZG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBidWlsZENvbG9ycygpIHtcbiAgICAgICAgY29uc3Qgcm93cyA9IHBhcnNlSW50KCh0aGlzLmNvbG9ycy5sZW5ndGggLyB0aGlzLm9wdGlvbi5wZXJSb3dDb2xvck51bWJlcnMpLnRvRml4ZWQoMCksIDEwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29sb3JzLnB1c2goe1xuICAgICAgICAgICAgICAgIHJvd1ZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29sb3JzLnNsaWNlKGkgKiB0aGlzLm9wdGlvbi5wZXJSb3dDb2xvck51bWJlcnMsIChpICsgMSkgKiB0aGlzLm9wdGlvbi5wZXJSb3dDb2xvck51bWJlcnMpLm1hcChjb2xvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc01hcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGNvbG9yID09PSB0aGlzLnNlbGVjdGVkQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlOiBjb2xvciA9PT0gJyNGRkZGRkYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXItMCc6IGkgPT09IHRoaXMub3B0aW9uLnBlclJvd0NvbG9yTnVtYmVycyAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYi0wJzogaSA9PT0gdGhpcy5zZWxlY3RDb2xvcnMubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwZWNpYWwtY29sb3InOiBjb2xvciA9PT0gdGhpcy5vcHRpb24uc3BlY2lhbENvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRpY2tDb2xvcjogdGhpcy5vcHRpb24ucm93T3B0aW9ucyAmJiB0aGlzLm9wdGlvbi5yb3dPcHRpb25zW2kgKyAxXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfc2VsZWN0Q29sb3IoZXZlbnQ6IE1vdXNlRXZlbnQsIGNvbG9yOiBzdHJpbmcpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbi5zcGVjaWFsQ29sb3IgJiYgY29sb3IgPT09IHRoaXMub3B0aW9uLnNwZWNpYWxDb2xvcikge1xuICAgICAgICAgICAgY29sb3IgPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sb3IgPSBjb2xvcjtcbiAgICAgICAgdGhpcy5zZWxlY3RBY3Rpb24odGhpcy5zZWxlY3RlZENvbG9yKTtcbiAgICAgICAgdGhpcy5wb3BvdmVyUmVmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgY29sb3JDaGFuZ2UoaXNFbnRlcjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmN1c3RvbUNvbG9yID0gdGhpcy5jdXN0b21Db2xvci50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sb3IgPSAnIycgKyB0aGlzLmN1c3RvbUNvbG9yO1xuICAgICAgICBpZiAodGhpcy5jdXN0b21Db2xvci5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xvciA9ICcjJyArIHRoaXMuY3VzdG9tQ29sb3IucmVwbGFjZSgvKC4pL2csICckMSQxJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2xvci5sZW5ndGggPT09IDcgJiYgdGhpcy5zZWxlY3RlZENvbG9yICE9PSB0aGlzLm9wdGlvbi5zcGVjaWFsQ29sb3IpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29sb3JzID0gW107XG4gICAgICAgICAgICB0aGlzLmJ1aWxkQ29sb3JzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRW50ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWN0aW9uKHRoaXMuc2VsZWN0ZWRDb2xvcik7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjdXN0b21JbnB1dENvbG9yRW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0QWN0aW9uKHRoaXMuc2VsZWN0ZWRDb2xvcik7XG4gICAgICAgIHRoaXMucG9wb3ZlclJlZi5jbG9zZSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2xvci1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sb3JzXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBzZWxlY3RDb2xvcnM7IGxldCByb3dJbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItaXRlbVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IF9jb2xvciBvZiByb3cucm93VmFsdWU7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIl9jb2xvci5jbGFzc01hcHNcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiX3NlbGVjdENvbG9yKCRldmVudCwgX2NvbG9yLnZhbHVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gW25nU3R5bGVdPVwieyBiYWNrZ3JvdW5kOiBfY29sb3IudmFsdWUgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8dGh5LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoeUljb25OYW1lPVwiY2hlY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogcm93LnRpY2tDb2xvciB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwib3B0aW9uLnNob3dDdXN0b21cIlxuICAgICAgICBjbGFzcz1cInNlbGVjdC1jb2xvclwiXG4gICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJjb2xvclwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGJhY2tncm91bmQ6IHNlbGVjdGVkQ29sb3IgfVwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgICNcbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0aHlJbnB1dFxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNlwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjdXN0b21JbnB1dENvbG9yRW50ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBvbmtleXVwPVwidmFsdWU9dmFsdWUucmVwbGFjZSgvW14wLTlBLUZhLWZdL2csJycpXCJcbiAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXN0b21Db2xvclwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjb2xvckNoYW5nZShmYWxzZSlcIlxuICAgICAgICAvPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3Itc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9jb21wb25lbnRzL2NvbG9yLXNlbGVjdC9jb2xvci1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY29sb3Itc2VsZWN0L2NvbG9yLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFTaEcsTUFBTSxPQUFPLHVCQUF1QjtJQXdCaEMsWUFBb0IsVUFBa0Q7UUFBbEQsZUFBVSxHQUFWLFVBQVUsQ0FBd0M7UUFuQjdELGVBQVUsR0FBRyxJQUFJLENBQUM7UUFVM0IsaUJBQVksR0FBOEUsRUFBRSxDQUFDO0lBU3BCLENBQUM7SUFOMUUsdUJBQXVCLENBQUMsS0FBaUI7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQXFCLENBQUMsRUFBRTtZQUNuRixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUlELFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBR0QsZUFBZSxDQUFDLEtBQWlCO1FBQzdCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBR0QsYUFBYSxDQUFDLEtBQWlCO1FBQzNCLEtBQUssQ0FB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Q0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUNELHFCQUFxQixDQUFDLEtBQW9CO1FBQ3RDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7O29IQWhHUSx1QkFBdUI7d0dBQXZCLHVCQUF1QiwrVkNUcEMsdW5DQTZCQTsyRkRwQmEsdUJBQXVCO2tCQUxuQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFdBQVcsRUFBRSw2QkFBNkI7b0JBQzFDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRDtvR0FFWSxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQVNOLHVCQUF1QjtzQkFEdEIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFpQi9DLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTXJDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoeVBvcG92ZXJSZWYgfSBmcm9tICduZ3gtdGV0aHlzL3BvcG92ZXInO1xuaW1wb3J0IHsgQ29sb3JUeXBlLCBDb2xvclNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb2xvci1zZWxlY3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoZS1jb2xvci1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnY29sb3Itc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUaGVDb2xvclNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgc2VsZWN0ZWRDb2xvcjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgc2VsZWN0QWN0aW9uOiAoY29sb3I6IENvbG9yVHlwZSkgPT4gdm9pZDtcblxuICAgIEBJbnB1dCgpIHNob3dDdXN0b20gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgY29sb3JzOiBzdHJpbmdbXTtcblxuICAgIEBJbnB1dCgpIG9wdGlvbjogQ29sb3JTZWxlY3RPcHRpb247XG5cbiAgICBjb2xvcjogc3RyaW5nO1xuXG4gICAgY3VzdG9tQ29sb3I6IHN0cmluZztcblxuICAgIHNlbGVjdENvbG9yczogeyByb3dWYWx1ZTogeyB2YWx1ZTogc3RyaW5nOyBjbGFzc01hcHM6IG9iamVjdCB9W107IHRpY2tDb2xvcjogc3RyaW5nIH1bXSA9IFtdO1xuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6IG1vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlRG9jdW1lbnRNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29sb3ItY29udGFpbmVyJykuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBvcG92ZXJSZWY6IFRoeVBvcG92ZXJSZWY8VGhlQ29sb3JTZWxlY3RDb21wb25lbnQ+KSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sb3IpIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ29sb3IgPSB0aGlzLnNlbGVjdGVkQ29sb3Iuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWlsZENvbG9ycygpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGhhbmRsZUtleWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgYnVpbGRDb2xvcnMoKSB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBwYXJzZUludCgodGhpcy5jb2xvcnMubGVuZ3RoIC8gdGhpcy5vcHRpb24ucGVyUm93Q29sb3JOdW1iZXJzKS50b0ZpeGVkKDApLCAxMCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbG9ycy5wdXNoKHtcbiAgICAgICAgICAgICAgICByb3dWYWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNvbG9ycy5zbGljZShpICogdGhpcy5vcHRpb24ucGVyUm93Q29sb3JOdW1iZXJzLCAoaSArIDEpICogdGhpcy5vcHRpb24ucGVyUm93Q29sb3JOdW1iZXJzKS5tYXAoY29sb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NNYXBzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBjb2xvciA9PT0gdGhpcy5zZWxlY3RlZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZTogY29sb3IgPT09ICcjRkZGRkZGJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21yLTAnOiBpID09PSB0aGlzLm9wdGlvbi5wZXJSb3dDb2xvck51bWJlcnMgLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWItMCc6IGkgPT09IHRoaXMuc2VsZWN0Q29sb3JzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVjaWFsLWNvbG9yJzogY29sb3IgPT09IHRoaXMub3B0aW9uLnNwZWNpYWxDb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB0aWNrQ29sb3I6IHRoaXMub3B0aW9uLnJvd09wdGlvbnMgJiYgdGhpcy5vcHRpb24ucm93T3B0aW9uc1tpICsgMV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3NlbGVjdENvbG9yKGV2ZW50OiBNb3VzZUV2ZW50LCBjb2xvcjogc3RyaW5nKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb24uc3BlY2lhbENvbG9yICYmIGNvbG9yID09PSB0aGlzLm9wdGlvbi5zcGVjaWFsQ29sb3IpIHtcbiAgICAgICAgICAgIGNvbG9yID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbG9yID0gY29sb3I7XG4gICAgICAgIHRoaXMuc2VsZWN0QWN0aW9uKHRoaXMuc2VsZWN0ZWRDb2xvcik7XG4gICAgICAgIHRoaXMucG9wb3ZlclJlZi5jbG9zZSgpO1xuICAgIH1cblxuICAgIGNvbG9yQ2hhbmdlKGlzRW50ZXI6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jdXN0b21Db2xvciA9IHRoaXMuY3VzdG9tQ29sb3IudG9Mb2NhbGVVcHBlckNhc2UoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbG9yID0gJyMnICsgdGhpcy5jdXN0b21Db2xvcjtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tQ29sb3IubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sb3IgPSAnIycgKyB0aGlzLmN1c3RvbUNvbG9yLnJlcGxhY2UoLyguKS9nLCAnJDEkMScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sb3IubGVuZ3RoID09PSA3ICYmIHRoaXMuc2VsZWN0ZWRDb2xvciAhPT0gdGhpcy5vcHRpb24uc3BlY2lhbENvbG9yKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbG9ycyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5idWlsZENvbG9ycygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VudGVyKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFjdGlvbih0aGlzLnNlbGVjdGVkQ29sb3IpO1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3VzdG9tSW5wdXRDb2xvckVudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnNlbGVjdEFjdGlvbih0aGlzLnNlbGVjdGVkQ29sb3IpO1xuICAgICAgICB0aGlzLnBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29sb3ItY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbG9yc1wiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2Ygc2VsZWN0Q29sb3JzOyBsZXQgcm93SW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLWl0ZW1cIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBfY29sb3Igb2Ygcm93LnJvd1ZhbHVlOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJfY29sb3IuY2xhc3NNYXBzXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIl9zZWxlY3RDb2xvcigkZXZlbnQsIF9jb2xvci52YWx1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtuZ1N0eWxlXT1cInsgYmFja2dyb3VuZDogX2NvbG9yLnZhbHVlIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwiY2hlY2tcIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiByb3cudGlja0NvbG9yIH1cIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIm9wdGlvbi5zaG93Q3VzdG9tXCIgY2xhc3M9XCJzZWxlY3QtY29sb3JcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvclwiIFtuZ1N0eWxlXT1cInsgYmFja2dyb3VuZDogc2VsZWN0ZWRDb2xvciB9XCI+PC9zcGFuPlxuICAgICAgICAjXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdGh5SW5wdXRcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjZcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY3VzdG9tSW5wdXRDb2xvckVudGVyKCRldmVudClcIlxuICAgICAgICAgICAgb25rZXl1cD1cInZhbHVlPXZhbHVlLnJlcGxhY2UoL1teMC05QS1GYS1mXS9nLCcnKVwiXG4gICAgICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VzdG9tQ29sb3JcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY29sb3JDaGFuZ2UoZmFsc2UpXCJcbiAgICAgICAgLz5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,123 @@
1
+ import { Component, Input, ChangeDetectionStrategy, ViewChild } from '@angular/core';
2
+ import { merge, fromEvent, Subject } from 'rxjs';
3
+ import { takeUntil, filter, debounceTime } from 'rxjs/operators';
4
+ import { Range, Editor } from 'slate';
5
+ import { AngularEditor } from 'slate-angular';
6
+ import * as TheQueries from '../../queries';
7
+ import { THE_INLINE_TOOLBAR_TYPES } from '../../constants';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/cdk/overlay";
10
+ import * as i2 from "../toolbar/toolbar.component";
11
+ export class TheInlineToolbarComponent {
12
+ constructor(elementRef, scrollDispatcher, cdr, ngZone) {
13
+ this.elementRef = elementRef;
14
+ this.scrollDispatcher = scrollDispatcher;
15
+ this.cdr = cdr;
16
+ this.ngZone = ngZone;
17
+ this.destroy$ = new Subject();
18
+ }
19
+ ngOnInit() {
20
+ this.scrollDispatcher
21
+ .scrolled()
22
+ .pipe(takeUntil(this.destroy$))
23
+ .subscribe(() => {
24
+ this.updateInlineToolbar();
25
+ this.cdr.detectChanges();
26
+ });
27
+ this.ngZone.runOutsideAngular(() => {
28
+ merge(fromEvent(document, 'mouseup').pipe(filter((e) => e.button !== 2)), fromEvent(document, 'keyup').pipe(filter((e) => !e.shiftKey)))
29
+ .pipe(debounceTime(200), takeUntil(this.destroy$))
30
+ .subscribe(() => {
31
+ var _a;
32
+ this.updateInlineToolbar();
33
+ (_a = this.inlineToolbar) === null || _a === void 0 ? void 0 : _a.statusChange(this.editor);
34
+ this.cdr.detectChanges();
35
+ });
36
+ });
37
+ }
38
+ updateInlineToolbar() {
39
+ const inlineToolbar = this.elementRef.nativeElement.firstElementChild;
40
+ if (!this.editor.selection) {
41
+ inlineToolbar.removeAttribute('style');
42
+ return;
43
+ }
44
+ const anchorBlock = TheQueries.anchorBlock(this.editor);
45
+ if (!inlineToolbar || !anchorBlock) {
46
+ return;
47
+ }
48
+ const { editor } = this;
49
+ const { selection } = editor;
50
+ if (!selection || !AngularEditor.isFocused(editor) || Range.isCollapsed(selection) || Editor.string(editor, selection) === '') {
51
+ inlineToolbar.removeAttribute('style');
52
+ return;
53
+ }
54
+ if (!THE_INLINE_TOOLBAR_TYPES.includes(anchorBlock.type)) {
55
+ return;
56
+ }
57
+ const native = window.getSelection();
58
+ if (native.type !== 'None') {
59
+ const range = native.getRangeAt(0);
60
+ this.updatePosition(inlineToolbar, range);
61
+ }
62
+ }
63
+ updatePosition(toolbarElement, range) {
64
+ let boundary = range.getBoundingClientRect();
65
+ if (!boundary || (boundary.height === 0 && boundary.width === 0 && range.startContainer === range.endContainer)) {
66
+ if (range.startContainer.nodeType === 1 && range.startContainer.querySelector('img')) {
67
+ boundary = range.startContainer.querySelector('img').getBoundingClientRect();
68
+ }
69
+ else {
70
+ boundary = range.startContainer.getBoundingClientRect();
71
+ }
72
+ }
73
+ const toolbarHeight = toolbarElement.offsetHeight;
74
+ const toolbarWidth = toolbarElement.offsetWidth;
75
+ const halfOffsetWidth = toolbarWidth / 2;
76
+ const defaultLeft = -halfOffsetWidth;
77
+ const positions = {};
78
+ positions.top = boundary.top - toolbarHeight;
79
+ positions.left = boundary.left + boundary.width / 2 + defaultLeft;
80
+ positions.right = 'initial';
81
+ ['top', 'left', 'right'].forEach(key => {
82
+ toolbarElement.style[key] = positions[key] + (isNaN(positions[key]) ? '' : 'px');
83
+ });
84
+ toolbarElement.style.opacity = '1';
85
+ }
86
+ ngOnDestroy() {
87
+ this.destroy$.next();
88
+ this.destroy$.complete();
89
+ }
90
+ }
91
+ TheInlineToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: TheInlineToolbarComponent, deps: [{ token: i0.ElementRef }, { token: i1.ScrollDispatcher }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
92
+ TheInlineToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.7", type: TheInlineToolbarComponent, selector: "the-inline-toolbar", inputs: { editor: "editor", toolbarItems: "toolbarItems" }, host: { properties: { "class.hide": "toolbarItems.length === 0" } }, viewQueries: [{ propertyName: "inlineToolbar", first: true, predicate: ["inlineToolbar"], descendants: true }], ngImport: i0, template: `<the-toolbar
93
+ #inlineToolbar
94
+ class="the-inline-toolbar"
95
+ [editor]="editor"
96
+ [toolbarItems]="toolbarItems"
97
+ [isMore]="false"
98
+ ></the-toolbar> `, isInline: true, components: [{ type: i2.TheToolbarComponent, selector: "the-toolbar", inputs: ["editor", "toolbarItems", "align", "isMore", "afterTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: TheInlineToolbarComponent, decorators: [{
100
+ type: Component,
101
+ args: [{
102
+ selector: 'the-inline-toolbar',
103
+ template: `<the-toolbar
104
+ #inlineToolbar
105
+ class="the-inline-toolbar"
106
+ [editor]="editor"
107
+ [toolbarItems]="toolbarItems"
108
+ [isMore]="false"
109
+ ></the-toolbar> `,
110
+ host: {
111
+ '[class.hide]': 'toolbarItems.length === 0'
112
+ },
113
+ changeDetection: ChangeDetectionStrategy.OnPush
114
+ }]
115
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ScrollDispatcher }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; }, propDecorators: { editor: [{
116
+ type: Input
117
+ }], toolbarItems: [{
118
+ type: Input
119
+ }], inlineToolbar: [{
120
+ type: ViewChild,
121
+ args: ['inlineToolbar']
122
+ }] } });
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvaW5saW5lLXRvb2xiYXIvaW5saW5lLXRvb2xiYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBSVQsS0FBSyxFQUdMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFrQjNELE1BQU0sT0FBTyx5QkFBeUI7SUFPbEMsWUFDWSxVQUEyQixFQUMzQixnQkFBa0MsRUFDbEMsR0FBc0IsRUFDdEIsTUFBYztRQUhkLGVBQVUsR0FBVixVQUFVLENBQWlCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQU4xQixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQU90QixDQUFDO0lBRUosUUFBUTtRQUNKLElBQUksQ0FBQyxnQkFBZ0I7YUFDaEIsUUFBUSxFQUFFO2FBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FB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R0FBRyxHQUFHLENBQUM7SUFDdkMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQzs7c0hBN0ZRLHlCQUF5QjswR0FBekIseUJBQXlCLDJTQVp4Qjs7Ozs7O3FCQU1POzJGQU1SLHlCQUF5QjtrQkFkckMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUU7Ozs7OztxQkFNTztvQkFDakIsSUFBSSxFQUFFO3dCQUNGLGNBQWMsRUFBRSwyQkFBMkI7cUJBQzlDO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRDtxTEFFWSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDc0IsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBJbnB1dCxcbiAgICBFbGVtZW50UmVmLFxuICAgIE5nWm9uZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTY3JvbGxEaXNwYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgbWVyZ2UsIGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCBmaWx0ZXIsIGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJhbmdlLCBFZGl0b3IgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yIH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgKiBhcyBUaGVRdWVyaWVzIGZyb20gJy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgVEhFX0lOTElORV9UT09MQkFSX1RZUEVTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFRvb2xiYXJJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUaGVUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vdG9vbGJhci90b29sYmFyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGhlLWlubGluZS10b29sYmFyJyxcbiAgICB0ZW1wbGF0ZTogYDx0aGUtdG9vbGJhclxuICAgICAgICAjaW5saW5lVG9vbGJhclxuICAgICAgICBjbGFzcz1cInRoZS1pbmxpbmUtdG9vbGJhclwiXG4gICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yXCJcbiAgICAgICAgW3Rvb2xiYXJJdGVtc109XCJ0b29sYmFySXRlbXNcIlxuICAgICAgICBbaXNNb3JlXT1cImZhbHNlXCJcbiAgICA+PC90aGUtdG9vbGJhcj4gYCxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MuaGlkZV0nOiAndG9vbGJhckl0ZW1zLmxlbmd0aCA9PT0gMCdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFRoZUlubGluZVRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgZWRpdG9yOiBFZGl0b3I7XG4gICAgQElucHV0KCkgdG9vbGJhckl0ZW1zOiBUb29sYmFySXRlbVtdO1xuICAgIEBWaWV3Q2hpbGQoJ2lubGluZVRvb2xiYXInKSBpbmxpbmVUb29sYmFyOiBUaGVUb29sYmFyQ29tcG9uZW50O1xuXG4gICAgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxhbnk+LFxuICAgICAgICBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXI6IFNjcm9sbERpc3BhdGNoZXIsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJcbiAgICAgICAgICAgIC5zY3JvbGxlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUlubGluZVRvb2xiYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2V1cCcpLnBpcGUoZmlsdGVyKChlOiBNb3VzZUV2ZW50KSA9PiBlLmJ1dHRvbiAhPT0gMikpLFxuICAgICAgICAgICAgICAgIGZyb21FdmVudChkb2N1bWVudCwgJ2tleXVwJykucGlwZShmaWx0ZXIoKGU6IEtleWJvYXJkRXZlbnQpID0+ICFlLnNoaWZ0S2V5KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjAwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUlubGluZVRvb2xiYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVUb29sYmFyPy5zdGF0dXNDaGFuZ2UodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZUlubGluZVRvb2xiYXIoKSB7XG4gICAgICAgIGNvbnN0IGlubGluZVRvb2xiYXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcblxuICAgICAgICBpZiAoIXRoaXMuZWRpdG9yLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgaW5saW5lVG9vbGJhci5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW5jaG9yQmxvY2sgPSBUaGVRdWVyaWVzLmFuY2hvckJsb2NrKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgaWYgKCFpbmxpbmVUb29sYmFyIHx8ICFhbmNob3JCbG9jaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZWRpdG9yIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuXG4gICAgICAgIGlmICghc2VsZWN0aW9uIHx8ICFBbmd1bGFyRWRpdG9yLmlzRm9jdXNlZChlZGl0b3IpIHx8IFJhbmdlLmlzQ29sbGFwc2VkKHNlbGVjdGlvbikgfHwgRWRpdG9yLnN0cmluZyhlZGl0b3IsIHNlbGVjdGlvbikgPT09ICcnKSB7XG4gICAgICAgICAgICBpbmxpbmVUb29sYmFyLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghVEhFX0lOTElORV9UT09MQkFSX1RZUEVTLmluY2x1ZGVzKGFuY2hvckJsb2NrLnR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmF0aXZlID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICBpZiAobmF0aXZlLnR5cGUgIT09ICdOb25lJykge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBuYXRpdmUuZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oaW5saW5lVG9vbGJhciwgcmFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlUG9zaXRpb24odG9vbGJhckVsZW1lbnQsIHJhbmdlKSB7XG4gICAgICAgIGxldCBib3VuZGFyeSA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmICghYm91bmRhcnkgfHwgKGJvdW5kYXJ5LmhlaWdodCA9PT0gMCAmJiBib3VuZGFyeS53aWR0aCA9PT0gMCAmJiByYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyKSkge1xuICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSAxICYmIHJhbmdlLnN0YXJ0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpKSB7XG4gICAgICAgICAgICAgICAgYm91bmRhcnkgPSByYW5nZS5zdGFydENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbWcnKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYm91bmRhcnkgPSByYW5nZS5zdGFydENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b29sYmFySGVpZ2h0ID0gdG9vbGJhckVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCB0b29sYmFyV2lkdGggPSB0b29sYmFyRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3QgaGFsZk9mZnNldFdpZHRoID0gdG9vbGJhcldpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgZGVmYXVsdExlZnQgPSAtaGFsZk9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBwb3NpdGlvbnM6IGFueSA9IHt9O1xuICAgICAgICBwb3NpdGlvbnMudG9wID0gYm91bmRhcnkudG9wIC0gdG9vbGJhckhlaWdodDtcbiAgICAgICAgcG9zaXRpb25zLmxlZnQgPSBib3VuZGFyeS5sZWZ0ICsgYm91bmRhcnkud2lkdGggLyAyICsgZGVmYXVsdExlZnQ7XG4gICAgICAgIHBvc2l0aW9ucy5yaWdodCA9ICdpbml0aWFsJztcblxuICAgICAgICBbJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0J10uZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgdG9vbGJhckVsZW1lbnQuc3R5bGVba2V5XSA9IHBvc2l0aW9uc1trZXldICsgKGlzTmFOKHBvc2l0aW9uc1trZXldKSA/ICcnIDogJ3B4Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0b29sYmFyRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gJzEnO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiJdfQ==