@clr/angular 15.0.3 → 15.2.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.
- package/accordion/accordion-panel.d.ts +5 -2
- package/accordion/stepper/stepper-panel.d.ts +3 -3
- package/button/button-group/button-group.d.ts +14 -4
- package/button/button-group/button.d.ts +4 -5
- package/button/providers/button-group-focus-handler.service.d.ts +32 -0
- package/button/providers/button-group-focus.enum.d.ts +4 -0
- package/clarity.api.md +36 -22
- package/data/datagrid/datagrid-column.d.ts +1 -6
- package/esm2020/accordion/accordion-panel.mjs +17 -6
- package/esm2020/accordion/stepper/stepper-panel.mjs +7 -7
- package/esm2020/button/button-group/button-group.mjs +52 -14
- package/esm2020/button/button-group/button.mjs +16 -15
- package/esm2020/button/providers/button-group-focus-handler.service.mjs +96 -0
- package/esm2020/button/providers/button-group-focus.enum.mjs +11 -0
- package/esm2020/data/datagrid/built-in/filters/datagrid-numeric-filter.mjs +5 -1
- package/esm2020/data/datagrid/built-in/filters/datagrid-string-filter.mjs +3 -1
- package/esm2020/data/datagrid/datagrid-column.mjs +18 -29
- package/esm2020/data/tree-view/tree-node.mjs +3 -3
- package/esm2020/forms/combobox/combobox.mjs +5 -5
- package/esm2020/forms/combobox/providers/combobox-focus-handler.service.mjs +8 -4
- package/esm2020/popover/dropdown/dropdown-item.mjs +18 -1
- package/esm2020/popover/dropdown/dropdown.mjs +9 -7
- package/esm2020/popover/dropdown/providers/dropdown-focus-handler.service.mjs +5 -5
- package/esm2020/utils/focus/focus.service.mjs +3 -3
- package/fesm2015/clr-angular.mjs +11184 -11019
- package/fesm2015/clr-angular.mjs.map +1 -1
- package/fesm2020/clr-angular.mjs +10934 -10769
- package/fesm2020/clr-angular.mjs.map +1 -1
- package/forms/combobox/providers/combobox-focus-handler.service.d.ts +1 -0
- package/package.json +1 -1
- package/popover/dropdown/dropdown-item.d.ts +1 -0
- package/popover/dropdown/dropdown.d.ts +4 -2
- package/popover/dropdown/providers/dropdown-focus-handler.service.d.ts +1 -1
- package/utils/focus/focus.service.d.ts +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EventEmitter, OnChanges, OnInit, QueryList, SimpleChanges } from '@angular/core';
|
|
1
|
+
import { ChangeDetectorRef, EventEmitter, OnChanges, OnInit, QueryList, SimpleChanges } from '@angular/core';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
import { IfExpandService } from '../utils/conditional/if-expanded.service';
|
|
4
4
|
import { ClrCommonStringsService } from '../utils/i18n/common-strings.service';
|
|
@@ -11,6 +11,7 @@ export declare class ClrAccordionPanel implements OnInit, OnChanges {
|
|
|
11
11
|
commonStrings: ClrCommonStringsService;
|
|
12
12
|
private accordionService;
|
|
13
13
|
private ifExpandService;
|
|
14
|
+
private cdr;
|
|
14
15
|
disabled: boolean;
|
|
15
16
|
panelOpen: boolean;
|
|
16
17
|
panelOpenChange: EventEmitter<boolean>;
|
|
@@ -21,9 +22,11 @@ export declare class ClrAccordionPanel implements OnInit, OnChanges {
|
|
|
21
22
|
get id(): string;
|
|
22
23
|
set id(value: string);
|
|
23
24
|
private _id;
|
|
24
|
-
|
|
25
|
+
private _panelIndex;
|
|
26
|
+
constructor(commonStrings: ClrCommonStringsService, accordionService: AccordionService, ifExpandService: IfExpandService, cdr: ChangeDetectorRef);
|
|
25
27
|
ngOnInit(): void;
|
|
26
28
|
ngOnChanges(changes: SimpleChanges): void;
|
|
29
|
+
get panelNumber(): number;
|
|
27
30
|
togglePanel(): void;
|
|
28
31
|
collapsePanelOnAnimationDone(panel: AccordionPanelModel): void;
|
|
29
32
|
getPanelStateClasses(panel: AccordionPanelModel): string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ElementRef, OnInit } from '@angular/core';
|
|
1
|
+
import { ChangeDetectorRef, ElementRef, OnInit } from '@angular/core';
|
|
2
2
|
import { FormGroupName, NgModelGroup } from '@angular/forms';
|
|
3
3
|
import { IfExpandService } from '../../utils/conditional/if-expanded.service';
|
|
4
4
|
import { ClrCommonStringsService } from '../../utils/i18n/common-strings.service';
|
|
@@ -17,11 +17,11 @@ export declare class ClrStepperPanel extends ClrAccordionPanel implements OnInit
|
|
|
17
17
|
get formGroup(): import("@angular/forms").FormGroup<any>;
|
|
18
18
|
get id(): string;
|
|
19
19
|
set id(_value: string);
|
|
20
|
-
constructor(platformId: any, commonStrings: ClrCommonStringsService, formGroupName: FormGroupName, ngModelGroup: NgModelGroup, stepperService: StepperService, ifExpandService: IfExpandService);
|
|
20
|
+
constructor(platformId: any, commonStrings: ClrCommonStringsService, formGroupName: FormGroupName, ngModelGroup: NgModelGroup, stepperService: StepperService, ifExpandService: IfExpandService, cdr: ChangeDetectorRef);
|
|
21
21
|
ngOnInit(): void;
|
|
22
22
|
ngOnDestroy(): void;
|
|
23
23
|
private listenToFocusChanges;
|
|
24
24
|
private triggerAllFormControlValidationIfError;
|
|
25
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ClrStepperPanel, [null, null, { optional: true; }, { optional: true; }, null, null]>;
|
|
25
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClrStepperPanel, [null, null, { optional: true; }, { optional: true; }, null, null, null]>;
|
|
26
26
|
static ɵcmp: i0.ɵɵComponentDeclaration<ClrStepperPanel, "clr-stepper-panel", never, {}, {}, never, ["clr-accordion-title, clr-step-title", "clr-accordion-description, clr-step-description", "*"], false, never>;
|
|
27
27
|
}
|
|
@@ -1,20 +1,27 @@
|
|
|
1
|
-
import { AfterContentInit, QueryList } from '@angular/core';
|
|
1
|
+
import { AfterContentInit, AfterViewInit, ElementRef, QueryList } from '@angular/core';
|
|
2
2
|
import { ClrDestroyService } from '../../utils/destroy/destroy.service';
|
|
3
3
|
import { ClrCommonStringsService } from '../../utils/i18n/common-strings.service';
|
|
4
4
|
import { ClrPopoverPosition } from '../../utils/popover/interfaces/popover-position.interface';
|
|
5
5
|
import { ClrPopoverToggleService } from '../../utils/popover/providers/popover-toggle.service';
|
|
6
|
+
import { ButtonGroupFocusHandler } from '../providers/button-group-focus-handler.service';
|
|
7
|
+
import { InitialFocus } from '../providers/button-group-focus.enum';
|
|
6
8
|
import { ButtonInGroupService } from '../providers/button-in-group.service';
|
|
7
9
|
import { ClrButton } from './button';
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
9
11
|
import * as i1 from "../../utils/popover/popover-host.directive";
|
|
10
|
-
export declare class ClrButtonGroup implements AfterContentInit {
|
|
12
|
+
export declare class ClrButtonGroup implements AfterContentInit, AfterViewInit {
|
|
11
13
|
buttonGroupNewService: ButtonInGroupService;
|
|
12
14
|
private toggleService;
|
|
13
15
|
commonStrings: ClrCommonStringsService;
|
|
14
16
|
private destroy$;
|
|
17
|
+
private focusHandler;
|
|
18
|
+
menuToggle: ElementRef<HTMLElement>;
|
|
19
|
+
menu: ElementRef<HTMLElement>;
|
|
15
20
|
buttons: QueryList<ClrButton>;
|
|
21
|
+
clrToggleButtonAriaLabel: string;
|
|
16
22
|
popoverId: string;
|
|
17
|
-
|
|
23
|
+
InitialFocus: typeof InitialFocus;
|
|
24
|
+
constructor(buttonGroupNewService: ButtonInGroupService, toggleService: ClrPopoverToggleService, commonStrings: ClrCommonStringsService, destroy$: ClrDestroyService, focusHandler: ButtonGroupFocusHandler);
|
|
18
25
|
popoverPosition: ClrPopoverPosition;
|
|
19
26
|
get open(): boolean;
|
|
20
27
|
inlineButtons: ClrButton[];
|
|
@@ -25,6 +32,7 @@ export declare class ClrButtonGroup implements AfterContentInit {
|
|
|
25
32
|
* in case the user content projection changes
|
|
26
33
|
*/
|
|
27
34
|
ngAfterContentInit(): void;
|
|
35
|
+
ngAfterViewInit(): void;
|
|
28
36
|
/**
|
|
29
37
|
* Moves the button into the other ViewContainer
|
|
30
38
|
* when an update is received.
|
|
@@ -32,6 +40,7 @@ export declare class ClrButtonGroup implements AfterContentInit {
|
|
|
32
40
|
* @param button
|
|
33
41
|
*/
|
|
34
42
|
rearrangeButton(button: ClrButton): void;
|
|
43
|
+
openMenu(event: Event, initialFocus: InitialFocus): void;
|
|
35
44
|
/**
|
|
36
45
|
* Author: Eudes
|
|
37
46
|
*
|
|
@@ -49,6 +58,7 @@ export declare class ClrButtonGroup implements AfterContentInit {
|
|
|
49
58
|
private _menuPosition;
|
|
50
59
|
get menuPosition(): string;
|
|
51
60
|
set menuPosition(pos: string);
|
|
61
|
+
private handleFocusOnMenuOpen;
|
|
52
62
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClrButtonGroup, never>;
|
|
53
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ClrButtonGroup, "clr-button-group", never, { "menuPosition": "clrMenuPosition"; }, {}, ["buttons"], never, false, [{ directive: typeof i1.PopoverHostDirective; inputs: {}; outputs: {}; }]>;
|
|
63
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClrButtonGroup, "clr-button-group", never, { "clrToggleButtonAriaLabel": "clrToggleButtonAriaLabel"; "menuPosition": "clrMenuPosition"; }, {}, ["buttons"], never, false, [{ directive: typeof i1.PopoverHostDirective; inputs: {}; outputs: {}; }]>;
|
|
54
64
|
}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { EventEmitter, TemplateRef } from '@angular/core';
|
|
2
2
|
import { ClrLoadingState } from '../../utils/loading/loading';
|
|
3
3
|
import { LoadingListener } from '../../utils/loading/loading-listener';
|
|
4
|
-
import { ClrPopoverToggleService } from '../../utils/popover/providers/popover-toggle.service';
|
|
5
4
|
import { ButtonInGroupService } from '../providers/button-in-group.service';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
6
|
export declare class ClrButton implements LoadingListener {
|
|
8
7
|
buttonInGroupService: ButtonInGroupService;
|
|
9
|
-
private toggleService;
|
|
10
8
|
private _enableService;
|
|
11
9
|
templateRef: TemplateRef<ClrButton>;
|
|
12
|
-
constructor(buttonInGroupService: ButtonInGroupService
|
|
10
|
+
constructor(buttonInGroupService: ButtonInGroupService);
|
|
11
|
+
get role(): string;
|
|
13
12
|
private _inMenu;
|
|
14
13
|
get inMenu(): boolean;
|
|
15
14
|
set inMenu(value: boolean);
|
|
@@ -31,8 +30,8 @@ export declare class ClrButton implements LoadingListener {
|
|
|
31
30
|
loading: boolean;
|
|
32
31
|
loadingStateChange(state: ClrLoadingState): void;
|
|
33
32
|
_click: EventEmitter<boolean>;
|
|
34
|
-
emitClick(
|
|
33
|
+
emitClick(): void;
|
|
35
34
|
ngAfterViewInit(): void;
|
|
36
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ClrButton, [{ optional: true; skipSelf: true; }
|
|
35
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClrButton, [{ optional: true; skipSelf: true; }]>;
|
|
37
36
|
static ɵcmp: i0.ɵɵComponentDeclaration<ClrButton, "clr-button", never, { "inMenu": "clrInMenu"; "classNames": "class"; "name": "name"; "type": "type"; "id": "id"; "disabled": "disabled"; }, { "_click": "click"; }, never, ["*"], false, never>;
|
|
38
37
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Renderer2 } from '@angular/core';
|
|
2
|
+
import { ClrPopoverToggleService } from '../../utils';
|
|
3
|
+
import { FocusService } from '../../utils/focus/focus.service';
|
|
4
|
+
import { InitialFocus } from './button-group-focus.enum';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class ButtonGroupFocusHandler {
|
|
7
|
+
private focusService;
|
|
8
|
+
private toggleService;
|
|
9
|
+
private renderer;
|
|
10
|
+
initialFocus: InitialFocus;
|
|
11
|
+
private menu;
|
|
12
|
+
private menuToggle;
|
|
13
|
+
private buttons;
|
|
14
|
+
private _unlistenFuncs;
|
|
15
|
+
constructor(focusService: FocusService, toggleService: ClrPopoverToggleService, renderer: Renderer2);
|
|
16
|
+
initialize({ menu, menuToggle }: {
|
|
17
|
+
menu: HTMLElement;
|
|
18
|
+
menuToggle: HTMLElement;
|
|
19
|
+
}): void;
|
|
20
|
+
private resetButtonsFocus;
|
|
21
|
+
private listenToKeys;
|
|
22
|
+
private closeMenu;
|
|
23
|
+
private linkButtons;
|
|
24
|
+
private focusFirstItem;
|
|
25
|
+
private focusLastItem;
|
|
26
|
+
ngOnDestroy(): void;
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ButtonGroupFocusHandler, never>;
|
|
28
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ButtonGroupFocusHandler>;
|
|
29
|
+
}
|
|
30
|
+
export declare const BUTTON_GROUP_FOCUS_HANDLER_PROVIDER: {
|
|
31
|
+
provide: typeof ButtonGroupFocusHandler;
|
|
32
|
+
};
|
package/clarity.api.md
CHANGED
|
@@ -269,7 +269,7 @@ export class ClrAccordionModule {
|
|
|
269
269
|
// @public (undocumented)
|
|
270
270
|
export class ClrAccordionPanel implements OnInit, OnChanges {
|
|
271
271
|
// Warning: (ae-forgotten-export) The symbol "IfExpandService" needs to be exported by the entry point index.d.ts
|
|
272
|
-
constructor(commonStrings: ClrCommonStringsService, accordionService: AccordionService, ifExpandService: IfExpandService);
|
|
272
|
+
constructor(commonStrings: ClrCommonStringsService, accordionService: AccordionService, ifExpandService: IfExpandService, cdr: ChangeDetectorRef);
|
|
273
273
|
// (undocumented)
|
|
274
274
|
accordionDescription: QueryList<ClrAccordionDescription>;
|
|
275
275
|
// Warning: (ae-forgotten-export) The symbol "AccordionStatus" needs to be exported by the entry point index.d.ts
|
|
@@ -302,6 +302,8 @@ export class ClrAccordionPanel implements OnInit, OnChanges {
|
|
|
302
302
|
// (undocumented)
|
|
303
303
|
panel: Observable<AccordionPanelModel>;
|
|
304
304
|
// (undocumented)
|
|
305
|
+
get panelNumber(): number;
|
|
306
|
+
// (undocumented)
|
|
305
307
|
panelOpen: boolean;
|
|
306
308
|
// (undocumented)
|
|
307
309
|
panelOpenChange: EventEmitter<boolean>;
|
|
@@ -498,7 +500,7 @@ export enum ClrAxis {
|
|
|
498
500
|
|
|
499
501
|
// @public (undocumented)
|
|
500
502
|
export class ClrButton implements LoadingListener {
|
|
501
|
-
constructor(buttonInGroupService: ButtonInGroupService
|
|
503
|
+
constructor(buttonInGroupService: ButtonInGroupService);
|
|
502
504
|
// Warning: (ae-forgotten-export) The symbol "ButtonInGroupService" needs to be exported by the entry point index.d.ts
|
|
503
505
|
//
|
|
504
506
|
// (undocumented)
|
|
@@ -512,7 +514,7 @@ export class ClrButton implements LoadingListener {
|
|
|
512
514
|
get disabled(): any;
|
|
513
515
|
set disabled(value: any);
|
|
514
516
|
// (undocumented)
|
|
515
|
-
emitClick(
|
|
517
|
+
emitClick(): void;
|
|
516
518
|
// (undocumented)
|
|
517
519
|
get id(): string;
|
|
518
520
|
set id(value: string);
|
|
@@ -529,6 +531,8 @@ export class ClrButton implements LoadingListener {
|
|
|
529
531
|
// (undocumented)
|
|
530
532
|
ngAfterViewInit(): void;
|
|
531
533
|
// (undocumented)
|
|
534
|
+
get role(): string;
|
|
535
|
+
// (undocumented)
|
|
532
536
|
templateRef: TemplateRef<ClrButton>;
|
|
533
537
|
// (undocumented)
|
|
534
538
|
get type(): string;
|
|
@@ -536,38 +540,53 @@ export class ClrButton implements LoadingListener {
|
|
|
536
540
|
// (undocumented)
|
|
537
541
|
static ɵcmp: i0.ɵɵComponentDeclaration<ClrButton, "clr-button", never, { "inMenu": "clrInMenu"; "classNames": "class"; "name": "name"; "type": "type"; "id": "id"; "disabled": "disabled"; }, { "_click": "click"; }, never, ["*"], false, never>;
|
|
538
542
|
// (undocumented)
|
|
539
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ClrButton, [{ optional: true; skipSelf: true; }
|
|
543
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClrButton, [{ optional: true; skipSelf: true; }]>;
|
|
540
544
|
}
|
|
541
545
|
|
|
542
546
|
// @public (undocumented)
|
|
543
|
-
export class ClrButtonGroup implements AfterContentInit {
|
|
544
|
-
|
|
547
|
+
export class ClrButtonGroup implements AfterContentInit, AfterViewInit {
|
|
548
|
+
// Warning: (ae-forgotten-export) The symbol "ButtonGroupFocusHandler" needs to be exported by the entry point index.d.ts
|
|
549
|
+
constructor(buttonGroupNewService: ButtonInGroupService, toggleService: ClrPopoverToggleService, commonStrings: ClrCommonStringsService, destroy$: ClrDestroyService, focusHandler: ButtonGroupFocusHandler);
|
|
545
550
|
// (undocumented)
|
|
546
551
|
buttonGroupNewService: ButtonInGroupService;
|
|
547
552
|
// (undocumented)
|
|
548
553
|
buttons: QueryList<ClrButton>;
|
|
549
554
|
// (undocumented)
|
|
555
|
+
clrToggleButtonAriaLabel: string;
|
|
556
|
+
// (undocumented)
|
|
550
557
|
commonStrings: ClrCommonStringsService;
|
|
551
558
|
getMoveIndex(buttonToMove: ClrButton): number;
|
|
559
|
+
// Warning: (ae-forgotten-export) The symbol "InitialFocus" needs to be exported by the entry point index.d.ts
|
|
560
|
+
//
|
|
561
|
+
// (undocumented)
|
|
562
|
+
InitialFocus: typeof InitialFocus;
|
|
552
563
|
// (undocumented)
|
|
553
564
|
initializeButtons(): void;
|
|
554
565
|
// (undocumented)
|
|
555
566
|
inlineButtons: ClrButton[];
|
|
556
567
|
// (undocumented)
|
|
568
|
+
menu: ElementRef<HTMLElement>;
|
|
569
|
+
// (undocumented)
|
|
557
570
|
menuButtons: ClrButton[];
|
|
558
571
|
// (undocumented)
|
|
559
572
|
get menuPosition(): string;
|
|
560
573
|
set menuPosition(pos: string);
|
|
574
|
+
// (undocumented)
|
|
575
|
+
menuToggle: ElementRef<HTMLElement>;
|
|
561
576
|
ngAfterContentInit(): void;
|
|
562
577
|
// (undocumented)
|
|
578
|
+
ngAfterViewInit(): void;
|
|
579
|
+
// (undocumented)
|
|
563
580
|
get open(): boolean;
|
|
564
581
|
// (undocumented)
|
|
582
|
+
openMenu(event: Event, initialFocus: InitialFocus): void;
|
|
583
|
+
// (undocumented)
|
|
565
584
|
popoverId: string;
|
|
566
585
|
// (undocumented)
|
|
567
586
|
popoverPosition: ClrPopoverPosition;
|
|
568
587
|
rearrangeButton(button: ClrButton): void;
|
|
569
588
|
// (undocumented)
|
|
570
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ClrButtonGroup, "clr-button-group", never, { "menuPosition": "clrMenuPosition"; }, {}, ["buttons"], never, false, [{ directive: typeof i1_6.PopoverHostDirective; inputs: {}; outputs: {}; }]>;
|
|
589
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClrButtonGroup, "clr-button-group", never, { "clrToggleButtonAriaLabel": "clrToggleButtonAriaLabel"; "menuPosition": "clrMenuPosition"; }, {}, ["buttons"], never, false, [{ directive: typeof i1_6.PopoverHostDirective; inputs: {}; outputs: {}; }]>;
|
|
571
590
|
// (undocumented)
|
|
572
591
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClrButtonGroup, never>;
|
|
573
592
|
}
|
|
@@ -1224,14 +1243,12 @@ export class ClrDatagridCell implements OnInit {
|
|
|
1224
1243
|
export class ClrDatagridColumn<T = any> extends DatagridFilterRegistrar<T, ClrDatagridFilterInterface<T>> implements OnDestroy, OnInit, OnChanges {
|
|
1225
1244
|
// Warning: (ae-forgotten-export) The symbol "Sort" needs to be exported by the entry point index.d.ts
|
|
1226
1245
|
// Warning: (ae-forgotten-export) The symbol "FiltersProvider" needs to be exported by the entry point index.d.ts
|
|
1227
|
-
constructor(_sort: Sort<T>, filters: FiltersProvider<T>, vcr: ViewContainerRef, detailService: DetailService, changeDetectorRef: ChangeDetectorRef
|
|
1246
|
+
constructor(_sort: Sort<T>, filters: FiltersProvider<T>, vcr: ViewContainerRef, detailService: DetailService, changeDetectorRef: ChangeDetectorRef);
|
|
1228
1247
|
// (undocumented)
|
|
1229
1248
|
get ariaSort(): "none" | "ascending" | "descending";
|
|
1230
1249
|
// (undocumented)
|
|
1231
1250
|
get colType(): 'string' | 'number';
|
|
1232
1251
|
set colType(value: 'string' | 'number');
|
|
1233
|
-
// (undocumented)
|
|
1234
|
-
commonStrings: ClrCommonStringsService;
|
|
1235
1252
|
customFilter: boolean;
|
|
1236
1253
|
// (undocumented)
|
|
1237
1254
|
get field(): string;
|
|
@@ -1239,15 +1256,9 @@ export class ClrDatagridColumn<T = any> extends DatagridFilterRegistrar<T, ClrDa
|
|
|
1239
1256
|
// (undocumented)
|
|
1240
1257
|
filterNumberMaxPlaceholder: string;
|
|
1241
1258
|
// (undocumented)
|
|
1242
|
-
get filterNumberMaxPlaceholderValue(): string;
|
|
1243
|
-
// (undocumented)
|
|
1244
1259
|
filterNumberMinPlaceholder: string;
|
|
1245
|
-
// (undocumented)
|
|
1246
|
-
get filterNumberMinPlaceholderValue(): string;
|
|
1247
1260
|
filterStringPlaceholder: string;
|
|
1248
1261
|
// (undocumented)
|
|
1249
|
-
get filterStringPlaceholderValue(): string;
|
|
1250
|
-
// (undocumented)
|
|
1251
1262
|
get filterValue(): any;
|
|
1252
1263
|
set filterValue(newValue: any);
|
|
1253
1264
|
// (undocumented)
|
|
@@ -2084,7 +2095,11 @@ export class ClrDestroyService extends Subject<void> implements OnDestroy {
|
|
|
2084
2095
|
// @public (undocumented)
|
|
2085
2096
|
export class ClrDropdown implements OnDestroy {
|
|
2086
2097
|
// Warning: (ae-forgotten-export) The symbol "RootDropdownService" needs to be exported by the entry point index.d.ts
|
|
2087
|
-
constructor(parent: ClrDropdown, toggleService: ClrPopoverToggleService, cdr: ChangeDetectorRef, dropdownService: RootDropdownService);
|
|
2098
|
+
constructor(parent: ClrDropdown, toggleService: ClrPopoverToggleService, focusHandler: DropdownFocusHandler, cdr: ChangeDetectorRef, dropdownService: RootDropdownService);
|
|
2099
|
+
// Warning: (ae-forgotten-export) The symbol "DropdownFocusHandler" needs to be exported by the entry point index.d.ts
|
|
2100
|
+
//
|
|
2101
|
+
// (undocumented)
|
|
2102
|
+
focusHandler: DropdownFocusHandler;
|
|
2088
2103
|
// (undocumented)
|
|
2089
2104
|
isMenuClosable: boolean;
|
|
2090
2105
|
// (undocumented)
|
|
@@ -2096,7 +2111,7 @@ export class ClrDropdown implements OnDestroy {
|
|
|
2096
2111
|
// (undocumented)
|
|
2097
2112
|
static ɵcmp: i0.ɵɵComponentDeclaration<ClrDropdown, "clr-dropdown", never, { "isMenuClosable": "clrCloseMenuOnItemClick"; }, {}, never, ["*"], false, [{ directive: typeof i1_6.PopoverHostDirective; inputs: {}; outputs: {}; }]>;
|
|
2098
2113
|
// (undocumented)
|
|
2099
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ClrDropdown, [{ optional: true; skipSelf: true; }, null, null, null]>;
|
|
2114
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClrDropdown, [{ optional: true; skipSelf: true; }, null, null, null, null]>;
|
|
2100
2115
|
}
|
|
2101
2116
|
|
|
2102
2117
|
// @public (undocumented)
|
|
@@ -2119,7 +2134,6 @@ export class ClrDropdownItem {
|
|
|
2119
2134
|
//
|
|
2120
2135
|
// @public (undocumented)
|
|
2121
2136
|
export class ClrDropdownMenu extends AbstractPopover implements AfterContentInit, OnDestroy {
|
|
2122
|
-
// Warning: (ae-forgotten-export) The symbol "DropdownFocusHandler" needs to be exported by the entry point index.d.ts
|
|
2123
2137
|
constructor(injector: Injector, parentHost: ElementRef<HTMLElement>, nested: ClrDropdownMenu, focusHandler: DropdownFocusHandler);
|
|
2124
2138
|
// (undocumented)
|
|
2125
2139
|
items: QueryList<FocusableItem>;
|
|
@@ -3623,7 +3637,7 @@ export class ClrStepperModule {
|
|
|
3623
3637
|
|
|
3624
3638
|
// @public (undocumented)
|
|
3625
3639
|
export class ClrStepperPanel extends ClrAccordionPanel implements OnInit {
|
|
3626
|
-
constructor(platformId: any, commonStrings: ClrCommonStringsService, formGroupName: FormGroupName, ngModelGroup: NgModelGroup, stepperService: StepperService, ifExpandService: IfExpandService);
|
|
3640
|
+
constructor(platformId: any, commonStrings: ClrCommonStringsService, formGroupName: FormGroupName, ngModelGroup: NgModelGroup, stepperService: StepperService, ifExpandService: IfExpandService, cdr: ChangeDetectorRef);
|
|
3627
3641
|
// (undocumented)
|
|
3628
3642
|
commonStrings: ClrCommonStringsService;
|
|
3629
3643
|
// (undocumented)
|
|
@@ -3642,7 +3656,7 @@ export class ClrStepperPanel extends ClrAccordionPanel implements OnInit {
|
|
|
3642
3656
|
// (undocumented)
|
|
3643
3657
|
static ɵcmp: i0.ɵɵComponentDeclaration<ClrStepperPanel, "clr-stepper-panel", never, {}, {}, never, ["clr-accordion-title, clr-step-title", "clr-accordion-description, clr-step-description", "*"], false, never>;
|
|
3644
3658
|
// (undocumented)
|
|
3645
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ClrStepperPanel, [null, null, { optional: true; }, { optional: true; }, null, null]>;
|
|
3659
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClrStepperPanel, [null, null, { optional: true; }, { optional: true; }, null, null, null]>;
|
|
3646
3660
|
}
|
|
3647
3661
|
|
|
3648
3662
|
// @public (undocumented)
|
|
@@ -5070,7 +5084,7 @@ export class ÇlrWrappedRow implements DynamicWrapper, AfterViewInit, OnDestroy
|
|
|
5070
5084
|
|
|
5071
5085
|
// Warnings were encountered during analysis:
|
|
5072
5086
|
//
|
|
5073
|
-
// dist/clr-angular/button/button-group/button-group.d.ts:
|
|
5087
|
+
// dist/clr-angular/button/button-group/button-group.d.ts:63:217 - (ae-forgotten-export) The symbol "i1_6" needs to be exported by the entry point index.d.ts
|
|
5074
5088
|
|
|
5075
5089
|
// (No @packageDocumentation comment for this package)
|
|
5076
5090
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges, ViewContainerRef } from '@angular/core';
|
|
2
|
-
import { ClrCommonStringsService } from '../../utils/i18n/common-strings.service';
|
|
3
2
|
import { ClrDatagridSortOrder } from './enums/sort-order.enum';
|
|
4
3
|
import { ClrDatagridComparatorInterface } from './interfaces/comparator.interface';
|
|
5
4
|
import { ClrDatagridFilterInterface } from './interfaces/filter.interface';
|
|
@@ -14,8 +13,7 @@ export declare class ClrDatagridColumn<T = any> extends DatagridFilterRegistrar<
|
|
|
14
13
|
private vcr;
|
|
15
14
|
private detailService;
|
|
16
15
|
private changeDetectorRef;
|
|
17
|
-
|
|
18
|
-
constructor(_sort: Sort<T>, filters: FiltersProvider<T>, vcr: ViewContainerRef, detailService: DetailService, changeDetectorRef: ChangeDetectorRef, commonStrings: ClrCommonStringsService);
|
|
16
|
+
constructor(_sort: Sort<T>, filters: FiltersProvider<T>, vcr: ViewContainerRef, detailService: DetailService, changeDetectorRef: ChangeDetectorRef);
|
|
19
17
|
showSeparator: boolean;
|
|
20
18
|
/**
|
|
21
19
|
* Subscription to the sort service changes
|
|
@@ -65,11 +63,8 @@ export declare class ClrDatagridColumn<T = any> extends DatagridFilterRegistrar<
|
|
|
65
63
|
* Help with accessibility for screen readers by providing custom placeholder text inside internal filters
|
|
66
64
|
*/
|
|
67
65
|
filterStringPlaceholder: string;
|
|
68
|
-
get filterStringPlaceholderValue(): string;
|
|
69
66
|
filterNumberMaxPlaceholder: string;
|
|
70
|
-
get filterNumberMaxPlaceholderValue(): string;
|
|
71
67
|
filterNumberMinPlaceholder: string;
|
|
72
|
-
get filterNumberMinPlaceholderValue(): string;
|
|
73
68
|
set updateFilterValue(newValue: string | [number, number]);
|
|
74
69
|
private initFilterValue;
|
|
75
70
|
get filterValue(): any;
|
|
@@ -17,10 +17,11 @@ import * as i3 from "../utils/conditional/if-expanded.service";
|
|
|
17
17
|
import * as i4 from "@angular/common";
|
|
18
18
|
import * as i5 from "../icon/icon";
|
|
19
19
|
export class ClrAccordionPanel {
|
|
20
|
-
constructor(commonStrings, accordionService, ifExpandService) {
|
|
20
|
+
constructor(commonStrings, accordionService, ifExpandService, cdr) {
|
|
21
21
|
this.commonStrings = commonStrings;
|
|
22
22
|
this.accordionService = accordionService;
|
|
23
23
|
this.ifExpandService = ifExpandService;
|
|
24
|
+
this.cdr = cdr;
|
|
24
25
|
this.disabled = false;
|
|
25
26
|
this.panelOpen = false;
|
|
26
27
|
this.panelOpenChange = new EventEmitter();
|
|
@@ -48,6 +49,9 @@ export class ClrAccordionPanel {
|
|
|
48
49
|
this.accordionService.disablePanel(this.id, changes.disabled.currentValue);
|
|
49
50
|
}
|
|
50
51
|
}
|
|
52
|
+
get panelNumber() {
|
|
53
|
+
return this._panelIndex + 1;
|
|
54
|
+
}
|
|
51
55
|
togglePanel() {
|
|
52
56
|
this.accordionService.togglePanel(this.id);
|
|
53
57
|
}
|
|
@@ -66,6 +70,13 @@ export class ClrAccordionPanel {
|
|
|
66
70
|
return `clr-accordion-header-${id}`;
|
|
67
71
|
}
|
|
68
72
|
emitPanelChange(panel) {
|
|
73
|
+
if (panel.index !== this._panelIndex) {
|
|
74
|
+
this._panelIndex = panel.index;
|
|
75
|
+
// The whole chain of updates leading to this line starts in a ngAfterViewInit subscription in accordion.ts,
|
|
76
|
+
// listening for DOM changes. It seems to only fails in tests, but as this is not a frequently called code,
|
|
77
|
+
// I prefer to stay on the safe side and initiate a detection cycle here.
|
|
78
|
+
this.cdr.detectChanges();
|
|
79
|
+
}
|
|
69
80
|
if (panel.open !== this.panelOpen) {
|
|
70
81
|
this.panelOpenChange.emit(panel.open);
|
|
71
82
|
/**
|
|
@@ -84,12 +95,12 @@ export class ClrAccordionPanel {
|
|
|
84
95
|
}
|
|
85
96
|
}
|
|
86
97
|
}
|
|
87
|
-
ClrAccordionPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordionPanel, deps: [{ token: i1.ClrCommonStringsService }, { token: i2.AccordionService }, { token: i3.IfExpandService }], target: i0.ɵɵFactoryTarget.Component });
|
|
88
|
-
ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"
|
|
98
|
+
ClrAccordionPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordionPanel, deps: [{ token: i1.ClrCommonStringsService }, { token: i2.AccordionService }, { token: i3.IfExpandService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
99
|
+
ClrAccordionPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAccordionPanel, selector: "clr-accordion-panel", inputs: { disabled: ["clrAccordionPanelDisabled", "disabled"], panelOpen: ["clrAccordionPanelOpen", "panelOpen"] }, outputs: { panelOpenChange: "clrAccordionPanelOpenChange" }, host: { properties: { "class.clr-accordion-panel": "true" } }, providers: [IfExpandService], queries: [{ propertyName: "accordionDescription", predicate: ClrAccordionDescription }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.CdsIconCustomTag, selector: "cds-icon" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], animations: panelAnimation, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
89
100
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAccordionPanel, decorators: [{
|
|
90
101
|
type: Component,
|
|
91
|
-
args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\"
|
|
92
|
-
}], ctorParameters: function () { return [{ type: i1.ClrCommonStringsService }, { type: i2.AccordionService }, { type: i3.IfExpandService }]; }, propDecorators: { disabled: [{
|
|
102
|
+
args: [{ selector: 'clr-accordion-panel', host: { '[class.clr-accordion-panel]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, animations: panelAnimation, providers: [IfExpandService], template: "<ng-container *ngIf=\"panel | async; let panel\">\n <div [ngClass]=\"getPanelStateClasses(panel)\">\n <div class=\"clr-accordion-header\">\n <button\n type=\"button\"\n class=\"clr-accordion-header-button\"\n (click)=\"togglePanel()\"\n [id]=\"getAccordionHeaderId(panel.templateId)\"\n [disabled]=\"isAccordion && panel.disabled\"\n [attr.aria-disabled]=\"!isAccordion && panel.disabled\"\n [attr.aria-controls]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-expanded]=\"panel.open\"\n [class.clr-accordion-header-has-description]=\"(accordionDescription.changes | async)?.length || accordionDescription.length\"\n #headerButton\n >\n <span class=\"clr-sr-only\">\n <ng-container *ngIf=\"panel.status === AccordionStatus.Error\">{{commonStrings.keys.danger}}</ng-container>\n <ng-container *ngIf=\"panel.status === AccordionStatus.Complete\">{{commonStrings.keys.success}}</ng-container>\n </span>\n <span class=\"clr-accordion-status\">\n <cds-icon shape=\"angle\" direction=\"right\" class=\"clr-accordion-angle\"></cds-icon>\n <span class=\"clr-accordion-number\">{{panelNumber}}.</span>\n <cds-icon status=\"danger\" shape=\"exclamation-circle\" class=\"clr-accordion-error-icon\"></cds-icon>\n <cds-icon status=\"success\" shape=\"check-circle\" class=\"clr-accordion-complete-icon\"></cds-icon>\n </span>\n <ng-content select=\"clr-accordion-title, clr-step-title\"></ng-content>\n <ng-content select=\"clr-accordion-description, clr-step-description\"></ng-content>\n </button>\n </div>\n <div\n @skipInitialRender\n role=\"region\"\n [id]=\"getAccordionContentId(panel.templateId)\"\n [attr.aria-hidden]=\"!panel.open\"\n [attr.aria-labelledby]=\"getAccordionHeaderId(panel.templateId)\"\n >\n <div\n *ngIf=\"panel.open\"\n @toggle\n (@toggle.done)=\"collapsePanelOnAnimationDone(panel)\"\n class=\"clr-accordion-content\"\n >\n <div class=\"clr-accordion-inner-content\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
|
|
103
|
+
}], ctorParameters: function () { return [{ type: i1.ClrCommonStringsService }, { type: i2.AccordionService }, { type: i3.IfExpandService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
|
|
93
104
|
type: Input,
|
|
94
105
|
args: ['clrAccordionPanelDisabled']
|
|
95
106
|
}], panelOpen: [{
|
|
@@ -102,4 +113,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
|
|
|
102
113
|
type: ContentChildren,
|
|
103
114
|
args: [ClrAccordionDescription]
|
|
104
115
|
}] } });
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLXBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvYWNjb3JkaW9uL2FjY29yZGlvbi1wYW5lbC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2FjY29yZGlvbi9hY2NvcmRpb24tcGFuZWwuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7QUFVbkQsTUFBTSxPQUFPLGlCQUFpQjtJQW9CNUIsWUFDUyxhQUFzQyxFQUNyQyxnQkFBa0MsRUFDbEMsZUFBZ0M7UUFGakMsa0JBQWEsR0FBYixhQUFhLENBQXlCO1FBQ3JDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBdEJOLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDckIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNYLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUk1RSxvQkFBZSxHQUFHLGVBQWUsQ0FBQztRQUMzQyxnQkFBVyxHQUFHLElBQUksQ0FBQztRQVVYLFFBQUcs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dEM7SUFDSCxDQUFDOzs4R0FuRlUsaUJBQWlCO2tHQUFqQixpQkFBaUIsOFJBRmpCLENBQUMsZUFBZSxDQUFDLCtEQU1YLHVCQUF1QixrREMxQzFDLHlzRUFpREEsNlZEZGMsY0FBYzsyRkFHZixpQkFBaUI7a0JBUjdCLFNBQVM7K0JBQ0UscUJBQXFCLFFBRXpCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxFQUFFLG1CQUM5Qix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLGNBQWMsYUFDZixDQUFDLGVBQWUsQ0FBQzsyS0FHUSxRQUFRO3NCQUEzQyxLQUFLO3VCQUFDLDJCQUEyQjtnQkFDRixTQUFTO3NCQUF4QyxLQUFLO3VCQUFDLHVCQUF1QjtnQkFDUyxlQUFlO3NCQUFyRCxNQUFNO3VCQUFDLDZCQUE2QjtnQkFDSyxvQkFBb0I7c0JBQTdELGVBQWU7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIzIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElmRXhwYW5kU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL2NvbmRpdGlvbmFsL2lmLWV4cGFuZGVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2xyQ29tbW9uU3RyaW5nc1NlcnZpY2UgfSBmcm9tICcuLi91dGlscy9pMThuL2NvbW1vbi1zdHJpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdW5pcXVlSWRGYWN0b3J5IH0gZnJvbSAnLi4vdXRpbHMvaWQtZ2VuZXJhdG9yL2lkLWdlbmVyYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IENsckFjY29yZGlvbkRlc2NyaXB0aW9uIH0gZnJvbSAnLi9hY2NvcmRpb24tZGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgQWNjb3JkaW9uU3RhdHVzIH0gZnJvbSAnLi9lbnVtcy9hY2NvcmRpb24tc3RhdHVzLmVudW0nO1xuaW1wb3J0IHsgQWNjb3JkaW9uUGFuZWxNb2RlbCB9IGZyb20gJy4vbW9kZWxzL2FjY29yZGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBBY2NvcmRpb25TZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvYWNjb3JkaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgcGFuZWxBbmltYXRpb24gfSBmcm9tICcuL3V0aWxzL2FuaW1hdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nsci1hY2NvcmRpb24tcGFuZWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWNjb3JkaW9uLXBhbmVsLmh0bWwnLFxuICBob3N0OiB7ICdbY2xhc3MuY2xyLWFjY29yZGlvbi1wYW5lbF0nOiAndHJ1ZScgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IHBhbmVsQW5pbWF0aW9uLFxuICBwcm92aWRlcnM6IFtJZkV4cGFuZFNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBDbHJBY2NvcmRpb25QYW5lbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCdjbHJBY2NvcmRpb25QYW5lbERpc2FibGVkJykgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCdjbHJBY2NvcmRpb25QYW5lbE9wZW4nKSBwYW5lbE9wZW4gPSBmYWxzZTtcbiAgQE91dHB1dCgnY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlJykgcGFuZWxPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAQ29udGVudENoaWxkcmVuKENsckFjY29yZGlvbkRlc2NyaXB0aW9uKSBhY2NvcmRpb25EZXNjcmlwdGlvbjogUXVlcnlMaXN0PENsckFjY29yZGlvbkRlc2NyaXB0aW9uPjtcblxuICBwYW5lbDogT2JzZXJ2YWJsZTxBY2NvcmRpb25QYW5lbE1vZGVsPjtcbiAgcmVhZG9ubHkgQWNjb3JkaW9uU3RhdHVzID0gQWNjb3JkaW9uU3RhdHVzO1xuICBpc0FjY29yZGlvbiA9IHRydWU7XG5cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfaWQgPSB1bmlxdWVJZEZhY3RvcnkoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29tbW9uU3RyaW5nczogQ2xyQ29tbW9uU3RyaW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY2NvcmRpb25TZXJ2aWNlOiBBY2NvcmRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgaWZFeHBhbmRTZXJ2aWNlOiBJZkV4cGFuZFNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGFuZWwgPSB0aGlzLmFjY29yZGlvblNlcnZpY2UuZ2V0UGFuZWxDaGFuZ2VzKHRoaXMuaWQpLnBpcGUodGFwKHBhbmVsID0+IHRoaXMuZW1pdFBhbmVsQ2hhbmdlKHBhbmVsKSkpO1xuICAgIHRoaXMuYWNjb3JkaW9uU2VydmljZS5hZGRQYW5lbCh0aGlzLmlkLCB0aGlzLnBhbmVsT3Blbik7XG4gICAgdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsIHRoaXMucGFuZWxPcGVuKTtcbiAgICB0aGlzLmFjY29yZGlvblNlcnZpY2UuZGlzYWJsZVBhbmVsKHRoaXMuaWQsIHRoaXMuZGlzYWJsZWQpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICh0aGlzLnBhbmVsICYmIGNoYW5nZXMucGFuZWxPcGVuICYmIGNoYW5nZXMucGFuZWxPcGVuLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5wYW5lbE9wZW4ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsIGNoYW5nZXMucGFuZWxPcGVuLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFuZWwgJiYgY2hhbmdlcy5kaXNhYmxlZCAmJiBjaGFuZ2VzLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5kaXNhYmxlZC5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICB0aGlzLmFjY29yZGlvblNlcnZpY2UuZGlzYWJsZVBhbmVsKHRoaXMuaWQsIGNoYW5nZXMuZGlzYWJsZWQuY3VycmVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVQYW5lbCgpIHtcbiAgICB0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCk7XG4gIH1cblxuICBjb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKHBhbmVsOiBBY2NvcmRpb25QYW5lbE1vZGVsKSB7XG4gICAgaWYgKCFwYW5lbC5vcGVuKSB7XG4gICAgICB0aGlzLmlmRXhwYW5kU2VydmljZS5leHBhbmRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldFBhbmVsU3RhdGVDbGFzc2VzKHBhbmVsOiBBY2NvcmRpb25QYW5lbE1vZGVsKSB7XG4gICAgcmV0dXJuIGBjbHItYWNjb3JkaW9uLXBhbmVsLSR7cGFuZWwuc3RhdHVzfSAke3BhbmVsLm9wZW4gPyAnY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuJyA6ICcnfWA7XG4gIH1cblxuICBnZXRBY2NvcmRpb25Db250ZW50SWQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiBgY2xyLWFjY29yZGlvbi1jb250ZW50LSR7aWR9J2A7XG4gIH1cblxuICBnZXRBY2NvcmRpb25IZWFkZXJJZChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBjbHItYWNjb3JkaW9uLWhlYWRlci0ke2lkfWA7XG4gIH1cblxuICBwcml2YXRlIGVtaXRQYW5lbENoYW5nZShwYW5lbDogQWNjb3JkaW9uUGFuZWxNb2RlbCkge1xuICAgIGlmIChwYW5lbC5vcGVuICE9PSB0aGlzLnBhbmVsT3Blbikge1xuICAgICAgdGhpcy5wYW5lbE9wZW5DaGFuZ2UuZW1pdChwYW5lbC5vcGVuKTtcbiAgICAgIC8qKlxuICAgICAgICogQE5vdGU6IHRoaXMgbGluZSBiZWxvdyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHVzZSBhbm90aGVyIHZhbHVlIHRvIHRyYWNrXG4gICAgICAgKiBmb3IgY2hhbmdlcyBvZiB0aGUgcGFuZWwuIEJlY2F1c2Ugd2UgdXNlIEJlaGF2aW9yU3ViamVjdCB0aGlzIGVtaXQgZXZlbnQgaXMgdHJpZ2dlciBvblxuICAgICAgICogaW5pdCAodGhhdCBpcyBub3QgbmVlZGVkIC0gdGhlcmUgaXMgbm8gY2hhbmdlIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZSkgLSBpbiBzb21lIGNhc2VzIHRoaXNcbiAgICAgICAqIGxlYWQgdG8gZHVwbGljYXRlIGV2ZW50cy5cbiAgICAgICAqXG4gICAgICAgKiBUbyBwcmV2ZW50IHRoaXMgd2UgdHJ5IHRvIGVtaXQgb25seSB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkIGFuZCBrZWVwIHRoZSB2YWx1ZSBpbiBzeW5jXG4gICAgICAgKiBldmVuIHRoYXQgaXMgdXNlZCBvbmx5IGludG8gdGhlIEluaXRpYWwgTGlmZWN5Y2xlIChuZ09uSW5pdCkuXG4gICAgICAgKi9cbiAgICAgIHRoaXMucGFuZWxPcGVuID0gcGFuZWwub3BlbjtcbiAgICB9XG5cbiAgICBpZiAocGFuZWwub3Blbikge1xuICAgICAgdGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhbmVsIHwgYXN5bmM7IGxldCBwYW5lbFwiPlxuICA8ZGl2IFtuZ0NsYXNzXT1cImdldFBhbmVsU3RhdGVDbGFzc2VzKHBhbmVsKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjbHItYWNjb3JkaW9uLWhlYWRlclwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b25cIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFuZWwoKVwiXG4gICAgICAgIFtpZF09XCJnZXRBY2NvcmRpb25IZWFkZXJJZChwYW5lbC50ZW1wbGF0ZUlkKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0FjY29yZGlvbiAmJiBwYW5lbC5kaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiIWlzQWNjb3JkaW9uICYmIHBhbmVsLmRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJnZXRBY2NvcmRpb25Db250ZW50SWQocGFuZWwudGVtcGxhdGVJZClcIlxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cInBhbmVsLm9wZW5cIlxuICAgICAgICBbY2xhc3MuY2xyLWFjY29yZGlvbi1oZWFkZXItaGFzLWRlc2NyaXB0aW9uXT1cIihhY2NvcmRpb25EZXNjcmlwdGlvbi5jaGFuZ2VzIHwgYXN5bmMpPy5sZW5ndGggfHwgYWNjb3JkaW9uRGVzY3JpcHRpb24ubGVuZ3RoXCJcbiAgICAgICAgI2hlYWRlckJ1dHRvblxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNsci1zci1vbmx5XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhbmVsLnN0YXR1cyA9PT0gQWNjb3JkaW9uU3RhdHVzLkVycm9yXCI+e3tjb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFuZWwuc3RhdHVzID09PSBBY2NvcmRpb25TdGF0dXMuQ29tcGxldGVcIj57e2NvbW1vblN0cmluZ3Mua2V5cy5zdWNjZXNzfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNsci1hY2NvcmRpb24tc3RhdHVzXCI+XG4gICAgICAgICAgPGNkcy1pY29uIHNoYXBlPVwiYW5nbGVcIiBkaXJlY3Rpb249XCJyaWdodFwiIGNsYXNzPVwiY2xyLWFjY29yZGlvbi1hbmdsZVwiPjwvY2RzLWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjbHItYWNjb3JkaW9uLW51bWJlclwiPjwvc3Bhbj5cbiAgICAgICAgICA8Y2RzLWljb24gc3RhdHVzPVwiZGFuZ2VyXCIgc2hhcGU9XCJleGNsYW1hdGlvbi1jaXJjbGVcIiBjbGFzcz1cImNsci1hY2NvcmRpb24tZXJyb3ItaWNvblwiPjwvY2RzLWljb24+XG4gICAgICAgICAgPGNkcy1pY29uIHN0YXR1cz1cInN1Y2Nlc3NcIiBzaGFwZT1cImNoZWNrLWNpcmNsZVwiIGNsYXNzPVwiY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1pY29uXCI+PC9jZHMtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJjbHItYWNjb3JkaW9uLXRpdGxlLCBjbHItc3RlcC10aXRsZVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiwgY2xyLXN0ZXAtZGVzY3JpcHRpb25cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBAc2tpcEluaXRpYWxSZW5kZXJcbiAgICAgIHJvbGU9XCJyZWdpb25cIlxuICAgICAgW2lkXT1cImdldEFjY29yZGlvbkNvbnRlbnRJZChwYW5lbC50ZW1wbGF0ZUlkKVwiXG4gICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhcGFuZWwub3BlblwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiZ2V0QWNjb3JkaW9uSGVhZGVySWQocGFuZWwudGVtcGxhdGVJZClcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwYW5lbC5vcGVuXCJcbiAgICAgICAgQHRvZ2dsZVxuICAgICAgICAoQHRvZ2dsZS5kb25lKT1cImNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRvbmUocGFuZWwpXCJcbiAgICAgICAgY2xhc3M9XCJjbHItYWNjb3JkaW9uLWNvbnRlbnRcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50XCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLXBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvYWNjb3JkaW9uL2FjY29yZGlvbi1wYW5lbC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2FjY29yZGlvbi9hY2NvcmRpb24tcGFuZWwuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7QUFVbkQsTUFBTSxPQUFPLGlCQUFpQjtJQXFCNUIsWUFDUyxhQUFzQyxFQUNyQyxnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMsR0FBc0I7UUFIdkIsa0JBQWEsR0FBYixhQUFhLENBQXlCO1FBQ3JDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBeEJJLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDckIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNYLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUk1RSxvQkFBZSxHQUFHLGVBQWUsQ0FB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QUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEM7Ozs7Ozs7O2VBUUc7WUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDN0I7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDdEM7SUFDSCxDQUFDOzs4R0FqR1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsOFJBRmpCLENBQUMsZUFBZSxDQUFDLCtEQU1YLHVCQUF1QixrREMzQzFDLHl0RUFpREEsNlZEYmMsY0FBYzsyRkFHZixpQkFBaUI7a0JBUjdCLFNBQVM7K0JBQ0UscUJBQXFCLFFBRXpCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxFQUFFLG1CQUM5Qix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLGNBQWMsYUFDZixDQUFDLGVBQWUsQ0FBQzsyTUFHUSxRQUFRO3NCQUEzQyxLQUFLO3VCQUFDLDJCQUEyQjtnQkFDRixTQUFTO3NCQUF4QyxLQUFLO3VCQUFDLHVCQUF1QjtnQkFDUyxlQUFlO3NCQUFyRCxNQUFNO3VCQUFDLDZCQUE2QjtnQkFDSyxvQkFBb0I7c0JBQTdELGVBQWU7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIzIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJZkV4cGFuZFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9jb25kaXRpb25hbC9pZi1leHBhbmRlZC5zZXJ2aWNlJztcbmltcG9ydCB7IENsckNvbW1vblN0cmluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvaTE4bi9jb21tb24tc3RyaW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IHVuaXF1ZUlkRmFjdG9yeSB9IGZyb20gJy4uL3V0aWxzL2lkLWdlbmVyYXRvci9pZC1nZW5lcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBDbHJBY2NvcmRpb25EZXNjcmlwdGlvbiB9IGZyb20gJy4vYWNjb3JkaW9uLWRlc2NyaXB0aW9uJztcbmltcG9ydCB7IEFjY29yZGlvblN0YXR1cyB9IGZyb20gJy4vZW51bXMvYWNjb3JkaW9uLXN0YXR1cy5lbnVtJztcbmltcG9ydCB7IEFjY29yZGlvblBhbmVsTW9kZWwgfSBmcm9tICcuL21vZGVscy9hY2NvcmRpb24ubW9kZWwnO1xuaW1wb3J0IHsgQWNjb3JkaW9uU2VydmljZSB9IGZyb20gJy4vcHJvdmlkZXJzL2FjY29yZGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IHBhbmVsQW5pbWF0aW9uIH0gZnJvbSAnLi91dGlscy9hbmltYXRpb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbHItYWNjb3JkaW9uLXBhbmVsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjY29yZGlvbi1wYW5lbC5odG1sJyxcbiAgaG9zdDogeyAnW2NsYXNzLmNsci1hY2NvcmRpb24tcGFuZWxdJzogJ3RydWUnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBwYW5lbEFuaW1hdGlvbixcbiAgcHJvdmlkZXJzOiBbSWZFeHBhbmRTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2xyQWNjb3JkaW9uUGFuZWwgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgnY2xyQWNjb3JkaW9uUGFuZWxEaXNhYmxlZCcpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgnY2xyQWNjb3JkaW9uUGFuZWxPcGVuJykgcGFuZWxPcGVuID0gZmFsc2U7XG4gIEBPdXRwdXQoJ2NsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZScpIHBhbmVsT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQENvbnRlbnRDaGlsZHJlbihDbHJBY2NvcmRpb25EZXNjcmlwdGlvbikgYWNjb3JkaW9uRGVzY3JpcHRpb246IFF1ZXJ5TGlzdDxDbHJBY2NvcmRpb25EZXNjcmlwdGlvbj47XG5cbiAgcGFuZWw6IE9ic2VydmFibGU8QWNjb3JkaW9uUGFuZWxNb2RlbD47XG4gIHJlYWRvbmx5IEFjY29yZGlvblN0YXR1cyA9IEFjY29yZGlvblN0YXR1cztcbiAgaXNBY2NvcmRpb24gPSB0cnVlO1xuXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuXG4gIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2lkID0gdW5pcXVlSWRGYWN0b3J5KCk7XG4gIHByaXZhdGUgX3BhbmVsSW5kZXg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29tbW9uU3RyaW5nczogQ2xyQ29tbW9uU3RyaW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY2NvcmRpb25TZXJ2aWNlOiBBY2NvcmRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgaWZFeHBhbmRTZXJ2aWNlOiBJZkV4cGFuZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBhbmVsID0gdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmdldFBhbmVsQ2hhbmdlcyh0aGlzLmlkKS5waXBlKHRhcChwYW5lbCA9PiB0aGlzLmVtaXRQYW5lbENoYW5nZShwYW5lbCkpKTtcbiAgICB0aGlzLmFjY29yZGlvblNlcnZpY2UuYWRkUGFuZWwodGhpcy5pZCwgdGhpcy5wYW5lbE9wZW4pO1xuICAgIHRoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkLCB0aGlzLnBhbmVsT3Blbik7XG4gICAgdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLCB0aGlzLmRpc2FibGVkKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAodGhpcy5wYW5lbCAmJiBjaGFuZ2VzLnBhbmVsT3BlbiAmJiBjaGFuZ2VzLnBhbmVsT3Blbi5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMucGFuZWxPcGVuLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIHRoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkLCBjaGFuZ2VzLnBhbmVsT3Blbi5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhbmVsICYmIGNoYW5nZXMuZGlzYWJsZWQgJiYgY2hhbmdlcy5kaXNhYmxlZC5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuZGlzYWJsZWQucHJldmlvdXNWYWx1ZSkge1xuICAgICAgdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLCBjaGFuZ2VzLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhbmVsTnVtYmVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wYW5lbEluZGV4ICsgMTtcbiAgfVxuXG4gIHRvZ2dsZVBhbmVsKCkge1xuICAgIHRoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkKTtcbiAgfVxuXG4gIGNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRvbmUocGFuZWw6IEFjY29yZGlvblBhbmVsTW9kZWwpIHtcbiAgICBpZiAoIXBhbmVsLm9wZW4pIHtcbiAgICAgIHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGFuZWxTdGF0ZUNsYXNzZXMocGFuZWw6IEFjY29yZGlvblBhbmVsTW9kZWwpIHtcbiAgICByZXR1cm4gYGNsci1hY2NvcmRpb24tcGFuZWwtJHtwYW5lbC5zdGF0dXN9ICR7cGFuZWwub3BlbiA/ICdjbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4nIDogJyd9YDtcbiAgfVxuXG4gIGdldEFjY29yZGlvbkNvbnRlbnRJZChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBjbHItYWNjb3JkaW9uLWNvbnRlbnQtJHtpZH0nYDtcbiAgfVxuXG4gIGdldEFjY29yZGlvbkhlYWRlcklkKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYGNsci1hY2NvcmRpb24taGVhZGVyLSR7aWR9YDtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFBhbmVsQ2hhbmdlKHBhbmVsOiBBY2NvcmRpb25QYW5lbE1vZGVsKSB7XG4gICAgaWYgKHBhbmVsLmluZGV4ICE9PSB0aGlzLl9wYW5lbEluZGV4KSB7XG4gICAgICB0aGlzLl9wYW5lbEluZGV4ID0gcGFuZWwuaW5kZXg7XG4gICAgICAvLyBUaGUgd2hvbGUgY2hhaW4gb2YgdXBkYXRlcyBsZWFkaW5nIHRvIHRoaXMgbGluZSBzdGFydHMgaW4gYSBuZ0FmdGVyVmlld0luaXQgc3Vic2NyaXB0aW9uIGluIGFjY29yZGlvbi50cyxcbiAgICAgIC8vIGxpc3RlbmluZyBmb3IgRE9NIGNoYW5nZXMuIEl0IHNlZW1zIHRvIG9ubHkgZmFpbHMgaW4gdGVzdHMsIGJ1dCBhcyB0aGlzIGlzIG5vdCBhIGZyZXF1ZW50bHkgY2FsbGVkIGNvZGUsXG4gICAgICAvLyBJIHByZWZlciB0byBzdGF5IG9uIHRoZSBzYWZlIHNpZGUgYW5kIGluaXRpYXRlIGEgZGV0ZWN0aW9uIGN5Y2xlIGhlcmUuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgaWYgKHBhbmVsLm9wZW4gIT09IHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLnBhbmVsT3BlbkNoYW5nZS5lbWl0KHBhbmVsLm9wZW4pO1xuICAgICAgLyoqXG4gICAgICAgKiBATm90ZTogdGhpcyBsaW5lIGJlbG93IGlzIG5lZWRlZCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gdXNlIGFub3RoZXIgdmFsdWUgdG8gdHJhY2tcbiAgICAgICAqIGZvciBjaGFuZ2VzIG9mIHRoZSBwYW5lbC4gQmVjYXVzZSB3ZSB1c2UgQmVoYXZpb3JTdWJqZWN0IHRoaXMgZW1pdCBldmVudCBpcyB0cmlnZ2VyIG9uXG4gICAgICAgKiBpbml0ICh0aGF0IGlzIG5vdCBuZWVkZWQgLSB0aGVyZSBpcyBubyBjaGFuZ2Ugb2YgdGhlIG9yaWdpbmFsIHZhbHVlKSAtIGluIHNvbWUgY2FzZXMgdGhpc1xuICAgICAgICogbGVhZCB0byBkdXBsaWNhdGUgZXZlbnRzLlxuICAgICAgICpcbiAgICAgICAqIFRvIHByZXZlbnQgdGhpcyB3ZSB0cnkgdG8gZW1pdCBvbmx5IHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQgYW5kIGtlZXAgdGhlIHZhbHVlIGluIHN5bmNcbiAgICAgICAqIGV2ZW4gdGhhdCBpcyB1c2VkIG9ubHkgaW50byB0aGUgSW5pdGlhbCBMaWZlY3ljbGUgKG5nT25Jbml0KS5cbiAgICAgICAqL1xuICAgICAgdGhpcy5wYW5lbE9wZW4gPSBwYW5lbC5vcGVuO1xuICAgIH1cblxuICAgIGlmIChwYW5lbC5vcGVuKSB7XG4gICAgICB0aGlzLmlmRXhwYW5kU2VydmljZS5leHBhbmRlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwicGFuZWwgfCBhc3luYzsgbGV0IHBhbmVsXCI+XG4gIDxkaXYgW25nQ2xhc3NdPVwiZ2V0UGFuZWxTdGF0ZUNsYXNzZXMocGFuZWwpXCI+XG4gICAgPGRpdiBjbGFzcz1cImNsci1hY2NvcmRpb24taGVhZGVyXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lbCgpXCJcbiAgICAgICAgW2lkXT1cImdldEFjY29yZGlvbkhlYWRlcklkKHBhbmVsLnRlbXBsYXRlSWQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzQWNjb3JkaW9uICYmIHBhbmVsLmRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCIhaXNBY2NvcmRpb24gJiYgcGFuZWwuZGlzYWJsZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImdldEFjY29yZGlvbkNvbnRlbnRJZChwYW5lbC50ZW1wbGF0ZUlkKVwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwicGFuZWwub3BlblwiXG4gICAgICAgIFtjbGFzcy5jbHItYWNjb3JkaW9uLWhlYWRlci1oYXMtZGVzY3JpcHRpb25dPVwiKGFjY29yZGlvbkRlc2NyaXB0aW9uLmNoYW5nZXMgfCBhc3luYyk/Lmxlbmd0aCB8fCBhY2NvcmRpb25EZXNjcmlwdGlvbi5sZW5ndGhcIlxuICAgICAgICAjaGVhZGVyQnV0dG9uXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY2xyLXNyLW9ubHlcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFuZWwuc3RhdHVzID09PSBBY2NvcmRpb25TdGF0dXMuRXJyb3JcIj57e2NvbW1vblN0cmluZ3Mua2V5cy5kYW5nZXJ9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYW5lbC5zdGF0dXMgPT09IEFjY29yZGlvblN0YXR1cy5Db21wbGV0ZVwiPnt7Y29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3N9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY2xyLWFjY29yZGlvbi1zdGF0dXNcIj5cbiAgICAgICAgICA8Y2RzLWljb24gc2hhcGU9XCJhbmdsZVwiIGRpcmVjdGlvbj1cInJpZ2h0XCIgY2xhc3M9XCJjbHItYWNjb3JkaW9uLWFuZ2xlXCI+PC9jZHMtaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNsci1hY2NvcmRpb24tbnVtYmVyXCI+e3twYW5lbE51bWJlcn19Ljwvc3Bhbj5cbiAgICAgICAgICA8Y2RzLWljb24gc3RhdHVzPVwiZGFuZ2VyXCIgc2hhcGU9XCJleGNsYW1hdGlvbi1jaXJjbGVcIiBjbGFzcz1cImNsci1hY2NvcmRpb24tZXJyb3ItaWNvblwiPjwvY2RzLWljb24+XG4gICAgICAgICAgPGNkcy1pY29uIHN0YXR1cz1cInN1Y2Nlc3NcIiBzaGFwZT1cImNoZWNrLWNpcmNsZVwiIGNsYXNzPVwiY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1pY29uXCI+PC9jZHMtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJjbHItYWNjb3JkaW9uLXRpdGxlLCBjbHItc3RlcC10aXRsZVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiwgY2xyLXN0ZXAtZGVzY3JpcHRpb25cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBAc2tpcEluaXRpYWxSZW5kZXJcbiAgICAgIHJvbGU9XCJyZWdpb25cIlxuICAgICAgW2lkXT1cImdldEFjY29yZGlvbkNvbnRlbnRJZChwYW5lbC50ZW1wbGF0ZUlkKVwiXG4gICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhcGFuZWwub3BlblwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiZ2V0QWNjb3JkaW9uSGVhZGVySWQocGFuZWwudGVtcGxhdGVJZClcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwYW5lbC5vcGVuXCJcbiAgICAgICAgQHRvZ2dsZVxuICAgICAgICAoQHRvZ2dsZS5kb25lKT1cImNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRvbmUocGFuZWwpXCJcbiAgICAgICAgY2xhc3M9XCJjbHItYWNjb3JkaW9uLWNvbnRlbnRcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50XCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
|