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
package/module.d.ts CHANGED
@@ -1,21 +1,21 @@
1
1
  import * as i0 from "@angular/core";
2
- import * as i1 from "./components/editable/editable.component";
3
- import * as i2 from "./components/element/default-element.component";
4
- import * as i3 from "./components/element/element.component";
5
- import * as i4 from "./components/text/void-text.component";
6
- import * as i5 from "./components/text/default-text.component";
7
- import * as i6 from "./components/string/string.component";
8
- import * as i7 from "./components/string/template.component";
9
- import * as i8 from "./components/descendant/descendant.component";
10
- import * as i9 from "./components/children/children.component";
11
- import * as i10 from "./components/block-card/block-card.component";
12
- import * as i11 from "./components/leaf/leaf.component";
13
- import * as i12 from "./components/leaves/leaves.component";
14
- import * as i13 from "./components/leaf/default-leaf.component";
15
- import * as i14 from "./components/string/default-string.component";
16
- import * as i15 from "@angular/common";
2
+ import * as i1 from "@angular/common";
3
+ import * as i2 from "./components/editable/editable.component";
4
+ import * as i3 from "./components/element/default-element.component";
5
+ import * as i4 from "./components/element/element.component";
6
+ import * as i5 from "./components/text/void-text.component";
7
+ import * as i6 from "./components/text/default-text.component";
8
+ import * as i7 from "./components/string/string.component";
9
+ import * as i8 from "./components/string/template.component";
10
+ import * as i9 from "./components/descendant/descendant.component";
11
+ import * as i10 from "./components/children/children.component";
12
+ import * as i11 from "./components/block-card/block-card.component";
13
+ import * as i12 from "./components/leaf/leaf.component";
14
+ import * as i13 from "./components/leaves/leaves.component";
15
+ import * as i14 from "./components/leaf/default-leaf.component";
16
+ import * as i15 from "./components/string/default-string.component";
17
17
  export declare class SlateModule {
18
18
  static ɵfac: i0.ɵɵFactoryDeclaration<SlateModule, never>;
19
- static ɵmod: i0.ɵɵNgModuleDeclaration<SlateModule, [typeof i1.SlateEditableComponent, typeof i2.SlateDefaultElementComponent, typeof i3.SlateElementComponent, typeof i4.SlateVoidTextComponent, typeof i5.SlateDefaultTextComponent, typeof i6.SlateStringComponent, typeof i7.SlateStringTemplateComponent, typeof i8.SlateDescendantComponent, typeof i9.SlateChildrenComponent, typeof i10.SlateBlockCardComponent, typeof i11.SlateLeafComponent, typeof i12.SlateLeavesComponent, typeof i13.SlateDefaultLeafComponent, typeof i14.SlateDefaultStringComponent], [typeof i15.CommonModule], [typeof i1.SlateEditableComponent, typeof i9.SlateChildrenComponent, typeof i3.SlateElementComponent, typeof i12.SlateLeavesComponent, typeof i6.SlateStringComponent, typeof i14.SlateDefaultStringComponent]>;
19
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SlateModule, never, [typeof i1.CommonModule, typeof i2.SlateEditable, typeof i3.SlateDefaultElement, typeof i4.SlateElement, typeof i5.SlateVoidText, typeof i6.SlateDefaultText, typeof i7.SlateString, typeof i8.SlateStringTemplate, typeof i9.SlateDescendant, typeof i10.SlateChildren, typeof i11.SlateBlockCard, typeof i12.SlateLeaf, typeof i13.SlateLeaves, typeof i14.SlateDefaultLeaf, typeof i15.SlateDefaultString], [typeof i2.SlateEditable, typeof i10.SlateChildren, typeof i4.SlateElement, typeof i13.SlateLeaves, typeof i7.SlateString, typeof i15.SlateDefaultString]>;
20
20
  static ɵinj: i0.ɵɵInjectorDeclaration<SlateModule>;
21
21
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slate-angular",
3
- "version": "15.1.3",
3
+ "version": "16.1.0-next",
4
4
  "description": "Angular view layer for Slate",
5
5
  "author": "pubuzhixing <pubuzhixing@gmail.com>",
6
6
  "homepage": "https://github.com/worktile/slate-angular#readme",
@@ -9,22 +9,25 @@
9
9
  "slate": ">= 0.63.0",
10
10
  "slate-history": "^0.66.0",
11
11
  "debug": "^4.1.1",
12
- "direction": "^1.0.3",
13
- "is-hotkey": "^0.1.6",
12
+ "direction": "^2.0.1",
13
+ "is-hotkey": "^0.2.0",
14
14
  "scroll-into-view-if-needed": "^2.2.20"
15
15
  },
