slate-angular 16.1.0-next.9 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/components/children/children.component.d.ts +6 -1
  2. package/components/descendant/descendant.component.d.ts +35 -0
  3. package/components/editable/editable.component.d.ts +5 -15
  4. package/components/leaf/leaf.component.d.ts +16 -0
  5. package/components/leaves/leaves.component.d.ts +14 -1
  6. package/components/string/default-string.component.d.ts +1 -1
  7. package/components/string/string.component.d.ts +0 -8
  8. package/esm2022/components/block-card/block-card.component.mjs +6 -6
  9. package/esm2022/components/children/children.component.mjs +35 -7
  10. package/esm2022/components/descendant/descendant.component.mjs +186 -0
  11. package/esm2022/components/editable/editable.component.mjs +40 -131
  12. package/esm2022/components/element/default-element.component.mjs +5 -5
  13. package/esm2022/components/element/element.component.mjs +5 -5
  14. package/esm2022/components/leaf/default-leaf.component.mjs +3 -3
  15. package/esm2022/components/leaf/leaf.component.mjs +38 -0
  16. package/esm2022/components/leaves/leaves.component.mjs +52 -7
  17. package/esm2022/components/string/default-string.component.mjs +5 -5
  18. package/esm2022/components/string/string.component.mjs +10 -20
  19. package/esm2022/components/string/template.component.mjs +3 -3
  20. package/esm2022/components/text/default-text.component.mjs +5 -5
  21. package/esm2022/components/text/void-text.component.mjs +5 -5
  22. package/esm2022/custom-event/BeforeInputEventPlugin.mjs +1 -1
  23. package/esm2022/custom-event/FallbackCompositionState.mjs +1 -1
  24. package/esm2022/module.mjs +26 -11
  25. package/esm2022/plugins/angular-editor.mjs +7 -28
  26. package/esm2022/plugins/with-angular.mjs +4 -4
  27. package/esm2022/public-api.mjs +2 -3
  28. package/esm2022/utils/dom.mjs +1 -1
  29. package/esm2022/utils/hotkeys.mjs +1 -1
  30. package/esm2022/utils/index.mjs +1 -2
  31. package/esm2022/utils/lines.mjs +1 -1
  32. package/esm2022/utils/range-list.mjs +1 -1
  33. package/esm2022/utils/restore-dom.mjs +1 -1
  34. package/esm2022/view/base.mjs +28 -62
  35. package/esm2022/view/before-context-change.mjs +7 -0
  36. package/esm2022/view/container-item.mjs +5 -5
  37. package/esm2022/view/container.mjs +86 -6
  38. package/esm2022/view/context.mjs +1 -1
  39. package/fesm2022/slate-angular.mjs +788 -1079
  40. package/fesm2022/slate-angular.mjs.map +1 -1
  41. package/module.d.ts +8 -7
  42. package/package.json +5 -5
  43. package/public-api.d.ts +1 -2
  44. package/utils/index.d.ts +0 -1
  45. package/view/base.d.ts +4 -15
  46. package/view/{context-change.d.ts → before-context-change.d.ts} +0 -4
  47. package/view/container.d.ts +7 -3
  48. package/view/context.d.ts +2 -6
  49. package/components/children/children-outlet.component.d.ts +0 -9
  50. package/components/leaf/token.d.ts +0 -4
  51. package/components/text/token.d.ts +0 -5
  52. package/esm2022/components/children/children-outlet.component.mjs +0 -22
  53. package/esm2022/components/leaf/token.mjs +0 -3
  54. package/esm2022/components/text/token.mjs +0 -4
  55. package/esm2022/utils/constants.mjs +0 -2
  56. package/esm2022/utils/throttle.mjs +0 -18
  57. package/esm2022/view/context-change.mjs +0 -13
  58. package/esm2022/view/render/leaves-render.mjs +0 -107
  59. package/esm2022/view/render/list-render.mjs +0 -252
  60. package/esm2022/view/render/utils.mjs +0 -117
  61. package/utils/constants.d.ts +0 -1
  62. package/utils/throttle.d.ts +0 -2
  63. package/view/render/leaves-render.d.ts +0 -21
  64. package/view/render/list-render.d.ts +0 -32
  65. package/view/render/utils.d.ts +0 -11
@@ -1,11 +1,16 @@
1
+ import { OnInit, QueryList } from '@angular/core';
2
+ import { SlateDescendant } from '../descendant/descendant.component';
1
3
  import { Descendant } from 'slate';
2
4
  import { SlateChildrenContext, SlateViewContext } from '../../view/context';
3
5
  import { ViewContainer } from '../../view/container';
4
6
  import * as i0 from "@angular/core";
