@angular/cdk-experimental 14.0.0-next.7 → 14.0.0-next.8

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 (41) hide show
  1. package/combobox/combobox-module.d.ts +3 -4
  2. package/combobox/combobox-popup.d.ts +6 -8
  3. package/combobox/combobox.d.ts +15 -18
  4. package/combobox/public-api.d.ts +0 -1
  5. package/esm2020/combobox/combobox-module.mjs +3 -4
  6. package/esm2020/combobox/combobox-popup.mjs +11 -22
  7. package/esm2020/combobox/combobox.mjs +49 -33
  8. package/esm2020/combobox/public-api.mjs +1 -2
  9. package/esm2020/dialog/dialog-container.mjs +8 -3
  10. package/esm2020/listbox/listbox.mjs +23 -41
  11. package/esm2020/menu/context-menu.mjs +17 -33
  12. package/esm2020/menu/menu-item-trigger.mjs +10 -17
  13. package/esm2020/menu/menu-item.mjs +5 -14
  14. package/esm2020/version.mjs +1 -1
  15. package/fesm2015/cdk-experimental.mjs +1 -1
  16. package/fesm2015/cdk-experimental.mjs.map +1 -1
  17. package/fesm2015/combobox.mjs +58 -101
  18. package/fesm2015/combobox.mjs.map +1 -1
  19. package/fesm2015/dialog.mjs +7 -2
  20. package/fesm2015/dialog.mjs.map +1 -1
  21. package/fesm2015/listbox.mjs +24 -40
  22. package/fesm2015/listbox.mjs.map +1 -1
  23. package/fesm2015/menu.mjs +29 -60
  24. package/fesm2015/menu.mjs.map +1 -1
  25. package/fesm2020/cdk-experimental.mjs +1 -1
  26. package/fesm2020/cdk-experimental.mjs.map +1 -1
  27. package/fesm2020/combobox.mjs +57 -98
  28. package/fesm2020/combobox.mjs.map +1 -1
  29. package/fesm2020/dialog.mjs +7 -2
  30. package/fesm2020/dialog.mjs.map +1 -1
  31. package/fesm2020/listbox.mjs +22 -39
  32. package/fesm2020/listbox.mjs.map +1 -1
  33. package/fesm2020/menu.mjs +28 -60
  34. package/fesm2020/menu.mjs.map +1 -1
  35. package/listbox/listbox.d.ts +16 -13
  36. package/menu/context-menu.d.ts +7 -19
  37. package/menu/menu-item-trigger.d.ts +4 -2
  38. package/menu/menu-item.d.ts +6 -1
  39. package/package.json +2 -2
  40. package/combobox/combobox-panel.d.ts +0 -27
  41. package/esm2020/combobox/combobox-panel.mjs +0 -48
@@ -5,17 +5,20 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
- import { AfterContentInit, ElementRef, EventEmitter, InjectionToken, OnDestroy, OnInit, QueryList } from '@angular/core';
8
+ import { AfterContentInit, ElementRef, EventEmitter, OnDestroy, OnInit, QueryList } from '@angular/core';
9
9
  import { ActiveDescendantKeyManager, Highlightable, ListKeyManagerOption } from '@angular/cdk/a11y';
10
10
  import { BooleanInput } from '@angular/cdk/coercion';
11
11
  import { SelectionModel } from '@angular/cdk/collections';
12
12
  import { Observable } from 'rxjs';
13
13
  import { ControlValueAccessor } from '@angular/forms';
14
- import { CdkComboboxPanel } from '@angular/cdk-experimental/combobox';
15
14
  import { Directionality } from '@angular/cdk/bidi';
15
+ import { CdkCombobox } from '@angular/cdk-experimental/combobox';
16
16
  import * as i0 from "@angular/core";
