structra-ui 0.1.5 → 0.1.6
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/README.md +12 -52
- package/app/dialogs/app-dialog/app-dialog.component.d.ts +9 -4
- package/app/form-layout/validation-summary/validation-summary.component.d.ts +9 -15
- package/app/menus/drawer/drawer.component.d.ts +3 -2
- package/esm2022/app/dialogs/app-dialog/app-dialog.component.mjs +14 -8
- package/esm2022/app/form-layout/validation-summary/validation-summary.component.mjs +13 -62
- package/esm2022/app/menus/drawer/drawer.component.mjs +8 -6
- package/fesm2022/structra-ui.mjs +33 -73
- package/fesm2022/structra-ui.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,75 +1,35 @@
|
|
|
1
1
|
# structra-ui
|
|
2
2
|
|
|
3
|
-
Biblioteca **Angular** da stack **Structra
|
|
3
|
+
Biblioteca **Angular** da stack **Structra** para interfaces consistentes: componentes, layout de formulários e padrões de UI reutilizáveis entre produtos.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
- **Nome do pacote npm:** `structra-ui`
|
|
5
|
+
**Documentação e exemplos:** [StructraLab](https://structralab.com/)
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
**Peer dependencies:** `@angular/common`, `@angular/core`, `@angular/forms`, `@angular/cdk`, `@angular/material`, `@angular/router`, `@angular/animations` em **`>=17.0.0 <22.0.0`**
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
## Build do pacote
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
## Instalação (npm)
|
|
15
|
-
|
|
16
|
-
Em projectos reais, instala a partir do **registo npm** (não uses `file:../...` em produção):
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
npm install structra-ui
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Actualiza versões como qualquer outra dependência:
|
|
11
|
+
A entrada publicada é **`src/structra-public-api.ts`** na raiz do monorepo (ver `ng-package.json`). O comando:
|
|
23
12
|
|
|
24
13
|
```bash
|
|
25
|
-
npm
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
### Desenvolvimento monorepo (opcional)
|
|
29
|
-
|
|
30
|
-
Só para quem desenvolve **neste** repositório ou precisa de um *build* local antes de publicar: gera `dist/structra-ui` com `npm run lib:build` na raiz do monorepo e aponta temporariamente no `package.json` da app consumidora, por exemplo:
|
|
31
|
-
|
|
32
|
-
```json
|
|
33
|
-
"structra-ui": "file:../web-components/dist/structra-ui"
|
|
14
|
+
npm run lib:build
|
|
15
|
+
# ou: npx ng build structra-ui
|
|
34
16
|
```
|
|
35
17
|
|
|
36
|
-
|
|
18
|
+
gera `dist/structra-ui/`, pronto para `npm pack` / `npm publish`.
|
|
37
19
|
|
|
38
|
-
##
|
|
39
|
-
|
|
40
|
-
A entrada do pacote é **`src/structra-public-api.ts`** na raiz do monorepo (configurado em `ng-package.json`).
|
|
41
|
-
|
|
42
|
-
Na **raiz** do repositório `web-components`:
|
|
20
|
+
## Instalação (aplicação consumidora)
|
|
43
21
|
|
|
44
22
|
```bash
|
|
45
|
-
npm
|
|
46
|
-
# ou: npx ng build structra-ui
|
|
23
|
+
npm install structra-ui
|
|
47
24
|
```
|
|
48
25
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
## Uso na aplicação Angular
|
|
52
|
-
|
|
53
|
-
Importa os símbolos necessários a partir de **`structra-ui`**:
|
|
26
|
+
## Uso
|
|
54
27
|
|
|
55
28
|
```ts
|
|
56
29
|
import { STRUCTRA_UI, BaseButtonComponent } from 'structra-ui';
|
|
57
30
|
```
|
|
58
31
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
Regista `provideAnimations()` (e outros *providers* que os componentes exijam, como CDK Dialog, conforme a demo) na configuração da app.
|
|
62
|
-
|
|
63
|
-
## Estilos globais (tema StructraLab)
|
|
64
|
-
|
|
65
|
-
O pacote npm publica sobretudo **código TypeScript / bundles**. O **tema completo** (tokens SCSS, tema Material, ag-Grid, *overlays* de diálogo, *shell*, etc.) corresponde ao `styles.scss` da aplicação StructraLab no mesmo repositório.
|
|
66
|
-
|
|
67
|
-
Para ficares alinhado ao look oficial:
|
|
68
|
-
|
|
69
|
-
1. Segue a documentação / exemplos do [StructraLab](https://structralab.com/) para a cadeia de `@import` / `@use` necessária.
|
|
70
|
-
2. Ou replica os estilos globais a partir do ficheiro `src/styles.scss` deste monorepo (e dependências SCSS referenciadas aí).
|
|
71
|
-
|
|
72
|
-
Sem esses estilos globais, os componentes montam-se mas cores, *backdrop* de modais e *layout* podem não coincidir com o showcase.
|
|
32
|
+
Os estilos globais (tokens, Material, ag-Grid, CDK) seguem os do StructraLab; nas apps consumidoras importe o `styles.scss` principal do produto ou replique os `@use` de tema conforme a documentação interna.
|
|
73
33
|
|
|
74
34
|
## Licença
|
|
75
35
|
|
|
@@ -9,12 +9,17 @@ export declare class AppDialogComponent implements OnChanges, OnDestroy {
|
|
|
9
9
|
private readonly hostEl;
|
|
10
10
|
open: boolean;
|
|
11
11
|
readonly openChange: EventEmitter<boolean>;
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Título do cabeçalho (`<app-dialog title="…">`).
|
|
14
|
+
* O nome da propriedade **não** pode ser `title`: no host DOM isso colide com
|
|
15
|
+
* `HTMLElement.title` e o browser desenha o tooltip nativo por cima do overlay.
|
|
16
|
+
*/
|
|
17
|
+
dialogHeading: string;
|
|
13
18
|
/** Texto de apoio abaixo do título (opcional); liga `aria-describedby` no painel. */
|
|
14
19
|
description: string;
|
|
15
20
|
/**
|
|
16
|
-
* Rótulo acessível quando não há
|
|
17
|
-
* Ignorado se `
|
|
21
|
+
* Rótulo acessível quando não há título (evita diálogo sem nome).
|
|
22
|
+
* Ignorado se `dialogHeading` tiver texto.
|
|
18
23
|
*/
|
|
19
24
|
ariaLabel: string;
|
|
20
25
|
size: LibDialogSize;
|
|
@@ -45,7 +50,7 @@ export declare class AppDialogComponent implements OnChanges, OnDestroy {
|
|
|
45
50
|
requestClose(): void;
|
|
46
51
|
private restoreFocus;
|
|
47
52
|
static ɵfac: i0.ɵɵFactoryDeclaration<AppDialogComponent, never>;
|
|
48
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AppDialogComponent, "app-dialog", never, { "open": { "alias": "open"; "required": false; }; "
|
|
53
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AppDialogComponent, "app-dialog", never, { "open": { "alias": "open"; "required": false; }; "dialogHeading": { "alias": "title"; "required": false; }; "description": { "alias": "description"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "size": { "alias": "size"; "required": false; }; "allowOverlayDismiss": { "alias": "allowOverlayDismiss"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; }, { "openChange": "openChange"; }, never, ["*", "[appDialogFooter]"], true, never>;
|
|
49
54
|
static ngAcceptInputType_open: unknown;
|
|
50
55
|
static ngAcceptInputType_allowOverlayDismiss: unknown;
|
|
51
56
|
static ngAcceptInputType_showCloseButton: unknown;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { EventEmitter, OnChanges,
|
|
1
|
+
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
2
|
import type { ValidationSummaryItem, ValidationSummaryVariant } from '../_models/validation-summary.model';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class ValidationSummaryComponent implements OnChanges
|
|
4
|
+
export declare class ValidationSummaryComponent implements OnChanges {
|
|
5
5
|
private static nextTitleUid;
|
|
6
6
|
private static nextListRegionUid;
|
|
7
7
|
/** Troca de aba (`beforeItemActivate`) + `queueMicrotask` no `app-form-tabs` — o alvo pode ficar em `[hidden]` até o próximo CD. */
|
|
@@ -10,14 +10,6 @@ export declare class ValidationSummaryComponent implements OnChanges, OnDestroy
|
|
|
10
10
|
private readonly cdr;
|
|
11
11
|
private readonly injector;
|
|
12
12
|
private readonly hostRef;
|
|
13
|
-
private readonly document;
|
|
14
|
-
/**
|
|
15
|
-
* Com `pinned`, o host passa para `document.body` para o `z-index` competir com a shell (ex.: drawer
|
|
16
|
-
* da doc no iPhone). Antes de mover, guardamos o `form` mais próximo — `closest('form')` no body falharia.
|
|
17
|
-
*/
|
|
18
|
-
private nearestForm;
|
|
19
|
-
private pinnedPortalOriginalParent;
|
|
20
|
-
private pinnedPortalOriginalNext;
|
|
21
13
|
/** `id` único para `aria-labelledby` quando há vários resumos na página. */
|
|
22
14
|
readonly titleElementId: string;
|
|
23
15
|
/** `id` da região da lista (acessibilidade do botão recolher / expandir). */
|
|
@@ -26,7 +18,12 @@ export declare class ValidationSummaryComponent implements OnChanges, OnDestroy
|
|
|
26
18
|
messages: string[] | null;
|
|
27
19
|
/** Lista rica com `fieldId` opcional para navegação até o controle. */
|
|
28
20
|
items: ValidationSummaryItem[] | null;
|
|
29
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Título do cabeçalho (`title="…"` no template).
|
|
23
|
+
* Não usar a propriedade `title` na classe: colide com `HTMLElement.title` no host e o
|
|
24
|
+
* browser pode desenhar tooltip nativo / comportamentos estranhos.
|
|
25
|
+
*/
|
|
26
|
+
summaryHeading: string;
|
|
30
27
|
visible: boolean;
|
|
31
28
|
/**
|
|
32
29
|
* `false` (padrão): fluxo em documento (ex.: no topo do formulário) — o consumidor pode fazer scroll até o painel.
|
|
@@ -66,7 +63,6 @@ export declare class ValidationSummaryComponent implements OnChanges, OnDestroy
|
|
|
66
63
|
private wasShown;
|
|
67
64
|
get hostClass(): string;
|
|
68
65
|
ngOnChanges(_changes: SimpleChanges): void;
|
|
69
|
-
ngOnDestroy(): void;
|
|
70
66
|
get hostHidden(): true | null;
|
|
71
67
|
get resolvedItems(): ValidationSummaryItem[];
|
|
72
68
|
get isShown(): boolean;
|
|
@@ -99,10 +95,8 @@ export declare class ValidationSummaryComponent implements OnChanges, OnDestroy
|
|
|
99
95
|
private expandCollapsedFormGroupAncestors;
|
|
100
96
|
private resolveFocusable;
|
|
101
97
|
private isFocusableElement;
|
|
102
|
-
private syncPinnedHostToBody;
|
|
103
|
-
private detachPinnedHostFromBody;
|
|
104
98
|
static ɵfac: i0.ɵɵFactoryDeclaration<ValidationSummaryComponent, never>;
|
|
105
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationSummaryComponent, "app-validation-summary", never, { "messages": { "alias": "messages"; "required": false; }; "items": { "alias": "items"; "required": false; }; "
|
|
99
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationSummaryComponent, "app-validation-summary", never, { "messages": { "alias": "messages"; "required": false; }; "items": { "alias": "items"; "required": false; }; "summaryHeading": { "alias": "title"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "pinned": { "alias": "pinned"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "panelMaxHeight": { "alias": "panelMaxHeight"; "required": false; }; "scrollBehavior": { "alias": "scrollBehavior"; "required": false; }; "beforeItemActivate": { "alias": "beforeItemActivate"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; "showListCollapseToggle": { "alias": "showListCollapseToggle"; "required": false; }; "closeButtonLabel": { "alias": "closeButtonLabel"; "required": false; }; "fieldNavigateHint": { "alias": "fieldNavigateHint"; "required": false; }; }, { "panelClose": "panelClose"; }, never, never, true, never>;
|
|
106
100
|
static ngAcceptInputType_visible: unknown;
|
|
107
101
|
static ngAcceptInputType_pinned: unknown;
|
|
108
102
|
static ngAcceptInputType_compact: unknown;
|
|
@@ -9,7 +9,8 @@ export declare class DrawerComponent implements OnChanges, OnDestroy {
|
|
|
9
9
|
open: boolean;
|
|
10
10
|
side: DrawerSide;
|
|
11
11
|
size: DrawerSize;
|
|
12
|
-
title
|
|
12
|
+
/** `title="…"` no template — evita colisão com `HTMLElement.title` no host. */
|
|
13
|
+
drawerHeading: string;
|
|
13
14
|
showCloseButton: boolean;
|
|
14
15
|
readonly openChange: EventEmitter<boolean>;
|
|
15
16
|
private panelRef?;
|
|
@@ -31,7 +32,7 @@ export declare class DrawerComponent implements OnChanges, OnDestroy {
|
|
|
31
32
|
requestClose(): void;
|
|
32
33
|
private restoreFocus;
|
|
33
34
|
static ɵfac: i0.ɵɵFactoryDeclaration<DrawerComponent, never>;
|
|
34
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DrawerComponent, "app-drawer", never, { "open": { "alias": "open"; "required": false; }; "side": { "alias": "side"; "required": false; }; "size": { "alias": "size"; "required": false; }; "
|
|
35
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DrawerComponent, "app-drawer", never, { "open": { "alias": "open"; "required": false; }; "side": { "alias": "side"; "required": false; }; "size": { "alias": "size"; "required": false; }; "drawerHeading": { "alias": "title"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; }, { "openChange": "openChange"; }, never, ["*", "[appDrawerFooter]"], true, never>;
|
|
35
36
|
static ngAcceptInputType_open: unknown;
|
|
36
37
|
static ngAcceptInputType_showCloseButton: unknown;
|
|
37
38
|
}
|
|
@@ -13,12 +13,17 @@ export class AppDialogComponent {
|
|
|
13
13
|
this.hostEl = inject((ElementRef));
|
|
14
14
|
this.open = false;
|
|
15
15
|
this.openChange = new EventEmitter();
|
|
16
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Título do cabeçalho (`<app-dialog title="…">`).
|
|
18
|
+
* O nome da propriedade **não** pode ser `title`: no host DOM isso colide com
|
|
19
|
+
* `HTMLElement.title` e o browser desenha o tooltip nativo por cima do overlay.
|
|
20
|
+
*/
|
|
21
|
+
this.dialogHeading = '';
|
|
17
22
|
/** Texto de apoio abaixo do título (opcional); liga `aria-describedby` no painel. */
|
|
18
23
|
this.description = '';
|
|
19
24
|
/**
|
|
20
|
-
* Rótulo acessível quando não há
|
|
21
|
-
* Ignorado se `
|
|
25
|
+
* Rótulo acessível quando não há título (evita diálogo sem nome).
|
|
26
|
+
* Ignorado se `dialogHeading` tiver texto.
|
|
22
27
|
*/
|
|
23
28
|
this.ariaLabel = 'Diálogo';
|
|
24
29
|
this.size = LibDialogSize.Md;
|
|
@@ -133,18 +138,19 @@ export class AppDialogComponent {
|
|
|
133
138
|
this.previousActive = null;
|
|
134
139
|
}
|
|
135
140
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AppDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
136
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: AppDialogComponent, isStandalone: true, selector: "app-dialog", inputs: { open: ["open", "open", booleanAttribute],
|
|
141
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: AppDialogComponent, isStandalone: true, selector: "app-dialog", inputs: { open: ["open", "open", booleanAttribute], dialogHeading: ["title", "dialogHeading"], description: "description", ariaLabel: "ariaLabel", size: "size", allowOverlayDismiss: ["allowOverlayDismiss", "allowOverlayDismiss", booleanAttribute], showCloseButton: ["showCloseButton", "showCloseButton", booleanAttribute] }, outputs: { openChange: "openChange" }, host: { listeners: { "document:keydown": "onDocumentKeydown($event)" } }, usesOnChanges: true, ngImport: i0, template: "@if (open) {\r\n <div\r\n class=\"app-dialog-backdrop\"\r\n role=\"presentation\"\r\n tabindex=\"-1\"\r\n (click)=\"onBackdropClick()\"\r\n ></div>\r\n <div class=\"app-dialog-stage\" aria-hidden=\"false\">\r\n <div\r\n class=\"app-dialog-panel\"\r\n [class.app-dialog-panel--sm]=\"size === LibDialogSize.Sm\"\r\n [class.app-dialog-panel--md]=\"size === LibDialogSize.Md\"\r\n [class.app-dialog-panel--lg]=\"size === LibDialogSize.Lg\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-labelledby]=\"\r\n dialogHeading.trim() ? titleId : description.trim() ? descriptionId : null\r\n \"\r\n [attr.aria-label]=\"!dialogHeading.trim() && !description.trim() ? ariaLabel : null\"\r\n [attr.aria-describedby]=\"\r\n dialogHeading.trim() && description.trim() ? descriptionId : null\r\n \"\r\n cdkTrapFocus\r\n [cdkTrapFocusAutoCapture]=\"true\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n @if (dialogHeading.trim()) {\r\n <header class=\"app-dialog-header\">\r\n <h2 class=\"app-dialog-title\" [id]=\"titleId\">{{ dialogHeading }}</h2>\r\n @if (showCloseButton) {\r\n <button\r\n type=\"button\"\r\n class=\"app-dialog-close\"\r\n aria-label=\"Fechar di\u00E1logo\"\r\n (click)=\"requestClose()\"\r\n >\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n }\r\n </header>\r\n }\r\n @if (description.trim()) {\r\n <p class=\"app-dialog-description\" [id]=\"descriptionId\">{{ description }}</p>\r\n }\r\n <div class=\"app-dialog-body\">\r\n <ng-content />\r\n </div>\r\n <footer class=\"app-dialog-footer\">\r\n <ng-content select=\"[appDialogFooter]\" />\r\n </footer>\r\n </div>\r\n </div>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.app-dialog-backdrop{position:fixed;inset:0;z-index:var(--app-z-dialog, 1200);background:#1a2f456b;backdrop-filter:blur(10px) saturate(1.05);-webkit-backdrop-filter:blur(10px) saturate(1.05);pointer-events:auto;animation:app-lib-dialog-backdrop-enter .24s ease-out both}.app-dialog-stage{position:fixed;inset:0;z-index:calc(var(--app-z-dialog, 1200) + 1);display:flex;align-items:center;justify-content:center;padding:min(1.5rem,4vw);box-sizing:border-box;pointer-events:none;background:transparent}.app-dialog-panel{position:relative;z-index:0;display:flex;flex-direction:column;max-height:min(88vh,40rem);width:100%;pointer-events:auto;overflow:hidden;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;box-sizing:border-box;border-radius:10px;border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .12));background:var(--app-color-surface, #fff);box-shadow:0 4px 6px -1px #00000014,0 12px 28px -8px #1a2f452e;outline:none;animation:app-lib-dialog-panel-in .28s cubic-bezier(.22,1,.36,1) both}.app-dialog-panel--sm{max-width:min(28rem,94vw)}.app-dialog-panel--md{max-width:min(40rem,94vw)}.app-dialog-panel--lg{max-width:min(56rem,96vw)}@media (prefers-reduced-motion: reduce){.app-dialog-backdrop,.app-dialog-panel{animation:none}}.app-dialog-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:1rem 1rem .65rem;border-bottom:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09));flex:0 0 auto}.app-dialog-title{margin:0;font-size:1.05rem;font-weight:600;line-height:1.3;color:var(--app-color-text-primary, #1a2f45)}.app-dialog-description{margin:0;padding:.65rem 1rem;font-size:.88rem;line-height:1.45;color:var(--app-color-text-secondary, #5a7fa3);flex:0 0 auto}.app-dialog-close{flex:0 0 auto;width:2rem;height:2rem;margin:0;padding:0;border:1px solid var(--app-color-border, #d4d4d4);border-radius:6px;background:var(--app-color-surface-alt, #fff);color:var(--app-color-text-secondary, #5a7fa3);font-size:1.35rem;line-height:1;cursor:pointer}.app-dialog-close:hover{background:var(--app-color-hover-bg, rgba(43, 127, 217, .08))}.app-dialog-close:focus-visible{outline:2px solid var(--app-color-focus-ring-strong, rgba(43, 127, 217, .45));outline-offset:2px}.app-dialog-body{padding:1rem;flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;font-size:.9rem;line-height:1.5;color:var(--app-color-text-primary, #1a2f45)}.app-dialog-footer{flex:0 0 auto;padding:.65rem 1rem 1rem;border-top:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09));display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.app-dialog-footer:empty{display:none;padding:0;border:none}\n"], dependencies: [{ kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
137
142
|
}
|
|
138
143
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AppDialogComponent, decorators: [{
|
|
139
144
|
type: Component,
|
|
140
|
-
args: [{ selector: 'app-dialog', standalone: true, imports: [CdkTrapFocus], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (open) {\r\n <div\r\n class=\"app-dialog-backdrop\"\r\n role=\"presentation\"\r\n tabindex=\"-1\"\r\n (click)=\"onBackdropClick()\"\r\n ></div>\r\n <div class=\"app-dialog-stage\" aria-hidden=\"false\">\r\n <div\r\n class=\"app-dialog-panel\"\r\n [class.app-dialog-panel--sm]=\"size === LibDialogSize.Sm\"\r\n [class.app-dialog-panel--md]=\"size === LibDialogSize.Md\"\r\n [class.app-dialog-panel--lg]=\"size === LibDialogSize.Lg\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-labelledby]=\"\r\n
|
|
145
|
+
args: [{ selector: 'app-dialog', standalone: true, imports: [CdkTrapFocus], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (open) {\r\n <div\r\n class=\"app-dialog-backdrop\"\r\n role=\"presentation\"\r\n tabindex=\"-1\"\r\n (click)=\"onBackdropClick()\"\r\n ></div>\r\n <div class=\"app-dialog-stage\" aria-hidden=\"false\">\r\n <div\r\n class=\"app-dialog-panel\"\r\n [class.app-dialog-panel--sm]=\"size === LibDialogSize.Sm\"\r\n [class.app-dialog-panel--md]=\"size === LibDialogSize.Md\"\r\n [class.app-dialog-panel--lg]=\"size === LibDialogSize.Lg\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-labelledby]=\"\r\n dialogHeading.trim() ? titleId : description.trim() ? descriptionId : null\r\n \"\r\n [attr.aria-label]=\"!dialogHeading.trim() && !description.trim() ? ariaLabel : null\"\r\n [attr.aria-describedby]=\"\r\n dialogHeading.trim() && description.trim() ? descriptionId : null\r\n \"\r\n cdkTrapFocus\r\n [cdkTrapFocusAutoCapture]=\"true\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n @if (dialogHeading.trim()) {\r\n <header class=\"app-dialog-header\">\r\n <h2 class=\"app-dialog-title\" [id]=\"titleId\">{{ dialogHeading }}</h2>\r\n @if (showCloseButton) {\r\n <button\r\n type=\"button\"\r\n class=\"app-dialog-close\"\r\n aria-label=\"Fechar di\u00E1logo\"\r\n (click)=\"requestClose()\"\r\n >\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n }\r\n </header>\r\n }\r\n @if (description.trim()) {\r\n <p class=\"app-dialog-description\" [id]=\"descriptionId\">{{ description }}</p>\r\n }\r\n <div class=\"app-dialog-body\">\r\n <ng-content />\r\n </div>\r\n <footer class=\"app-dialog-footer\">\r\n <ng-content select=\"[appDialogFooter]\" />\r\n </footer>\r\n </div>\r\n </div>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.app-dialog-backdrop{position:fixed;inset:0;z-index:var(--app-z-dialog, 1200);background:#1a2f456b;backdrop-filter:blur(10px) saturate(1.05);-webkit-backdrop-filter:blur(10px) saturate(1.05);pointer-events:auto;animation:app-lib-dialog-backdrop-enter .24s ease-out both}.app-dialog-stage{position:fixed;inset:0;z-index:calc(var(--app-z-dialog, 1200) + 1);display:flex;align-items:center;justify-content:center;padding:min(1.5rem,4vw);box-sizing:border-box;pointer-events:none;background:transparent}.app-dialog-panel{position:relative;z-index:0;display:flex;flex-direction:column;max-height:min(88vh,40rem);width:100%;pointer-events:auto;overflow:hidden;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;box-sizing:border-box;border-radius:10px;border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .12));background:var(--app-color-surface, #fff);box-shadow:0 4px 6px -1px #00000014,0 12px 28px -8px #1a2f452e;outline:none;animation:app-lib-dialog-panel-in .28s cubic-bezier(.22,1,.36,1) both}.app-dialog-panel--sm{max-width:min(28rem,94vw)}.app-dialog-panel--md{max-width:min(40rem,94vw)}.app-dialog-panel--lg{max-width:min(56rem,96vw)}@media (prefers-reduced-motion: reduce){.app-dialog-backdrop,.app-dialog-panel{animation:none}}.app-dialog-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:1rem 1rem .65rem;border-bottom:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09));flex:0 0 auto}.app-dialog-title{margin:0;font-size:1.05rem;font-weight:600;line-height:1.3;color:var(--app-color-text-primary, #1a2f45)}.app-dialog-description{margin:0;padding:.65rem 1rem;font-size:.88rem;line-height:1.45;color:var(--app-color-text-secondary, #5a7fa3);flex:0 0 auto}.app-dialog-close{flex:0 0 auto;width:2rem;height:2rem;margin:0;padding:0;border:1px solid var(--app-color-border, #d4d4d4);border-radius:6px;background:var(--app-color-surface-alt, #fff);color:var(--app-color-text-secondary, #5a7fa3);font-size:1.35rem;line-height:1;cursor:pointer}.app-dialog-close:hover{background:var(--app-color-hover-bg, rgba(43, 127, 217, .08))}.app-dialog-close:focus-visible{outline:2px solid var(--app-color-focus-ring-strong, rgba(43, 127, 217, .45));outline-offset:2px}.app-dialog-body{padding:1rem;flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;font-size:.9rem;line-height:1.5;color:var(--app-color-text-primary, #1a2f45)}.app-dialog-footer{flex:0 0 auto;padding:.65rem 1rem 1rem;border-top:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09));display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.app-dialog-footer:empty{display:none;padding:0;border:none}\n"] }]
|
|
141
146
|
}], propDecorators: { open: [{
|
|
142
147
|
type: Input,
|
|
143
148
|
args: [{ transform: booleanAttribute }]
|
|
144
149
|
}], openChange: [{
|
|
145
150
|
type: Output
|
|
146
|
-
}],
|
|
147
|
-
type: Input
|
|
151
|
+
}], dialogHeading: [{
|
|
152
|
+
type: Input,
|
|
153
|
+
args: ['title']
|
|
148
154
|
}], description: [{
|
|
149
155
|
type: Input
|
|
150
156
|
}], ariaLabel: [{
|
|
@@ -161,4 +167,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
161
167
|
type: HostListener,
|
|
162
168
|
args: ['document:keydown', ['$event']]
|
|
163
169
|
}] } });
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpYWxvZ3MvYXBwLWRpYWxvZy9hcHAtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlhbG9ncy9hcHAtZGlhbG9nL2FwcC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHdCQUF3QixHQUV6QixNQUFNLDJDQUEyQyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFFakUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRXJCOzs7R0FHRztBQVNILE1BQU0sT0FBTyxrQkFBa0I7SUFSL0I7UUFTbUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBRWxCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFDbEMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFbkQsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVwQixxRkFBcUY7UUFDNUUsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFMUI7OztXQUdHO1FBQ00sY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUV0QixTQUFJLEdBQWtCLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFFaEQ7Ozs7V0FJRztRQUNxQyx3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFFM0Isb0JBQWUsR0FBRyxJ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USxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7K0dBNUlVLGtCQUFrQjttR0FBbEIsa0JBQWtCLCtFQUdULGdCQUFnQix5SkFxQmhCLGdCQUFnQiwyREFFaEIsZ0JBQWdCLG1LQzlEdEMscTJEQXFEQSx1c0ZEdEJZLFlBQVk7OzRGQUtYLGtCQUFrQjtrQkFSOUIsU0FBUzsrQkFDRSxZQUFZLGNBQ1YsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLG1CQUdOLHVCQUF1QixDQUFDLE1BQU07OEJBS1AsSUFBSTtzQkFBM0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDbkIsVUFBVTtzQkFBNUIsTUFBTTtnQkFFRSxLQUFLO3NCQUFiLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFPa0MsbUJBQW1CO3NCQUExRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUVFLGVBQWU7c0JBQXRELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBb0Z0QyxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtUcmFwRm9jdXMgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICBsb2NrUGFnZVNjcm9sbENka1N0eWxlLFxuICB1bmxvY2tQYWdlU2Nyb2xsQ2RrU3R5bGUsXG4gIHR5cGUgU2Nyb2xsTG9ja1NuYXBzaG90LFxufSBmcm9tICcuLi8uLi9fdXRpbHMvc2Nyb2xsL2JvZHktc2Nyb2xsLWxvY2sudXRpbCc7XG5pbXBvcnQgeyBMaWJEaWFsb2dTaXplIH0gZnJvbSAnLi4vX21vZGVscy9saWItZGlhbG9nLXNpemUubW9kZWwnO1xuXG5sZXQgYXBwRGlhbG9nU2VxID0gMDtcblxuLyoqXG4gKiBEacOhbG9nbyBtb2RhbCBkZWNsYXJhdGl2byBjb20gYFsob3BlbildYCwgcHJvamXDp8OjbyBkZSBjb3JwbyBlIHJvZGFww6kgb3BjaW9uYWwgKGBbYXBwRGlhbG9nRm9vdGVyXWApLlxuICogQmxvcXVlaW8gZGUgc2Nyb2xsIGFsaW5oYWRvIGFvIENESyAoYGNkay1nbG9iYWwtc2Nyb2xsYmxvY2tgKSwgY29tbyBubyBgQ29uZmlybURpYWxvZ1NlcnZpY2VgLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGlhbG9nJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0Nka1RyYXBGb2N1c10sXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2FwcC1kaWFsb2cuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQXBwRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGhvc3RFbCA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG9wZW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQElucHV0KCkgdGl0bGUgPSAnJztcblxuICAvKiogVGV4dG8gZGUgYXBvaW8gYWJhaXhvIGRvIHTDrXR1bG8gKG9wY2lvbmFsKTsgbGlnYSBgYXJpYS1kZXNjcmliZWRieWAgbm8gcGFpbmVsLiAqL1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBSw7N0dWxvIGFjZXNzw612ZWwgcXVhbmRvIG7Do28gaMOhIGB0aXRsZWAgKGV2aXRhIGRpw6Fsb2dvIHNlbSBub21lKS5cbiAgICogSWdub3JhZG8gc2UgYHRpdGxlYCB0aXZlciB0ZXh0by5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbCA9ICdEacOhbG9nbyc7XG5cbiAgQElucHV0KCkgc2l6ZTogTGliRGlhbG9nU2l6ZSA9IExpYkRpYWxvZ1NpemUuTWQ7XG5cbiAgLyoqXG4gICAqIFF1YW5kbyBgZmFsc2VgLCBhIHRlY2xhIEVzY2FwZSBlIG8gY2xpcXVlIG5vIGJhY2tkcm9wIG7Do28gZmVjaGFtIG8gZGnDoWxvZ29cbiAgICogKGJvdMOjbyDinJUsIGBbKG9wZW4pXWAgZSBgcmVxdWVzdENsb3NlKClgIGNvbnRpbnVhbSBkaXNwb27DrXZlaXMpLlxuICAgKiBPbWlzc286IGB0cnVlYC5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhbGxvd092ZXJsYXlEaXNtaXNzID0gdHJ1ZTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0Nsb3NlQnV0dG9uID0gdHJ1ZTtcblxuICByZWFkb25seSBMaWJEaWFsb2dTaXplID0gTGliRGlhbG9nU2l6ZTtcblxuICByZWFkb25seSB0aXRsZUlkID0gYGFwcC1kaWFsb2ctdGl0bGUtJHsrK2FwcERpYWxvZ1NlcX1gO1xuICByZWFkb25seSBkZXNjcmlwdGlvbklkID0gYGFwcC1kaWFsb2ctZGVzYy0ke2FwcERpYWxvZ1NlcX1gO1xuXG4gIC8qKlxuICAgKiBPIG1vZGFsIGZpY2Egbm8gZmltIGRlIGBkb2N1bWVudC5ib2R5YCBlbnF1YW50byBhYmVydG8sIHBhcmEgbyBgYmFja2Ryb3AtZmlsdGVyYFxuICAgKiBuw6NvIGZpY2FyIMKrcHJlc2/CuyBhIGFuY2VzdHJhaXMgY29tIGBvdmVyZmxvdzogYXV0b2AgKGV4LjogYGFwcC1zaGVsbF9fY29udGVudGApLlxuICAgKi9cbiAgcHJpdmF0ZSBib2R5UmVzdG9yZVBhcmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBib2R5UmVzdG9yZU5leHQ6IENoaWxkTm9kZSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcHJldmlvdXNBY3RpdmU6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc2Nyb2xsTG9jazogU2Nyb2xsTG9ja1NuYXBzaG90ID0ge1xuICAgIGh0bWxMZWZ0OiAnJyxcbiAgICBodG1sVG9wOiAnJyxcbiAgICBzY3JvbGxYOiAwLFxuICAgIHNjcm9sbFk6IDAsXG4gICAgYm9keU92ZXJmbG93OiAnJyxcbiAgICBib2R5VG91Y2hBY3Rpb246ICcnLFxuICB9O1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snb3BlbiddKSB7XG4gICAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICAgIHRoaXMuYXR0YWNoSG9zdFRvQm9keSgpO1xuICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBhICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgICAgdGhpcy5wcmV2aW91c0FjdGl2ZSA9IGE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxMb2NrID0gbG9ja1BhZ2VTY3JvbGxDZGtTdHlsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5sb2NrUGFnZVNjcm9sbENka1N0eWxlKHRoaXMuc2Nyb2xsTG9jayk7XG4gICAgICAgIHRoaXMuZGV0YWNoSG9zdEZyb21Cb2R5KCk7XG4gICAgICAgIHRoaXMucmVzdG9yZUZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgdW5sb2NrUGFnZVNjcm9sbENka1N0eWxlKHRoaXMuc2Nyb2xsTG9jayk7XG4gICAgfVxuICAgIHRoaXMuZGV0YWNoSG9zdEZyb21Cb2R5KCk7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaEhvc3RUb0JvZHkoKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSB0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChlbC5wYXJlbnRFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYm9keVJlc3RvcmVQYXJlbnQgPSBlbC5wYXJlbnRFbGVtZW50O1xuICAgIHRoaXMuYm9keVJlc3RvcmVOZXh0ID0gZWwubmV4dFNpYmxpbmc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7XG4gIH1cblxuICBwcml2YXRlIGRldGFjaEhvc3RGcm9tQm9keSgpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGVsLnBhcmVudEVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIHRoaXMuYm9keVJlc3RvcmVQYXJlbnQgPSBudWxsO1xuICAgICAgdGhpcy5ib2R5UmVzdG9yZU5leHQgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmJvZHlSZXN0b3JlUGFyZW50O1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLmJvZHlSZXN0b3JlTmV4dDtcbiAgICB0aGlzLmJvZHlSZXN0b3JlUGFyZW50ID0gbnVsbDtcbiAgICB0aGlzLmJvZHlSZXN0b3JlTmV4dCA9IG51bGw7XG4gICAgaWYgKHBhcmVudCAmJiBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHBhcmVudCkpIHtcbiAgICAgIGlmIChuZXh0ICYmIG5leHQucGFyZW50Tm9kZSA9PT0gcGFyZW50KSB7XG4gICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWwsIG5leHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhcHBSb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXBwLXJvb3QnKTtcbiAgICBpZiAoYXBwUm9vdCkge1xuICAgICAgYXBwUm9vdC5hcHBlbmRDaGlsZChlbCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRLZXlkb3duKGV2OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wZW4gfHwgZXYua2V5ICE9PSAnRXNjYXBlJyB8fCAhdGhpcy5hbGxvd092ZXJsYXlEaXNtaXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yZXF1ZXN0Q2xvc2UoKTtcbiAgfVxuXG4gIG9uQmFja2Ryb3BDbGljaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYWxsb3dPdmVybGF5RGlzbWlzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlcXVlc3RDbG9zZSgpO1xuICB9XG5cbiAgcmVxdWVzdENsb3NlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB1bmxvY2tQYWdlU2Nyb2xsQ2RrU3R5bGUodGhpcy5zY3JvbGxMb2NrKTtcbiAgICB0aGlzLnJlc3RvcmVGb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0b3JlRm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJldmlvdXNBY3RpdmUgJiYgZG9jdW1lbnQuY29udGFpbnModGhpcy5wcmV2aW91c0FjdGl2ZSkpIHtcbiAgICAgIHRoaXMucHJldmlvdXNBY3RpdmUuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzQWN0aXZlID0gbnVsbDtcbiAgfVxufVxuIiwiQGlmIChvcGVuKSB7XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJhcHAtZGlhbG9nLWJhY2tkcm9wXCJcclxuICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxyXG4gICAgdGFiaW5kZXg9XCItMVwiXHJcbiAgICAoY2xpY2spPVwib25CYWNrZHJvcENsaWNrKClcIlxyXG4gID48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiYXBwLWRpYWxvZy1zdGFnZVwiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJhcHAtZGlhbG9nLXBhbmVsXCJcclxuICAgICAgW2NsYXNzLmFwcC1kaWFsb2ctcGFuZWwtLXNtXT1cInNpemUgPT09IExpYkRpYWxvZ1NpemUuU21cIlxyXG4gICAgICBbY2xhc3MuYXBwLWRpYWxvZy1wYW5lbC0tbWRdPVwic2l6ZSA9PT0gTGliRGlhbG9nU2l6ZS5NZFwiXHJcbiAgICAgIFtjbGFzcy5hcHAtZGlhbG9nLXBhbmVsLS1sZ109XCJzaXplID09PSBMaWJEaWFsb2dTaXplLkxnXCJcclxuICAgICAgcm9sZT1cImRpYWxvZ1wiXHJcbiAgICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIlxyXG4gICAgICAgIHRpdGxlLnRyaW0oKSA/IHRpdGxlSWQgOiBkZXNjcmlwdGlvbi50cmltKCkgPyBkZXNjcmlwdGlvbklkIDogbnVsbFxyXG4gICAgICBcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIiF0aXRsZS50cmltKCkgJiYgIWRlc2NyaXB0aW9uLnRyaW0oKSA/IGFyaWFMYWJlbCA6IG51bGxcIlxyXG4gICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIlxyXG4gICAgICAgIHRpdGxlLnRyaW0oKSAmJiBkZXNjcmlwdGlvbi50cmltKCkgPyBkZXNjcmlwdGlvbklkIDogbnVsbFxyXG4gICAgICBcIlxyXG4gICAgICBjZGtUcmFwRm9jdXNcclxuICAgICAgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIlxyXG4gICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgID5cclxuICAgICAgQGlmICh0aXRsZS50cmltKCkpIHtcclxuICAgICAgICA8aGVhZGVyIGNsYXNzPVwiYXBwLWRpYWxvZy1oZWFkZXJcIj5cclxuICAgICAgICAgIDxoMiBjbGFzcz1cImFwcC1kaWFsb2ctdGl0bGVcIiBbaWRdPVwidGl0bGVJZFwiPnt7IHRpdGxlIH19PC9oMj5cclxuICAgICAgICAgIEBpZiAoc2hvd0Nsb3NlQnV0dG9uKSB7XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImFwcC1kaWFsb2ctY2xvc2VcIlxyXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJGZWNoYXIgZGnDoWxvZ29cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZXF1ZXN0Q2xvc2UoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKGRlc2NyaXB0aW9uLnRyaW0oKSkge1xyXG4gICAgICAgIDxwIGNsYXNzPVwiYXBwLWRpYWxvZy1kZXNjcmlwdGlvblwiIFtpZF09XCJkZXNjcmlwdGlvbklkXCI+e3sgZGVzY3JpcHRpb24gfX08L3A+XHJcbiAgICAgIH1cclxuICAgICAgPGRpdiBjbGFzcz1cImFwcC1kaWFsb2ctYm9keVwiPlxyXG4gICAgICAgIDxuZy1jb250ZW50IC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8Zm9vdGVyIGNsYXNzPVwiYXBwLWRpYWxvZy1mb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbYXBwRGlhbG9nRm9vdGVyXVwiIC8+XHJcbiAgICAgIDwvZm9vdGVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbn1cclxuIl19
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpYWxvZ3MvYXBwLWRpYWxvZy9hcHAtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlhbG9ncy9hcHAtZGlhbG9nL2FwcC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHdCQUF3QixHQUV6QixNQUFNLDJDQUEyQyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFFakUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRXJCOzs7R0FHRztBQVNILE1BQU0sT0FBTyxrQkFBa0I7SUFSL0I7UUFTbUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBRWxCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFDbEMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFNUQ7Ozs7V0FJRztRQUNhLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBRW5DLHFGQUFxRjtRQUM1RSxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUUxQjs7O1dBR0c7UUFDTSxjQUFTLEdBQUcsU0FBUyxDQUFDO1FBRXRCLFNBQUksR0FBa0IsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUVoRDs7OztXQUlHO1FBQ3FDLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUUz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LFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDN0IsQ0FBQzsrR0FqSlUsa0JBQWtCO21HQUFsQixrQkFBa0IsK0VBR1QsZ0JBQWdCLG9MQTBCaEIsZ0JBQWdCLDJEQUVoQixnQkFBZ0IsbUtDbkV0Qyw2NERBcURBLHVzRkR0QlksWUFBWTs7NEZBS1gsa0JBQWtCO2tCQVI5QixTQUFTOytCQUNFLFlBQVksY0FDVixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBR04sdUJBQXVCLENBQUMsTUFBTTs4QkFLUCxJQUFJO3NCQUEzQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNuQixVQUFVO3NCQUE1QixNQUFNO2dCQU9TLGFBQWE7c0JBQTVCLEtBQUs7dUJBQUMsT0FBTztnQkFHTCxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQU9rQyxtQkFBbUI7c0JBQTFELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRUUsZUFBZTtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFvRnRDLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBib29sZWFuQXR0cmlidXRlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka1RyYXBGb2N1cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7XG4gIGxvY2tQYWdlU2Nyb2xsQ2RrU3R5bGUsXG4gIHVubG9ja1BhZ2VTY3JvbGxDZGtTdHlsZSxcbiAgdHlwZSBTY3JvbGxMb2NrU25hcHNob3QsXG59IGZyb20gJy4uLy4uL191dGlscy9zY3JvbGwvYm9keS1zY3JvbGwtbG9jay51dGlsJztcbmltcG9ydCB7IExpYkRpYWxvZ1NpemUgfSBmcm9tICcuLi9fbW9kZWxzL2xpYi1kaWFsb2ctc2l6ZS5tb2RlbCc7XG5cbmxldCBhcHBEaWFsb2dTZXEgPSAwO1xuXG4vKipcbiAqIERpw6Fsb2dvIG1vZGFsIGRlY2xhcmF0aXZvIGNvbSBgWyhvcGVuKV1gLCBwcm9qZcOnw6NvIGRlIGNvcnBvIGUgcm9kYXDDqSBvcGNpb25hbCAoYFthcHBEaWFsb2dGb290ZXJdYCkuXG4gKiBCbG9xdWVpbyBkZSBzY3JvbGwgYWxpbmhhZG8gYW8gQ0RLIChgY2RrLWdsb2JhbC1zY3JvbGxibG9ja2ApLCBjb21vIG5vIGBDb25maXJtRGlhbG9nU2VydmljZWAuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1kaWFsb2cnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ2RrVHJhcEZvY3VzXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYXBwLWRpYWxvZy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaG9zdEVsID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgb3BlbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogVMOtdHVsbyBkbyBjYWJlw6dhbGhvIChgPGFwcC1kaWFsb2cgdGl0bGU9XCLigKZcIj5gKS5cbiAgICogTyBub21lIGRhIHByb3ByaWVkYWRlICoqbsOjbyoqIHBvZGUgc2VyIGB0aXRsZWA6IG5vIGhvc3QgRE9NIGlzc28gY29saWRlIGNvbVxuICAgKiBgSFRNTEVsZW1lbnQudGl0bGVgIGUgbyBicm93c2VyIGRlc2VuaGEgbyB0b29sdGlwIG5hdGl2byBwb3IgY2ltYSBkbyBvdmVybGF5LlxuICAgKi9cbiAgQElucHV0KCd0aXRsZScpIGRpYWxvZ0hlYWRpbmcgPSAnJztcblxuICAvKiogVGV4dG8gZGUgYXBvaW8gYWJhaXhvIGRvIHTDrXR1bG8gKG9wY2lvbmFsKTsgbGlnYSBgYXJpYS1kZXNjcmliZWRieWAgbm8gcGFpbmVsLiAqL1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBSw7N0dWxvIGFjZXNzw612ZWwgcXVhbmRvIG7Do28gaMOhIHTDrXR1bG8gKGV2aXRhIGRpw6Fsb2dvIHNlbSBub21lKS5cbiAgICogSWdub3JhZG8gc2UgYGRpYWxvZ0hlYWRpbmdgIHRpdmVyIHRleHRvLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsID0gJ0Rpw6Fsb2dvJztcblxuICBASW5wdXQoKSBzaXplOiBMaWJEaWFsb2dTaXplID0gTGliRGlhbG9nU2l6ZS5NZDtcblxuICAvKipcbiAgICogUXVhbmRvIGBmYWxzZWAsIGEgdGVjbGEgRXNjYXBlIGUgbyBjbGlxdWUgbm8gYmFja2Ryb3AgbsOjbyBmZWNoYW0gbyBkacOhbG9nb1xuICAgKiAoYm90w6NvIOKclSwgYFsob3BlbildYCBlIGByZXF1ZXN0Q2xvc2UoKWAgY29udGludWFtIGRpc3BvbsOtdmVpcykuXG4gICAqIE9taXNzbzogYHRydWVgLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFsbG93T3ZlcmxheURpc21pc3MgPSB0cnVlO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93Q2xvc2VCdXR0b24gPSB0cnVlO1xuXG4gIHJlYWRvbmx5IExpYkRpYWxvZ1NpemUgPSBMaWJEaWFsb2dTaXplO1xuXG4gIHJlYWRvbmx5IHRpdGxlSWQgPSBgYXBwLWRpYWxvZy10aXRsZS0keysrYXBwRGlhbG9nU2VxfWA7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uSWQgPSBgYXBwLWRpYWxvZy1kZXNjLSR7YXBwRGlhbG9nU2VxfWA7XG5cbiAgLyoqXG4gICAqIE8gbW9kYWwgZmljYSBubyBmaW0gZGUgYGRvY3VtZW50LmJvZHlgIGVucXVhbnRvIGFiZXJ0bywgcGFyYSBvIGBiYWNrZHJvcC1maWx0ZXJgXG4gICAqIG7Do28gZmljYXIgwqtwcmVzb8K7IGEgYW5jZXN0cmFpcyBjb20gYG92ZXJmbG93OiBhdXRvYCAoZXguOiBgYXBwLXNoZWxsX19jb250ZW50YCkuXG4gICAqL1xuICBwcml2YXRlIGJvZHlSZXN0b3JlUGFyZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGJvZHlSZXN0b3JlTmV4dDogQ2hpbGROb2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBwcmV2aW91c0FjdGl2ZTogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzY3JvbGxMb2NrOiBTY3JvbGxMb2NrU25hcHNob3QgPSB7XG4gICAgaHRtbExlZnQ6ICcnLFxuICAgIGh0bWxUb3A6ICcnLFxuICAgIHNjcm9sbFg6IDAsXG4gICAgc2Nyb2xsWTogMCxcbiAgICBib2R5T3ZlcmZsb3c6ICcnLFxuICAgIGJvZHlUb3VjaEFjdGlvbjogJycsXG4gIH07XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydvcGVuJ10pIHtcbiAgICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgICAgdGhpcy5hdHRhY2hIb3N0VG9Cb2R5KCk7XG4gICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGEgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzQWN0aXZlID0gYTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjcm9sbExvY2sgPSBsb2NrUGFnZVNjcm9sbENka1N0eWxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bmxvY2tQYWdlU2Nyb2xsQ2RrU3R5bGUodGhpcy5zY3JvbGxMb2NrKTtcbiAgICAgICAgdGhpcy5kZXRhY2hIb3N0RnJvbUJvZHkoKTtcbiAgICAgICAgdGhpcy5yZXN0b3JlRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICB1bmxvY2tQYWdlU2Nyb2xsQ2RrU3R5bGUodGhpcy5zY3JvbGxMb2NrKTtcbiAgICB9XG4gICAgdGhpcy5kZXRhY2hIb3N0RnJvbUJvZHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoSG9zdFRvQm9keSgpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGVsLnBhcmVudEVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ib2R5UmVzdG9yZVBhcmVudCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gICAgdGhpcy5ib2R5UmVzdG9yZU5leHQgPSBlbC5uZXh0U2libGluZztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0YWNoSG9zdEZyb21Cb2R5KCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5ob3N0RWwubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoZWwucGFyZW50RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgdGhpcy5ib2R5UmVzdG9yZVBhcmVudCA9IG51bGw7XG4gICAgICB0aGlzLmJvZHlSZXN0b3JlTmV4dCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuYm9keVJlc3RvcmVQYXJlbnQ7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMuYm9keVJlc3RvcmVOZXh0O1xuICAgIHRoaXMuYm9keVJlc3RvcmVQYXJlbnQgPSBudWxsO1xuICAgIHRoaXMuYm9keVJlc3RvcmVOZXh0ID0gbnVsbDtcbiAgICBpZiAocGFyZW50ICYmIGRvY3VtZW50LmJvZHkuY29udGFpbnMocGFyZW50KSkge1xuICAgICAgaWYgKG5leHQgJiYgbmV4dC5wYXJlbnROb2RlID09PSBwYXJlbnQpIHtcbiAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShlbCwgbmV4dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChlbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFwcFJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdhcHAtcm9vdCcpO1xuICAgIGlmIChhcHBSb290KSB7XG4gICAgICBhcHBSb290LmFwcGVuZENoaWxkKGVsKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudEtleWRvd24oZXY6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3BlbiB8fCBldi5rZXkgIT09ICdFc2NhcGUnIHx8ICF0aGlzLmFsbG93T3ZlcmxheURpc21pc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJlcXVlc3RDbG9zZSgpO1xuICB9XG5cbiAgb25CYWNrZHJvcENsaWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hbGxvd092ZXJsYXlEaXNtaXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVxdWVzdENsb3NlKCk7XG4gIH1cblxuICByZXF1ZXN0Q2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIHVubG9ja1BhZ2VTY3JvbGxDZGtTdHlsZSh0aGlzLnNjcm9sbExvY2spO1xuICAgIHRoaXMucmVzdG9yZUZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIHJlc3RvcmVGb2N1cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0FjdGl2ZSAmJiBkb2N1bWVudC5jb250YWlucyh0aGlzLnByZXZpb3VzQWN0aXZlKSkge1xuICAgICAgdGhpcy5wcmV2aW91c0FjdGl2ZS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgfVxuICAgIHRoaXMucHJldmlvdXNBY3RpdmUgPSBudWxsO1xuICB9XG59XG4iLCJAaWYgKG9wZW4pIHtcclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImFwcC1kaWFsb2ctYmFja2Ryb3BcIlxyXG4gICAgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICB0YWJpbmRleD1cIi0xXCJcclxuICAgIChjbGljayk9XCJvbkJhY2tkcm9wQ2xpY2soKVwiXHJcbiAgPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJhcHAtZGlhbG9nLXN0YWdlXCIgYXJpYS1oaWRkZW49XCJmYWxzZVwiPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImFwcC1kaWFsb2ctcGFuZWxcIlxyXG4gICAgICBbY2xhc3MuYXBwLWRpYWxvZy1wYW5lbC0tc21dPVwic2l6ZSA9PT0gTGliRGlhbG9nU2l6ZS5TbVwiXHJcbiAgICAgIFtjbGFzcy5hcHAtZGlhbG9nLXBhbmVsLS1tZF09XCJzaXplID09PSBMaWJEaWFsb2dTaXplLk1kXCJcclxuICAgICAgW2NsYXNzLmFwcC1kaWFsb2ctcGFuZWwtLWxnXT1cInNpemUgPT09IExpYkRpYWxvZ1NpemUuTGdcIlxyXG4gICAgICByb2xlPVwiZGlhbG9nXCJcclxuICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiXHJcbiAgICAgICAgZGlhbG9nSGVhZGluZy50cmltKCkgPyB0aXRsZUlkIDogZGVzY3JpcHRpb24udHJpbSgpID8gZGVzY3JpcHRpb25JZCA6IG51bGxcclxuICAgICAgXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIhZGlhbG9nSGVhZGluZy50cmltKCkgJiYgIWRlc2NyaXB0aW9uLnRyaW0oKSA/IGFyaWFMYWJlbCA6IG51bGxcIlxyXG4gICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIlxyXG4gICAgICAgIGRpYWxvZ0hlYWRpbmcudHJpbSgpICYmIGRlc2NyaXB0aW9uLnRyaW0oKSA/IGRlc2NyaXB0aW9uSWQgOiBudWxsXHJcbiAgICAgIFwiXHJcbiAgICAgIGNka1RyYXBGb2N1c1xyXG4gICAgICBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiXHJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgPlxyXG4gICAgICBAaWYgKGRpYWxvZ0hlYWRpbmcudHJpbSgpKSB7XHJcbiAgICAgICAgPGhlYWRlciBjbGFzcz1cImFwcC1kaWFsb2ctaGVhZGVyXCI+XHJcbiAgICAgICAgICA8aDIgY2xhc3M9XCJhcHAtZGlhbG9nLXRpdGxlXCIgW2lkXT1cInRpdGxlSWRcIj57eyBkaWFsb2dIZWFkaW5nIH19PC9oMj5cclxuICAgICAgICAgIEBpZiAoc2hvd0Nsb3NlQnV0dG9uKSB7XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImFwcC1kaWFsb2ctY2xvc2VcIlxyXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJGZWNoYXIgZGnDoWxvZ29cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZXF1ZXN0Q2xvc2UoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKGRlc2NyaXB0aW9uLnRyaW0oKSkge1xyXG4gICAgICAgIDxwIGNsYXNzPVwiYXBwLWRpYWxvZy1kZXNjcmlwdGlvblwiIFtpZF09XCJkZXNjcmlwdGlvbklkXCI+e3sgZGVzY3JpcHRpb24gfX08L3A+XHJcbiAgICAgIH1cclxuICAgICAgPGRpdiBjbGFzcz1cImFwcC1kaWFsb2ctYm9keVwiPlxyXG4gICAgICAgIDxuZy1jb250ZW50IC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8Zm9vdGVyIGNsYXNzPVwiYXBwLWRpYWxvZy1mb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbYXBwRGlhbG9nRm9vdGVyXVwiIC8+XHJcbiAgICAgIDwvZm9vdGVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbn1cclxuIl19
|