16
16
  "dependencies": {
17
+ "slate": "^0.72.8",
18
+ "slate-history": "^0.66.0",
19
+ "direction": "^2.0.1",
20
+ "is-hotkey": "^0.2.0",
21
+ "scroll-into-view-if-needed": "^2.2.20",
17
22
  "tslib": "^2.5.0"
18
23
  },
19
24
  "exports": {
20
25
  ".": {
21
26
  "sass": "./styles/index.scss",
22
27
  "types": "./index.d.ts",
23
- "esm2020": "./esm2020/slate-angular.mjs",
24
- "es2020": "./fesm2020/slate-angular.mjs",
25
- "es2015": "./fesm2015/slate-angular.mjs",
26
- "node": "./fesm2015/slate-angular.mjs",
27
- "default": "./fesm2020/slate-angular.mjs"
28
+ "esm2022": "./esm2022/slate-angular.mjs",
29
+ "esm": "./esm2022/slate-angular.mjs",
30
+ "default": "./fesm2022/slate-angular.mjs"
28
31
  },
29
32
  "./styles": {
30
33
  "sass": "./styles/index.scss"
@@ -36,11 +39,7 @@
36
39
  "default": "./package.json"
37
40
  }
38
41
  },
39
- "module": "fesm2015/slate-angular.mjs",
40
- "es2020": "fesm2020/slate-angular.mjs",
41
- "esm2020": "esm2020/slate-angular.mjs",
42
- "fesm2020": "fesm2020/slate-angular.mjs",
43
- "fesm2015": "fesm2015/slate-angular.mjs",
42
+ "module": "fesm2022/slate-angular.mjs",
44
43
  "typings": "index.d.ts",
45
44
  "sideEffects": false
46
45
  }
package/view/base.d.ts CHANGED
@@ -26,7 +26,7 @@ export declare abstract class BaseComponent<T = SlateTextContext | SlateLeafCont
26
26
  constructor(elementRef: ElementRef, cdr: ChangeDetectorRef);
27
27
  abstract onContextChange(): any;
28
28
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseComponent<any, any>, never>;
29
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseComponent<any, any>, never, never, { "context": "context"; "viewContext": "viewContext"; }, {}, never, never, false, never>;
29
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BaseComponent<any, any>, never, never, { "context": { "alias": "context"; "required": false; }; "viewContext": { "alias": "viewContext"; "required": false; }; }, {}, never, never, false, never>;
30
30
  }
