@tolle_/tolle-ui 18.2.30 → 18.3.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/esm2022/lib/alert-dialog-dynamic.component.mjs +8 -3
- package/esm2022/lib/alert-dialog.component.mjs +39 -6
- package/esm2022/lib/alert-dialog.service.mjs +38 -6
- package/esm2022/lib/bar-list.component.mjs +95 -0
- package/esm2022/lib/category-bar.component.mjs +130 -0
- package/esm2022/lib/chart-spark.component.mjs +120 -0
- package/esm2022/lib/chart.component.mjs +131 -45
- package/esm2022/lib/chart.service.mjs +33 -8
- package/esm2022/lib/context-menu.service.mjs +11 -7
- package/esm2022/lib/modal-ref.mjs +36 -7
- package/esm2022/lib/modal.component.mjs +42 -28
- package/esm2022/lib/modal.mjs +2 -29
- package/esm2022/lib/modal.service.mjs +26 -4
- package/esm2022/lib/progress-circle.component.mjs +138 -0
- package/esm2022/lib/resizable-panel.component.mjs +5 -5
- package/esm2022/lib/segment.component.mjs +3 -3
- package/esm2022/lib/tracker.component.mjs +84 -0
- package/esm2022/public-api.mjs +6 -1
- package/fesm2022/tolle-ui.mjs +900 -139
- package/fesm2022/tolle-ui.mjs.map +1 -1
- package/lib/alert-dialog-dynamic.component.d.ts +5 -0
- package/lib/alert-dialog.component.d.ts +13 -0
- package/lib/bar-list.component.d.ts +39 -0
- package/lib/category-bar.component.d.ts +49 -0
- package/lib/chart-spark.component.d.ts +49 -0
- package/lib/chart.component.d.ts +68 -9
- package/lib/chart.service.d.ts +25 -5
- package/lib/modal-ref.d.ts +6 -1
- package/lib/modal.component.d.ts +7 -4
- package/lib/modal.d.ts +9 -3
- package/lib/progress-circle.component.d.ts +35 -0
- package/lib/tracker.component.d.ts +39 -0
- package/package.json +3 -2
- package/preset.js +7 -1
- package/public-api.d.ts +5 -0
- package/registry/docs-content.json +330 -2
- package/registry/llms-full.txt +98 -2
- package/registry/llms.txt +5 -0
- package/registry/manifest.json +380 -3
- package/registry/r/alert-dialog-dynamic.json +1 -1
- package/registry/r/alert-dialog.json +1 -1
- package/registry/r/bar-list.json +21 -0
- package/registry/r/category-bar.json +21 -0
- package/registry/r/chart-pie.json +1 -1
- package/registry/r/chart-spark.json +30 -0
- package/registry/r/chart.json +2 -2
- package/registry/r/context-menu-trigger.json +1 -1
- package/registry/r/context-menu.json +1 -1
- package/registry/r/modal.json +3 -3
- package/registry/r/progress-circle.json +21 -0
- package/registry/r/resizable-panel.json +1 -1
- package/registry/r/segment.json +1 -1
- package/registry/r/tracker.json +25 -0
- package/registry/registry.json +112 -0
- package/theme.css +15 -3
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Component, TemplateRef } from '@angular/core';
|
|
1
|
+
import { ChangeDetectorRef, Component, inject, TemplateRef } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { A11yModule } from '@angular/cdk/a11y';
|
|
4
|
+
import { Subscription } from 'rxjs';
|
|
4
5
|
import { cn } from './utils/cn';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "./modal-ref";
|
|
@@ -8,9 +9,13 @@ import * as i2 from "@angular/common";
|
|
|
8
9
|
import * as i3 from "@angular/cdk/a11y";
|
|
9
10
|
export class ModalComponent {
|
|
10
11
|
ref;
|
|
12
|
+
cdr = inject(ChangeDetectorRef);
|
|
13
|
+
subscription = new Subscription();
|
|
11
14
|
contentType = 'string';
|
|
12
15
|
content;
|
|
13
16
|
modalClasses = '';
|
|
17
|
+
/** True while the exit animation plays, just before the overlay is torn down. */
|
|
18
|
+
closing = false;
|
|
14
19
|
/** Stable, per-instance ids used to wire dialog ARIA relationships. */
|
|
15
20
|
_uid = Math.random().toString(36).substr(2, 9);
|
|
16
21
|
titleId = `tolle-modal-title-${this._uid}`;
|
|
@@ -22,16 +27,21 @@ export class ModalComponent {
|
|
|
22
27
|
this.content = this.ref.modal.content;
|
|
23
28
|
this.modalClasses = this.getModalSizeCss();
|
|
24
29
|
this.determineContentType();
|
|
30
|
+
this.subscription.add(this.ref.closing$.subscribe((closing) => {
|
|
31
|
+
this.closing = closing;
|
|
32
|
+
this.cdr.markForCheck();
|
|
33
|
+
}));
|
|
25
34
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return !!(this.ref.modal.showCloseButton || this.ref.modal.title);
|
|
35
|
+
ngOnDestroy() {
|
|
36
|
+
this.subscription.unsubscribe();
|
|
29
37
|
}
|
|
30
38
|
getModalSizeCss() {
|
|
31
39
|
const { size } = this.ref.modal;
|
|
32
40
|
return cn(
|
|
33
41
|
// Surface: overlay card that never exceeds the viewport (header stays, body scrolls).
|
|
34
|
-
'
|
|
42
|
+
'relative flex w-full mx-auto flex-col gap-4 rounded-lg border border-border bg-background p-6 text-foreground shadow-lg duration-200',
|
|
43
|
+
// Enter/exit animation, driven by `data-state` (see `closing` above).
|
|
44
|
+
'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95', 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95', size === 'fullscreen' ? 'h-screen w-screen rounded-none' : 'max-h-[85vh]',
|
|
35
45
|
// Sizing scale with explicit max-widths
|
|
36
46
|
size === 'xs' && 'max-w-[320px]', size === 'sm' && 'max-w-[425px]', size === 'default' && 'max-w-[512px]', size === 'lg' && 'max-w-[1024px]', size === 'xl' && 'max-w-[1280px]');
|
|
37
47
|
}
|
|
@@ -49,6 +59,7 @@ export class ModalComponent {
|
|
|
49
59
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalComponent, deps: [{ token: i1.ModalRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
50
60
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ModalComponent, isStandalone: true, selector: "tolle-modal", ngImport: i0, template: `
|
|
51
61
|
<div [class]="modalClasses" class="pointer-events-auto"
|
|
62
|
+
[attr.data-state]="closing ? 'closed' : 'open'"
|
|
52
63
|
role="dialog"
|
|
53
64
|
aria-modal="true"
|
|
54
65
|
[attr.aria-labelledby]="ref.modal.title ? titleId : null"
|
|
@@ -56,25 +67,26 @@ export class ModalComponent {
|
|
|
56
67
|
cdkTrapFocus cdkTrapFocusAutoCapture
|
|
57
68
|
(mousedown)="$event.stopPropagation()">
|
|
58
69
|
|
|
70
|
+
<button
|
|
71
|
+
*ngIf="ref.modal.showCloseButton"
|
|
72
|
+
type="button"
|
|
73
|
+
(click)="ref.close()"
|
|
74
|
+
aria-label="Close"
|
|
75
|
+
class="absolute right-4 top-4 grid h-6 w-6 place-items-center rounded-sm text-muted-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2">
|
|
76
|
+
<i class="ri-close-line text-base" aria-hidden="true"></i>
|
|
77
|
+
</button>
|
|
78
|
+
|
|
59
79
|
<!-- Header -->
|
|
60
|
-
<div *ngIf="
|
|
61
|
-
<h2
|
|
80
|
+
<div *ngIf="ref.modal.title" class="flex shrink-0 flex-col gap-1.5 pr-8 text-center sm:text-left">
|
|
81
|
+
<h2 [id]="titleId" class="text-lg font-semibold leading-none tracking-tight text-foreground">
|
|
62
82
|
{{ ref.modal.title }}
|
|
63
83
|
</h2>
|
|
64
|
-
<button
|
|
65
|
-
*ngIf="ref.modal.showCloseButton"
|
|
66
|
-
type="button"
|
|
67
|
-
(click)="ref.close()"
|
|
68
|
-
aria-label="Close"
|
|
69
|
-
class="-mr-2 -mt-2 ml-auto grid h-8 w-8 shrink-0 place-items-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring">
|
|
70
|
-
<i class="ri-close-line text-xl"></i>
|
|
71
|
-
</button>
|
|
72
84
|
</div>
|
|
73
85
|
|
|
74
86
|
<!-- Body -->
|
|
75
87
|
<div class="min-h-0 flex-1 overflow-y-auto">
|
|
76
88
|
<ng-container [ngSwitch]="contentType">
|
|
77
|
-
<p *ngSwitchCase="'string'" [id]="descId"
|
|
89
|
+
<p *ngSwitchCase="'string'" [id]="descId" class="text-sm leading-relaxed text-muted-foreground">{{ content }}</p>
|
|
78
90
|
|
|
79
91
|
<ng-container *ngSwitchCase="'template'">
|
|
80
92
|
<ng-container *ngTemplateOutlet="asTemplate; context: ref.modal.context"></ng-container>
|
|
@@ -92,6 +104,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
92
104
|
type: Component,
|
|
93
105
|
args: [{ selector: 'tolle-modal', standalone: true, imports: [CommonModule, A11yModule], template: `
|
|
94
106
|
<div [class]="modalClasses" class="pointer-events-auto"
|
|
107
|
+
[attr.data-state]="closing ? 'closed' : 'open'"
|
|
95
108
|
role="dialog"
|
|
96
109
|
aria-modal="true"
|
|
97
110
|
[attr.aria-labelledby]="ref.modal.title ? titleId : null"
|
|
@@ -99,25 +112,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
99
112
|
cdkTrapFocus cdkTrapFocusAutoCapture
|
|
100
113
|
(mousedown)="$event.stopPropagation()">
|
|
101
114
|
|
|
115
|
+
<button
|
|
116
|
+
*ngIf="ref.modal.showCloseButton"
|
|
117
|
+
type="button"
|
|
118
|
+
(click)="ref.close()"
|
|
119
|
+
aria-label="Close"
|
|
120
|
+
class="absolute right-4 top-4 grid h-6 w-6 place-items-center rounded-sm text-muted-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2">
|
|
121
|
+
<i class="ri-close-line text-base" aria-hidden="true"></i>
|
|
122
|
+
</button>
|
|
123
|
+
|
|
102
124
|
<!-- Header -->
|
|
103
|
-
<div *ngIf="
|
|
104
|
-
<h2
|
|
125
|
+
<div *ngIf="ref.modal.title" class="flex shrink-0 flex-col gap-1.5 pr-8 text-center sm:text-left">
|
|
126
|
+
<h2 [id]="titleId" class="text-lg font-semibold leading-none tracking-tight text-foreground">
|
|
105
127
|
{{ ref.modal.title }}
|
|
106
128
|
</h2>
|
|
107
|
-
<button
|
|
108
|
-
*ngIf="ref.modal.showCloseButton"
|
|
109
|
-
type="button"
|
|
110
|
-
(click)="ref.close()"
|
|
111
|
-
aria-label="Close"
|
|
112
|
-
class="-mr-2 -mt-2 ml-auto grid h-8 w-8 shrink-0 place-items-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring">
|
|
113
|
-
<i class="ri-close-line text-xl"></i>
|
|
114
|
-
</button>
|
|
115
129
|
</div>
|
|
116
130
|
|
|
117
131
|
<!-- Body -->
|
|
118
132
|
<div class="min-h-0 flex-1 overflow-y-auto">
|
|
119
133
|
<ng-container [ngSwitch]="contentType">
|
|
120
|
-
<p *ngSwitchCase="'string'" [id]="descId"
|
|
134
|
+
<p *ngSwitchCase="'string'" [id]="descId" class="text-sm leading-relaxed text-muted-foreground">{{ content }}</p>
|
|
121
135
|
|
|
122
136
|
<ng-container *ngSwitchCase="'template'">
|
|
123
137
|
<ng-container *ngTemplateOutlet="asTemplate; context: ref.modal.context"></ng-container>
|
|
@@ -131,4 +145,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
131
145
|
</div>
|
|
132
146
|
`, styles: [":host{display:contents}\n"] }]
|
|
133
147
|
}], ctorParameters: () => [{ type: i1.ModalRef }] });
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLFdBQVcsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7Ozs7QUFzRGhDLE1BQU0sT0FBTyxjQUFjO0lBZU47SUFkRixHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDaEMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFbkQsV0FBVyxHQUF3QyxRQUFRLENBQUM7SUFDNUQsT0FBTyxDQUFNO0lBQ2IsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUNsQixpRkFBaUY7SUFDakYsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVoQix1RUFBdUU7SUFDdEQsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxPQUFPLEdBQUcscUJBQXFCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQyxNQUFNLEdBQUcsb0JBQW9CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVsRCxZQUFtQixHQUFhO1FBQWIsUUFBRyxHQUFILEdBQUcsQ0FBVTtJQUFHLENBQUM7SUFFcEMsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRTVCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBRWhDLE9BQU8sRUFBRTtRQUNQLHNGQUFzRjtRQUN0RixzSUFBc0k7UUFFdEksc0VBQXNFO1FBQ3RFLHVGQUF1RixFQUN2RixnR0FBZ0csRUFFaEcsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLGNBQWM7UUFFekUsd0NBQXdDO1FBQ3hDLElBQUksS0FBSyxJQUFJLElBQUksZUFBZSxFQUNoQyxJQUFJLEtBQUssSUFBSSxJQUFJLGVBQWUsRUFDaEMsSUFBSSxLQUFLLFNBQVMsSUFBSSxlQUFlLEVBQ3JDLElBQUksS0FBSyxJQUFJLElBQUksZ0JBQWdCLEVBQ2pDLElBQUksS0FBSyxJQUFJLElBQUksZ0JBQWdCLENBQ2xDLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVE7WUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQzthQUM3RCxJQUFJLElBQUksQ0FBQyxPQUFPLFlBQVksV0FBVztZQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDOztZQUN2RSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsT0FBMkIsQ0FBQyxDQUFDLENBQUM7SUFDN0QsSUFBSSxXQUFXLEtBQUssT0FBTyxJQUFJLENBQUMsT0FBb0IsQ0FBQyxDQUFDLENBQUM7SUFDN0MsRUFBRSxHQUFHLEVBQUUsQ0FBQzt3R0FoRVAsY0FBYzs0RkFBZCxjQUFjLHVFQWhEZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Q1Qsa0dBMUNTLFlBQVksNnVCQUFFLFVBQVU7OzRGQWlEdkIsY0FBYztrQkFwRDFCLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsWUFDekI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgaW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNb2RhbFJlZiB9IGZyb20gJy4vbW9kYWwtcmVmJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQTExeU1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwibW9kYWxDbGFzc2VzXCIgY2xhc3M9XCJwb2ludGVyLWV2ZW50cy1hdXRvXCJcbiAgICAgIFthdHRyLmRhdGEtc3RhdGVdPVwiY2xvc2luZyA/ICdjbG9zZWQnIDogJ29wZW4nXCJcbiAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInJlZi5tb2RhbC50aXRsZSA/IHRpdGxlSWQgOiBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiY29udGVudFR5cGUgPT09ICdzdHJpbmcnID8gZGVzY0lkIDogbnVsbFwiXG4gICAgICBjZGtUcmFwRm9jdXMgY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVcbiAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJyZWYubW9kYWwuc2hvd0Nsb3NlQnV0dG9uXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJyZWYuY2xvc2UoKVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgcmlnaHQtNCB0b3AtNCBncmlkIGgtNiB3LTYgcGxhY2UtaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNzAgcmluZy1vZmZzZXQtYmFja2dyb3VuZCB0cmFuc2l0aW9uLW9wYWNpdHkgaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yXCI+XG4gICAgICAgIDxpIGNsYXNzPVwicmktY2xvc2UtbGluZSB0ZXh0LWJhc2VcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwicmVmLm1vZGFsLnRpdGxlXCIgY2xhc3M9XCJmbGV4IHNocmluay0wIGZsZXgtY29sIGdhcC0xLjUgcHItOCB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnRcIj5cbiAgICAgICAgPGgyIFtpZF09XCJ0aXRsZUlkXCIgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgbGVhZGluZy1ub25lIHRyYWNraW5nLXRpZ2h0IHRleHQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgIHt7IHJlZi5tb2RhbC50aXRsZSB9fVxuICAgICAgICA8L2gyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQm9keSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJtaW4taC0wIGZsZXgtMSBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29udGVudFR5cGVcIj5cbiAgICAgICAgICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ3N0cmluZydcIiBbaWRdPVwiZGVzY0lkXCIgY2xhc3M9XCJ0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZCB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57eyBjb250ZW50IH19PC9wPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RlbXBsYXRlJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFzVGVtcGxhdGU7IGNvbnRleHQ6IHJlZi5tb2RhbC5jb250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY29tcG9uZW50J1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJhc0NvbXBvbmVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogY29udGVudHM7IC8qIFRoaXMgbWFrZXMgdGhlIGhvc3QgXCJkaXNhcHBlYXJcIiBzbyB0aGUgZGl2IHRhcmdldHMgdGhlIG92ZXJsYXkgcGFuZSBkaXJlY3RseSAqL1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29udGVudFR5cGU6ICd0ZW1wbGF0ZScgfCAnc3RyaW5nJyB8ICdjb21wb25lbnQnID0gJ3N0cmluZyc7XG4gIGNvbnRlbnQ6IGFueTtcbiAgbW9kYWxDbGFzc2VzID0gJyc7XG4gIC8qKiBUcnVlIHdoaWxlIHRoZSBleGl0IGFuaW1hdGlvbiBwbGF5cywganVzdCBiZWZvcmUgdGhlIG92ZXJsYXkgaXMgdG9ybiBkb3duLiAqL1xuICBjbG9zaW5nID0gZmFsc2U7XG5cbiAgLyoqIFN0YWJsZSwgcGVyLWluc3RhbmNlIGlkcyB1c2VkIHRvIHdpcmUgZGlhbG9nIEFSSUEgcmVsYXRpb25zaGlwcy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdWlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpO1xuICByZWFkb25seSB0aXRsZUlkID0gYHRvbGxlLW1vZGFsLXRpdGxlLSR7dGhpcy5fdWlkfWA7XG4gIHJlYWRvbmx5IGRlc2NJZCA9IGB0b2xsZS1tb2RhbC1kZXNjLSR7dGhpcy5fdWlkfWA7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlZjogTW9kYWxSZWYpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5yZWYubW9kYWwuY29udGVudDtcbiAgICB0aGlzLm1vZGFsQ2xhc3NlcyA9IHRoaXMuZ2V0TW9kYWxTaXplQ3NzKCk7XG4gICAgdGhpcy5kZXRlcm1pbmVDb250ZW50VHlwZSgpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5yZWYuY2xvc2luZyQuc3Vic2NyaWJlKChjbG9zaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2luZyA9IGNsb3Npbmc7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kYWxTaXplQ3NzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBzaXplIH0gPSB0aGlzLnJlZi5tb2RhbDtcblxuICAgIHJldHVybiBjbihcbiAgICAgIC8vIFN1cmZhY2U6IG92ZXJsYXkgY2FyZCB0aGF0IG5ldmVyIGV4Y2VlZHMgdGhlIHZpZXdwb3J0IChoZWFkZXIgc3RheXMsIGJvZHkgc2Nyb2xscykuXG4gICAgICAncmVsYXRpdmUgZmxleCB3LWZ1bGwgbXgtYXV0byBmbGV4LWNvbCBnYXAtNCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLWJhY2tncm91bmQgcC02IHRleHQtZm9yZWdyb3VuZCBzaGFkb3ctbGcgZHVyYXRpb24tMjAwJyxcblxuICAgICAgLy8gRW50ZXIvZXhpdCBhbmltYXRpb24sIGRyaXZlbiBieSBgZGF0YS1zdGF0ZWAgKHNlZSBgY2xvc2luZ2AgYWJvdmUpLlxuICAgICAgJ2RhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUnLFxuICAgICAgJ2RhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUnLFxuXG4gICAgICBzaXplID09PSAnZnVsbHNjcmVlbicgPyAnaC1zY3JlZW4gdy1zY3JlZW4gcm91bmRlZC1ub25lJyA6ICdtYXgtaC1bODV2aF0nLFxuXG4gICAgICAvLyBTaXppbmcgc2NhbGUgd2l0aCBleHBsaWNpdCBtYXgtd2lkdGhzXG4gICAgICBzaXplID09PSAneHMnICYmICdtYXgtdy1bMzIwcHhdJyxcbiAgICAgIHNpemUgPT09ICdzbScgJiYgJ21heC13LVs0MjVweF0nLFxuICAgICAgc2l6ZSA9PT0gJ2RlZmF1bHQnICYmICdtYXgtdy1bNTEycHhdJyxcbiAgICAgIHNpemUgPT09ICdsZycgJiYgJ21heC13LVsxMDI0cHhdJyxcbiAgICAgIHNpemUgPT09ICd4bCcgJiYgJ21heC13LVsxMjgwcHhdJ1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZUNvbnRlbnRUeXBlKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5jb250ZW50ID09PSAnc3RyaW5nJykgdGhpcy5jb250ZW50VHlwZSA9ICdzdHJpbmcnO1xuICAgIGVsc2UgaWYgKHRoaXMuY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB0aGlzLmNvbnRlbnRUeXBlID0gJ3RlbXBsYXRlJztcbiAgICBlbHNlIHRoaXMuY29udGVudFR5cGUgPSAnY29tcG9uZW50JztcbiAgfVxuXG4gIGdldCBhc1RlbXBsYXRlKCkgeyByZXR1cm4gdGhpcy5jb250ZW50IGFzIFRlbXBsYXRlUmVmPGFueT47IH1cbiAgZ2V0IGFzQ29tcG9uZW50KCkgeyByZXR1cm4gdGhpcy5jb250ZW50IGFzIFR5cGU8YW55PjsgfVxuICBwcm90ZWN0ZWQgY24gPSBjbjtcbn1cbiJdfQ==
|
package/esm2022/lib/modal.mjs
CHANGED
|
@@ -1,29 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
content;
|
|
4
|
-
/** Optional title for the standard header */
|
|
5
|
-
title;
|
|
6
|
-
/** * Predefined size scale.
|
|
7
|
-
* - xs: 320px (Mobile alerts)
|
|
8
|
-
* - sm: 425px (Standard dialogs)
|
|
9
|
-
* - default: 544px (Forms)
|
|
10
|
-
* - lg: 90% / 1024px (Data tables)
|
|
11
|
-
* - xl: 1280px (Large forms, dashboards)
|
|
12
|
-
* - fullscreen: 100vw/100vh (Complex workflows)
|
|
13
|
-
*/
|
|
14
|
-
size = 'default';
|
|
15
|
-
/** * If true (default), clicking the backdrop closes the modal.
|
|
16
|
-
* Set to false for "blocking" modals (e.g., Terms of Service).
|
|
17
|
-
*/
|
|
18
|
-
backdropClose = true;
|
|
19
|
-
/** * Data to pass to a Component content.
|
|
20
|
-
* Accessed via @Input() in the child component.
|
|
21
|
-
*/
|
|
22
|
-
data;
|
|
23
|
-
/** * Context to pass to a TemplateRef content.
|
|
24
|
-
* Accessed via `let-val` in the HTML.
|
|
25
|
-
*/
|
|
26
|
-
context;
|
|
27
|
-
showCloseButton = true;
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL21vZGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxLQUFLO0lBQ2hCLDhEQUE4RDtJQUM5RCxPQUFPLENBQXlDO0lBRWhELDZDQUE2QztJQUM3QyxLQUFLLENBQVU7SUFFZjs7Ozs7OztPQU9HO0lBQ0gsSUFBSSxHQUEwRCxTQUFTLENBQUM7SUFFeEU7O09BRUc7SUFDSCxhQUFhLEdBQWEsSUFBSSxDQUFDO0lBRS9COztPQUVHO0lBQ0gsSUFBSSxDQUEwQjtJQUU5Qjs7T0FFRztJQUNILE9BQU8sQ0FBSztJQUVaLGVBQWUsR0FBYSxJQUFJLENBQUM7Q0FDbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZW1wbGF0ZVJlZiwgVHlwZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBNb2RhbDxUID0gYW55PiB7XG4gIC8qKiBUaGUgY29udGVudCB0byBkaXNwbGF5IChTdHJpbmcsIENvbXBvbmVudCwgb3IgVGVtcGxhdGUpICovXG4gIGNvbnRlbnQhOiBzdHJpbmcgfCBUeXBlPGFueT4gfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKiBPcHRpb25hbCB0aXRsZSBmb3IgdGhlIHN0YW5kYXJkIGhlYWRlciAqL1xuICB0aXRsZT86IHN0cmluZztcblxuICAvKiogKiBQcmVkZWZpbmVkIHNpemUgc2NhbGUuXG4gICAqIC0geHM6IDMyMHB4IChNb2JpbGUgYWxlcnRzKVxuICAgKiAtIHNtOiA0MjVweCAoU3RhbmRhcmQgZGlhbG9ncylcbiAgICogLSBkZWZhdWx0OiA1NDRweCAoRm9ybXMpXG4gICAqIC0gbGc6IDkwJSAvIDEwMjRweCAoRGF0YSB0YWJsZXMpXG4gICAqIC0geGw6IDEyODBweCAoTGFyZ2UgZm9ybXMsIGRhc2hib2FyZHMpXG4gICAqIC0gZnVsbHNjcmVlbjogMTAwdncvMTAwdmggKENvbXBsZXggd29ya2Zsb3dzKVxuICAgKi9cbiAgc2l6ZT86ICd4cycgfCAnc20nIHwgJ2RlZmF1bHQnIHwgJ2xnJyB8ICd4bCcgfCAnZnVsbHNjcmVlbicgPSAnZGVmYXVsdCc7XG5cbiAgLyoqICogSWYgdHJ1ZSAoZGVmYXVsdCksIGNsaWNraW5nIHRoZSBiYWNrZHJvcCBjbG9zZXMgdGhlIG1vZGFsLlxuICAgKiBTZXQgdG8gZmFsc2UgZm9yIFwiYmxvY2tpbmdcIiBtb2RhbHMgKGUuZy4sIFRlcm1zIG9mIFNlcnZpY2UpLlxuICAgKi9cbiAgYmFja2Ryb3BDbG9zZT86IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiAqIERhdGEgdG8gcGFzcyB0byBhIENvbXBvbmVudCBjb250ZW50LlxuICAgKiBBY2Nlc3NlZCB2aWEgQElucHV0KCkgaW4gdGhlIGNoaWxkIGNvbXBvbmVudC5cbiAgICovXG4gIGRhdGE/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKiAqIENvbnRleHQgdG8gcGFzcyB0byBhIFRlbXBsYXRlUmVmIGNvbnRlbnQuXG4gICAqIEFjY2Vzc2VkIHZpYSBgbGV0LXZhbGAgaW4gdGhlIEhUTUwuXG4gICAqL1xuICBjb250ZXh0PzogVDtcblxuICBzaG93Q2xvc2VCdXR0b24/OiBib29sZWFuID0gdHJ1ZTtcbn1cbiJdfQ==
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL21vZGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZW1wbGF0ZVJlZiwgVHlwZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYE1vZGFsU2VydmljZS5vcGVuKClgLiBBbHdheXMgcGFzc2VkIGFzIGEgcGxhaW4gb2JqZWN0XG4gKiBsaXRlcmFsLCBzbyB1bnNldCBmaWVsZHMgZmFsbCBiYWNrIHRvIGBNT0RBTF9ERUZBVUxUU2AgaW4gYG1vZGFsLnNlcnZpY2UudHNgXG4gKiByYXRoZXIgdGhhbiBhIGNsYXNzIGZpZWxkIGluaXRpYWxpemVyIOKAlCB0aG9zZSBuZXZlciBydW4gZm9yIGEgbGl0ZXJhbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RhbDxUID0gYW55PiB7XG4gIC8qKiBUaGUgY29udGVudCB0byBkaXNwbGF5IChTdHJpbmcsIENvbXBvbmVudCwgb3IgVGVtcGxhdGUpICovXG4gIGNvbnRlbnQ6IHN0cmluZyB8IFR5cGU8YW55PiB8IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqIE9wdGlvbmFsIHRpdGxlIGZvciB0aGUgc3RhbmRhcmQgaGVhZGVyICovXG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKiAqIFByZWRlZmluZWQgc2l6ZSBzY2FsZS5cbiAgICogLSB4czogMzIwcHggKE1vYmlsZSBhbGVydHMpXG4gICAqIC0gc206IDQyNXB4IChTdGFuZGFyZCBkaWFsb2dzKVxuICAgKiAtIGRlZmF1bHQ6IDUxMnB4IChGb3JtcylcbiAgICogLSBsZzogMTAyNHB4IChEYXRhIHRhYmxlcylcbiAgICogLSB4bDogMTI4MHB4IChMYXJnZSBmb3JtcywgZGFzaGJvYXJkcylcbiAgICogLSBmdWxsc2NyZWVuOiAxMDB2dy8xMDB2aCAoQ29tcGxleCB3b3JrZmxvd3MpXG4gICAqL1xuICBzaXplPzogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnIHwgJ3hsJyB8ICdmdWxsc2NyZWVuJztcblxuICAvKiogKiBJZiB0cnVlIChkZWZhdWx0KSwgY2xpY2tpbmcgdGhlIGJhY2tkcm9wIGNsb3NlcyB0aGUgbW9kYWwuXG4gICAqIFNldCB0byBmYWxzZSBmb3IgXCJibG9ja2luZ1wiIG1vZGFscyAoZS5nLiwgVGVybXMgb2YgU2VydmljZSkuXG4gICAqL1xuICBiYWNrZHJvcENsb3NlPzogYm9vbGVhbjtcblxuICAvKiogKiBEYXRhIHRvIHBhc3MgdG8gYSBDb21wb25lbnQgY29udGVudC5cbiAgICogQWNjZXNzZWQgdmlhIEBJbnB1dCgpIGluIHRoZSBjaGlsZCBjb21wb25lbnQuXG4gICAqL1xuICBkYXRhPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAvKiogKiBDb250ZXh0IHRvIHBhc3MgdG8gYSBUZW1wbGF0ZVJlZiBjb250ZW50LlxuICAgKiBBY2Nlc3NlZCB2aWEgYGxldC12YWxgIGluIHRoZSBIVE1MLlxuICAgKi9cbiAgY29udGV4dD86IFQ7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGJ1aWx0LWluIGNvcm5lciBjbG9zZSBidXR0b24gcmVuZGVycy4gRGVmYXVsdHMgdG8gdHJ1ZS4gKi9cbiAgc2hvd0Nsb3NlQnV0dG9uPzogYm9vbGVhbjtcbn1cbiJdfQ==
|
|
@@ -6,6 +6,16 @@ import { ModalComponent } from './modal.component';
|
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@angular/cdk/overlay";
|
|
8
8
|
import * as i2 from "./modal-stack.service";
|
|
9
|
+
/**
|
|
10
|
+
* `open()` always receives a plain object literal, never a `new Modal()`
|
|
11
|
+
* instance, so a class field initializer would never actually apply — these
|
|
12
|
+
* are the real defaults, merged in explicitly below.
|
|
13
|
+
*/
|
|
14
|
+
const MODAL_DEFAULTS = {
|
|
15
|
+
size: 'default',
|
|
16
|
+
backdropClose: true,
|
|
17
|
+
showCloseButton: true,
|
|
18
|
+
};
|
|
9
19
|
export class ModalService {
|
|
10
20
|
overlay;
|
|
11
21
|
injector;
|
|
@@ -16,12 +26,13 @@ export class ModalService {
|
|
|
16
26
|
this.stack = stack;
|
|
17
27
|
}
|
|
18
28
|
open(config) {
|
|
29
|
+
const resolved = { ...MODAL_DEFAULTS, ...config };
|
|
19
30
|
// 0. Remember what was focused so we can restore it after the modal closes.
|
|
20
31
|
const previouslyFocused = document.activeElement;
|
|
21
32
|
// 1. Create the Overlay (DOM placeholder)
|
|
22
33
|
const overlayRef = this.createOverlay();
|
|
23
34
|
// 2. Create the Controller (Ref)
|
|
24
|
-
const modalRef = new ModalRef(overlayRef,
|
|
35
|
+
const modalRef = new ModalRef(overlayRef, resolved, this.stack);
|
|
25
36
|
// 3. Create Injector to allow the Component to access the Ref
|
|
26
37
|
const injector = Injector.create({
|
|
27
38
|
parent: this.injector,
|
|
@@ -30,7 +41,7 @@ export class ModalService {
|
|
|
30
41
|
// Escape-to-close: mirror the backdrop close path, but only for
|
|
31
42
|
// non-blocking modals (backdropClose !== false).
|
|
32
43
|
overlayRef.keydownEvents().subscribe((event) => {
|
|
33
|
-
if (event.key === 'Escape' &&
|
|
44
|
+
if (event.key === 'Escape' && resolved.backdropClose) {
|
|
34
45
|
event.preventDefault();
|
|
35
46
|
modalRef.close();
|
|
36
47
|
}
|
|
@@ -40,6 +51,9 @@ export class ModalService {
|
|
|
40
51
|
// 4. Attach the UI Component to the Overlay
|
|
41
52
|
const portal = new ComponentPortal(ModalComponent, null, injector);
|
|
42
53
|
overlayRef.attach(portal);
|
|
54
|
+
// The backdrop element only exists once attached — setting this any
|
|
55
|
+
// earlier (e.g. in ModalRef's constructor) would silently no-op.
|
|
56
|
+
overlayRef.backdropElement?.setAttribute('data-state', 'open');
|
|
43
57
|
return modalRef;
|
|
44
58
|
}
|
|
45
59
|
/** Global helper to close everything */
|
|
@@ -50,7 +64,15 @@ export class ModalService {
|
|
|
50
64
|
createOverlay() {
|
|
51
65
|
const config = new OverlayConfig({
|
|
52
66
|
hasBackdrop: true,
|
|
53
|
-
backdropClass: [
|
|
67
|
+
backdropClass: [
|
|
68
|
+
'cdk-overlay-backdrop',
|
|
69
|
+
'bg-black/80',
|
|
70
|
+
'backdrop-blur-sm',
|
|
71
|
+
'data-[state=open]:animate-in',
|
|
72
|
+
'data-[state=open]:fade-in-0',
|
|
73
|
+
'data-[state=closed]:animate-out',
|
|
74
|
+
'data-[state=closed]:fade-out-0',
|
|
75
|
+
],
|
|
54
76
|
panelClass: [
|
|
55
77
|
'w-full',
|
|
56
78
|
'h-full',
|
|
@@ -74,4 +96,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
74
96
|
type: Injectable,
|
|
75
97
|
args: [{ providedIn: 'root' }]
|
|
76
98
|
}], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.Injector }, { type: i2.ModalStackService }] });
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7O0FBR25EOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWMsR0FBd0U7SUFDMUYsSUFBSSxFQUFFLFNBQVM7SUFDZixhQUFhLEVBQUUsSUFBSTtJQUNuQixlQUFlLEVBQUUsSUFBSTtDQUN0QixDQUFDO0FBR0YsTUFBTSxPQUFPLFlBQVk7SUFFYjtJQUNBO0lBQ0E7SUFIVixZQUNVLE9BQWdCLEVBQ2hCLFFBQWtCLEVBQ2xCLEtBQXdCO1FBRnhCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixVQUFLLEdBQUwsS0FBSyxDQUFtQjtJQUMvQixDQUFDO0lBRUosSUFBSSxDQUFVLE1BQWE7UUFDekIsTUFBTSxRQUFRLEdBQVUsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBRXpELDRFQUE0RTtRQUM1RSxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxhQUFtQyxDQUFDO1FBRXZFLDBDQUEwQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFeEMsaUNBQWlDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFJLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5FLDhEQUE4RDtRQUM5RCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUTtZQUNyQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ3ZELENBQUMsQ0FBQztRQUVILGdFQUFnRTtRQUNoRSxpREFBaUQ7UUFDakQsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUM1RCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsOERBQThEO1FBQzlELFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLDRDQUE0QztRQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUIsb0VBQW9FO1FBQ3BFLGlFQUFpRTtRQUNqRSxVQUFVLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFL0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsbUJBQW1CO0lBQ1gsYUFBYTtRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUMvQixXQUFXLEVBQUUsSUFBSTtZQUNqQixhQUFhLEVBQUU7Z0JBQ2Isc0JBQXNCO2dCQUN0QixhQUFhO2dCQUNiLGtCQUFrQjtnQkFDbEIsOEJBQThCO2dCQUM5Qiw2QkFBNkI7Z0JBQzdCLGlDQUFpQztnQkFDakMsZ0NBQWdDO2FBQ2pDO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLFFBQVE7Z0JBQ1IsUUFBUTtnQkFDUixNQUFNO2dCQUNOLGNBQWM7Z0JBQ2QsZ0JBQWdCO2dCQUNoQixxQkFBcUI7YUFDdEI7WUFDRCxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7WUFDckQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7aUJBQ3RDLE1BQU0sRUFBRTtpQkFDUixrQkFBa0IsRUFBRTtpQkFDcEIsZ0JBQWdCLEVBQUU7U0FDdEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO3dHQWxGVSxZQUFZOzRHQUFaLFlBQVksY0FEQyxNQUFNOzs0RkFDbkIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICcuL21vZGFsJztcbmltcG9ydCB7IE1vZGFsUmVmIH0gZnJvbSAnLi9tb2RhbC1yZWYnO1xuaW1wb3J0IHsgTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb2RhbFN0YWNrU2VydmljZSB9IGZyb20gJy4vbW9kYWwtc3RhY2suc2VydmljZSc7XG5cbi8qKlxuICogYG9wZW4oKWAgYWx3YXlzIHJlY2VpdmVzIGEgcGxhaW4gb2JqZWN0IGxpdGVyYWwsIG5ldmVyIGEgYG5ldyBNb2RhbCgpYFxuICogaW5zdGFuY2UsIHNvIGEgY2xhc3MgZmllbGQgaW5pdGlhbGl6ZXIgd291bGQgbmV2ZXIgYWN0dWFsbHkgYXBwbHkg4oCUIHRoZXNlXG4gKiBhcmUgdGhlIHJlYWwgZGVmYXVsdHMsIG1lcmdlZCBpbiBleHBsaWNpdGx5IGJlbG93LlxuICovXG5jb25zdCBNT0RBTF9ERUZBVUxUUzogUmVxdWlyZWQ8UGljazxNb2RhbCwgJ3NpemUnIHwgJ2JhY2tkcm9wQ2xvc2UnIHwgJ3Nob3dDbG9zZUJ1dHRvbic+PiA9IHtcbiAgc2l6ZTogJ2RlZmF1bHQnLFxuICBiYWNrZHJvcENsb3NlOiB0cnVlLFxuICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG59O1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1vZGFsU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHN0YWNrOiBNb2RhbFN0YWNrU2VydmljZVxuICApIHt9XG5cbiAgb3BlbjxSID0gYW55Pihjb25maWc6IE1vZGFsKTogTW9kYWxSZWY8Uj4ge1xuICAgIGNvbnN0IHJlc29sdmVkOiBNb2RhbCA9IHsgLi4uTU9EQUxfREVGQVVMVFMsIC4uLmNvbmZpZyB9O1xuXG4gICAgLy8gMC4gUmVtZW1iZXIgd2hhdCB3YXMgZm9jdXNlZCBzbyB3ZSBjYW4gcmVzdG9yZSBpdCBhZnRlciB0aGUgbW9kYWwgY2xvc2VzLlxuICAgIGNvbnN0IHByZXZpb3VzbHlGb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAvLyAxLiBDcmVhdGUgdGhlIE92ZXJsYXkgKERPTSBwbGFjZWhvbGRlcilcbiAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5jcmVhdGVPdmVybGF5KCk7XG5cbiAgICAvLyAyLiBDcmVhdGUgdGhlIENvbnRyb2xsZXIgKFJlZilcbiAgICBjb25zdCBtb2RhbFJlZiA9IG5ldyBNb2RhbFJlZjxSPihvdmVybGF5UmVmLCByZXNvbHZlZCwgdGhpcy5zdGFjayk7XG5cbiAgICAvLyAzLiBDcmVhdGUgSW5qZWN0b3IgdG8gYWxsb3cgdGhlIENvbXBvbmVudCB0byBhY2Nlc3MgdGhlIFJlZlxuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTW9kYWxSZWYsIHVzZVZhbHVlOiBtb2RhbFJlZiB9XVxuICAgIH0pO1xuXG4gICAgLy8gRXNjYXBlLXRvLWNsb3NlOiBtaXJyb3IgdGhlIGJhY2tkcm9wIGNsb3NlIHBhdGgsIGJ1dCBvbmx5IGZvclxuICAgIC8vIG5vbi1ibG9ja2luZyBtb2RhbHMgKGJhY2tkcm9wQ2xvc2UgIT09IGZhbHNlKS5cbiAgICBvdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJyAmJiByZXNvbHZlZC5iYWNrZHJvcENsb3NlKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG1vZGFsUmVmLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZXN0b3JlIGZvY3VzIHRvIHRoZSB0cmlnZ2VyIG9uY2UgdGhlIG92ZXJsYXkgaXMgdG9ybiBkb3duLlxuICAgIG92ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCkgPT4gcHJldmlvdXNseUZvY3VzZWQ/LmZvY3VzPy4oKSk7XG5cbiAgICAvLyA0LiBBdHRhY2ggdGhlIFVJIENvbXBvbmVudCB0byB0aGUgT3ZlcmxheVxuICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoTW9kYWxDb21wb25lbnQsIG51bGwsIGluamVjdG9yKTtcbiAgICBvdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xuXG4gICAgLy8gVGhlIGJhY2tkcm9wIGVsZW1lbnQgb25seSBleGlzdHMgb25jZSBhdHRhY2hlZCDigJQgc2V0dGluZyB0aGlzIGFueVxuICAgIC8vIGVhcmxpZXIgKGUuZy4gaW4gTW9kYWxSZWYncyBjb25zdHJ1Y3Rvcikgd291bGQgc2lsZW50bHkgbm8tb3AuXG4gICAgb3ZlcmxheVJlZi5iYWNrZHJvcEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScsICdvcGVuJyk7XG5cbiAgICByZXR1cm4gbW9kYWxSZWY7XG4gIH1cblxuICAvKiogR2xvYmFsIGhlbHBlciB0byBjbG9zZSBldmVyeXRoaW5nICovXG4gIGNsb3NlQWxsKCkge1xuICAgIHRoaXMuc3RhY2suY2xvc2VBbGwoKTtcbiAgfVxuXG4gIC8vIG1vZGFsLnNlcnZpY2UudHNcbiAgcHJpdmF0ZSBjcmVhdGVPdmVybGF5KCk6IE92ZXJsYXlSZWYge1xuICAgIGNvbnN0IGNvbmZpZyA9IG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgYmFja2Ryb3BDbGFzczogW1xuICAgICAgICAnY2RrLW92ZXJsYXktYmFja2Ryb3AnLFxuICAgICAgICAnYmctYmxhY2svODAnLFxuICAgICAgICAnYmFja2Ryb3AtYmx1ci1zbScsXG4gICAgICAgICdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluJyxcbiAgICAgICAgJ2RhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCcsXG4gICAgICAgICdkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0JyxcbiAgICAgICAgJ2RhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCcsXG4gICAgICBdLFxuICAgICAgcGFuZWxDbGFzczogW1xuICAgICAgICAndy1mdWxsJyxcbiAgICAgICAgJ2gtZnVsbCcsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2l0ZW1zLWNlbnRlcicsXG4gICAgICAgICdqdXN0aWZ5LWNlbnRlcicsXG4gICAgICAgICdwb2ludGVyLWV2ZW50cy1ub25lJ1xuICAgICAgXSxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpLFxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5LnBvc2l0aW9uKClcbiAgICAgICAgLmdsb2JhbCgpXG4gICAgICAgIC5jZW50ZXJIb3Jpem9udGFsbHkoKVxuICAgICAgICAuY2VudGVyVmVydGljYWxseSgpXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5vdmVybGF5LmNyZWF0ZShjb25maWcpO1xuICB9XG5cblxufVxuIl19
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef, inject } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { cn } from './utils/cn';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Radial counterpart to `tolle-progress`: a ring that fills clockwise from
|
|
7
|
+
* 12 o'clock. Project content to label the centre — a percentage, an icon,
|
|
8
|
+
* whatever the caller wants; the ring renders nothing there on its own.
|
|
9
|
+
* @new
|
|
10
|
+
*/
|
|
11
|
+
export class ProgressCircleComponent {
|
|
12
|
+
/**
|
|
13
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
14
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
15
|
+
* rendering the class it was born with.
|
|
16
|
+
*/
|
|
17
|
+
ngOnChanges() {
|
|
18
|
+
this.cdr.markForCheck();
|
|
19
|
+
}
|
|
20
|
+
/** Percent complete, 0-100. @default 0 */
|
|
21
|
+
value = 0;
|
|
22
|
+
/** Diameter of the ring in px. @default 120 */
|
|
23
|
+
size = 120;
|
|
24
|
+
/** Thickness of the ring in px. @default 8 */
|
|
25
|
+
strokeWidth = 8;
|
|
26
|
+
/** Extra Tailwind classes merged onto the ring via `cn()` (last-wins). */
|
|
27
|
+
class = '';
|
|
28
|
+
cdr = inject(ChangeDetectorRef);
|
|
29
|
+
get clampedValue() {
|
|
30
|
+
return Math.min(100, Math.max(0, this.value ?? 0));
|
|
31
|
+
}
|
|
32
|
+
get viewBox() {
|
|
33
|
+
return '0 0 ' + this.size + ' ' + this.size;
|
|
34
|
+
}
|
|
35
|
+
get center() {
|
|
36
|
+
return this.size / 2;
|
|
37
|
+
}
|
|
38
|
+
/** Leaves half the stroke width as margin so the ring never clips the frame. */
|
|
39
|
+
get radius() {
|
|
40
|
+
return Math.max(0, (this.size - this.strokeWidth) / 2);
|
|
41
|
+
}
|
|
42
|
+
get circumference() {
|
|
43
|
+
return 2 * Math.PI * this.radius;
|
|
44
|
+
}
|
|
45
|
+
get dashOffset() {
|
|
46
|
+
return this.circumference * (1 - this.clampedValue / 100);
|
|
47
|
+
}
|
|
48
|
+
get computedClass() {
|
|
49
|
+
return cn('relative inline-flex shrink-0 items-center justify-center', this.class);
|
|
50
|
+
}
|
|
51
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProgressCircleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
52
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ProgressCircleComponent, isStandalone: true, selector: "tolle-progress-circle", inputs: { value: "value", size: "size", strokeWidth: "strokeWidth", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
|
|
53
|
+
<div
|
|
54
|
+
[class]="computedClass"
|
|
55
|
+
[style.width.px]="size"
|
|
56
|
+
[style.height.px]="size"
|
|
57
|
+
role="progressbar"
|
|
58
|
+
[attr.aria-valuemin]="0"
|
|
59
|
+
[attr.aria-valuemax]="100"
|
|
60
|
+
[attr.aria-valuenow]="clampedValue"
|
|
61
|
+
>
|
|
62
|
+
<svg [attr.width]="size" [attr.height]="size" [attr.viewBox]="viewBox" class="block">
|
|
63
|
+
<svg:circle
|
|
64
|
+
[attr.cx]="center"
|
|
65
|
+
[attr.cy]="center"
|
|
66
|
+
[attr.r]="radius"
|
|
67
|
+
fill="none"
|
|
68
|
+
[attr.stroke-width]="strokeWidth"
|
|
69
|
+
class="stroke-primary/20"
|
|
70
|
+
></svg:circle>
|
|
71
|
+
<svg:circle
|
|
72
|
+
[attr.cx]="center"
|
|
73
|
+
[attr.cy]="center"
|
|
74
|
+
[attr.r]="radius"
|
|
75
|
+
fill="none"
|
|
76
|
+
[attr.stroke-width]="strokeWidth"
|
|
77
|
+
stroke-linecap="round"
|
|
78
|
+
[attr.stroke-dasharray]="circumference"
|
|
79
|
+
[attr.stroke-dashoffset]="dashOffset"
|
|
80
|
+
[attr.transform]="'rotate(-90 ' + center + ' ' + center + ')'"
|
|
81
|
+
class="stroke-primary transition-[stroke-dashoffset] duration-300 ease-in-out"
|
|
82
|
+
></svg:circle>
|
|
83
|
+
</svg>
|
|
84
|
+
<div class="absolute inset-0 flex items-center justify-center text-sm font-medium tabular-nums text-foreground">
|
|
85
|
+
<ng-content></ng-content>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
`, isInline: true, styles: [":host{display:inline-flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
89
|
+
}
|
|
90
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProgressCircleComponent, decorators: [{
|
|
91
|
+
type: Component,
|
|
92
|
+
args: [{ selector: 'tolle-progress-circle', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
93
|
+
<div
|
|
94
|
+
[class]="computedClass"
|
|
95
|
+
[style.width.px]="size"
|
|
96
|
+
[style.height.px]="size"
|
|
97
|
+
role="progressbar"
|
|
98
|
+
[attr.aria-valuemin]="0"
|
|
99
|
+
[attr.aria-valuemax]="100"
|
|
100
|
+
[attr.aria-valuenow]="clampedValue"
|
|
101
|
+
>
|
|
102
|
+
<svg [attr.width]="size" [attr.height]="size" [attr.viewBox]="viewBox" class="block">
|
|
103
|
+
<svg:circle
|
|
104
|
+
[attr.cx]="center"
|
|
105
|
+
[attr.cy]="center"
|
|
106
|
+
[attr.r]="radius"
|
|
107
|
+
fill="none"
|
|
108
|
+
[attr.stroke-width]="strokeWidth"
|
|
109
|
+
class="stroke-primary/20"
|
|
110
|
+
></svg:circle>
|
|
111
|
+
<svg:circle
|
|
112
|
+
[attr.cx]="center"
|
|
113
|
+
[attr.cy]="center"
|
|
114
|
+
[attr.r]="radius"
|
|
115
|
+
fill="none"
|
|
116
|
+
[attr.stroke-width]="strokeWidth"
|
|
117
|
+
stroke-linecap="round"
|
|
118
|
+
[attr.stroke-dasharray]="circumference"
|
|
119
|
+
[attr.stroke-dashoffset]="dashOffset"
|
|
120
|
+
[attr.transform]="'rotate(-90 ' + center + ' ' + center + ')'"
|
|
121
|
+
class="stroke-primary transition-[stroke-dashoffset] duration-300 ease-in-out"
|
|
122
|
+
></svg:circle>
|
|
123
|
+
</svg>
|
|
124
|
+
<div class="absolute inset-0 flex items-center justify-center text-sm font-medium tabular-nums text-foreground">
|
|
125
|
+
<ng-content></ng-content>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
`, styles: [":host{display:inline-flex}\n"] }]
|
|
129
|
+
}], propDecorators: { value: [{
|
|
130
|
+
type: Input
|
|
131
|
+
}], size: [{
|
|
132
|
+
type: Input
|
|
133
|
+
}], strokeWidth: [{
|
|
134
|
+
type: Input
|
|
135
|
+
}], class: [{
|
|
136
|
+
type: Input
|
|
137
|
+
}] } });
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtY2lyY2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvcHJvZ3Jlc3MtY2lyY2xlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBRWhDOzs7OztHQUtHO0FBNkNILE1BQU0sT0FBTyx1QkFBdUI7SUFDbEM7Ozs7T0FJRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCwwQ0FBMEM7SUFDakMsS0FBSyxHQUFrQixDQUFDLENBQUM7SUFDbEMsK0NBQStDO0lBQ3RDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDcEIsOENBQThDO0lBQ3JDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDekIsMEVBQTBFO0lBQ2pFLEtBQUssR0FBRyxFQUFFLENBQUM7SUFFSCxHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFakQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sRUFBRSxDQUFDLDJEQUEyRCxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRixDQUFDO3dHQWhEVSx1QkFBdUI7NEZBQXZCLHVCQUF1Qiw0TEF0Q3hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ1QscUdBdENTLFlBQVk7OzRGQXdDWCx1QkFBdUI7a0JBNUNuQyxTQUFTOytCQUNFLHVCQUF1QixjQUVyQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBQ04sdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NUOzhCQWFRLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uQ2hhbmdlcywgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuLyoqXG4gKiBSYWRpYWwgY291bnRlcnBhcnQgdG8gYHRvbGxlLXByb2dyZXNzYDogYSByaW5nIHRoYXQgZmlsbHMgY2xvY2t3aXNlIGZyb21cbiAqIDEyIG8nY2xvY2suIFByb2plY3QgY29udGVudCB0byBsYWJlbCB0aGUgY2VudHJlIOKAlCBhIHBlcmNlbnRhZ2UsIGFuIGljb24sXG4gKiB3aGF0ZXZlciB0aGUgY2FsbGVyIHdhbnRzOyB0aGUgcmluZyByZW5kZXJzIG5vdGhpbmcgdGhlcmUgb24gaXRzIG93bi5cbiAqIEBuZXdcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtcHJvZ3Jlc3MtY2lyY2xlJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogaW5saW5lLWZsZXg7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIFtjbGFzc109XCJjb21wdXRlZENsYXNzXCJcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCJzaXplXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwic2l6ZVwiXG4gICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCIwXCJcbiAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwiMTAwXCJcbiAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiY2xhbXBlZFZhbHVlXCJcbiAgICA+XG4gICAgICA8c3ZnIFthdHRyLndpZHRoXT1cInNpemVcIiBbYXR0ci5oZWlnaHRdPVwic2l6ZVwiIFthdHRyLnZpZXdCb3hdPVwidmlld0JveFwiIGNsYXNzPVwiYmxvY2tcIj5cbiAgICAgICAgPHN2ZzpjaXJjbGVcbiAgICAgICAgICBbYXR0ci5jeF09XCJjZW50ZXJcIlxuICAgICAgICAgIFthdHRyLmN5XT1cImNlbnRlclwiXG4gICAgICAgICAgW2F0dHIucl09XCJyYWRpdXNcIlxuICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwic3Ryb2tlV2lkdGhcIlxuICAgICAgICAgIGNsYXNzPVwic3Ryb2tlLXByaW1hcnkvMjBcIlxuICAgICAgICA+PC9zdmc6Y2lyY2xlPlxuICAgICAgICA8c3ZnOmNpcmNsZVxuICAgICAgICAgIFthdHRyLmN4XT1cImNlbnRlclwiXG4gICAgICAgICAgW2F0dHIuY3ldPVwiY2VudGVyXCJcbiAgICAgICAgICBbYXR0ci5yXT1cInJhZGl1c1wiXG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJzdHJva2VXaWR0aFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgW2F0dHIuc3Ryb2tlLWRhc2hhcnJheV09XCJjaXJjdW1mZXJlbmNlXCJcbiAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaG9mZnNldF09XCJkYXNoT2Zmc2V0XCJcbiAgICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiJ3JvdGF0ZSgtOTAgJyArIGNlbnRlciArICcgJyArIGNlbnRlciArICcpJ1wiXG4gICAgICAgICAgY2xhc3M9XCJzdHJva2UtcHJpbWFyeSB0cmFuc2l0aW9uLVtzdHJva2UtZGFzaG9mZnNldF0gZHVyYXRpb24tMzAwIGVhc2UtaW4tb3V0XCJcbiAgICAgICAgPjwvc3ZnOmNpcmNsZT5cbiAgICAgIDwvc3ZnPlxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSB0YWJ1bGFyLW51bXMgdGV4dC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0NpcmNsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBBbmd1bGFyIHdyaXRlcyBhIGJvdW5kIGBjbGFzc2AgaW5wdXQgdGhyb3VnaCBpdHMgc3R5bGluZyBwYXRoLCB3aGljaCBkb2VzXG4gICAqIG5vdCBtYXJrIGFuIE9uUHVzaCBjb21wb25lbnQgZGlydHkg4oCUIHdpdGhvdXQgdGhpcyBob29rIHRoZSBjb21wb25lbnQga2VlcHNcbiAgICogcmVuZGVyaW5nIHRoZSBjbGFzcyBpdCB3YXMgYm9ybiB3aXRoLlxuICAgKi9cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogUGVyY2VudCBjb21wbGV0ZSwgMC0xMDAuIEBkZWZhdWx0IDAgKi9cbiAgQElucHV0KCkgdmFsdWU6IG51bWJlciB8IG51bGwgPSAwO1xuICAvKiogRGlhbWV0ZXIgb2YgdGhlIHJpbmcgaW4gcHguIEBkZWZhdWx0IDEyMCAqL1xuICBASW5wdXQoKSBzaXplID0gMTIwO1xuICAvKiogVGhpY2tuZXNzIG9mIHRoZSByaW5nIGluIHB4LiBAZGVmYXVsdCA4ICovXG4gIEBJbnB1dCgpIHN0cm9rZVdpZHRoID0gODtcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIHJpbmcgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcblxuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgZ2V0IGNsYW1wZWRWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIHRoaXMudmFsdWUgPz8gMCkpO1xuICB9XG5cbiAgZ2V0IHZpZXdCb3goKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJzAgMCAnICsgdGhpcy5zaXplICsgJyAnICsgdGhpcy5zaXplO1xuICB9XG5cbiAgZ2V0IGNlbnRlcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNpemUgLyAyO1xuICB9XG5cbiAgLyoqIExlYXZlcyBoYWxmIHRoZSBzdHJva2Ugd2lkdGggYXMgbWFyZ2luIHNvIHRoZSByaW5nIG5ldmVyIGNsaXBzIHRoZSBmcmFtZS4gKi9cbiAgZ2V0IHJhZGl1cygpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCAodGhpcy5zaXplIC0gdGhpcy5zdHJva2VXaWR0aCkgLyAyKTtcbiAgfVxuXG4gIGdldCBjaXJjdW1mZXJlbmNlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDIgKiBNYXRoLlBJICogdGhpcy5yYWRpdXM7XG4gIH1cblxuICBnZXQgZGFzaE9mZnNldCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNpcmN1bWZlcmVuY2UgKiAoMSAtIHRoaXMuY2xhbXBlZFZhbHVlIC8gMTAwKTtcbiAgfVxuXG4gIGdldCBjb21wdXRlZENsYXNzKCkge1xuICAgIHJldHVybiBjbigncmVsYXRpdmUgaW5saW5lLWZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyJywgdGhpcy5jbGFzcyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -105,21 +105,21 @@ export class ResizablePanelComponent {
|
|
|
105
105
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ResizablePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
106
106
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ResizablePanelComponent, isStandalone: true, selector: "tolle-resizable-panel", inputs: { direction: "direction", class: "class" }, queries: [{ propertyName: "panels", predicate: i0.forwardRef(() => ResizablePanelItemComponent) }], ngImport: i0, template: `
|
|
107
107
|
<div [class]="computedContainerClass">
|
|
108
|
-
<div class="flex" [class.flex-col]="direction === 'vertical'" [class.flex-row]="direction === 'horizontal'">
|
|
108
|
+
<div class="flex h-full w-full" [class.flex-col]="direction === 'vertical'" [class.flex-row]="direction === 'horizontal'">
|
|
109
109
|
<ng-content></ng-content>
|
|
110
110
|
</div>
|
|
111
111
|
</div>
|
|
112
|
-
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
112
|
+
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
113
113
|
}
|
|
114
114
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ResizablePanelComponent, decorators: [{
|
|
115
115
|
type: Component,
|
|
116
116
|
args: [{ selector: 'tolle-resizable-panel', standalone: true, imports: [CommonModule], template: `
|
|
117
117
|
<div [class]="computedContainerClass">
|
|
118
|
-
<div class="flex" [class.flex-col]="direction === 'vertical'" [class.flex-row]="direction === 'horizontal'">
|
|
118
|
+
<div class="flex h-full w-full" [class.flex-col]="direction === 'vertical'" [class.flex-row]="direction === 'horizontal'">
|
|
119
119
|
<ng-content></ng-content>
|
|
120
120
|
</div>
|
|
121
121
|
</div>
|
|
122
|
-
`, styles: [":host{display:block}\n"] }]
|
|
122
|
+
`, styles: [":host{display:block;width:100%;height:100%}\n"] }]
|
|
123
123
|
}], propDecorators: { direction: [{
|
|
124
124
|
type: Input
|
|
125
125
|
}], class: [{
|
|
@@ -128,4 +128,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
128
128
|
type: ContentChildren,
|
|
129
129
|
args: [forwardRef(() => ResizablePanelItemComponent)]
|
|
130
130
|
}] } });
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvcmVzaXphYmxlLXBhbmVsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQStCLFVBQVUsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQWEsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQW1CL0UsTUFBTSxPQUFPLHVCQUF1QjtJQUN6QixTQUFTLEdBQThCLFlBQVksQ0FBQztJQUNwRCxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBRTVCLHVGQUF1RjtJQUN2QixNQUFNLENBQTBDO0lBRXhHLEVBQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWhDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEIsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFFL0IsaUJBQWlCLENBQTJCO0lBQzVDLGVBQWUsQ0FBMkI7SUFFbEQsa0JBQWtCO1FBQ2hCLG1DQUFtQztRQUNuQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFpQyxFQUFFLEtBQWlCO1FBQzlELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFeEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzNGLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUMzRixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0lBQzFDLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9ELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCO1lBQUUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM5RixJQUFJLElBQUksQ0FBQyxlQUFlO1lBQUUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFpQjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBRTdCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ25GLE1BQU0sT0FBTyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFFdEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxZQUFZO1lBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXO1lBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7UUFFdkMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRXJELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFakQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDdEcsTUFBTSxXQUFXLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBRXpHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRTFILElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNqSSxDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFbEMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQztZQUN0QyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNoQixLQUFLLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLEVBQUUsQ0FDUCxlQUFlLEVBQ2YsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO0lBQ0osQ0FBQzt3R0E1SFUsdUJBQXVCOzRGQUF2Qix1QkFBdUIsZ0xBS0EsMkJBQTJCLDhCQWxCbkQ7Ozs7OztHQU1ULCtGQVBTLFlBQVk7OzRGQWNYLHVCQUF1QjtrQkFqQm5DLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxZQUNiOzs7Ozs7R0FNVDs4QkFRUSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFHMEQsTUFBTTtzQkFBckUsZUFBZTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgQWZ0ZXJDb250ZW50SW5pdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95LCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcbmltcG9ydCB7IFJlc2l6YWJsZVBhbmVsSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vcmVzaXphYmxlLXBhbmVsLWl0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtcmVzaXphYmxlLXBhbmVsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiY29tcHV0ZWRDb250YWluZXJDbGFzc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIiBbY2xhc3MuZmxleC1jb2xdPVwiZGlyZWN0aW9uID09PSAndmVydGljYWwnXCIgW2NsYXNzLmZsZXgtcm93XT1cImRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBSZXNpemFibGVQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGRpcmVjdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyA9ICdob3Jpem9udGFsJztcbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gIC8vIGZvcndhcmRSZWYgYnJlYWtzIHRoZSBwYW5lbCA8LT4gaXRlbSBjaXJjdWxhciBpbXBvcnQgKFREWiBhdCBjbGFzcy1kZWNvcmF0aW9uIHRpbWUpLlxuICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gUmVzaXphYmxlUGFuZWxJdGVtQ29tcG9uZW50KSkgcGFuZWxzITogUXVlcnlMaXN0PFJlc2l6YWJsZVBhbmVsSXRlbUNvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBlbCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIHByaXZhdGUgaXNSZXNpemluZyA9IGZhbHNlO1xuICBwcml2YXRlIGFjdGl2ZVBhbmVsSW5kZXggPSAtMTtcbiAgcHJpdmF0ZSBzdGFydEN1cnNvclBvc2l0aW9uID0gMDtcbiAgcHJpdmF0ZSBzdGFydFBhbmVsU2l6ZXM6IG51bWJlcltdID0gW107XG5cbiAgcHJpdmF0ZSBtb3VzZU1vdmVMaXN0ZW5lcj86IChlOiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIG1vdXNlVXBMaXN0ZW5lcj86IChlOiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAvLyBJbml0aWFsaXplIHBhbmVsIHNpemVzIGlmIG5lZWRlZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVQYW5lbFNpemVzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUxhc3RTdGF0dXMoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucGFuZWxzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlUGFuZWxTaXplcygpO1xuICAgICAgdGhpcy51cGRhdGVMYXN0U3RhdHVzKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFudXBMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGFzdFN0YXR1cygpIHtcbiAgICBjb25zdCBwYW5lbHMgPSB0aGlzLnBhbmVscy50b0FycmF5KCk7XG4gICAgcGFuZWxzLmZvckVhY2goKHAsIGkpID0+IHAuaXNMYXN0ID0gaSA9PT0gcGFuZWxzLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgc3RhcnRSZXNpemUoaXRlbTogUmVzaXphYmxlUGFuZWxJdGVtQ29tcG9uZW50LCBldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IHBhbmVscyA9IHRoaXMucGFuZWxzLnRvQXJyYXkoKTtcbiAgICB0aGlzLmFjdGl2ZVBhbmVsSW5kZXggPSBwYW5lbHMuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAodGhpcy5hY3RpdmVQYW5lbEluZGV4ID09PSAtMSB8fCB0aGlzLmFjdGl2ZVBhbmVsSW5kZXggPT09IHBhbmVscy5sZW5ndGggLSAxKSByZXR1cm47XG5cbiAgICB0aGlzLmlzUmVzaXppbmcgPSB0cnVlO1xuICAgIHRoaXMuc3RhcnRDdXJzb3JQb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyBldmVudC5jbGllbnRYIDogZXZlbnQuY2xpZW50WTtcbiAgICB0aGlzLnN0YXJ0UGFuZWxTaXplcyA9IHBhbmVscy5tYXAocCA9PiBwLnNpemUpO1xuXG4gICAgdGhpcy5zZXR1cExpc3RlbmVycygpO1xuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gdGhpcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICdjb2wtcmVzaXplJyA6ICdyb3ctcmVzaXplJztcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnbm9uZSc7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTGlzdGVuZXJzKCkge1xuICAgIHRoaXMubW91c2VNb3ZlTGlzdGVuZXIgPSAoZTogTW91c2VFdmVudCkgPT4gdGhpcy5vbk1vdXNlTW92ZShlKTtcbiAgICB0aGlzLm1vdXNlVXBMaXN0ZW5lciA9ICgpID0+IHRoaXMuc3RvcFJlc2l6ZSgpO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5tb3VzZU1vdmVMaXN0ZW5lcik7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMubW91c2VVcExpc3RlbmVyKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5tb3VzZU1vdmVMaXN0ZW5lcikgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5tb3VzZU1vdmVMaXN0ZW5lcik7XG4gICAgaWYgKHRoaXMubW91c2VVcExpc3RlbmVyKSBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5tb3VzZVVwTGlzdGVuZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5pc1Jlc2l6aW5nKSByZXR1cm47XG5cbiAgICBjb25zdCBjdXJyZW50UG9zID0gdGhpcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/IGV2ZW50LmNsaWVudFggOiBldmVudC5jbGllbnRZO1xuICAgIGNvbnN0IGRlbHRhUHggPSBjdXJyZW50UG9zIC0gdGhpcy5zdGFydEN1cnNvclBvc2l0aW9uO1xuXG4gICAgY29uc3QgY29udGFpbmVyU2l6ZSA9IHRoaXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgID8gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoXG4gICAgICA6IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgICBjb25zdCBkZWx0YVBlcmNlbnQgPSAoZGVsdGFQeCAvIGNvbnRhaW5lclNpemUpICogMTAwO1xuXG4gICAgY29uc3QgcGFuZWxzID0gdGhpcy5wYW5lbHMudG9BcnJheSgpO1xuICAgIGNvbnN0IHBhbmVsQSA9IHBhbmVsc1t0aGlzLmFjdGl2ZVBhbmVsSW5kZXhdO1xuICAgIGNvbnN0IHBhbmVsQiA9IHBhbmVsc1t0aGlzLmFjdGl2ZVBhbmVsSW5kZXggKyAxXTtcblxuICAgIGNvbnN0IG5ld1NpemVBID0gTWF0aC5tYXgocGFuZWxBLm1pblNpemUsIHRoaXMuc3RhcnRQYW5lbFNpemVzW3RoaXMuYWN0aXZlUGFuZWxJbmRleF0gKyBkZWx0YVBlcmNlbnQpO1xuICAgIGNvbnN0IGFjdHVhbERlbHRhID0gbmV3U2l6ZUEgLSB0aGlzLnN0YXJ0UGFuZWxTaXplc1t0aGlzLmFjdGl2ZVBhbmVsSW5kZXhdO1xuICAgIGNvbnN0IG5ld1NpemVCID0gTWF0aC5tYXgocGFuZWxCLm1pblNpemUsIHRoaXMuc3RhcnRQYW5lbFNpemVzW3RoaXMuYWN0aXZlUGFuZWxJbmRleCArIDFdIC0gYWN0dWFsRGVsdGEpO1xuXG4gICAgcGFuZWxBLnNpemUgPSBuZXdTaXplQTtcbiAgICBwYW5lbEIuc2l6ZSA9IHRoaXMuc3RhcnRQYW5lbFNpemVzW3RoaXMuYWN0aXZlUGFuZWxJbmRleF0gKyB0aGlzLnN0YXJ0UGFuZWxTaXplc1t0aGlzLmFjdGl2ZVBhbmVsSW5kZXggKyAxXSAtIHBhbmVsQS5zaXplO1xuXG4gICAgaWYgKHBhbmVsQi5zaXplIDwgcGFuZWxCLm1pblNpemUpIHtcbiAgICAgIHBhbmVsQi5zaXplID0gcGFuZWxCLm1pblNpemU7XG4gICAgICBwYW5lbEEuc2l6ZSA9ICh0aGlzLnN0YXJ0UGFuZWxTaXplc1t0aGlzLmFjdGl2ZVBhbmVsSW5kZXhdICsgdGhpcy5zdGFydFBhbmVsU2l6ZXNbdGhpcy5hY3RpdmVQYW5lbEluZGV4ICsgMV0pIC0gcGFuZWxCLm1pblNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUmVzaXplKCkge1xuICAgIHRoaXMuaXNSZXNpemluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYW51cExpc3RlbmVycygpO1xuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJyc7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhbmVsU2l6ZXMoKSB7XG4gICAgY29uc3QgcGFuZWxzID0gdGhpcy5wYW5lbHMudG9BcnJheSgpO1xuICAgIGNvbnN0IHRvdGFsUGFuZWxzID0gcGFuZWxzLmxlbmd0aDtcblxuICAgIGlmICh0b3RhbFBhbmVscyA+IDApIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTaXplID0gMTAwIC8gdG90YWxQYW5lbHM7XG4gICAgICBwYW5lbHMuZm9yRWFjaChwYW5lbCA9PiB7XG4gICAgICAgIGlmICghcGFuZWwuc2l6ZSkge1xuICAgICAgICAgIHBhbmVsLnNpemUgPSBkZWZhdWx0U2l6ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbXB1dGVkQ29udGFpbmVyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ3ctZnVsbCBoLWZ1bGwnLFxuICAgICAgdGhpcy5jbGFzc1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvcmVzaXphYmxlLXBhbmVsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQStCLFVBQVUsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQWEsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQXdCL0UsTUFBTSxPQUFPLHVCQUF1QjtJQUN6QixTQUFTLEdBQThCLFlBQVksQ0FBQztJQUNwRCxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBRTVCLHVGQUF1RjtJQUN2QixNQUFNLENBQTBDO0lBRXhHLEVBQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWhDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEIsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFFL0IsaUJBQWlCLENBQTJCO0lBQzVDLGVBQWUsQ0FBMkI7SUFFbEQsa0JBQWtCO1FBQ2hCLG1DQUFtQztRQUNuQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxD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LENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLEVBQUUsQ0FDUCxlQUFlLEVBQ2YsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO0lBQ0osQ0FBQzt3R0E1SFUsdUJBQXVCOzRGQUF2Qix1QkFBdUIsZ0xBS0EsMkJBQTJCLDhCQXZCbkQ7Ozs7OztHQU1ULHNIQVBTLFlBQVk7OzRGQW1CWCx1QkFBdUI7a0JBdEJuQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7O0dBTVQ7OEJBYVEsU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRzBELE1BQU07c0JBQXJFLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIEFmdGVyQ29udGVudEluaXQsIEVsZW1lbnRSZWYsIGluamVjdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uRGVzdHJveSwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5pbXBvcnQgeyBSZXNpemFibGVQYW5lbEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL3Jlc2l6YWJsZS1wYW5lbC1pdGVtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLXJlc2l6YWJsZS1wYW5lbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImNvbXB1dGVkQ29udGFpbmVyQ2xhc3NcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtZnVsbCB3LWZ1bGxcIiBbY2xhc3MuZmxleC1jb2xdPVwiZGlyZWN0aW9uID09PSAndmVydGljYWwnXCIgW2NsYXNzLmZsZXgtcm93XT1cImRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLyogRmlsbHMgaXRzIHBhcmVudCBieSBkZWZhdWx0IHNvIGNvbnN1bWVycyBkb24ndCBoYXZlIHRvIHJlbWVtYmVyIGFcbiAgICAgICBtYW51YWwgaC1mdWxsIOKAlCB0aGUgZmxleCByb3cvY29sIHdyYXBwZXIgYmVsb3cgb25seSBoYXMgc29tZXRoaW5nIHRvXG4gICAgICAgZGlzdHJpYnV0ZSBvbmNlIHRoaXMgYW5kIHRoZSBjb250YWluZXIgZGl2IGFjdHVhbGx5IGhhdmUgYSBoZWlnaHQuICovXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZVBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZGlyZWN0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ2hvcml6b250YWwnO1xuICBASW5wdXQoKSBjbGFzczogc3RyaW5nID0gJyc7XG5cbiAgLy8gZm9yd2FyZFJlZiBicmVha3MgdGhlIHBhbmVsIDwtPiBpdGVtIGNpcmN1bGFyIGltcG9ydCAoVERaIGF0IGNsYXNzLWRlY29yYXRpb24gdGltZSkuXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBSZXNpemFibGVQYW5lbEl0ZW1Db21wb25lbnQpKSBwYW5lbHMhOiBRdWVyeUxpc3Q8UmVzaXphYmxlUGFuZWxJdGVtQ29tcG9uZW50PjtcblxuICBwcml2YXRlIGVsID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgcHJpdmF0ZSBpc1Jlc2l6aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgYWN0aXZlUGFuZWxJbmRleCA9IC0xO1xuICBwcml2YXRlIHN0YXJ0Q3Vyc29yUG9zaXRpb24gPSAwO1xuICBwcml2YXRlIHN0YXJ0UGFuZWxTaXplczogbnVtYmVyW10gPSBbXTtcblxuICBwcml2YXRlIG1vdXNlTW92ZUxpc3RlbmVyPzogKGU6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgbW91c2VVcExpc3RlbmVyPzogKGU6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIC8vIEluaXRpYWxpemUgcGFuZWwgc2l6ZXMgaWYgbmVlZGVkXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVBhbmVsU2l6ZXMoKTtcbiAgICAgIHRoaXMudXBkYXRlTGFzdFN0YXR1cygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wYW5lbHMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVQYW5lbFNpemVzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUxhc3RTdGF0dXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYW51cExpc3RlbmVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMYXN0U3RhdHVzKCkge1xuICAgIGNvbnN0IHBhbmVscyA9IHRoaXMucGFuZWxzLnRvQXJyYXkoKTtcbiAgICBwYW5lbHMuZm9yRWFjaCgocCwgaSkgPT4gcC5pc0xhc3QgPSBpID09PSBwYW5lbHMubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBzdGFydFJlc2l6ZShpdGVtOiBSZXNpemFibGVQYW5lbEl0ZW1Db21wb25lbnQsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgcGFuZWxzID0gdGhpcy5wYW5lbHMudG9BcnJheSgpO1xuICAgIHRoaXMuYWN0aXZlUGFuZWxJbmRleCA9IHBhbmVscy5pbmRleE9mKGl0ZW0pO1xuICAgIGlmICh0aGlzLmFjdGl2ZVBhbmVsSW5kZXggPT09IC0xIHx8IHRoaXMuYWN0aXZlUGFuZWxJbmRleCA9PT0gcGFuZWxzLmxlbmd0aCAtIDEpIHJldHVybjtcblxuICAgIHRoaXMuaXNSZXNpemluZyA9IHRydWU7XG4gICAgdGhpcy5zdGFydEN1cnNvclBvc2l0aW9uID0gdGhpcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/IGV2ZW50LmNsaWVudFggOiBldmVudC5jbGllbnRZO1xuICAgIHRoaXMuc3RhcnRQYW5lbFNpemVzID0gcGFuZWxzLm1hcChwID0+IHAuc2l6ZSk7XG5cbiAgICB0aGlzLnNldHVwTGlzdGVuZXJzKCk7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSB0aGlzLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ2NvbC1yZXNpemUnIDogJ3Jvdy1yZXNpemUnO1xuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICdub25lJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5tb3VzZU1vdmVMaXN0ZW5lciA9IChlOiBNb3VzZUV2ZW50KSA9PiB0aGlzLm9uTW91c2VNb3ZlKGUpO1xuICAgIHRoaXMubW91c2VVcExpc3RlbmVyID0gKCkgPT4gdGhpcy5zdG9wUmVzaXplKCk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZUxpc3RlbmVyKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5tb3VzZVVwTGlzdGVuZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwTGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLm1vdXNlTW92ZUxpc3RlbmVyKSBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZUxpc3RlbmVyKTtcbiAgICBpZiAodGhpcy5tb3VzZVVwTGlzdGVuZXIpIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm1vdXNlVXBMaXN0ZW5lcik7XG4gIH1cblxuICBwcml2YXRlIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmlzUmVzaXppbmcpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRQb3MgPSB0aGlzLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gZXZlbnQuY2xpZW50WCA6IGV2ZW50LmNsaWVudFk7XG4gICAgY29uc3QgZGVsdGFQeCA9IGN1cnJlbnRQb3MgLSB0aGlzLnN0YXJ0Q3Vyc29yUG9zaXRpb247XG5cbiAgICBjb25zdCBjb250YWluZXJTaXplID0gdGhpcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgPyB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGhcbiAgICAgIDogdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICAgIGNvbnN0IGRlbHRhUGVyY2VudCA9IChkZWx0YVB4IC8gY29udGFpbmVyU2l6ZSkgKiAxMDA7XG5cbiAgICBjb25zdCBwYW5lbHMgPSB0aGlzLnBhbmVscy50b0FycmF5KCk7XG4gICAgY29uc3QgcGFuZWxBID0gcGFuZWxzW3RoaXMuYWN0aXZlUGFuZWxJbmRleF07XG4gICAgY29uc3QgcGFuZWxCID0gcGFuZWxzW3RoaXMuYWN0aXZlUGFuZWxJbmRleCArIDFdO1xuXG4gICAgY29uc3QgbmV3U2l6ZUEgPSBNYXRoLm1heChwYW5lbEEubWluU2l6ZSwgdGhpcy5zdGFydFBhbmVsU2l6ZXNbdGhpcy5hY3RpdmVQYW5lbEluZGV4XSArIGRlbHRhUGVyY2VudCk7XG4gICAgY29uc3QgYWN0dWFsRGVsdGEgPSBuZXdTaXplQSAtIHRoaXMuc3RhcnRQYW5lbFNpemVzW3RoaXMuYWN0aXZlUGFuZWxJbmRleF07XG4gICAgY29uc3QgbmV3U2l6ZUIgPSBNYXRoLm1heChwYW5lbEIubWluU2l6ZSwgdGhpcy5zdGFydFBhbmVsU2l6ZXNbdGhpcy5hY3RpdmVQYW5lbEluZGV4ICsgMV0gLSBhY3R1YWxEZWx0YSk7XG5cbiAgICBwYW5lbEEuc2l6ZSA9IG5ld1NpemVBO1xuICAgIHBhbmVsQi5zaXplID0gdGhpcy5zdGFydFBhbmVsU2l6ZXNbdGhpcy5hY3RpdmVQYW5lbEluZGV4XSArIHRoaXMuc3RhcnRQYW5lbFNpemVzW3RoaXMuYWN0aXZlUGFuZWxJbmRleCArIDFdIC0gcGFuZWxBLnNpemU7XG5cbiAgICBpZiAocGFuZWxCLnNpemUgPCBwYW5lbEIubWluU2l6ZSkge1xuICAgICAgcGFuZWxCLnNpemUgPSBwYW5lbEIubWluU2l6ZTtcbiAgICAgIHBhbmVsQS5zaXplID0gKHRoaXMuc3RhcnRQYW5lbFNpemVzW3RoaXMuYWN0aXZlUGFuZWxJbmRleF0gKyB0aGlzLnN0YXJ0UGFuZWxTaXplc1t0aGlzLmFjdGl2ZVBhbmVsSW5kZXggKyAxXSkgLSBwYW5lbEIubWluU2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZXNpemUoKSB7XG4gICAgdGhpcy5pc1Jlc2l6aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhbnVwTGlzdGVuZXJzKCk7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnJztcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGFuZWxTaXplcygpIHtcbiAgICBjb25zdCBwYW5lbHMgPSB0aGlzLnBhbmVscy50b0FycmF5KCk7XG4gICAgY29uc3QgdG90YWxQYW5lbHMgPSBwYW5lbHMubGVuZ3RoO1xuXG4gICAgaWYgKHRvdGFsUGFuZWxzID4gMCkge1xuICAgICAgY29uc3QgZGVmYXVsdFNpemUgPSAxMDAgLyB0b3RhbFBhbmVscztcbiAgICAgIHBhbmVscy5mb3JFYWNoKHBhbmVsID0+IHtcbiAgICAgICAgaWYgKCFwYW5lbC5zaXplKSB7XG4gICAgICAgICAgcGFuZWwuc2l6ZSA9IGRlZmF1bHRTaXplO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29tcHV0ZWRDb250YWluZXJDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICAndy1mdWxsIGgtZnVsbCcsXG4gICAgICB0aGlzLmNsYXNzXG4gICAgKTtcbiAgfVxufVxuIl19
|