17
- export declare const CDK_LISTBOX_VALUE_ACCESSOR: any;
18
- export declare const PANEL: InjectionToken<CdkComboboxPanel<unknown>>;
17
+ export declare const CDK_LISTBOX_VALUE_ACCESSOR: {
18
+ provide: import("@angular/core").InjectionToken<readonly ControlValueAccessor[]>;
19
+ useExisting: import("@angular/core").Type<any>;
20
+ multi: boolean;
21
+ };
19
22
  export declare class CdkOption<T = unknown> implements ListKeyManagerOption, Highlightable {
20
23
  private readonly _elementRef;
21
24
  readonly listbox: CdkListbox<T>;
@@ -32,6 +35,11 @@ export declare class CdkOption<T = unknown> implements ListKeyManagerOption, Hig
32
35
  /** The form value of the option. */
33
36
  get value(): T;
34
37
  set value(value: T);
38
+ /**
39
+ * The text used to locate this item during menu typeahead. If not specified,
40
+ * the `textContent` of the item will be used.
41
+ */
42
+ typeahead: string;
35
43
  readonly selectionChange: EventEmitter<OptionSelectionChangeEvent<T>>;
36
44
  constructor(_elementRef: ElementRef, listbox: CdkListbox<T>);
37
45
  /** Toggles the selected state, emits a change event through the injected listbox. */
@@ -54,18 +62,15 @@ export declare class CdkOption<T = unknown> implements ListKeyManagerOption, Hig
54
62
  _getTabIndex(): string | null;
55
63
  /** Get the label for this element which is required by the FocusableOption interface. */
56
64
  getLabel(): string;
57
- /** Remove any child from the given element which can be identified as an icon. */
58
- private _removeIcons;
59
- getElementRef(): ElementRef<any>;
60
65
  /** Sets the active property to true to enable the active css class. */
61
66
  setActiveStyles(): void;
62
67
  /** Sets the active property to false to disable the active css class. */
63
68
  setInactiveStyles(): void;
64
69
  static ɵfac: i0.ɵɵFactoryDeclaration<CdkOption<any>, never>;
65
- static ɵdir: i0.ɵɵDirectiveDeclaration<CdkOption<any>, "[cdkOption]", ["cdkOption"], { "id": "id"; "selected": "selected"; "disabled": "disabled"; "value": "value"; }, { "selectionChange": "selectionChange"; }, never>;
70
+ static ɵdir: i0.ɵɵDirectiveDeclaration<CdkOption<any>, "[cdkOption]", ["cdkOption"], { "id": "id"; "selected": "selected"; "disabled": "disabled"; "value": "value"; "typeahead": "typeahead"; }, { "selectionChange": "selectionChange"; }, never>;
66
71
  }
67
72
  export declare class CdkListbox<T> implements AfterContentInit, OnDestroy, OnInit, ControlValueAccessor {
68
- readonly _parentPanel?: CdkComboboxPanel<T> | undefined;
73
+ private readonly _combobox;
69
74
  private readonly _dir?;
70
75
  _listKeyManager: ActiveDescendantKeyManager<CdkOption<T>>;
71
76
  _selectionModel: SelectionModel<CdkOption<T>>;
@@ -101,12 +106,10 @@ export declare class CdkListbox<T> implements AfterContentInit, OnDestroy, OnIni
101
106
  /** Determines the orientation for the list key manager. Affects keyboard interaction. */
102
107
  orientation: 'horizontal' | 'vertical';
103
108
  compareWith: (o1: T, o2: T) => boolean;
104
- private readonly _explicitPanel;
105
- constructor(_parentPanel?: CdkComboboxPanel<T> | undefined, _dir?: Directionality | undefined);
109
+ constructor(_combobox: CdkCombobox, _dir?: Directionality | undefined);
106
110
  ngOnInit(): void;
107
111
  ngAfterContentInit(): void;
108
112
  ngOnDestroy(): void;
109
- private _registerWithPanel;
110
113
  private _initKeyManager;
111
114
  private _initSelectionModel;
112
115
  _keydown(event: KeyboardEvent): void;
@@ -151,7 +154,7 @@ export declare class CdkListbox<T> implements AfterContentInit, OnDestroy, OnIni
151
154
  /** Selects an option that has the corresponding given value. */
152
155
  private _setSelectionByValue;
153
156
  static ɵfac: i0.ɵɵFactoryDeclaration<CdkListbox<any>, [{ optional: true; }, { optional: true; }]>;
154
- static ɵdir: i0.ɵɵDirectiveDeclaration<CdkListbox<any>, "[cdkListbox]", ["cdkListbox"], { "id": "id"; "multiple": "multiple"; "disabled": "disabled"; "useActiveDescendant": "useActiveDescendant"; "autoFocus": "autoFocus"; "orientation": "listboxOrientation"; "compareWith": "compareWith"; "_explicitPanel": "parentPanel"; }, { "selectionChange": "selectionChange"; }, ["_options"]>;
157
+ static ɵdir: i0.ɵɵDirectiveDeclaration<CdkListbox<any>, "[cdkListbox]", ["cdkListbox"], { "id": "id"; "multiple": "multiple"; "disabled": "disabled"; "useActiveDescendant": "useActiveDescendant"; "autoFocus": "autoFocus"; "orientation": "listboxOrientation"; "compareWith": "compareWith"; }, { "selectionChange": "selectionChange"; }, ["_options"]>;
155
158
  }
