slate-angular 16.1.0-next → 16.1.0-next.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 (39) hide show
  1. package/components/children/children.component.d.ts +1 -6
  2. package/components/editable/editable.component.d.ts +16 -5
  3. package/components/leaf/token.d.ts +4 -0
  4. package/components/leaves/leaves.component.d.ts +1 -14
  5. package/components/string/string.component.d.ts +8 -0
  6. package/components/text/token.d.ts +5 -0
  7. package/esm2022/components/children/children.component.mjs +5 -31
  8. package/esm2022/components/editable/editable.component.mjs +120 -37
  9. package/esm2022/components/element/default-element.component.mjs +3 -3
  10. package/esm2022/components/element/element.component.mjs +3 -3
  11. package/esm2022/components/leaf/token.mjs +3 -0
  12. package/esm2022/components/leaves/leaves.component.mjs +5 -50
  13. package/esm2022/components/string/string.component.mjs +16 -6
  14. package/esm2022/components/text/default-text.component.mjs +3 -3
  15. package/esm2022/components/text/token.mjs +4 -0
  16. package/esm2022/components/text/void-text.component.mjs +3 -3
  17. package/esm2022/module.mjs +1 -7
  18. package/esm2022/utils/throttle.mjs +18 -0
  19. package/esm2022/view/base.mjs +26 -9
  20. package/esm2022/view/container.mjs +2 -82
  21. package/esm2022/view/context.mjs +1 -1
  22. package/esm2022/view/render/leaves-render.mjs +105 -0
  23. package/esm2022/view/render/list-render.mjs +250 -0
  24. package/esm2022/view/render/utils.mjs +104 -0
  25. package/fesm2022/slate-angular.mjs +914 -702
  26. package/fesm2022/slate-angular.mjs.map +1 -1
  27. package/module.d.ts +6 -8
  28. package/package.json +1 -1
  29. package/utils/throttle.d.ts +2 -0
  30. package/view/base.d.ts +11 -2
  31. package/view/container.d.ts +3 -7
  32. package/view/context.d.ts +8 -2
  33. package/view/render/leaves-render.d.ts +20 -0
  34. package/view/render/list-render.d.ts +31 -0
  35. package/view/render/utils.d.ts +11 -0
  36. package/components/descendant/descendant.component.d.ts +0 -35
  37. package/components/leaf/leaf.component.d.ts +0 -16
  38. package/esm2022/components/descendant/descendant.component.mjs +0 -186
  39. package/esm2022/components/leaf/leaf.component.mjs +0 -38
@@ -1,16 +1,11 @@
1
- import { OnInit, QueryList } from '@angular/core';
2
- import { SlateDescendant } from '../descendant/descendant.component';
3
1
  import { Descendant } from 'slate';
4
2
  import { SlateChildrenContext, SlateViewContext } from '../../view/context';
5
3
  import { ViewContainer } from '../../view/container';
6
4
  import * as i0 from "@angular/core";
