@clr/angular 15.1.0 → 15.3.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 +12 -3
- 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 +52 -10
- package/data/datagrid/datagrid-action-overflow.d.ts +2 -1
- package/data/datagrid/datagrid-row.d.ts +4 -0
- package/emphasis/alert/alerts-pager.d.ts +2 -0
- 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 +47 -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/datagrid-action-overflow.mjs +9 -6
- package/esm2020/data/datagrid/datagrid-row.mjs +14 -3
- package/esm2020/emphasis/alert/alerts-pager.mjs +17 -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 +2 -1
- package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +5 -5
- package/esm2020/utils/focus/focus.service.mjs +3 -3
- package/esm2020/utils/i18n/common-strings.default.mjs +3 -1
- package/esm2020/utils/i18n/common-strings.interface.mjs +1 -1
- package/esm2020/utils/popover/index.mjs +2 -1
- package/esm2020/utils/popover/popover-host.directive.mjs +4 -4
- package/esm2020/utils/popover/stop-escape-propagation.directive.mjs +5 -5
- package/fesm2015/clr-angular.mjs +11182 -11005
- package/fesm2015/clr-angular.mjs.map +1 -1
- package/fesm2020/clr-angular.mjs +10917 -10740
- 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/utils/focus/focus.service.d.ts +1 -1
- package/utils/i18n/common-strings.interface.d.ts +8 -0
- package/utils/popover/index.d.ts +1 -0
- package/utils/popover/popover-host.directive.d.ts +1 -1
- package/utils/popover/stop-escape-propagation.directive.d.ts +3 -3
|
@@ -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,21 +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>;
|
|
16
21
|
clrToggleButtonAriaLabel: string;
|
|
17
22
|
popoverId: string;
|
|
18
|
-
|
|
23
|
+
InitialFocus: typeof InitialFocus;
|
|
24
|
+
constructor(buttonGroupNewService: ButtonInGroupService, toggleService: ClrPopoverToggleService, commonStrings: ClrCommonStringsService, destroy$: ClrDestroyService, focusHandler: ButtonGroupFocusHandler);
|
|
19
25
|
popoverPosition: ClrPopoverPosition;
|
|
20
26
|
get open(): boolean;
|
|
21
27
|
inlineButtons: ClrButton[];
|
|
@@ -26,6 +32,7 @@ export declare class ClrButtonGroup implements AfterContentInit {
|
|
|
26
32
|
* in case the user content projection changes
|
|
27
33
|
*/
|
|
28
34
|
ngAfterContentInit(): void;
|
|
35
|
+
ngAfterViewInit(): void;
|
|
29
36
|
/**
|
|
30
37
|
* Moves the button into the other ViewContainer
|
|
31
38
|
* when an update is received.
|
|
@@ -33,6 +40,7 @@ export declare class ClrButtonGroup implements AfterContentInit {
|
|
|
33
40
|
* @param button
|
|
34
41
|
*/
|
|
35
42
|
rearrangeButton(button: ClrButton): void;
|
|
43
|
+
openMenu(event: Event, initialFocus: InitialFocus): void;
|
|
36
44
|
/**
|
|
37
45
|
* Author: Eudes
|
|
38
46
|
*
|
|
@@ -50,6 +58,7 @@ export declare class ClrButtonGroup implements AfterContentInit {
|
|
|
50
58
|
private _menuPosition;
|
|
51
59
|
get menuPosition(): string;
|
|
52
60
|
set menuPosition(pos: string);
|
|
61
|
+
private handleFocusOnMenuOpen;
|
|
53
62
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClrButtonGroup, never>;
|
|
54
63
|
static ɵcmp: i0.ɵɵComponentDeclaration<ClrButtonGroup, "clr-button-group", never, { "clrToggleButtonAriaLabel": "clrToggleButtonAriaLabel"; "menuPosition": "clrMenuPosition"; }, {}, ["buttons"], never, false, [{ directive: typeof i1.PopoverHostDirective; inputs: {}; outputs: {}; }]>;
|
|
55
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>;
|
|
@@ -442,6 +444,8 @@ export class ClrAlertsPager implements OnInit, OnDestroy {
|
|
|
442
444
|
// (undocumented)
|
|
443
445
|
multiAlertService: MultiAlertService;
|
|
444
446
|
// (undocumented)
|
|
447
|
+
protected get nextAlertAriaLabel(): string;
|
|
448
|
+
// (undocumented)
|
|
445
449
|
ngOnDestroy(): void;
|
|
446
450
|
// (undocumented)
|
|
447
451
|
ngOnInit(): void;
|
|
@@ -450,6 +454,8 @@ export class ClrAlertsPager implements OnInit, OnDestroy {
|
|
|
450
454
|
// (undocumented)
|
|
451
455
|
pageUp(): void;
|
|
452
456
|
// (undocumented)
|
|
457
|
+
protected get previousAlertAriaLabel(): string;
|
|
458
|
+
// (undocumented)
|
|
453
459
|
static ɵcmp: i0.ɵɵComponentDeclaration<ClrAlertsPager, "clr-alerts-pager", never, { "currentAlert": "clrCurrentAlert"; "currentAlertIndex": "clrCurrentAlertIndex"; }, { "currentAlertChange": "clrCurrentAlertChange"; "currentAlertIndexChange": "clrCurrentAlertIndexChange"; }, never, never, false, never>;
|
|
454
460
|
// (undocumented)
|
|
455
461
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClrAlertsPager, never>;
|
|
@@ -498,7 +504,7 @@ export enum ClrAxis {
|
|
|
498
504
|
|
|
499
505
|
// @public (undocumented)
|
|
500
506
|
export class ClrButton implements LoadingListener {
|
|
501
|
-
constructor(buttonInGroupService: ButtonInGroupService
|
|
507
|
+
constructor(buttonInGroupService: ButtonInGroupService);
|
|
502
508
|
// Warning: (ae-forgotten-export) The symbol "ButtonInGroupService" needs to be exported by the entry point index.d.ts
|
|
503
509
|
//
|
|
504
510
|
// (undocumented)
|
|
@@ -512,7 +518,7 @@ export class ClrButton implements LoadingListener {
|
|
|
512
518
|
get disabled(): any;
|
|
513
519
|
set disabled(value: any);
|
|
514
520
|
// (undocumented)
|
|
515
|
-
emitClick(
|
|
521
|
+
emitClick(): void;
|
|
516
522
|
// (undocumented)
|
|
517
523
|
get id(): string;
|
|
518
524
|
set id(value: string);
|
|
@@ -529,6 +535,8 @@ export class ClrButton implements LoadingListener {
|
|
|
529
535
|
// (undocumented)
|
|
530
536
|
ngAfterViewInit(): void;
|
|
531
537
|
// (undocumented)
|
|
538
|
+
get role(): string;
|
|
539
|
+
// (undocumented)
|
|
532
540
|
templateRef: TemplateRef<ClrButton>;
|
|
533
541
|
// (undocumented)
|
|
534
542
|
get type(): string;
|
|
@@ -536,12 +544,13 @@ export class ClrButton implements LoadingListener {
|
|
|
536
544
|
// (undocumented)
|
|
537
545
|
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
546
|
// (undocumented)
|
|
539
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ClrButton, [{ optional: true; skipSelf: true; }
|
|
547
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClrButton, [{ optional: true; skipSelf: true; }]>;
|
|
540
548
|
}
|
|
541
549
|
|
|
542
550
|
// @public (undocumented)
|
|
543
|
-
export class ClrButtonGroup implements AfterContentInit {
|
|
544
|
-
|
|
551
|
+
export class ClrButtonGroup implements AfterContentInit, AfterViewInit {
|
|
552
|
+
// Warning: (ae-forgotten-export) The symbol "ButtonGroupFocusHandler" needs to be exported by the entry point index.d.ts
|
|
553
|
+
constructor(buttonGroupNewService: ButtonInGroupService, toggleService: ClrPopoverToggleService, commonStrings: ClrCommonStringsService, destroy$: ClrDestroyService, focusHandler: ButtonGroupFocusHandler);
|
|
545
554
|
// (undocumented)
|
|
546
555
|
buttonGroupNewService: ButtonInGroupService;
|
|
547
556
|
// (undocumented)
|
|
@@ -551,19 +560,31 @@ export class ClrButtonGroup implements AfterContentInit {
|
|
|
551
560
|
// (undocumented)
|
|
552
561
|
commonStrings: ClrCommonStringsService;
|
|
553
562
|
getMoveIndex(buttonToMove: ClrButton): number;
|
|
563
|
+
// Warning: (ae-forgotten-export) The symbol "InitialFocus" needs to be exported by the entry point index.d.ts
|
|
564
|
+
//
|
|
565
|
+
// (undocumented)
|
|
566
|
+
InitialFocus: typeof InitialFocus;
|
|
554
567
|
// (undocumented)
|
|
555
568
|
initializeButtons(): void;
|
|
556
569
|
// (undocumented)
|
|
557
570
|
inlineButtons: ClrButton[];
|
|
558
571
|
// (undocumented)
|
|
572
|
+
menu: ElementRef<HTMLElement>;
|
|
573
|
+
// (undocumented)
|
|
559
574
|
menuButtons: ClrButton[];
|
|
560
575
|
// (undocumented)
|
|
561
576
|
get menuPosition(): string;
|
|
562
577
|
set menuPosition(pos: string);
|
|
578
|
+
// (undocumented)
|
|
579
|
+
menuToggle: ElementRef<HTMLElement>;
|
|
563
580
|
ngAfterContentInit(): void;
|
|
564
581
|
// (undocumented)
|
|
582
|
+
ngAfterViewInit(): void;
|
|
583
|
+
// (undocumented)
|
|
565
584
|
get open(): boolean;
|
|
566
585
|
// (undocumented)
|
|
586
|
+
openMenu(event: Event, initialFocus: InitialFocus): void;
|
|
587
|
+
// (undocumented)
|
|
567
588
|
popoverId: string;
|
|
568
589
|
// (undocumented)
|
|
569
590
|
popoverPosition: ClrPopoverPosition;
|
|
@@ -867,6 +888,8 @@ export class ClrCommonFormsModule {
|
|
|
867
888
|
// @public (undocumented)
|
|
868
889
|
export interface ClrCommonStrings {
|
|
869
890
|
alertCloseButtonAriaLabel: string;
|
|
891
|
+
alertNextAlertAriaLabel: string;
|
|
892
|
+
alertPreviousAlertAriaLabel: string;
|
|
870
893
|
allColumnsSelected: string;
|
|
871
894
|
close: string;
|
|
872
895
|
collapse: string;
|
|
@@ -1186,6 +1209,8 @@ export class ClrDatagridActionBar {
|
|
|
1186
1209
|
export class ClrDatagridActionOverflow implements OnDestroy {
|
|
1187
1210
|
constructor(rowActionService: RowActionService, commonStrings: ClrCommonStringsService, platformId: any, zone: NgZone, smartToggleService: ClrPopoverToggleService);
|
|
1188
1211
|
// (undocumented)
|
|
1212
|
+
buttonLabel: string;
|
|
1213
|
+
// (undocumented)
|
|
1189
1214
|
closeOverflowContent(event: Event): void;
|
|
1190
1215
|
// (undocumented)
|
|
1191
1216
|
commonStrings: ClrCommonStringsService;
|
|
@@ -1201,7 +1226,7 @@ export class ClrDatagridActionOverflow implements OnDestroy {
|
|
|
1201
1226
|
// (undocumented)
|
|
1202
1227
|
smartPosition: ClrPopoverPosition;
|
|
1203
1228
|
// (undocumented)
|
|
1204
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridActionOverflow, "clr-dg-action-overflow", never, { "open": "clrDgActionOverflowOpen"; }, { "openChange": "clrDgActionOverflowOpenChange"; }, never, ["*"], false, [{ directive: typeof i1_6.PopoverHostDirective; inputs: {}; outputs: {}; }]>;
|
|
1229
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridActionOverflow, "clr-dg-action-overflow", never, { "open": "clrDgActionOverflowOpen"; "buttonLabel": "clrDgActionOverflowButtonLabel"; }, { "openChange": "clrDgActionOverflowOpenChange"; }, never, ["*"], false, [{ directive: typeof i1_6.PopoverHostDirective; inputs: {}; outputs: {}; }]>;
|
|
1205
1230
|
// (undocumented)
|
|
1206
1231
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridActionOverflow, never>;
|
|
1207
1232
|
}
|
|
@@ -1730,6 +1755,8 @@ export class ClrDatagridRow<T = any> implements AfterContentInit, AfterViewInit
|
|
|
1730
1755
|
selection: Selection_2<T>;
|
|
1731
1756
|
// (undocumented)
|
|
1732
1757
|
SELECTION_TYPE: typeof SelectionType;
|
|
1758
|
+
// @deprecated (undocumented)
|
|
1759
|
+
protected selectRow(selected?: boolean): void;
|
|
1733
1760
|
// (undocumented)
|
|
1734
1761
|
_stickyCells: ViewContainerRef;
|
|
1735
1762
|
// (undocumented)
|
|
@@ -3620,7 +3647,7 @@ export class ClrStepperModule {
|
|
|
3620
3647
|
|
|
3621
3648
|
// @public (undocumented)
|
|
3622
3649
|
export class ClrStepperPanel extends ClrAccordionPanel implements OnInit {
|
|
3623
|
-
constructor(platformId: any, commonStrings: ClrCommonStringsService, formGroupName: FormGroupName, ngModelGroup: NgModelGroup, stepperService: StepperService, ifExpandService: IfExpandService);
|
|
3650
|
+
constructor(platformId: any, commonStrings: ClrCommonStringsService, formGroupName: FormGroupName, ngModelGroup: NgModelGroup, stepperService: StepperService, ifExpandService: IfExpandService, cdr: ChangeDetectorRef);
|
|
3624
3651
|
// (undocumented)
|
|
3625
3652
|
commonStrings: ClrCommonStringsService;
|
|
3626
3653
|
// (undocumented)
|
|
@@ -3639,7 +3666,22 @@ export class ClrStepperPanel extends ClrAccordionPanel implements OnInit {
|
|
|
3639
3666
|
// (undocumented)
|
|
3640
3667
|
static ɵcmp: i0.ɵɵComponentDeclaration<ClrStepperPanel, "clr-stepper-panel", never, {}, {}, never, ["clr-accordion-title, clr-step-title", "clr-accordion-description, clr-step-description", "*"], false, never>;
|
|
3641
3668
|
// (undocumented)
|
|
3642
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ClrStepperPanel, [null, null, { optional: true; }, { optional: true; }, null, null]>;
|
|
3669
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClrStepperPanel, [null, null, { optional: true; }, { optional: true; }, null, null, null]>;
|
|
3670
|
+
}
|
|
3671
|
+
|
|
3672
|
+
// @public (undocumented)
|
|
3673
|
+
export class ClrStopEscapePropagationDirective implements OnInit, OnDestroy {
|
|
3674
|
+
constructor(toggleService: ClrPopoverToggleService);
|
|
3675
|
+
// (undocumented)
|
|
3676
|
+
ngOnDestroy(): void;
|
|
3677
|
+
// (undocumented)
|
|
3678
|
+
ngOnInit(): void;
|
|
3679
|
+
// (undocumented)
|
|
3680
|
+
onEscapeKey(event: KeyboardEvent): void;
|
|
3681
|
+
// (undocumented)
|
|
3682
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ClrStopEscapePropagationDirective, never, never, {}, {}, never, never, true, never>;
|
|
3683
|
+
// (undocumented)
|
|
3684
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClrStopEscapePropagationDirective, never>;
|
|
3643
3685
|
}
|
|
3644
3686
|
|
|
3645
3687
|
// @public (undocumented)
|
|
@@ -5067,7 +5109,7 @@ export class ÇlrWrappedRow implements DynamicWrapper, AfterViewInit, OnDestroy
|
|
|
5067
5109
|
|
|
5068
5110
|
// Warnings were encountered during analysis:
|
|
5069
5111
|
//
|
|
5070
|
-
// dist/clr-angular/button/button-group/button-group.d.ts:
|
|
5112
|
+
// 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
|
|
5071
5113
|
|
|
5072
5114
|
// (No @packageDocumentation comment for this package)
|
|
5073
5115
|
|
|
@@ -23,6 +23,7 @@ export declare class ClrDatagridActionOverflow implements OnDestroy {
|
|
|
23
23
|
get open(): boolean;
|
|
24
24
|
set open(open: boolean);
|
|
25
25
|
openChange: EventEmitter<boolean>;
|
|
26
|
+
buttonLabel: string;
|
|
26
27
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClrDatagridActionOverflow, never>;
|
|
27
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridActionOverflow, "clr-dg-action-overflow", never, { "open": "clrDgActionOverflowOpen"; }, { "openChange": "clrDgActionOverflowOpenChange"; }, never, ["*"], false, [{ directive: typeof i1.PopoverHostDirective; inputs: {}; outputs: {}; }]>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClrDatagridActionOverflow, "clr-dg-action-overflow", never, { "open": "clrDgActionOverflowOpen"; "buttonLabel": "clrDgActionOverflowButtonLabel"; }, { "openChange": "clrDgActionOverflowOpenChange"; }, never, ["*"], false, [{ directive: typeof i1.PopoverHostDirective; inputs: {}; outputs: {}; }]>;
|
|
28
29
|
}
|
|
@@ -57,6 +57,10 @@ export declare class ClrDatagridRow<T = any> implements AfterContentInit, AfterV
|
|
|
57
57
|
get clrDgSelectable(): boolean | string;
|
|
58
58
|
selectedChanged: EventEmitter<boolean>;
|
|
59
59
|
toggle(selected?: boolean): void;
|
|
60
|
+
/**
|
|
61
|
+
* @deprecated related to clrDgRowSelection, which is deprecated
|
|
62
|
+
*/
|
|
63
|
+
protected selectRow(selected?: boolean): void;
|
|
60
64
|
get expanded(): boolean | string;
|
|
61
65
|
set expanded(value: boolean | string);
|
|
62
66
|
expandedChange: EventEmitter<boolean>;
|
|
@@ -18,6 +18,8 @@ export declare class ClrAlertsPager implements OnInit, OnDestroy {
|
|
|
18
18
|
*/
|
|
19
19
|
set currentAlertIndex(index: number);
|
|
20
20
|
get currentAlertIndex(): number;
|
|
21
|
+
protected get previousAlertAriaLabel(): string;
|
|
22
|
+
protected get nextAlertAriaLabel(): string;
|
|
21
23
|
currentAlertIndexChange: EventEmitter<number>;
|
|
22
24
|
constructor(multiAlertService: MultiAlertService, commonStrings: ClrCommonStringsService);
|
|
23
25
|
ngOnInit(): void;
|
|
@@ -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
|