slate-angular 1.9.3 → 13.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 (63) hide show
  1. package/components/descendant/descendant.component.d.ts +2 -3
  2. package/{esm2015/components/block-card/block-card.component.js → esm2020/components/block-card/block-card.component.mjs} +5 -8
  3. package/{esm2015/components/children/children.component.js → esm2020/components/children/children.component.mjs} +3 -3
  4. package/esm2020/components/descendant/descendant.component.mjs +183 -0
  5. package/esm2020/components/editable/editable.component.mjs +1057 -0
  6. package/{esm2015/components/element/default-element.component.js → esm2020/components/element/default-element.component.mjs} +3 -3
  7. package/{esm2015/components/element/default-element.component.token.js → esm2020/components/element/default-element.component.token.mjs} +0 -0
  8. package/{esm2015/components/element/element.component.js → esm2020/components/element/element.component.mjs} +3 -3
  9. package/{esm2015/components/leaf/default-leaf.component.js → esm2020/components/leaf/default-leaf.component.mjs} +3 -3
  10. package/{esm2015/components/leaf/leaf.component.js → esm2020/components/leaf/leaf.component.mjs} +3 -3
  11. package/{esm2015/components/leaves/leaves.component.js → esm2020/components/leaves/leaves.component.mjs} +3 -3
  12. package/esm2020/components/string/string.component.mjs +73 -0
  13. package/esm2020/components/string/template.component.mjs +26 -0
  14. package/{esm2015/components/text/default-text.component.js → esm2020/components/text/default-text.component.mjs} +3 -3
  15. package/{esm2015/components/text/void-text.component.js → esm2020/components/text/void-text.component.mjs} +3 -3
  16. package/{esm2015/custom-event/BeforeInputEventPlugin.js → esm2020/custom-event/BeforeInputEventPlugin.mjs} +0 -0
  17. package/{esm2015/custom-event/DOMTopLevelEventTypes.js → esm2020/custom-event/DOMTopLevelEventTypes.mjs} +0 -0
  18. package/{esm2015/custom-event/FallbackCompositionState.js → esm2020/custom-event/FallbackCompositionState.mjs} +0 -0
  19. package/{esm2015/custom-event/before-input-polyfill.js → esm2020/custom-event/before-input-polyfill.mjs} +0 -0
  20. package/{esm2015/module.js → esm2020/module.mjs} +5 -6
  21. package/esm2020/plugins/angular-editor.mjs +565 -0
  22. package/{esm2015/plugins/with-angular.js → esm2020/plugins/with-angular.mjs} +0 -0
  23. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  24. package/{esm2015/slate-angular.js → esm2020/slate-angular.mjs} +0 -0
  25. package/{esm2015/types/error.js → esm2020/types/error.mjs} +0 -0
  26. package/{esm2015/types/feature.js → esm2020/types/feature.mjs} +0 -0
  27. package/{esm2015/types/index.js → esm2020/types/index.mjs} +1 -1
  28. package/{esm2015/types/view.js → esm2020/types/view.mjs} +0 -0
  29. package/esm2020/utils/block-card.mjs +25 -0
  30. package/{esm2015/utils/dom.js → esm2020/utils/dom.mjs} +0 -0
  31. package/{esm2015/utils/environment.js → esm2020/utils/environment.mjs} +0 -0
  32. package/{esm2015/utils/global-normalize.js → esm2020/utils/global-normalize.mjs} +0 -0
  33. package/{esm2015/utils/hotkeys.js → esm2020/utils/hotkeys.mjs} +0 -0
  34. package/{esm2015/utils/index.js → esm2020/utils/index.mjs} +0 -0
  35. package/{esm2015/utils/key.js → esm2020/utils/key.mjs} +0 -0
  36. package/{esm2015/utils/lines.js → esm2020/utils/lines.mjs} +0 -0
  37. package/esm2020/utils/range-list.mjs +29 -0
  38. package/{esm2015/utils/view.js → esm2020/utils/view.mjs} +0 -0
  39. package/{esm2015/utils/weak-maps.js → esm2020/utils/weak-maps.mjs} +0 -0
  40. package/{esm2015/view/base.js → esm2020/view/base.mjs} +12 -12
  41. package/{esm2015/view/before-context-change.js → esm2020/view/before-context-change.mjs} +0 -0
  42. package/esm2020/view/container-item.mjs +102 -0
  43. package/{esm2015/view/container.js → esm2020/view/container.mjs} +3 -3
  44. package/{esm2015/view/context.js → esm2020/view/context.mjs} +0 -0
  45. package/fesm2015/{slate-angular.js → slate-angular.mjs} +81 -98
  46. package/fesm2015/slate-angular.mjs.map +1 -0
  47. package/fesm2020/slate-angular.mjs +3643 -0
  48. package/fesm2020/slate-angular.mjs.map +1 -0
  49. package/package.json +26 -6
  50. package/styles/index.scss +1 -1
  51. package/types/index.d.ts +1 -0
  52. package/view/container-item.d.ts +2 -3
  53. package/bundles/slate-angular.umd.js +0 -4298
  54. package/bundles/slate-angular.umd.js.map +0 -1
  55. package/esm2015/components/descendant/descendant.component.js +0 -179
  56. package/esm2015/components/editable/editable.component.js +0 -1063
  57. package/esm2015/components/string/string.component.js +0 -73
  58. package/esm2015/components/string/template.component.js +0 -30
  59. package/esm2015/plugins/angular-editor.js +0 -565
  60. package/esm2015/utils/block-card.js +0 -25
  61. package/esm2015/utils/range-list.js +0 -30
  62. package/esm2015/view/container-item.js +0 -105
  63. package/fesm2015/slate-angular.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { ComponentFactoryResolver, OnChanges, OnInit, ViewContainerRef } from "@angular/core";
