structra-ui 0.1.5 → 0.1.7

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 CHANGED
@@ -1,75 +1,35 @@
1
1
  # structra-ui
2
2
 
3
- Biblioteca **Angular** da stack **Structra**: botões, campos, formulários, menus, diálogos, *shell* e mais componentes **standalone** para reutilizar entre produtos.
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
- - **Site com demos:** [StructraLab](https://structralab.com/)
6
- - **Nome do pacote npm:** `structra-ui`
5
+ **Documentação e exemplos:** [StructraLab](https://structralab.com/)
7
6
 
8
- ## Requisitos (peer dependencies)
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
- Na tua aplicação, instala versões compatíveis de:
9
+ ## Build do pacote
11
10
 
12
- `@angular/animations`, `@angular/cdk`, `@angular/common`, `@angular/compiler`, `@angular/core`, `@angular/forms`, `@angular/material`, `@angular/platform-browser`, `@angular/router` intervalo suportado pelo pacote: **`>=17.0.0 <22.0.0`** (ver `package.json` do pacote publicado).
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 update structra-ui
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
- Volta a `npm install structra-ui` com versão fixada quando consumires uma release publicada.
18
+ gera `dist/structra-ui/`, pronto para `npm pack` / `npm publish`.
37
19
 
38
- ## Build e publicação do pacote
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 run lib:build
46
- # ou: npx ng build structra-ui
23
+ npm install structra-ui
47
24
  ```
48
25
 
49
- Gera `dist/structra-ui/`, pronto para `npm pack` / `npm publish` (ver scripts `lib:pack` e `lib:publish` no `package.json` da raiz).
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
- `STRUCTRA_UI` é um marcador de versão/pacote; o essencial são os componentes e serviços exportados (cada um documentado no StructraLab).
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
 
@@ -20,3 +20,20 @@ export interface ScrollLockSnapshot {
20
20
  /** Aplica o mesmo padrão visual do overlay CDK Dialog (confirm, etc.). */
21
21
  export declare function lockPageScrollCdkStyle(): ScrollLockSnapshot;
22
22
  export declare function unlockPageScrollCdkStyle(s: ScrollLockSnapshot): void;
23
+ /**
24
+ * Bloqueio de scroll para o `app-dialog` declarativo: **sem** `position: fixed` nem `left`/`top`
25
+ * negativos no `documentElement` (padrão CDK em {@link lockPageScrollCdkStyle}).
26
+ *
27
+ * Com esse padrão, em Chromium/WebKit o `position: fixed` do scrim deixa de ficar ancorado ao
28
+ * `html` deslocado — evita faixa de conteúdo visível no topo e scrim branco/cinza errado em
29
+ * apps onde o `body` faz scroll (ex.: site de documentação).
30
+ */
31
+ export interface AppDialogScrollLockSnapshot {
32
+ readonly scrollX: number;
33
+ readonly scrollY: number;
34
+ readonly htmlOverflow: string;
35
+ readonly bodyOverflow: string;
36
+ readonly bodyTouchAction: string;
37
+ }
38
+ export declare function lockPageScrollAppDialog(): AppDialogScrollLockSnapshot;
39
+ export declare function unlockPageScrollAppDialog(s: AppDialogScrollLockSnapshot): void;
@@ -3,18 +3,24 @@ import { LibDialogSize } from '../_models/lib-dialog-size.model';
3
3
  import * as i0 from "@angular/core";
4
4
  /**
5
5
  * Diálogo modal declarativo com `[(open)]`, projeção de corpo e rodapé opcional (`[appDialogFooter]`).
6
- * Bloqueio de scroll alinhado ao CDK (`cdk-global-scrollblock`), como no `ConfirmDialogService`.
6
+ * Bloqueio de scroll com {@link lockPageScrollAppDialog} (sem deslocar o `html` como o CDK),
7
+ * para o scrim `position: fixed` alinhar ao viewport em páginas com scroll no `body`.
7
8
  */
8
9
  export declare class AppDialogComponent implements OnChanges, OnDestroy {
9
10
  private readonly hostEl;
10
11
  open: boolean;
11
12
  readonly openChange: EventEmitter<boolean>;
12
- title: string;
13
+ /**
14
+ * Título do cabeçalho (`<app-dialog title="…">`).
15
+ * O nome da propriedade **não** pode ser `title`: no host DOM isso colide com
16
+ * `HTMLElement.title` e o browser desenha o tooltip nativo por cima do overlay.
17
+ */
18
+ dialogHeading: string;
13
19
  /** Texto de apoio abaixo do título (opcional); liga `aria-describedby` no painel. */
14
20
  description: string;
15
21
  /**
16
- * Rótulo acessível quando não há `title` (evita diálogo sem nome).
17
- * Ignorado se `title` tiver texto.
22
+ * Rótulo acessível quando não há título (evita diálogo sem nome).
23
+ * Ignorado se `dialogHeading` tiver texto.
18
24
  */
19
25
  ariaLabel: string;
20
26
  size: LibDialogSize;
@@ -45,7 +51,7 @@ export declare class AppDialogComponent implements OnChanges, OnDestroy {
45
51
  requestClose(): void;
46
52
  private restoreFocus;
47
53
  static ɵfac: i0.ɵɵFactoryDeclaration<AppDialogComponent, never>;
48
- static ɵcmp: i0.ɵɵComponentDeclaration<AppDialogComponent, "app-dialog", never, { "open": { "alias": "open"; "required": false; }; "title": { "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>;
54
+ 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
55
  static ngAcceptInputType_open: unknown;
50
56
  static ngAcceptInputType_allowOverlayDismiss: unknown;
51
57
  static ngAcceptInputType_showCloseButton: unknown;
@@ -1,7 +1,7 @@
1
- import { EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
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, OnDestroy {
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
- title: string;
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; }; "title": { "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>;
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: string;
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; }; "title": { "alias": "title"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; }, { "openChange": "openChange"; }, never, ["*", "[appDrawerFooter]"], true, never>;
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
  }
@@ -40,4 +40,31 @@ export function unlockPageScrollCdkStyle(s) {
40
40
  body.style.touchAction = s.bodyTouchAction;
41
41
  window.scroll(s.scrollX, s.scrollY);
42
42
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS1zY3JvbGwtbG9jay51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9fdXRpbHMvc2Nyb2xsL2JvZHktc2Nyb2xsLWxvY2sudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBV0gsMEVBQTBFO0FBQzFFLE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztJQUN0QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzNCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDakQsTUFBTSxRQUFRLEdBQXVCO1FBQ25DLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7UUFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztRQUN2QixPQUFPO1FBQ1AsT0FBTztRQUNQLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7UUFDakMsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztLQUN4QyxDQUFDO0lBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDO0lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQztJQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFDaEMsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxDQUFxQjtJQUM1RCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBCbG9xdWVpbyBkZSBzY3JvbGwgZ2xvYmFsICoqYWxpbmhhZG8gYW8gQ0RLKiogKGBCbG9ja1Njcm9sbFN0cmF0ZWd5YCk6XHJcbiAqIGNsYXNzZSBgY2RrLWdsb2JhbC1zY3JvbGxibG9ja2Agbm8gYGRvY3VtZW50RWxlbWVudGAgKyBkZXNsb2NhbWVudG8gYGxlZnRgL2B0b3BgXHJcbiAqIHBhcmEgY29uZ2VsYXIgYSBwb3Npw6fDo28gZGUgc2Nyb2xsLlxyXG4gKlxyXG4gKiBUYW1iw6ltIGRlZmluZSBgb3ZlcmZsb3c6IGhpZGRlbmAgbm8gYGJvZHlgIGVucXVhbnRvIG8gbG9jayBlc3TDoSBhY3Rpdm8g4oCUIG8gYGh0bWxgXHJcbiAqICoqbsOjbyoqIHVzYSBgb3ZlcmZsb3cteTogc2Nyb2xsYCAoaXNzbyBmb3LDp2F2YSBiYXJyYSBubyB2aWV3cG9ydCBzZW0gbmVjZXNzaWRhZGUpLlxyXG4gKlxyXG4gKiBSZXF1ZXIgcmVncmFzIENTUyBlbSBgc3R5bGVzLnNjc3NgIHBhcmEgYC5jZGstZ2xvYmFsLXNjcm9sbGJsb2NrYCBlXHJcbiAqIGBbZGF0YS1hcHAtc2Nyb2xsLWxvY2tdYC5cclxuICovXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNjcm9sbExvY2tTbmFwc2hvdCB7XHJcbiAgcmVhZG9ubHkgaHRtbExlZnQ6IHN0cmluZztcclxuICByZWFkb25seSBodG1sVG9wOiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkgc2Nyb2xsWDogbnVtYmVyO1xyXG4gIHJlYWRvbmx5IHNjcm9sbFk6IG51bWJlcjtcclxuICByZWFkb25seSBib2R5T3ZlcmZsb3c6IHN0cmluZztcclxuICByZWFkb25seSBib2R5VG91Y2hBY3Rpb246IHN0cmluZztcclxufVxyXG5cclxuLyoqIEFwbGljYSBvIG1lc21vIHBhZHLDo28gdmlzdWFsIGRvIG92ZXJsYXkgQ0RLIERpYWxvZyAoY29uZmlybSwgZXRjLikuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2NrUGFnZVNjcm9sbENka1N0eWxlKCk6IFNjcm9sbExvY2tTbmFwc2hvdCB7XHJcbiAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcclxuICBjb25zdCBzY3JvbGxYID0gd2luZG93LnNjcm9sbFggPz8gaHRtbC5zY3JvbGxMZWZ0O1xyXG4gIGNvbnN0IHNjcm9sbFkgPSB3aW5kb3cuc2Nyb2xsWSA/PyBodG1sLnNjcm9sbFRvcDtcclxuICBjb25zdCBzbmFwc2hvdDogU2Nyb2xsTG9ja1NuYXBzaG90ID0ge1xyXG4gICAgaHRtbExlZnQ6IGh0bWwuc3R5bGUubGVmdCxcclxuICAgIGh0bWxUb3A6IGh0bWwuc3R5bGUudG9wLFxyXG4gICAgc2Nyb2xsWCxcclxuICAgIHNjcm9sbFksXHJcbiAgICBib2R5T3ZlcmZsb3c6IGJvZHkuc3R5bGUub3ZlcmZsb3csXHJcbiAgICBib2R5VG91Y2hBY3Rpb246IGJvZHkuc3R5bGUudG91Y2hBY3Rpb24sXHJcbiAgfTtcclxuICBodG1sLnN0eWxlLmxlZnQgPSBgJHstc2Nyb2xsWH1weGA7XHJcbiAgaHRtbC5zdHlsZS50b3AgPSBgJHstc2Nyb2xsWX1weGA7XHJcbiAgaHRtbC5jbGFzc0xpc3QuYWRkKCdjZGstZ2xvYmFsLXNjcm9sbGJsb2NrJyk7XHJcbiAgYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG4gIGJvZHkuc3R5bGUudG91Y2hBY3Rpb24gPSAnbm9uZSc7XHJcbiAgcmV0dXJuIHNuYXBzaG90O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdW5sb2NrUGFnZVNjcm9sbENka1N0eWxlKHM6IFNjcm9sbExvY2tTbmFwc2hvdCk6IHZvaWQge1xyXG4gIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XHJcbiAgaHRtbC5jbGFzc0xpc3QucmVtb3ZlKCdjZGstZ2xvYmFsLXNjcm9sbGJsb2NrJyk7XHJcbiAgaHRtbC5zdHlsZS5sZWZ0ID0gcy5odG1sTGVmdDtcclxuICBodG1sLnN0eWxlLnRvcCA9IHMuaHRtbFRvcDtcclxuICBib2R5LnN0eWxlLm92ZXJmbG93ID0gcy5ib2R5T3ZlcmZsb3c7XHJcbiAgYm9keS5zdHlsZS50b3VjaEFjdGlvbiA9IHMuYm9keVRvdWNoQWN0aW9uO1xyXG4gIHdpbmRvdy5zY3JvbGwocy5zY3JvbGxYLCBzLnNjcm9sbFkpO1xyXG59XHJcbiJdfQ==
43
+ export function lockPageScrollAppDialog() {
44
+ const html = document.documentElement;
45
+ const body = document.body;
46
+ const scrollX = window.scrollX ?? html.scrollLeft;
47
+ const scrollY = window.scrollY ?? html.scrollTop;
48
+ const snapshot = {
49
+ scrollX,
50
+ scrollY,
51
+ htmlOverflow: html.style.overflow,
52
+ bodyOverflow: body.style.overflow,
53
+ bodyTouchAction: body.style.touchAction,
54
+ };
55
+ html.classList.add('app-dialog-scroll-lock');
56
+ html.style.overflow = 'hidden';
57
+ body.style.overflow = 'hidden';
58
+ body.style.touchAction = 'none';
59
+ return snapshot;
60
+ }
61
+ export function unlockPageScrollAppDialog(s) {
62
+ const html = document.documentElement;
63
+ const body = document.body;
64
+ html.classList.remove('app-dialog-scroll-lock');
65
+ html.style.overflow = s.htmlOverflow;
66
+ body.style.overflow = s.bodyOverflow;
67
+ body.style.touchAction = s.bodyTouchAction;
68
+ window.scroll(s.scrollX, s.scrollY);
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS1zY3JvbGwtbG9jay51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9fdXRpbHMvc2Nyb2xsL2JvZHktc2Nyb2xsLWxvY2sudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBV0gsMEVBQTBFO0FBQzFFLE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztJQUN0QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzNCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDakQsTUFBTSxRQUFRLEdBQXVCO1FBQ25DLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7UUFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztRQUN2QixPQUFPO1FBQ1AsT0FBTztRQUNQLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7UUFDakMsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztLQUN4QyxDQUFDO0lBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDO0lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQztJQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFDaEMsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxDQUFxQjtJQUM1RCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQWtCRCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7SUFDdEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztJQUMzQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDbEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2pELE1BQU0sUUFBUSxHQUFnQztRQUM1QyxPQUFPO1FBQ1AsT0FBTztRQUNQLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7UUFDakMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtRQUNqQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO0tBQ3hDLENBQUM7SUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQ2hDLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsQ0FBOEI7SUFDdEUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztJQUN0QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUM7SUFDM0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEJsb3F1ZWlvIGRlIHNjcm9sbCBnbG9iYWwgKiphbGluaGFkbyBhbyBDREsqKiAoYEJsb2NrU2Nyb2xsU3RyYXRlZ3lgKTpcclxuICogY2xhc3NlIGBjZGstZ2xvYmFsLXNjcm9sbGJsb2NrYCBubyBgZG9jdW1lbnRFbGVtZW50YCArIGRlc2xvY2FtZW50byBgbGVmdGAvYHRvcGBcclxuICogcGFyYSBjb25nZWxhciBhIHBvc2nDp8OjbyBkZSBzY3JvbGwuXHJcbiAqXHJcbiAqIFRhbWLDqW0gZGVmaW5lIGBvdmVyZmxvdzogaGlkZGVuYCBubyBgYm9keWAgZW5xdWFudG8gbyBsb2NrIGVzdMOhIGFjdGl2byDigJQgbyBgaHRtbGBcclxuICogKipuw6NvKiogdXNhIGBvdmVyZmxvdy15OiBzY3JvbGxgIChpc3NvIGZvcsOnYXZhIGJhcnJhIG5vIHZpZXdwb3J0IHNlbSBuZWNlc3NpZGFkZSkuXHJcbiAqXHJcbiAqIFJlcXVlciByZWdyYXMgQ1NTIGVtIGBzdHlsZXMuc2Nzc2AgcGFyYSBgLmNkay1nbG9iYWwtc2Nyb2xsYmxvY2tgIGVcclxuICogYFtkYXRhLWFwcC1zY3JvbGwtbG9ja11gLlxyXG4gKi9cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2Nyb2xsTG9ja1NuYXBzaG90IHtcclxuICByZWFkb25seSBodG1sTGVmdDogc3RyaW5nO1xyXG4gIHJlYWRvbmx5IGh0bWxUb3A6IHN0cmluZztcclxuICByZWFkb25seSBzY3JvbGxYOiBudW1iZXI7XHJcbiAgcmVhZG9ubHkgc2Nyb2xsWTogbnVtYmVyO1xyXG4gIHJlYWRvbmx5IGJvZHlPdmVyZmxvdzogc3RyaW5nO1xyXG4gIHJlYWRvbmx5IGJvZHlUb3VjaEFjdGlvbjogc3RyaW5nO1xyXG59XHJcblxyXG4vKiogQXBsaWNhIG8gbWVzbW8gcGFkcsOjbyB2aXN1YWwgZG8gb3ZlcmxheSBDREsgRGlhbG9nIChjb25maXJtLCBldGMuKS4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGxvY2tQYWdlU2Nyb2xsQ2RrU3R5bGUoKTogU2Nyb2xsTG9ja1NuYXBzaG90IHtcclxuICBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xyXG4gIGNvbnN0IHNjcm9sbFggPSB3aW5kb3cuc2Nyb2xsWCA/PyBodG1sLnNjcm9sbExlZnQ7XHJcbiAgY29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZID8/IGh0bWwuc2Nyb2xsVG9wO1xyXG4gIGNvbnN0IHNuYXBzaG90OiBTY3JvbGxMb2NrU25hcHNob3QgPSB7XHJcbiAgICBodG1sTGVmdDogaHRtbC5zdHlsZS5sZWZ0LFxyXG4gICAgaHRtbFRvcDogaHRtbC5zdHlsZS50b3AsXHJcbiAgICBzY3JvbGxYLFxyXG4gICAgc2Nyb2xsWSxcclxuICAgIGJvZHlPdmVyZmxvdzogYm9keS5zdHlsZS5vdmVyZmxvdyxcclxuICAgIGJvZHlUb3VjaEFjdGlvbjogYm9keS5zdHlsZS50b3VjaEFjdGlvbixcclxuICB9O1xyXG4gIGh0bWwuc3R5bGUubGVmdCA9IGAkey1zY3JvbGxYfXB4YDtcclxuICBodG1sLnN0eWxlLnRvcCA9IGAkey1zY3JvbGxZfXB4YDtcclxuICBodG1sLmNsYXNzTGlzdC5hZGQoJ2Nkay1nbG9iYWwtc2Nyb2xsYmxvY2snKTtcclxuICBib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XHJcbiAgYm9keS5zdHlsZS50b3VjaEFjdGlvbiA9ICdub25lJztcclxuICByZXR1cm4gc25hcHNob3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmxvY2tQYWdlU2Nyb2xsQ2RrU3R5bGUoczogU2Nyb2xsTG9ja1NuYXBzaG90KTogdm9pZCB7XHJcbiAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcclxuICBodG1sLmNsYXNzTGlzdC5yZW1vdmUoJ2Nkay1nbG9iYWwtc2Nyb2xsYmxvY2snKTtcclxuICBodG1sLnN0eWxlLmxlZnQgPSBzLmh0bWxMZWZ0O1xyXG4gIGh0bWwuc3R5bGUudG9wID0gcy5odG1sVG9wO1xyXG4gIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSBzLmJvZHlPdmVyZmxvdztcclxuICBib2R5LnN0eWxlLnRvdWNoQWN0aW9uID0gcy5ib2R5VG91Y2hBY3Rpb247XHJcbiAgd2luZG93LnNjcm9sbChzLnNjcm9sbFgsIHMuc2Nyb2xsWSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCbG9xdWVpbyBkZSBzY3JvbGwgcGFyYSBvIGBhcHAtZGlhbG9nYCBkZWNsYXJhdGl2bzogKipzZW0qKiBgcG9zaXRpb246IGZpeGVkYCBuZW0gYGxlZnRgL2B0b3BgXHJcbiAqIG5lZ2F0aXZvcyBubyBgZG9jdW1lbnRFbGVtZW50YCAocGFkcsOjbyBDREsgZW0ge0BsaW5rIGxvY2tQYWdlU2Nyb2xsQ2RrU3R5bGV9KS5cclxuICpcclxuICogQ29tIGVzc2UgcGFkcsOjbywgZW0gQ2hyb21pdW0vV2ViS2l0IG8gYHBvc2l0aW9uOiBmaXhlZGAgZG8gc2NyaW0gZGVpeGEgZGUgZmljYXIgYW5jb3JhZG8gYW9cclxuICogYGh0bWxgIGRlc2xvY2FkbyDigJQgZXZpdGEgZmFpeGEgZGUgY29udGXDumRvIHZpc8OtdmVsIG5vIHRvcG8gZSBzY3JpbSBicmFuY28vY2luemEgZXJyYWRvIGVtXHJcbiAqIGFwcHMgb25kZSBvIGBib2R5YCBmYXogc2Nyb2xsIChleC46IHNpdGUgZGUgZG9jdW1lbnRhw6fDo28pLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBcHBEaWFsb2dTY3JvbGxMb2NrU25hcHNob3Qge1xyXG4gIHJlYWRvbmx5IHNjcm9sbFg6IG51bWJlcjtcclxuICByZWFkb25seSBzY3JvbGxZOiBudW1iZXI7XHJcbiAgcmVhZG9ubHkgaHRtbE92ZXJmbG93OiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkgYm9keU92ZXJmbG93OiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkgYm9keVRvdWNoQWN0aW9uOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2NrUGFnZVNjcm9sbEFwcERpYWxvZygpOiBBcHBEaWFsb2dTY3JvbGxMb2NrU25hcHNob3Qge1xyXG4gIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XHJcbiAgY29uc3Qgc2Nyb2xsWCA9IHdpbmRvdy5zY3JvbGxYID8/IGh0bWwuc2Nyb2xsTGVmdDtcclxuICBjb25zdCBzY3JvbGxZID0gd2luZG93LnNjcm9sbFkgPz8gaHRtbC5zY3JvbGxUb3A7XHJcbiAgY29uc3Qgc25hcHNob3Q6IEFwcERpYWxvZ1Njcm9sbExvY2tTbmFwc2hvdCA9IHtcclxuICAgIHNjcm9sbFgsXHJcbiAgICBzY3JvbGxZLFxyXG4gICAgaHRtbE92ZXJmbG93OiBodG1sLnN0eWxlLm92ZXJmbG93LFxyXG4gICAgYm9keU92ZXJmbG93OiBib2R5LnN0eWxlLm92ZXJmbG93LFxyXG4gICAgYm9keVRvdWNoQWN0aW9uOiBib2R5LnN0eWxlLnRvdWNoQWN0aW9uLFxyXG4gIH07XHJcbiAgaHRtbC5jbGFzc0xpc3QuYWRkKCdhcHAtZGlhbG9nLXNjcm9sbC1sb2NrJyk7XHJcbiAgaHRtbC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG4gIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcclxuICBib2R5LnN0eWxlLnRvdWNoQWN0aW9uID0gJ25vbmUnO1xyXG4gIHJldHVybiBzbmFwc2hvdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVubG9ja1BhZ2VTY3JvbGxBcHBEaWFsb2coczogQXBwRGlhbG9nU2Nyb2xsTG9ja1NuYXBzaG90KTogdm9pZCB7XHJcbiAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcclxuICBodG1sLmNsYXNzTGlzdC5yZW1vdmUoJ2FwcC1kaWFsb2ctc2Nyb2xsLWxvY2snKTtcclxuICBodG1sLnN0eWxlLm92ZXJmbG93ID0gcy5odG1sT3ZlcmZsb3c7XHJcbiAgYm9keS5zdHlsZS5vdmVyZmxvdyA9IHMuYm9keU92ZXJmbG93O1xyXG4gIGJvZHkuc3R5bGUudG91Y2hBY3Rpb24gPSBzLmJvZHlUb3VjaEFjdGlvbjtcclxuICB3aW5kb3cuc2Nyb2xsKHMuc2Nyb2xsWCwgcy5zY3JvbGxZKTtcclxufVxyXG4iXX0=
@@ -1,24 +1,30 @@
1
1
  import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, inject, Input, Output, booleanAttribute, } from '@angular/core';
2
2
  import { CdkTrapFocus } from '@angular/cdk/a11y';
3
- import { lockPageScrollCdkStyle, unlockPageScrollCdkStyle, } from '../../_utils/scroll/body-scroll-lock.util';
3
+ import { lockPageScrollAppDialog, unlockPageScrollAppDialog, } from '../../_utils/scroll/body-scroll-lock.util';
4
4
  import { LibDialogSize } from '../_models/lib-dialog-size.model';
5
5
  import * as i0 from "@angular/core";
6
6
  let appDialogSeq = 0;
7
7
  /**
8
8
  * Diálogo modal declarativo com `[(open)]`, projeção de corpo e rodapé opcional (`[appDialogFooter]`).
9
- * Bloqueio de scroll alinhado ao CDK (`cdk-global-scrollblock`), como no `ConfirmDialogService`.
9
+ * Bloqueio de scroll com {@link lockPageScrollAppDialog} (sem deslocar o `html` como o CDK),
10
+ * para o scrim `position: fixed` alinhar ao viewport em páginas com scroll no `body`.
10
11
  */
11
12
  export class AppDialogComponent {
12
13
  constructor() {
13
14
  this.hostEl = inject((ElementRef));
14
15
  this.open = false;
15
16
  this.openChange = new EventEmitter();
16
- this.title = '';
17
+ /**
18
+ * Título do cabeçalho (`<app-dialog title="…">`).
19
+ * O nome da propriedade **não** pode ser `title`: no host DOM isso colide com
20
+ * `HTMLElement.title` e o browser desenha o tooltip nativo por cima do overlay.
21
+ */
22
+ this.dialogHeading = '';
17
23
  /** Texto de apoio abaixo do título (opcional); liga `aria-describedby` no painel. */
18
24
  this.description = '';
19
25
  /**
20
- * Rótulo acessível quando não há `title` (evita diálogo sem nome).
21
- * Ignorado se `title` tiver texto.
26
+ * Rótulo acessível quando não há título (evita diálogo sem nome).
27
+ * Ignorado se `dialogHeading` tiver texto.
22
28
  */
23
29
  this.ariaLabel = 'Diálogo';
24
30
  this.size = LibDialogSize.Md;
@@ -40,8 +46,7 @@ export class AppDialogComponent {
40
46
  this.bodyRestoreNext = null;
41
47
  this.previousActive = null;
42
48
  this.scrollLock = {
43
- htmlLeft: '',
44
- htmlTop: '',
49
+ htmlOverflow: '',
45
50
  scrollX: 0,
46
51
  scrollY: 0,
47
52
  bodyOverflow: '',
@@ -56,10 +61,10 @@ export class AppDialogComponent {
56
61
  if (a instanceof HTMLElement && a !== document.body) {
57
62
  this.previousActive = a;
58
63
  }
59
- this.scrollLock = lockPageScrollCdkStyle();
64
+ this.scrollLock = lockPageScrollAppDialog();
60
65
  }
61
66
  else {
62
- unlockPageScrollCdkStyle(this.scrollLock);
67
+ unlockPageScrollAppDialog(this.scrollLock);
63
68
  this.detachHostFromBody();
64
69
  this.restoreFocus();
65
70
  }
@@ -67,7 +72,7 @@ export class AppDialogComponent {
67
72
  }
68
73
  ngOnDestroy() {
69
74
  if (this.open) {
70
- unlockPageScrollCdkStyle(this.scrollLock);
75
+ unlockPageScrollAppDialog(this.scrollLock);
71
76
  }
72
77
  this.detachHostFromBody();
73
78
  }
@@ -123,7 +128,7 @@ export class AppDialogComponent {
123
128
  }
124
129
  this.open = false;
125
130
  this.openChange.emit(false);
126
- unlockPageScrollCdkStyle(this.scrollLock);
131
+ unlockPageScrollAppDialog(this.scrollLock);
127
132
  this.restoreFocus();
128
133
  }
129
134
  restoreFocus() {
@@ -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], title: "title", 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 title.trim() ? titleId : description.trim() ? descriptionId : null\r\n \"\r\n [attr.aria-label]=\"!title.trim() && !description.trim() ? ariaLabel : null\"\r\n [attr.aria-describedby]=\"\r\n title.trim() && description.trim() ? descriptionId : null\r\n \"\r\n cdkTrapFocus\r\n [cdkTrapFocusAutoCapture]=\"true\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n @if (title.trim()) {\r\n <header class=\"app-dialog-header\">\r\n <h2 class=\"app-dialog-title\" [id]=\"titleId\">{{ title }}</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\">&times;</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 }); }
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\">&times;</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}.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-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 title.trim() ? titleId : description.trim() ? descriptionId : null\r\n \"\r\n [attr.aria-label]=\"!title.trim() && !description.trim() ? ariaLabel : null\"\r\n [attr.aria-describedby]=\"\r\n title.trim() && description.trim() ? descriptionId : null\r\n \"\r\n cdkTrapFocus\r\n [cdkTrapFocusAutoCapture]=\"true\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n @if (title.trim()) {\r\n <header class=\"app-dialog-header\">\r\n <h2 class=\"app-dialog-title\" [id]=\"titleId\">{{ title }}</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\">&times;</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"] }]
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\">&times;</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}.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-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
- }], title: [{
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpYWxvZ3MvYXBwLWRpYWxvZy9hcHAtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlhbG9ncy9hcHAtZGlhbG9nL2FwcC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHlCQUF5QixHQUUxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFFakUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRXJCOzs7O0dBSUc7QUFTSCxNQUFNLE9BQU8sa0JBQWtCO0lBUi9CO1FBU21CLFdBQU0sR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUF1QixDQUFBLENBQUMsQ0FBQztRQUVsQixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTVEOzs7O1dBSUc7UUFDYSxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUVuQyxxRkFBcUY7UUFDNUUsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFMUI7OztXQUdHO1FBQ00sY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUV0QixTQUFJLEdBQWtCLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFFaEQ7Ozs7V0FJRztRQUNxQyx3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFF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QUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDN0IsQ0FBQzsrR0FoSlUsa0JBQWtCO21HQUFsQixrQkFBa0IsK0VBR1QsZ0JBQWdCLG9MQTBCaEIsZ0JBQWdCLDJEQUVoQixnQkFBZ0IsbUtDcEV0Qyw2NERBcURBLHVuRkRyQlksWUFBWTs7NEZBS1gsa0JBQWtCO2tCQVI5QixTQUFTOytCQUNFLFlBQVksY0FDVixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBR04sdUJBQXVCLENBQUMsTUFBTTs4QkFLUCxJQUFJO3NCQUEzQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNuQixVQUFVO3NCQUE1QixNQUFNO2dCQU9TLGFBQWE7c0JBQTVCLEtBQUs7dUJBQUMsT0FBTztnQkFHTCxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQU9rQyxtQkFBbUI7c0JBQTFELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRUUsZUFBZTtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFtRnRDLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBib29sZWFuQXR0cmlidXRlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka1RyYXBGb2N1cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7XG4gIGxvY2tQYWdlU2Nyb2xsQXBwRGlhbG9nLFxuICB1bmxvY2tQYWdlU2Nyb2xsQXBwRGlhbG9nLFxuICB0eXBlIEFwcERpYWxvZ1Njcm9sbExvY2tTbmFwc2hvdCxcbn0gZnJvbSAnLi4vLi4vX3V0aWxzL3Njcm9sbC9ib2R5LXNjcm9sbC1sb2NrLnV0aWwnO1xuaW1wb3J0IHsgTGliRGlhbG9nU2l6ZSB9IGZyb20gJy4uL19tb2RlbHMvbGliLWRpYWxvZy1zaXplLm1vZGVsJztcblxubGV0IGFwcERpYWxvZ1NlcSA9IDA7XG5cbi8qKlxuICogRGnDoWxvZ28gbW9kYWwgZGVjbGFyYXRpdm8gY29tIGBbKG9wZW4pXWAsIHByb2plw6fDo28gZGUgY29ycG8gZSByb2RhcMOpIG9wY2lvbmFsIChgW2FwcERpYWxvZ0Zvb3Rlcl1gKS5cbiAqIEJsb3F1ZWlvIGRlIHNjcm9sbCBjb20ge0BsaW5rIGxvY2tQYWdlU2Nyb2xsQXBwRGlhbG9nfSAoc2VtIGRlc2xvY2FyIG8gYGh0bWxgIGNvbW8gbyBDREspLFxuICogcGFyYSBvIHNjcmltIGBwb3NpdGlvbjogZml4ZWRgIGFsaW5oYXIgYW8gdmlld3BvcnQgZW0gcMOhZ2luYXMgY29tIHNjcm9sbCBubyBgYm9keWAuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1kaWFsb2cnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ2RrVHJhcEZvY3VzXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYXBwLWRpYWxvZy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaG9zdEVsID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgb3BlbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogVMOtdHVsbyBkbyBjYWJlw6dhbGhvIChgPGFwcC1kaWFsb2cgdGl0bGU9XCLigKZcIj5gKS5cbiAgICogTyBub21lIGRhIHByb3ByaWVkYWRlICoqbsOjbyoqIHBvZGUgc2VyIGB0aXRsZWA6IG5vIGhvc3QgRE9NIGlzc28gY29saWRlIGNvbVxuICAgKiBgSFRNTEVsZW1lbnQudGl0bGVgIGUgbyBicm93c2VyIGRlc2VuaGEgbyB0b29sdGlwIG5hdGl2byBwb3IgY2ltYSBkbyBvdmVybGF5LlxuICAgKi9cbiAgQElucHV0KCd0aXRsZScpIGRpYWxvZ0hlYWRpbmcgPSAnJztcblxuICAvKiogVGV4dG8gZGUgYXBvaW8gYWJhaXhvIGRvIHTDrXR1bG8gKG9wY2lvbmFsKTsgbGlnYSBgYXJpYS1kZXNjcmliZWRieWAgbm8gcGFpbmVsLiAqL1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBSw7N0dWxvIGFjZXNzw612ZWwgcXVhbmRvIG7Do28gaMOhIHTDrXR1bG8gKGV2aXRhIGRpw6Fsb2dvIHNlbSBub21lKS5cbiAgICogSWdub3JhZG8gc2UgYGRpYWxvZ0hlYWRpbmdgIHRpdmVyIHRleHRvLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsID0gJ0Rpw6Fsb2dvJztcblxuICBASW5wdXQoKSBzaXplOiBMaWJEaWFsb2dTaXplID0gTGliRGlhbG9nU2l6ZS5NZDtcblxuICAvKipcbiAgICogUXVhbmRvIGBmYWxzZWAsIGEgdGVjbGEgRXNjYXBlIGUgbyBjbGlxdWUgbm8gYmFja2Ryb3AgbsOjbyBmZWNoYW0gbyBkacOhbG9nb1xuICAgKiAoYm90w6NvIOKclSwgYFsob3BlbildYCBlIGByZXF1ZXN0Q2xvc2UoKWAgY29udGludWFtIGRpc3BvbsOtdmVpcykuXG4gICAqIE9taXNzbzogYHRydWVgLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFsbG93T3ZlcmxheURpc21pc3MgPSB0cnVlO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93Q2xvc2VCdXR0b24gPSB0cnVlO1xuXG4gIHJlYWRvbmx5IExpYkRpYWxvZ1NpemUgPSBMaWJEaWFsb2dTaXplO1xuXG4gIHJlYWRvbmx5IHRpdGxlSWQgPSBgYXBwLWRpYWxvZy10aXRsZS0keysrYXBwRGlhbG9nU2VxfWA7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uSWQgPSBgYXBwLWRpYWxvZy1kZXNjLSR7YXBwRGlhbG9nU2VxfWA7XG5cbiAgLyoqXG4gICAqIE8gbW9kYWwgZmljYSBubyBmaW0gZGUgYGRvY3VtZW50LmJvZHlgIGVucXVhbnRvIGFiZXJ0bywgcGFyYSBvIGBiYWNrZHJvcC1maWx0ZXJgXG4gICAqIG7Do28gZmljYXIgwqtwcmVzb8K7IGEgYW5jZXN0cmFpcyBjb20gYG92ZXJmbG93OiBhdXRvYCAoZXguOiBgYXBwLXNoZWxsX19jb250ZW50YCkuXG4gICAqL1xuICBwcml2YXRlIGJvZHlSZXN0b3JlUGFyZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGJvZHlSZXN0b3JlTmV4dDogQ2hpbGROb2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBwcmV2aW91c0FjdGl2ZTogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzY3JvbGxMb2NrOiBBcHBEaWFsb2dTY3JvbGxMb2NrU25hcHNob3QgPSB7XG4gICAgaHRtbE92ZXJmbG93OiAnJyxcbiAgICBzY3JvbGxYOiAwLFxuICAgIHNjcm9sbFk6IDAsXG4gICAgYm9keU92ZXJmbG93OiAnJyxcbiAgICBib2R5VG91Y2hBY3Rpb246ICcnLFxuICB9O1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snb3BlbiddKSB7XG4gICAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICAgIHRoaXMuYXR0YWNoSG9zdFRvQm9keSgpO1xuICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBhICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgICAgdGhpcy5wcmV2aW91c0FjdGl2ZSA9IGE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxMb2NrID0gbG9ja1BhZ2VTY3JvbGxBcHBEaWFsb2coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVubG9ja1BhZ2VTY3JvbGxBcHBEaWFsb2codGhpcy5zY3JvbGxMb2NrKTtcbiAgICAgICAgdGhpcy5kZXRhY2hIb3N0RnJvbUJvZHkoKTtcbiAgICAgICAgdGhpcy5yZXN0b3JlRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICB1bmxvY2tQYWdlU2Nyb2xsQXBwRGlhbG9nKHRoaXMuc2Nyb2xsTG9jayk7XG4gICAgfVxuICAgIHRoaXMuZGV0YWNoSG9zdEZyb21Cb2R5KCk7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaEhvc3RUb0JvZHkoKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSB0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChlbC5wYXJlbnRFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYm9keVJlc3RvcmVQYXJlbnQgPSBlbC5wYXJlbnRFbGVtZW50O1xuICAgIHRoaXMuYm9keVJlc3RvcmVOZXh0ID0gZWwubmV4dFNpYmxpbmc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7XG4gIH1cblxuICBwcml2YXRlIGRldGFjaEhvc3RGcm9tQm9keSgpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGVsLnBhcmVudEVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIHRoaXMuYm9keVJlc3RvcmVQYXJlbnQgPSBudWxsO1xuICAgICAgdGhpcy5ib2R5UmVzdG9yZU5leHQgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmJvZHlSZXN0b3JlUGFyZW50O1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLmJvZHlSZXN0b3JlTmV4dDtcbiAgICB0aGlzLmJvZHlSZXN0b3JlUGFyZW50ID0gbnVsbDtcbiAgICB0aGlzLmJvZHlSZXN0b3JlTmV4dCA9IG51bGw7XG4gICAgaWYgKHBhcmVudCAmJiBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHBhcmVudCkpIHtcbiAgICAgIGlmIChuZXh0ICYmIG5leHQucGFyZW50Tm9kZSA9PT0gcGFyZW50KSB7XG4gICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWwsIG5leHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhcHBSb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXBwLXJvb3QnKTtcbiAgICBpZiAoYXBwUm9vdCkge1xuICAgICAgYXBwUm9vdC5hcHBlbmRDaGlsZChlbCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRLZXlkb3duKGV2OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wZW4gfHwgZXYua2V5ICE9PSAnRXNjYXBlJyB8fCAhdGhpcy5hbGxvd092ZXJsYXlEaXNtaXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yZXF1ZXN0Q2xvc2UoKTtcbiAgfVxuXG4gIG9uQmFja2Ryb3BDbGljaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYWxsb3dPdmVybGF5RGlzbWlzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlcXVlc3RDbG9zZSgpO1xuICB9XG5cbiAgcmVxdWVzdENsb3NlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB1bmxvY2tQYWdlU2Nyb2xsQXBwRGlhbG9nKHRoaXMuc2Nyb2xsTG9jayk7XG4gICAgdGhpcy5yZXN0b3JlRm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzdG9yZUZvY3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByZXZpb3VzQWN0aXZlICYmIGRvY3VtZW50LmNvbnRhaW5zKHRoaXMucHJldmlvdXNBY3RpdmUpKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQWN0aXZlLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICB9XG4gICAgdGhpcy5wcmV2aW91c0FjdGl2ZSA9IG51bGw7XG4gIH1cbn1cbiIsIkBpZiAob3Blbikge1xyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiYXBwLWRpYWxvZy1iYWNrZHJvcFwiXHJcbiAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgKGNsaWNrKT1cIm9uQmFja2Ryb3BDbGljaygpXCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImFwcC1kaWFsb2ctc3RhZ2VcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiYXBwLWRpYWxvZy1wYW5lbFwiXHJcbiAgICAgIFtjbGFzcy5hcHAtZGlhbG9nLXBhbmVsLS1zbV09XCJzaXplID09PSBMaWJEaWFsb2dTaXplLlNtXCJcclxuICAgICAgW2NsYXNzLmFwcC1kaWFsb2ctcGFuZWwtLW1kXT1cInNpemUgPT09IExpYkRpYWxvZ1NpemUuTWRcIlxyXG4gICAgICBbY2xhc3MuYXBwLWRpYWxvZy1wYW5lbC0tbGddPVwic2l6ZSA9PT0gTGliRGlhbG9nU2l6ZS5MZ1wiXHJcbiAgICAgIHJvbGU9XCJkaWFsb2dcIlxyXG4gICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcclxuICAgICAgICBkaWFsb2dIZWFkaW5nLnRyaW0oKSA/IHRpdGxlSWQgOiBkZXNjcmlwdGlvbi50cmltKCkgPyBkZXNjcmlwdGlvbklkIDogbnVsbFxyXG4gICAgICBcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIiFkaWFsb2dIZWFkaW5nLnRyaW0oKSAmJiAhZGVzY3JpcHRpb24udHJpbSgpID8gYXJpYUxhYmVsIDogbnVsbFwiXHJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiXHJcbiAgICAgICAgZGlhbG9nSGVhZGluZy50cmltKCkgJiYgZGVzY3JpcHRpb24udHJpbSgpID8gZGVzY3JpcHRpb25JZCA6IG51bGxcclxuICAgICAgXCJcclxuICAgICAgY2RrVHJhcEZvY3VzXHJcbiAgICAgIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCJcclxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICA+XHJcbiAgICAgIEBpZiAoZGlhbG9nSGVhZGluZy50cmltKCkpIHtcclxuICAgICAgICA8aGVhZGVyIGNsYXNzPVwiYXBwLWRpYWxvZy1oZWFkZXJcIj5cclxuICAgICAgICAgIDxoMiBjbGFzcz1cImFwcC1kaWFsb2ctdGl0bGVcIiBbaWRdPVwidGl0bGVJZFwiPnt7IGRpYWxvZ0hlYWRpbmcgfX08L2gyPlxyXG4gICAgICAgICAgQGlmIChzaG93Q2xvc2VCdXR0b24pIHtcclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXBwLWRpYWxvZy1jbG9zZVwiXHJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkZlY2hhciBkacOhbG9nb1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlcXVlc3RDbG9zZSgpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICB9XHJcbiAgICAgIEBpZiAoZGVzY3JpcHRpb24udHJpbSgpKSB7XHJcbiAgICAgICAgPHAgY2xhc3M9XCJhcHAtZGlhbG9nLWRlc2NyaXB0aW9uXCIgW2lkXT1cImRlc2NyaXB0aW9uSWRcIj57eyBkZXNjcmlwdGlvbiB9fTwvcD5cclxuICAgICAgfVxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYXBwLWRpYWxvZy1ib2R5XCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxmb290ZXIgY2xhc3M9XCJhcHAtZGlhbG9nLWZvb3RlclwiPlxyXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlthcHBEaWFsb2dGb290ZXJdXCIgLz5cclxuICAgICAgPC9mb290ZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxufVxyXG4iXX0=