5
- export declare class SlateChildren extends ViewContainer<any> {
7
+ export declare class SlateChildren extends ViewContainer<SlateDescendant> implements OnInit {
6
8
  children: Descendant[];
7
9
  context: SlateChildrenContext;
8
10
  viewContext: SlateViewContext;
11
+ childrenComponent: QueryList<SlateDescendant>;
12
+ ngOnInit(): void;
13
+ trackBy: (index: any, node: any) => any;
9
14
  static ɵfac: i0.ɵɵFactoryDeclaration<SlateChildren, never>;
10
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>;
11
16
  }
@@ -0,0 +1,35 @@
1
+ import { OnChanges, OnInit, ViewContainerRef } from '@angular/core';
2
+ import { ViewContainerItem } from '../../view/container-item';
3
+ import { Descendant, Range } from 'slate';
4
+ import { SlateChildrenContext, SlateElementContext, SlateTextContext, SlateViewContext } from '../../view/context';
5
+ import { BaseElementComponent, BaseTextComponent } from '../../view/base';
6
+ import { ComponentType, ViewType } from '../../types/view';
7
+ import * as i0 from "@angular/core";
8
+ export declare class SlateDescendant extends ViewContainerItem<SlateElementContext | SlateTextContext, BaseElementComponent | BaseTextComponent> implements OnInit, OnChanges {
9
+ protected viewContainerRef: ViewContainerRef;
10
+ defaultElementComponentType: ComponentType<BaseElementComponent>;
11
+ descendant: Descendant;
12
+ context: SlateChildrenContext;
13
+ viewContext: SlateViewContext;
14
+ index: number;
15
+ get rootNodes(): HTMLElement[];
16
+ get isBlockCard(): boolean;
17
+ constructor(viewContainerRef: ViewContainerRef, defaultElementComponentType: ComponentType<BaseElementComponent>);
18
+ ngOnInit(): void;
19
+ destroyView(): void;
20
+ ngOnChanges(): void;
21
+ destroyBlockCard(): void;
22
+ createBlockCard(): void;
23
+ updateBlockCard(): void;
24
+ getCommonContext(): {
25
+ selection: Range;
26
+ decorations: Range[];
27
+ };
28
+ getContext(): SlateElementContext | SlateTextContext;
29
+ getViewType(): ViewType;
30
+ memoizedElementContext(prev: SlateElementContext, next: SlateElementContext): boolean;
31
+ memoizedTextContext(prev: SlateTextContext, next: SlateTextContext): boolean;
32
+ memoizedContext(prev: SlateElementContext | SlateTextContext, next: SlateElementContext | SlateTextContext): boolean;
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
+ }
@@ -1,13 +1,11 @@
1
- import { OnInit, Renderer2, ElementRef, OnDestroy, ChangeDetectorRef, NgZone, Injector, OnChanges, SimpleChanges, AfterViewChecked, DoCheck, ViewContainerRef } from '@angular/core';
1
+ import { OnInit, Renderer2, ElementRef, OnDestroy, ChangeDetectorRef, NgZone, Injector, OnChanges, SimpleChanges, AfterViewChecked, DoCheck } from '@angular/core';
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
5
  import { SlateStringTemplate } from '../string/template.component';
6
6
  import { SlateChildrenContext, SlateViewContext } from '../../view/context';
7
- import { ComponentType, ViewType } from '../../types/view';
7
+ import { ViewType } from '../../types/view';
8
8
  import { SlatePlaceholder } from '../../types/feature';
9
- import { BaseElementComponent, BaseLeafComponent, BaseTextComponent } from '../../view/base';
10
- import { ListRender } from '../../view/render/list-render';
11
9
  import * as i0 from "@angular/core";
12
10
  export declare class SlateEditable implements OnInit, OnChanges, OnDestroy, AfterViewChecked, DoCheck {
13
11
  elementRef: ElementRef;
@@ -15,10 +13,6 @@ export declare class SlateEditable implements OnInit, OnChanges, OnDestroy, Afte
15
13
  cdr: ChangeDetectorRef;
16
14
  private ngZone;
17
15
  private injector;
18
- defaultElement: ComponentType<BaseElementComponent>;
19
- defaultText: ComponentType<BaseTextComponent>;
20
- defaultVoidText: ComponentType<BaseTextComponent>;
21
- defaultLeaf: ComponentType<BaseLeafComponent>;
22
16
  viewContext: SlateViewContext;
23
17
  context: SlateChildrenContext;
24
18
  private destroy$;
@@ -65,10 +59,7 @@ export declare class SlateEditable implements OnInit, OnChanges, OnDestroy, Afte
65
59
  get hasBeforeInputSupport(): boolean;
66
60
  templateComponent: SlateStringTemplate;
67
61
  templateElementRef: ElementRef<any>;
68
- viewContainerRef: ViewContainerRef;
69
- getOutletParent: () => any;
70
- listRender: ListRender;
71
- constructor(elementRef: ElementRef, renderer2: Renderer2, cdr: ChangeDetectorRef, ngZone: NgZone, injector: Injector, defaultElement: ComponentType<BaseElementComponent>, defaultText: ComponentType<BaseTextComponent>, defaultVoidText: ComponentType<BaseTextComponent>, defaultLeaf: ComponentType<BaseLeafComponent>);
62
+ constructor(elementRef: ElementRef, renderer2: Renderer2, cdr: ChangeDetectorRef, ngZone: NgZone, injector: Injector);
72
63
  ngOnInit(): void;
73
64
  ngOnChanges(simpleChanges: SimpleChanges): void;
74
65
  registerOnChange(fn: any): void;
@@ -79,11 +70,10 @@ export declare class SlateEditable implements OnInit, OnChanges, OnDestroy, Afte
79
70
  onChange(): void;
80
71
  ngAfterViewChecked(): void;
81
72
  ngDoCheck(): void;
82
- forceRender(): void;
83
- render(): void;
84
- updateContext(): boolean;
73
+ forceFlush(): void;
85
74
  initializeContext(): void;
86
75
  initializeViewContext(): void;
76
+ detectContext(): void;
87
77
  composePlaceholderDecorate(editor: Editor): SlatePlaceholder[];
88
78
  generateDecorations(): import("slate").BaseRange[];
89
79
  private addEventListener;
@@ -0,0 +1,16 @@
1
+ import { OnChanges, OnInit, SimpleChanges } from '@angular/core';
2
+ import { ViewContainerItem } from '../../view/container-item';
3
+ import { SlateLeafContext } from '../../view/context';
4
+ import { BaseLeafComponent } from '../../view/base';
5
+ import { ViewType } from '../../types/view';
6
+ import * as i0 from "@angular/core";
7
+ export declare class SlateLeaf extends ViewContainerItem<SlateLeafContext, BaseLeafComponent> implements OnInit, OnChanges {
8
+ context: SlateLeafContext;
9
+ ngOnInit(): void;
10
+ getContext(): SlateLeafContext;
11
+ getViewType(): ViewType;
12
+ memoizedContext(prev: SlateLeafContext, next: SlateLeafContext): boolean;
13
+ ngOnChanges(simpleChanges: SimpleChanges): void;
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
+ }
@@ -1,12 +1,25 @@
1
+ import { AfterViewInit, OnChanges, OnInit, QueryList, SimpleChanges } from '@angular/core';
1
2
  import { Text } from 'slate';
2
3
  import { SlateLeafContext, SlateTextContext } from '../../view/context';
3
4
  import { ViewContainer } from '../../view/container';
5
+ import { SlateLeaf } from '../leaf/leaf.component';
4
6
  import * as i0 from "@angular/core";
5
- export declare class SlateLeaves extends ViewContainer<any> {
7
+ export declare class SlateLeaves extends ViewContainer<SlateLeaf> implements OnInit, AfterViewInit, OnChanges {
6
8
  initialized: boolean;
7
9
  leafContexts: SlateLeafContext[];
8
10
  leaves: Text[];
9
11
  context: SlateTextContext;
12
+ childrenComponent: QueryList<SlateLeaf>;
13
+ ngOnInit(): void;
14
+ getLeafContexts(): {
15
+ leaf: import("slate").BaseText;
16
+ text: import("slate").BaseText;
17
+ parent: import("slate").BaseElement;
18
+ index: number;
19
+ isLast: boolean;
20
+ }[];
21
+ ngOnChanges(simpleChanges: SimpleChanges): void;
22
+ trackBy(index: any, item: any): any;
10
23
  static ɵfac: i0.ɵɵFactoryDeclaration<SlateLeaves, never>;
11
24
  static ɵcmp: i0.ɵɵComponentDeclaration<SlateLeaves, "slate-leaves", never, { "context": { "alias": "context"; "required": false; }; }, {}, never, never, true, never>;
12
25
  }
@@ -1,7 +1,7 @@
1
1
  import { OnInit, ElementRef, ChangeDetectorRef } from '@angular/core';
2
2
  import { SlateStringContext } from '../../view/context';
3
3
  import { BaseComponent } from '../../view/base';
4
- import { BeforeContextChange } from '../../view/context-change';
4
+ import { BeforeContextChange } from '../../view/before-context-change';
5
5
  import { DOMElement } from '../../utils/dom';
6
6
  import * as i0 from "@angular/core";
7
7
  export declare class SlateDefaultString extends BaseComponent<SlateStringContext> implements OnInit, BeforeContextChange<SlateStringContext> {
@@ -22,11 +22,3 @@ export declare class SlateString extends ViewContainerItem<SlateStringContext> i
22
22
  static ɵfac: i0.ɵɵFactoryDeclaration<SlateString, never>;
23
23
  static ɵcmp: i0.ɵɵComponentDeclaration<SlateString, "span[slateString]", never, { "context": { "alias": "context"; "required": false; }; }, {}, never, never, true, never>;
24
24
  }
25
- /**
26
- * TODO: remove when bump slate
27
- * copy from slate
28
- * @param editor
29
- * @param element
30
- * @returns
31
- */
32
- export declare const isEmpty: (editor: any, element: any) => boolean;
@@ -11,6 +11,7 @@ export class SlateBlockCard {
11
11
  this.elementRef = elementRef;
12
12
  }
13
13
  ngOnInit() {
14
+ this.append();
14
15
  this.nativeElement.classList.add(`slate-block-card`);
15
16
  }
16
17
  append() {
@@ -18,16 +19,15 @@ export class SlateBlockCard {
18
19
  }
19
20
  initializeCenter(rootNodes) {
20
21
  this.centerRootNodes = rootNodes;
21
- this.append();
22
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" }); }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SlateBlockCard, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", 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
25
  }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SlateBlockCard, decorators: [{
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SlateBlockCard, decorators: [{
27
27
  type: Component,
28
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: [{
29
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { centerContianer: [{
30
30
  type: ViewChild,
31
31
  args: ['centerContianer', { static: true }]
32
32
  }] } });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9ibG9jay1jYXJkL2Jsb2NrLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvYmxvY2stY2FyZC9ibG9jay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPekUsTUFBTSxPQUFPLGNBQWM7SUFNdkIsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQTRCLENBQUM7SUFDN0QsQ0FBQztJQUVELFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFBRyxDQUFDO0lBRTlDLFFBQVE7UUFDSixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUN4QixRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUNuSCxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQXdCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNsQixDQUFDOzhHQTdCUSxjQUFjO2tHQUFkLGNBQWMsZ09DUDNCLHNOQUdBOzsyRkRJYSxjQUFjO2tCQUwxQixTQUFTOytCQUNJLG9DQUFvQyxjQUVsQyxJQUFJO2lHQUloQixlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NsYXRlLWJsb2NrLWNhcmQsIFtzbGF0ZUJsb2NrQ2FyZF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnYmxvY2stY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBTbGF0ZUJsb2NrQ2FyZCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnY2VudGVyQ29udGlhbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBjZW50ZXJDb250aWFuZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBjZW50ZXJSb290Tm9kZXM6IEhUTUxFbGVtZW50W107XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGdldCBjZW50ZXJDb250YWluZXJFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jZW50ZXJDb250aWFuZXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYHNsYXRlLWJsb2NrLWNhcmRgKTtcbiAgICB9XG5cbiAgICBhcHBlbmQoKSB7XG4gICAgICAgIHRoaXMuY2VudGVyUm9vdE5vZGVzLmZvckVhY2goXG4gICAgICAgICAgICByb290Tm9kZSA9PiAhdGhpcy5jZW50ZXJDb250YWluZXJFbGVtZW50LmNvbnRhaW5zKHJvb3ROb2RlKSAmJiB0aGlzLmNlbnRlckNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQocm9vdE5vZGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUNlbnRlcihyb290Tm9kZXM6IEhUTUxFbGVtZW50W10pIHtcbiAgICAgICAgdGhpcy5jZW50ZXJSb290Tm9kZXMgPSByb290Tm9kZXM7XG4gICAgICAgIHRoaXMuYXBwZW5kKCk7XG4gICAgfVxufVxuIiwiPHNwYW4gY2FyZC10YXJnZXQ9XCJjYXJkLWxlZnRcIiBjbGFzcz1cImNhcmQtbGVmdFwiPnt7ICdcXHVGRUZGJyB9fTwvc3Bhbj5cbjxkaXYgY2FyZC10YXJnZXQ9XCJjYXJkLWNlbnRlclwiICNjZW50ZXJDb250aWFuZXI+PC9kaXY+XG48c3BhbiBjYXJkLXRhcmdldD1cImNhcmQtcmlnaHRcIiBjbGFzcz1cImNhcmQtcmlnaHRcIj57eyAnXFx1RkVGRicgfX08L3NwYW4+XG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9ibG9jay1jYXJkL2Jsb2NrLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvYmxvY2stY2FyZC9ibG9jay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPekUsTUFBTSxPQUFPLGNBQWM7SUFNdkIsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQTRCLENBQUM7SUFDN0QsQ0FBQztJQUVELFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFBRyxDQUFDO0lBRTlDLFFBQVE7UUFDSixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUN4QixRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUNuSCxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQXdCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLENBQUM7OEdBN0JRLGNBQWM7a0dBQWQsY0FBYyxnT0NQM0Isc05BR0E7OzJGRElhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0ksb0NBQW9DLGNBRWxDLElBQUk7K0VBSWhCLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2xhdGUtYmxvY2stY2FyZCwgW3NsYXRlQmxvY2tDYXJkXScsXG4gICAgdGVtcGxhdGVVcmw6ICdibG9jay1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFNsYXRlQmxvY2tDYXJkIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKCdjZW50ZXJDb250aWFuZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGNlbnRlckNvbnRpYW5lcjogRWxlbWVudFJlZjtcblxuICAgIGNlbnRlclJvb3ROb2RlczogSFRNTEVsZW1lbnRbXTtcblxuICAgIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGNlbnRlckNvbnRhaW5lckVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNlbnRlckNvbnRpYW5lci5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmFwcGVuZCgpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgc2xhdGUtYmxvY2stY2FyZGApO1xuICAgIH1cblxuICAgIGFwcGVuZCgpIHtcbiAgICAgICAgdGhpcy5jZW50ZXJSb290Tm9kZXMuZm9yRWFjaChcbiAgICAgICAgICAgIHJvb3ROb2RlID0+ICF0aGlzLmNlbnRlckNvbnRhaW5lckVsZW1lbnQuY29udGFpbnMocm9vdE5vZGUpICYmIHRoaXMuY2VudGVyQ29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChyb290Tm9kZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplQ2VudGVyKHJvb3ROb2RlczogSFRNTEVsZW1lbnRbXSkge1xuICAgICAgICB0aGlzLmNlbnRlclJvb3ROb2RlcyA9IHJvb3ROb2RlcztcbiAgICB9XG59XG4iLCI8c3BhbiBjYXJkLXRhcmdldD1cImNhcmQtbGVmdFwiIGNsYXNzPVwiY2FyZC1sZWZ0XCI+e3sgJ1xcdUZFRkYnIH19PC9zcGFuPlxuPGRpdiBjYXJkLXRhcmdldD1cImNhcmQtY2VudGVyXCIgI2NlbnRlckNvbnRpYW5lcj48L2Rpdj5cbjxzcGFuIGNhcmQtdGFyZ2V0PVwiY2FyZC1yaWdodFwiIGNsYXNzPVwiY2FyZC1yaWdodFwiPnt7ICdcXHVGRUZGJyB9fTwvc3Bhbj5cbiJdfQ==
@@ -1,17 +1,42 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, Input, ViewChildren } from '@angular/core';
2
+ import { SlateDescendant } from '../descendant/descendant.component';
3
+ import { AngularEditor } from '../../plugins/angular-editor';
2
4
  import { ViewContainer } from '../../view/container';
5
+ import { NgFor } from '@angular/common';
3
6
  import * as i0 from "@angular/core";
4
7
  export class SlateChildren extends ViewContainer {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SlateChildren, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6
- 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" }, usesInheritance: true, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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: "17.2.4", ngImport: i0, type: SlateChildren, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
16
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", 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 }); }
7
24
  }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SlateChildren, decorators: [{
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SlateChildren, decorators: [{
9
26
  type: Component,
10
27
  args: [{
11
28
  selector: 'slate-children',
12
- template: ``,
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>`,
13
37
  changeDetection: ChangeDetectionStrategy.OnPush,
14
- standalone: true
38
+ standalone: true,
39
+ imports: [NgFor, SlateDescendant]
15
40
  }]
16
41
  }], propDecorators: { children: [{
17
42
  type: Input
@@ -19,5 +44,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
19
44
  type: Input
20
45
  }], viewContext: [{
21
46
  type: Input
47
+ }], childrenComponent: [{
48
+ type: ViewChildren,
49
+ args: [SlateDescendant, { read: SlateDescendant }]
22
50
  }] } });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGRyZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY2hpbGRyZW4vY2hpbGRyZW4uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFTckQsTUFBTSxPQUFPLGFBQWMsU0FBUSxhQUFrQjs4R0FBeEMsYUFBYTtrR0FBYixhQUFhLG1MQUpaLEVBQUU7OzJGQUlILGFBQWE7a0JBTnpCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs4QkFFWSxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlc2NlbmRhbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBTbGF0ZUNoaWxkcmVuQ29udGV4dCwgU2xhdGVWaWV3Q29udGV4dCB9IGZyb20gJy4uLy4uL3ZpZXcvY29udGV4dCc7XG5pbXBvcnQgeyBWaWV3Q29udGFpbmVyIH0gZnJvbSAnLi4vLi4vdmlldy9jb250YWluZXInO1xuaW1wb3J0IHsgTmdGb3IgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NsYXRlLWNoaWxkcmVuJyxcbiAgICB0ZW1wbGF0ZTogYGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBTbGF0ZUNoaWxkcmVuIGV4dGVuZHMgVmlld0NvbnRhaW5lcjxhbnk+IHtcbiAgICBASW5wdXQoKSBjaGlsZHJlbjogRGVzY2VuZGFudFtdO1xuXG4gICAgQElucHV0KCkgY29udGV4dDogU2xhdGVDaGlsZHJlbkNvbnRleHQ7XG5cbiAgICBASW5wdXQoKSB2aWV3Q29udGV4dDogU2xhdGVWaWV3Q29udGV4dDtcbn1cbiJdfQ==
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: "17.2.4", 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: "17.2.4", 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: "17.2.4", 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: () => [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY2VuZGFudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9kZXNjZW5kYW50L2Rlc2NlbmRhbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUUzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBUW5HLE1BQU0sT0FBTyxlQUNULFNBQVEsaUJBQW1HO0lBVzNHLElBQUksU0FBUztRQUNULElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFD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ZUFBZSxrREF5QloscUNBQXFDO2tHQXpCeEMsZUFBZSw4TkFKZCxFQUFFOzsyRkFJSCxlQUFlO2tCQU4zQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsSUFBSTtpQkFDbkI7OzBCQTBCUSxNQUFNOzJCQUFDLHFDQUFxQzt5Q0FyQnhDLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNsYXRlQmxvY2tDYXJkIH0gZnJvbSAnLi4vYmxvY2stY2FyZC9ibG9jay1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWaWV3Q29udGFpbmVySXRlbSB9IGZyb20gJy4uLy4uL3ZpZXcvY29udGFpbmVyLWl0ZW0nO1xuaW1wb3J0IHsgRGVzY2VuZGFudCwgRWRpdG9yLCBSYW5nZSwgRWxlbWVudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IFNsYXRlQ2hpbGRyZW5Db250ZXh0LCBTbGF0ZUVsZW1lbnRDb250ZXh0LCBTbGF0ZVRleHRDb250ZXh0LCBTbGF0ZVZpZXdDb250ZXh0IH0gZnJvbSAnLi4vLi4vdmlldy9jb250ZXh0JztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IgfSBmcm9tICcuLi8uLi9wbHVnaW5zL2FuZ3VsYXItZWRpdG9yJztcbmltcG9ydCB7IE5PREVfVE9fSU5ERVgsIE5PREVfVE9fUEFSRU5UIH0gZnJvbSAnLi4vLi4vdXRpbHMvd2Vhay1tYXBzJztcbmltcG9ydCB7IEJhc2VFbGVtZW50Q29tcG9uZW50LCBCYXNlVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ZpZXcvYmFzZSc7XG5pbXBvcnQgeyBTbGF0ZURlZmF1bHRUZXh0IH0gZnJvbSAnLi4vdGV4dC9kZWZhdWx0LXRleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlVm9pZFRleHQgfSBmcm9tICcuLi90ZXh0L3ZvaWQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMvdmlldyc7XG5pbXBvcnQgeyBTbGF0ZUVycm9yQ29kZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IFNMQVRFX0RFRkFVTFRfRUxFTUVOVF9DT01QT05FTlRfVE9LRU4gfSBmcm9tICcuLi9lbGVtZW50L2RlZmF1bHQtZWxlbWVudC5jb21wb25lbnQudG9rZW4nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NsYXRlLWRlc2NlbmRhbnQnLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFNsYXRlRGVzY2VuZGFudFxuICAgIGV4dGVuZHMgVmlld0NvbnRhaW5lckl0ZW08U2xhdGVFbGVtZW50Q29udGV4dCB8IFNsYXRlVGV4dENvbnRleHQsIEJhc2VFbGVtZW50Q29tcG9uZW50IHwgQmFzZVRleHRDb21wb25lbnQ+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlc1xue1xuICAgIEBJbnB1dCgpIGRlc2NlbmRhbnQ6IERlc2NlbmRhbnQ7XG5cbiAgICBASW5wdXQoKSBjb250ZXh0OiBTbGF0ZUNoaWxkcmVuQ29udGV4dDtcblxuICAgIEBJbnB1dCgpIHZpZXdDb250ZXh0OiBTbGF0ZVZpZXdDb250ZXh0O1xuXG4gICAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcblxuICAgIGdldCByb290Tm9kZXMoKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgICAgIGlmICh0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5uYXRpdmVFbGVtZW50XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0Um9vdE5vZGVzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzQmxvY2tDYXJkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dC5lZGl0b3IuaXNCbG9ja0NhcmQodGhpcy5kZXNjZW5kYW50KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIEBJbmplY3QoU0xBVEVfREVGQVVMVF9FTEVNRU5UX0NPTVBPTkVOVF9UT0tFTilcbiAgICAgICAgcHVibGljIGRlZmF1bHRFbGVtZW50Q29tcG9uZW50VHlwZTogQ29tcG9uZW50VHlwZTxCYXNlRWxlbWVudENvbXBvbmVudD5cbiAgICApIHtcbiAgICAgICAgc3VwZXIodmlld0NvbnRhaW5lclJlZik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZGVzY2VuZGFudCwgdGhpcy5pbmRleCk7XG4gICAgICAgIE5PREVfVE9fUEFSRU5ULnNldCh0aGlzLmRlc2NlbmRhbnQsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNCbG9ja0NhcmQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvY2tDYXJkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95VmlldygpIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveVZpZXcoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2tDYXJkKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZGVzY2VuZGFudCwgdGhpcy5pbmRleCk7XG4gICAgICAgIE5PREVfVE9fUEFSRU5ULnNldCh0aGlzLmRlc2NlbmRhbnQsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNCbG9ja0NhcmQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmxvY2tDYXJkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95QmxvY2tDYXJkKCkge1xuICAgICAgICBpZiAodGhpcy5ibG9ja0NhcmRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUJsb2NrQ2FyZCgpIHtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzID0gdGhpcy5yb290Tm9kZXM7XG4gICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxTbGF0ZUJsb2NrQ2FyZD4oU2xhdGVCbG9ja0NhcmQpO1xuICAgICAgICB0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5pbml0aWFsaXplQ2VudGVyKHJvb3ROb2Rlcyk7XG4gICAgfVxuXG4gICAgdXBkYXRlQmxvY2tDYXJkKCkge1xuICAgICAgICBpZiAodGhpcy5ibG9ja0NhcmRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290Tm9kZXMgPSB0aGlzLnJvb3ROb2RlcztcbiAgICAgICAgdGhpcy5jcmVhdGVCbG9ja0NhcmQoKTtcbiAgICAgICAgY29uc3QgZmlyc3RSb290Tm9kZSA9IHJvb3ROb2Rlc1swXTtcbiAgICAgICAgZmlyc3RSb290Tm9kZS5yZXBsYWNlV2l0aCh0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBnZXRDb21tb25Db250ZXh0KCk6IHsgc2VsZWN0aW9uOiBSYW5nZTsgZGVjb3JhdGlvbnM6IFJhbmdlW10gfSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKHRoaXMudmlld0NvbnRleHQuZWRpdG9yLCB0aGlzLmNvbnRleHQucGFyZW50KTtcbiAgICAgICAgY29uc3QgcCA9IHBhdGguY29uY2F0KHRoaXMuaW5kZXgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBFZGl0b3IucmFuZ2UodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIHApO1xuICAgICAgICAgICAgY29uc3Qgc2VsID0gdGhpcy5jb250ZXh0LnNlbGVjdGlvbiAmJiBSYW5nZS5pbnRlcnNlY3Rpb24ocmFuZ2UsIHRoaXMuY29udGV4dC5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgZHMgPSB0aGlzLmNvbnRleHQuZGVjb3JhdGUoW3RoaXMuZGVzY2VuZGFudCwgcF0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZWMgb2YgdGhpcy5jb250ZXh0LmRlY29yYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IFJhbmdlLmludGVyc2VjdGlvbihkZWMsIHJhbmdlKTtcbiAgICAgICAgICAgICAgICBpZiAoZCkge1xuICAgICAgICAgICAgICAgICAgICBkcy5wdXNoKGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHNlbGVjdGlvbjogc2VsLCBkZWNvcmF0aW9uczogZHMgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHQuZWRpdG9yLm9uRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvZGU6IFNsYXRlRXJyb3JDb2RlLkdldFN0YXJ0UG9pbnRFcnJvcixcbiAgICAgICAgICAgICAgICBuYXRpdmVFcnJvcjogZXJyb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uOiBudWxsLCBkZWNvcmF0aW9uczogW10gfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbnRleHQoKTogU2xhdGVFbGVtZW50Q29udGV4dCB8IFNsYXRlVGV4dENvbnRleHQge1xuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQodGhpcy5kZXNjZW5kYW50KSkge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRDb250ZXh0ID0gdGhpcy5nZXRDb21tb25Db250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBBbmd1bGFyRWRpdG9yLmZpbmRLZXkodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIHRoaXMuZGVzY2VuZGFudCk7XG4gICAgICAgICAgICBjb25zdCBpc0lubGluZSA9IHRoaXMudmlld0NvbnRleHQuZWRpdG9yLmlzSW5saW5lKHRoaXMuZGVzY2VuZGFudCk7XG4gICAgICAgICAgICBjb25zdCBpc1ZvaWQgPSB0aGlzLnZpZXdDb250ZXh0LmVkaXRvci5pc1ZvaWQodGhpcy5kZXNjZW5kYW50KTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRDb250ZXh0OiBTbGF0ZUVsZW1lbnRDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZGVzY2VuZGFudCxcbiAgICAgICAgICAgICAgICAuLi5jb21wdXRlZENvbnRleHQsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAnZGF0YS1zbGF0ZS1ub2RlJzogJ2VsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnZGF0YS1zbGF0ZS1rZXknOiBrZXkuaWRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRlY29yYXRlOiB0aGlzLmNvbnRleHQuZGVjb3JhdGUsXG4gICAgICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMuY29udGV4dC5yZWFkb25seVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpc0lubGluZSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250ZXh0LmF0dHJpYnV0ZXNbJ2RhdGEtc2xhdGUtaW5saW5lJ10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVm9pZCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250ZXh0LmF0dHJpYnV0ZXNbJ2RhdGEtc2xhdGUtdm9pZCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dC5hdHRyaWJ1dGVzLmNvbnRlbnRlZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRDb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRDb250ZXh0ID0gdGhpcy5nZXRDb21tb25Db250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBpc0xlYWZCbG9jayA9IEFuZ3VsYXJFZGl0b3IuaXNMZWFmQmxvY2sodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dENvbnRleHQ6IFNsYXRlVGV4dENvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgZGVjb3JhdGlvbnM6IGNvbXB1dGVkQ29udGV4dC5kZWNvcmF0aW9ucyxcbiAgICAgICAgICAgICAgICBpc0xhc3Q6IGlzTGVhZkJsb2NrICYmIHRoaXMuaW5kZXggPT09IHRoaXMuY29udGV4dC5wYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXMuY29udGV4dC5wYXJlbnQgYXMgRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmRlc2NlbmRhbnRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdGV4dENvbnRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRWaWV3VHlwZSgpOiBWaWV3VHlwZSB7XG4gICAgICAgIGlmIChFbGVtZW50LmlzRWxlbWVudCh0aGlzLmRlc2NlbmRhbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMudmlld0NvbnRleHQucmVuZGVyRWxlbWVudCAmJiB0aGlzLnZpZXdDb250ZXh0LnJlbmRlckVsZW1lbnQodGhpcy5kZXNjZW5kYW50KSkgfHwgdGhpcy5kZWZhdWx0RWxlbWVudENvbXBvbmVudFR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc1ZvaWQgPSB0aGlzLnZpZXdDb250ZXh0LmVkaXRvci5pc1ZvaWQodGhpcy5jb250ZXh0LnBhcmVudCBhcyBFbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBpc1ZvaWRcbiAgICAgICAgICAgICAgICA/IFNsYXRlVm9pZFRleHRcbiAgICAgICAgICAgICAgICA6ICh0aGlzLnZpZXdDb250ZXh0LnJlbmRlclRleHQgJiYgdGhpcy52aWV3Q29udGV4dC5yZW5kZXJUZXh0KHRoaXMuZGVzY2VuZGFudCkpIHx8IFNsYXRlRGVmYXVsdFRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vaXplZEVsZW1lbnRDb250ZXh0KHByZXY6IFNsYXRlRWxlbWVudENvbnRleHQsIG5leHQ6IFNsYXRlRWxlbWVudENvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHByZXYuZWxlbWVudCA9PT0gbmV4dC5lbGVtZW50ICYmXG4gICAgICAgICAgICAoIXRoaXMudmlld0NvbnRleHQuaXNTdHJpY3REZWNvcmF0ZSB8fCBwcmV2LmRlY29yYXRlID09PSBuZXh0LmRlY29yYXRlKSAmJlxuICAgICAgICAgICAgcHJldi5yZWFkb25seSA9PT0gbmV4dC5yZWFkb25seSAmJlxuICAgICAgICAgICAgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbChwcmV2LmRlY29yYXRpb25zLCBuZXh0LmRlY29yYXRpb25zKSAmJlxuICAgICAgICAgICAgKHByZXYuc2VsZWN0aW9uID09PSBuZXh0LnNlbGVjdGlvbiB8fCAoISFwcmV2LnNlbGVjdGlvbiAmJiAhIW5leHQuc2VsZWN0aW9uICYmIFJhbmdlLmVxdWFscyhwcmV2LnNlbGVjdGlvbiwgbmV4dC5zZWxlY3Rpb24pKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBtZW1vaXplZFRleHRDb250ZXh0KHByZXY6IFNsYXRlVGV4dENvbnRleHQsIG5leHQ6IFNsYXRlVGV4dENvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG5leHQucGFyZW50ID09PSBwcmV2LnBhcmVudCAmJlxuICAgICAgICAgICAgbmV4dC5pc0xhc3QgPT09IHByZXYuaXNMYXN0ICYmXG4gICAgICAgICAgICBuZXh0LnRleHQgPT09IHByZXYudGV4dCAmJlxuICAgICAgICAgICAgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbChuZXh0LmRlY29yYXRpb25zLCBwcmV2LmRlY29yYXRpb25zKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG1lbW9pemVkQ29udGV4dChwcmV2OiBTbGF0ZUVsZW1lbnRDb250ZXh0IHwgU2xhdGVUZXh0Q29udGV4dCwgbmV4dDogU2xhdGVFbGVtZW50Q29udGV4dCB8IFNsYXRlVGV4dENvbnRleHQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKEVsZW1lbnQuaXNFbGVtZW50KHRoaXMuZGVzY2VuZGFudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbW9pemVkRWxlbWVudENvbnRleHQocHJldiBhcyBTbGF0ZUVsZW1lbnRDb250ZXh0LCBuZXh0IGFzIFNsYXRlRWxlbWVudENvbnRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVtb2l6ZWRUZXh0Q29udGV4dChwcmV2IGFzIFNsYXRlVGV4dENvbnRleHQsIG5leHQgYXMgU2xhdGVUZXh0Q29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=