156
159
  /** Change event that is being fired whenever the selected state of an option changes. */
157
160
  export interface ListboxSelectionChangeEvent<T> {
@@ -5,9 +5,9 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
- import { EventEmitter, InjectionToken, Injector, OnDestroy, ViewContainerRef } from '@angular/core';
8
+ import { EventEmitter, Injector, OnDestroy, ViewContainerRef } from '@angular/core';
9
9
  import { Directionality } from '@angular/cdk/bidi';
10
- import { Overlay } from '@angular/cdk/overlay';
10
+ import { ConnectedPosition, Overlay } from '@angular/cdk/overlay';
11
11
  import { BooleanInput } from '@angular/cdk/coercion';
12
12
  import { MenuStack } from './menu-stack';
13
13
  import { MenuTrigger } from './menu-trigger';
@@ -24,15 +24,6 @@ export declare class ContextMenuTracker {
24
24
  static ɵfac: i0.ɵɵFactoryDeclaration<ContextMenuTracker, never>;
25
25
  static ɵprov: i0.ɵɵInjectableDeclaration<ContextMenuTracker>;
26
26
  }
27
- /** Configuration options passed to the context menu. */
28
- export declare type ContextMenuOptions = {
29
- /** The opened menus X coordinate offset from the triggering position. */
30
- offsetX: number;
31
- /** The opened menus Y coordinate offset from the triggering position. */
32
- offsetY: number;
33
- };
34
- /** Injection token for the ContextMenu options object. */
35
- export declare const CDK_CONTEXT_MENU_DEFAULT_OPTIONS: InjectionToken<ContextMenuOptions>;
36
27
  /** The coordinates of where the context menu should open. */
37
28
  export declare type ContextMenuCoordinates = {
38
29
  x: number;
@@ -47,10 +38,11 @@ export declare class CdkContextMenuTrigger extends MenuTrigger implements OnDest
47
38
  protected readonly _viewContainerRef: ViewContainerRef;
48
39
  private readonly _overlay;
49
40
  private readonly _contextMenuTracker;
50
- private readonly _options;
51
41
  private readonly _directionality?;
52
42
  /** Template reference variable to the menu to open on right click. */
53
43
  private _menuTemplateRef;
44
+ /** A list of preferred menu positions to be used when constructing the `FlexibleConnectedPositionStrategy` for this trigger's menu. */
45
+ menuPosition: ConnectedPosition[];
54
46
  /** Emits when the attached menu is requested to open. */
55
47
  readonly opened: EventEmitter<void>;
56
48
  /** Emits when the attached menu is requested to close. */
@@ -67,7 +59,7 @@ export declare class CdkContextMenuTrigger extends MenuTrigger implements OnDest
67
59
  private readonly _destroyed;
68
60
  /** Emits when the outside pointer events listener on the overlay should be stopped. */
69
61
  private readonly _stopOutsideClicksListener;
70
- constructor(injector: Injector, _viewContainerRef: ViewContainerRef, _overlay: Overlay, _contextMenuTracker: ContextMenuTracker, menuStack: MenuStack, _options: ContextMenuOptions, _directionality?: Directionality | undefined);
62
+ constructor(injector: Injector, _viewContainerRef: ViewContainerRef, _overlay: Overlay, _contextMenuTracker: ContextMenuTracker, menuStack: MenuStack, _directionality?: Directionality | undefined);
71
63
  /**
72
64
  * Open the attached menu at the specified location.
73
65
  * @param coordinates where to open the context menu
@@ -93,10 +85,6 @@ export declare class CdkContextMenuTrigger extends MenuTrigger implements OnDest
93
85
  * @param coordinates the location to place the opened menu
94
86
  */
95
87
  private _getOverlayPositionStrategy;
96
- /**
97
- * Determine and return where to position the opened menu relative to the mouse location.
98
- */
99
- private _getOverlayPositions;
100
88
  /**
101
89
  * Get the portal to be attached to the overlay which contains the menu. Allows for the menu
102
90
  * content to change dynamically and be reflected in the application.
@@ -112,6 +100,6 @@ export declare class CdkContextMenuTrigger extends MenuTrigger implements OnDest
112
100
  ngOnDestroy(): void;
113
101
  /** Destroy and unset the overlay reference it if exists. */
114
102
  private _destroyOverlay;
115
- static ɵfac: i0.ɵɵFactoryDeclaration<CdkContextMenuTrigger, [null, null, null, null, null, null, { optional: true; }]>;
116
- static ɵdir: i0.ɵɵDirectiveDeclaration<CdkContextMenuTrigger, "[cdkContextMenuTriggerFor]", ["cdkContextMenuTriggerFor"], { "_menuTemplateRef": "cdkContextMenuTriggerFor"; "disabled": "cdkContextMenuDisabled"; }, { "opened": "cdkContextMenuOpened"; "closed": "cdkContextMenuClosed"; }, never>;
103
+ static ɵfac: i0.ɵɵFactoryDeclaration<CdkContextMenuTrigger, [null, null, null, null, null, { optional: true; }]>;
104
+ static ɵdir: i0.ɵɵDirectiveDeclaration<CdkContextMenuTrigger, "[cdkContextMenuTriggerFor]", ["cdkContextMenuTriggerFor"], { "_menuTemplateRef": "cdkContextMenuTriggerFor"; "menuPosition": "cdkMenuPosition"; "disabled": "cdkContextMenuDisabled"; }, { "opened": "cdkContextMenuOpened"; "closed": "cdkContextMenuClosed"; }, never>;
117
105
  }
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import { ElementRef, EventEmitter, Injector, NgZone, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';
9
9
  import { Directionality } from '@angular/cdk/bidi';
10
- import { Overlay } from '@angular/cdk/overlay';
10
+ import { ConnectedPosition, Overlay } from '@angular/cdk/overlay';
11
11
  import { Menu } from './menu-interface';
12
12
  import { MenuStack } from './menu-stack';
13
13
  import { MenuAim } from './menu-aim';
@@ -36,6 +36,8 @@ export declare class CdkMenuItemTrigger extends MenuTrigger implements OnDestroy
36
36
  private readonly _directionality?;
37
37
  /** Template reference variable to the menu this trigger opens */
38
38
  _menuTemplateRef?: TemplateRef<unknown>;
39
+ /** A list of preferred menu positions to be used when constructing the `FlexibleConnectedPositionStrategy` for this trigger's menu. */
40
+ menuPosition: ConnectedPosition[];
39
41
  /** Emits when the attached menu is requested to open */
40
42
  readonly opened: EventEmitter<void>;
41
43
  /** Emits when the attached menu is requested to close */
@@ -106,5 +108,5 @@ export declare class CdkMenuItemTrigger extends MenuTrigger implements OnDestroy
106
108
  /** Destroy and unset the overlay reference it if exists */
107
109
  private _destroyOverlay;
108
110
  static ɵfac: i0.ɵɵFactoryDeclaration<CdkMenuItemTrigger, [null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
109
- static ɵdir: i0.ɵɵDirectiveDeclaration<CdkMenuItemTrigger, "[cdkMenuTriggerFor]", ["cdkMenuTriggerFor"], { "_menuTemplateRef": "cdkMenuTriggerFor"; }, { "opened": "cdkMenuOpened"; "closed": "cdkMenuClosed"; }, never>;
111
+ static ɵdir: i0.ɵɵDirectiveDeclaration<CdkMenuItemTrigger, "[cdkMenuTriggerFor]", ["cdkMenuTriggerFor"], { "_menuTemplateRef": "cdkMenuTriggerFor"; "menuPosition": "cdkMenuPosition"; }, { "opened": "cdkMenuOpened"; "closed": "cdkMenuClosed"; }, never>;
110
112
  }
@@ -33,6 +33,11 @@ export declare class CdkMenuItem implements FocusableOption, FocusableElement, T
33
33
  get disabled(): boolean;
34
34
  set disabled(value: BooleanInput);
35
35
  private _disabled;
36
+ /**
37
+ * The text used to locate this item during menu typeahead. If not specified,
38
+ * the `textContent` of the item will be used.
39
+ */
40
+ typeahead: string;
36
41
  /**
37
42
  * If this MenuItem is a regular MenuItem, outputs when it is triggered by a keyboard or mouse
38
43
  * event.
@@ -96,5 +101,5 @@ export declare class CdkMenuItem implements FocusableOption, FocusableElement, T
96
101
  private _isParentVertical;
97
102
  ngOnDestroy(): void;
98
103
  static ɵfac: i0.ɵɵFactoryDeclaration<CdkMenuItem, [null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; self: true; }]>;
99
- static ɵdir: i0.ɵɵDirectiveDeclaration<CdkMenuItem, "[cdkMenuItem]", ["cdkMenuItem"], { "disabled": "disabled"; }, { "triggered": "cdkMenuItemTriggered"; }, never>;
104
+ static ɵdir: i0.ɵɵDirectiveDeclaration<CdkMenuItem, "[cdkMenuItem]", ["cdkMenuItem"], { "disabled": "disabled"; "typeahead": "typeahead"; }, { "triggered": "cdkMenuItemTriggered"; }, never>;
100
105
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/cdk-experimental",
3
- "version": "14.0.0-next.7",
3
+ "version": "14.0.0-next.8",
4
4
  "description": "Experimental components for Angular CDK",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,7 +12,7 @@
12
12
  },
13
13
  "homepage": "https://github.com/angular/components#readme",
14
14
  "peerDependencies": {
15
- "@angular/cdk": "14.0.0-next.7",
15
+ "@angular/cdk": "14.0.0-next.8",
16
16
  "@angular/core": "^14.0.0-0 || ^15.0.0"
17
17
  },
18
18
  "dependencies": {
@@ -1,27 +0,0 @@
1
- import { TemplateRef } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * @license
6
- * Copyright Google LLC All Rights Reserved.
7
- *
8
- * Use of this source code is governed by an MIT-style license that can be
9
- * found in the LICENSE file at https://angular.io/license
10
- */
11
- export declare type AriaHasPopupValue = 'false' | 'true' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';
12
- export declare class CdkComboboxPanel<T = unknown> {
13
- readonly _templateRef: TemplateRef<unknown>;
14
- valueUpdated: Subject<T | T[]>;
15
- contentIdUpdated: Subject<string>;
16
- contentTypeUpdated: Subject<AriaHasPopupValue>;
17
- contentId: string;
18
- contentType: AriaHasPopupValue;
19
- constructor(_templateRef: TemplateRef<unknown>);
20
- /** Tells the parent combobox to close the panel and sends back the content value. */
21
- closePanel(data?: T | T[]): void;
22
- focusContent(): void;
23
- /** Registers the content's id and the content type with the panel. */
24
- _registerContent(contentId: string, contentType: AriaHasPopupValue): void;
25
- static ɵfac: i0.ɵɵFactoryDeclaration<CdkComboboxPanel<any>, never>;
26
- static ɵdir: i0.ɵɵDirectiveDeclaration<CdkComboboxPanel<any>, "ng-template[cdkComboboxPanel]", ["cdkComboboxPanel"], {}, {}, never>;
27
- }
@@ -1,48 +0,0 @@
1
- import { Directive, TemplateRef } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- export class CdkComboboxPanel {
5
- constructor(_templateRef) {
6
- this._templateRef = _templateRef;
7
- this.valueUpdated = new Subject();
8
- this.contentIdUpdated = new Subject();
9
- this.contentTypeUpdated = new Subject();
10
- this.contentId = '';
11
- }
12
- /** Tells the parent combobox to close the panel and sends back the content value. */
13
- closePanel(data) {
14
- this.valueUpdated.next(data || []);
15
- }
16
- // TODO: instead of using a focus function, potentially use cdk/a11y focus trapping
17
- focusContent() {
18
- // TODO: Use an injected document here
19
- document.getElementById(this.contentId)?.focus();
20
- }
21
- /** Registers the content's id and the content type with the panel. */
22
- _registerContent(contentId, contentType) {
23
- // If content has already been registered, no further contentIds are registered.
24
- if (this.contentType && this.contentType !== contentType) {
25
- return;
26
- }
27
- this.contentId = contentId;
28
- if (contentType !== 'listbox' && contentType !== 'dialog') {
29
- throw Error('CdkComboboxPanel currently only supports listbox or dialog content.');
30
- }
31
- this.contentType = contentType;
32
- this.contentIdUpdated.next(this.contentId);
33
- this.contentTypeUpdated.next(this.contentType);
34
- }
35
- }
36
- CdkComboboxPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-next.6", ngImport: i0, type: CdkComboboxPanel, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
37
- CdkComboboxPanel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "14.0.0-next.6", type: CdkComboboxPanel, selector: "ng-template[cdkComboboxPanel]", host: { classAttribute: "cdk-combobox-panel" }, exportAs: ["cdkComboboxPanel"], ngImport: i0 });
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-next.6", ngImport: i0, type: CdkComboboxPanel, decorators: [{
39
- type: Directive,
40
- args: [{
41
- host: {
42
- 'class': 'cdk-combobox-panel',
43
- },
44
- selector: 'ng-template[cdkComboboxPanel]',
45
- exportAs: 'cdkComboboxPanel',
46
- }]
47
- }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtcGFuZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrLWV4cGVyaW1lbnRhbC9jb21ib2JveC9jb21ib2JveC1wYW5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQVM3QixNQUFNLE9BQU8sZ0JBQWdCO0lBUTNCLFlBQXFCLFlBQWtDO1FBQWxDLGlCQUFZLEdBQVosWUFBWSxDQUFzQjtRQVB2RCxpQkFBWSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ3hELHFCQUFnQixHQUFvQixJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQzFELHVCQUFrQixHQUErQixJQUFJLE9BQU8sRUFBcUIsQ0FBQztRQUVsRixjQUFTLEdBQVcsRUFBRSxDQUFDO0lBR21DLENBQUM7SUFFM0QscUZBQXFGO0lBQ3JGLFVBQVUsQ0FBQyxJQUFjO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsbUZBQW1GO0lBQ25GLFlBQVk7UUFDVixzQ0FBc0M7UUFDdEMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELHNFQUFzRTtJQUN0RSxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLFdBQThCO1FBQ2hFLGdGQUFnRjtRQUNoRixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLEVBQUU7WUFDeEQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLFdBQVcsS0FBSyxRQUFRLEVBQUU7WUFDekQsTUFBTSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztTQUNwRjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBRS9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7O29IQXBDVSxnQkFBZ0I7d0dBQWhCLGdCQUFnQjtrR0FBaEIsZ0JBQWdCO2tCQVA1QixTQUFTO21CQUFDO29CQUNULElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsb0JBQW9CO3FCQUM5QjtvQkFDRCxRQUFRLEVBQUUsK0JBQStCO29CQUN6QyxRQUFRLEVBQUUsa0JBQWtCO2lCQUM3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgdHlwZSBBcmlhSGFzUG9wdXBWYWx1ZSA9ICdmYWxzZScgfCAndHJ1ZScgfCAnbWVudScgfCAnbGlzdGJveCcgfCAndHJlZScgfCAnZ3JpZCcgfCAnZGlhbG9nJztcblxuaW1wb3J0IHtEaXJlY3RpdmUsIFRlbXBsYXRlUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2Nkay1jb21ib2JveC1wYW5lbCcsXG4gIH0sXG4gIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbY2RrQ29tYm9ib3hQYW5lbF0nLFxuICBleHBvcnRBczogJ2Nka0NvbWJvYm94UGFuZWwnLFxufSlcbmV4cG9ydCBjbGFzcyBDZGtDb21ib2JveFBhbmVsPFQgPSB1bmtub3duPiB7XG4gIHZhbHVlVXBkYXRlZDogU3ViamVjdDxUIHwgVFtdPiA9IG5ldyBTdWJqZWN0PFQgfCBUW10+KCk7XG4gIGNvbnRlbnRJZFVwZGF0ZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgY29udGVudFR5cGVVcGRhdGVkOiBTdWJqZWN0PEFyaWFIYXNQb3B1cFZhbHVlPiA9IG5ldyBTdWJqZWN0PEFyaWFIYXNQb3B1cFZhbHVlPigpO1xuXG4gIGNvbnRlbnRJZDogc3RyaW5nID0gJyc7XG4gIGNvbnRlbnRUeXBlOiBBcmlhSGFzUG9wdXBWYWx1ZTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBfdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+KSB7fVxuXG4gIC8qKiBUZWxscyB0aGUgcGFyZW50IGNvbWJvYm94IHRvIGNsb3NlIHRoZSBwYW5lbCBhbmQgc2VuZHMgYmFjayB0aGUgY29udGVudCB2YWx1ZS4gKi9cbiAgY2xvc2VQYW5lbChkYXRhPzogVCB8IFRbXSkge1xuICAgIHRoaXMudmFsdWVVcGRhdGVkLm5leHQoZGF0YSB8fCBbXSk7XG4gIH1cblxuICAvLyBUT0RPOiBpbnN0ZWFkIG9mIHVzaW5nIGEgZm9jdXMgZnVuY3Rpb24sIHBvdGVudGlhbGx5IHVzZSBjZGsvYTExeSBmb2N1cyB0cmFwcGluZ1xuICBmb2N1c0NvbnRlbnQoKSB7XG4gICAgLy8gVE9ETzogVXNlIGFuIGluamVjdGVkIGRvY3VtZW50IGhlcmVcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNvbnRlbnRJZCk/LmZvY3VzKCk7XG4gIH1cblxuICAvKiogUmVnaXN0ZXJzIHRoZSBjb250ZW50J3MgaWQgYW5kIHRoZSBjb250ZW50IHR5cGUgd2l0aCB0aGUgcGFuZWwuICovXG4gIF9yZWdpc3RlckNvbnRlbnQoY29udGVudElkOiBzdHJpbmcsIGNvbnRlbnRUeXBlOiBBcmlhSGFzUG9wdXBWYWx1ZSkge1xuICAgIC8vIElmIGNvbnRlbnQgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkLCBubyBmdXJ0aGVyIGNvbnRlbnRJZHMgYXJlIHJlZ2lzdGVyZWQuXG4gICAgaWYgKHRoaXMuY29udGVudFR5cGUgJiYgdGhpcy5jb250ZW50VHlwZSAhPT0gY29udGVudFR5cGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRlbnRJZCA9IGNvbnRlbnRJZDtcbiAgICBpZiAoY29udGVudFR5cGUgIT09ICdsaXN0Ym94JyAmJiBjb250ZW50VHlwZSAhPT0gJ2RpYWxvZycpIHtcbiAgICAgIHRocm93IEVycm9yKCdDZGtDb21ib2JveFBhbmVsIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGxpc3Rib3ggb3IgZGlhbG9nIGNvbnRlbnQuJyk7XG4gICAgfVxuICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcblxuICAgIHRoaXMuY29udGVudElkVXBkYXRlZC5uZXh0KHRoaXMuY29udGVudElkKTtcbiAgICB0aGlzLmNvbnRlbnRUeXBlVXBkYXRlZC5uZXh0KHRoaXMuY29udGVudFR5cGUpO1xuICB9XG59XG4iXX0=