@villedemontreal/angular-ui 13.1.0 → 13.2.1
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/esm2020/lib/bao.module.mjs +7 -4
- package/esm2020/lib/dropdown-menu/dropdown-menu.component.mjs +23 -7
- package/esm2020/lib/file/file-input.component.mjs +5 -5
- package/esm2020/lib/file/file-preview.component.mjs +2 -2
- package/esm2020/lib/modal/modal-container.mjs +17 -31
- package/esm2020/lib/modal/modal-ref.mjs +4 -1
- package/esm2020/lib/modal/modal.mjs +10 -31
- package/esm2020/lib/modal/module.mjs +4 -21
- package/fesm2015/villedemontreal-angular-ui.mjs +64 -123
- package/fesm2015/villedemontreal-angular-ui.mjs.map +1 -1
- package/fesm2020/villedemontreal-angular-ui.mjs +64 -121
- package/fesm2020/villedemontreal-angular-ui.mjs.map +1 -1
- package/lib/bao.module.d.ts +11 -11
- package/lib/dropdown-menu/dropdown-menu.component.d.ts +10 -4
- package/lib/modal/modal-container.d.ts +4 -5
- package/lib/modal/modal-ref.d.ts +1 -0
- package/lib/modal/modal.d.ts +3 -4
- package/lib/modal/module.d.ts +1 -2
- package/package.json +1 -1
- package/esm2020/lib/modal/modal-animations.mjs +0 -29
- package/lib/modal/modal-animations.d.ts +0 -8
package/lib/bao.module.d.ts
CHANGED
|
@@ -4,21 +4,21 @@ import * as i2 from "./button/module";
|
|
|
4
4
|
import * as i3 from "./alert/module";
|
|
5
5
|
import * as i4 from "./card/module";
|
|
6
6
|
import * as i5 from "./breadcrumb/module";
|
|
7
|
-
import * as i6 from "./
|
|
8
|
-
import * as i7 from "./
|
|
9
|
-
import * as i8 from "./
|
|
10
|
-
import * as i9 from "./
|
|
11
|
-
import * as i10 from "./
|
|
12
|
-
import * as i11 from "./
|
|
13
|
-
import * as i12 from "./
|
|
14
|
-
import * as i13 from "./
|
|
15
|
-
import * as i14 from "./
|
|
16
|
-
import * as i15 from "./
|
|
7
|
+
import * as i6 from "./modal/module";
|
|
8
|
+
import * as i7 from "./tag/module";
|
|
9
|
+
import * as i8 from "./header-info/module";
|
|
10
|
+
import * as i9 from "./list/module";
|
|
11
|
+
import * as i10 from "./common-components/module";
|
|
12
|
+
import * as i11 from "./checkbox/module";
|
|
13
|
+
import * as i12 from "./radio/module";
|
|
14
|
+
import * as i13 from "./summary/module";
|
|
15
|
+
import * as i14 from "./avatar/module";
|
|
16
|
+
import * as i15 from "./tabs/module";
|
|
17
17
|
import * as i16 from "./hyperlink/module";
|
|
18
18
|
import * as i17 from "./dropdown-menu/module";
|
|
19
19
|
import * as i18 from "./file/module";
|
|
20
20
|
export declare class BaoModule {
|
|
21
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaoModule, never>;
|
|
22
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<BaoModule, never, [typeof i1.BaoIconModule, typeof i2.BaoButtonModule, typeof i3.BaoAlertModule, typeof i4.BaoCardModule, typeof i5.BaoBreadcrumbModule], [typeof i1.BaoIconModule, typeof i2.BaoButtonModule, typeof i3.BaoAlertModule, typeof i5.BaoBreadcrumbModule, typeof i4.BaoCardModule, typeof
|
|
22
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<BaoModule, never, [typeof i1.BaoIconModule, typeof i2.BaoButtonModule, typeof i3.BaoAlertModule, typeof i4.BaoCardModule, typeof i5.BaoBreadcrumbModule, typeof i6.BaoModalModule], [typeof i1.BaoIconModule, typeof i2.BaoButtonModule, typeof i3.BaoAlertModule, typeof i5.BaoBreadcrumbModule, typeof i4.BaoCardModule, typeof i7.BaoTagModule, typeof i8.BaoHeaderInfoModule, typeof i9.BaoListModule, typeof i10.BaoCommonComponentsModule, typeof i11.BaoCheckboxModule, typeof i12.BaoRadioModule, typeof i13.BaoSummaryModule, typeof i14.BaoAvatarModule, typeof i15.BaoTabsModule, typeof i6.BaoModalModule, typeof i16.BaoHyperlinkModule, typeof i17.BaoDropdownMenuModule, typeof i18.BaoFileModule]>;
|
|
23
23
|
static ɵinj: i0.ɵɵInjectorDeclaration<BaoModule>;
|
|
24
24
|
}
|
|
@@ -10,6 +10,10 @@ export declare class BaoDropdownMenuItem implements AfterViewInit, OnChanges {
|
|
|
10
10
|
* Is the list item disabled
|
|
11
11
|
*/
|
|
12
12
|
disabled: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Emits when menu item is clicked
|
|
15
|
+
*/
|
|
16
|
+
itemClicked: EventEmitter<any>;
|
|
13
17
|
constructor(renderer: Renderer2, elementRef: ElementRef<HTMLElement>, _parent: BaoDropdownMenuComponent);
|
|
14
18
|
get nativeElement(): HTMLElement;
|
|
15
19
|
spaceKeyEvent(): void;
|
|
@@ -22,13 +26,14 @@ export declare class BaoDropdownMenuItem implements AfterViewInit, OnChanges {
|
|
|
22
26
|
private addPaddingClass;
|
|
23
27
|
private disableItem;
|
|
24
28
|
/**
|
|
25
|
-
* This method propagates a click event to menu item children with inputs (checkbox, radio button)
|
|
29
|
+
* This method propagates a click event to menu item children with inputs (checkbox, radio button).
|
|
30
|
+
* It emits event to close menu if item does not contain an input.
|
|
26
31
|
*/
|
|
27
32
|
private propagateClick;
|
|
28
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaoDropdownMenuItem, never>;
|
|
29
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<BaoDropdownMenuItem, "bao-dropdown-menu-item, [bao-dropdown-menu-item]", never, { "disabled": "disabled"; }, {}, never>;
|
|
34
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaoDropdownMenuItem, "bao-dropdown-menu-item, [bao-dropdown-menu-item]", never, { "disabled": "disabled"; }, { "itemClicked": "itemClicked"; }, never>;
|
|
30
35
|
}
|
|
31
|
-
export declare class BaoDropdownMenuComponent implements AfterViewInit {
|
|
36
|
+
export declare class BaoDropdownMenuComponent implements AfterContentInit, AfterViewInit {
|
|
32
37
|
private cdr;
|
|
33
38
|
private renderer;
|
|
34
39
|
private elementRef;
|
|
@@ -78,6 +83,7 @@ export declare class BaoDropdownMenuComponent implements AfterViewInit {
|
|
|
78
83
|
/** Prevents focus to be lost when SHIFT + TAB has reached beginning of menu */
|
|
79
84
|
shiftTabKeyEvent(): void;
|
|
80
85
|
ngAfterViewInit(): void;
|
|
86
|
+
ngAfterContentInit(): void;
|
|
81
87
|
focusFirstItem(): void;
|
|
82
88
|
open(): void;
|
|
83
89
|
close(): void;
|
|
@@ -117,7 +123,7 @@ export declare class BaoDropdownMenuTrigger implements AfterViewInit, OnDestroy
|
|
|
117
123
|
escapeKeyEvent(): void;
|
|
118
124
|
/** Enter key event triggers click event which opens menu,
|
|
119
125
|
* then focus is put on first item in the menu */
|
|
120
|
-
enterKeyEvent(): void;
|
|
126
|
+
enterKeyEvent(event: KeyboardEvent): void;
|
|
121
127
|
onClick(): void;
|
|
122
128
|
ngAfterViewInit(): void;
|
|
123
129
|
ngOnDestroy(): void;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { AnimationEvent } from '@angular/animations';
|
|
2
1
|
import { FocusMonitor, FocusOrigin, ConfigurableFocusTrapFactory, InteractivityChecker } from '@angular/cdk/a11y';
|
|
3
2
|
import { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';
|
|
4
3
|
import { ChangeDetectorRef, ComponentRef, ElementRef, EmbeddedViewRef, EventEmitter, NgZone } from '@angular/core';
|
|
@@ -88,18 +87,18 @@ export declare abstract class _BaoModalContainerBase extends BasePortalOutlet {
|
|
|
88
87
|
private _containsFocus;
|
|
89
88
|
/** Starts the modal exit animation. */
|
|
90
89
|
abstract _startExitAnimation(): void;
|
|
90
|
+
abstract _startOpenAnimation(): void;
|
|
91
91
|
static ɵfac: i0.ɵɵFactoryDeclaration<_BaoModalContainerBase, [null, null, null, { optional: true; }, null, null, null, null]>;
|
|
92
92
|
static ɵdir: i0.ɵɵDirectiveDeclaration<_BaoModalContainerBase, never, never, {}, {}, never>;
|
|
93
93
|
}
|
|
94
94
|
export declare class BaoModalContainer extends _BaoModalContainerBase {
|
|
95
95
|
/** State of the modal animation. */
|
|
96
96
|
_state: 'void' | 'enter' | 'exit';
|
|
97
|
-
|
|
98
|
-
_onAnimationDone({ toState, totalTime }: AnimationEvent): Promise<void>;
|
|
99
|
-
/** Callback, invoked when an animation on the host starts. */
|
|
100
|
-
_onAnimationStart({ toState, totalTime }: AnimationEvent): void;
|
|
97
|
+
_startOpenAnimation(): void;
|
|
101
98
|
/** Starts the modal exit animation. */
|
|
102
99
|
_startExitAnimation(): void;
|
|
100
|
+
private _finishDialogOpen;
|
|
101
|
+
private _openAnimationDone;
|
|
103
102
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaoModalContainer, never>;
|
|
104
103
|
static ɵcmp: i0.ɵɵComponentDeclaration<BaoModalContainer, "bao-modal-container", never, {}, {}, never, never>;
|
|
105
104
|
}
|
package/lib/modal/modal-ref.d.ts
CHANGED
|
@@ -41,6 +41,7 @@ export declare class BaoModalRef<T, R = unknown> {
|
|
|
41
41
|
* @param modalResult Optional result to return to the modal opener.
|
|
42
42
|
*/
|
|
43
43
|
close(modalResult?: R): void;
|
|
44
|
+
startOpenAnimation(): void;
|
|
44
45
|
/**
|
|
45
46
|
* Gets an observable that is notified when the modal is finished opening.
|
|
46
47
|
*/
|
package/lib/modal/modal.d.ts
CHANGED
|
@@ -15,7 +15,6 @@ export declare abstract class BaoModalBase<C extends _BaoModalContainerBase> imp
|
|
|
15
15
|
private _modalRefConstructor;
|
|
16
16
|
private _modalContainerType;
|
|
17
17
|
private _modalDataToken;
|
|
18
|
-
private _animationMode?;
|
|
19
18
|
readonly afterAllClosed: Observable<void>;
|
|
20
19
|
private _openModalsAtThisLevel;
|
|
21
20
|
private readonly _afterAllClosedAtThisLevel;
|
|
@@ -24,7 +23,7 @@ export declare abstract class BaoModalBase<C extends _BaoModalContainerBase> imp
|
|
|
24
23
|
private _modalAnimatingOpen;
|
|
25
24
|
private _animationStateSubscriptions;
|
|
26
25
|
private _lastModalRef;
|
|
27
|
-
constructor(_overlay: Overlay, _injector: Injector, _parentModal: BaoModalBase<C> | undefined, _overlayContainer: OverlayContainer, _modalRefConstructor: Type<BaoModalRef<unknown>>, _modalContainerType: Type<C>, _modalDataToken: InjectionToken<unknown
|
|
26
|
+
constructor(_overlay: Overlay, _injector: Injector, _parentModal: BaoModalBase<C> | undefined, _overlayContainer: OverlayContainer, _modalRefConstructor: Type<BaoModalRef<unknown>>, _modalContainerType: Type<C>, _modalDataToken: InjectionToken<unknown>);
|
|
28
27
|
/** Keeps track of the currently-open modals. */
|
|
29
28
|
get openModals(): BaoModalRef<unknown>[];
|
|
30
29
|
/** Stream that emits when a modal has been opened. */
|
|
@@ -85,7 +84,7 @@ export declare abstract class BaoModalBase<C extends _BaoModalContainerBase> imp
|
|
|
85
84
|
* Service to open modal.
|
|
86
85
|
*/
|
|
87
86
|
export declare class BaoModal extends BaoModalBase<BaoModalContainer> {
|
|
88
|
-
constructor(overlay: Overlay, injector: Injector, parentModal: BaoModal, overlayContainer: OverlayContainer
|
|
89
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<BaoModal, [null, null, { optional: true; skipSelf: true; }, null
|
|
87
|
+
constructor(overlay: Overlay, injector: Injector, parentModal: BaoModal, overlayContainer: OverlayContainer);
|
|
88
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaoModal, [null, null, { optional: true; skipSelf: true; }, null]>;
|
|
90
89
|
static ɵprov: i0.ɵɵInjectableDeclaration<BaoModal>;
|
|
91
90
|
}
|
package/lib/modal/module.d.ts
CHANGED
|
@@ -4,9 +4,8 @@ import * as i2 from "./modal-directives";
|
|
|
4
4
|
import * as i3 from "@angular/common";
|
|
5
5
|
import * as i4 from "@angular/cdk/overlay";
|
|
6
6
|
import * as i5 from "@angular/cdk/portal";
|
|
7
|
-
import * as i6 from "@angular/platform-browser/animations";
|
|
8
7
|
export declare class BaoModalModule {
|
|
9
8
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaoModalModule, never>;
|
|
10
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<BaoModalModule, [typeof i1.BaoModalContainer, typeof i2.BaoModalClose], [typeof i3.CommonModule, typeof i4.OverlayModule, typeof i5.PortalModule
|
|
9
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<BaoModalModule, [typeof i1.BaoModalContainer, typeof i2.BaoModalClose], [typeof i3.CommonModule, typeof i4.OverlayModule, typeof i5.PortalModule], [typeof i1.BaoModalContainer, typeof i2.BaoModalClose]>;
|
|
11
10
|
static ɵinj: i0.ɵɵInjectorDeclaration<BaoModalModule>;
|
|
12
11
|
}
|
package/package.json
CHANGED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2023 Ville de Montreal. All rights reserved.
|
|
3
|
-
* Licensed under the MIT license.
|
|
4
|
-
* See LICENSE file in the project root for full license information.
|
|
5
|
-
*/
|
|
6
|
-
import { animate, state, style, transition, trigger, query, animateChild, group } from '@angular/animations';
|
|
7
|
-
/**
|
|
8
|
-
* Animations used by MatDialog.
|
|
9
|
-
* @docs-private
|
|
10
|
-
*/
|
|
11
|
-
export const baoModalAnimations = {
|
|
12
|
-
/** Animation that is applied on the modal container by default. */
|
|
13
|
-
modalContainer: trigger('modalContainer', [
|
|
14
|
-
// Note: The `enter` animation transitions to `transform: none`, because for some reason
|
|
15
|
-
// specifying the transform explicitly, causes IE both to blur the modal content and
|
|
16
|
-
// decimate the animation performance. Leaving it as `none` solves both issues.
|
|
17
|
-
state('void, exit', style({ opacity: 0, transform: 'scale(0.7)' })),
|
|
18
|
-
state('enter', style({ transform: 'none' })),
|
|
19
|
-
transition('* => enter', group([
|
|
20
|
-
animate('150ms cubic-bezier(0, 0, 0.2, 1)', style({ transform: 'none', opacity: 1 })),
|
|
21
|
-
query('@*', animateChild(), { optional: true })
|
|
22
|
-
])),
|
|
23
|
-
transition('* => void, * => exit', group([
|
|
24
|
-
animate('75ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({ opacity: 0 })),
|
|
25
|
-
query('@*', animateChild(), { optional: true })
|
|
26
|
-
]))
|
|
27
|
-
])
|
|
28
|
-
};
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtYW5pbWF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9tb2RhbC9tb2RhbC1hbmltYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFFUCxLQUFLLEVBQ0wsWUFBWSxFQUNaLEtBQUssRUFDTixNQUFNLHFCQUFxQixDQUFDO0FBRTdCOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUUzQjtJQUNGLG1FQUFtRTtJQUNuRSxjQUFjLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixFQUFFO1FBQ3hDLHdGQUF3RjtRQUN4RixvRkFBb0Y7UUFDcEYsK0VBQStFO1FBQy9FLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNuRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLFVBQVUsQ0FDUixZQUFZLEVBQ1osS0FBSyxDQUFDO1lBQ0osT0FBTyxDQUNMLGtDQUFrQyxFQUNsQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUN6QztZQUNELEtBQUssQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDaEQsQ0FBQyxDQUNIO1FBQ0QsVUFBVSxDQUNSLHNCQUFzQixFQUN0QixLQUFLLENBQUM7WUFDSixPQUFPLENBQUMscUNBQXFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckUsS0FBSyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNoRCxDQUFDLENBQ0g7S0FDRixDQUFDO0NBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgc3RhdGUsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uLFxuICB0cmlnZ2VyLFxuICBBbmltYXRpb25UcmlnZ2VyTWV0YWRhdGEsXG4gIHF1ZXJ5LFxuICBhbmltYXRlQ2hpbGQsXG4gIGdyb3VwXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG4vKipcbiAqIEFuaW1hdGlvbnMgdXNlZCBieSBNYXREaWFsb2cuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBiYW9Nb2RhbEFuaW1hdGlvbnM6IHtcbiAgcmVhZG9ubHkgbW9kYWxDb250YWluZXI6IEFuaW1hdGlvblRyaWdnZXJNZXRhZGF0YTtcbn0gPSB7XG4gIC8qKiBBbmltYXRpb24gdGhhdCBpcyBhcHBsaWVkIG9uIHRoZSBtb2RhbCBjb250YWluZXIgYnkgZGVmYXVsdC4gKi9cbiAgbW9kYWxDb250YWluZXI6IHRyaWdnZXIoJ21vZGFsQ29udGFpbmVyJywgW1xuICAgIC8vIE5vdGU6IFRoZSBgZW50ZXJgIGFuaW1hdGlvbiB0cmFuc2l0aW9ucyB0byBgdHJhbnNmb3JtOiBub25lYCwgYmVjYXVzZSBmb3Igc29tZSByZWFzb25cbiAgICAvLyBzcGVjaWZ5aW5nIHRoZSB0cmFuc2Zvcm0gZXhwbGljaXRseSwgY2F1c2VzIElFIGJvdGggdG8gYmx1ciB0aGUgbW9kYWwgY29udGVudCBhbmRcbiAgICAvLyBkZWNpbWF0ZSB0aGUgYW5pbWF0aW9uIHBlcmZvcm1hbmNlLiBMZWF2aW5nIGl0IGFzIGBub25lYCBzb2x2ZXMgYm90aCBpc3N1ZXMuXG4gICAgc3RhdGUoJ3ZvaWQsIGV4aXQnLCBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlKDAuNyknIH0pKSxcbiAgICBzdGF0ZSgnZW50ZXInLCBzdHlsZSh7IHRyYW5zZm9ybTogJ25vbmUnIH0pKSxcbiAgICB0cmFuc2l0aW9uKFxuICAgICAgJyogPT4gZW50ZXInLFxuICAgICAgZ3JvdXAoW1xuICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICcxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKScsXG4gICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdub25lJywgb3BhY2l0eTogMSB9KVxuICAgICAgICApLFxuICAgICAgICBxdWVyeSgnQConLCBhbmltYXRlQ2hpbGQoKSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSlcbiAgICApLFxuICAgIHRyYW5zaXRpb24oXG4gICAgICAnKiA9PiB2b2lkLCAqID0+IGV4aXQnLFxuICAgICAgZ3JvdXAoW1xuICAgICAgICBhbmltYXRlKCc3NW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSksXG4gICAgICAgIHF1ZXJ5KCdAKicsIGFuaW1hdGVDaGlsZCgpLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICBdKVxuICAgIClcbiAgXSlcbn07XG4iXX0=
|