1
+ import { OnChanges, OnInit, ViewContainerRef } from "@angular/core";
2
2
  import { ViewContainerItem } from '../../view/container-item';
3
3
  import { Descendant, Range } from "slate";
4
4
  import { SlateChildrenContext, SlateElementContext, SlateTextContext, SlateViewContext } from "../../view/context";
@@ -7,7 +7,6 @@ import { ComponentType, ViewType } from "../../types/view";
7
7
  import * as i0 from "@angular/core";
8
8
  export declare class SlateDescendantComponent extends ViewContainerItem<SlateElementContext | SlateTextContext, BaseElementComponent | BaseTextComponent> implements OnInit, OnChanges {
9
9
  protected viewContainerRef: ViewContainerRef;
10
- protected componentFactoryResolver: ComponentFactoryResolver;
11
10
  defaultElementComponentType: ComponentType<BaseElementComponent>;
12
11
  descendant: Descendant;
13
12
  context: SlateChildrenContext;
@@ -15,7 +14,7 @@ export declare class SlateDescendantComponent extends ViewContainerItem<SlateEle
15
14
  index: number;
16
15
  get rootNodes(): HTMLElement[];
17
16
  get isBlockCard(): boolean;
18
- constructor(viewContainerRef: ViewContainerRef, componentFactoryResolver: ComponentFactoryResolver, defaultElementComponentType: ComponentType<BaseElementComponent>);
17
+ constructor(viewContainerRef: ViewContainerRef, defaultElementComponentType: ComponentType<BaseElementComponent>);
19
18
  ngOnInit(): void;
20
19
  destroyView(): void;
21
20
  ngOnChanges(): void;
@@ -21,16 +21,13 @@ export class SlateBlockCardComponent {
21
21
  this.centerRootNodes = rootNodes;
22
22
  }
23
23
  }