7
- export declare class SlateChildren extends ViewContainer<SlateDescendant> implements OnInit {
5
+ export declare class SlateChildren extends ViewContainer<any> {
8
6
  children: Descendant[];
9
7
  context: SlateChildrenContext;
10
8
  viewContext: SlateViewContext;
11
- childrenComponent: QueryList<SlateDescendant>;
12
- ngOnInit(): void;
13
- trackBy: (index: any, node: any) => any;
14
9
  static ɵfac: i0.ɵɵFactoryDeclaration<SlateChildren, never>;
15
10
  static ɵcmp: i0.ɵɵComponentDeclaration<SlateChildren, "slate-children", never, { "children": { "alias": "children"; "required": false; }; "context": { "alias": "context"; "required": false; }; "viewContext": { "alias": "viewContext"; "required": false; }; }, {}, never, never, true, never>;
16
11
  }
@@ -1,11 +1,13 @@
1
- import { OnInit, Renderer2, ElementRef, OnDestroy, ChangeDetectorRef, NgZone, Injector, OnChanges, SimpleChanges, AfterViewChecked, DoCheck } from '@angular/core';
1
+ import { OnInit, Renderer2, ElementRef, OnDestroy, ChangeDetectorRef, NgZone, Injector, OnChanges, SimpleChanges, AfterViewChecked, DoCheck, ViewContainerRef } 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 { ViewType } from '../../types/view';
7
+ import { ComponentType, 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';
9
11
  import * as i0 from "@angular/core";
10
12
  export declare class SlateEditable implements OnInit, OnChanges, OnDestroy, AfterViewChecked, DoCheck {
11
13
  elementRef: ElementRef;
@@ -13,6 +15,10 @@ export declare class SlateEditable implements OnInit, OnChanges, OnDestroy, Afte
13
15
  cdr: ChangeDetectorRef;
14
16
  private ngZone;
15
17
  private injector;
18
+ defaultElement: ComponentType<BaseElementComponent>;
19
+ defaultText: ComponentType<BaseTextComponent>;
20
+ defaultVoidText: ComponentType<BaseTextComponent>;
21
+ defaultLeaf: ComponentType<BaseLeafComponent>;
16
22
  viewContext: SlateViewContext;
17
23
  context: SlateChildrenContext;
18
24
  private destroy$;
@@ -59,7 +65,11 @@ export declare class SlateEditable implements OnInit, OnChanges, OnDestroy, Afte
59
65
  get hasBeforeInputSupport(): boolean;
60
66
  templateComponent: SlateStringTemplate;
61
67
  templateElementRef: ElementRef<any>;
62
- constructor(elementRef: ElementRef, renderer2: Renderer2, cdr: ChangeDetectorRef, ngZone: NgZone, injector: Injector);
68
+ viewContainerRef: ViewContainerRef;
69
+ getOutletElement: () => any;
70
+ listRender: ListRender;
71
+ private throttleRAF;
72
+ constructor(elementRef: ElementRef, renderer2: Renderer2, cdr: ChangeDetectorRef, ngZone: NgZone, injector: Injector, defaultElement: ComponentType<BaseElementComponent>, defaultText: ComponentType<BaseTextComponent>, defaultVoidText: ComponentType<BaseTextComponent>, defaultLeaf: ComponentType<BaseLeafComponent>);
63
73
  ngOnInit(): void;
64
74
  ngOnChanges(simpleChanges: SimpleChanges): void;
65
75
  registerOnChange(fn: any): void;
@@ -70,10 +80,11 @@ export declare class SlateEditable implements OnInit, OnChanges, OnDestroy, Afte
70
80
  onChange(): void;
71
81
  ngAfterViewChecked(): void;
72
82
  ngDoCheck(): void;
73
- forceFlush(): void;
83
+ forceRender(): void;
84
+ render(): void;
85
+ updateContext(): boolean;
74
86
  initializeContext(): void;
75
87
  initializeViewContext(): void;
76
- detectContext(): void;
77
88
  composePlaceholderDecorate(editor: Editor): SlatePlaceholder[];
78
89
  generateDecorations(): import("slate").BaseRange[];
79
90
  private addEventListener;
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { ComponentType } from '../../types/view';
3
+ import { BaseLeafComponent } from '../../view/base';
4
+ export declare const SLATE_DEFAULT_LEAF_COMPONENT_TOKEN: InjectionToken<ComponentType<BaseLeafComponent>>;
@@ -1,25 +1,12 @@
1
- import { AfterViewInit, OnChanges, OnInit, QueryList, SimpleChanges } from '@angular/core';
2
1
  import { Text } from 'slate';
3
2
  import { SlateLeafContext, SlateTextContext } from '../../view/context';
4
3
  import { ViewContainer } from '../../view/container';
5
- import { SlateLeaf } from '../leaf/leaf.component';
6
4
  import * as i0 from "@angular/core";
7
- export declare class SlateLeaves extends ViewContainer<SlateLeaf> implements OnInit, AfterViewInit, OnChanges {
5
+ export declare class SlateLeaves extends ViewContainer<any> {
8
6
  initialized: boolean;
9
7
  leafContexts: SlateLeafContext[];
10
8
  leaves: Text[];
11
9
  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;
23
10
  static ɵfac: i0.ɵɵFactoryDeclaration<SlateLeaves, never>;
24
11
  static ɵcmp: i0.ɵɵComponentDeclaration<SlateLeaves, "slate-leaves", never, { "context": { "alias": "context"; "required": false; }; }, {}, never, never, true, never>;
25
12
  }
@@ -22,3 +22,11 @@ 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;
@@ -0,0 +1,5 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { ComponentType } from '../../types/view';
3
+ import { BaseTextComponent } from '../../view/base';
4
+ export declare const SLATE_DEFAULT_TEXT_COMPONENT_TOKEN: InjectionToken<ComponentType<BaseTextComponent<import("slate").BaseText>>>;
5
+ export declare const SLATE_DEFAULT_VOID_TEXT_COMPONENT_TOKEN: InjectionToken<ComponentType<BaseTextComponent<import("slate").BaseText>>>;
@@ -1,42 +1,19 @@
1
- import { ChangeDetectionStrategy, Component, Input, ViewChildren } from '@angular/core';
2
- import { SlateDescendant } from '../descendant/descendant.component';
3
- import { AngularEditor } from '../../plugins/angular-editor';
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
4
2
  import { ViewContainer } from '../../view/container';
5
3
  import { NgFor } from '@angular/common';
6
4
  import * as i0 from "@angular/core";
7
5
  export class SlateChildren extends ViewContainer {
8
- constructor() {
9
- super(...arguments);
10
- this.trackBy = (index, node) => {
11
- return this.viewContext.trackBy(node) || AngularEditor.findKey(this.viewContext.editor, node);
12
- };
13
- }
14
- ngOnInit() { }
15
6
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SlateChildren, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
16
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SlateChildren, isStandalone: true, selector: "slate-children", inputs: { children: "children", context: "context", viewContext: "viewContext" }, viewQueries: [{ propertyName: "childrenComponent", predicate: SlateDescendant, descendants: true, read: SlateDescendant }], usesInheritance: true, ngImport: i0, template: `<slate-descendant
17
- [descendant]="descendant"
18
- [context]="context"
19
- [viewContext]="viewContext"
20
- [viewContext]="viewContext"
21
- [index]="index"
22
- *ngFor="let descendant of children; let index = index; trackBy: trackBy"
23
- ></slate-descendant>`, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: SlateDescendant, selector: "slate-descendant", inputs: ["descendant", "context", "viewContext", "index"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7
+ 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 }); }
24
8
  }
25
9
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SlateChildren, decorators: [{
26
10
  type: Component,
27
11
  args: [{
28
12
  selector: 'slate-children',
29
- template: `<slate-descendant
30
- [descendant]="descendant"
31
- [context]="context"
32
- [viewContext]="viewContext"
33
- [viewContext]="viewContext"
34
- [index]="index"
35
- *ngFor="let descendant of children; let index = index; trackBy: trackBy"
36
- ></slate-descendant>`,
13
+ template: ``,
37
14
  changeDetection: ChangeDetectionStrategy.OnPush,
38
15
  standalone: true,
39
- imports: [NgFor, SlateDescendant]
16
+ imports: [NgFor]
40
17
  }]
41
18
  }], propDecorators: { children: [{
42
19
  type: Input
@@ -44,8 +21,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
44
21
  type: Input
45
22
  }], viewContext: [{
46
23
  type: Input
47
- }], childrenComponent: [{
48
- type: ViewChildren,
49
- args: [SlateDescendant, { read: SlateDescendant }]
50
24
  }] } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGRyZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY2hpbGRyZW4vY2hpbGRyZW4uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWdCeEMsTUFBTSxPQUFPLGFBQWMsU0FBUSxhQUE4QjtJQWRqRTs7UUEwQkksWUFBTyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRyxDQUFDLENBQUM7S0FDTDtJQUxHLFFBQVEsS0FBSSxDQUFDOzhHQVZKLGFBQWE7a0dBQWIsYUFBYSxrTUFPUixlQUFlLDJCQUFVLGVBQWUsb0RBbkI1Qzs7Ozs7Ozt5QkFPVyw0REFHWCxLQUFLLG1IQUFFLGVBQWU7OzJGQUV2QixhQUFhO2tCQWR6QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozt5QkFPVztvQkFDckIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDO2lCQUNwQzs4QkFFWSxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdOLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNsYXRlRGVzY2VuZGFudCB9IGZyb20gJy4uL2Rlc2NlbmRhbnQvZGVzY2VuZGFudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVzY2VuZGFudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IgfSBmcm9tICcuLi8uLi9wbHVnaW5zL2FuZ3VsYXItZWRpdG9yJztcbmltcG9ydCB7IFNsYXRlQ2hpbGRyZW5Db250ZXh0LCBTbGF0ZVZpZXdDb250ZXh0IH0gZnJvbSAnLi4vLi4vdmlldy9jb250ZXh0JztcbmltcG9ydCB7IFZpZXdDb250YWluZXIgfSBmcm9tICcuLi8uLi92aWV3L2NvbnRhaW5lcic7XG5pbXBvcnQgeyBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2xhdGUtY2hpbGRyZW4nLFxuICAgIHRlbXBsYXRlOiBgPHNsYXRlLWRlc2NlbmRhbnRcbiAgICAgICAgW2Rlc2NlbmRhbnRdPVwiZGVzY2VuZGFudFwiXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgICAgICBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIlxuICAgICAgICBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIlxuICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgZGVzY2VuZGFudCBvZiBjaGlsZHJlbjsgbGV0IGluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIlxuICAgID48L3NsYXRlLWRlc2NlbmRhbnQ+YCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0ZvciwgU2xhdGVEZXNjZW5kYW50XVxufSlcbmV4cG9ydCBjbGFzcyBTbGF0ZUNoaWxkcmVuIGV4dGVuZHMgVmlld0NvbnRhaW5lcjxTbGF0ZURlc2NlbmRhbnQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBjaGlsZHJlbjogRGVzY2VuZGFudFtdO1xuXG4gICAgQElucHV0KCkgY29udGV4dDogU2xhdGVDaGlsZHJlbkNvbnRleHQ7XG5cbiAgICBASW5wdXQoKSB2aWV3Q29udGV4dDogU2xhdGVWaWV3Q29udGV4dDtcblxuICAgIEBWaWV3Q2hpbGRyZW4oU2xhdGVEZXNjZW5kYW50LCB7IHJlYWQ6IFNsYXRlRGVzY2VuZGFudCB9KVxuICAgIGNoaWxkcmVuQ29tcG9uZW50OiBRdWVyeUxpc3Q8U2xhdGVEZXNjZW5kYW50PjtcblxuICAgIG5nT25Jbml0KCkge31cblxuICAgIHRyYWNrQnkgPSAoaW5kZXgsIG5vZGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQudHJhY2tCeShub2RlKSB8fCBBbmd1bGFyRWRpdG9yLmZpbmRLZXkodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIG5vZGUpO1xuICAgIH07XG59XG4iXX0=
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGRyZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvY2hpbGRyZW4vY2hpbGRyZW4uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBU3hDLE1BQU0sT0FBTyxhQUFjLFNBQVEsYUFBa0I7OEdBQXhDLGFBQWE7a0dBQWIsYUFBYSxtTEFMWixFQUFFOzsyRkFLSCxhQUFhO2tCQVB6QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO2lCQUNuQjs4QkFFWSxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlc2NlbmRhbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBTbGF0ZUNoaWxkcmVuQ29udGV4dCwgU2xhdGVWaWV3Q29udGV4dCB9IGZyb20gJy4uLy4uL3ZpZXcvY29udGV4dCc7XG5pbXBvcnQgeyBWaWV3Q29udGFpbmVyIH0gZnJvbSAnLi4vLi4vdmlldy9jb250YWluZXInO1xuaW1wb3J0IHsgTmdGb3IgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NsYXRlLWNoaWxkcmVuJyxcbiAgICB0ZW1wbGF0ZTogYGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdGb3JdXG59KVxuZXhwb3J0IGNsYXNzIFNsYXRlQ2hpbGRyZW4gZXh0ZW5kcyBWaWV3Q29udGFpbmVyPGFueT4ge1xuICAgIEBJbnB1dCgpIGNoaWxkcmVuOiBEZXNjZW5kYW50W107XG5cbiAgICBASW5wdXQoKSBjb250ZXh0OiBTbGF0ZUNoaWxkcmVuQ29udGV4dDtcblxuICAgIEBJbnB1dCgpIHZpZXdDb250ZXh0OiBTbGF0ZVZpZXdDb250ZXh0O1xufVxuIl19