slate-angular 15.1.3 → 16.1.0-next

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 (85) hide show
  1. package/components/block-card/block-card.component.d.ts +3 -3
  2. package/components/children/children.component.d.ts +5 -5
  3. package/components/descendant/descendant.component.d.ts +3 -3
  4. package/components/editable/editable.component.d.ts +5 -5
  5. package/components/element/default-element.component.d.ts +3 -3
  6. package/components/element/element.component.d.ts +3 -3
  7. package/components/leaf/default-leaf.component.d.ts +3 -3
  8. package/components/leaf/leaf.component.d.ts +3 -3
  9. package/components/leaves/leaves.component.d.ts +5 -5
  10. package/components/string/default-string.component.d.ts +3 -3
  11. package/components/string/string.component.d.ts +5 -5
  12. package/components/string/template.component.d.ts +3 -3
  13. package/components/text/default-text.component.d.ts +3 -3
  14. package/components/text/void-text.component.d.ts +3 -3
  15. package/esm2022/components/block-card/block-card.component.mjs +33 -0
  16. package/esm2022/components/children/children.component.mjs +51 -0
  17. package/esm2022/components/descendant/descendant.component.mjs +186 -0
  18. package/esm2022/components/editable/editable.component.mjs +1179 -0
  19. package/esm2022/components/element/default-element.component.mjs +19 -0
  20. package/esm2022/components/element/element.component.mjs +19 -0
  21. package/esm2022/components/leaf/default-leaf.component.mjs +30 -0
  22. package/esm2022/components/leaf/leaf.component.mjs +38 -0
  23. package/esm2022/components/leaves/leaves.component.mjs +70 -0
  24. package/{esm2020 → esm2022}/components/string/default-string.component.mjs +7 -6
  25. package/esm2022/components/string/string.component.mjs +98 -0
  26. package/esm2022/components/string/template.component.mjs +20 -0
  27. package/esm2022/components/text/default-text.component.mjs +22 -0
  28. package/esm2022/components/text/void-text.component.mjs +36 -0
  29. package/esm2022/module.mjs +84 -0
  30. package/{esm2020 → esm2022}/view/base.mjs +13 -13
  31. package/{esm2020 → esm2022}/view/container-item.mjs +4 -4
  32. package/{esm2020 → esm2022}/view/container.mjs +4 -4
  33. package/esm2022/view/context.mjs +2 -0
  34. package/{fesm2020 → fesm2022}/slate-angular.mjs +193 -175
  35. package/fesm2022/slate-angular.mjs.map +1 -0
  36. package/module.d.ts +16 -16
  37. package/package.json +12 -13
  38. package/view/base.d.ts +1 -1
  39. package/view/container-item.d.ts +3 -3
  40. package/view/container.d.ts +1 -1
  41. package/view/context.d.ts +2 -2
  42. package/esm2020/components/block-card/block-card.component.mjs +0 -33
  43. package/esm2020/components/children/children.component.mjs +0 -50
  44. package/esm2020/components/descendant/descendant.component.mjs +0 -185
  45. package/esm2020/components/editable/editable.component.mjs +0 -1179
  46. package/esm2020/components/element/default-element.component.mjs +0 -17
  47. package/esm2020/components/element/element.component.mjs +0 -17
  48. package/esm2020/components/leaf/default-leaf.component.mjs +0 -28
  49. package/esm2020/components/leaf/leaf.component.mjs +0 -37
  50. package/esm2020/components/leaves/leaves.component.mjs +0 -69
  51. package/esm2020/components/string/string.component.mjs +0 -97
  52. package/esm2020/components/string/template.component.mjs +0 -20
  53. package/esm2020/components/text/default-text.component.mjs +0 -20
  54. package/esm2020/components/text/void-text.component.mjs +0 -34
  55. package/esm2020/module.mjs +0 -83
  56. package/esm2020/view/context.mjs +0 -2
  57. package/fesm2015/slate-angular.mjs +0 -3928
  58. package/fesm2015/slate-angular.mjs.map +0 -1
  59. package/fesm2020/slate-angular.mjs.map +0 -1
  60. /package/{esm2020 → esm2022}/components/element/default-element.component.token.mjs +0 -0
  61. /package/{esm2020 → esm2022}/custom-event/BeforeInputEventPlugin.mjs +0 -0
  62. /package/{esm2020 → esm2022}/custom-event/DOMTopLevelEventTypes.mjs +0 -0
  63. /package/{esm2020 → esm2022}/custom-event/FallbackCompositionState.mjs +0 -0
  64. /package/{esm2020 → esm2022}/custom-event/before-input-polyfill.mjs +0 -0
  65. /package/{esm2020 → esm2022}/plugins/angular-editor.mjs +0 -0
  66. /package/{esm2020 → esm2022}/plugins/with-angular.mjs +0 -0
  67. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  68. /package/{esm2020 → esm2022}/slate-angular.mjs +0 -0
  69. /package/{esm2020 → esm2022}/types/error.mjs +0 -0
  70. /package/{esm2020 → esm2022}/types/feature.mjs +0 -0
  71. /package/{esm2020 → esm2022}/types/index.mjs +0 -0
  72. /package/{esm2020 → esm2022}/types/view.mjs +0 -0
  73. /package/{esm2020 → esm2022}/utils/block-card.mjs +0 -0
  74. /package/{esm2020 → esm2022}/utils/dom.mjs +0 -0
  75. /package/{esm2020 → esm2022}/utils/environment.mjs +0 -0
  76. /package/{esm2020 → esm2022}/utils/global-normalize.mjs +0 -0
  77. /package/{esm2020 → esm2022}/utils/hotkeys.mjs +0 -0
  78. /package/{esm2020 → esm2022}/utils/index.mjs +0 -0
  79. /package/{esm2020 → esm2022}/utils/key.mjs +0 -0
  80. /package/{esm2020 → esm2022}/utils/lines.mjs +0 -0
  81. /package/{esm2020 → esm2022}/utils/range-list.mjs +0 -0
  82. /package/{esm2020 → esm2022}/utils/restore-dom.mjs +0 -0
  83. /package/{esm2020 → esm2022}/utils/view.mjs +0 -0
  84. /package/{esm2020 → esm2022}/utils/weak-maps.mjs +0 -0
  85. /package/{esm2020 → esm2022}/view/before-context-change.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  import { ElementRef, OnInit } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- export declare class SlateBlockCardComponent implements OnInit {
3
+ export declare class SlateBlockCard implements OnInit {
4
4
  private elementRef;
5
5
  centerContianer: ElementRef;
6
6
  centerRootNodes: HTMLElement[];
@@ -10,6 +10,6 @@ export declare class SlateBlockCardComponent implements OnInit {
10
10
  ngOnInit(): void;
11
11
  append(): void;
12
12
  initializeCenter(rootNodes: HTMLElement[]): void;
13
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateBlockCardComponent, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateBlockCardComponent, "slate-block-card, [slateBlockCard]", never, {}, {}, never, never, false, never>;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateBlockCard, never>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateBlockCard, "slate-block-card, [slateBlockCard]", never, {}, {}, never, never, true, never>;
15
15
  }
@@ -1,16 +1,16 @@
1
1
  import { OnInit, QueryList } from '@angular/core';
2
- import { SlateDescendantComponent } from '../descendant/descendant.component';
2
+ import { SlateDescendant } from '../descendant/descendant.component';
3
3
  import { Descendant } from 'slate';
4
4
  import { SlateChildrenContext, SlateViewContext } from '../../view/context';
5
5
  import { ViewContainer } from '../../view/container';
6
6
  import * as i0 from "@angular/core";
7
- export declare class SlateChildrenComponent extends ViewContainer<SlateDescendantComponent> implements OnInit {
7
+ export declare class SlateChildren extends ViewContainer<SlateDescendant> implements OnInit {
8
8
  children: Descendant[];
9
9
  context: SlateChildrenContext;
10
10
  viewContext: SlateViewContext;
11
- childrenComponent: QueryList<SlateDescendantComponent>;
11
+ childrenComponent: QueryList<SlateDescendant>;
12
12
  ngOnInit(): void;
13
13
  trackBy: (index: any, node: any) => any;
14
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateChildrenComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateChildrenComponent, "slate-children", never, { "children": "children"; "context": "context"; "viewContext": "viewContext"; }, {}, never, never, false, never>;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateChildren, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateChildren, "slate-children", never, { "children": { "alias": "children"; "required": false; }; "context": { "alias": "context"; "required": false; }; "viewContext": { "alias": "viewContext"; "required": false; }; }, {}, never, never, true, never>;
16
16
  }
@@ -5,7 +5,7 @@ import { SlateChildrenContext, SlateElementContext, SlateTextContext, SlateViewC
5
5
  import { BaseElementComponent, BaseTextComponent } from '../../view/base';
6
6
  import { ComponentType, ViewType } from '../../types/view';
7
7
  import * as i0 from "@angular/core";
8
- export declare class SlateDescendantComponent extends ViewContainerItem<SlateElementContext | SlateTextContext, BaseElementComponent | BaseTextComponent> implements OnInit, OnChanges {
8
+ export declare class SlateDescendant extends ViewContainerItem<SlateElementContext | SlateTextContext, BaseElementComponent | BaseTextComponent> implements OnInit, OnChanges {
9
9
  protected viewContainerRef: ViewContainerRef;
10
10
  defaultElementComponentType: ComponentType<BaseElementComponent>;
11
11
  descendant: Descendant;
@@ -30,6 +30,6 @@ export declare class SlateDescendantComponent extends ViewContainerItem<SlateEle
30
30
  memoizedElementContext(prev: SlateElementContext, next: SlateElementContext): boolean;
31
31
  memoizedTextContext(prev: SlateTextContext, next: SlateTextContext): boolean;
32
32
  memoizedContext(prev: SlateElementContext | SlateTextContext, next: SlateElementContext | SlateTextContext): boolean;
33
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateDescendantComponent, never>;
34
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateDescendantComponent, "slate-descendant", never, { "descendant": "descendant"; "context": "context"; "viewContext": "viewContext"; "index": "index"; }, {}, never, never, false, never>;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateDescendant, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateDescendant, "slate-descendant", never, { "descendant": { "alias": "descendant"; "required": false; }; "context": { "alias": "context"; "required": false; }; "viewContext": { "alias": "viewContext"; "required": false; }; "index": { "alias": "index"; "required": false; }; }, {}, never, never, true, never>;
35
35
  }
@@ -2,12 +2,12 @@ import { OnInit, Renderer2, ElementRef, OnDestroy, ChangeDetectorRef, NgZone, In
2
2
  import { Text as SlateText, Element, Editor, Range, NodeEntry } from 'slate';
3
3
  import { AngularEditor } from '../../plugins/angular-editor';
4
4
  import { DOMElement, DOMNode, DOMRange } from '../../utils/dom';
5
- import { SlateStringTemplateComponent } from '../string/template.component';
5
+ import { SlateStringTemplate } from '../string/template.component';
6
6
  import { SlateChildrenContext, SlateViewContext } from '../../view/context';
7
7
  import { ViewType } from '../../types/view';
8
8
  import { SlatePlaceholder } from '../../types/feature';
9
9
  import * as i0 from "@angular/core";
10
- export declare class SlateEditableComponent implements OnInit, OnChanges, OnDestroy, AfterViewChecked, DoCheck {
10
+ export declare class SlateEditable implements OnInit, OnChanges, OnDestroy, AfterViewChecked, DoCheck {
11
11
  elementRef: ElementRef;
12
12
  renderer2: Renderer2;
13
13
  cdr: ChangeDetectorRef;
@@ -57,7 +57,7 @@ export declare class SlateEditableComponent implements OnInit, OnChanges, OnDest
57
57
  dataSlateNode: string;
58
58
  dataGramm: boolean;
59
59
  get hasBeforeInputSupport(): boolean;
60
- templateComponent: SlateStringTemplateComponent;
60
+ templateComponent: SlateStringTemplate;
61
61
  templateElementRef: ElementRef<any>;
62
62
  constructor(elementRef: ElementRef, renderer2: Renderer2, cdr: ChangeDetectorRef, ngZone: NgZone, injector: Injector);
63
63
  ngOnInit(): void;
@@ -96,8 +96,8 @@ export declare class SlateEditableComponent implements OnInit, OnChanges, OnDest
96
96
  private onFallbackBeforeInput;
97
97
  private isDOMEventHandled;
98
98
  ngOnDestroy(): void;
99
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateEditableComponent, never>;
100
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateEditableComponent, "slate-editable", never, { "editor": "editor"; "renderElement": "renderElement"; "renderLeaf": "renderLeaf"; "renderText": "renderText"; "decorate": "decorate"; "placeholderDecorate": "placeholderDecorate"; "scrollSelectionIntoView": "scrollSelectionIntoView"; "isStrictDecorate": "isStrictDecorate"; "trackBy": "trackBy"; "readonly": "readonly"; "placeholder": "placeholder"; "beforeInput": "beforeInput"; "blur": "blur"; "click": "click"; "compositionEnd": "compositionEnd"; "compositionUpdate": "compositionUpdate"; "compositionStart": "compositionStart"; "copy": "copy"; "cut": "cut"; "dragOver": "dragOver"; "dragStart": "dragStart"; "dragEnd": "dragEnd"; "drop": "drop"; "focus": "focus"; "keydown": "keydown"; "paste": "paste"; "spellCheck": "spellCheck"; "autoCorrect": "autoCorrect"; "autoCapitalize": "autoCapitalize"; }, {}, never, never, false, never>;
99
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateEditable, never>;
100
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateEditable, "slate-editable", never, { "editor": { "alias": "editor"; "required": false; }; "renderElement": { "alias": "renderElement"; "required": false; }; "renderLeaf": { "alias": "renderLeaf"; "required": false; }; "renderText": { "alias": "renderText"; "required": false; }; "decorate": { "alias": "decorate"; "required": false; }; "placeholderDecorate": { "alias": "placeholderDecorate"; "required": false; }; "scrollSelectionIntoView": { "alias": "scrollSelectionIntoView"; "required": false; }; "isStrictDecorate": { "alias": "isStrictDecorate"; "required": false; }; "trackBy": { "alias": "trackBy"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "beforeInput": { "alias": "beforeInput"; "required": false; }; "blur": { "alias": "blur"; "required": false; }; "click": { "alias": "click"; "required": false; }; "compositionEnd": { "alias": "compositionEnd"; "required": false; }; "compositionUpdate": { "alias": "compositionUpdate"; "required": false; }; "compositionStart": { "alias": "compositionStart"; "required": false; }; "copy": { "alias": "copy"; "required": false; }; "cut": { "alias": "cut"; "required": false; }; "dragOver": { "alias": "dragOver"; "required": false; }; "dragStart": { "alias": "dragStart"; "required": false; }; "dragEnd": { "alias": "dragEnd"; "required": false; }; "drop": { "alias": "drop"; "required": false; }; "focus": { "alias": "focus"; "required": false; }; "keydown": { "alias": "keydown"; "required": false; }; "paste": { "alias": "paste"; "required": false; }; "spellCheck": { "alias": "spellCheck"; "required": false; }; "autoCorrect": { "alias": "autoCorrect"; "required": false; }; "autoCapitalize": { "alias": "autoCapitalize"; "required": false; }; }, {}, never, never, true, never>;
101
101
  }
102
102
  export declare const defaultScrollSelectionIntoView: (editor: AngularEditor, domRange: DOMRange) => void;
103
103
  /**
@@ -1,6 +1,6 @@
1
1
  import { BaseElementComponent } from '../../view/base';
2
2
  import * as i0 from "@angular/core";
3
- export declare class SlateDefaultElementComponent extends BaseElementComponent {
4
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateDefaultElementComponent, never>;
5
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateDefaultElementComponent, "div[slateDefaultElement]", never, {}, {}, never, never, false, never>;
3
+ export declare class SlateDefaultElement extends BaseElementComponent {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateDefaultElement, never>;
5
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateDefaultElement, "div[slateDefaultElement]", never, {}, {}, never, never, true, never>;
6
6
  }
@@ -1,6 +1,6 @@
1
1
  import { BaseElementComponent } from '../../view/base';
2
2
  import * as i0 from "@angular/core";
3
- export declare class SlateElementComponent extends BaseElementComponent {
4
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateElementComponent, never>;
5
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateElementComponent, "[slateElement]", never, {}, {}, never, ["*"], false, never>;
3
+ export declare class SlateElement extends BaseElementComponent {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateElement, never>;
5
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateElement, "[slateElement]", never, {}, {}, never, ["*"], true, never>;
6
6
  }
@@ -1,9 +1,9 @@
1
1
  import { OnDestroy } from '@angular/core';
2
2
  import { BaseLeafComponent } from '../../view/base';
3
3
  import * as i0 from "@angular/core";
4
- export declare class SlateDefaultLeafComponent extends BaseLeafComponent implements OnDestroy {
4
+ export declare class SlateDefaultLeaf extends BaseLeafComponent implements OnDestroy {
5
5
  onContextChange(): void;
6
6
  ngOnDestroy(): void;
7
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateDefaultLeafComponent, never>;
8
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateDefaultLeafComponent, "span[slateDefaultLeaf]", never, {}, {}, never, never, false, never>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateDefaultLeaf, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateDefaultLeaf, "span[slateDefaultLeaf]", never, {}, {}, never, never, true, never>;
9
9
  }
@@ -4,13 +4,13 @@ import { SlateLeafContext } from '../../view/context';
4
4
  import { BaseLeafComponent } from '../../view/base';
5
5
  import { ViewType } from '../../types/view';
6
6
  import * as i0 from "@angular/core";
7
- export declare class SlateLeafComponent extends ViewContainerItem<SlateLeafContext, BaseLeafComponent> implements OnInit, OnChanges {
7
+ export declare class SlateLeaf extends ViewContainerItem<SlateLeafContext, BaseLeafComponent> implements OnInit, OnChanges {
8
8
  context: SlateLeafContext;
9
9
  ngOnInit(): void;
10
10
  getContext(): SlateLeafContext;
11
11
  getViewType(): ViewType;
12
12
  memoizedContext(prev: SlateLeafContext, next: SlateLeafContext): boolean;
13
13
  ngOnChanges(simpleChanges: SimpleChanges): void;
14
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateLeafComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateLeafComponent, "slate-leaf", never, { "context": "context"; }, {}, never, never, false, never>;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateLeaf, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateLeaf, "slate-leaf", never, { "context": { "alias": "context"; "required": false; }; }, {}, never, never, true, never>;
16
16
  }
@@ -2,14 +2,14 @@ import { AfterViewInit, OnChanges, OnInit, QueryList, SimpleChanges } from '@ang
2
2
  import { Text } from 'slate';
3
3
  import { SlateLeafContext, SlateTextContext } from '../../view/context';
4
4
  import { ViewContainer } from '../../view/container';
5
- import { SlateLeafComponent } from '../leaf/leaf.component';
5
+ import { SlateLeaf } from '../leaf/leaf.component';
6
6
  import * as i0 from "@angular/core";
7
- export declare class SlateLeavesComponent extends ViewContainer<SlateLeafComponent> implements OnInit, AfterViewInit, OnChanges {
7
+ export declare class SlateLeaves extends ViewContainer<SlateLeaf> implements OnInit, AfterViewInit, OnChanges {
8
8
  initialized: boolean;
9
9
  leafContexts: SlateLeafContext[];
10
10
  leaves: Text[];
11
11
  context: SlateTextContext;
12
- childrenComponent: QueryList<SlateLeafComponent>;
12
+ childrenComponent: QueryList<SlateLeaf>;
13
13
  ngOnInit(): void;
14
14
  getLeafContexts(): {
15
15
  leaf: import("slate").BaseText;
@@ -20,6 +20,6 @@ export declare class SlateLeavesComponent extends ViewContainer<SlateLeafCompone
20
20
  }[];
21
21
  ngOnChanges(simpleChanges: SimpleChanges): void;
22
22
  trackBy(index: any, item: any): any;
23
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateLeavesComponent, never>;
24
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateLeavesComponent, "slate-leaves", never, { "context": "context"; }, {}, never, never, false, never>;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateLeaves, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateLeaves, "slate-leaves", never, { "context": { "alias": "context"; "required": false; }; }, {}, never, never, true, never>;
25
25
  }
@@ -4,7 +4,7 @@ import { BaseComponent } from '../../view/base';
4
4
  import { BeforeContextChange } from '../../view/before-context-change';
5
5
  import { DOMElement } from '../../utils/dom';
6
6
  import * as i0 from "@angular/core";
7
- export declare class SlateDefaultStringComponent extends BaseComponent<SlateStringContext> implements OnInit, BeforeContextChange<SlateStringContext> {
7
+ export declare class SlateDefaultString extends BaseComponent<SlateStringContext> implements OnInit, BeforeContextChange<SlateStringContext> {
8
8
  elementRef: ElementRef<any>;
9
9
  cdr: ChangeDetectorRef;
10
10
  textNode?: Text;
@@ -18,6 +18,6 @@ export declare class SlateDefaultStringComponent extends BaseComponent<SlateStri
18
18
  updateStringDOM(): void;
19
19
  removeStringDOM(): void;
20
20
  ngOnInit(): void;
21
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateDefaultStringComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateDefaultStringComponent, "span[slateDefaultString]", never, {}, {}, never, never, false, never>;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateDefaultString, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateDefaultString, "span[slateDefaultString]", never, {}, {}, never, never, true, never>;
23
23
  }
@@ -1,9 +1,9 @@
1
1
  import { OnInit, OnChanges, ElementRef, ViewContainerRef, AfterViewInit } from '@angular/core';
2
2
  import { ViewContainerItem } from '../../view/container-item';
3
3
  import { SlateLeafContext, SlateStringContext } from '../../view/context';
4
- import { SlateDefaultStringComponent } from './default-string.component';
4
+ import { SlateDefaultString } from './default-string.component';
5
5
  import * as i0 from "@angular/core";
6
- export declare class SlateStringComponent extends ViewContainerItem<SlateStringContext> implements OnInit, OnChanges, AfterViewInit {
6
+ export declare class SlateString extends ViewContainerItem<SlateStringContext> implements OnInit, OnChanges, AfterViewInit {
7
7
  private elementRef;
8
8
  protected viewContainerRef: ViewContainerRef;
9
9
  context: SlateLeafContext;
@@ -15,10 +15,10 @@ export declare class SlateStringComponent extends ViewContainerItem<SlateStringC
15
15
  isEmptyText(): boolean;
16
16
  isCompatibleString(): boolean;
17
17
  isVoid(): boolean;
18
- getViewType(): import("@angular/core").TemplateRef<any> | typeof SlateDefaultStringComponent;
18
+ getViewType(): import("@angular/core").TemplateRef<any> | typeof SlateDefaultString;
19
19
  getType(): SlateStringContext['type'];
20
20
  getContext(): SlateStringContext;
21
21
  memoizedContext(prev: SlateStringContext, next: SlateStringContext): boolean;
22
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateStringComponent, never>;
23
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateStringComponent, "span[slateString]", never, { "context": "context"; }, {}, never, never, false, never>;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateString, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateString, "span[slateString]", never, { "context": { "alias": "context"; "required": false; }; }, {}, never, never, true, never>;
24
24
  }
@@ -1,9 +1,9 @@
1
1
  import { TemplateRef } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- export declare class SlateStringTemplateComponent {
3
+ export declare class SlateStringTemplate {
4
4
  compatibleStringTemplate: TemplateRef<any>;
5
5
  voidStringTemplate: TemplateRef<any>;
6
6
  emptyTextTemplate: TemplateRef<any>;
7
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateStringTemplateComponent, never>;
8
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateStringTemplateComponent, "slate-string-template", never, {}, {}, never, never, false, never>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateStringTemplate, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateStringTemplate, "slate-string-template", never, {}, {}, never, never, true, never>;
9
9
  }
@@ -1,6 +1,6 @@
1
1
  import { BaseTextComponent } from '../../view/base';
2
2
  import * as i0 from "@angular/core";
3
- export declare class SlateDefaultTextComponent extends BaseTextComponent {
4
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateDefaultTextComponent, never>;
5
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateDefaultTextComponent, "span[slateDefaultText]", never, {}, {}, never, never, false, never>;
3
+ export declare class SlateDefaultText extends BaseTextComponent {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateDefaultText, never>;
5
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateDefaultText, "span[slateDefaultText]", never, {}, {}, never, never, true, never>;
6
6
  }
@@ -1,10 +1,10 @@
1
1
  import { OnInit, OnChanges } from '@angular/core';
2
2
  import { BaseTextComponent } from '../../view/base';
3
3
  import * as i0 from "@angular/core";
4
- export declare class SlateVoidTextComponent extends BaseTextComponent implements OnInit, OnChanges {
4
+ export declare class SlateVoidText extends BaseTextComponent implements OnInit, OnChanges {
5
5
  isLeafBlock: boolean;
6
6
  ngOnInit(): void;
7
7
  ngOnChanges(): void;
8
- static ɵfac: i0.ɵɵFactoryDeclaration<SlateVoidTextComponent, never>;
9
- static ɵcmp: i0.ɵɵComponentDeclaration<SlateVoidTextComponent, "span[slateVoidText]", never, {}, {}, never, never, false, never>;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<SlateVoidText, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<SlateVoidText, "span[slateVoidText]", never, {}, {}, never, never, true, never>;
10
10
  }
@@ -0,0 +1,33 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class SlateBlockCard {
4
+ get nativeElement() {
5
+ return this.elementRef.nativeElement;
6
+ }
7
+ get centerContainerElement() {
8
+ return this.centerContianer.nativeElement;
9
+ }
10
+ constructor(elementRef) {
11
+ this.elementRef = elementRef;
12
+ }
13
+ ngOnInit() {
14
+ this.append();
15
+ this.nativeElement.classList.add(`slate-block-card`);
16
+ }
17
+ append() {
18
+ this.centerRootNodes.forEach(rootNode => !this.centerContainerElement.contains(rootNode) && this.centerContainerElement.appendChild(rootNode));
19
+ }
20
+ initializeCenter(rootNodes) {
21
+ this.centerRootNodes = rootNodes;
22
+ }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SlateBlockCard, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SlateBlockCard, isStandalone: true, selector: "slate-block-card, [slateBlockCard]", viewQueries: [{ propertyName: "centerContianer", first: true, predicate: ["centerContianer"], descendants: true, static: true }], ngImport: i0, template: "<span card-target=\"card-left\" class=\"card-left\">{{ '\\uFEFF' }}</span>\n<div card-target=\"card-center\" #centerContianer></div>\n<span card-target=\"card-right\" class=\"card-right\">{{ '\\uFEFF' }}</span>\n" }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SlateBlockCard, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'slate-block-card, [slateBlockCard]', standalone: true, template: "<span card-target=\"card-left\" class=\"card-left\">{{ '\\uFEFF' }}</span>\n<div card-target=\"card-center\" #centerContianer></div>\n<span card-target=\"card-right\" class=\"card-right\">{{ '\\uFEFF' }}</span>\n" }]
29
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { centerContianer: [{
30
+ type: ViewChild,
31
+ args: ['centerContianer', { static: true }]
32
+ }] } });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9ibG9jay1jYXJkL2Jsb2NrLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvYmxvY2stY2FyZC9ibG9jay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPekUsTUFBTSxPQUFPLGNBQWM7SUFNdkIsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQTRCLENBQUM7SUFDN0QsQ0FBQztJQUVELFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFBRyxDQUFDO0lBRTlDLFFBQVE7UUFDSixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUN4QixRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUNuSCxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQXdCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLENBQUM7OEdBN0JRLGNBQWM7a0dBQWQsY0FBYyxnT0NQM0Isc05BR0E7OzJGRElhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0ksb0NBQW9DLGNBRWxDLElBQUk7aUdBSWhCLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2xhdGUtYmxvY2stY2FyZCwgW3NsYXRlQmxvY2tDYXJkXScsXG4gICAgdGVtcGxhdGVVcmw6ICdibG9jay1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFNsYXRlQmxvY2tDYXJkIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKCdjZW50ZXJDb250aWFuZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGNlbnRlckNvbnRpYW5lcjogRWxlbWVudFJlZjtcblxuICAgIGNlbnRlclJvb3ROb2RlczogSFRNTEVsZW1lbnRbXTtcblxuICAgIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGNlbnRlckNvbnRhaW5lckVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNlbnRlckNvbnRpYW5lci5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmFwcGVuZCgpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgc2xhdGUtYmxvY2stY2FyZGApO1xuICAgIH1cblxuICAgIGFwcGVuZCgpIHtcbiAgICAgICAgdGhpcy5jZW50ZXJSb290Tm9kZXMuZm9yRWFjaChcbiAgICAgICAgICAgIHJvb3ROb2RlID0+ICF0aGlzLmNlbnRlckNvbnRhaW5lckVsZW1lbnQuY29udGFpbnMocm9vdE5vZGUpICYmIHRoaXMuY2VudGVyQ29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChyb290Tm9kZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplQ2VudGVyKHJvb3ROb2RlczogSFRNTEVsZW1lbnRbXSkge1xuICAgICAgICB0aGlzLmNlbnRlclJvb3ROb2RlcyA9IHJvb3ROb2RlcztcbiAgICB9XG59XG4iLCI8c3BhbiBjYXJkLXRhcmdldD1cImNhcmQtbGVmdFwiIGNsYXNzPVwiY2FyZC1sZWZ0XCI+e3sgJ1xcdUZFRkYnIH19PC9zcGFuPlxuPGRpdiBjYXJkLXRhcmdldD1cImNhcmQtY2VudGVyXCIgI2NlbnRlckNvbnRpYW5lcj48L2Rpdj5cbjxzcGFuIGNhcmQtdGFyZ2V0PVwiY2FyZC1yaWdodFwiIGNsYXNzPVwiY2FyZC1yaWdodFwiPnt7ICdcXHVGRUZGJyB9fTwvc3Bhbj5cbiJdfQ==
@@ -0,0 +1,51 @@
1
+ import { ChangeDetectionStrategy, Component, Input, ViewChildren } from '@angular/core';
2
+ import { SlateDescendant } from '../descendant/descendant.component';
3
+ import { AngularEditor } from '../../plugins/angular-editor';
4
+ import { ViewContainer } from '../../view/container';
5
+ import { NgFor } from '@angular/common';
6
+ import * as i0 from "@angular/core";
7
+ export class SlateChildren extends ViewContainer {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.trackBy = (index, node) => {
11
+ return this.viewContext.trackBy(node) || AngularEditor.findKey(this.viewContext.editor, node);
12
+ };
13
+ }
14
+ ngOnInit() { }
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SlateChildren, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
16
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SlateChildren, isStandalone: true, selector: "slate-children", inputs: { children: "children", context: "context", viewContext: "viewContext" }, viewQueries: [{ propertyName: "childrenComponent", predicate: SlateDescendant, descendants: true, read: SlateDescendant }], usesInheritance: true, ngImport: i0, template: `<slate-descendant
17
+ [descendant]="descendant"
18
+ [context]="context"
19
+ [viewContext]="viewContext"
20
+ [viewContext]="viewContext"
21
+ [index]="index"
22
+ *ngFor="let descendant of children; let index = index; trackBy: trackBy"
23
+ ></slate-descendant>`, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: SlateDescendant, selector: "slate-descendant", inputs: ["descendant", "context", "viewContext", "index"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SlateChildren, decorators: [{
26
+ type: Component,
27
+ args: [{
28
+ selector: 'slate-children',
29
+ template: `<slate-descendant
30
+ [descendant]="descendant"
31
+ [context]="context"
32
+ [viewContext]="viewContext"
33
+ [viewContext]="viewContext"
34
+ [index]="index"
35
+ *ngFor="let descendant of children; let index = index; trackBy: trackBy"
36
+ ></slate-descendant>`,
37
+ changeDetection: ChangeDetectionStrategy.OnPush,
38
+ standalone: true,
39
+ imports: [NgFor, SlateDescendant]
40
+ }]
41
+ }], propDecorators: { children: [{
42
+ type: Input
43
+ }], context: [{
44
+ type: Input
45
+ }], viewContext: [{
46
+ type: Input
47
+ }], childrenComponent: [{
48
+ type: ViewChildren,
49
+ args: [SlateDescendant, { read: SlateDescendant }]
50
+ }] } });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGRyZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY2hpbGRyZW4vY2hpbGRyZW4uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWdCeEMsTUFBTSxPQUFPLGFBQWMsU0FBUSxhQUE4QjtJQWRqRTs7UUEwQkksWUFBTyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRyxDQUFDLENBQUM7S0FDTDtJQUxHLFFBQVEsS0FBSSxDQUFDOzhHQVZKLGFBQWE7a0dBQWIsYUFBYSxrTUFPUixlQUFlLDJCQUFVLGVBQWUsb0RBbkI1Qzs7Ozs7Ozt5QkFPVyw0REFHWCxLQUFLLG1IQUFFLGVBQWU7OzJGQUV2QixhQUFhO2tCQWR6QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozt5QkFPVztvQkFDckIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDO2lCQUNwQzs4QkFFWSxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdOLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNsYXRlRGVzY2VuZGFudCB9IGZyb20gJy4uL2Rlc2NlbmRhbnQvZGVzY2VuZGFudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVzY2VuZGFudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IgfSBmcm9tICcuLi8uLi9wbHVnaW5zL2FuZ3VsYXItZWRpdG9yJztcbmltcG9ydCB7IFNsYXRlQ2hpbGRyZW5Db250ZXh0LCBTbGF0ZVZpZXdDb250ZXh0IH0gZnJvbSAnLi4vLi4vdmlldy9jb250ZXh0JztcbmltcG9ydCB7IFZpZXdDb250YWluZXIgfSBmcm9tICcuLi8uLi92aWV3L2NvbnRhaW5lcic7XG5pbXBvcnQgeyBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2xhdGUtY2hpbGRyZW4nLFxuICAgIHRlbXBsYXRlOiBgPHNsYXRlLWRlc2NlbmRhbnRcbiAgICAgICAgW2Rlc2NlbmRhbnRdPVwiZGVzY2VuZGFudFwiXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgICAgICBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIlxuICAgICAgICBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIlxuICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgZGVzY2VuZGFudCBvZiBjaGlsZHJlbjsgbGV0IGluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIlxuICAgID48L3NsYXRlLWRlc2NlbmRhbnQ+YCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0ZvciwgU2xhdGVEZXNjZW5kYW50XVxufSlcbmV4cG9ydCBjbGFzcyBTbGF0ZUNoaWxkcmVuIGV4dGVuZHMgVmlld0NvbnRhaW5lcjxTbGF0ZURlc2NlbmRhbnQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBjaGlsZHJlbjogRGVzY2VuZGFudFtdO1xuXG4gICAgQElucHV0KCkgY29udGV4dDogU2xhdGVDaGlsZHJlbkNvbnRleHQ7XG5cbiAgICBASW5wdXQoKSB2aWV3Q29udGV4dDogU2xhdGVWaWV3Q29udGV4dDtcblxuICAgIEBWaWV3Q2hpbGRyZW4oU2xhdGVEZXNjZW5kYW50LCB7IHJlYWQ6IFNsYXRlRGVzY2VuZGFudCB9KVxuICAgIGNoaWxkcmVuQ29tcG9uZW50OiBRdWVyeUxpc3Q8U2xhdGVEZXNjZW5kYW50PjtcblxuICAgIG5nT25Jbml0KCkge31cblxuICAgIHRyYWNrQnkgPSAoaW5kZXgsIG5vZGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQudHJhY2tCeShub2RlKSB8fCBBbmd1bGFyRWRpdG9yLmZpbmRLZXkodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIG5vZGUpO1xuICAgIH07XG59XG4iXX0=
@@ -0,0 +1,186 @@
1
+ import { ChangeDetectionStrategy, Component, Inject, Input } from '@angular/core';
2
+ import { SlateBlockCard } from '../block-card/block-card.component';
3
+ import { ViewContainerItem } from '../../view/container-item';
4
+ import { Editor, Range, Element } from 'slate';
5
+ import { AngularEditor } from '../../plugins/angular-editor';
6
+ import { NODE_TO_INDEX, NODE_TO_PARENT } from '../../utils/weak-maps';
7
+ import { SlateDefaultText } from '../text/default-text.component';
8
+ import { SlateVoidText } from '../text/void-text.component';
9
+ import { isDecoratorRangeListEqual } from '../../utils';
10
+ import { SlateErrorCode } from '../../types';
11
+ import { SLATE_DEFAULT_ELEMENT_COMPONENT_TOKEN } from '../element/default-element.component.token';
12
+ import * as i0 from "@angular/core";
13
+ export class SlateDescendant extends ViewContainerItem {
14
+ get rootNodes() {
15
+ if (this.blockCardComponentRef) {
16
+ return [this.blockCardComponentRef.instance.nativeElement];
17
+ }
18
+ return super.getRootNodes();
19
+ }
20
+ get isBlockCard() {
21
+ return this.viewContext.editor.isBlockCard(this.descendant);
22
+ }
23
+ constructor(viewContainerRef, defaultElementComponentType) {
24
+ super(viewContainerRef);
25
+ this.viewContainerRef = viewContainerRef;
26
+ this.defaultElementComponentType = defaultElementComponentType;
27
+ }
28
+ ngOnInit() {
29
+ NODE_TO_INDEX.set(this.descendant, this.index);
30
+ NODE_TO_PARENT.set(this.descendant, this.context.parent);
31
+ this.createView();
32
+ if (this.isBlockCard) {
33
+ this.createBlockCard();
34
+ }
35
+ }
36
+ destroyView() {
37
+ super.destroyView();
38
+ this.destroyBlockCard();
39
+ }
40
+ ngOnChanges() {
41
+ if (!this.initialized) {
42
+ return;
43
+ }
44
+ NODE_TO_INDEX.set(this.descendant, this.index);
45
+ NODE_TO_PARENT.set(this.descendant, this.context.parent);
46
+ this.updateView();
47
+ if (this.isBlockCard) {
48
+ this.updateBlockCard();
49
+ }
50
+ }
51
+ destroyBlockCard() {
52
+ if (this.blockCardComponentRef) {
53
+ this.blockCardComponentRef.destroy();
54
+ this.blockCardComponentRef = null;
55
+ }
56
+ }
57
+ createBlockCard() {
58
+ const rootNodes = this.rootNodes;
59
+ this.blockCardComponentRef = this.viewContainerRef.createComponent(SlateBlockCard);
60
+ this.blockCardComponentRef.instance.initializeCenter(rootNodes);
61
+ }
62
+ updateBlockCard() {
63
+ if (this.blockCardComponentRef) {
64
+ return;
65
+ }
66
+ const rootNodes = this.rootNodes;
67
+ this.createBlockCard();
68
+ const firstRootNode = rootNodes[0];
69
+ firstRootNode.replaceWith(this.blockCardComponentRef.instance.nativeElement);
70
+ }
71
+ getCommonContext() {
72
+ const path = AngularEditor.findPath(this.viewContext.editor, this.context.parent);
73
+ const p = path.concat(this.index);
74
+ try {
75
+ const range = Editor.range(this.viewContext.editor, p);
76
+ const sel = this.context.selection && Range.intersection(range, this.context.selection);
77
+ const ds = this.context.decorate([this.descendant, p]);
78
+ for (const dec of this.context.decorations) {
79
+ const d = Range.intersection(dec, range);
80
+ if (d) {
81
+ ds.push(d);
82
+ }
83
+ }
84
+ return { selection: sel, decorations: ds };
85
+ }
86
+ catch (error) {
87
+ this.viewContext.editor.onError({
88
+ code: SlateErrorCode.GetStartPointError,
89
+ nativeError: error
90
+ });
91
+ return { selection: null, decorations: [] };
92
+ }
93
+ }
94
+ getContext() {
95
+ if (Element.isElement(this.descendant)) {
96
+ const computedContext = this.getCommonContext();
97
+ const key = AngularEditor.findKey(this.viewContext.editor, this.descendant);
98
+ const isInline = this.viewContext.editor.isInline(this.descendant);
99
+ const isVoid = this.viewContext.editor.isVoid(this.descendant);
100
+ const elementContext = {
101
+ element: this.descendant,
102
+ ...computedContext,
103
+ attributes: {
104
+ 'data-slate-node': 'element',
105
+ 'data-slate-key': key.id
106
+ },
107
+ decorate: this.context.decorate,
108
+ readonly: this.context.readonly
109
+ };
110
+ if (isInline) {
111
+ elementContext.attributes['data-slate-inline'] = true;
112
+ }
113
+ if (isVoid) {
114
+ elementContext.attributes['data-slate-void'] = true;
115
+ elementContext.attributes.contenteditable = false;
116
+ }
117
+ return elementContext;
118
+ }
119
+ else {
120
+ const computedContext = this.getCommonContext();
121
+ const isLeafBlock = AngularEditor.isLeafBlock(this.viewContext.editor, this.context.parent);
122
+ const textContext = {
123
+ decorations: computedContext.decorations,
124
+ isLast: isLeafBlock && this.index === this.context.parent.children.length - 1,
125
+ parent: this.context.parent,
126
+ text: this.descendant
127
+ };
128
+ return textContext;
129
+ }
130
+ }
131
+ getViewType() {
132
+ if (Element.isElement(this.descendant)) {
133
+ return (this.viewContext.renderElement && this.viewContext.renderElement(this.descendant)) || this.defaultElementComponentType;
134
+ }
135
+ else {
136
+ const isVoid = this.viewContext.editor.isVoid(this.context.parent);
137
+ return isVoid
138
+ ? SlateVoidText
139
+ : (this.viewContext.renderText && this.viewContext.renderText(this.descendant)) || SlateDefaultText;
140
+ }
141
+ }
142
+ memoizedElementContext(prev, next) {
143
+ return (prev.element === next.element &&
144
+ (!this.viewContext.isStrictDecorate || prev.decorate === next.decorate) &&
145
+ prev.readonly === next.readonly &&
146
+ isDecoratorRangeListEqual(prev.decorations, next.decorations) &&
147
+ (prev.selection === next.selection || (!!prev.selection && !!next.selection && Range.equals(prev.selection, next.selection))));
148
+ }
149
+ memoizedTextContext(prev, next) {
150
+ return (next.parent === prev.parent &&
151
+ next.isLast === prev.isLast &&
152
+ next.text === prev.text &&
153
+ isDecoratorRangeListEqual(next.decorations, prev.decorations));
154
+ }
155
+ memoizedContext(prev, next) {
156
+ if (Element.isElement(this.descendant)) {
157
+ return this.memoizedElementContext(prev, next);
158
+ }
159
+ else {
160
+ return this.memoizedTextContext(prev, next);
161
+ }
162
+ }
163
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SlateDescendant, deps: [{ token: i0.ViewContainerRef }, { token: SLATE_DEFAULT_ELEMENT_COMPONENT_TOKEN }], target: i0.ɵɵFactoryTarget.Component }); }
164
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SlateDescendant, isStandalone: true, selector: "slate-descendant", inputs: { descendant: "descendant", context: "context", viewContext: "viewContext", index: "index" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
165
+ }
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SlateDescendant, decorators: [{
167
+ type: Component,
168
+ args: [{
169
+ selector: 'slate-descendant',
170
+ template: '',
171
+ changeDetection: ChangeDetectionStrategy.OnPush,
172
+ standalone: true
173
+ }]
174
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: undefined, decorators: [{
175
+ type: Inject,
176
+ args: [SLATE_DEFAULT_ELEMENT_COMPONENT_TOKEN]
177
+ }] }]; }, propDecorators: { descendant: [{
178
+ type: Input
179
+ }], context: [{
180
+ type: Input
181
+ }], viewContext: [{
182
+ type: Input
183
+ }], index: [{
184
+ type: Input
185
+ }] } });
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY2VuZGFudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9kZXNjZW5kYW50L2Rlc2NlbmRhbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUUzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBUW5HLE1BQU0sT0FBTyxlQUNULFNBQVEsaUJBQW1HO0lBVzNHLElBQUksU0FBUztRQUNULElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsT0FBTyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDaEMsQ0FB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OzBCQTBCUSxNQUFNOzJCQUFDLHFDQUFxQzs0Q0FyQnhDLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNsYXRlQmxvY2tDYXJkIH0gZnJvbSAnLi4vYmxvY2stY2FyZC9ibG9jay1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWaWV3Q29udGFpbmVySXRlbSB9IGZyb20gJy4uLy4uL3ZpZXcvY29udGFpbmVyLWl0ZW0nO1xuaW1wb3J0IHsgRGVzY2VuZGFudCwgRWRpdG9yLCBSYW5nZSwgRWxlbWVudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IFNsYXRlQ2hpbGRyZW5Db250ZXh0LCBTbGF0ZUVsZW1lbnRDb250ZXh0LCBTbGF0ZVRleHRDb250ZXh0LCBTbGF0ZVZpZXdDb250ZXh0IH0gZnJvbSAnLi4vLi4vdmlldy9jb250ZXh0JztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IgfSBmcm9tICcuLi8uLi9wbHVnaW5zL2FuZ3VsYXItZWRpdG9yJztcbmltcG9ydCB7IE5PREVfVE9fSU5ERVgsIE5PREVfVE9fUEFSRU5UIH0gZnJvbSAnLi4vLi4vdXRpbHMvd2Vhay1tYXBzJztcbmltcG9ydCB7IEJhc2VFbGVtZW50Q29tcG9uZW50LCBCYXNlVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ZpZXcvYmFzZSc7XG5pbXBvcnQgeyBTbGF0ZURlZmF1bHRUZXh0IH0gZnJvbSAnLi4vdGV4dC9kZWZhdWx0LXRleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlVm9pZFRleHQgfSBmcm9tICcuLi90ZXh0L3ZvaWQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMvdmlldyc7XG5pbXBvcnQgeyBTbGF0ZUVycm9yQ29kZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IFNMQVRFX0RFRkFVTFRfRUxFTUVOVF9DT01QT05FTlRfVE9LRU4gfSBmcm9tICcuLi9lbGVtZW50L2RlZmF1bHQtZWxlbWVudC5jb21wb25lbnQudG9rZW4nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NsYXRlLWRlc2NlbmRhbnQnLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFNsYXRlRGVzY2VuZGFudFxuICAgIGV4dGVuZHMgVmlld0NvbnRhaW5lckl0ZW08U2xhdGVFbGVtZW50Q29udGV4dCB8IFNsYXRlVGV4dENvbnRleHQsIEJhc2VFbGVtZW50Q29tcG9uZW50IHwgQmFzZVRleHRDb21wb25lbnQ+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlc1xue1xuICAgIEBJbnB1dCgpIGRlc2NlbmRhbnQ6IERlc2NlbmRhbnQ7XG5cbiAgICBASW5wdXQoKSBjb250ZXh0OiBTbGF0ZUNoaWxkcmVuQ29udGV4dDtcblxuICAgIEBJbnB1dCgpIHZpZXdDb250ZXh0OiBTbGF0ZVZpZXdDb250ZXh0O1xuXG4gICAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcblxuICAgIGdldCByb290Tm9kZXMoKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgICAgIGlmICh0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5uYXRpdmVFbGVtZW50XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0Um9vdE5vZGVzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzQmxvY2tDYXJkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dC5lZGl0b3IuaXNCbG9ja0NhcmQodGhpcy5kZXNjZW5kYW50KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIEBJbmplY3QoU0xBVEVfREVGQVVMVF9FTEVNRU5UX0NPTVBPTkVOVF9UT0tFTilcbiAgICAgICAgcHVibGljIGRlZmF1bHRFbGVtZW50Q29tcG9uZW50VHlwZTogQ29tcG9uZW50VHlwZTxCYXNlRWxlbWVudENvbXBvbmVudD5cbiAgICApIHtcbiAgICAgICAgc3VwZXIodmlld0NvbnRhaW5lclJlZik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZGVzY2VuZGFudCwgdGhpcy5pbmRleCk7XG4gICAgICAgIE5PREVfVE9fUEFSRU5ULnNldCh0aGlzLmRlc2NlbmRhbnQsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNCbG9ja0NhcmQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvY2tDYXJkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95VmlldygpIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveVZpZXcoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2tDYXJkKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZGVzY2VuZGFudCwgdGhpcy5pbmRleCk7XG4gICAgICAgIE5PREVfVE9fUEFSRU5ULnNldCh0aGlzLmRlc2NlbmRhbnQsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNCbG9ja0NhcmQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmxvY2tDYXJkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95QmxvY2tDYXJkKCkge1xuICAgICAgICBpZiAodGhpcy5ibG9ja0NhcmRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUJsb2NrQ2FyZCgpIHtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzID0gdGhpcy5yb290Tm9kZXM7XG4gICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxTbGF0ZUJsb2NrQ2FyZD4oU2xhdGVCbG9ja0NhcmQpO1xuICAgICAgICB0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5pbml0aWFsaXplQ2VudGVyKHJvb3ROb2Rlcyk7XG4gICAgfVxuXG4gICAgdXBkYXRlQmxvY2tDYXJkKCkge1xuICAgICAgICBpZiAodGhpcy5ibG9ja0NhcmRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290Tm9kZXMgPSB0aGlzLnJvb3ROb2RlcztcbiAgICAgICAgdGhpcy5jcmVhdGVCbG9ja0NhcmQoKTtcbiAgICAgICAgY29uc3QgZmlyc3RSb290Tm9kZSA9IHJvb3ROb2Rlc1swXTtcbiAgICAgICAgZmlyc3RSb290Tm9kZS5yZXBsYWNlV2l0aCh0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBnZXRDb21tb25Db250ZXh0KCk6IHsgc2VsZWN0aW9uOiBSYW5nZTsgZGVjb3JhdGlvbnM6IFJhbmdlW10gfSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKHRoaXMudmlld0NvbnRleHQuZWRpdG9yLCB0aGlzLmNvbnRleHQucGFyZW50KTtcbiAgICAgICAgY29uc3QgcCA9IHBhdGguY29uY2F0KHRoaXMuaW5kZXgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBFZGl0b3IucmFuZ2UodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIHApO1xuICAgICAgICAgICAgY29uc3Qgc2VsID0gdGhpcy5jb250ZXh0LnNlbGVjdGlvbiAmJiBSYW5nZS5pbnRlcnNlY3Rpb24ocmFuZ2UsIHRoaXMuY29udGV4dC5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgZHMgPSB0aGlzLmNvbnRleHQuZGVjb3JhdGUoW3RoaXMuZGVzY2VuZGFudCwgcF0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZWMgb2YgdGhpcy5jb250ZXh0LmRlY29yYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IFJhbmdlLmludGVyc2VjdGlvbihkZWMsIHJhbmdlKTtcbiAgICAgICAgICAgICAgICBpZiAoZCkge1xuICAgICAgICAgICAgICAgICAgICBkcy5wdXNoKGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHNlbGVjdGlvbjogc2VsLCBkZWNvcmF0aW9uczogZHMgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHQuZWRpdG9yLm9uRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvZGU6IFNsYXRlRXJyb3JDb2RlLkdldFN0YXJ0UG9pbnRFcnJvcixcbiAgICAgICAgICAgICAgICBuYXRpdmVFcnJvcjogZXJyb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uOiBudWxsLCBkZWNvcmF0aW9uczogW10gfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbnRleHQoKTogU2xhdGVFbGVtZW50Q29udGV4dCB8IFNsYXRlVGV4dENvbnRleHQge1xuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQodGhpcy5kZXNjZW5kYW50KSkge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRDb250ZXh0ID0gdGhpcy5nZXRDb21tb25Db250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBBbmd1bGFyRWRpdG9yLmZpbmRLZXkodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIHRoaXMuZGVzY2VuZGFudCk7XG4gICAgICAgICAgICBjb25zdCBpc0lubGluZSA9IHRoaXMudmlld0NvbnRleHQuZWRpdG9yLmlzSW5saW5lKHRoaXMuZGVzY2VuZGFudCk7XG4gICAgICAgICAgICBjb25zdCBpc1ZvaWQgPSB0aGlzLnZpZXdDb250ZXh0LmVkaXRvci5pc1ZvaWQodGhpcy5kZXNjZW5kYW50KTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRDb250ZXh0OiBTbGF0ZUVsZW1lbnRDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZGVzY2VuZGFudCxcbiAgICAgICAgICAgICAgICAuLi5jb21wdXRlZENvbnRleHQsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAnZGF0YS1zbGF0ZS1ub2RlJzogJ2VsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnZGF0YS1zbGF0ZS1rZXknOiBrZXkuaWRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRlY29yYXRlOiB0aGlzLmNvbnRleHQuZGVjb3JhdGUsXG4gICAgICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMuY29udGV4dC5yZWFkb25seVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpc0lubGluZSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250ZXh0LmF0dHJpYnV0ZXNbJ2RhdGEtc2xhdGUtaW5saW5lJ10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVm9pZCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250ZXh0LmF0dHJpYnV0ZXNbJ2RhdGEtc2xhdGUtdm9pZCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dC5hdHRyaWJ1dGVzLmNvbnRlbnRlZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRDb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRDb250ZXh0ID0gdGhpcy5nZXRDb21tb25Db250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBpc0xlYWZCbG9jayA9IEFuZ3VsYXJFZGl0b3IuaXNMZWFmQmxvY2sodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dENvbnRleHQ6IFNsYXRlVGV4dENvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgZGVjb3JhdGlvbnM6IGNvbXB1dGVkQ29udGV4dC5kZWNvcmF0aW9ucyxcbiAgICAgICAgICAgICAgICBpc0xhc3Q6IGlzTGVhZkJsb2NrICYmIHRoaXMuaW5kZXggPT09IHRoaXMuY29udGV4dC5wYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXMuY29udGV4dC5wYXJlbnQgYXMgRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmRlc2NlbmRhbnRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdGV4dENvbnRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRWaWV3VHlwZSgpOiBWaWV3VHlwZSB7XG4gICAgICAgIGlmIChFbGVtZW50LmlzRWxlbWVudCh0aGlzLmRlc2NlbmRhbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMudmlld0NvbnRleHQucmVuZGVyRWxlbWVudCAmJiB0aGlzLnZpZXdDb250ZXh0LnJlbmRlckVsZW1lbnQodGhpcy5kZXNjZW5kYW50KSkgfHwgdGhpcy5kZWZhdWx0RWxlbWVudENvbXBvbmVudFR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc1ZvaWQgPSB0aGlzLnZpZXdDb250ZXh0LmVkaXRvci5pc1ZvaWQodGhpcy5jb250ZXh0LnBhcmVudCBhcyBFbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBpc1ZvaWRcbiAgICAgICAgICAgICAgICA/IFNsYXRlVm9pZFRleHRcbiAgICAgICAgICAgICAgICA6ICh0aGlzLnZpZXdDb250ZXh0LnJlbmRlclRleHQgJiYgdGhpcy52aWV3Q29udGV4dC5yZW5kZXJUZXh0KHRoaXMuZGVzY2VuZGFudCkpIHx8IFNsYXRlRGVmYXVsdFRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vaXplZEVsZW1lbnRDb250ZXh0KHByZXY6IFNsYXRlRWxlbWVudENvbnRleHQsIG5leHQ6IFNsYXRlRWxlbWVudENvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHByZXYuZWxlbWVudCA9PT0gbmV4dC5lbGVtZW50ICYmXG4gICAgICAgICAgICAoIXRoaXMudmlld0NvbnRleHQuaXNTdHJpY3REZWNvcmF0ZSB8fCBwcmV2LmRlY29yYXRlID09PSBuZXh0LmRlY29yYXRlKSAmJlxuICAgICAgICAgICAgcHJldi5yZWFkb25seSA9PT0gbmV4dC5yZWFkb25seSAmJlxuICAgICAgICAgICAgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbChwcmV2LmRlY29yYXRpb25zLCBuZXh0LmRlY29yYXRpb25zKSAmJlxuICAgICAgICAgICAgKHByZXYuc2VsZWN0aW9uID09PSBuZXh0LnNlbGVjdGlvbiB8fCAoISFwcmV2LnNlbGVjdGlvbiAmJiAhIW5leHQuc2VsZWN0aW9uICYmIFJhbmdlLmVxdWFscyhwcmV2LnNlbGVjdGlvbiwgbmV4dC5zZWxlY3Rpb24pKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBtZW1vaXplZFRleHRDb250ZXh0KHByZXY6IFNsYXRlVGV4dENvbnRleHQsIG5leHQ6IFNsYXRlVGV4dENvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG5leHQucGFyZW50ID09PSBwcmV2LnBhcmVudCAmJlxuICAgICAgICAgICAgbmV4dC5pc0xhc3QgPT09IHByZXYuaXNMYXN0ICYmXG4gICAgICAgICAgICBuZXh0LnRleHQgPT09IHByZXYudGV4dCAmJlxuICAgICAgICAgICAgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbChuZXh0LmRlY29yYXRpb25zLCBwcmV2LmRlY29yYXRpb25zKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG1lbW9pemVkQ29udGV4dChwcmV2OiBTbGF0ZUVsZW1lbnRDb250ZXh0IHwgU2xhdGVUZXh0Q29udGV4dCwgbmV4dDogU2xhdGVFbGVtZW50Q29udGV4dCB8IFNsYXRlVGV4dENvbnRleHQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKEVsZW1lbnQuaXNFbGVtZW50KHRoaXMuZGVzY2VuZGFudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbW9pemVkRWxlbWVudENvbnRleHQocHJldiBhcyBTbGF0ZUVsZW1lbnRDb250ZXh0LCBuZXh0IGFzIFNsYXRlRWxlbWVudENvbnRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVtb2l6ZWRUZXh0Q29udGV4dChwcmV2IGFzIFNsYXRlVGV4dENvbnRleHQsIG5leHQgYXMgU2xhdGVUZXh0Q29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=