24
- SlateBlockCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SlateBlockCardComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
25
- SlateBlockCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.7", type: SlateBlockCardComponent, 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>" });
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SlateBlockCardComponent, decorators: [{
24
+ SlateBlockCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SlateBlockCardComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
25
+ SlateBlockCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: SlateBlockCardComponent, 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>" });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SlateBlockCardComponent, decorators: [{
27
27
  type: Component,
28
- args: [{
29
- selector: 'slate-block-card, [slateBlockCard]',
30
- templateUrl: 'block-card.component.html'
31
- }]
28
+ args: [{ selector: 'slate-block-card, [slateBlockCard]', 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>" }]
32
29
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { centerContianer: [{
33
30
  type: ViewChild,
34
31
  args: ['centerContianer', { static: true }]
35
32
  }] } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9ibG9jay1jYXJkL2Jsb2NrLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvYmxvY2stY2FyZC9ibG9jay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNekUsTUFBTSxPQUFPLHVCQUF1QjtJQWNoQyxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQztJQVI5QyxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBNEIsQ0FBQztJQUM3RCxDQUFDO0lBSUQsUUFBUTtRQUNKLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckosQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQXdCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLENBQUM7O29IQTNCUSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw0TUNOcEMsc05BRXdFOzJGREkzRCx1QkFBdUI7a0JBSm5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG9DQUFvQztvQkFDOUMsV0FBVyxFQUFFLDJCQUEyQjtpQkFDM0M7aUdBR0csZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NsYXRlLWJsb2NrLWNhcmQsIFtzbGF0ZUJsb2NrQ2FyZF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnYmxvY2stY2FyZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU2xhdGVCbG9ja0NhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoJ2NlbnRlckNvbnRpYW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgY2VudGVyQ29udGlhbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgY2VudGVyUm9vdE5vZGVzOiBIVE1MRWxlbWVudFtdO1xuXG4gICAgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXQgY2VudGVyQ29udGFpbmVyRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VudGVyQ29udGlhbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCk7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGBzbGF0ZS1ibG9jay1jYXJkYCk7XG4gICAgfVxuXG4gICAgYXBwZW5kKCkge1xuICAgICAgICB0aGlzLmNlbnRlclJvb3ROb2Rlcy5mb3JFYWNoKChyb290Tm9kZSkgPT4gIXRoaXMuY2VudGVyQ29udGFpbmVyRWxlbWVudC5jb250YWlucyhyb290Tm9kZSkgJiYgdGhpcy5jZW50ZXJDb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHJvb3ROb2RlKSk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUNlbnRlcihyb290Tm9kZXM6IEhUTUxFbGVtZW50W10pIHtcbiAgICAgICAgdGhpcy5jZW50ZXJSb290Tm9kZXMgPSByb290Tm9kZXM7XG4gICAgfVxufSIsIjxzcGFuIGNhcmQtdGFyZ2V0PVwiY2FyZC1sZWZ0XCIgY2xhc3M9XCJjYXJkLWxlZnRcIj57eyAgJ1xcdUZFRkYnIH19PC9zcGFuPlxuPGRpdiBjYXJkLXRhcmdldD1cImNhcmQtY2VudGVyXCIgI2NlbnRlckNvbnRpYW5lcj48L2Rpdj5cbjxzcGFuIGNhcmQtdGFyZ2V0PVwiY2FyZC1yaWdodFwiIGNsYXNzPVwiY2FyZC1yaWdodFwiPnt7ICAnXFx1RkVGRicgfX08L3NwYW4+Il19
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9ibG9jay1jYXJkL2Jsb2NrLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvYmxvY2stY2FyZC9ibG9jay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNekUsTUFBTSxPQUFPLHVCQUF1QjtJQWNoQyxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQztJQVI5QyxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBNEIsQ0FBQztJQUM3RCxDQUFDO0lBSUQsUUFBUTtRQUNKLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckosQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQXdCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLENBQUM7O29IQTNCUSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw0TUNOcEMsc05BRXdFOzJGREkzRCx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0ksb0NBQW9DO2lHQUs5QyxlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2xhdGUtYmxvY2stY2FyZCwgW3NsYXRlQmxvY2tDYXJkXScsXG4gICAgdGVtcGxhdGVVcmw6ICdibG9jay1jYXJkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTbGF0ZUJsb2NrQ2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnY2VudGVyQ29udGlhbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBjZW50ZXJDb250aWFuZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBjZW50ZXJSb290Tm9kZXM6IEhUTUxFbGVtZW50W107XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGdldCBjZW50ZXJDb250YWluZXJFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jZW50ZXJDb250aWFuZXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYHNsYXRlLWJsb2NrLWNhcmRgKTtcbiAgICB9XG5cbiAgICBhcHBlbmQoKSB7XG4gICAgICAgIHRoaXMuY2VudGVyUm9vdE5vZGVzLmZvckVhY2goKHJvb3ROb2RlKSA9PiAhdGhpcy5jZW50ZXJDb250YWluZXJFbGVtZW50LmNvbnRhaW5zKHJvb3ROb2RlKSAmJiB0aGlzLmNlbnRlckNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQocm9vdE5vZGUpKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplQ2VudGVyKHJvb3ROb2RlczogSFRNTEVsZW1lbnRbXSkge1xuICAgICAgICB0aGlzLmNlbnRlclJvb3ROb2RlcyA9IHJvb3ROb2RlcztcbiAgICB9XG59IiwiPHNwYW4gY2FyZC10YXJnZXQ9XCJjYXJkLWxlZnRcIiBjbGFzcz1cImNhcmQtbGVmdFwiPnt7ICAnXFx1RkVGRicgfX08L3NwYW4+XG48ZGl2IGNhcmQtdGFyZ2V0PVwiY2FyZC1jZW50ZXJcIiAjY2VudGVyQ29udGlhbmVyPjwvZGl2PlxuPHNwYW4gY2FyZC10YXJnZXQ9XCJjYXJkLXJpZ2h0XCIgY2xhc3M9XCJjYXJkLXJpZ2h0XCI+e3sgICdcXHVGRUZGJyB9fTwvc3Bhbj4iXX0=
@@ -15,14 +15,14 @@ export class SlateChildrenComponent extends ViewContainer {
15
15
  ngOnInit() {
16
16
  }
17
17
  }
18
- SlateChildrenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SlateChildrenComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
- SlateChildrenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.7", type: SlateChildrenComponent, selector: "slate-children", inputs: { children: "children", context: "context", viewContext: "viewContext" }, viewQueries: [{ propertyName: "childrenComponent", predicate: SlateDescendantComponent, descendants: true, read: SlateDescendantComponent }], usesInheritance: true, ngImport: i0, template: `<slate-descendant
18
+ SlateChildrenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SlateChildrenComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
+ SlateChildrenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: SlateChildrenComponent, selector: "slate-children", inputs: { children: "children", context: "context", viewContext: "viewContext" }, viewQueries: [{ propertyName: "childrenComponent", predicate: SlateDescendantComponent, descendants: true, read: SlateDescendantComponent }], usesInheritance: true, ngImport: i0, template: `<slate-descendant
20
20
  [descendant]="descendant"
21
21
  [context]="context" [viewContext]="viewContext"
22
22
  [viewContext]="viewContext"
23
23
  [index]="index"
24
24
  *ngFor="let descendant of children;let index = index; trackBy: trackBy"></slate-descendant>`, isInline: true, components: [{ type: i1.SlateDescendantComponent, selector: "slate-descendant", inputs: ["descendant", "context", "viewContext", "index"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SlateChildrenComponent, decorators: [{
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SlateChildrenComponent, decorators: [{
26
26
  type: Component,
27
27
  args: [{
28
28
  selector: 'slate-children',
@@ -0,0 +1,183 @@
1
+ import { ChangeDetectionStrategy, Component, Inject, Input } from "@angular/core";
2
+ import { SlateBlockCardComponent } 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 { SlateDefaultTextComponent } from "../text/default-text.component";
8
+ import { SlateVoidTextComponent } 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 SlateDescendantComponent extends ViewContainerItem {
14
+ constructor(viewContainerRef, defaultElementComponentType) {
15
+ super(viewContainerRef);
16
+ this.viewContainerRef = viewContainerRef;
17
+ this.defaultElementComponentType = defaultElementComponentType;
18
+ }
19
+ get rootNodes() {
20
+ if (this.blockCardComponentRef) {
21
+ return [this.blockCardComponentRef.instance.nativeElement];
22
+ }
23
+ return super.getRootNodes();
24
+ }
25
+ get isBlockCard() {
26
+ return this.viewContext.editor.isBlockCard(this.descendant);
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(SlateBlockCardComponent);
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({ code: SlateErrorCode.GetStartPointError, nativeError: error });
88
+ return { selection: null, decorations: [] };
89
+ }
90
+ }
91
+ getContext() {
92
+ if (Element.isElement(this.descendant)) {
93
+ const computedContext = this.getCommonContext();
94
+ const key = AngularEditor.findKey(this.viewContext.editor, this.descendant);
95
+ const isInline = this.viewContext.editor.isInline(this.descendant);
96
+ const isVoid = this.viewContext.editor.isVoid(this.descendant);
97
+ const elementContext = {
98
+ element: this.descendant,
99
+ ...computedContext,
100
+ attributes: {
101
+ 'data-slate-node': 'element',
102
+ 'data-slate-key': key.id
103
+ },
104
+ decorate: this.context.decorate,
105
+ readonly: this.context.readonly
106
+ };
107
+ if (isInline) {
108
+ elementContext.attributes['data-slate-inline'] = true;
109
+ }
110
+ if (isVoid) {
111
+ elementContext.attributes['data-slate-void'] = true;
112
+ elementContext.attributes.contenteditable = false;
113
+ }
114
+ return elementContext;
115
+ }
116
+ else {
117
+ const computedContext = this.getCommonContext();
118
+ const isLeafBlock = AngularEditor.isLeafBlock(this.viewContext.editor, this.context.parent);
119
+ const textContext = {
120
+ decorations: computedContext.decorations,
121
+ isLast: isLeafBlock && this.index === this.context.parent.children.length - 1,
122
+ parent: this.context.parent,
123
+ text: this.descendant
124
+ };
125
+ return textContext;
126
+ }
127
+ }
128
+ getViewType() {
129
+ if (Element.isElement(this.descendant)) {
130
+ return (this.viewContext.renderElement && this.viewContext.renderElement(this.descendant)) || this.defaultElementComponentType;
131
+ }
132
+ else {
133
+ const isVoid = this.viewContext.editor.isVoid(this.context.parent);
134
+ return isVoid ? SlateVoidTextComponent : (this.viewContext.renderText && this.viewContext.renderText(this.descendant)) || SlateDefaultTextComponent;
135
+ }
136
+ }
137
+ memoizedElementContext(prev, next) {
138
+ return (prev.element === next.element &&
139
+ (!this.viewContext.isStrictDecorate || prev.decorate === next.decorate) &&
140
+ prev.readonly === next.readonly &&
141
+ isDecoratorRangeListEqual(prev.decorations, next.decorations) &&
142
+ (prev.selection === next.selection ||
143
+ (!!prev.selection &&
144
+ !!next.selection &&
145
+ Range.equals(prev.selection, next.selection))));
146
+ }
147
+ memoizedTextContext(prev, next) {
148
+ return (next.parent === prev.parent &&
149
+ next.isLast === prev.isLast &&
150
+ next.text === prev.text &&
151
+ isDecoratorRangeListEqual(next.decorations, prev.decorations));
152
+ }
153
+ memoizedContext(prev, next) {
154
+ if (Element.isElement(this.descendant)) {
155
+ return this.memoizedElementContext(prev, next);
156
+ }
157
+ else {
158
+ return this.memoizedTextContext(prev, next);
159
+ }
160
+ }
161
+ }
162
+ SlateDescendantComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SlateDescendantComponent, deps: [{ token: i0.ViewContainerRef }, { token: SLATE_DEFAULT_ELEMENT_COMPONENT_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
163
+ SlateDescendantComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: SlateDescendantComponent, 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 });
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SlateDescendantComponent, decorators: [{
165
+ type: Component,
166
+ args: [{
167
+ selector: 'slate-descendant',
168
+ template: '',
169
+ changeDetection: ChangeDetectionStrategy.OnPush
170
+ }]
171
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: undefined, decorators: [{
172
+ type: Inject,
173
+ args: [SLATE_DEFAULT_ELEMENT_COMPONENT_TOKEN]
174
+ }] }]; }, propDecorators: { descendant: [{
175
+ type: Input
176
+ }], context: [{
177
+ type: Input
178
+ }], viewContext: [{
179
+ type: Input
180
+ }], index: [{
181
+ type: Input
182
+ }] } });
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY2VuZGFudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9kZXNjZW5kYW50L2Rlc2NlbmRhbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQU9uRyxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsaUJBQW1HO0lBb0I3SSxZQUFzQixnQkFBa0MsRUFDRSwyQkFBZ0U7UUFDdEgsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFGTCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ0UsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUFxQztJQUUxSCxDQUFDO0lBZEQsSUFBSSxTQUFTO1FB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QlEsTUFBTTsyQkFBQyxxQ0FBcUM7NENBcEJ4QyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFNsYXRlQmxvY2tDYXJkQ29tcG9uZW50IH0gZnJvbSBcIi4uL2Jsb2NrLWNhcmQvYmxvY2stY2FyZC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFZpZXdDb250YWluZXJJdGVtIH0gZnJvbSAnLi4vLi4vdmlldy9jb250YWluZXItaXRlbSc7XG5pbXBvcnQgeyBEZXNjZW5kYW50LCBFZGl0b3IsIFJhbmdlLCBFbGVtZW50IH0gZnJvbSBcInNsYXRlXCI7XG5pbXBvcnQgeyBTbGF0ZUNoaWxkcmVuQ29udGV4dCwgU2xhdGVFbGVtZW50Q29udGV4dCwgU2xhdGVUZXh0Q29udGV4dCwgU2xhdGVWaWV3Q29udGV4dCB9IGZyb20gXCIuLi8uLi92aWV3L2NvbnRleHRcIjtcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IgfSBmcm9tIFwiLi4vLi4vcGx1Z2lucy9hbmd1bGFyLWVkaXRvclwiO1xuaW1wb3J0IHsgTk9ERV9UT19JTkRFWCwgTk9ERV9UT19QQVJFTlQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvd2Vhay1tYXBzXCI7XG5pbXBvcnQgeyBCYXNlRWxlbWVudENvbXBvbmVudCwgQmFzZVRleHRDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vdmlldy9iYXNlXCI7XG5pbXBvcnQgeyBTbGF0ZURlZmF1bHRUZXh0Q29tcG9uZW50IH0gZnJvbSBcIi4uL3RleHQvZGVmYXVsdC10ZXh0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2xhdGVWb2lkVGV4dENvbXBvbmVudCB9IGZyb20gXCIuLi90ZXh0L3ZvaWQtdGV4dC5jb21wb25lbnRcIjtcbmltcG9ydCB7IGlzRGVjb3JhdG9yUmFuZ2VMaXN0RXF1YWwgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIFZpZXdUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZpZXdcIjtcbmltcG9ydCB7IFNsYXRlRXJyb3JDb2RlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBTTEFURV9ERUZBVUxUX0VMRU1FTlRfQ09NUE9ORU5UX1RPS0VOIH0gZnJvbSBcIi4uL2VsZW1lbnQvZGVmYXVsdC1lbGVtZW50LmNvbXBvbmVudC50b2tlblwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NsYXRlLWRlc2NlbmRhbnQnLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTbGF0ZURlc2NlbmRhbnRDb21wb25lbnQgZXh0ZW5kcyBWaWV3Q29udGFpbmVySXRlbTxTbGF0ZUVsZW1lbnRDb250ZXh0IHwgU2xhdGVUZXh0Q29udGV4dCwgQmFzZUVsZW1lbnRDb21wb25lbnQgfCBCYXNlVGV4dENvbXBvbmVudD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgZGVzY2VuZGFudDogRGVzY2VuZGFudDtcblxuICAgIEBJbnB1dCgpIGNvbnRleHQ6IFNsYXRlQ2hpbGRyZW5Db250ZXh0O1xuXG4gICAgQElucHV0KCkgdmlld0NvbnRleHQ6IFNsYXRlVmlld0NvbnRleHQ7XG5cbiAgICBASW5wdXQoKSBpbmRleDogbnVtYmVyO1xuXG4gICAgZ2V0IHJvb3ROb2RlcygpOiBIVE1MRWxlbWVudFtdIHtcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmLmluc3RhbmNlLm5hdGl2ZUVsZW1lbnRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRSb290Tm9kZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgaXNCbG9ja0NhcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0LmVkaXRvci5pc0Jsb2NrQ2FyZCh0aGlzLmRlc2NlbmRhbnQpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBASW5qZWN0KFNMQVRFX0RFRkFVTFRfRUxFTUVOVF9DT01QT05FTlRfVE9LRU4pIHB1YmxpYyBkZWZhdWx0RWxlbWVudENvbXBvbmVudFR5cGU6IENvbXBvbmVudFR5cGU8QmFzZUVsZW1lbnRDb21wb25lbnQ+KSB7XG4gICAgICAgIHN1cGVyKHZpZXdDb250YWluZXJSZWYpXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZGVzY2VuZGFudCwgdGhpcy5pbmRleCk7XG4gICAgICAgIE5PREVfVE9fUEFSRU5ULnNldCh0aGlzLmRlc2NlbmRhbnQsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNCbG9ja0NhcmQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvY2tDYXJkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95VmlldygpIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveVZpZXcoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2tDYXJkKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZGVzY2VuZGFudCwgdGhpcy5pbmRleCk7XG4gICAgICAgIE5PREVfVE9fUEFSRU5ULnNldCh0aGlzLmRlc2NlbmRhbnQsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNCbG9ja0NhcmQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmxvY2tDYXJkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95QmxvY2tDYXJkKCkge1xuICAgICAgICBpZiAodGhpcy5ibG9ja0NhcmRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUJsb2NrQ2FyZCgpIHtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzID0gdGhpcy5yb290Tm9kZXM7XG4gICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxTbGF0ZUJsb2NrQ2FyZENvbXBvbmVudD4oU2xhdGVCbG9ja0NhcmRDb21wb25lbnQpO1xuICAgICAgICB0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5pbml0aWFsaXplQ2VudGVyKHJvb3ROb2Rlcyk7XG4gICAgfVxuXG4gICAgdXBkYXRlQmxvY2tDYXJkKCkge1xuICAgICAgICBpZiAodGhpcy5ibG9ja0NhcmRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290Tm9kZXMgPSB0aGlzLnJvb3ROb2RlcztcbiAgICAgICAgdGhpcy5jcmVhdGVCbG9ja0NhcmQoKTtcbiAgICAgICAgY29uc3QgZmlyc3RSb290Tm9kZSA9IHJvb3ROb2Rlc1swXTtcbiAgICAgICAgZmlyc3RSb290Tm9kZS5yZXBsYWNlV2l0aCh0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBnZXRDb21tb25Db250ZXh0KCk6IHsgc2VsZWN0aW9uOiBSYW5nZTsgZGVjb3JhdGlvbnM6IFJhbmdlW10gfSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKHRoaXMudmlld0NvbnRleHQuZWRpdG9yLCB0aGlzLmNvbnRleHQucGFyZW50KTtcbiAgICAgICAgY29uc3QgcCA9IHBhdGguY29uY2F0KHRoaXMuaW5kZXgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBFZGl0b3IucmFuZ2UodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIHApO1xuICAgICAgICAgICAgY29uc3Qgc2VsID0gdGhpcy5jb250ZXh0LnNlbGVjdGlvbiAmJiBSYW5nZS5pbnRlcnNlY3Rpb24ocmFuZ2UsIHRoaXMuY29udGV4dC5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgZHMgPSB0aGlzLmNvbnRleHQuZGVjb3JhdGUoW3RoaXMuZGVzY2VuZGFudCwgcF0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZWMgb2YgdGhpcy5jb250ZXh0LmRlY29yYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IFJhbmdlLmludGVyc2VjdGlvbihkZWMsIHJhbmdlKTtcbiAgICAgICAgICAgICAgICBpZiAoZCkge1xuICAgICAgICAgICAgICAgICAgICBkcy5wdXNoKGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHNlbGVjdGlvbjogc2VsLCBkZWNvcmF0aW9uczogZHMgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHQuZWRpdG9yLm9uRXJyb3IoeyBjb2RlOiBTbGF0ZUVycm9yQ29kZS5HZXRTdGFydFBvaW50RXJyb3IsIG5hdGl2ZUVycm9yOiBlcnJvciB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHNlbGVjdGlvbjogbnVsbCwgZGVjb3JhdGlvbnM6IFtdIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDb250ZXh0KCk6IFNsYXRlRWxlbWVudENvbnRleHQgfCBTbGF0ZVRleHRDb250ZXh0IHtcbiAgICAgICAgaWYgKEVsZW1lbnQuaXNFbGVtZW50KHRoaXMuZGVzY2VuZGFudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkQ29udGV4dCA9IHRoaXMuZ2V0Q29tbW9uQ29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gQW5ndWxhckVkaXRvci5maW5kS2V5KHRoaXMudmlld0NvbnRleHQuZWRpdG9yLCB0aGlzLmRlc2NlbmRhbnQpO1xuICAgICAgICAgICAgY29uc3QgaXNJbmxpbmUgPSB0aGlzLnZpZXdDb250ZXh0LmVkaXRvci5pc0lubGluZSh0aGlzLmRlc2NlbmRhbnQpO1xuICAgICAgICAgICAgY29uc3QgaXNWb2lkID0gdGhpcy52aWV3Q29udGV4dC5lZGl0b3IuaXNWb2lkKHRoaXMuZGVzY2VuZGFudCk7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50Q29udGV4dDogU2xhdGVFbGVtZW50Q29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmRlc2NlbmRhbnQsXG4gICAgICAgICAgICAgICAgLi4uY29tcHV0ZWRDb250ZXh0LFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEtc2xhdGUtbm9kZSc6ICdlbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEtc2xhdGUta2V5Jzoga2V5LmlkXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZWNvcmF0ZTogdGhpcy5jb250ZXh0LmRlY29yYXRlLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLmNvbnRleHQucmVhZG9ubHlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaXNJbmxpbmUpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dC5hdHRyaWJ1dGVzWydkYXRhLXNsYXRlLWlubGluZSddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1ZvaWQpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dC5hdHRyaWJ1dGVzWydkYXRhLXNsYXRlLXZvaWQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQuYXR0cmlidXRlcy5jb250ZW50ZWRpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50Q29udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkQ29udGV4dCA9IHRoaXMuZ2V0Q29tbW9uQ29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgaXNMZWFmQmxvY2sgPSBBbmd1bGFyRWRpdG9yLmlzTGVhZkJsb2NrKHRoaXMudmlld0NvbnRleHQuZWRpdG9yLCB0aGlzLmNvbnRleHQucGFyZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDb250ZXh0OiBTbGF0ZVRleHRDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIGRlY29yYXRpb25zOiBjb21wdXRlZENvbnRleHQuZGVjb3JhdGlvbnMsXG4gICAgICAgICAgICAgICAgaXNMYXN0OiBpc0xlYWZCbG9jayAmJiB0aGlzLmluZGV4ID09PSB0aGlzLmNvbnRleHQucGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgcGFyZW50OiB0aGlzLmNvbnRleHQucGFyZW50IGFzIEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgdGV4dDogdGhpcy5kZXNjZW5kYW50XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRleHRDb250ZXh0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Vmlld1R5cGUoKTogVmlld1R5cGUge1xuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQodGhpcy5kZXNjZW5kYW50KSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnZpZXdDb250ZXh0LnJlbmRlckVsZW1lbnQgJiYgdGhpcy52aWV3Q29udGV4dC5yZW5kZXJFbGVtZW50KHRoaXMuZGVzY2VuZGFudCkpIHx8IHRoaXMuZGVmYXVsdEVsZW1lbnRDb21wb25lbnRUeXBlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXNWb2lkID0gdGhpcy52aWV3Q29udGV4dC5lZGl0b3IuaXNWb2lkKHRoaXMuY29udGV4dC5wYXJlbnQgYXMgRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gaXNWb2lkID8gU2xhdGVWb2lkVGV4dENvbXBvbmVudCA6ICh0aGlzLnZpZXdDb250ZXh0LnJlbmRlclRleHQgJiYgdGhpcy52aWV3Q29udGV4dC5yZW5kZXJUZXh0KHRoaXMuZGVzY2VuZGFudCkpIHx8IFNsYXRlRGVmYXVsdFRleHRDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vaXplZEVsZW1lbnRDb250ZXh0KHByZXY6IFNsYXRlRWxlbWVudENvbnRleHQsIG5leHQ6IFNsYXRlRWxlbWVudENvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHByZXYuZWxlbWVudCA9PT0gbmV4dC5lbGVtZW50ICYmXG4gICAgICAgICAgICAoIXRoaXMudmlld0NvbnRleHQuaXNTdHJpY3REZWNvcmF0ZSB8fCBwcmV2LmRlY29yYXRlID09PSBuZXh0LmRlY29yYXRlKSAmJlxuICAgICAgICAgICAgcHJldi5yZWFkb25seSA9PT0gbmV4dC5yZWFkb25seSAmJlxuICAgICAgICAgICAgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbChwcmV2LmRlY29yYXRpb25zLCBuZXh0LmRlY29yYXRpb25zKSAmJlxuICAgICAgICAgICAgKHByZXYuc2VsZWN0aW9uID09PSBuZXh0LnNlbGVjdGlvbiB8fFxuICAgICAgICAgICAgICAgICghIXByZXYuc2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgICEhbmV4dC5zZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgUmFuZ2UuZXF1YWxzKHByZXYuc2VsZWN0aW9uLCBuZXh0LnNlbGVjdGlvbikpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG1lbW9pemVkVGV4dENvbnRleHQocHJldjogU2xhdGVUZXh0Q29udGV4dCwgbmV4dDogU2xhdGVUZXh0Q29udGV4dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbmV4dC5wYXJlbnQgPT09IHByZXYucGFyZW50ICYmXG4gICAgICAgICAgICBuZXh0LmlzTGFzdCA9PT0gcHJldi5pc0xhc3QgJiZcbiAgICAgICAgICAgIG5leHQudGV4dCA9PT0gcHJldi50ZXh0ICYmXG4gICAgICAgICAgICBpc0RlY29yYXRvclJhbmdlTGlzdEVxdWFsKG5leHQuZGVjb3JhdGlvbnMsIHByZXYuZGVjb3JhdGlvbnMpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbWVtb2l6ZWRDb250ZXh0KHByZXY6IFNsYXRlRWxlbWVudENvbnRleHQgfCBTbGF0ZVRleHRDb250ZXh0LCBuZXh0OiBTbGF0ZUVsZW1lbnRDb250ZXh0IHwgU2xhdGVUZXh0Q29udGV4dCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQodGhpcy5kZXNjZW5kYW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVtb2l6ZWRFbGVtZW50Q29udGV4dChwcmV2IGFzIFNsYXRlRWxlbWVudENvbnRleHQsIG5leHQgYXMgU2xhdGVFbGVtZW50Q29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tZW1vaXplZFRleHRDb250ZXh0KHByZXYgYXMgU2xhdGVUZXh0Q29udGV4dCwgbmV4dCBhcyBTbGF0ZVRleHRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==