31
31
  /**
32
32
  * base class for custom leaf component
@@ -1,5 +1,5 @@
1
1
  import { ComponentRef, EmbeddedViewRef, ViewContainerRef } from '@angular/core';
2
- import { SlateBlockCardComponent } from '../components/block-card/block-card.component';
2
+ import { SlateBlockCard } from '../components/block-card/block-card.component';
3
3
  import { ViewType } from '../types/view';
4
4
  import { BaseComponent, BaseEmbeddedView } from './base';
5
5
  import { SlateElementContext, SlateLeafContext, SlateStringContext, SlateTextContext, SlateViewContext } from './context';
@@ -14,7 +14,7 @@ export declare abstract class ViewContainerItem<T = SlateElementContext | SlateT
14
14
  initialized: boolean;
15
15
  embeddedViewRef: EmbeddedViewRef<BaseEmbeddedView<T>>;
16
16
  embeddedViewContext: BaseEmbeddedView<T>;
17
- blockCardComponentRef: ComponentRef<SlateBlockCardComponent>;
17
+ blockCardComponentRef: ComponentRef<SlateBlockCard>;
18
18
  componentRef: ComponentRef<K>;
19
19
  viewType: ViewType;
20
20
  viewContext: SlateViewContext;
@@ -29,5 +29,5 @@ export declare abstract class ViewContainerItem<T = SlateElementContext | SlateT
29
29
  updateView(): void;
30
30
  appendBlockCardElement(): void;
31
31
  static ɵfac: i0.ɵɵFactoryDeclaration<ViewContainerItem<any, any>, never>;
32
- static ɵdir: i0.ɵɵDirectiveDeclaration<ViewContainerItem<any, any>, never, never, { "viewContext": "viewContext"; }, {}, never, never, false, never>;
32
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ViewContainerItem<any, any>, never, never, { "viewContext": { "alias": "viewContext"; "required": false; }; }, {}, never, never, false, never>;
33
33
  }
@@ -18,5 +18,5 @@ export declare abstract class ViewContainer<T extends ViewContainerItem> impleme
18
18
  createFragment(): DocumentFragment;
19
19
  handleContainerItemChange(record: IterableChangeRecord<T>, parentElement: HTMLElement): void;
20
20
  static ɵfac: i0.ɵɵFactoryDeclaration<ViewContainer<any>, never>;
21
- static ɵdir: i0.ɵɵDirectiveDeclaration<ViewContainer<any>, never, never, { "viewContext": "viewContext"; }, {}, never, never, false, never>;
21
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ViewContainer<any>, never, never, { "viewContext": { "alias": "viewContext"; "required": false; }; }, {}, never, never, false, never>;
22
22
  }
package/view/context.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { NodeEntry, Range, Element, Ancestor, Text } from 'slate';
2
- import { SlateStringTemplateComponent } from '../components/string/template.component';
2
+ import { SlateStringTemplate } from '../components/string/template.component';
3
3
  import { AngularEditor } from '../plugins/angular-editor';
4
4
  import { ViewType } from '../types/view';
5
5
  export interface SlateViewContext<T extends AngularEditor = AngularEditor> {
6
6
  editor: T;
7
- templateComponent: SlateStringTemplateComponent;
7
+ templateComponent: SlateStringTemplate;
8
8
  trackBy: (element: Element) => any;
9
9
  renderElement?: (element: Element) => ViewType;
10
10
  renderLeaf?: (text: Text) => ViewType;
@@ -1,33 +0,0 @@
1
- import { Component, ViewChild } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class SlateBlockCardComponent {
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
- }
24
- SlateBlockCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateBlockCardComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
25
- SlateBlockCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", 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>\n" });
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateBlockCardComponent, decorators: [{
27
- type: Component,
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>\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9ibG9jay1jYXJkL2Jsb2NrLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvYmxvY2stY2FyZC9ibG9jay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNekUsTUFBTSxPQUFPLHVCQUF1QjtJQU1oQyxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBNEIsQ0FBQztJQUM3RCxDQUFDO0lBRUQsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFHLENBQUM7SUFFOUMsUUFBUTtRQUNKLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQ3hCLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQ25ILENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBd0I7UUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFDckMsQ0FBQzs7b0hBN0JRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLDRNQ05wQyxzTkFHQTsyRkRHYSx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0ksb0NBQW9DO2lHQUs5QyxlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NsYXRlLWJsb2NrLWNhcmQsIFtzbGF0ZUJsb2NrQ2FyZF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnYmxvY2stY2FyZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU2xhdGVCbG9ja0NhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoJ2NlbnRlckNvbnRpYW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgY2VudGVyQ29udGlhbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgY2VudGVyUm9vdE5vZGVzOiBIVE1MRWxlbWVudFtdO1xuXG4gICAgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXQgY2VudGVyQ29udGFpbmVyRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VudGVyQ29udGlhbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCk7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGBzbGF0ZS1ibG9jay1jYXJkYCk7XG4gICAgfVxuXG4gICAgYXBwZW5kKCkge1xuICAgICAgICB0aGlzLmNlbnRlclJvb3ROb2Rlcy5mb3JFYWNoKFxuICAgICAgICAgICAgcm9vdE5vZGUgPT4gIXRoaXMuY2VudGVyQ29udGFpbmVyRWxlbWVudC5jb250YWlucyhyb290Tm9kZSkgJiYgdGhpcy5jZW50ZXJDb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHJvb3ROb2RlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVDZW50ZXIocm9vdE5vZGVzOiBIVE1MRWxlbWVudFtdKSB7XG4gICAgICAgIHRoaXMuY2VudGVyUm9vdE5vZGVzID0gcm9vdE5vZGVzO1xuICAgIH1cbn1cbiIsIjxzcGFuIGNhcmQtdGFyZ2V0PVwiY2FyZC1sZWZ0XCIgY2xhc3M9XCJjYXJkLWxlZnRcIj57eyAnXFx1RkVGRicgfX08L3NwYW4+XG48ZGl2IGNhcmQtdGFyZ2V0PVwiY2FyZC1jZW50ZXJcIiAjY2VudGVyQ29udGlhbmVyPjwvZGl2PlxuPHNwYW4gY2FyZC10YXJnZXQ9XCJjYXJkLXJpZ2h0XCIgY2xhc3M9XCJjYXJkLXJpZ2h0XCI+e3sgJ1xcdUZFRkYnIH19PC9zcGFuPlxuIl19
@@ -1,50 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input, ViewChildren } from '@angular/core';
2
- import { SlateDescendantComponent } from '../descendant/descendant.component';
3
- import { AngularEditor } from '../../plugins/angular-editor';
4
- import { ViewContainer } from '../../view/container';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "../descendant/descendant.component";
8
- export class SlateChildrenComponent extends ViewContainer {
9
- constructor() {
10
- super(...arguments);
11
- this.trackBy = (index, node) => {
12
- return this.viewContext.trackBy(node) || AngularEditor.findKey(this.viewContext.editor, node);
13
- };
14
- }
15
- ngOnInit() { }
16
- }
17
- SlateChildrenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateChildrenComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
18
- SlateChildrenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", 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
19
- [descendant]="descendant"
20
- [context]="context"
21
- [viewContext]="viewContext"
22
- [viewContext]="viewContext"
23
- [index]="index"
24
- *ngFor="let descendant of children; let index = index; trackBy: trackBy"
25
- ></slate-descendant>`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.SlateDescendantComponent, selector: "slate-descendant", inputs: ["descendant", "context", "viewContext", "index"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateChildrenComponent, decorators: [{
27
- type: Component,
28
- args: [{
29
- selector: 'slate-children',
30
- template: `<slate-descendant
31
- [descendant]="descendant"
32
- [context]="context"
33
- [viewContext]="viewContext"
34
- [viewContext]="viewContext"
35
- [index]="index"
36
- *ngFor="let descendant of children; let index = index; trackBy: trackBy"
37
- ></slate-descendant>`,
38
- changeDetection: ChangeDetectionStrategy.OnPush
39
- }]
40
- }], propDecorators: { children: [{
41
- type: Input
42
- }], context: [{
43
- type: Input
44
- }], viewContext: [{
45
- type: Input
46
- }], childrenComponent: [{
47
- type: ViewChildren,
48
- args: [SlateDescendantComponent, { read: SlateDescendantComponent }]
49
- }] } });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGRyZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY2hpbGRyZW4vY2hpbGRyZW4uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQWNyRCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsYUFBdUM7SUFabkY7O1FBd0JJLFlBQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEcsQ0FBQyxDQUFDO0tBQ0w7SUFMRyxRQUFRLEtBQUksQ0FBQzs7bUhBVkosc0JBQXNCO3VHQUF0QixzQkFBc0IsOEtBT2pCLHdCQUF3QiwyQkFBVSx3QkFBd0Isb0RBakI5RDs7Ozs7Ozt5QkFPVzsyRkFHWixzQkFBc0I7a0JBWmxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFOzs7Ozs7O3lCQU9XO29CQUNyQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7OEJBRVksUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFHTixpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2xhdGVEZXNjZW5kYW50Q29tcG9uZW50IH0gZnJvbSAnLi4vZGVzY2VuZGFudC9kZXNjZW5kYW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZXNjZW5kYW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciB9IGZyb20gJy4uLy4uL3BsdWdpbnMvYW5ndWxhci1lZGl0b3InO1xuaW1wb3J0IHsgU2xhdGVDaGlsZHJlbkNvbnRleHQsIFNsYXRlVmlld0NvbnRleHQgfSBmcm9tICcuLi8uLi92aWV3L2NvbnRleHQnO1xuaW1wb3J0IHsgVmlld0NvbnRhaW5lciB9IGZyb20gJy4uLy4uL3ZpZXcvY29udGFpbmVyJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzbGF0ZS1jaGlsZHJlbicsXG4gICAgdGVtcGxhdGU6IGA8c2xhdGUtZGVzY2VuZGFudFxuICAgICAgICBbZGVzY2VuZGFudF09XCJkZXNjZW5kYW50XCJcbiAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgICAgIFt2aWV3Q29udGV4dF09XCJ2aWV3Q29udGV4dFwiXG4gICAgICAgIFt2aWV3Q29udGV4dF09XCJ2aWV3Q29udGV4dFwiXG4gICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBkZXNjZW5kYW50IG9mIGNoaWxkcmVuOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgPjwvc2xhdGUtZGVzY2VuZGFudD5gLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNsYXRlQ2hpbGRyZW5Db21wb25lbnQgZXh0ZW5kcyBWaWV3Q29udGFpbmVyPFNsYXRlRGVzY2VuZGFudENvbXBvbmVudD4gaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIGNoaWxkcmVuOiBEZXNjZW5kYW50W107XG5cbiAgICBASW5wdXQoKSBjb250ZXh0OiBTbGF0ZUNoaWxkcmVuQ29udGV4dDtcblxuICAgIEBJbnB1dCgpIHZpZXdDb250ZXh0OiBTbGF0ZVZpZXdDb250ZXh0O1xuXG4gICAgQFZpZXdDaGlsZHJlbihTbGF0ZURlc2NlbmRhbnRDb21wb25lbnQsIHsgcmVhZDogU2xhdGVEZXNjZW5kYW50Q29tcG9uZW50IH0pXG4gICAgY2hpbGRyZW5Db21wb25lbnQ6IFF1ZXJ5TGlzdDxTbGF0ZURlc2NlbmRhbnRDb21wb25lbnQ+O1xuXG4gICAgbmdPbkluaXQoKSB7fVxuXG4gICAgdHJhY2tCeSA9IChpbmRleCwgbm9kZSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dC50cmFja0J5KG5vZGUpIHx8IEFuZ3VsYXJFZGl0b3IuZmluZEtleSh0aGlzLnZpZXdDb250ZXh0LmVkaXRvciwgbm9kZSk7XG4gICAgfTtcbn1cbiJdfQ==
@@ -1,185 +0,0 @@
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
- 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(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({
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
- ? SlateVoidTextComponent
139
- : (this.viewContext.renderText && this.viewContext.renderText(this.descendant)) || SlateDefaultTextComponent;
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
- }
164
- SlateDescendantComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateDescendantComponent, deps: [{ token: i0.ViewContainerRef }, { token: SLATE_DEFAULT_ELEMENT_COMPONENT_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
165
- SlateDescendantComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", 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 });
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateDescendantComponent, decorators: [{
167
- type: Component,
168
- args: [{
169
- selector: 'slate-descendant',
170
- template: '',
171
- changeDetection: ChangeDetectionStrategy.OnPush
172
- }]
173
- }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: undefined, decorators: [{
174
- type: Inject,
175
- args: [SLATE_DEFAULT_ELEMENT_COMPONENT_TOKEN]
176
- }] }]; }, propDecorators: { descendant: [{
177
- type: Input
178
- }], context: [{
179
- type: Input
180
- }], viewContext: [{
181
- type: Input
182
- }], index: [{
183
- type: Input
184
- }] } });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY2VuZGFudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9kZXNjZW5kYW50L2Rlc2NlbmRhbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQU9uRyxNQUFNLE9BQU8sd0JBQ1QsU0FBUSxpQkFBbUc7SUFXM0csSUFBSSxTQUFTO1FBQ1QsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDOUQ7UUFDRCxPQUFPLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNo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MEJRLE1BQU07MkJBQUMscUNBQXFDOzRDQXJCeEMsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2xhdGVCbG9ja0NhcmRDb21wb25lbnQgfSBmcm9tICcuLi9ibG9jay1jYXJkL2Jsb2NrLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IFZpZXdDb250YWluZXJJdGVtIH0gZnJvbSAnLi4vLi4vdmlldy9jb250YWluZXItaXRlbSc7XG5pbXBvcnQgeyBEZXNjZW5kYW50LCBFZGl0b3IsIFJhbmdlLCBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgU2xhdGVDaGlsZHJlbkNvbnRleHQsIFNsYXRlRWxlbWVudENvbnRleHQsIFNsYXRlVGV4dENvbnRleHQsIFNsYXRlVmlld0NvbnRleHQgfSBmcm9tICcuLi8uLi92aWV3L2NvbnRleHQnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciB9IGZyb20gJy4uLy4uL3BsdWdpbnMvYW5ndWxhci1lZGl0b3InO1xuaW1wb3J0IHsgTk9ERV9UT19JTkRFWCwgTk9ERV9UT19QQVJFTlQgfSBmcm9tICcuLi8uLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgQmFzZUVsZW1lbnRDb21wb25lbnQsIEJhc2VUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdmlldy9iYXNlJztcbmltcG9ydCB7IFNsYXRlRGVmYXVsdFRleHRDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0L2RlZmF1bHQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2xhdGVWb2lkVGV4dENvbXBvbmVudCB9IGZyb20gJy4uL3RleHQvdm9pZC10ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpc0RlY29yYXRvclJhbmdlTGlzdEVxdWFsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgVmlld1R5cGUgfSBmcm9tICcuLi8uLi90eXBlcy92aWV3JztcbmltcG9ydCB7IFNsYXRlRXJyb3JDb2RlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgU0xBVEVfREVGQVVMVF9FTEVNRU5UX0NPTVBPTkVOVF9UT0tFTiB9IGZyb20gJy4uL2VsZW1lbnQvZGVmYXVsdC1lbGVtZW50LmNvbXBvbmVudC50b2tlbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2xhdGUtZGVzY2VuZGFudCcsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNsYXRlRGVzY2VuZGFudENvbXBvbmVudFxuICAgIGV4dGVuZHMgVmlld0NvbnRhaW5lckl0ZW08U2xhdGVFbGVtZW50Q29udGV4dCB8IFNsYXRlVGV4dENvbnRleHQsIEJhc2VFbGVtZW50Q29tcG9uZW50IHwgQmFzZVRleHRDb21wb25lbnQ+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlc1xue1xuICAgIEBJbnB1dCgpIGRlc2NlbmRhbnQ6IERlc2NlbmRhbnQ7XG5cbiAgICBASW5wdXQoKSBjb250ZXh0OiBTbGF0ZUNoaWxkcmVuQ29udGV4dDtcblxuICAgIEBJbnB1dCgpIHZpZXdDb250ZXh0OiBTbGF0ZVZpZXdDb250ZXh0O1xuXG4gICAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcblxuICAgIGdldCByb290Tm9kZXMoKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgICAgIGlmICh0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5uYXRpdmVFbGVtZW50XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0Um9vdE5vZGVzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzQmxvY2tDYXJkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dC5lZGl0b3IuaXNCbG9ja0NhcmQodGhpcy5kZXNjZW5kYW50KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIEBJbmplY3QoU0xBVEVfREVGQVVMVF9FTEVNRU5UX0NPTVBPTkVOVF9UT0tFTilcbiAgICAgICAgcHVibGljIGRlZmF1bHRFbGVtZW50Q29tcG9uZW50VHlwZTogQ29tcG9uZW50VHlwZTxCYXNlRWxlbWVudENvbXBvbmVudD5cbiAgICApIHtcbiAgICAgICAgc3VwZXIodmlld0NvbnRhaW5lclJlZik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZGVzY2VuZGFudCwgdGhpcy5pbmRleCk7XG4gICAgICAgIE5PREVfVE9fUEFSRU5ULnNldCh0aGlzLmRlc2NlbmRhbnQsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNCbG9ja0NhcmQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvY2tDYXJkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95VmlldygpIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveVZpZXcoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2tDYXJkKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZGVzY2VuZGFudCwgdGhpcy5pbmRleCk7XG4gICAgICAgIE5PREVfVE9fUEFSRU5ULnNldCh0aGlzLmRlc2NlbmRhbnQsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNCbG9ja0NhcmQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmxvY2tDYXJkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95QmxvY2tDYXJkKCkge1xuICAgICAgICBpZiAodGhpcy5ibG9ja0NhcmRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUJsb2NrQ2FyZCgpIHtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzID0gdGhpcy5yb290Tm9kZXM7XG4gICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxTbGF0ZUJsb2NrQ2FyZENvbXBvbmVudD4oU2xhdGVCbG9ja0NhcmRDb21wb25lbnQpO1xuICAgICAgICB0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5pbml0aWFsaXplQ2VudGVyKHJvb3ROb2Rlcyk7XG4gICAgfVxuXG4gICAgdXBkYXRlQmxvY2tDYXJkKCkge1xuICAgICAgICBpZiAodGhpcy5ibG9ja0NhcmRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290Tm9kZXMgPSB0aGlzLnJvb3ROb2RlcztcbiAgICAgICAgdGhpcy5jcmVhdGVCbG9ja0NhcmQoKTtcbiAgICAgICAgY29uc3QgZmlyc3RSb290Tm9kZSA9IHJvb3ROb2Rlc1swXTtcbiAgICAgICAgZmlyc3RSb290Tm9kZS5yZXBsYWNlV2l0aCh0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBnZXRDb21tb25Db250ZXh0KCk6IHsgc2VsZWN0aW9uOiBSYW5nZTsgZGVjb3JhdGlvbnM6IFJhbmdlW10gfSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKHRoaXMudmlld0NvbnRleHQuZWRpdG9yLCB0aGlzLmNvbnRleHQucGFyZW50KTtcbiAgICAgICAgY29uc3QgcCA9IHBhdGguY29uY2F0KHRoaXMuaW5kZXgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBFZGl0b3IucmFuZ2UodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIHApO1xuICAgICAgICAgICAgY29uc3Qgc2VsID0gdGhpcy5jb250ZXh0LnNlbGVjdGlvbiAmJiBSYW5nZS5pbnRlcnNlY3Rpb24ocmFuZ2UsIHRoaXMuY29udGV4dC5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgZHMgPSB0aGlzLmNvbnRleHQuZGVjb3JhdGUoW3RoaXMuZGVzY2VuZGFudCwgcF0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZWMgb2YgdGhpcy5jb250ZXh0LmRlY29yYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IFJhbmdlLmludGVyc2VjdGlvbihkZWMsIHJhbmdlKTtcbiAgICAgICAgICAgICAgICBpZiAoZCkge1xuICAgICAgICAgICAgICAgICAgICBkcy5wdXNoKGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHNlbGVjdGlvbjogc2VsLCBkZWNvcmF0aW9uczogZHMgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHQuZWRpdG9yLm9uRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvZGU6IFNsYXRlRXJyb3JDb2RlLkdldFN0YXJ0UG9pbnRFcnJvcixcbiAgICAgICAgICAgICAgICBuYXRpdmVFcnJvcjogZXJyb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uOiBudWxsLCBkZWNvcmF0aW9uczogW10gfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbnRleHQoKTogU2xhdGVFbGVtZW50Q29udGV4dCB8IFNsYXRlVGV4dENvbnRleHQge1xuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQodGhpcy5kZXNjZW5kYW50KSkge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRDb250ZXh0ID0gdGhpcy5nZXRDb21tb25Db250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBBbmd1bGFyRWRpdG9yLmZpbmRLZXkodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIHRoaXMuZGVzY2VuZGFudCk7XG4gICAgICAgICAgICBjb25zdCBpc0lubGluZSA9IHRoaXMudmlld0NvbnRleHQuZWRpdG9yLmlzSW5saW5lKHRoaXMuZGVzY2VuZGFudCk7XG4gICAgICAgICAgICBjb25zdCBpc1ZvaWQgPSB0aGlzLnZpZXdDb250ZXh0LmVkaXRvci5pc1ZvaWQodGhpcy5kZXNjZW5kYW50KTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRDb250ZXh0OiBTbGF0ZUVsZW1lbnRDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZGVzY2VuZGFudCxcbiAgICAgICAgICAgICAgICAuLi5jb21wdXRlZENvbnRleHQsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAnZGF0YS1zbGF0ZS1ub2RlJzogJ2VsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnZGF0YS1zbGF0ZS1rZXknOiBrZXkuaWRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRlY29yYXRlOiB0aGlzLmNvbnRleHQuZGVjb3JhdGUsXG4gICAgICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMuY29udGV4dC5yZWFkb25seVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpc0lubGluZSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250ZXh0LmF0dHJpYnV0ZXNbJ2RhdGEtc2xhdGUtaW5saW5lJ10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVm9pZCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250ZXh0LmF0dHJpYnV0ZXNbJ2RhdGEtc2xhdGUtdm9pZCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dC5hdHRyaWJ1dGVzLmNvbnRlbnRlZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRDb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRDb250ZXh0ID0gdGhpcy5nZXRDb21tb25Db250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBpc0xlYWZCbG9jayA9IEFuZ3VsYXJFZGl0b3IuaXNMZWFmQmxvY2sodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dENvbnRleHQ6IFNsYXRlVGV4dENvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgZGVjb3JhdGlvbnM6IGNvbXB1dGVkQ29udGV4dC5kZWNvcmF0aW9ucyxcbiAgICAgICAgICAgICAgICBpc0xhc3Q6IGlzTGVhZkJsb2NrICYmIHRoaXMuaW5kZXggPT09IHRoaXMuY29udGV4dC5wYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXMuY29udGV4dC5wYXJlbnQgYXMgRWxlbWVudCxcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmRlc2NlbmRhbnRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdGV4dENvbnRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRWaWV3VHlwZSgpOiBWaWV3VHlwZSB7XG4gICAgICAgIGlmIChFbGVtZW50LmlzRWxlbWVudCh0aGlzLmRlc2NlbmRhbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMudmlld0NvbnRleHQucmVuZGVyRWxlbWVudCAmJiB0aGlzLnZpZXdDb250ZXh0LnJlbmRlckVsZW1lbnQodGhpcy5kZXNjZW5kYW50KSkgfHwgdGhpcy5kZWZhdWx0RWxlbWVudENvbXBvbmVudFR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc1ZvaWQgPSB0aGlzLnZpZXdDb250ZXh0LmVkaXRvci5pc1ZvaWQodGhpcy5jb250ZXh0LnBhcmVudCBhcyBFbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBpc1ZvaWRcbiAgICAgICAgICAgICAgICA/IFNsYXRlVm9pZFRleHRDb21wb25lbnRcbiAgICAgICAgICAgICAgICA6ICh0aGlzLnZpZXdDb250ZXh0LnJlbmRlclRleHQgJiYgdGhpcy52aWV3Q29udGV4dC5yZW5kZXJUZXh0KHRoaXMuZGVzY2VuZGFudCkpIHx8IFNsYXRlRGVmYXVsdFRleHRDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vaXplZEVsZW1lbnRDb250ZXh0KHByZXY6IFNsYXRlRWxlbWVudENvbnRleHQsIG5leHQ6IFNsYXRlRWxlbWVudENvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHByZXYuZWxlbWVudCA9PT0gbmV4dC5lbGVtZW50ICYmXG4gICAgICAgICAgICAoIXRoaXMudmlld0NvbnRleHQuaXNTdHJpY3REZWNvcmF0ZSB8fCBwcmV2LmRlY29yYXRlID09PSBuZXh0LmRlY29yYXRlKSAmJlxuICAgICAgICAgICAgcHJldi5yZWFkb25seSA9PT0gbmV4dC5yZWFkb25seSAmJlxuICAgICAgICAgICAgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbChwcmV2LmRlY29yYXRpb25zLCBuZXh0LmRlY29yYXRpb25zKSAmJlxuICAgICAgICAgICAgKHByZXYuc2VsZWN0aW9uID09PSBuZXh0LnNlbGVjdGlvbiB8fCAoISFwcmV2LnNlbGVjdGlvbiAmJiAhIW5leHQuc2VsZWN0aW9uICYmIFJhbmdlLmVxdWFscyhwcmV2LnNlbGVjdGlvbiwgbmV4dC5zZWxlY3Rpb24pKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBtZW1vaXplZFRleHRDb250ZXh0KHByZXY6IFNsYXRlVGV4dENvbnRleHQsIG5leHQ6IFNsYXRlVGV4dENvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG5leHQucGFyZW50ID09PSBwcmV2LnBhcmVudCAmJlxuICAgICAgICAgICAgbmV4dC5pc0xhc3QgPT09IHByZXYuaXNMYXN0ICYmXG4gICAgICAgICAgICBuZXh0LnRleHQgPT09IHByZXYudGV4dCAmJlxuICAgICAgICAgICAgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbChuZXh0LmRlY29yYXRpb25zLCBwcmV2LmRlY29yYXRpb25zKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG1lbW9pemVkQ29udGV4dChwcmV2OiBTbGF0ZUVsZW1lbnRDb250ZXh0IHwgU2xhdGVUZXh0Q29udGV4dCwgbmV4dDogU2xhdGVFbGVtZW50Q29udGV4dCB8IFNsYXRlVGV4dENvbnRleHQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKEVsZW1lbnQuaXNFbGVtZW50KHRoaXMuZGVzY2VuZGFudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbW9pemVkRWxlbWVudENvbnRleHQocHJldiBhcyBTbGF0ZUVsZW1lbnRDb250ZXh0LCBuZXh0IGFzIFNsYXRlRWxlbWVudENvbnRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVtb2l6ZWRUZXh0Q29udGV4dChwcmV2IGFzIFNsYXRlVGV4dENvbnRleHQsIG5leHQgYXMgU2xhdGVUZXh0Q29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=